public static bool CheckSignedInfo(AsymmetricKeyParameter key, SignedXml signedXml, Signature m_signature) { if (key == null) { throw new ArgumentNullException(nameof(key)); } SignedXmlDebugLog.LogBeginCheckSignedInfo(signedXml, m_signature.SignedInfo); ISigner signatureDescription = CryptoHelpers.CreateFromName <ISigner>(signedXml.SignatureMethod); if (signatureDescription == null) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_SignatureDescriptionNotCreated); } try { signatureDescription.Init(false, key); } catch (Exception) { return(false); } CheckSignatureManager.GetC14NDigest(new SignerHashWrapper(signatureDescription), signedXml); return(signatureDescription.VerifySignature(m_signature.GetSignatureValue())); }
private bool CheckSignedInfo(IMac macAlg) { if (macAlg == null) { throw new ArgumentNullException(nameof(macAlg)); } SignedXmlDebugLog.LogBeginCheckSignedInfo(this, m_signature.SignedInfo); int signatureLength; if (m_signature.SignedInfo.SignatureLength == null) { signatureLength = macAlg.GetMacSize() * 8; } else { signatureLength = Convert.ToInt32(m_signature.SignedInfo.SignatureLength, null); } // signatureLength should be less than hash size if (signatureLength < 0 || signatureLength > macAlg.GetMacSize() * 8) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_InvalidSignatureLength); } if (signatureLength % 8 != 0) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_InvalidSignatureLength2); } if (m_signature.SignatureValue == null) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_SignatureValueRequired); } if (m_signature.SignatureValue.Length != signatureLength / 8) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_InvalidSignatureLength); } // Calculate the hash GetC14NDigest(new MacHashWrapper(macAlg)); byte[] hashValue = new byte[macAlg.GetMacSize()]; macAlg.DoFinal(hashValue, 0); SignedXmlDebugLog.LogVerifySignedInfo(this, macAlg, hashValue, m_signature.SignatureValue); for (int i = 0; i < m_signature.SignatureValue.Length; i++) { if (m_signature.SignatureValue[i] != hashValue[i]) { return(false); } } return(true); }
private bool CheckSignedInfo(AsymmetricKeyParameter key) { if (key == null) { throw new ArgumentNullException("key"); } SignedXmlDebugLog.LogBeginCheckSignedInfo(this, m_signature.SignedInfo); ISigner signatureDescription = CryptoHelpers.CreateFromName(SignatureMethod) as ISigner; if (signatureDescription == null) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_SignatureDescriptionNotCreated); } // Let's see if the key corresponds with the SignatureMethod /*Type ta = Type.GetType(signatureDescription.KeyAlgorithm); * if (!IsKeyTheCorrectAlgorithm(key, ta)) * return false;*/ try { signatureDescription.Init(false, key); } catch (Exception) { return(false); } GetC14NDigest(signatureDescription); /*SignedXmlDebugLog.LogVerifySignedInfo(this, * key, * signatureDescription, * hashAlgorithm, * asymmetricSignatureDeformatter, * hashval, * m_signature.SignatureValue);*/ return(signatureDescription.VerifySignature(m_signature.SignatureValue)); }