Example #1
0
        private void KeyExchange()
        {
            //todo: add handling of an unsuccessful key exchange

            ReadServerPublicKey();

            AesKeyExchangeRequest keyExchangeRequest = new AesKeyExchangeRequest(aesEncryption.GetKey(), aesEncryption.GetIV(), UserName);

            tcpClient.Send(rsa.Encrypt(coding.GetBytes(JsonSerializer.Serialize(keyExchangeRequest)), false));

            byte[] rawResponse = tcpClient.GetMessage();

            Response response = ParseMessage <Response>(rawResponse, serverKey);

            if (response.Code == StatusCode.Ok)
            {
                userState = UserState.Connected;
            }
            else
            {
                Console.WriteLine(response.Message);
            }
        }
Example #2
0
        private void KeyExchange()
        {
            while (true)
            {
                // send to the client server public key [and other credentials]

                tcpClient.Send(server.rsa.ExportRSAPublicKey());

                // get key for symmetric encryption from client

                byte[] encryptedMessageWithKey = tcpClient.GetMessage();

                try
                {
                    byte[] messageWithKeyBytes  = server.rsa.Decrypt(encryptedMessageWithKey, false);
                    string messageWithKeyInJson = coding.Decode(messageWithKeyBytes);
                    AesKeyExchangeRequest aesKeyExchangeRequest = JsonSerializer.Deserialize <AesKeyExchangeRequest>(messageWithKeyInJson);

                    aesEncryption.SetKey(aesKeyExchangeRequest.Key);
                    aesEncryption.SetIV(aesKeyExchangeRequest.IV);

                    ClientAesKey = aesEncryption.GetKey();

                    AesKeyExchangeResponse response = new AesKeyExchangeResponse {
                        Code      = StatusCode.Ok,
                        RequestId = aesKeyExchangeRequest.Id
                    };

                    SendMessageAesEncrypted(response, ClientAesKey);
                    return;
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception.Message);
                }
            }
        }