exchanging ecc keys on client connect
This commit is contained in:
parent
c1ee049f32
commit
f3f5533763
@ -500,6 +500,76 @@ unsigned long get_latest_id()
|
|||||||
return returning;
|
return returning;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
why2_bool perform_key_exchange_client(int connection)
|
||||||
|
{
|
||||||
|
//VARIABLES
|
||||||
|
char *client_pubkey = why2_chat_ecc_serialize_public_key(); //GET PUBLIC KEY
|
||||||
|
char *server_pubkey;
|
||||||
|
char *read = NULL;
|
||||||
|
char *read_code = NULL;
|
||||||
|
why2_bool exiting_read = 0;
|
||||||
|
|
||||||
|
why2_send_socket_code(client_pubkey, NULL, connection, WHY2_CHAT_CODE_CLIENT_SERVER_KEY_EXCHANGE); //SEND pubkey TO SERVER
|
||||||
|
|
||||||
|
why2_deallocate(client_pubkey); //DEALLOCATE client_pubkey
|
||||||
|
|
||||||
|
//GET SERVER PUBKEY
|
||||||
|
do
|
||||||
|
{
|
||||||
|
why2_deallocate(read);
|
||||||
|
why2_deallocate(read_code);
|
||||||
|
|
||||||
|
read = read_socket_raw(connection);
|
||||||
|
|
||||||
|
read_code = get_string_from_json_string(read, "code");
|
||||||
|
exiting_read = read_code != NULL && strcmp(read_code, WHY2_CHAT_CODE_SERVER_CLIENT_KEY_EXCHANGE) == 0;
|
||||||
|
} while (!exiting_read);
|
||||||
|
why2_deallocate(read_code);
|
||||||
|
|
||||||
|
server_pubkey = get_string_from_json_string(read, "message");
|
||||||
|
|
||||||
|
//DEALLOCATION
|
||||||
|
why2_deallocate(read);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
why2_bool perform_key_exchange_server(int connection)
|
||||||
|
{
|
||||||
|
//VARIABLES
|
||||||
|
char *server_pubkey;
|
||||||
|
char *client_pubkey;
|
||||||
|
char *read = NULL;
|
||||||
|
char *read_code = NULL;
|
||||||
|
why2_bool exiting_read = 0;
|
||||||
|
|
||||||
|
//GET CLIENT PUBKEY
|
||||||
|
do
|
||||||
|
{
|
||||||
|
why2_deallocate(read);
|
||||||
|
why2_deallocate(read_code);
|
||||||
|
|
||||||
|
read = read_socket_raw(connection);
|
||||||
|
|
||||||
|
read_code = get_string_from_json_string(read, "code");
|
||||||
|
exiting_read = read_code != NULL && strcmp(read_code, WHY2_CHAT_CODE_CLIENT_SERVER_KEY_EXCHANGE) == 0;
|
||||||
|
} while (!exiting_read);
|
||||||
|
why2_deallocate(read_code);
|
||||||
|
|
||||||
|
client_pubkey = get_string_from_json_string(read, "message"); //GET client_pubkey
|
||||||
|
if (client_pubkey == NULL) return 1; //client is funi
|
||||||
|
|
||||||
|
//SEND CLIENT PUBKEY
|
||||||
|
server_pubkey = why2_chat_ecc_serialize_public_key();
|
||||||
|
why2_send_socket_code(server_pubkey, NULL, connection, WHY2_CHAT_CODE_SERVER_CLIENT_KEY_EXCHANGE);
|
||||||
|
|
||||||
|
//DEALLOCATION
|
||||||
|
why2_deallocate(server_pubkey);
|
||||||
|
why2_deallocate(read);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
//GLOBAL
|
//GLOBAL
|
||||||
void why2_send_socket(char *text, char *username, int socket)
|
void why2_send_socket(char *text, char *username, int socket)
|
||||||
{
|
{
|
||||||
@ -515,6 +585,13 @@ void *why2_communicate_thread(void *arg)
|
|||||||
{
|
{
|
||||||
int connection = *(int*) arg;
|
int connection = *(int*) arg;
|
||||||
|
|
||||||
|
//PERFORM KEY EXCHANGE
|
||||||
|
if (perform_key_exchange_server(connection))
|
||||||
|
{
|
||||||
|
close(connection);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
printf("User connected.\t\t%d\n", connection);
|
printf("User connected.\t\t%d\n", connection);
|
||||||
|
|
||||||
send_welcome_packet(connection); //TELL USER ALL THE INFO THEY NEED
|
send_welcome_packet(connection); //TELL USER ALL THE INFO THEY NEED
|
||||||
@ -1080,6 +1157,11 @@ void why2_clean_threads(void)
|
|||||||
|
|
||||||
void *why2_listen_server(void *socket)
|
void *why2_listen_server(void *socket)
|
||||||
{
|
{
|
||||||
|
int connection = *(int*) socket;
|
||||||
|
|
||||||
|
//PERFORM KEY EXCHANGE
|
||||||
|
if (perform_key_exchange_client(connection)) return NULL;
|
||||||
|
|
||||||
//STUFF
|
//STUFF
|
||||||
char *read = NULL;
|
char *read = NULL;
|
||||||
why2_bool exiting = 0;
|
why2_bool exiting = 0;
|
||||||
@ -1106,7 +1188,7 @@ void *why2_listen_server(void *socket)
|
|||||||
{
|
{
|
||||||
continuing = 0;
|
continuing = 0;
|
||||||
|
|
||||||
read = read_socket_raw(*((int*) socket));
|
read = read_socket_raw(connection);
|
||||||
if (read == NULL) continue;
|
if (read == NULL) continue;
|
||||||
|
|
||||||
//GET CONTENT
|
//GET CONTENT
|
||||||
|
Loading…
x
Reference in New Issue
Block a user