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); }
/// <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)); }
/// <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)); }
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)); }
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); }
/// <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)); }