public void ComputeSignature(IMac macAlg) { if (macAlg == null) { throw new ArgumentNullException(nameof(macAlg)); } if (!(macAlg is HMac)) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_SignatureMethodKeyMismatch); } 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); } BuildDigestedReferences(); SignedInfo.SignatureMethod = (macAlg.AlgorithmName.Substring(0, macAlg.AlgorithmName.IndexOf('/')).ToUpperInvariant()) switch { "SHA-1" => SignedXml.XmlDsigHMACSHA1Url, "SHA-256" => SignedXml.XmlDsigMoreHMACSHA256Url, "SHA-384" => SignedXml.XmlDsigMoreHMACSHA384Url, "SHA-512" => SignedXml.XmlDsigMoreHMACSHA512Url, "MD5" => SignedXml.XmlDsigMoreHMACMD5Url, "RIPEMD160" => SignedXml.XmlDsigMoreHMACRIPEMD160Url, _ => throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_SignatureMethodKeyMismatch), }; GetC14NDigest(new MacHashWrapper(macAlg)); byte[] hashValue = new byte[macAlg.GetMacSize()]; macAlg.DoFinal(hashValue, 0); SignedXmlDebugLog.LogSigning(this, macAlg); m_signature.SignatureValue = new byte[signatureLength / 8]; Buffer.BlockCopy(hashValue, 0, m_signature.SignatureValue, 0, signatureLength / 8); }
public void ComputeSignature() { SignedXmlDebugLog.LogBeginSignatureComputation(this, _context); BuildDigestedReferences(); // Load the key AsymmetricKeyParameter key = SigningKey; if (key == null) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_LoadKeyFailed); } // Check the signature algorithm associated with the key so that we can accordingly set the signature method if (SignedInfo.SignatureMethod == null) { if (key is DsaKeyParameters) { SignedInfo.SignatureMethod = XmlDsigDSAUrl; } else if (key is RsaKeyParameters) { SignedInfo.SignatureMethod = XmlDsigRSASHA256Url; } else { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_CreatedKeyFailed); } } // See if there is a signature description class defined in the Config file ISigner signatureDescription = CryptoHelpers.CreateFromName <ISigner>(SignedInfo.SignatureMethod); if (signatureDescription == null) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_SignatureDescriptionNotCreated); } signatureDescription.Init(true, key); GetC14NDigest(new SignerHashWrapper(signatureDescription)); SignedXmlDebugLog.LogSigning(this, key, signatureDescription); m_signature.SignatureValue = signatureDescription.GenerateSignature(); }
public void ComputeSignature() { SignedXmlDebugLog.LogBeginSignatureComputation(this, _context); ReferenceManager.BuildDigestedReferences(this); AsymmetricKeyParameter key = SigningKey; if (key == null) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_LoadKeyFailed); } if (SignedInfo.SignatureMethod == null) { if (key is DsaKeyParameters) { SignedInfo.SignatureMethod = XmlNameSpace.Url[NS.XmlDsigDSAUrl]; } else if (key is RsaKeyParameters) { SignedInfo.SignatureMethod = XmlNameSpace.Url[NS.XmlDsigRSASHA256Url]; } else { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_CreatedKeyFailed); } } ISigner signatureDescription = CryptoHelpers.CreateFromName <ISigner>(SignedInfo.SignatureMethod); if (signatureDescription == null) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_SignatureDescriptionNotCreated); } signatureDescription.Init(true, key); CheckSignatureManager.GetC14NDigest(new SignerHashWrapper(signatureDescription), this); SignedXmlDebugLog.LogSigning(this, key, signatureDescription); MSignature.SetSignatureValue(signatureDescription.GenerateSignature()); }
public void ComputeSignature(IMac macAlg) { if (macAlg == null) { throw new ArgumentNullException(nameof(macAlg)); } if (!(macAlg is HMac)) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_SignatureMethodKeyMismatch); } int signatureLength; if (MSignature.SignedInfo.SignatureLength == null) { signatureLength = macAlg.GetMacSize() * 8; } else { signatureLength = Convert.ToInt32(MSignature.SignedInfo.SignatureLength, null); } 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); } ReferenceManager.BuildDigestedReferences(this); var algorithmName = macAlg.AlgorithmName.Substring(0, macAlg.AlgorithmName.IndexOf('/')).ToUpperInvariant(); var signedXmlDictionary = new Dictionary <string, NS>() { { "SHA-1", NS.XmlDsigHMACSHA1Url }, { "SHA-256", NS.XmlDsigMoreHMACSHA256Url }, { "SHA-384", NS.XmlDsigMoreHMACSHA384Url }, { "SHA-512", NS.XmlDsigMoreHMACSHA512Url }, { "MD5", NS.XmlDsigMoreHMACMD5Url }, { "RIPEMD160", NS.XmlDsigMoreHMACRIPEMD160Url } }; try { SignedInfo.SignatureMethod = XmlNameSpace.Url[signedXmlDictionary[algorithmName]]; } catch (Exception) { throw new System.Security.Cryptography.CryptographicException(SR.Cryptography_Xml_SignatureMethodKeyMismatch); } CheckSignatureManager.GetC14NDigest(new MacHashWrapper(macAlg), this); byte[] hashValue = new byte[macAlg.GetMacSize()]; macAlg.DoFinal(hashValue, 0); SignedXmlDebugLog.LogSigning(this, macAlg); MSignature.SetSignatureValue(new byte[signatureLength / 8]); Buffer.BlockCopy(hashValue, 0, MSignature.GetSignatureValue(), 0, signatureLength / 8); }