private void HandleSpecificPacket(KexInit packet) { _Logger.LogDebug("Received KexInit packet."); if (_PendingExchangeContext == null) { _Logger.LogDebug("Re-exchanging keys!"); _PendingExchangeContext = new ExchangeContext(); Send(_KexInitServerToClient); } _KexInitClientToServer = packet; _PendingExchangeContext.KexAlgorithm = packet.PickKexAlgorithm(); _PendingExchangeContext.HostKeyAlgorithm = packet.PickHostKeyAlgorithm(); _PendingExchangeContext.CipherClientToServer = packet.PickCipherClientToServer(); _PendingExchangeContext.CipherServerToClient = packet.PickCipherServerToClient(); _PendingExchangeContext.MACAlgorithmClientToServer = packet.PickMACAlgorithmClientToServer(); _PendingExchangeContext.MACAlgorithmServerToClient = packet.PickMACAlgorithmServerToClient(); _PendingExchangeContext.CompressionClientToServer = packet.PickCompressionAlgorithmClientToServer(); _PendingExchangeContext.CompressionServerToClient = packet.PickCompressionAlgorithmServerToClient(); _Logger.LogDebug($"Selected KexAlgorithm: {_PendingExchangeContext.KexAlgorithm.Name}"); _Logger.LogDebug($"Selected HostKeyAlgorithm: {_PendingExchangeContext.HostKeyAlgorithm.Name}"); _Logger.LogDebug($"Selected CipherClientToServer: {_PendingExchangeContext.CipherClientToServer.Name}"); _Logger.LogDebug($"Selected CipherServerToClient: {_PendingExchangeContext.CipherServerToClient.Name}"); _Logger.LogDebug($"Selected MACAlgorithmClientToServer: {_PendingExchangeContext.MACAlgorithmClientToServer.Name}"); _Logger.LogDebug($"Selected MACAlgorithmServerToClient: {_PendingExchangeContext.MACAlgorithmServerToClient.Name}"); _Logger.LogDebug($"Selected CompressionClientToServer: {_PendingExchangeContext.CompressionClientToServer.Name}"); _Logger.LogDebug($"Selected CompressionServerToClient: {_PendingExchangeContext.CompressionServerToClient.Name}"); }
private void HandleSpecificPacket(NewKeys packet) { _Logger.LogDebug("Received NewKeys"); _ActiveExchangeContext = _PendingExchangeContext; _PendingExchangeContext = null; // Reset re-exchange values _TotalBytesTransferred = 0; _KeyTimeout = DateTime.UtcNow.AddHours(1); }
private void ConsiderReExchange() { const long OneGB = (1024 * 1024 * 1024); if ((_TotalBytesTransferred > OneGB) || (_KeyTimeout < DateTime.UtcNow)) { // Time to get new keys! _TotalBytesTransferred = 0; _KeyTimeout = DateTime.UtcNow.AddHours(1); _Logger.LogDebug("Trigger re-exchange from server"); _PendingExchangeContext = new ExchangeContext(); Send(_KexInitServerToClient); } }