示例#1
0
        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));
        }
示例#2
0
        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());
        }