コード例 #1
0
        public void CheckVerificationMalformedSignature()
        {
            var randomKey = KeyWallet.Create();
            var from      = wallet.GetAddress();
            var to        = new Address("hx5bfdb090f43a808005ffc27c25b213145e80b7cd");

            var transaction = TransactionBuilder.CreateBuilder()
                              .Nid(NetworkId.Main)
                              .From(from)
                              .To(to)
                              .Value(BigInteger.Parse("0de0b6b3a7640000", NumberStyles.AllowHexSpecifier))
                              .StepLimit(BigInteger.Parse("12345", NumberStyles.AllowHexSpecifier))
                              .Timestamp(BigInteger.Parse("563a6cf330136", NumberStyles.AllowHexSpecifier))
                              .Nonce(BigInteger.Parse("1"))
                              .Build();

            var signedTransaction = new SignedTransaction(transaction, wallet);
            var transactionProps  = signedTransaction.GetTransactionProperties();
            var allProps          = signedTransaction.GetProperties();
            var hash      = SignedTransaction.GetTransactionHash(transactionProps);
            var signature = Base64.Decode(allProps.GetItem("signature").ToString());

            signature[64] = 212;
            var result = EcdsaSignature.VerifySignature(randomKey.GetAddress(), signature, hash);

            Assert.False(result);
        }
コード例 #2
0
        /// <inheritdoc />
        public byte[] Sign(byte[] data)
        {
            TransactionBuilder.CheckArgument(data, "hash not found");

            var signature = new EcdsaSignature(_privateKey);
            var sig       = signature.GenerateSignature(data);

            return(signature.RecoverableSerialize(sig, data));
        }
コード例 #3
0
ファイル: EcKey.cs プロジェクト: wtcoin/dotblock
        /// <summary>
        /// Verifies the given ECDSA signature against the message bytes using the public key bytes.
        /// </summary>
        public static bool Verify(byte[] data, EcdsaSignature signature, byte[] pubkey)
        {
            var signer = new ECDsaSigner();
            var q      = X9EcParameters.Curve.DecodePoint(pubkey);
            var ecp    = new ECPublicKeyParameters("EC", q, EcParams);

            signer.Init(false, ecp);
            return(signer.VerifySignature(data, signature.R, signature.S));
        }
コード例 #4
0
ファイル: EcKey.cs プロジェクト: wtcoin/dotblock
            public override bool Equals(object o)
            {
                if (this == o)
                {
                    return(true);
                }

                if (o == null)
                {
                    return(false);
                }

                EcdsaSignature other = (EcdsaSignature)o;

                return(this.R.Equals(other.R) && this.S.Equals(other.S));
            }
コード例 #5
0
        public static SignedTransaction Deserialize(string transactionSerialized)
        {
            var(transaction, rpcObject) = TransactionDeserializer.DeserializeToTransactionAndRpc(transactionSerialized);
            var signature = rpcObject.GetItem("signature");

            if (signature == null)
            {
                throw new InvalidOperationException("Signature is not provided");
            }

            var sign            = Base64.Decode(signature.ToString());
            var sender          = transaction.GetFrom();
            var props           = GetTransactionProperties(transaction);
            var transactionHash = GetTransactionHash(props);

            if (!EcdsaSignature.VerifySignature(sender, sign, transactionHash))
            {
                throw new ArgumentException("Signature does not match", nameof(transactionSerialized));
            }

            var signedTransaction = new SignedTransaction(transaction, rpcObject);

            return(signedTransaction);
        }
コード例 #6
0
ファイル: EcKey.cs プロジェクト: wtcoin/dotblock
 /// <summary>
 /// Verifies the given ECDSA signature against the message bytes using the public key bytes.
 /// </summary>
 public bool Verify(byte[] data, EcdsaSignature signature)
 {
     return(Verify(data, signature, this.PublicKeyBytes));
 }