summaryrefslogtreecommitdiff
path: root/toxcore/onion_announce.c
diff options
context:
space:
mode:
authoriphydf <iphydf@users.noreply.github.com>2016-12-19 02:47:42 +0000
committeriphydf <iphydf@users.noreply.github.com>2016-12-22 10:26:59 +0000
commitce29c8e7ec91d95167b2dea3aee9fd1ae1aac254 (patch)
treea288df55c44e8edf816e6abbde19a70faef73394 /toxcore/onion_announce.c
parent7122d2e862e028a730478d88cd61557fbed16ebf (diff)
Wrap all sodium/nacl functions in crypto_core.c.
Diffstat (limited to 'toxcore/onion_announce.c')
-rw-r--r--toxcore/onion_announce.c88
1 files changed, 44 insertions, 44 deletions
diff --git a/toxcore/onion_announce.c b/toxcore/onion_announce.c
index acde04a7..5d371a99 100644
--- a/toxcore/onion_announce.c
+++ b/toxcore/onion_announce.c
@@ -56,25 +56,25 @@ int create_announce_request(uint8_t *packet, uint16_t max_packet_length, const u
56 return -1; 56 return -1;
57 } 57 }
58 58
59 uint8_t plain[ONION_PING_ID_SIZE + crypto_box_PUBLICKEYBYTES + crypto_box_PUBLICKEYBYTES + 59 uint8_t plain[ONION_PING_ID_SIZE + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_PUBLIC_KEY_SIZE +
60 ONION_ANNOUNCE_SENDBACK_DATA_LENGTH]; 60 ONION_ANNOUNCE_SENDBACK_DATA_LENGTH];
61 memcpy(plain, ping_id, ONION_PING_ID_SIZE); 61 memcpy(plain, ping_id, ONION_PING_ID_SIZE);
62 memcpy(plain + ONION_PING_ID_SIZE, client_id, crypto_box_PUBLICKEYBYTES); 62 memcpy(plain + ONION_PING_ID_SIZE, client_id, CRYPTO_PUBLIC_KEY_SIZE);
63 memcpy(plain + ONION_PING_ID_SIZE + crypto_box_PUBLICKEYBYTES, data_public_key, crypto_box_PUBLICKEYBYTES); 63 memcpy(plain + ONION_PING_ID_SIZE + CRYPTO_PUBLIC_KEY_SIZE, data_public_key, CRYPTO_PUBLIC_KEY_SIZE);
64 memcpy(plain + ONION_PING_ID_SIZE + crypto_box_PUBLICKEYBYTES + crypto_box_PUBLICKEYBYTES, &sendback_data, 64 memcpy(plain + ONION_PING_ID_SIZE + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_PUBLIC_KEY_SIZE, &sendback_data,
65 sizeof(sendback_data)); 65 sizeof(sendback_data));
66 66
67 packet[0] = NET_PACKET_ANNOUNCE_REQUEST; 67 packet[0] = NET_PACKET_ANNOUNCE_REQUEST;
68 random_nonce(packet + 1); 68 random_nonce(packet + 1);
69 69
70 int len = encrypt_data(dest_client_id, secret_key, packet + 1, plain, sizeof(plain), 70 int len = encrypt_data(dest_client_id, secret_key, packet + 1, plain, sizeof(plain),
71 packet + 1 + crypto_box_NONCEBYTES + crypto_box_PUBLICKEYBYTES); 71 packet + 1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE);
72 72
73 if ((uint32_t)len + 1 + crypto_box_NONCEBYTES + crypto_box_PUBLICKEYBYTES != ONION_ANNOUNCE_REQUEST_SIZE) { 73 if ((uint32_t)len + 1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE != ONION_ANNOUNCE_REQUEST_SIZE) {
74 return -1; 74 return -1;
75 } 75 }
76 76
77 memcpy(packet + 1 + crypto_box_NONCEBYTES, public_key, crypto_box_PUBLICKEYBYTES); 77 memcpy(packet + 1 + CRYPTO_NONCE_SIZE, public_key, CRYPTO_PUBLIC_KEY_SIZE);
78 78
79 return ONION_ANNOUNCE_REQUEST_SIZE; 79 return ONION_ANNOUNCE_REQUEST_SIZE;
80} 80}
@@ -101,19 +101,19 @@ int create_data_request(uint8_t *packet, uint16_t max_packet_length, const uint8
101 } 101 }
102 102
103 packet[0] = NET_PACKET_ONION_DATA_REQUEST; 103 packet[0] = NET_PACKET_ONION_DATA_REQUEST;
104 memcpy(packet + 1, public_key, crypto_box_PUBLICKEYBYTES); 104 memcpy(packet + 1, public_key, CRYPTO_PUBLIC_KEY_SIZE);
105 memcpy(packet + 1 + crypto_box_PUBLICKEYBYTES, nonce, crypto_box_NONCEBYTES); 105 memcpy(packet + 1 + CRYPTO_PUBLIC_KEY_SIZE, nonce, CRYPTO_NONCE_SIZE);
106 106
107 uint8_t random_public_key[crypto_box_PUBLICKEYBYTES]; 107 uint8_t random_public_key[CRYPTO_PUBLIC_KEY_SIZE];
108 uint8_t random_secret_key[crypto_box_SECRETKEYBYTES]; 108 uint8_t random_secret_key[CRYPTO_SECRET_KEY_SIZE];
109 crypto_box_keypair(random_public_key, random_secret_key); 109 crypto_new_keypair(random_public_key, random_secret_key);
110 110
111 memcpy(packet + 1 + crypto_box_PUBLICKEYBYTES + crypto_box_NONCEBYTES, random_public_key, crypto_box_PUBLICKEYBYTES); 111 memcpy(packet + 1 + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_NONCE_SIZE, random_public_key, CRYPTO_PUBLIC_KEY_SIZE);
112 112
113 int len = encrypt_data(encrypt_public_key, random_secret_key, packet + 1 + crypto_box_PUBLICKEYBYTES, data, length, 113 int len = encrypt_data(encrypt_public_key, random_secret_key, packet + 1 + CRYPTO_PUBLIC_KEY_SIZE, data, length,
114 packet + 1 + crypto_box_PUBLICKEYBYTES + crypto_box_NONCEBYTES + crypto_box_PUBLICKEYBYTES); 114 packet + 1 + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE);
115 115
116 if (1 + crypto_box_PUBLICKEYBYTES + crypto_box_NONCEBYTES + crypto_box_PUBLICKEYBYTES + len != DATA_REQUEST_MIN_SIZE + 116 if (1 + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE + len != DATA_REQUEST_MIN_SIZE +
117 length) { 117 length) {
118 return -1; 118 return -1;
119 } 119 }
@@ -204,12 +204,12 @@ static void generate_ping_id(const Onion_Announce *onion_a, uint64_t time, const
204 IP_Port ret_ip_port, uint8_t *ping_id) 204 IP_Port ret_ip_port, uint8_t *ping_id)
205{ 205{
206 time /= PING_ID_TIMEOUT; 206 time /= PING_ID_TIMEOUT;
207 uint8_t data[crypto_box_KEYBYTES + sizeof(time) + crypto_box_PUBLICKEYBYTES + sizeof(ret_ip_port)]; 207 uint8_t data[CRYPTO_SYMMETRIC_KEY_SIZE + sizeof(time) + CRYPTO_PUBLIC_KEY_SIZE + sizeof(ret_ip_port)];
208 memcpy(data, onion_a->secret_bytes, crypto_box_KEYBYTES); 208 memcpy(data, onion_a->secret_bytes, CRYPTO_SYMMETRIC_KEY_SIZE);
209 memcpy(data + crypto_box_KEYBYTES, &time, sizeof(time)); 209 memcpy(data + CRYPTO_SYMMETRIC_KEY_SIZE, &time, sizeof(time));
210 memcpy(data + crypto_box_KEYBYTES + sizeof(time), public_key, crypto_box_PUBLICKEYBYTES); 210 memcpy(data + CRYPTO_SYMMETRIC_KEY_SIZE + sizeof(time), public_key, CRYPTO_PUBLIC_KEY_SIZE);
211 memcpy(data + crypto_box_KEYBYTES + sizeof(time) + crypto_box_PUBLICKEYBYTES, &ret_ip_port, sizeof(ret_ip_port)); 211 memcpy(data + CRYPTO_SYMMETRIC_KEY_SIZE + sizeof(time) + CRYPTO_PUBLIC_KEY_SIZE, &ret_ip_port, sizeof(ret_ip_port));
212 crypto_hash_sha256(ping_id, data, sizeof(data)); 212 crypto_sha256(ping_id, data, sizeof(data));
213} 213}
214 214
215/* check if public key is in entries list 215/* check if public key is in entries list
@@ -231,7 +231,7 @@ static int in_entries(const Onion_Announce *onion_a, const uint8_t *public_key)
231 return -1; 231 return -1;
232} 232}
233 233
234static uint8_t cmp_public_key[crypto_box_PUBLICKEYBYTES]; 234static uint8_t cmp_public_key[CRYPTO_PUBLIC_KEY_SIZE];
235static int cmp_entry(const void *a, const void *b) 235static int cmp_entry(const void *a, const void *b)
236{ 236{
237 Onion_Announce_Entry entry1, entry2; 237 Onion_Announce_Entry entry1, entry2;
@@ -296,13 +296,13 @@ static int add_to_entries(Onion_Announce *onion_a, IP_Port ret_ip_port, const ui
296 return -1; 296 return -1;
297 } 297 }
298 298
299 memcpy(onion_a->entries[pos].public_key, public_key, crypto_box_PUBLICKEYBYTES); 299 memcpy(onion_a->entries[pos].public_key, public_key, CRYPTO_PUBLIC_KEY_SIZE);
300 onion_a->entries[pos].ret_ip_port = ret_ip_port; 300 onion_a->entries[pos].ret_ip_port = ret_ip_port;
301 memcpy(onion_a->entries[pos].ret, ret, ONION_RETURN_3); 301 memcpy(onion_a->entries[pos].ret, ret, ONION_RETURN_3);
302 memcpy(onion_a->entries[pos].data_public_key, data_public_key, crypto_box_PUBLICKEYBYTES); 302 memcpy(onion_a->entries[pos].data_public_key, data_public_key, CRYPTO_PUBLIC_KEY_SIZE);
303 onion_a->entries[pos].time = unix_time(); 303 onion_a->entries[pos].time = unix_time();
304 304
305 memcpy(cmp_public_key, onion_a->dht->self_public_key, crypto_box_PUBLICKEYBYTES); 305 memcpy(cmp_public_key, onion_a->dht->self_public_key, CRYPTO_PUBLIC_KEY_SIZE);
306 qsort(onion_a->entries, ONION_ANNOUNCE_MAX_ENTRIES, sizeof(Onion_Announce_Entry), cmp_entry); 306 qsort(onion_a->entries, ONION_ANNOUNCE_MAX_ENTRIES, sizeof(Onion_Announce_Entry), cmp_entry);
307 return in_entries(onion_a, public_key); 307 return in_entries(onion_a, public_key);
308} 308}
@@ -315,15 +315,15 @@ static int handle_announce_request(void *object, IP_Port source, const uint8_t *
315 return 1; 315 return 1;
316 } 316 }
317 317
318 const uint8_t *packet_public_key = packet + 1 + crypto_box_NONCEBYTES; 318 const uint8_t *packet_public_key = packet + 1 + CRYPTO_NONCE_SIZE;
319 uint8_t shared_key[crypto_box_BEFORENMBYTES]; 319 uint8_t shared_key[CRYPTO_SHARED_KEY_SIZE];
320 get_shared_key(&onion_a->shared_keys_recv, shared_key, onion_a->dht->self_secret_key, packet_public_key); 320 get_shared_key(&onion_a->shared_keys_recv, shared_key, onion_a->dht->self_secret_key, packet_public_key);
321 321
322 uint8_t plain[ONION_PING_ID_SIZE + crypto_box_PUBLICKEYBYTES + crypto_box_PUBLICKEYBYTES + 322 uint8_t plain[ONION_PING_ID_SIZE + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_PUBLIC_KEY_SIZE +
323 ONION_ANNOUNCE_SENDBACK_DATA_LENGTH]; 323 ONION_ANNOUNCE_SENDBACK_DATA_LENGTH];
324 int len = decrypt_data_symmetric(shared_key, packet + 1, packet + 1 + crypto_box_NONCEBYTES + crypto_box_PUBLICKEYBYTES, 324 int len = decrypt_data_symmetric(shared_key, packet + 1, packet + 1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE,
325 ONION_PING_ID_SIZE + crypto_box_PUBLICKEYBYTES + crypto_box_PUBLICKEYBYTES + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH + 325 ONION_PING_ID_SIZE + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_PUBLIC_KEY_SIZE + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH +
326 crypto_box_MACBYTES, plain); 326 CRYPTO_MAC_SIZE, plain);
327 327
328 if ((uint32_t)len != sizeof(plain)) { 328 if ((uint32_t)len != sizeof(plain)) {
329 return 1; 329 return 1;
@@ -337,10 +337,10 @@ static int handle_announce_request(void *object, IP_Port source, const uint8_t *
337 337
338 int index = -1; 338 int index = -1;
339 339
340 uint8_t *data_public_key = plain + ONION_PING_ID_SIZE + crypto_box_PUBLICKEYBYTES; 340 uint8_t *data_public_key = plain + ONION_PING_ID_SIZE + CRYPTO_PUBLIC_KEY_SIZE;
341 341
342 if (sodium_memcmp(ping_id1, plain, ONION_PING_ID_SIZE) == 0 342 if (crypto_memcmp(ping_id1, plain, ONION_PING_ID_SIZE) == 0
343 || sodium_memcmp(ping_id2, plain, ONION_PING_ID_SIZE) == 0) { 343 || crypto_memcmp(ping_id2, plain, ONION_PING_ID_SIZE) == 0) {
344 index = add_to_entries(onion_a, source, packet_public_key, data_public_key, 344 index = add_to_entries(onion_a, source, packet_public_key, data_public_key,
345 packet + (ANNOUNCE_REQUEST_SIZE_RECV - ONION_RETURN_3)); 345 packet + (ANNOUNCE_REQUEST_SIZE_RECV - ONION_RETURN_3));
346 } else { 346 } else {
@@ -351,7 +351,7 @@ static int handle_announce_request(void *object, IP_Port source, const uint8_t *
351 Node_format nodes_list[MAX_SENT_NODES]; 351 Node_format nodes_list[MAX_SENT_NODES];
352 unsigned int num_nodes = get_close_nodes(onion_a->dht, plain + ONION_PING_ID_SIZE, nodes_list, 0, 352 unsigned int num_nodes = get_close_nodes(onion_a->dht, plain + ONION_PING_ID_SIZE, nodes_list, 0,
353 LAN_ip(source.ip) == 0, 1); 353 LAN_ip(source.ip) == 0, 1);
354 uint8_t nonce[crypto_box_NONCEBYTES]; 354 uint8_t nonce[CRYPTO_NONCE_SIZE];
355 random_nonce(nonce); 355 random_nonce(nonce);
356 356
357 uint8_t pl[1 + ONION_PING_ID_SIZE + sizeof(nodes_list)]; 357 uint8_t pl[1 + ONION_PING_ID_SIZE + sizeof(nodes_list)];
@@ -370,7 +370,7 @@ static int handle_announce_request(void *object, IP_Port source, const uint8_t *
370 } 370 }
371 } else { 371 } else {
372 pl[0] = 1; 372 pl[0] = 1;
373 memcpy(pl + 1, onion_a->entries[index].data_public_key, crypto_box_PUBLICKEYBYTES); 373 memcpy(pl + 1, onion_a->entries[index].data_public_key, CRYPTO_PUBLIC_KEY_SIZE);
374 } 374 }
375 } 375 }
376 376
@@ -386,19 +386,19 @@ static int handle_announce_request(void *object, IP_Port source, const uint8_t *
386 386
387 uint8_t data[ONION_ANNOUNCE_RESPONSE_MAX_SIZE]; 387 uint8_t data[ONION_ANNOUNCE_RESPONSE_MAX_SIZE];
388 len = encrypt_data_symmetric(shared_key, nonce, pl, 1 + ONION_PING_ID_SIZE + nodes_length, 388 len = encrypt_data_symmetric(shared_key, nonce, pl, 1 + ONION_PING_ID_SIZE + nodes_length,
389 data + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH + crypto_box_NONCEBYTES); 389 data + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH + CRYPTO_NONCE_SIZE);
390 390
391 if (len != 1 + ONION_PING_ID_SIZE + nodes_length + crypto_box_MACBYTES) { 391 if (len != 1 + ONION_PING_ID_SIZE + nodes_length + CRYPTO_MAC_SIZE) {
392 return 1; 392 return 1;
393 } 393 }
394 394
395 data[0] = NET_PACKET_ANNOUNCE_RESPONSE; 395 data[0] = NET_PACKET_ANNOUNCE_RESPONSE;
396 memcpy(data + 1, plain + ONION_PING_ID_SIZE + crypto_box_PUBLICKEYBYTES + crypto_box_PUBLICKEYBYTES, 396 memcpy(data + 1, plain + ONION_PING_ID_SIZE + CRYPTO_PUBLIC_KEY_SIZE + CRYPTO_PUBLIC_KEY_SIZE,
397 ONION_ANNOUNCE_SENDBACK_DATA_LENGTH); 397 ONION_ANNOUNCE_SENDBACK_DATA_LENGTH);
398 memcpy(data + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH, nonce, crypto_box_NONCEBYTES); 398 memcpy(data + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH, nonce, CRYPTO_NONCE_SIZE);
399 399
400 if (send_onion_response(onion_a->net, source, data, 400 if (send_onion_response(onion_a->net, source, data,
401 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH + crypto_box_NONCEBYTES + len, 401 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH + CRYPTO_NONCE_SIZE + len,
402 packet + (ANNOUNCE_REQUEST_SIZE_RECV - ONION_RETURN_3)) == -1) { 402 packet + (ANNOUNCE_REQUEST_SIZE_RECV - ONION_RETURN_3)) == -1) {
403 return 1; 403 return 1;
404 } 404 }
@@ -424,9 +424,9 @@ static int handle_data_request(void *object, IP_Port source, const uint8_t *pack
424 return 1; 424 return 1;
425 } 425 }
426 426
427 uint8_t data[length - (crypto_box_PUBLICKEYBYTES + ONION_RETURN_3)]; 427 uint8_t data[length - (CRYPTO_PUBLIC_KEY_SIZE + ONION_RETURN_3)];
428 data[0] = NET_PACKET_ONION_DATA_RESPONSE; 428 data[0] = NET_PACKET_ONION_DATA_RESPONSE;
429 memcpy(data + 1, packet + 1 + crypto_box_PUBLICKEYBYTES, length - (1 + crypto_box_PUBLICKEYBYTES + ONION_RETURN_3)); 429 memcpy(data + 1, packet + 1 + CRYPTO_PUBLIC_KEY_SIZE, length - (1 + CRYPTO_PUBLIC_KEY_SIZE + ONION_RETURN_3));
430 430
431 if (send_onion_response(onion_a->net, onion_a->entries[index].ret_ip_port, data, sizeof(data), 431 if (send_onion_response(onion_a->net, onion_a->entries[index].ret_ip_port, data, sizeof(data),
432 onion_a->entries[index].ret) == -1) { 432 onion_a->entries[index].ret) == -1) {