Java TCP/IP wrapper with optional AES (256 bit) encryption and ZLIB compression.
Find a file
2025-07-24 13:47:54 +02:00
.idea Add load of files 2018-11-19 12:37:11 +01:00
doc change key exchange to X25519 and correct the use of AES encryption 2025-07-15 09:04:44 +02:00
src change key exchange to X25519 and correct the use of AES encryption 2025-07-24 13:47:54 +02:00
build.gradle change key exchange to X25519 and correct the use of AES encryption 2025-07-15 09:04:44 +02:00
id_dsa use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
id_dsa.pub use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
id_dsa_with_password_foobar use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
id_dsa_with_password_foobar.pub use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
id_ecdsa use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
id_ecdsa.pub use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
id_ecdsa_with_password_foobar use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
id_ecdsa_with_password_foobar.pub use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
id_rsa use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
id_rsa.pub use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
id_rsa_with_password_foobar use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
id_rsa_with_password_foobar.pub use bouncecastle for signing and encryption 2024-04-02 18:06:17 +02:00
LICENSE Add load of files 2018-11-19 12:37:11 +01:00
README.md change key exchange to X25519 and correct the use of AES encryption 2025-07-24 13:47:54 +02:00
settings.gradle change key exchange to X25519 and correct the use of AES encryption 2025-07-15 09:04:44 +02:00

TcpIpAux

Java TCP/IP wrapper with optional encryption and ZLIB compression. The utility is message/package oriented rather than stream oriented. Implicating that clients/server are send/receiving messages i.e. (byte buffers/vectors). The interface is asynchronous, implicating that the wrapper starts a reading thread and deliver read messages via a callback when messages becomes available.Client connection may be synchronous or asynchronous.

When creating a client it's possible to define whatever compression and or encryption should be used or not. Three modes are available

  • plain, plain socket without encryption and compression
  • encrypt, AES 256 bit encryption
  • compression, ZLIB compression

Further more it is also possible to configure the server to require that the initialization of a connection require thyat clients provides a SSH key authorization. Then configuring SSH authorization the server must have access to client public keys. When the client connects it will sign the initial server sync message with its private SSH key. The server will verify the message using the client public SSH key.

The encryption is AES 256 bit encryption with X25519 key exchange (Diffie-Hellman key exchange using Curve25519). The ZLIB is based on the package from JCraft http://www.jcraft.com/jzlib/

A client and server sample is found in the package com.hoddmimes.tcpip.sample

When a connection is established an initial message is exchanged between the client and server outside the application message flow. This takes place hidden for the application. The message sequence is the following

Client --> Server: InitRqst (optional SSH key signed)
Server --> Client: InitRsp