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)); }
/// <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)); }
/// <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); }