protected ReceiveSecurityHeader ConfigureReceiveSecurityHeader(Message message, string actor, SecurityProtocolCorrelationState[] correlationStates, SecurityStandardsManager standardsManager, out IList <SupportingTokenAuthenticatorSpecification> supportingAuthenticators)
        {
            System.ServiceModel.Security.MessageSecurityProtocolFactory messageSecurityProtocolFactory = this.MessageSecurityProtocolFactory;
            MessageDirection      transferDirection = messageSecurityProtocolFactory.ActAsInitiator ? MessageDirection.Output : MessageDirection.Input;
            ReceiveSecurityHeader securityHeader    = this.CreateSecurityHeader(message, actor, transferDirection, standardsManager);
            string action = message.Headers.Action;

            supportingAuthenticators = base.GetSupportingTokenAuthenticatorsAndSetExpectationFlags(this.factory, message, securityHeader);
            if (messageSecurityProtocolFactory.RequireIntegrity || securityHeader.ExpectSignedTokens)
            {
                securityHeader.RequiredSignatureParts = messageSecurityProtocolFactory.GetIncomingSignatureParts(action);
            }
            if (messageSecurityProtocolFactory.RequireConfidentiality || securityHeader.ExpectBasicTokens)
            {
                securityHeader.RequiredEncryptionParts = messageSecurityProtocolFactory.GetIncomingEncryptionParts(action);
            }
            securityHeader.ExpectEncryption = messageSecurityProtocolFactory.RequireConfidentiality || securityHeader.ExpectBasicTokens;
            securityHeader.ExpectSignature  = messageSecurityProtocolFactory.RequireIntegrity || securityHeader.ExpectSignedTokens;
            securityHeader.SetRequiredProtectionOrder(messageSecurityProtocolFactory.MessageProtectionOrder);
            if ((messageSecurityProtocolFactory.ActAsInitiator && messageSecurityProtocolFactory.DoRequestSignatureConfirmation) && this.HasCorrelationState(correlationStates))
            {
                securityHeader.MaintainSignatureConfirmationState = true;
                securityHeader.ExpectSignatureConfirmation        = true;
                return(securityHeader);
            }
            if (!messageSecurityProtocolFactory.ActAsInitiator && messageSecurityProtocolFactory.DoRequestSignatureConfirmation)
            {
                securityHeader.MaintainSignatureConfirmationState = true;
                return(securityHeader);
            }
            securityHeader.MaintainSignatureConfirmationState = false;
            return(securityHeader);
        }
        protected SendSecurityHeader ConfigureSendSecurityHeader(Message message, string actor, IList <SupportingTokenSpecification> supportingTokens, SecurityProtocolCorrelationState correlationState)
        {
            System.ServiceModel.Security.MessageSecurityProtocolFactory messageSecurityProtocolFactory = this.MessageSecurityProtocolFactory;
            SendSecurityHeader securityHeader = base.CreateSendSecurityHeader(message, actor, messageSecurityProtocolFactory);

            securityHeader.SignThenEncrypt         = messageSecurityProtocolFactory.MessageProtectionOrder != MessageProtectionOrder.EncryptBeforeSign;
            securityHeader.EncryptPrimarySignature = messageSecurityProtocolFactory.MessageProtectionOrder == MessageProtectionOrder.SignBeforeEncryptAndEncryptSignature;
            if (messageSecurityProtocolFactory.DoRequestSignatureConfirmation && (correlationState != null))
            {
                if (messageSecurityProtocolFactory.ActAsInitiator)
                {
                    securityHeader.MaintainSignatureConfirmationState = true;
                    securityHeader.CorrelationState = correlationState;
                }
                else if (correlationState.SignatureConfirmations != null)
                {
                    securityHeader.AddSignatureConfirmations(correlationState.SignatureConfirmations);
                }
            }
            string action = message.Headers.Action;

            if (this.factory.ApplyIntegrity)
            {
                securityHeader.SignatureParts = this.factory.GetOutgoingSignatureParts(action);
            }
            if (messageSecurityProtocolFactory.ApplyConfidentiality)
            {
                securityHeader.EncryptionParts = this.factory.GetOutgoingEncryptionParts(action);
            }
            base.AddSupportingTokens(securityHeader, supportingTokens);
            return(securityHeader);
        }
 protected MessageSecurityProtocol(System.ServiceModel.Security.MessageSecurityProtocolFactory factory, EndpointAddress target, Uri via) : base(factory, target, via)
 {
     this.factory = factory;
 }
 protected MessageSecurityProtocol(System.ServiceModel.Security.MessageSecurityProtocolFactory factory, EndpointAddress target, Uri via) : base(factory, target, via)
 {
     this.factory = factory;
 }