public bool VerifySignature(ECPoint publicKey, byte[] hash, BigInteger r, BigInteger s) { if (r >= Secp256k1.N || r.IsZero || s >= Secp256k1.N || s.IsZero) { return(false); } var z = hash.ToBigIntegerUnsigned(true); var w = s.ModInverse(Secp256k1.N); var u1 = (z * w) % Secp256k1.N; var u2 = (r * w) % Secp256k1.N; var pt = Secp256k1.G.Multiply(u1).Add(publicKey.Multiply(u2)).Normalize(); var pmod = pt.X % Secp256k1.N; return(pmod == r); }
public bool VerifySignature(ECPoint publicKey, byte[] hash, BigInteger r, BigInteger s) { if (r >= Secp256k1.N || r.IsZero || s >= Secp256k1.N || s.IsZero) { return false; } var z = hash.ToBigIntegerUnsigned(true); var w = s.ModInverse(Secp256k1.N); var u1 = (z * w) % Secp256k1.N; var u2 = (r * w) % Secp256k1.N; var pt = Secp256k1.G.Multiply(u1).Add(publicKey.Multiply(u2)); var pmod = pt.X % Secp256k1.N; return pmod == r; }