diff options
Diffstat (limited to 'toxcore/onion.c')
-rw-r--r-- | toxcore/onion.c | 18 |
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) |
47 | static void change_symmetric_key(Onion *onion) | 47 | static 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 | ||
665 | Onion *new_onion(DHT *dht) | 668 | Onion *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); |