Secured Messenger (Java)

This project is a console application implementing a secure messenger based on the Signal app algorithm. The aim was to program end-to-end encryption through sockets for both the server and clients. Each client connects to the server, generates its certificate, and sends it to the server for storage. The clients use the Double Ratchet algorithm to generate root keys, encrypt their messages with AES-GCM, and use the Diffie-Hellman protocol to exchange keys, ensuring that only the clients share the secret key to decrypt the messages. The server acts solely as an intermediary and stores the certificates. Each client is managed by a client handler.
Here is an example of a client interface. The command line is written after the Messenger.Server is running.
> java Messenger.Client Logging to Messenger ... ___ ___ | Version : 1.0.0 | \/ | | Coding : Java | \ / | ___ ___ ___ ___ _ __ __ _ ___ _ __ | Creators : DEPARTOUT-Pignard Gabriel | |\/| |/ _ \/ __/ __|/ _ \ '_ \ / _` |/ _ \ '__| | LOEZIC Antonin | | | | __/\__ \__ \ __/ | | | (_| | __/ | | ROUSSEAU Jules |__| |__|\___||___/___/\___|_| |_|\__, |\___|_| | __/ | | Enjoy using this secured chat ! |___/ | Enter "help" after signing for help Enter your username: Alice -> You are connected as Alice Update : The connected users are: -Bob Bob Your certificate has been sent to the recipient, awaiting a response from them -> Certificate from Bob verified -> You can now talk to Bob User Bob accept your certificate !Let's send your first message to your new friend Bob Bob : Hey, Alice there ! >>> Bob : Hey, I received your message! help -> Help section of the Messenger application. +-------------------------------+ | Special commands | +-------------------------------+ [exit] | [quit] : Close the chat and exit the Application [help] : Display this help [who] : Display the list of users you can have a conversation with +-------------------------------+ | Connection to other users | +-------------------------------+ If you want to establish a connection with a user in the list of available users you received, you must send the user your signed certificate. To do so, just enter their username "@userName" in the chat. You should receive a message telling you you can now talk to each other. Once it's done, you MUST SEND THE FIRST MESSAGE to initiate conversation. +-------------------------------+ | Sending a message to a user | +-------------------------------+ After connection is established with another user (see in section above to see how to do it), you can send the user a message. To do so, you have to wright the other user name followed by ":" and then your message as shown on the example bellow. Example : let the connection with Alice be established. >> Alice : Hello ! (or Alice:Hello !) who The connected users are: -Bob (friend) -Alice (you)