summaryrefslogtreecommitdiff
path: root/toxcore/net_crypto.c
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2014-05-02 15:59:13 -0400
committerirungentoo <irungentoo@gmail.com>2014-05-02 15:59:13 -0400
commit8ae0a79305973ccbd6220cf64a4270f75ac4daf5 (patch)
tree7d67cfc57a457402304c6e2ddab29d7cb76adeec /toxcore/net_crypto.c
parent8b29ac8eae8feea8b2c12e56482dd8845e8c7d35 (diff)
Move the handshake creating code to a function.
Fixed another instance where it was not sent.
Diffstat (limited to 'toxcore/net_crypto.c')
-rw-r--r--toxcore/net_crypto.c67
1 files changed, 34 insertions, 33 deletions
diff --git a/toxcore/net_crypto.c b/toxcore/net_crypto.c
index d71ccdda..a0a913d2 100644
--- a/toxcore/net_crypto.c
+++ b/toxcore/net_crypto.c
@@ -506,6 +506,32 @@ static int send_temp_packet(Net_Crypto *c, int crypt_connection_id)
506 return 0; 506 return 0;
507} 507}
508 508
509/* Create a handshake packet and set it as a temp packet.
510 * cookie must be COOKIE_LENGTH.
511 *
512 * return -1 on failure.
513 * return 0 on success.
514 */
515static int create_send_handshake(Net_Crypto *c, int crypt_connection_id, uint8_t *cookie)
516{
517 Crypto_Connection *conn = get_crypto_connection(c, crypt_connection_id);
518
519 if (conn == 0)
520 return -1;
521
522 uint8_t handshake_packet[HANDSHAKE_PACKET_LENGTH];
523
524 if (create_crypto_handshake(c, handshake_packet, cookie, conn->sent_nonce, conn->sessionpublic_key,
525 conn->public_key) != sizeof(handshake_packet))
526 return -1;
527
528 if (new_temp_packet(c, crypt_connection_id, handshake_packet, sizeof(handshake_packet)) != 0)
529 return -1;
530
531 send_temp_packet(c, crypt_connection_id);
532 return 0;
533}
534
509/* Handle a packet that was recieved for the connection. 535/* Handle a packet that was recieved for the connection.
510 * 536 *
511 * return -1 on failure. 537 * return -1 on failure.
@@ -535,16 +561,9 @@ static int handle_packet_connection(Net_Crypto *c, int crypt_connection_id, uint
535 if (number != conn->cookie_request_number) 561 if (number != conn->cookie_request_number)
536 return -1; 562 return -1;
537 563
538 uint8_t handshake_packet[HANDSHAKE_PACKET_LENGTH]; 564 if (create_send_handshake(c, crypt_connection_id, cookie) != 0)
539
540 if (create_crypto_handshake(c, handshake_packet, cookie, conn->sent_nonce, conn->sessionpublic_key,
541 conn->public_key) != sizeof(handshake_packet))
542 return -1;
543
544 if (new_temp_packet(c, crypt_connection_id, handshake_packet, sizeof(handshake_packet)) != 0)
545 return -1; 565 return -1;
546 566
547 send_temp_packet(c, crypt_connection_id);
548 conn->status = CRYPTO_CONN_HANDSHAKE_SENT; 567 conn->status = CRYPTO_CONN_HANDSHAKE_SENT;
549 return 0; 568 return 0;
550 } 569 }
@@ -561,16 +580,8 @@ static int handle_packet_connection(Net_Crypto *c, int crypt_connection_id, uint
561 encrypt_precompute(conn->peersessionpublic_key, conn->sessionsecret_key, conn->shared_key); 580 encrypt_precompute(conn->peersessionpublic_key, conn->sessionsecret_key, conn->shared_key);
562 581
563 if (conn->status == CRYPTO_CONN_COOKIE_REQUESTING) { 582 if (conn->status == CRYPTO_CONN_COOKIE_REQUESTING) {
564 uint8_t handshake_packet[HANDSHAKE_PACKET_LENGTH]; 583 if (create_send_handshake(c, crypt_connection_id, cookie) != 0)
565
566 if (create_crypto_handshake(c, handshake_packet, cookie, conn->sent_nonce, conn->sessionpublic_key,
567 conn->public_key) != sizeof(handshake_packet))
568 return -1; 584 return -1;
569
570 if (new_temp_packet(c, crypt_connection_id, handshake_packet, sizeof(handshake_packet)) != 0)
571 return -1;
572
573 send_temp_packet(c, crypt_connection_id);
574 } 585 }
575 586
576 conn->status = CRYPTO_CONN_NOT_CONFIRMED; 587 conn->status = CRYPTO_CONN_NOT_CONFIRMED;
@@ -761,9 +772,12 @@ static int handle_new_connection_handshake(Net_Crypto *c, IP_Port source, uint8_
761 memcpy(conn->peersessionpublic_key, n_c.peersessionpublic_key, crypto_box_PUBLICKEYBYTES); 772 memcpy(conn->peersessionpublic_key, n_c.peersessionpublic_key, crypto_box_PUBLICKEYBYTES);
762 encrypt_precompute(conn->peersessionpublic_key, conn->sessionsecret_key, conn->shared_key); 773 encrypt_precompute(conn->peersessionpublic_key, conn->sessionsecret_key, conn->shared_key);
763 774
764 conn->status = CRYPTO_CONN_NOT_CONFIRMED;
765 crypto_connection_add_source(c, crypt_connection_id, source); 775 crypto_connection_add_source(c, crypt_connection_id, source);
766 ret = 0; 776
777 if (create_send_handshake(c, crypt_connection_id, n_c.cookie) == 0) {
778 conn->status = CRYPTO_CONN_NOT_CONFIRMED;
779 ret = 0;
780 }
767 } 781 }
768 782
769 free(n_c.cookie); 783 free(n_c.cookie);
@@ -805,13 +819,7 @@ int accept_crypto_connection(Net_Crypto *c, New_Connection *n_c)
805 if (n_c->cookie_length != COOKIE_LENGTH) 819 if (n_c->cookie_length != COOKIE_LENGTH)
806 return -1; 820 return -1;
807 821
808 uint8_t handshake_packet[HANDSHAKE_PACKET_LENGTH]; 822 if (create_send_handshake(c, crypt_connection_id, n_c->cookie) != 0)
809
810 if (create_crypto_handshake(c, handshake_packet, n_c->cookie, conn->sent_nonce, conn->sessionpublic_key,
811 conn->public_key) != sizeof(handshake_packet))
812 return -1;
813
814 if (new_temp_packet(c, crypt_connection_id, handshake_packet, sizeof(handshake_packet)) != 0)
815 return -1; 823 return -1;
816 824
817 send_temp_packet(c, crypt_connection_id); 825 send_temp_packet(c, crypt_connection_id);
@@ -1058,12 +1066,6 @@ void load_keys(Net_Crypto *c, uint8_t *keys)
1058 memcpy(c->self_secret_key, keys + crypto_box_PUBLICKEYBYTES, crypto_box_SECRETKEYBYTES); 1066 memcpy(c->self_secret_key, keys + crypto_box_PUBLICKEYBYTES, crypto_box_SECRETKEYBYTES);
1059} 1067}
1060 1068
1061/* Handle received packets for not yet established crypto connections. */
1062static void receive_crypto(Net_Crypto *c)
1063{
1064
1065}
1066
1067/* Run this to (re)initialize net_crypto. 1069/* Run this to (re)initialize net_crypto.
1068 * Sets all the global connection variables to their default values. 1070 * Sets all the global connection variables to their default values.
1069 */ 1071 */
@@ -1105,7 +1107,6 @@ void do_net_crypto(Net_Crypto *c)
1105{ 1107{
1106 unix_time_update(); 1108 unix_time_update();
1107 kill_timedout(c); 1109 kill_timedout(c);
1108 receive_crypto(c);
1109 send_crypto_packets(c); 1110 send_crypto_packets(c);
1110} 1111}
1111 1112