예제 #1
0
        public bool ValidateSignature(Signature signature, byte[] bytes)
        {
            bool                     valid     = false;
            KeyInfo                  keyInfo   = signature.KeyInfo;
            CspParameters            parameter = new CspParameters();
            RSACryptoServiceProvider rsa;
            DSACryptoServiceProvider dsa;
            XmlElement               KeyInfoXml = keyInfo.GetXml();
            Type                     type       = keyInfo.GetType();

            if (KeyInfoXml.FirstChild.FirstChild.Name.Equals("RSAKeyValue"))
            {
                rsa = new RSACryptoServiceProvider(parameter);
                rsa.FromXmlString(keyInfo.GetXml().InnerXml);
                RSAParameters param            = rsa.ExportParameters(false);
                byte[]        digestSignedInfo = this.DigestElement(signature.SignedInfo.GetXml(), "", "");
                XmlElement    signed           = signature.SignedInfo.GetXml();
                string        oid = CryptoConfig.MapNameToOID("SHA1");
                valid = rsa.VerifyHash(digestSignedInfo, oid, this._signedXml.SignatureValue);
            }
            else
            {
                dsa = new DSACryptoServiceProvider(parameter);
                dsa.FromXmlString(KeyInfoXml.InnerXml);
                byte[] digestSignedInfo = this.DigestElement(signature.SignedInfo.GetXml(), "", "");
                string oid = CryptoConfig.MapNameToOID("SHA1");
                valid = dsa.VerifyHash(digestSignedInfo, oid, this._signedXml.SignatureValue);
            }
            return(valid);
        }