protected override EncryptedHeader EncryptHeader(MessageHeader plainTextHeader, SymmetricAlgorithm algorithm, SecurityKeyIdentifier keyIdentifier, MessageVersion version, string id, MemoryStream stream)
        {
            EncryptedHeaderXml headerXml = new EncryptedHeaderXml(version)
            {
                SecurityTokenSerializer          = base.StandardsManager.SecurityTokenSerializer,
                EncryptionMethod                 = base.EncryptionAlgorithm,
                EncryptionMethodDictionaryString = base.EncryptionAlgorithmDictionaryString,
                KeyIdentifier  = keyIdentifier,
                Id             = id,
                MustUnderstand = this.MustUnderstand,
                Relay          = this.Relay,
                Actor          = this.Actor
            };

            headerXml.SetUpEncryption(algorithm, stream);
            return(new EncryptedHeader(plainTextHeader, headerXml, EncryptedHeaderXml.ElementName.Value, EncryptedHeaderXml.NamespaceUri.Value, version));
        }
        protected override EncryptedHeader EncryptHeader(MessageHeader plainTextHeader, SymmetricAlgorithm algorithm, 
            SecurityKeyIdentifier keyIdentifier, MessageVersion version, string id, MemoryStream stream)
        {
            // We are not reading EncryptedData from the wire here, hence pass false.
            EncryptedHeaderXml encryptedHeaderXml = new EncryptedHeaderXml(version, false);
            encryptedHeaderXml.SecurityTokenSerializer = this.StandardsManager.SecurityTokenSerializer;
            encryptedHeaderXml.EncryptionMethod = this.EncryptionAlgorithm;
            encryptedHeaderXml.EncryptionMethodDictionaryString = this.EncryptionAlgorithmDictionaryString;
            encryptedHeaderXml.KeyIdentifier = keyIdentifier;
            encryptedHeaderXml.Id = id;
            // The Encrypted Headers MustUnderstand, Relay and Actor attributes will always match the
            // Security Headers value. The values for these on the Encrypted Header and its decrypted 
            // form can be different.
            encryptedHeaderXml.MustUnderstand = this.MustUnderstand;
            encryptedHeaderXml.Relay = this.Relay;
            encryptedHeaderXml.Actor = this.Actor;

            encryptedHeaderXml.SetUpEncryption(algorithm, stream);

            return new EncryptedHeader(plainTextHeader, encryptedHeaderXml, EncryptedHeaderXml.ElementName.Value, EncryptedHeaderXml.NamespaceUri.Value, version);
        }
        protected override EncryptedHeader EncryptHeader(MessageHeader plainTextHeader, SymmetricAlgorithm algorithm,
                                                         SecurityKeyIdentifier keyIdentifier, MessageVersion version, string id, MemoryStream stream)
        {
            // We are not reading EncryptedData from the wire here, hence pass false.
            EncryptedHeaderXml encryptedHeaderXml = new EncryptedHeaderXml(version, false);

            encryptedHeaderXml.SecurityTokenSerializer          = this.StandardsManager.SecurityTokenSerializer;
            encryptedHeaderXml.EncryptionMethod                 = this.EncryptionAlgorithm;
            encryptedHeaderXml.EncryptionMethodDictionaryString = this.EncryptionAlgorithmDictionaryString;
            encryptedHeaderXml.KeyIdentifier = keyIdentifier;
            encryptedHeaderXml.Id            = id;
            // The Encrypted Headers MustUnderstand, Relay and Actor attributes will always match the
            // Security Headers value. The values for these on the Encrypted Header and its decrypted
            // form can be different.
            encryptedHeaderXml.MustUnderstand = this.MustUnderstand;
            encryptedHeaderXml.Relay          = this.Relay;
            encryptedHeaderXml.Actor          = this.Actor;

            encryptedHeaderXml.SetUpEncryption(algorithm, stream);

            return(new EncryptedHeader(plainTextHeader, encryptedHeaderXml, EncryptedHeaderXml.ElementName.Value, EncryptedHeaderXml.NamespaceUri.Value, version));
        }