diff options
author | mannol <eniz_vukovic@hotmail.com> | 2014-05-20 00:27:02 +0200 |
---|---|---|
committer | mannol <eniz_vukovic@hotmail.com> | 2014-05-20 00:27:02 +0200 |
commit | c9f1c6882dbf986685e3a900dae516f06832393c (patch) | |
tree | 6529505163b9a0d4fd0cb6c4aac0a19c5a108fb1 /auto_tests | |
parent | a1f2a18ae4146ebea11fbd3f83df803b715813da (diff) | |
parent | fc19327dccedf7950377856c3b09a13f2b0f5911 (diff) |
Merge upstream fo real now?
Diffstat (limited to 'auto_tests')
-rw-r--r-- | auto_tests/TCP_test.c | 143 | ||||
-rw-r--r-- | auto_tests/crypto_test.c | 37 | ||||
-rw-r--r-- | auto_tests/messenger_test.c | 27 | ||||
-rw-r--r-- | auto_tests/network_test.c | 5 | ||||
-rw-r--r-- | auto_tests/onion_test.c | 38 | ||||
-rw-r--r-- | auto_tests/tox_test.c | 28 |
6 files changed, 201 insertions, 77 deletions
diff --git a/auto_tests/TCP_test.c b/auto_tests/TCP_test.c index de37bb97..ca5afd9a 100644 --- a/auto_tests/TCP_test.c +++ b/auto_tests/TCP_test.c | |||
@@ -89,7 +89,7 @@ START_TEST(test_basic) | |||
89 | uint8_t r_req[2 + 1 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES]; | 89 | uint8_t r_req[2 + 1 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES]; |
90 | uint16_t size = 1 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES; | 90 | uint16_t size = 1 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES; |
91 | size = htons(size); | 91 | size = htons(size); |
92 | ret = encrypt_data_fast(f_shared_key, f_nonce, r_req_p, 1 + crypto_box_PUBLICKEYBYTES, r_req + 2); | 92 | ret = encrypt_data_symmetric(f_shared_key, f_nonce, r_req_p, 1 + crypto_box_PUBLICKEYBYTES, r_req + 2); |
93 | increment_nonce(f_nonce); | 93 | increment_nonce(f_nonce); |
94 | memcpy(r_req, &size, 2); | 94 | memcpy(r_req, &size, 2); |
95 | uint32_t i; | 95 | uint32_t i; |
@@ -110,7 +110,7 @@ START_TEST(test_basic) | |||
110 | memcpy(&size, packet_resp, 2); | 110 | memcpy(&size, packet_resp, 2); |
111 | ck_assert_msg(ntohs(size) == 2 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES, "Wrong packet size."); | 111 | ck_assert_msg(ntohs(size) == 2 + crypto_box_PUBLICKEYBYTES + crypto_box_MACBYTES, "Wrong packet size."); |
112 | uint8_t packet_resp_plain[4096]; | 112 | uint8_t packet_resp_plain[4096]; |
113 | ret = decrypt_data_fast(f_shared_key, f_nonce_r, packet_resp + 2, recv_data_len - 2, packet_resp_plain); | 113 | ret = decrypt_data_symmetric(f_shared_key, f_nonce_r, packet_resp + 2, recv_data_len - 2, packet_resp_plain); |
114 | ck_assert_msg(ret != -1, "decryption failed"); | 114 | ck_assert_msg(ret != -1, "decryption failed"); |
115 | increment_nonce(f_nonce_r); | 115 | increment_nonce(f_nonce_r); |
116 | ck_assert_msg(packet_resp_plain[0] == 1, "wrong packet id %u", packet_resp_plain[0]); | 116 | ck_assert_msg(packet_resp_plain[0] == 1, "wrong packet id %u", packet_resp_plain[0]); |
@@ -179,7 +179,7 @@ int write_packet_TCP_secure_connection(struct sec_TCP_con *con, uint8_t *data, u | |||
179 | 179 | ||
180 | uint16_t c_length = htons(length + crypto_box_MACBYTES); | 180 | uint16_t c_length = htons(length + crypto_box_MACBYTES); |
181 | memcpy(packet, &c_length, sizeof(uint16_t)); | 181 | memcpy(packet, &c_length, sizeof(uint16_t)); |
182 | int len = encrypt_data_fast(con->shared_key, con->sent_nonce, data, length, packet + sizeof(uint16_t)); | 182 | int len = encrypt_data_symmetric(con->shared_key, con->sent_nonce, data, length, packet + sizeof(uint16_t)); |
183 | 183 | ||
184 | if ((unsigned int)len != (sizeof(packet) - sizeof(uint16_t))) | 184 | if ((unsigned int)len != (sizeof(packet) - sizeof(uint16_t))) |
185 | return -1; | 185 | return -1; |
@@ -194,7 +194,7 @@ int read_packet_sec_TCP(struct sec_TCP_con *con, uint8_t *data, uint16_t length) | |||
194 | { | 194 | { |
195 | int len; | 195 | int len; |
196 | ck_assert_msg((len = recv(con->sock, data, length, 0)) == length, "wrong len %i\n", len); | 196 | ck_assert_msg((len = recv(con->sock, data, length, 0)) == length, "wrong len %i\n", len); |
197 | ck_assert_msg((len = decrypt_data_fast(con->shared_key, con->recv_nonce, data + 2, length - 2, data)) != -1, | 197 | ck_assert_msg((len = decrypt_data_symmetric(con->shared_key, con->recv_nonce, data + 2, length - 2, data)) != -1, |
198 | "Decrypt failed"); | 198 | "Decrypt failed"); |
199 | increment_nonce(con->recv_nonce); | 199 | increment_nonce(con->recv_nonce); |
200 | return len; | 200 | return len; |
@@ -291,6 +291,76 @@ START_TEST(test_some) | |||
291 | } | 291 | } |
292 | END_TEST | 292 | END_TEST |
293 | 293 | ||
294 | static int response_callback_good; | ||
295 | static uint8_t response_callback_connection_id; | ||
296 | static uint8_t response_callback_public_key[crypto_box_PUBLICKEYBYTES]; | ||
297 | static int response_callback(void *object, uint8_t connection_id, uint8_t *public_key) | ||
298 | { | ||
299 | if (set_tcp_connection_number(object - 2, connection_id, 7) != 0) | ||
300 | return 1; | ||
301 | |||
302 | response_callback_connection_id = connection_id; | ||
303 | memcpy(response_callback_public_key, public_key, crypto_box_PUBLICKEYBYTES); | ||
304 | response_callback_good++; | ||
305 | return 0; | ||
306 | } | ||
307 | static int status_callback_good; | ||
308 | static uint8_t status_callback_connection_id; | ||
309 | static uint8_t status_callback_status; | ||
310 | static int status_callback(void *object, uint32_t number, uint8_t connection_id, uint8_t status) | ||
311 | { | ||
312 | if (object != (void *)2) | ||
313 | return 1; | ||
314 | |||
315 | if (number != 7) | ||
316 | return 1; | ||
317 | |||
318 | status_callback_connection_id = connection_id; | ||
319 | status_callback_status = status; | ||
320 | status_callback_good++; | ||
321 | return 0; | ||
322 | } | ||
323 | static int data_callback_good; | ||
324 | static int data_callback(void *object, uint32_t number, uint8_t connection_id, uint8_t *data, uint16_t length) | ||
325 | { | ||
326 | if (object != (void *)3) | ||
327 | return 1; | ||
328 | |||
329 | if (number != 7) | ||
330 | return 1; | ||
331 | |||
332 | if (length != 5) | ||
333 | return 1; | ||
334 | |||
335 | if (data[0] == 1 && data[1] == 2 && data[2] == 3 && data[3] == 4 && data[4] == 5) { | ||
336 | data_callback_good++; | ||
337 | return 0; | ||
338 | } | ||
339 | |||
340 | return 1; | ||
341 | } | ||
342 | |||
343 | static int oob_data_callback_good; | ||
344 | static uint8_t oob_pubkey[crypto_box_PUBLICKEYBYTES]; | ||
345 | static int oob_data_callback(void *object, uint8_t *public_key, uint8_t *data, uint16_t length) | ||
346 | { | ||
347 | if (object != (void *)4) | ||
348 | return 1; | ||
349 | |||
350 | if (length != 5) | ||
351 | return 1; | ||
352 | |||
353 | if (memcmp(public_key, oob_pubkey, crypto_box_PUBLICKEYBYTES) != 0) | ||
354 | return 1; | ||
355 | |||
356 | if (data[0] == 1 && data[1] == 2 && data[2] == 3 && data[3] == 4 && data[4] == 5) { | ||
357 | oob_data_callback_good++; | ||
358 | return 0; | ||
359 | } | ||
360 | |||
361 | return 1; | ||
362 | } | ||
363 | |||
294 | START_TEST(test_client) | 364 | START_TEST(test_client) |
295 | { | 365 | { |
296 | unix_time_update(); | 366 | unix_time_update(); |
@@ -320,6 +390,71 @@ START_TEST(test_client) | |||
320 | do_TCP_connection(conn); | 390 | do_TCP_connection(conn); |
321 | ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED, | 391 | ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED, |
322 | conn->status); | 392 | conn->status); |
393 | c_sleep(500); | ||
394 | do_TCP_connection(conn); | ||
395 | ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED, | ||
396 | conn->status); | ||
397 | c_sleep(500); | ||
398 | do_TCP_connection(conn); | ||
399 | ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED, | ||
400 | conn->status); | ||
401 | do_TCP_server(tcp_s); | ||
402 | c_sleep(50); | ||
403 | ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED, | ||
404 | conn->status); | ||
405 | |||
406 | uint8_t f2_public_key[crypto_box_PUBLICKEYBYTES]; | ||
407 | uint8_t f2_secret_key[crypto_box_SECRETKEYBYTES]; | ||
408 | crypto_box_keypair(f2_public_key, f2_secret_key); | ||
409 | TCP_Client_Connection *conn2 = new_TCP_connection(ip_port_tcp_s, self_public_key, f2_public_key, f2_secret_key); | ||
410 | routing_response_handler(conn, response_callback, ((void *)conn) + 2); | ||
411 | routing_status_handler(conn, status_callback, (void *)2); | ||
412 | routing_data_handler(conn, data_callback, (void *)3); | ||
413 | oob_data_handler(conn, oob_data_callback, (void *)4); | ||
414 | oob_data_callback_good = response_callback_good = status_callback_good = data_callback_good = 0; | ||
415 | c_sleep(50); | ||
416 | do_TCP_connection(conn); | ||
417 | do_TCP_connection(conn2); | ||
418 | c_sleep(50); | ||
419 | do_TCP_server(tcp_s); | ||
420 | c_sleep(50); | ||
421 | do_TCP_connection(conn); | ||
422 | do_TCP_connection(conn2); | ||
423 | c_sleep(50); | ||
424 | uint8_t data[5] = {1, 2, 3, 4, 5}; | ||
425 | memcpy(oob_pubkey, f2_public_key, crypto_box_PUBLICKEYBYTES); | ||
426 | send_oob_packet(conn2, f_public_key, data, 5); | ||
427 | send_routing_request(conn, f2_public_key); | ||
428 | send_routing_request(conn2, f_public_key); | ||
429 | c_sleep(50); | ||
430 | do_TCP_server(tcp_s); | ||
431 | c_sleep(50); | ||
432 | do_TCP_connection(conn); | ||
433 | do_TCP_connection(conn2); | ||
434 | ck_assert_msg(oob_data_callback_good == 1, "oob callback not called"); | ||
435 | ck_assert_msg(response_callback_good == 1, "response callback not called"); | ||
436 | ck_assert_msg(memcmp(response_callback_public_key, f2_public_key, crypto_box_PUBLICKEYBYTES) == 0, "wrong public key"); | ||
437 | ck_assert_msg(status_callback_good == 1, "status callback not called"); | ||
438 | ck_assert_msg(status_callback_status == 2, "wrong status"); | ||
439 | ck_assert_msg(status_callback_connection_id == response_callback_connection_id, "connection ids not equal"); | ||
440 | c_sleep(50); | ||
441 | do_TCP_server(tcp_s); | ||
442 | ck_assert_msg(send_data(conn2, 0, data, 5) == 1, "send data failed"); | ||
443 | c_sleep(50); | ||
444 | do_TCP_server(tcp_s); | ||
445 | c_sleep(50); | ||
446 | do_TCP_connection(conn); | ||
447 | do_TCP_connection(conn2); | ||
448 | ck_assert_msg(data_callback_good == 1, "data callback not called"); | ||
449 | status_callback_good = 0; | ||
450 | send_disconnect_request(conn2, 0); | ||
451 | c_sleep(50); | ||
452 | do_TCP_server(tcp_s); | ||
453 | c_sleep(50); | ||
454 | do_TCP_connection(conn); | ||
455 | do_TCP_connection(conn2); | ||
456 | ck_assert_msg(status_callback_good == 1, "status callback not called"); | ||
457 | ck_assert_msg(status_callback_status == 1, "wrong status"); | ||
323 | } | 458 | } |
324 | END_TEST | 459 | END_TEST |
325 | 460 | ||
diff --git a/auto_tests/crypto_test.c b/auto_tests/crypto_test.c index 95cdefcd..252f7275 100644 --- a/auto_tests/crypto_test.c +++ b/auto_tests/crypto_test.c | |||
@@ -9,12 +9,6 @@ | |||
9 | #include <check.h> | 9 | #include <check.h> |
10 | #include <stdlib.h> | 10 | #include <stdlib.h> |
11 | #include <time.h> | 11 | #include <time.h> |
12 | #ifndef VANILLA_NACL | ||
13 | #include <sodium.h> | ||
14 | #else | ||
15 | #include <crypto_box.h> | ||
16 | #define crypto_box_MACBYTES (crypto_box_ZEROBYTES - crypto_box_BOXZEROBYTES) | ||
17 | #endif | ||
18 | 12 | ||
19 | void rand_bytes(uint8_t *b, size_t blen) | 13 | void rand_bytes(uint8_t *b, size_t blen) |
20 | { | 14 | { |
@@ -126,12 +120,12 @@ START_TEST(test_fast_known) | |||
126 | ck_assert_msg(sizeof(test_c) == sizeof(c), "sanity check failed"); | 120 | ck_assert_msg(sizeof(test_c) == sizeof(c), "sanity check failed"); |
127 | ck_assert_msg(sizeof(test_m) == sizeof(m), "sanity check failed"); | 121 | ck_assert_msg(sizeof(test_m) == sizeof(m), "sanity check failed"); |
128 | 122 | ||
129 | clen = encrypt_data_fast(k, nonce, test_m, sizeof(test_m) / sizeof(unsigned char), c); | 123 | clen = encrypt_data_symmetric(k, nonce, test_m, sizeof(test_m) / sizeof(unsigned char), c); |
130 | 124 | ||
131 | ck_assert_msg(memcmp(test_c, c, sizeof(c)) == 0, "cyphertext doesn't match test vector"); | 125 | ck_assert_msg(memcmp(test_c, c, sizeof(c)) == 0, "cyphertext doesn't match test vector"); |
132 | ck_assert_msg(clen == sizeof(c) / sizeof(unsigned char), "wrong ciphertext length"); | 126 | ck_assert_msg(clen == sizeof(c) / sizeof(unsigned char), "wrong ciphertext length"); |
133 | 127 | ||
134 | mlen = decrypt_data_fast(k, nonce, test_c, sizeof(test_c) / sizeof(unsigned char), m); | 128 | mlen = decrypt_data_symmetric(k, nonce, test_c, sizeof(test_c) / sizeof(unsigned char), m); |
135 | 129 | ||
136 | ck_assert_msg(memcmp(test_m, m, sizeof(m)) == 0, "decrypted text doesn't match test vector"); | 130 | ck_assert_msg(memcmp(test_m, m, sizeof(m)) == 0, "decrypted text doesn't match test vector"); |
137 | ck_assert_msg(mlen == sizeof(m) / sizeof(unsigned char), "wrong plaintext length"); | 131 | ck_assert_msg(mlen == sizeof(m) / sizeof(unsigned char), "wrong plaintext length"); |
@@ -186,8 +180,8 @@ START_TEST(test_endtoend) | |||
186 | //Encrypt all four ways | 180 | //Encrypt all four ways |
187 | c1len = encrypt_data(pk2, sk1, n, m, mlen, c1); | 181 | c1len = encrypt_data(pk2, sk1, n, m, mlen, c1); |
188 | c2len = encrypt_data(pk1, sk2, n, m, mlen, c2); | 182 | c2len = encrypt_data(pk1, sk2, n, m, mlen, c2); |
189 | c3len = encrypt_data_fast(k1, n, m, mlen, c3); | 183 | c3len = encrypt_data_symmetric(k1, n, m, mlen, c3); |
190 | c4len = encrypt_data_fast(k2, n, m, mlen, c4); | 184 | c4len = encrypt_data_symmetric(k2, n, m, mlen, c4); |
191 | 185 | ||
192 | ck_assert_msg(c1len == c2len && c1len == c3len && c1len == c4len, "cyphertext lengths differ"); | 186 | ck_assert_msg(c1len == c2len && c1len == c3len && c1len == c4len, "cyphertext lengths differ"); |
193 | ck_assert_msg(c1len == mlen + (int)crypto_box_MACBYTES, "wrong cyphertext length"); | 187 | ck_assert_msg(c1len == mlen + (int)crypto_box_MACBYTES, "wrong cyphertext length"); |
@@ -197,8 +191,8 @@ START_TEST(test_endtoend) | |||
197 | //Decrypt all four ways | 191 | //Decrypt all four ways |
198 | m1len = decrypt_data(pk2, sk1, n, c1, c1len, m1); | 192 | m1len = decrypt_data(pk2, sk1, n, c1, c1len, m1); |
199 | m2len = decrypt_data(pk1, sk2, n, c1, c1len, m2); | 193 | m2len = decrypt_data(pk1, sk2, n, c1, c1len, m2); |
200 | m3len = decrypt_data_fast(k1, n, c1, c1len, m3); | 194 | m3len = decrypt_data_symmetric(k1, n, c1, c1len, m3); |
201 | m4len = decrypt_data_fast(k2, n, c1, c1len, m4); | 195 | m4len = decrypt_data_symmetric(k2, n, c1, c1len, m4); |
202 | 196 | ||
203 | ck_assert_msg(m1len == m2len && m1len == m3len && m1len == m4len, "decrypted text lengths differ"); | 197 | ck_assert_msg(m1len == m2len && m1len == m3len && m1len == m4len, "decrypted text lengths differ"); |
204 | ck_assert_msg(m1len == mlen, "wrong decrypted text length"); | 198 | ck_assert_msg(m1len == mlen, "wrong decrypted text length"); |
@@ -215,11 +209,11 @@ START_TEST(test_large_data) | |||
215 | 209 | ||
216 | unsigned char n[crypto_box_NONCEBYTES]; | 210 | unsigned char n[crypto_box_NONCEBYTES]; |
217 | 211 | ||
218 | unsigned char m1[MAX_DATA_SIZE - crypto_box_MACBYTES]; | 212 | unsigned char m1[MAX_CRYPTO_PACKET_SIZE - crypto_box_MACBYTES]; |
219 | unsigned char c1[sizeof(m1) + crypto_box_MACBYTES]; | 213 | unsigned char c1[sizeof(m1) + crypto_box_MACBYTES]; |
220 | unsigned char m1prime[sizeof(m1)]; | 214 | unsigned char m1prime[sizeof(m1)]; |
221 | 215 | ||
222 | unsigned char m2[MAX_DATA_SIZE]; | 216 | unsigned char m2[MAX_CRYPTO_PACKET_SIZE]; |
223 | unsigned char c2[sizeof(m2) + crypto_box_MACBYTES]; | 217 | unsigned char c2[sizeof(m2) + crypto_box_MACBYTES]; |
224 | 218 | ||
225 | int c1len, c2len; | 219 | int c1len, c2len; |
@@ -233,13 +227,13 @@ START_TEST(test_large_data) | |||
233 | //Generate key | 227 | //Generate key |
234 | rand_bytes(k, crypto_box_BEFORENMBYTES); | 228 | rand_bytes(k, crypto_box_BEFORENMBYTES); |
235 | 229 | ||
236 | c1len = encrypt_data_fast(k, n, m1, sizeof(m1), c1); | 230 | c1len = encrypt_data_symmetric(k, n, m1, sizeof(m1), c1); |
237 | c2len = encrypt_data_fast(k, n, m2, sizeof(m2), c2); | 231 | c2len = encrypt_data_symmetric(k, n, m2, sizeof(m2), c2); |
238 | 232 | ||
239 | ck_assert_msg(c1len == sizeof(m1) + crypto_box_MACBYTES, "could not encrypt max size"); | 233 | ck_assert_msg(c1len == sizeof(m1) + crypto_box_MACBYTES, "could not encrypt"); |
240 | ck_assert_msg(c2len == -1, "incorrectly succeeded encrypting massive size"); | 234 | ck_assert_msg(c2len == sizeof(m2) + crypto_box_MACBYTES, "could not encrypt"); |
241 | 235 | ||
242 | m1plen = decrypt_data_fast(k, n, c1, c1len, m1prime); | 236 | m1plen = decrypt_data_symmetric(k, n, c1, c1len, m1prime); |
243 | 237 | ||
244 | ck_assert_msg(m1plen == sizeof(m1), "decrypted text lengths differ"); | 238 | ck_assert_msg(m1plen == sizeof(m1), "decrypted text lengths differ"); |
245 | ck_assert_msg(memcmp(m1prime, m1, sizeof(m1)) == 0, "decrypted texts differ"); | 239 | ck_assert_msg(memcmp(m1prime, m1, sizeof(m1)) == 0, "decrypted texts differ"); |
@@ -248,9 +242,9 @@ END_TEST | |||
248 | 242 | ||
249 | START_TEST(test_large_data_symmetric) | 243 | START_TEST(test_large_data_symmetric) |
250 | { | 244 | { |
251 | unsigned char k[crypto_secretbox_KEYBYTES]; | 245 | unsigned char k[crypto_box_KEYBYTES]; |
252 | 246 | ||
253 | unsigned char n[crypto_secretbox_NONCEBYTES]; | 247 | unsigned char n[crypto_box_NONCEBYTES]; |
254 | 248 | ||
255 | unsigned char m1[16 * 16 * 16]; | 249 | unsigned char m1[16 * 16 * 16]; |
256 | unsigned char c1[sizeof(m1) + crypto_box_MACBYTES]; | 250 | unsigned char c1[sizeof(m1) + crypto_box_MACBYTES]; |
@@ -276,6 +270,7 @@ START_TEST(test_large_data_symmetric) | |||
276 | } | 270 | } |
277 | END_TEST | 271 | END_TEST |
278 | 272 | ||
273 | |||
279 | #define DEFTESTCASE(NAME) \ | 274 | #define DEFTESTCASE(NAME) \ |
280 | TCase *NAME = tcase_create(#NAME); \ | 275 | TCase *NAME = tcase_create(#NAME); \ |
281 | tcase_add_test(NAME, test_##NAME); \ | 276 | tcase_add_test(NAME, test_##NAME); \ |
diff --git a/auto_tests/messenger_test.c b/auto_tests/messenger_test.c index 5e5f7b06..7ab7d674 100644 --- a/auto_tests/messenger_test.c +++ b/auto_tests/messenger_test.c | |||
@@ -16,7 +16,6 @@ | |||
16 | 16 | ||
17 | #include "../testing/misc_tools.c" // hex_string_to_bin | 17 | #include "../testing/misc_tools.c" // hex_string_to_bin |
18 | #include "../toxcore/Messenger.h" | 18 | #include "../toxcore/Messenger.h" |
19 | #include "../toxcore/Lossless_UDP.h" | ||
20 | #include <sys/types.h> | 19 | #include <sys/types.h> |
21 | #include <stdint.h> | 20 | #include <stdint.h> |
22 | #include <string.h> | 21 | #include <string.h> |
@@ -46,7 +45,7 @@ START_TEST(test_m_sendmesage) | |||
46 | { | 45 | { |
47 | char *message = "h-hi :3"; | 46 | char *message = "h-hi :3"; |
48 | int good_len = strlen(message); | 47 | int good_len = strlen(message); |
49 | int bad_len = MAX_DATA_SIZE; | 48 | int bad_len = MAX_CRYPTO_PACKET_SIZE; |
50 | 49 | ||
51 | 50 | ||
52 | ck_assert(m_sendmessage(m, -1, (uint8_t *)message, good_len) == 0); | 51 | ck_assert(m_sendmessage(m, -1, (uint8_t *)message, good_len) == 0); |
@@ -127,7 +126,7 @@ START_TEST(test_m_addfriend) | |||
127 | 126 | ||
128 | int good_len = strlen(good_data); | 127 | int good_len = strlen(good_data); |
129 | int bad_len = strlen(bad_data); | 128 | int bad_len = strlen(bad_data); |
130 | int really_bad_len = (MAX_DATA_SIZE - crypto_box_PUBLICKEYBYTES | 129 | int really_bad_len = (MAX_CRYPTO_PACKET_SIZE - crypto_box_PUBLICKEYBYTES |
131 | - crypto_box_NONCEBYTES - crypto_box_BOXZEROBYTES | 130 | - crypto_box_NONCEBYTES - crypto_box_BOXZEROBYTES |
132 | + crypto_box_ZEROBYTES + 100); */ | 131 | + crypto_box_ZEROBYTES + 100); */ |
133 | /* TODO: Update this properly to latest master | 132 | /* TODO: Update this properly to latest master |
@@ -299,27 +298,6 @@ START_TEST(test_messenger_state_saveloadsave) | |||
299 | } | 298 | } |
300 | END_TEST | 299 | END_TEST |
301 | 300 | ||
302 | START_TEST(test_messenger_state_saveload_encrypted) | ||
303 | { | ||
304 | uint8_t addr[FRIEND_ADDRESS_SIZE]; | ||
305 | getaddress(m, addr); | ||
306 | Messenger *m_temp = new_messenger(TOX_ENABLE_IPV6_DEFAULT); | ||
307 | |||
308 | size_t size = messenger_size_encrypted(m); | ||
309 | uint8_t buffer[size]; | ||
310 | messenger_save_encrypted(m, buffer, "Gentoo", sizeof("Gentoo")); | ||
311 | |||
312 | ck_assert_msg(messenger_load_encrypted(m_temp, buffer, size, "Ubuntu", sizeof("Ubuntu")) == -1, | ||
313 | "Bad password didn't make the function fail."); | ||
314 | ck_assert_msg(messenger_load_encrypted(m_temp, buffer, size, "Gentoo", sizeof("Gentoo")) == 0, | ||
315 | "Good password didn't make the function succeed."); | ||
316 | uint8_t addr1[FRIEND_ADDRESS_SIZE]; | ||
317 | getaddress(m_temp, addr1); | ||
318 | ck_assert_msg(memcmp(addr1, addr, FRIEND_ADDRESS_SIZE) == 0, "Didn't load messenger successfully"); | ||
319 | kill_messenger(m_temp); | ||
320 | } | ||
321 | END_TEST | ||
322 | |||
323 | #define DEFTESTCASE(NAME) \ | 301 | #define DEFTESTCASE(NAME) \ |
324 | TCase *tc_##NAME = tcase_create(#NAME); \ | 302 | TCase *tc_##NAME = tcase_create(#NAME); \ |
325 | tcase_add_test(tc_##NAME, test_##NAME); \ | 303 | tcase_add_test(tc_##NAME, test_##NAME); \ |
@@ -331,7 +309,6 @@ Suite *messenger_suite(void) | |||
331 | 309 | ||
332 | DEFTESTCASE(dht_state_saveloadsave); | 310 | DEFTESTCASE(dht_state_saveloadsave); |
333 | DEFTESTCASE(messenger_state_saveloadsave); | 311 | DEFTESTCASE(messenger_state_saveloadsave); |
334 | DEFTESTCASE(messenger_state_saveload_encrypted); | ||
335 | 312 | ||
336 | DEFTESTCASE(getself_name); | 313 | DEFTESTCASE(getself_name); |
337 | DEFTESTCASE(m_get_userstatus_size); | 314 | DEFTESTCASE(m_get_userstatus_size); |
diff --git a/auto_tests/network_test.c b/auto_tests/network_test.c index 3b4b50cd..afd90e7a 100644 --- a/auto_tests/network_test.c +++ b/auto_tests/network_test.c | |||
@@ -136,9 +136,8 @@ START_TEST(test_struct_sizes) | |||
136 | { | 136 | { |
137 | ck_assert_msg(sizeof(IP4) == 4, "sizeof(IP4): expected result 4, got %u.", sizeof(IP4)); | 137 | ck_assert_msg(sizeof(IP4) == 4, "sizeof(IP4): expected result 4, got %u.", sizeof(IP4)); |
138 | ck_assert_msg(sizeof(IP6) == 16, "sizeof(IP6): expected result 16, got %u.", sizeof(IP6)); | 138 | ck_assert_msg(sizeof(IP6) == 16, "sizeof(IP6): expected result 16, got %u.", sizeof(IP6)); |
139 | ck_assert_msg(sizeof(IP) == 20, "sizeof(IP): expected result 20, got %u.", sizeof(IP)); | 139 | ck_assert_msg(sizeof(IP) == 17, "sizeof(IP): expected result 17, got %u.", sizeof(IP)); |
140 | ck_assert_msg(sizeof(IP_Port) == 24, "sizeof(IP_Port): expected result 24, got %u.", sizeof(IP_Port)); | 140 | ck_assert_msg(sizeof(IP_Port) == 19, "sizeof(IP_Port): expected result 19, got %u.", sizeof(IP_Port)); |
141 | ck_assert_msg(sizeof(IP4_Port) == 8, "sizeof(IP4_Port): expected result 8, got %u.", sizeof(IP4_Port)); | ||
142 | } | 141 | } |
143 | END_TEST | 142 | END_TEST |
144 | 143 | ||
diff --git a/auto_tests/onion_test.c b/auto_tests/onion_test.c index 2f244693..4489a894 100644 --- a/auto_tests/onion_test.c +++ b/auto_tests/onion_test.c | |||
@@ -80,7 +80,7 @@ static int handle_test_3(void *object, IP_Port source, uint8_t *packet, uint32_t | |||
80 | 80 | ||
81 | uint8_t plain[1 + crypto_hash_sha256_BYTES]; | 81 | uint8_t plain[1 + crypto_hash_sha256_BYTES]; |
82 | //print_client_id(packet, length); | 82 | //print_client_id(packet, length); |
83 | int len = decrypt_data(test_3_pub_key, onion->dht->c->self_secret_key, packet + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH, | 83 | int len = decrypt_data(test_3_pub_key, onion->dht->self_secret_key, packet + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH, |
84 | packet + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH + crypto_box_NONCEBYTES, | 84 | packet + 1 + ONION_ANNOUNCE_SENDBACK_DATA_LENGTH + crypto_box_NONCEBYTES, |
85 | 1 + crypto_hash_sha256_BYTES + crypto_box_MACBYTES, plain); | 85 | 1 + crypto_hash_sha256_BYTES + crypto_box_MACBYTES, plain); |
86 | 86 | ||
@@ -111,7 +111,7 @@ static int handle_test_4(void *object, IP_Port source, uint8_t *packet, uint32_t | |||
111 | if (memcmp(nonce, packet + 1, crypto_box_NONCEBYTES) != 0) | 111 | if (memcmp(nonce, packet + 1, crypto_box_NONCEBYTES) != 0) |
112 | return 1; | 112 | return 1; |
113 | 113 | ||
114 | int len = decrypt_data(packet + 1 + crypto_box_NONCEBYTES, onion->dht->c->self_secret_key, packet + 1, | 114 | int len = decrypt_data(packet + 1 + crypto_box_NONCEBYTES, onion->dht->self_secret_key, packet + 1, |
115 | packet + 1 + crypto_box_NONCEBYTES + crypto_box_PUBLICKEYBYTES, sizeof("Install gentoo") + crypto_box_MACBYTES, plain); | 115 | packet + 1 + crypto_box_NONCEBYTES + crypto_box_PUBLICKEYBYTES, sizeof("Install gentoo") + crypto_box_MACBYTES, plain); |
116 | 116 | ||
117 | if (len == -1) | 117 | if (len == -1) |
@@ -129,8 +129,8 @@ START_TEST(test_basic) | |||
129 | IP ip; | 129 | IP ip; |
130 | ip_init(&ip, 1); | 130 | ip_init(&ip, 1); |
131 | ip.ip6.uint8[15] = 1; | 131 | ip.ip6.uint8[15] = 1; |
132 | Onion *onion1 = new_onion(new_DHT(new_net_crypto(new_networking(ip, 34567)))); | 132 | Onion *onion1 = new_onion(new_DHT(new_networking(ip, 34567))); |
133 | Onion *onion2 = new_onion(new_DHT(new_net_crypto(new_networking(ip, 34568)))); | 133 | Onion *onion2 = new_onion(new_DHT(new_networking(ip, 34568))); |
134 | ck_assert_msg((onion1 != NULL) && (onion2 != NULL), "Onion failed initializing."); | 134 | ck_assert_msg((onion1 != NULL) && (onion2 != NULL), "Onion failed initializing."); |
135 | networking_registerhandler(onion2->net, 'I', &handle_test_1, onion2); | 135 | networking_registerhandler(onion2->net, 'I', &handle_test_1, onion2); |
136 | 136 | ||
@@ -176,26 +176,30 @@ START_TEST(test_basic) | |||
176 | ck_assert_msg((onion1_a != NULL) && (onion2_a != NULL), "Onion_Announce failed initializing."); | 176 | ck_assert_msg((onion1_a != NULL) && (onion2_a != NULL), "Onion_Announce failed initializing."); |
177 | uint8_t zeroes[64] = {0}; | 177 | uint8_t zeroes[64] = {0}; |
178 | randombytes(sb_data, sizeof(sb_data)); | 178 | randombytes(sb_data, sizeof(sb_data)); |
179 | uint64_t s; | ||
180 | memcpy(&s, sb_data, sizeof(uint64_t)); | ||
179 | memcpy(test_3_pub_key, nodes[3].client_id, crypto_box_PUBLICKEYBYTES); | 181 | memcpy(test_3_pub_key, nodes[3].client_id, crypto_box_PUBLICKEYBYTES); |
180 | ret = send_announce_request(onion1->net, &path, nodes[3], onion1->dht->c->self_public_key, | 182 | ret = send_announce_request(onion1->net, &path, nodes[3], onion1->dht->self_public_key, |
181 | onion1->dht->c->self_secret_key, | 183 | onion1->dht->self_secret_key, |
182 | zeroes, onion1->dht->c->self_public_key, onion1->dht->c->self_public_key, sb_data); | 184 | zeroes, onion1->dht->self_public_key, onion1->dht->self_public_key, s); |
183 | ck_assert_msg(ret == 0, "Failed to create/send onion announce_request packet."); | 185 | ck_assert_msg(ret == 0, "Failed to create/send onion announce_request packet."); |
184 | handled_test_3 = 0; | 186 | handled_test_3 = 0; |
185 | 187 | ||
186 | while (handled_test_3 == 0) { | 188 | while (handled_test_3 == 0) { |
187 | do_onion(onion1); | 189 | do_onion(onion1); |
188 | do_onion(onion2); | 190 | do_onion(onion2); |
191 | c_sleep(50); | ||
189 | } | 192 | } |
190 | 193 | ||
191 | randombytes(sb_data, sizeof(sb_data)); | 194 | randombytes(sb_data, sizeof(sb_data)); |
195 | memcpy(&s, sb_data, sizeof(uint64_t)); | ||
192 | memcpy(onion2_a->entries[1].public_key, onion2->dht->self_public_key, crypto_box_PUBLICKEYBYTES); | 196 | memcpy(onion2_a->entries[1].public_key, onion2->dht->self_public_key, crypto_box_PUBLICKEYBYTES); |
193 | onion2_a->entries[1].time = unix_time(); | 197 | onion2_a->entries[1].time = unix_time(); |
194 | networking_registerhandler(onion1->net, NET_PACKET_ONION_DATA_RESPONSE, &handle_test_4, onion1); | 198 | networking_registerhandler(onion1->net, NET_PACKET_ONION_DATA_RESPONSE, &handle_test_4, onion1); |
195 | send_announce_request(onion1->net, &path, nodes[3], onion1->dht->c->self_public_key, onion1->dht->c->self_secret_key, | 199 | send_announce_request(onion1->net, &path, nodes[3], onion1->dht->self_public_key, onion1->dht->self_secret_key, |
196 | test_3_ping_id, onion1->dht->c->self_public_key, onion1->dht->c->self_public_key, sb_data); | 200 | test_3_ping_id, onion1->dht->self_public_key, onion1->dht->self_public_key, s); |
197 | 201 | ||
198 | while (memcmp(onion2_a->entries[ONION_ANNOUNCE_MAX_ENTRIES - 2].public_key, onion1->dht->c->self_public_key, | 202 | while (memcmp(onion2_a->entries[ONION_ANNOUNCE_MAX_ENTRIES - 2].public_key, onion1->dht->self_public_key, |
199 | crypto_box_PUBLICKEYBYTES) != 0) { | 203 | crypto_box_PUBLICKEYBYTES) != 0) { |
200 | do_onion(onion1); | 204 | do_onion(onion1); |
201 | do_onion(onion2); | 205 | do_onion(onion2); |
@@ -203,12 +207,12 @@ START_TEST(test_basic) | |||
203 | } | 207 | } |
204 | 208 | ||
205 | c_sleep(1000); | 209 | c_sleep(1000); |
206 | Onion *onion3 = new_onion(new_DHT(new_net_crypto(new_networking(ip, 34569)))); | 210 | Onion *onion3 = new_onion(new_DHT(new_networking(ip, 34569))); |
207 | ck_assert_msg((onion3 != NULL), "Onion failed initializing."); | 211 | ck_assert_msg((onion3 != NULL), "Onion failed initializing."); |
208 | 212 | ||
209 | new_nonce(nonce); | 213 | new_nonce(nonce); |
210 | ret = send_data_request(onion3->net, &path, nodes[3].ip_port, onion1->dht->c->self_public_key, | 214 | ret = send_data_request(onion3->net, &path, nodes[3].ip_port, onion1->dht->self_public_key, |
211 | onion1->dht->c->self_public_key, | 215 | onion1->dht->self_public_key, |
212 | nonce, (uint8_t *)"Install gentoo", sizeof("Install gentoo")); | 216 | nonce, (uint8_t *)"Install gentoo", sizeof("Install gentoo")); |
213 | ck_assert_msg(ret == 0, "Failed to create/send onion data_request packet."); | 217 | ck_assert_msg(ret == 0, "Failed to create/send onion data_request packet."); |
214 | handled_test_4 = 0; | 218 | handled_test_4 = 0; |
@@ -233,10 +237,10 @@ Onions *new_onions(uint16_t port) | |||
233 | ip_init(&ip, 1); | 237 | ip_init(&ip, 1); |
234 | ip.ip6.uint8[15] = 1; | 238 | ip.ip6.uint8[15] = 1; |
235 | Onions *on = malloc(sizeof(Onions)); | 239 | Onions *on = malloc(sizeof(Onions)); |
236 | DHT *dht = new_DHT(new_net_crypto(new_networking(ip, port))); | 240 | DHT *dht = new_DHT(new_networking(ip, port)); |
237 | on->onion = new_onion(dht); | 241 | on->onion = new_onion(dht); |
238 | on->onion_a = new_onion_announce(dht); | 242 | on->onion_a = new_onion_announce(dht); |
239 | on->onion_c = new_onion_client(dht); | 243 | on->onion_c = new_onion_client(new_net_crypto(dht)); |
240 | 244 | ||
241 | if (on->onion && on->onion_a && on->onion_c) | 245 | if (on->onion && on->onion_a && on->onion_c) |
242 | return on; | 246 | return on; |
@@ -297,8 +301,8 @@ START_TEST(test_announce) | |||
297 | c_sleep(50); | 301 | c_sleep(50); |
298 | } | 302 | } |
299 | 303 | ||
300 | onion_addfriend(onions[7]->onion_c, onions[37]->onion->dht->c->self_public_key); | 304 | onion_addfriend(onions[7]->onion_c, onions[37]->onion_c->c->self_public_key); |
301 | int frnum = onion_addfriend(onions[37]->onion_c, onions[7]->onion->dht->c->self_public_key); | 305 | int frnum = onion_addfriend(onions[37]->onion_c, onions[7]->onion_c->c->self_public_key); |
302 | 306 | ||
303 | int ok = -1; | 307 | int ok = -1; |
304 | 308 | ||
diff --git a/auto_tests/tox_test.c b/auto_tests/tox_test.c index 1e01aee7..9b63b35b 100644 --- a/auto_tests/tox_test.c +++ b/auto_tests/tox_test.c | |||
@@ -96,21 +96,26 @@ void file_print_control(Tox *m, int friendnumber, uint8_t send_recieve, uint8_t | |||
96 | } | 96 | } |
97 | 97 | ||
98 | uint64_t size_recv; | 98 | uint64_t size_recv; |
99 | uint8_t num; | ||
99 | void write_file(Tox *m, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata) | 100 | void write_file(Tox *m, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata) |
100 | { | 101 | { |
101 | if (*((uint32_t *)userdata) != 974536) | 102 | if (*((uint32_t *)userdata) != 974536) |
102 | return; | 103 | return; |
103 | 104 | ||
104 | uint8_t *f_data = malloc(length); | 105 | uint8_t *f_data = malloc(length); |
105 | memset(f_data, 6, length); | 106 | memset(f_data, num, length); |
107 | ++num; | ||
106 | 108 | ||
107 | if (memcmp(f_data, data, length) == 0) | 109 | if (memcmp(f_data, data, length) == 0) { |
108 | size_recv += length; | 110 | size_recv += length; |
111 | } else { | ||
112 | printf("FILE_CORRUPTED\n"); | ||
113 | } | ||
109 | } | 114 | } |
110 | 115 | ||
111 | START_TEST(test_few_clients) | 116 | START_TEST(test_few_clients) |
112 | { | 117 | { |
113 | long long unsigned int cur_time = time(NULL); | 118 | long long unsigned int con_time, cur_time = time(NULL); |
114 | Tox *tox1 = tox_new(TOX_ENABLE_IPV6_DEFAULT); | 119 | Tox *tox1 = tox_new(TOX_ENABLE_IPV6_DEFAULT); |
115 | Tox *tox2 = tox_new(TOX_ENABLE_IPV6_DEFAULT); | 120 | Tox *tox2 = tox_new(TOX_ENABLE_IPV6_DEFAULT); |
116 | Tox *tox3 = tox_new(TOX_ENABLE_IPV6_DEFAULT); | 121 | Tox *tox3 = tox_new(TOX_ENABLE_IPV6_DEFAULT); |
@@ -131,6 +136,7 @@ START_TEST(test_few_clients) | |||
131 | 136 | ||
132 | if (tox_isconnected(tox1) && tox_isconnected(tox2) && tox_isconnected(tox3) && off) { | 137 | if (tox_isconnected(tox1) && tox_isconnected(tox2) && tox_isconnected(tox3) && off) { |
133 | printf("Toxes are online, took %llu seconds\n", time(NULL) - cur_time); | 138 | printf("Toxes are online, took %llu seconds\n", time(NULL) - cur_time); |
139 | con_time = time(NULL); | ||
134 | off = 0; | 140 | off = 0; |
135 | } | 141 | } |
136 | 142 | ||
@@ -141,7 +147,7 @@ START_TEST(test_few_clients) | |||
141 | c_sleep(50); | 147 | c_sleep(50); |
142 | } | 148 | } |
143 | 149 | ||
144 | printf("tox clients connected\n"); | 150 | printf("tox clients connected took %llu seconds\n", time(NULL) - con_time); |
145 | to_compare = 974536; | 151 | to_compare = 974536; |
146 | tox_callback_friend_message(tox3, print_message, &to_compare); | 152 | tox_callback_friend_message(tox3, print_message, &to_compare); |
147 | tox_send_message(tox2, 0, (uint8_t *)"Install Gentoo", sizeof("Install Gentoo")); | 153 | tox_send_message(tox2, 0, (uint8_t *)"Install Gentoo", sizeof("Install Gentoo")); |
@@ -227,8 +233,8 @@ START_TEST(test_few_clients) | |||
227 | ck_assert_msg(fnum != -1, "tox_new_file_sender fail"); | 233 | ck_assert_msg(fnum != -1, "tox_new_file_sender fail"); |
228 | int fpiece_size = tox_file_data_size(tox2, 0); | 234 | int fpiece_size = tox_file_data_size(tox2, 0); |
229 | uint8_t *f_data = malloc(fpiece_size); | 235 | uint8_t *f_data = malloc(fpiece_size); |
230 | memset(f_data, 6, fpiece_size); | 236 | uint8_t num = 0; |
231 | 237 | memset(f_data, num, fpiece_size); | |
232 | while (1) { | 238 | while (1) { |
233 | file_sent = 0; | 239 | file_sent = 0; |
234 | tox_do(tox1); | 240 | tox_do(tox1); |
@@ -241,6 +247,8 @@ START_TEST(test_few_clients) | |||
241 | sendf_ok = 0; | 247 | sendf_ok = 0; |
242 | tox_file_send_control(tox2, 0, 0, fnum, TOX_FILECONTROL_FINISHED, NULL, 0); | 248 | tox_file_send_control(tox2, 0, 0, fnum, TOX_FILECONTROL_FINISHED, NULL, 0); |
243 | } | 249 | } |
250 | ++num; | ||
251 | memset(f_data, num, fpiece_size); | ||
244 | 252 | ||
245 | totalf_size -= fpiece_size; | 253 | totalf_size -= fpiece_size; |
246 | } | 254 | } |
@@ -284,6 +292,12 @@ START_TEST(test_many_clients) | |||
284 | loop_top: | 292 | loop_top: |
285 | pairs[i].tox1 = rand() % NUM_TOXES; | 293 | pairs[i].tox1 = rand() % NUM_TOXES; |
286 | pairs[i].tox2 = (pairs[i].tox1 + rand() % (NUM_TOXES - 1) + 1) % NUM_TOXES; | 294 | pairs[i].tox2 = (pairs[i].tox1 + rand() % (NUM_TOXES - 1) + 1) % NUM_TOXES; |
295 | |||
296 | for (j = 0; j < i; ++j) { | ||
297 | if (pairs[j].tox2 == pairs[i].tox1 && pairs[j].tox1 == pairs[i].tox2) | ||
298 | goto loop_top; | ||
299 | } | ||
300 | |||
287 | tox_get_address(toxes[pairs[i].tox1], address); | 301 | tox_get_address(toxes[pairs[i].tox1], address); |
288 | int test = tox_add_friend(toxes[pairs[i].tox2], address, (uint8_t *)"Gentoo", 7); | 302 | int test = tox_add_friend(toxes[pairs[i].tox2], address, (uint8_t *)"Gentoo", 7); |
289 | 303 | ||
@@ -331,7 +345,7 @@ Suite *tox_suite(void) | |||
331 | Suite *s = suite_create("Tox"); | 345 | Suite *s = suite_create("Tox"); |
332 | 346 | ||
333 | DEFTESTCASE_SLOW(few_clients, 50); | 347 | DEFTESTCASE_SLOW(few_clients, 50); |
334 | DEFTESTCASE_SLOW(many_clients, 300); | 348 | DEFTESTCASE_SLOW(many_clients, 150); |
335 | return s; | 349 | return s; |
336 | } | 350 | } |
337 | 351 | ||