コード例 #1
0
        public bool Verify(byte[] signature, byte[] data, uint160 nonce)
        {
            byte[]       output    = new byte[256];
            var          msg       = Utils.Combine(nonce.ToBytes(), data);
            Sha512Digest sha512    = new Sha512Digest();
            var          generator = new Mgf1BytesGenerator(sha512);

            generator.Init(new MgfParameters(msg));
            generator.GenerateBytes(output, 0, output.Length);
            var input = new BigInteger(1, output);

            if (input.CompareTo(this._Key.Modulus) >= 0)
            {
                return(false);
            }
            if (signature.Length > 256)
            {
                return(false);
            }
            var signatureInt = new BigInteger(1, signature);

            if (signatureInt.CompareTo(this._Key.Modulus) >= 0)
            {
                return(false);
            }
            var engine = new RsaBlindedEngine();

            engine.Init(false, this._Key);
            return(input.Equals(engine.ProcessBlock(signatureInt)));
        }
コード例 #2
0
ファイル: RsaKey.cs プロジェクト: RedstonePlatform/Redstone
        public byte[] Sign(byte[] data, out uint160 nonce)
        {
            while (true)
            {
                byte[] output = new byte[256];
                nonce = new uint160(RandomUtils.GetBytes(20));
                Sha512Digest sha512    = new Sha512Digest();
                var          msg       = Utils.Combine(nonce.ToBytes(), data);
                var          generator = new Mgf1BytesGenerator(sha512);
                generator.Init(new MgfParameters(msg));
                generator.GenerateBytes(output, 0, output.Length);
                var input = new BigInteger(1, output);
                if (input.CompareTo(this._Key.Modulus) >= 0)
                {
                    continue;
                }
                var engine = new RsaBlindedEngine();
                engine.Init(true, this._Key);

                return(engine.ConvertOutput(engine.ProcessBlock(input)));
            }
        }