#pragma once #include "cryptography/AES.h" #include "cryptography/RSA.h" #include "network/encrypted_sockets.h" Result(void) client_run(); typedef struct ClientCredential { str username; Array(u8) aes_key; AESBlockEncryptor user_data_aes_enc; AESBlockDecryptor user_data_aes_dec; } ClientCredential; Result(ClientCredential*) ClientCredential_create(str username, str password); void ClientCredential_free(ClientCredential* cred); typedef struct ServerConnection { u64 session_id; EndpointIPv4 server_end; br_rsa_public_key server_pk; RSAEncryptor rsa_enc; Array(u8) session_key; EncryptedSocketTCP system_socket; EncryptedSocketTCP content_socket; } ServerConnection; Result(ServerConnection*) ServerConnection_open(ClientCredential* client_credential, cstr server_link_cstr); void ServerConnection_close(ServerConnection* conn);