summaryrefslogtreecommitdiff
path: root/toxcore/onion.c
diff options
context:
space:
mode:
Diffstat (limited to 'toxcore/onion.c')
-rw-r--r--toxcore/onion.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/toxcore/onion.c b/toxcore/onion.c
index 5ba716fd..eceeb9f8 100644
--- a/toxcore/onion.c
+++ b/toxcore/onion.c
@@ -46,9 +46,9 @@
46#define KEY_REFRESH_INTERVAL (2 * 60 * 60) 46#define KEY_REFRESH_INTERVAL (2 * 60 * 60)
47static void change_symmetric_key(Onion *onion) 47static void change_symmetric_key(Onion *onion)
48{ 48{
49 if (is_timeout(onion->timestamp, KEY_REFRESH_INTERVAL)) { 49 if (mono_time_is_timeout(onion->mono_time, onion->timestamp, KEY_REFRESH_INTERVAL)) {
50 new_symmetric_key(onion->secret_symmetric_key); 50 new_symmetric_key(onion->secret_symmetric_key);
51 onion->timestamp = unix_time(); 51 onion->timestamp = mono_time_get(onion->mono_time);
52 } 52 }
53} 53}
54 54
@@ -343,7 +343,8 @@ static int handle_send_initial(void *object, IP_Port source, const uint8_t *pack
343 343
344 uint8_t plain[ONION_MAX_PACKET_SIZE]; 344 uint8_t plain[ONION_MAX_PACKET_SIZE];
345 uint8_t shared_key[CRYPTO_SHARED_KEY_SIZE]; 345 uint8_t shared_key[CRYPTO_SHARED_KEY_SIZE];
346 get_shared_key(&onion->shared_keys_1, shared_key, dht_get_self_secret_key(onion->dht), packet + 1 + CRYPTO_NONCE_SIZE); 346 get_shared_key(onion->mono_time, &onion->shared_keys_1, shared_key, dht_get_self_secret_key(onion->dht),
347 packet + 1 + CRYPTO_NONCE_SIZE);
347 int len = decrypt_data_symmetric(shared_key, packet + 1, packet + 1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE, 348 int len = decrypt_data_symmetric(shared_key, packet + 1, packet + 1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE,
348 length - (1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE), plain); 349 length - (1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE), plain);
349 350
@@ -412,7 +413,8 @@ static int handle_send_1(void *object, IP_Port source, const uint8_t *packet, ui
412 413
413 uint8_t plain[ONION_MAX_PACKET_SIZE]; 414 uint8_t plain[ONION_MAX_PACKET_SIZE];
414 uint8_t shared_key[CRYPTO_SHARED_KEY_SIZE]; 415 uint8_t shared_key[CRYPTO_SHARED_KEY_SIZE];
415 get_shared_key(&onion->shared_keys_2, shared_key, dht_get_self_secret_key(onion->dht), packet + 1 + CRYPTO_NONCE_SIZE); 416 get_shared_key(onion->mono_time, &onion->shared_keys_2, shared_key, dht_get_self_secret_key(onion->dht),
417 packet + 1 + CRYPTO_NONCE_SIZE);
416 int len = decrypt_data_symmetric(shared_key, packet + 1, packet + 1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE, 418 int len = decrypt_data_symmetric(shared_key, packet + 1, packet + 1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE,
417 length - (1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE + RETURN_1), plain); 419 length - (1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE + RETURN_1), plain);
418 420
@@ -468,7 +470,8 @@ static int handle_send_2(void *object, IP_Port source, const uint8_t *packet, ui
468 470
469 uint8_t plain[ONION_MAX_PACKET_SIZE]; 471 uint8_t plain[ONION_MAX_PACKET_SIZE];
470 uint8_t shared_key[CRYPTO_SHARED_KEY_SIZE]; 472 uint8_t shared_key[CRYPTO_SHARED_KEY_SIZE];
471 get_shared_key(&onion->shared_keys_3, shared_key, dht_get_self_secret_key(onion->dht), packet + 1 + CRYPTO_NONCE_SIZE); 473 get_shared_key(onion->mono_time, &onion->shared_keys_3, shared_key, dht_get_self_secret_key(onion->dht),
474 packet + 1 + CRYPTO_NONCE_SIZE);
472 int len = decrypt_data_symmetric(shared_key, packet + 1, packet + 1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE, 475 int len = decrypt_data_symmetric(shared_key, packet + 1, packet + 1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE,
473 length - (1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE + RETURN_2), plain); 476 length - (1 + CRYPTO_NONCE_SIZE + CRYPTO_PUBLIC_KEY_SIZE + RETURN_2), plain);
474 477
@@ -662,7 +665,7 @@ void set_callback_handle_recv_1(Onion *onion, onion_recv_1_cb *function, void *o
662 onion->callback_object = object; 665 onion->callback_object = object;
663} 666}
664 667
665Onion *new_onion(DHT *dht) 668Onion *new_onion(Mono_Time *mono_time, DHT *dht)
666{ 669{
667 if (dht == nullptr) { 670 if (dht == nullptr) {
668 return nullptr; 671 return nullptr;
@@ -676,8 +679,9 @@ Onion *new_onion(DHT *dht)
676 679
677 onion->dht = dht; 680 onion->dht = dht;
678 onion->net = dht_get_net(dht); 681 onion->net = dht_get_net(dht);
682 onion->mono_time = mono_time;
679 new_symmetric_key(onion->secret_symmetric_key); 683 new_symmetric_key(onion->secret_symmetric_key);
680 onion->timestamp = unix_time(); 684 onion->timestamp = mono_time_get(onion->mono_time);
681 685
682 networking_registerhandler(onion->net, NET_PACKET_ONION_SEND_INITIAL, &handle_send_initial, onion); 686 networking_registerhandler(onion->net, NET_PACKET_ONION_SEND_INITIAL, &handle_send_initial, onion);
683 networking_registerhandler(onion->net, NET_PACKET_ONION_SEND_1, &handle_send_1, onion); 687 networking_registerhandler(onion->net, NET_PACKET_ONION_SEND_1, &handle_send_1, onion);