static void Main(string[] args) { IPEndPoint point = new IPEndPoint(IPAddress.Parse(ip), port); Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); TlsServerManager serverManager = new TlsServerManager(); RsaManager rsaManager = new RsaManager(); serverSocket.Bind(point); try { Console.WriteLine("Server is listeting"); serverSocket.Listen(1); using (var socketHandler = serverSocket.Accept()) { Console.WriteLine("Connected!"); byte[] buffer = new byte[256]; StringBuilder builder = new StringBuilder(); string serverHello = serverManager.GetConnectMessage(); buffer = Encoding.Unicode.GetBytes(serverHello); socketHandler.Send(buffer); do { int bytes = socketHandler.Receive(buffer); builder.Append(Encoding.Unicode.GetString(buffer, 0, bytes)); } while (socketHandler.Available > 0); string clientHello = builder.ToString(); serverManager.SetClientPublicKey(serverManager.ParseConnectAnswer(clientHello)); string message; bool isSuccess; while (true) { Console.Write($"{DateTime.Now} You: "); message = Console.ReadLine(); socketHandler.Send(SerializateMessage(message, serverManager, rsaManager)); while (socketHandler.Available == 0) { Thread.Sleep(100); } buffer = new byte[socketHandler.Available]; socketHandler.Receive(buffer); string answer = DeserializateMessage(buffer, serverManager, rsaManager, out isSuccess); if (isSuccess) { Console.WriteLine($"{DateTime.Now} Client: {answer}"); } } } } catch (Exception e) { Console.WriteLine(e); } }
public void ParseConnectManager_GetNumber_ReturnTrue() { string answer = (new Random()).Next(0, int.MaxValue).ToString(); TlsServerManager manager = new TlsServerManager(); Assert.AreEqual(answer, manager.ParseConnectAnswer(answer)); }
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); }