Exemple #1
0
        private static bool VerifySignature(Gost3410AsymmetricAlgorithmBase publicKey, Stream dataStream, byte[] signature)
        {
            byte[] hash;

            using (var hashAlg = new Gost3411HashAlgorithm())
            {
                hash = hashAlg.ComputeHash(dataStream);
            }

            var deformatter = new GostSignatureDeformatter(publicKey);

            return(deformatter.VerifySignature(hash, signature));
        }
Exemple #2
0
        /// <summary>
        /// </summary>
        /// <param name="signedData"></param>
        /// <param name="chainValidate">Проверять цепочку сертификатов на отозванные сертификаты</param>
        /// <returns></returns>
        public bool VerifyN3Gost(string signedData, bool chainValidate = false)
        {
            var x509 = new X509Certificate2();

            var signData = new SerializationHelper <SignData>().Deserialize(signedData);
            var cspBlob  = Convert.FromBase64String(signData.PublicKey);

            x509.Import(cspBlob);
            if (chainValidate)
            {
                var chain = new X509Chain
                {
                    ChainPolicy =
                    {
                        RevocationFlag    = X509RevocationFlag.EntireChain,
                        RevocationMode    = X509RevocationMode.Online,
                        VerificationFlags = X509VerificationFlags.NoFlag
                    }
                };
                var verify = chain.Build(x509);
                if (!verify)
                {
                    return(false);
                }
            }

            var hash = Md5Helper.GetGost3411Hash(signData.Data);
            var sign = Convert.FromBase64String(signData.Sign);


            var rsaDeformatter = new GostSignatureDeformatter(x509.PublicKey.Key);

            rsaDeformatter.SetHashAlgorithm("Gost3411");

            return(rsaDeformatter.VerifySignature(hash, sign));
        }
Exemple #3
0
        /// <summary>
        /// </summary>
        /// <param name="signedData"></param>
        /// <param name="chainValidate">Проверять цепочку сертификатов на отозванные сертификаты</param>
        /// <returns></returns>
        public bool VerifyN3Gost(string signedData, bool chainValidate = false)
        {
            var x509 = new X509Certificate2();

            var signData = new SerializationHelper<SignData>().Deserialize(signedData);
            var cspBlob = Convert.FromBase64String(signData.public_key);
            x509.Import(cspBlob);
            if (chainValidate) {
                var chain = new X509Chain
                            {
                                ChainPolicy =
                                {
                                    RevocationFlag = X509RevocationFlag.EntireChain,
                                    RevocationMode = X509RevocationMode.Online,
                                    VerificationFlags = X509VerificationFlags.NoFlag
                                }
                            };
                var verify = chain.Build(x509);
                if (!verify) return false;
            }

            var hash = Md5Helper.GetGost3411Hash(signData.data);
            var sign = Convert.FromBase64String(signData.sign);

            var rsaDeformatter = new GostSignatureDeformatter(x509.PublicKey.Key);
            rsaDeformatter.SetHashAlgorithm("Gost3411");

            return rsaDeformatter.VerifySignature(hash, sign);
        }