public void HandleClientKeyExchange(ClientKeyExchangeMessage message) { var preMasterSecret = ReadMessage(message.Body); var masterSecret = _masterSecretCalculator.Compute(preMasterSecret); // TODO return type? _masterSecretCalculator.ComputeKeysAndUpdateConfig(masterSecret); }
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); }
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; }
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; }
/// <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; }
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 )); }