diff options
author | Diadlo <polsha3@gmail.com> | 2016-12-27 00:00:26 +0300 |
---|---|---|
committer | Diadlo <polsha3@gmail.com> | 2017-01-04 01:34:20 +0300 |
commit | b99e99f5d9547cb7af6c3eb83f792c7cdbb7bd6d (patch) | |
tree | 54a311a04a92f2b132b812fadbd6466178189593 /auto_tests | |
parent | 06a68f0f5f7fd305e1179d3fd02b4399a2cbc4b8 (diff) |
Add tests to secure memcmp and memzero functions.
Diffstat (limited to 'auto_tests')
-rw-r--r-- | auto_tests/crypto_test.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/auto_tests/crypto_test.c b/auto_tests/crypto_test.c index c1003f80..7c32b43a 100644 --- a/auto_tests/crypto_test.c +++ b/auto_tests/crypto_test.c | |||
@@ -2,7 +2,9 @@ | |||
2 | #include "config.h" | 2 | #include "config.h" |
3 | #endif | 3 | #endif |
4 | 4 | ||
5 | #include "../toxcore/misc_tools.h" | ||
5 | #include "../toxcore/net_crypto.h" | 6 | #include "../toxcore/net_crypto.h" |
7 | |||
6 | #include <check.h> | 8 | #include <check.h> |
7 | #include <stdint.h> | 9 | #include <stdint.h> |
8 | #include <stdlib.h> | 10 | #include <stdlib.h> |
@@ -323,6 +325,89 @@ START_TEST(test_increment_nonce) | |||
323 | } | 325 | } |
324 | END_TEST | 326 | END_TEST |
325 | 327 | ||
328 | START_TEST(test_memzero) | ||
329 | { | ||
330 | uint8_t src[sizeof(test_c)]; | ||
331 | memcpy(src, test_c, sizeof(test_c)); | ||
332 | |||
333 | crypto_memzero(src, sizeof(src)); | ||
334 | size_t i; | ||
335 | |||
336 | for (i = 0; i < sizeof(src); i++) { | ||
337 | ck_assert_msg(src[i] == 0, "Memory is not zeroed"); | ||
338 | } | ||
339 | } | ||
340 | END_TEST | ||
341 | |||
342 | #define CRYPTO_TEST_MEMCMP_SIZE 1024*32 | ||
343 | #define CRYPTO_TEST_MEMCMP_COUNT 500 | ||
344 | #define CRYPTO_TEST_MEMCMP_EPS 10 | ||
345 | |||
346 | static make_quick_sort(clock_t) | ||
347 | |||
348 | static int cmp(clock_t a, clock_t b) | ||
349 | { | ||
350 | if (a < b) { | ||
351 | return -1; | ||
352 | } | ||
353 | |||
354 | if (a > b) { | ||
355 | return 1; | ||
356 | } | ||
357 | |||
358 | return 0; | ||
359 | } | ||
360 | |||
361 | static clock_t memcmp_time(void *a, void *b, size_t len) | ||
362 | { | ||
363 | clock_t start = clock(); | ||
364 | crypto_memcmp(a, b, len); | ||
365 | return clock() - start; | ||
366 | } | ||
367 | |||
368 | static clock_t memcmp_median(void *a, void *b, size_t len) | ||
369 | { | ||
370 | size_t i; | ||
371 | clock_t results[CRYPTO_TEST_MEMCMP_COUNT]; | ||
372 | |||
373 | for (i = 0; i < CRYPTO_TEST_MEMCMP_COUNT; i++) { | ||
374 | results[i] = memcmp_time(a, b, len); | ||
375 | } | ||
376 | |||
377 | clock_t_quick_sort(results, CRYPTO_TEST_MEMCMP_COUNT, cmp); | ||
378 | return results[CRYPTO_TEST_MEMCMP_COUNT / 2]; | ||
379 | } | ||
380 | |||
381 | START_TEST(test_memcmp) | ||
382 | { | ||
383 | uint8_t src[CRYPTO_TEST_MEMCMP_SIZE]; | ||
384 | rand_bytes(src, sizeof(src)); | ||
385 | |||
386 | uint8_t same[sizeof(src)]; | ||
387 | memcpy(same, src, sizeof(src)); | ||
388 | |||
389 | uint8_t not_same[sizeof(src)]; | ||
390 | rand_bytes(not_same, sizeof(not_same)); | ||
391 | |||
392 | clock_t same_median = memcmp_median(src, same, sizeof(src)); | ||
393 | clock_t not_same_median = memcmp_median(src, not_same, sizeof(src)); | ||
394 | |||
395 | clock_t delta; | ||
396 | |||
397 | if (same_median > not_same_median) { | ||
398 | delta = same_median - not_same_median; | ||
399 | } else { | ||
400 | delta = not_same_median - same_median; | ||
401 | } | ||
402 | |||
403 | ck_assert_msg(delta < CRYPTO_TEST_MEMCMP_EPS, | ||
404 | "Delta time is too long (%d >= %d)\n" | ||
405 | "Time of the same data comparation: %d\n" | ||
406 | "Time of the different data comparation: %d", | ||
407 | delta, CRYPTO_TEST_MEMCMP_EPS, same_median, not_same_median); | ||
408 | } | ||
409 | END_TEST | ||
410 | |||
326 | static Suite *crypto_suite(void) | 411 | static Suite *crypto_suite(void) |
327 | { | 412 | { |
328 | Suite *s = suite_create("Crypto"); | 413 | Suite *s = suite_create("Crypto"); |
@@ -333,6 +418,8 @@ static Suite *crypto_suite(void) | |||
333 | DEFTESTCASE(large_data); | 418 | DEFTESTCASE(large_data); |
334 | DEFTESTCASE(large_data_symmetric); | 419 | DEFTESTCASE(large_data_symmetric); |
335 | DEFTESTCASE_SLOW(increment_nonce, 20); | 420 | DEFTESTCASE_SLOW(increment_nonce, 20); |
421 | DEFTESTCASE(memzero); | ||
422 | DEFTESTCASE(memcmp); | ||
336 | 423 | ||
337 | return s; | 424 | return s; |
338 | } | 425 | } |