public SignatureAlgorithmAndValueModel(SignatureAlgorithm alg, byte[] value) { if (alg == SignatureAlgorithm.MD5WithRSA) { AlgorithmIdentifier = SignatureAlgorithms.MD5WithRSA; } else if (alg == SignatureAlgorithm.SHA1WithRSA) { AlgorithmIdentifier = SignatureAlgorithms.SHA1WithRSA; } else if (alg == SignatureAlgorithm.SHA256WithRSA) { AlgorithmIdentifier = SignatureAlgorithms.SHA256WithRSA; } else if (alg == SignatureAlgorithm.SHA384WithRSA) { AlgorithmIdentifier = SignatureAlgorithms.SHA384WithRSA; } else if (alg == SignatureAlgorithm.SHA512WithRSA) { AlgorithmIdentifier = SignatureAlgorithms.SHA512WithRSA; } Value = value; HexValue = string.Join("", value.Select(b => b.ToString("X2"))); }
/// <summary> /// Sign and build. /// </summary> /// <param name="certificate"></param> /// <param name="digestMethod"></param> /// <param name="canonicalizationMethod"></param> /// <returns></returns> public XmlElement SignAndBuild(X509Certificate2 certificate, SignatureAlgorithms signatureAlgorithm, CanonicalizationMethods canonicalizationMethod) { var xmlDocument = _authRequest.SerializeToXmlDocument(); var signedRequest = new SamlSignedRequest(xmlDocument.DocumentElement, certificate, signatureAlgorithm, canonicalizationMethod); signedRequest.ComputeSignature(_authRequest.ID); var issuer = xmlDocument.DocumentElement.GetElementsByTagName("//Issuer", "urn:oasis:names:tc:SAML:2.0:assertion")[0] as XmlElement; xmlDocument.DocumentElement.InsertAfter(xmlDocument.ImportNode(signedRequest.GetXml(), true), issuer); return(xmlDocument.DocumentElement); }
private void FillSigAlgoAndKeyGens() { _sigAlgorithm.Clear(); foreach (var item in SignatureAlgorithms.ValuesFor(Model.KeyPairType)) { _sigAlgorithm.Add(item); } IEnumerable <TypeWrapper> gens = Reflection.FindImplementations <IAsymmetricCipherKeyPairGenerator>().Where( key => key.ToString().ToLower().Contains(Enum.GetName(typeof(KeyPairType), Model.KeyPairType).ToLower())); _keypairGen.Clear(); foreach (var item in gens) { _keypairGen.Add(item); } }
/// <summary> /// Sign and build. /// </summary> /// <param name="certificate"></param> /// <param name="digestMethod"></param> /// <param name="canonicalizationMethod"></param> /// <returns></returns> public ResponseType SignAndBuild(X509Certificate2 certificate, SignatureAlgorithms signatureAlgorithm, CanonicalizationMethods canonicalizationMethod) { foreach (var assertion in _response.Items.Where(i => i is AssertionType).Cast <AssertionType>()) { var assertionSigned = new SamlSignedRequest(assertion.SerializeToXmlElement(), certificate, signatureAlgorithm, canonicalizationMethod); assertionSigned.ComputeSignature(assertion.ID); var assertionSignature = assertionSigned.GetXml().OuterXml.DeserializeXml <SignatureType>(); assertion.Signature = assertionSignature; } var signedRequest = new SamlSignedRequest(_response.SerializeToXmlElement(), certificate, signatureAlgorithm, canonicalizationMethod); signedRequest.ComputeSignature(_response.ID); var signature = signedRequest.GetXml().OuterXml.DeserializeXml <SignatureType>(); _response.Signature = signature; return(_response); }
public static byte[] Compute(string str, SignatureAlgorithms sigAlg) { var hash = Constants.MappingSignatureAlgToHash[sigAlg]; if (hash == HashAlgorithmName.SHA1) { using (var sha1 = SHA1.Create()) { return(sha1.ComputeHash(Encoding.UTF8.GetBytes(str))); } } if (hash == HashAlgorithmName.SHA256) { using (var sha256 = SHA256.Create()) { return(sha256.ComputeHash(Encoding.UTF8.GetBytes(str))); } } return(null); }
internal SamlSignedRequest(XmlElement xmlElement, X509Certificate2 certificate, SignatureAlgorithms signatureAlgorithm, CanonicalizationMethods canonicalizationMethod) : base(xmlElement) { _certificate = certificate; _signatureAlgorithm = signatureAlgorithm; _canonicalizationMethod = canonicalizationMethod; }