public bool Verify(byte[] data, byte[] r, byte[] s) { var gost3411 = new GOST_3411_94(); var h = gost3411.GetHashe(data, new byte[32]); var w = new BigInteger(h) % Q; var u1 = (new BigInteger(s) / w) % Q; var u2 = ((Q - new BigInteger(r)) / w) % Q; return((BigInteger.ModPow(A, u1, P) * BigInteger.ModPow(Y, u2, P) % P) % Q == new BigInteger(r)); }
public (byte[], byte[]) Sign(byte[] data) { var gost3411 = new GOST_3411_94(); var h = gost3411.GetHashe(data, new byte[32]); var k = RandBigInt(Q); var r = BigInteger.ModPow(A, k, P) % Q; var s = (k * new BigInteger(h) + X * r) % Q; return(r.ToByteArray(), s.ToByteArray()); }