Exemplo n.º 1
0
        static public PeerSecurityManager Create(PeerAuthenticationMode authenticationMode, bool signMessages, BindingContext context, XmlDictionaryReaderQuotas readerQuotas)
        {
            if (authenticationMode == PeerAuthenticationMode.None && !signMessages)
            {
                return(CreateDummy());
            }

            // test FIPS mode
            if (authenticationMode == PeerAuthenticationMode.Password)
            {
                try
                {
                    using (HMACSHA256 algo = new HMACSHA256())
                    {
                        using (SHA256Managed sha = new SHA256Managed()) { }
                    }
                }
                catch (InvalidOperationException e)
                {
                    DiagnosticUtility.TraceHandledException(e, TraceEventType.Information);
                    PeerExceptionHelper.ThrowInvalidOperation_InsufficientCryptoSupport(e);
                }
            }

            ChannelProtectionRequirements  reqs    = context.BindingParameters.Find <ChannelProtectionRequirements>();
            PeerSecurityCredentialsManager credman = GetCredentialsManager(authenticationMode, signMessages, context);

            if (credman.Credential != null)
            {
                //for compatibility with existing code:
                ValidateCredentialSettings(authenticationMode, signMessages, credman.Credential);
            }
            PeerSecurityManager manager = Create(authenticationMode, signMessages, credman, reqs, readerQuotas);

            credman.Parent = manager;
            manager.ApplyAuditBehaviorSettings(context);

            return(manager);
        }