#pragma once #include "network/socket.h" #include "cryptography/cryptography.h" Result(void) client_run(); typedef struct ClientCredential { str username; Array(u8) aes_key; Array(u8) token; br_rsa_private_key sk; br_rsa_public_key pk; EncryptorRSA rsa_enc; DecryptorRSA rsa_dec; EncryptorAES user_data_aes_enc; DecryptorAES user_data_aes_dec; } ClientCredential; Result(ClientCredential*) ClientCredential_create(str username, str password); void ClientCredential_free(ClientCredential* cred); typedef struct ServerConnection { EndpointIPv4 server_end; Socket system_socket; Socket content_socket; br_rsa_public_key server_pk; EncryptorRSA rsa_enc; EncryptorAES session_aes_enc; DecryptorAES session_aes_dec; } ServerConnection; Result(ServerConnection*) ServerConnection_open(ClientCredential* client_credential, cstr server_link_cstr); void ServerConnection_close(ServerConnection* conn);