protected override ISignatureValueSecurityElement CreateSupportingSignature(SecurityToken token, SecurityKeyIdentifier identifier, ISecurityElement elementToSign)
 {
     string str;
     XmlDictionaryString str2;
     SecurityKey key;
     SecurityAlgorithmSuite algorithmSuite = base.AlgorithmSuite;
     algorithmSuite.GetSignatureAlgorithmAndKey(token, out str, out key, out str2);
     SignedXml xml = new SignedXml(ServiceModelDictionaryManager.Instance, base.StandardsManager.SecurityTokenSerializer);
     SignedInfo signedInfo = xml.Signature.SignedInfo;
     signedInfo.CanonicalizationMethod = algorithmSuite.DefaultCanonicalizationAlgorithm;
     signedInfo.CanonicalizationMethodDictionaryString = algorithmSuite.DefaultCanonicalizationAlgorithmDictionaryString;
     signedInfo.SignatureMethod = str;
     signedInfo.SignatureMethodDictionaryString = str2;
     if (elementToSign.Id == null)
     {
         throw System.ServiceModel.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("ElementToSignMustHaveId")));
     }
     Reference reference = new Reference(ServiceModelDictionaryManager.Instance, "#" + elementToSign.Id, elementToSign) {
         DigestMethod = algorithmSuite.DefaultDigestAlgorithm,
         DigestMethodDictionaryString = algorithmSuite.DefaultDigestAlgorithmDictionaryString
     };
     reference.AddTransform(new ExclusiveCanonicalizationTransform());
     ((StandardSignedInfo) signedInfo).AddReference(reference);
     xml.ComputeSignature(key);
     if (identifier != null)
     {
         xml.Signature.KeyIdentifier = identifier;
     }
     return xml;
 }
コード例 #2
0
        private void ComputeSignature()
        {
            PreDigestedSignedInfo signedInfo = new PreDigestedSignedInfo(_dictionaryManager);
            signedInfo.AddEnvelopedSignatureTransform = true;
            signedInfo.CanonicalizationMethod = XD.ExclusiveC14NDictionary.Namespace.Value;
            signedInfo.SignatureMethod = _signingCreds.SignatureAlgorithm;
            signedInfo.DigestMethod = _signingCreds.DigestAlgorithm;
            signedInfo.AddReference(_referenceId, _hashStream.FlushHashAndGetValue(_preCanonicalTracingStream));

            SignedXml signedXml = new SignedXml(signedInfo, _dictionaryManager, _tokenSerializer);
            signedXml.ComputeSignature(_signingCreds.SigningKey);
            signedXml.Signature.KeyIdentifier = _signingCreds.SigningKeyIdentifier;
            signedXml.WriteTo(base.InnerWriter);
            ((IDisposable)_hashStream).Dispose();
            _hashStream = null;
        }
コード例 #3
0
        void ICanonicalWriterEndRootElementCallback.OnEndOfRootElement(XmlDictionaryWriter dictionaryWriter)
        {
            byte[] hashValue = this.hashStream.FlushHashAndGetValue();

            PreDigestedSignedInfo signedInfo = new PreDigestedSignedInfo(this.dictionaryManager);
            signedInfo.AddEnvelopedSignatureTransform = true;
            signedInfo.CanonicalizationMethod = SecurityAlgorithms.ExclusiveC14n;
            signedInfo.SignatureMethod = this.signingCredentials.SignatureAlgorithm;
            signedInfo.DigestMethod = this.signingCredentials.DigestAlgorithm;
            signedInfo.AddReference(this.assertionId, hashValue);

            SignedXml signedXml = new SignedXml(signedInfo, this.dictionaryManager, this.keyInfoSerializer);
            signedXml.ComputeSignature(this.signingCredentials.SigningKey);
            signedXml.Signature.KeyIdentifier = this.signingCredentials.SigningKeyIdentifier;
            signedXml.WriteTo(dictionaryWriter);
        }
コード例 #4
0
 void ICanonicalWriterEndRootElementCallback.OnEndOfRootElement(XmlDictionaryWriter dictionaryWriter)
 {
     byte[] digest = this.hashStream.FlushHashAndGetValue();
     PreDigestedSignedInfo signedInfo = new PreDigestedSignedInfo(this.dictionaryManager) {
         AddEnvelopedSignatureTransform = true,
         CanonicalizationMethod = "http://www.w3.org/2001/10/xml-exc-c14n#",
         SignatureMethod = this.signingCredentials.SignatureAlgorithm,
         DigestMethod = this.signingCredentials.DigestAlgorithm
     };
     signedInfo.AddReference(this.assertionId, digest);
     SignedXml xml = new SignedXml(signedInfo, this.dictionaryManager, this.keyInfoSerializer);
     xml.ComputeSignature(this.signingCredentials.SigningKey);
     xml.Signature.KeyIdentifier = this.signingCredentials.SigningKeyIdentifier;
     xml.WriteTo(dictionaryWriter);
 }