static void Main(string[] args) { IPEndPoint point = new IPEndPoint(IPAddress.Parse(ip), port); Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); TlsClientManager clientManager = new TlsClientManager(); RsaManager rsaManager = new RsaManager(); try { clientSocket.Connect(point); StringBuilder builder = new StringBuilder(); byte[] buffer = new byte[256]; do { int bytes = clientSocket.Receive(buffer); builder.Append(Encoding.Unicode.GetString(buffer, 0, bytes)); } while (clientSocket.Available > 0); clientManager.ParseSetConnectMessage(builder.ToString()); builder.Clear(); clientSocket.Send(Encoding.Unicode.GetBytes(clientManager.GetConnectAnswer())); while (true) { while (clientSocket.Available == 0) { Thread.Sleep(100); } buffer = new byte[clientSocket.Available]; clientSocket.Receive(buffer); bool isSuccess; string message = DeserializateMessage(buffer, clientManager, rsaManager, out isSuccess); if (isSuccess) { Console.WriteLine($"{DateTime.Now} Server: {message}"); } Console.Write($"{DateTime.Now} You: "); string answer = Console.ReadLine(); clientSocket.Send(SerializateMessage(answer, clientManager, rsaManager)); } } catch (Exception e) { Console.WriteLine(e); Console.ReadKey(); } }
public void CompleteTest_EncryptAndDecryptMessage_ReturnTrue() { string message = RandomString((new Random()).Next(10, 1000)); TlsServerManager serverManager = new TlsServerManager(); string connectMessage = serverManager.GetConnectMessage(); TlsClientManager clientManager = new TlsClientManager(); clientManager.ParseSetConnectMessage(connectMessage); var answer = serverManager.ParseConnectAnswer(clientManager.GetConnectAnswer()); serverManager.SetClientPublicKey(answer); var IV = new byte[16]; byte[] hashSum = null; bool isSuccess; var encryptManag = serverManager.EncryptMessage(message, out IV, out hashSum); string result = clientManager.DecryptMessage(encryptManag, IV, hashSum, out isSuccess); Assert.IsTrue(isSuccess); }
public void TestSerialization() { string message = RandomString((new Random()).Next(10, 1000)); TlsServerManager serverManager = new TlsServerManager(); string connectMessage = serverManager.GetConnectMessage(); TlsClientManager clientManager = new TlsClientManager(); clientManager.ParseSetConnectMessage(connectMessage); var answer = serverManager.ParseConnectAnswer(clientManager.GetConnectAnswer()); clientManager.ClearData(); serverManager.SetClientPublicKey(answer); RsaManager rsaManager = new RsaManager(); byte[] resultSerialize = Server.Program.SerializateMessage(message, serverManager, rsaManager); bool isSuccess; string resultString = Server.Program.DeserializateMessage(resultSerialize, serverManager, rsaManager, out isSuccess); Assert.AreEqual(message, resultString); }