示例#1
0
        public void HandleClientKeyExchange(ClientKeyExchangeMessage message)
        {
            var dhMessage       = DHClientKeyExchangeMessage.Read(message.Body);
            var sharedSecret    = DHCalculator.Calculate(dhMessage.Yc, _dhExchangeConfig.X, _dhParameterConfig.P);
            var preMasterSecret = sharedSecret.ToByteArray(Endianness.BigEndian);

            var masterSecret = _masterSecretCalculator.Compute(preMasterSecret);

            _masterSecretCalculator.ComputeKeysAndUpdateConfig(masterSecret);
        }
示例#2
0
        public IEnumerable <HandshakeMessage> GenerateServerHandshakeMessages()
        {
            if (_certificateConfig.CertificateChain is null)
            {
                throw new InvalidOperationException("Certificate chain is not initialized");
            }

            // 512 is "approx" 256-bits of security
            _dhExchangeConfig.X = _random.RandomBig(512);

            var ys = DHCalculator.Calculate(_dhParameterConfig.G, _dhExchangeConfig.X, _dhParameterConfig.P);

            yield return(new CertificateMessage(_certificateConfig.CertificateChain));

            yield return(new DHServerKeyExchangeMessage(_serviceProvider, _dhParameterConfig.P, _dhParameterConfig.G, ys));
        }
示例#3
0
        public void HandleServerKeyExchange(ServerKeyExchangeMessage message)
        {
            var dhMessage = DHServerKeyExchangeMessage.Read(_serviceProvider, message.Data);

            _dhParameterConfig.G = dhMessage.G;
            _dhParameterConfig.P = dhMessage.P;

            // 512 is "approx" 256-bits of security
            _dhExchangeConfig.X = _random.RandomBig(512);

            var sharedSecret    = DHCalculator.Calculate(dhMessage.Ys, _dhExchangeConfig.X, _dhParameterConfig.P);
            var preMasterSecret = sharedSecret.ToByteArray(Endianness.BigEndian);

            var masterSecret = _masterSecretCalculator.Compute(preMasterSecret);

            _masterSecretCalculator.ComputeKeysAndUpdateConfig(masterSecret);
        }
示例#4
0
        public IEnumerable <HandshakeMessage> GenerateClientHandshakeMessages()
        {
            var yc = DHCalculator.Calculate(_dhParameterConfig.G, _dhExchangeConfig.X, _dhParameterConfig.P);

            yield return(new DHClientKeyExchangeMessage(yc));
        }
        private BigInteger CalculateDH(BigInteger @base)
        {
            var key = GetPrivateKey();

            return(DHCalculator.Calculate(@base, key.X, key.DHPublicKey.P));
        }