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 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)); }
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); }
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)); }