Exemple #1
0
        public void HandleClientKeyExchange(ClientKeyExchangeMessage message)
        {
            var preMasterSecret = ReadMessage(message.Body);

            var masterSecret = _masterSecretCalculator.Compute(preMasterSecret);

            // TODO return type?
            _masterSecretCalculator.ComputeKeysAndUpdateConfig(masterSecret);
        }
Exemple #2
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);
        }
Exemple #3
0
        public virtual void HandleClientKeyExchange(ClientKeyExchangeMessage message)
        {
            var qc = ReadMessage(message);

            var sharedSecret = CalculatePoint(qc);

            var preMasterSecret = sharedSecret.X.Value.ToByteArray(Endianness.BigEndian);

            var masterSecret = MasterSecretCalculator.Compute(preMasterSecret);

            MasterSecretCalculator.ComputeKeysAndUpdateConfig(masterSecret);
        }
        public HandleClientKeyExchangeState(
            IServiceProvider serviceProvider,
            ICipherSuitesProvider cipherSuitesProvider,

            CipherSuiteConfig cipherSuiteConfig,
            ClientKeyExchangeMessage handshake)
        {
            _serviceProvider      = serviceProvider;
            _cipherSuitesProvider = cipherSuitesProvider;

            _cipherSuiteConfig = cipherSuiteConfig;
            _handshake         = handshake;
        }
Exemple #5
0
        private Point ReadMessage(ClientKeyExchangeMessage message)
        {
            if (ECDHExchangeConfig.Parameters is null)
            {
                throw new InvalidOperationException("ECDHE parematers are not initialized");
            }

            SecurityAssert.Assert(message.Body.Length > 0);
            var length = message.Body[0];

            SecurityAssert.Assert(message.Body.Length == length + 1);

            var param = new byte[length];

            Array.Copy(message.Body, 1, param, 0, length);

            return(ECDHExchangeConfig.Parameters.Curve.PointFromBinary(param));
        }
        private void AddClientKeyExchange(OutgoingMessageBag outgoingMessages)
        {
            ClientKeyExchangeMessage clientKeyExchangeMessage = new ClientKeyExchangeMessage();

            byte[] premasterSecret = new byte[ClientKeyExchangeMessage.PreMasterSecretLength];
            m_rng.GetBytes(premasterSecret);

            RSACryptoServiceProvider rsa = RemoteCertificate.PublicKey.Key as RSACryptoServiceProvider;

            clientKeyExchangeMessage.EncryptedPreMasterSecret = rsa.Encrypt(premasterSecret, false);

            GenerateMasterSecret(premasterSecret);

            NetMQMessage outgoingMessage = clientKeyExchangeMessage.ToNetMQMessage();

            HashLocalAndRemote(outgoingMessage);
            outgoingMessages.AddHandshakeMessage(outgoingMessage);
            m_lastSentMessage = HandshakeType.ClientKeyExchange;
        }
Exemple #7
0
        /// <exception cref="NetMQSecurityException">The client key exchange must not be received while expecting a another message.</exception>
        private void OnClientKeyExchange(NetMQMessage incomingMessage)
        {
            if (m_lastReceivedMessage != HandshakeType.ClientHello || m_lastSentMessage != HandshakeType.ServerHelloDone)
            {
                throw new NetMQSecurityException(NetMQSecurityErrorCode.HandshakeUnexpectedMessage, "Client Key Exchange received when expecting another message");
            }

            HashLocalAndRemote(incomingMessage);

            var clientKeyExchangeMessage = new ClientKeyExchangeMessage();

            clientKeyExchangeMessage.SetFromNetMQMessage(incomingMessage);

            var rsa = LocalCertificate.PrivateKey as RSACryptoServiceProvider;

            byte[] premasterSecret = rsa.Decrypt(clientKeyExchangeMessage.EncryptedPreMasterSecret, false);

            GenerateMasterSecret(premasterSecret);

            InvokeChangeCipherSuite();
        }
        private void AddClientKeyExchange(OutgoingMessageBag outgoingMessages)
        {
            var clientKeyExchangeMessage = new ClientKeyExchangeMessage();

            var premasterSecret = new byte[ClientKeyExchangeMessage.PreMasterSecretLength];

            m_rng.GetBytes(premasterSecret);

            using (var rsa = RemoteCertificate.GetRSAPublicKey())                                                             // .PublicKey.Key as RSA; //RSACryptoServiceProvider;
            {
                clientKeyExchangeMessage.EncryptedPreMasterSecret = rsa.Encrypt(premasterSecret, RSAEncryptionPadding.Pkcs1); // false);
            }

            GenerateMasterSecret(premasterSecret);

            NetMQMessage outgoingMessage = clientKeyExchangeMessage.ToNetMQMessage();

            HashLocalAndRemote(outgoingMessage);
            outgoingMessages.AddHandshakeMessage(outgoingMessage);
            m_lastSentMessage = HandshakeType.ClientKeyExchange;
        }
Exemple #9
0
 public virtual void HandleClientKeyExchange(ClientKeyExchangeMessage message)
 {
     _server.HandleClientKeyExchange(message);
 }
        public static HandleClientKeyExchangeState New(IServiceProvider serviceProvider, ClientKeyExchangeMessage handshake)
        {
            return(new HandleClientKeyExchangeState(
                       serviceProvider: serviceProvider,
                       cipherSuitesProvider: serviceProvider.GetRequiredService <ICipherSuitesProvider>(),

                       cipherSuiteConfig: serviceProvider.GetRequiredService <CipherSuiteConfig>(),
                       handshake: handshake
                       ));
        }