示例#1
0
        public ECDHEKeyExchange(
            IServiceProvider serviceProvider,
            IRandom random,

            MasterSecretCalculator masterSecretCalculator,
            CipherSuitesRegistry cipherSuitesRegistry,
            NamedCurvesRegistry namedCurvesRegistry,

            ECDHExchangeConfig ecdhExchangeConfig,
            SupportedGroupsConfig supportedGroupsConfig,
            CertificateConfig certificateConfig)
            : base(
                masterSecretCalculator,
                cipherSuitesRegistry,

                ecdhExchangeConfig,
                certificateConfig)
        {
            _serviceProvider = serviceProvider;
            _random          = random;

            _namedCurvesRegistry = namedCurvesRegistry;

            _supportedGroupsConfig = supportedGroupsConfig;
        }
示例#2
0
        protected ECDHKeyExchangeBase(
            MasterSecretCalculator masterSecretCalculator,
            CipherSuitesRegistry cipherSuitesRegistry,


            ECDHExchangeConfig ecdhExchangeConfig,
            CertificateConfig certificateConfig)
        {
            MasterSecretCalculator = masterSecretCalculator;
            CipherSuitesRegistry   = cipherSuitesRegistry;

            ECDHExchangeConfig = ecdhExchangeConfig;
            CertificateConfig  = certificateConfig;
        }
示例#3
0
        public SignatureAlgorithmsExtension(
            ICipherSuitesProvider cipherSuiteProvider,
            CipherSuitesRegistry cipherSuitesRegistry,

            HashAlgorithmRegistry hashAlgorithmRegistry,
            SignatureAlgorithmsRegistry signatureAlgorithmsRegistry,

            EndConfig endConfig,
            Config config)
        {
            _cipherSuiteProvider  = cipherSuiteProvider;
            _cipherSuitesRegistry = cipherSuitesRegistry;

            _hashAlgorithmRegistry       = hashAlgorithmRegistry;
            _signatureAlgorithmsRegistry = signatureAlgorithmsRegistry;

            _endConfig = endConfig;
            _config    = config;
        }
示例#4
0
        public virtual bool IsCompatible(CipherSuite cipherSuite, X509Certificate certificate)
        {
            var signatureAlgorithm = CipherSuitesRegistry.MapSignatureAlgorithm(cipherSuite);
            var requiresECKey      = Equals(CipherSuitesRegistry.MapKeyExchange(cipherSuite), ECIdentifiers.ECDH);

            if (signatureAlgorithm.Equals(ECIdentifiers.ECDSA))
            {
                if (certificate.SignatureAlgorithm.Algorithm != ECIdentifiers.ECDSAWithSHA256)
                {
                    return(false);
                }

                if (!(certificate.SubjectPublicKey is ECPublicKey))
                {
                    return(false);
                }

                return(true);
            }

            if (signatureAlgorithm.Equals(RSAIdentifiers.RSASig))
            {
                if (!RSAKeyReader.IsRSAIdentifier(certificate.SignatureAlgorithm.Algorithm))
                {
                    return(false);
                }

                if (requiresECKey && !(certificate.SubjectPublicKey is ECPublicKey))
                {
                    return(false);
                }

                if (!requiresECKey && !(certificate.SubjectPublicKey is RSAPublicKey))
                {
                    return(false);
                }

                return(true);
            }

            return(false);
        }
示例#5
0
        public ECDHKeyExchange(
            MasterSecretCalculator masterSecretCalculator,
            CertificateManager certificateManager,
            CipherSuitesRegistry cipherSuitesRegistry,
            NamedCurvesRegistry namedCurvesRegistry,

            ECDHExchangeConfig ecdhExchangeConfig,
            SupportedGroupsConfig supportedGroupsConfig,
            CertificateConfig certificateConfig)
            : base(
                masterSecretCalculator,
                cipherSuitesRegistry,

                ecdhExchangeConfig,
                certificateConfig)
        {
            _certificateManager  = certificateManager;
            _namedCurvesRegistry = namedCurvesRegistry;

            _supportedGroupsConfig = supportedGroupsConfig;
        }
        public CipherSuitesProvider(
            CipherSuitesRegistry registry,

            CipherAlgorithmRegistry cipherAlgorithmRegistry,
            HashAlgorithmRegistry hashAlgorithmRegistry,
            PRFHashRegistry prfHashRegistry,
            SignatureAlgorithmsRegistry signatureAlgorithmsRegistry,
            IKeyExchangeProvider keyExchangeProvider,

            ICipherParameterFactoryProvider cipherParameterFactoryProvider,
            ISignatureCipherParameterFactoryProvider signatureCipherParameterFactoryProvider)
        {
            _registry = registry;

            _cipherAlgorithmRegistry     = cipherAlgorithmRegistry;
            _hashAlgorithmRegistry       = hashAlgorithmRegistry;
            _prfHashRegistry             = prfHashRegistry;
            _signatureAlgorithmsRegistry = signatureAlgorithmsRegistry;
            _keyExchangeProvider         = keyExchangeProvider;

            _cipherParameterFactoryProvider          = cipherParameterFactoryProvider;
            _signatureCipherParameterFactoryProvider = signatureCipherParameterFactoryProvider;
        }
示例#7
0
        public SendingClientHelloState(
            IServiceProvider serviceProvider,
            ICipherSuitesProvider cipherSuitesProvider,
            CipherSuitesRegistry cipherSuitesRegistry,

            IRandom random,
            HandshakeWriter writer,

            VersionConfig versionConfig,
            RandomConfig randomConfig,
            SessionConfig sessionConfig)
        {
            _serviceProvider      = serviceProvider;
            _cipherSuitesProvider = cipherSuitesProvider;
            _cipherSuitesRegistry = cipherSuitesRegistry;

            _random = random;
            _writer = writer;

            _versionConfig = versionConfig;
            _randomConfig  = randomConfig;
            _sessionConfig = sessionConfig;
        }
        public static IReadOnlyCollection <CipherSuite> GetAllSupportedSuites(this ICipherSuitesProvider cipherSuiteProvider, CipherSuitesRegistry cipherSuitesRegistry)
        {
            var suites = cipherSuitesRegistry.GetAll();

            return(suites
                   .Where(cipherSuiteProvider.IsSupported)
                   .OrderByDescending(x => x)
                   .ToList());
        }