Exemplo n.º 1
0
 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);
            }
        }
Exemplo n.º 4
0
        /// <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);
        }
Exemplo n.º 5
0
        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;
 }