/// <summary> /// Creates the server side cipher to use. /// </summary> /// <returns>Server cipher.</returns> public Cipher CreateServerCipher() { // Resolve Session ID var sessionId = Session.SessionId ?? ExchangeHash; // Calculate server to client initial IV var serverVector = Hash(GenerateSessionKey(SharedKey, ExchangeHash, 'B', sessionId)); // Calculate server to client encryption var serverKey = Hash(GenerateSessionKey(SharedKey, ExchangeHash, 'D', sessionId)); serverKey = GenerateSessionKey(SharedKey, ExchangeHash, serverKey, _serverCipherInfo.KeySize / 8); // Create server cipher return(_serverCipherInfo.Cipher(serverKey, serverVector)); }
/// <summary> /// Creates the client side cipher to use. /// </summary> /// <returns>Client cipher.</returns> public Cipher CreateClientCipher() { // Resolve Session ID var sessionId = Session.SessionId ?? ExchangeHash; // Calculate client to server initial IV var clientVector = Hash(GenerateSessionKey(SharedKey, ExchangeHash, 'A', sessionId)); // Calculate client to server encryption var clientKey = Hash(GenerateSessionKey(SharedKey, ExchangeHash, 'C', sessionId)); clientKey = GenerateSessionKey(SharedKey, ExchangeHash, clientKey, _clientCipherInfo.KeySize / 8); // Create client cipher return(_clientCipherInfo.Cipher(clientKey, clientVector)); }
/// <summary> /// Creates the server side cipher to use. /// </summary> /// <returns>Server cipher.</returns> public Cipher CreateServerCipher() { // Resolve Session ID var sessionId = Session.SessionId ?? ExchangeHash; // Calculate server to client initial IV var serverVector = Hash(GenerateSessionKey(SharedKey, ExchangeHash, 'B', sessionId)); // Calculate server to client encryption var serverKey = Hash(GenerateSessionKey(SharedKey, ExchangeHash, 'D', sessionId)); serverKey = GenerateSessionKey(SharedKey, ExchangeHash, serverKey, _serverCipherInfo.KeySize / 8); DiagnosticAbstraction.Log(string.Format("[{0}] Creating server cipher (Name:{1},Key:{2},IV:{3})", Session.ToHex(Session.SessionId), Session.ConnectionInfo.CurrentServerEncryption, Session.ToHex(serverKey), Session.ToHex(serverVector))); // Create server cipher return(_serverCipherInfo.Cipher(serverKey, serverVector)); }