public EncryptedClientDataContainer() { RSAHandler = new RSACryptographyHandler(); AESHandler = new AESCryptographyHandler(); EncryptNextMessageSync = true; EncryptNextMessageAsync = true; }
public EncryptedTcpServer(string serverPublicPrivateKey, int dataPort = DefaultDataPort, int eventPort = DefaultEventPort) : base(dataPort, eventPort) { _serverCryptographyHandler = new RSACryptographyHandler(); if (serverPublicPrivateKey != null) { _serverCryptographyHandler.PrivateKey = serverPublicPrivateKey; } _clients = new Dictionary <TcpConnectedHost, EncryptedClientDataContainer>(); Register(HandleRSAKeyExchangeRequest); Register(HandleAESKeyExchangeRequest); Register(HandleAESInitializationVectorExchangeRequest); }
private void Init(string serverPublicKey = null) { _asyncServerCryptographyHandler = new RSACryptographyHandler(); _asyncClientCryptographyHandler = new RSACryptographyHandler { IsReady = true }; _syncCryptographyHandler = new AESCryptographyHandler(); // Send client's RSA public key and request the server's RSA public key var request = new TcpMessage("rsakey") { Content = _asyncClientCryptographyHandler.PublicKey }; var response = SendAndReceive(request); if (response.HasType("rsakey")) { var key = response.Content; if (!string.IsNullOrEmpty(serverPublicKey) && !serverPublicKey.Equals(key)) { throw new Exception("Server did not return correct public key"); } _asyncServerCryptographyHandler.PublicKey = key; } // Request the AES key from the server request = new TcpMessage("aeskey"); response = SendAndReceive(request); if (response.HasType("aeskey")) { _syncCryptographyHandler.KeyAsString = response.Content; } // Request the AES initialization vector from the server request = new TcpMessage("aesiv"); response = SendAndReceive(request); if (response.HasType("aesiv")) { _syncCryptographyHandler.InitializationVectorAsString = response.Content; } }