diff options
author | Rich Salz <rsalz@openssl.org> | 2017-04-18 14:50:00 -0400 |
---|---|---|
committer | Rich Salz <rsalz@openssl.org> | 2017-04-18 14:50:00 -0400 |
commit | 3304d57848479441ffa0facc6d9693a466559756 (patch) | |
tree | 3bbd1a1d6f0bbf9055bb68bdd83b0b26bdf71522 /test | |
parent | b66411f6cda6970c01283ddde6d8063c57b3b7d9 (diff) |
Convert more tests to framework
randtest, cipher_overhead_test, bioprintest, constant_time_test
Move test_bioprint to 04 group
Reviewed-by: Richard Levitte <levitte@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3228)
Diffstat (limited to 'test')
-rw-r--r-- | test/bioprinttest.c | 255 | ||||
-rw-r--r-- | test/build.info | 10 | ||||
-rw-r--r-- | test/cipher_overhead_test.c | 25 | ||||
-rw-r--r-- | test/constant_time_test.c | 446 | ||||
-rw-r--r-- | test/randtest.c | 95 | ||||
-rw-r--r-- | test/recipes/04-test_bioprint.t (renamed from test/recipes/90-test_bioprint.t) | 0 |
6 files changed, 327 insertions, 504 deletions
diff --git a/test/bioprinttest.c b/test/bioprinttest.c index 4eeb4c67a9..ca0f1aadf6 100644 --- a/test/bioprinttest.c +++ b/test/bioprinttest.c @@ -11,8 +11,11 @@ #include <string.h> #include <openssl/bio.h> #include "internal/numbers.h" +#include "testutil.h" +#include "test_main.h" +#include "test_main_custom.h" -#define nelem(x) (sizeof(x)/sizeof((x)[0])) +#define nelem(x) (int)(sizeof(x) / sizeof((x)[0])) static int justprint = 0; @@ -89,64 +92,13 @@ static char *fpexpected[][5] = { /* 69 */ { "6.6667e+04", "66666.6667", "6.667e+04", "6.6667E+04", "6.667E+04" }, }; -static void dofptest(int test, double val, char *width, int prec, int *fail) -{ - char format[80], result[80]; - int i; - - for (i = 0; i < 5; i++) { - char *fspec = NULL; - switch (i) { - case 0: - fspec = "e"; - break; - case 1: - fspec = "f"; - break; - case 2: - fspec = "g"; - break; - case 3: - fspec = "E"; - break; - case 4: - fspec = "G"; - break; - } - - if (prec >= 0) - BIO_snprintf(format, sizeof(format), "%%%s.%d%s", width, prec, - fspec); - else - BIO_snprintf(format, sizeof(format), "%%%s%s", width, fspec); - BIO_snprintf(result, sizeof(result), format, val); - - if (justprint) { - if (i == 0) { - printf(" /* %3d */ { \"%s\"", test, result); - } else { - printf(", \"%s\"", result); - } - } else { - if (strcmp(fpexpected[test][i], result) != 0) { - printf("Test %d(%d) failed. Expected \"%s\". Got \"%s\". " - "Format \"%s\"\n", test, i, fpexpected[test][i], result, - format); - *fail = 1; - } - } - } - if (justprint) { - printf(" },\n"); - } -} - -struct z_data_st { +typedef struct z_data_st { size_t value; const char *format; const char *expected; -}; -static struct z_data_st zu_data[] = { +} z_data; + +static z_data zu_data[] = { { SIZE_MAX, "%zu", (sizeof(size_t) == 4 ? "4294967295" : sizeof(size_t) == 8 ? "18446744073709551615" : "") }, @@ -161,24 +113,24 @@ static struct z_data_st zu_data[] = { { 0, "%zi", "0" }, }; -static void dozutest(int test, const struct z_data_st *data, int *fail) +static int test_zu(int i) { char bio_buf[80]; + const z_data *data = &zu_data[i]; BIO_snprintf(bio_buf, sizeof(bio_buf) - 1, data->format, data->value); - if (strcmp(bio_buf, data->expected) != 0) { - printf("Test %d failed. Expected \"%s\". Got \"%s\". " - "Format \"%s\"\n", test, data->expected, bio_buf, data->format); - *fail = 1; - } + if (!TEST_str_eq(bio_buf, data->expected)) + return 0; + return 1; } -struct j_data_st { +typedef struct j_data_st { uint64_t value; const char *format; const char *expected; -}; -static struct j_data_st j_data[] = { +} j_data; + +static j_data jf_data[] = { { 0xffffffffffffffffU, "%ju", "18446744073709551615" }, { 0xffffffffffffffffU, "%jx", "ffffffffffffffff" }, { 0x8000000000000000U, "%ju", "9223372036854775808" }, @@ -189,108 +141,109 @@ static struct j_data_st j_data[] = { { 0x8000000000000000U, "%ji", "-9223372036854775808" }, }; -static void dojtest(int test, const struct j_data_st *data, int *fail) +static int test_j(int i) { + const j_data *data = &jf_data[i]; char bio_buf[80]; BIO_snprintf(bio_buf, sizeof(bio_buf) - 1, data->format, data->value); - if (strcmp(bio_buf, data->expected) != 0) { - printf("Test %d failed. Expected \"%s\". Got \"%s\". " - "Format \"%s\"\n", test, data->expected, bio_buf, data->format); - *fail = 1; - } + if (!TEST_str_eq(bio_buf, data->expected)) + return 0; + return 1; } -int main(int argc, char **argv) + +/* Precision and width. */ +typedef struct pw_st { + int p; + const char *w; +} pw; + +static pw pw_params[] = { + { 4, "" }, + { 5, "" }, + { 4, "12" }, + { 5, "12" }, + { 0, "" }, + { -1, "" }, + { 4, "08" } +}; + +static int dofptest(int test, double val, const char *width, int prec) { - int test = 0; - size_t i; - int fail = 0; - int prec = -1; - char *width = ""; - const double frac = 2.0/3.0; - char buf[80]; + static const char *fspecs[] = { + "e", "f", "g", "E", "G" + }; + char format[80], result[80]; + int ret = 1, i; - if (argc == 2 && strcmp(argv[1], "-expected") == 0) { - justprint = 1; - } + for (i = 0; i < nelem(fspecs); i++) { + const char *fspec = fspecs[i]; - CRYPTO_set_mem_debug(1); - CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); + if (prec >= 0) + BIO_snprintf(format, sizeof(format), "%%%s.%d%s", width, prec, + fspec); + else + BIO_snprintf(format, sizeof(format), "%%%s%s", width, fspec); + BIO_snprintf(result, sizeof(result), format, val); - /* Tests for floating point format specifiers */ - for (i = 0; i < 7; i++) { - switch (i) { - case 0: - prec = 4; - width = ""; - break; - case 1: - prec = 5; - width = ""; - break; - case 2: - prec = 4; - width = "12"; - break; - case 3: - prec = 5; - width = "12"; - break; - case 4: - prec = 0; - width = ""; - break; - case 5: - prec = -1; - width = ""; - break; - case 6: - prec = 4; - width = "08"; - break; + if (justprint) { + if (i == 0) + printf(" /* %d */ { \"%s\"", test, result); + else + printf(", \"%s\"", result); + } else if (!TEST_str_eq(fpexpected[test][i], result)) { + TEST_info("test %d format=|%s| exp=|%s|, ret=|%s|", + test, format, fpexpected[test][i], result); + ret = 0; } - - dofptest(test++, 0.0, width, prec, &fail); - dofptest(test++, 0.67, width, prec, &fail); - dofptest(test++, frac, width, prec, &fail); - dofptest(test++, frac / 1000, width, prec, &fail); - dofptest(test++, frac / 10000, width, prec, &fail); - dofptest(test++, 6.0 + frac, width, prec, &fail); - dofptest(test++, 66.0 + frac, width, prec, &fail); - dofptest(test++, 666.0 + frac, width, prec, &fail); - dofptest(test++, 6666.0 + frac, width, prec, &fail); - dofptest(test++, 66666.0 + frac, width, prec, &fail); } + if (justprint) + printf(" },\n"); + return ret; +} - /* Test excessively big number. Should fail */ - if (BIO_snprintf(buf, sizeof(buf), "%f\n", 2 * (double)ULONG_MAX) != -1) { - printf("Test %d failed. Unexpected success return from " - "BIO_snprintf()\n", test); - fail = 1; - } +static int test_fp(int i) +{ + static int t = 0; + const double frac = 2.0 / 3.0; + const pw *pwp = &pw_params[i]; + + if (!TEST_true(dofptest(t++, 0.0, pwp->w, pwp->p)) + || !TEST_true(dofptest(t++, 0.67, pwp->w, pwp->p)) + || !TEST_true(dofptest(t++, frac, pwp->w, pwp->p)) + || !TEST_true(dofptest(t++, frac / 1000, pwp->w, pwp->p)) + || !TEST_true(dofptest(t++, frac / 10000, pwp->w, pwp->p)) + || !TEST_true(dofptest(t++, 6.0 + frac, pwp->w, pwp->p)) + || !TEST_true(dofptest(t++, 66.0 + frac, pwp->w, pwp->p)) + || !TEST_true(dofptest(t++, 666.0 + frac, pwp->w, pwp->p)) + || !TEST_true(dofptest(t++, 6666.0 + frac, pwp->w, pwp->p)) + || !TEST_true(dofptest(t++, 66666.0 + frac, pwp->w, pwp->p))) + return 0; + return 1; +} - for (i = 0; i < nelem(zu_data); i++) { - dozutest(test++, &zu_data[i], &fail); - } +static int test_big(void) +{ + char buf[80]; - for (i = 0; i < nelem(j_data); i++) { - dojtest(test++, &j_data[i], &fail); - } + /* Test excessively big number. Should fail */ + if (!TEST_int_eq(BIO_snprintf(buf, sizeof(buf), + "%f\n", 2 * (double)ULONG_MAX), -1)) + return 0; + return 1; +} -#ifndef OPENSSL_NO_CRYPTO_MDEBUG - if (CRYPTO_mem_leaks_fp(stderr) <= 0) - return 1; -# endif - if (!justprint) { - if (fail) { - printf("FAIL\n"); - return 1; - } - printf ("PASS\n"); - } - return 0; -} +int test_main(int argc, char **argv) +{ + if (argc == 2 && strcmp(argv[1], "-expected") == 0) + justprint = 1; + ADD_TEST(test_big); + ADD_ALL_TESTS(test_fp, nelem(pw_params)); + ADD_ALL_TESTS(test_zu, nelem(zu_data)); + ADD_ALL_TESTS(test_j, nelem(jf_data)); + return run_tests(argv[0]); +} diff --git a/test/build.info b/test/build.info index 8346385412..eb36596ece 100644 --- a/test/build.info +++ b/test/build.info @@ -111,7 +111,7 @@ IF[{- !$disabled{tests} -}] INCLUDE[mdc2test]=../include DEPEND[mdc2test]=../libcrypto - SOURCE[randtest]=randtest.c + SOURCE[randtest]=randtest.c testutil.c test_main.c INCLUDE[randtest]=../include DEPEND[randtest]=../libcrypto @@ -175,7 +175,7 @@ IF[{- !$disabled{tests} -}] INCLUDE[danetest]=../include DEPEND[danetest]=../libcrypto ../libssl - SOURCE[constant_time_test]=constant_time_test.c + SOURCE[constant_time_test]=constant_time_test.c testutil.c test_main.c INCLUDE[constant_time_test]=.. ../include DEPEND[constant_time_test]=../libcrypto @@ -264,8 +264,8 @@ IF[{- !$disabled{tests} -}] INCLUDE[asynciotest]=../include DEPEND[asynciotest]=../libcrypto ../libssl - SOURCE[bioprinttest]=bioprinttest.c - INCLUDE[bioprinttest]=../include + SOURCE[bioprinttest]=bioprinttest.c testutil.c test_main_custom.c + INCLUDE[bioprinttest]=../ ../include DEPEND[bioprinttest]=../libcrypto SOURCE[sslapitest]=sslapitest.c ssltestlib.c testutil.c test_main_custom.c @@ -311,7 +311,7 @@ IF[{- !$disabled{tests} -}] IF[{- $disabled{shared} -}] PROGRAMS_NO_INST=cipher_overhead_test - SOURCE[cipher_overhead_test]=cipher_overhead_test.c + SOURCE[cipher_overhead_test]=cipher_overhead_test.c testutil.c test_main.c INCLUDE[cipher_overhead_test]=.. ../include DEPEND[cipher_overhead_test]=../libcrypto ../libssl ENDIF diff --git a/test/cipher_overhead_test.c b/test/cipher_overhead_test.c index 8c262b3b9a..5ddd21c4d7 100644 --- a/test/cipher_overhead_test.c +++ b/test/cipher_overhead_test.c @@ -7,13 +7,15 @@ * https://www.openssl.org/source/license.html */ -#include <stdio.h> +#include "e_os.h" +#include "testutil.h" +#include "test_main.h" #include "../ssl/ssl_locl.h" -int main(void) +static int cipher_overhead(void) { - int i, n = ssl3_num_ciphers(); + int ret = 1, i, n = ssl3_num_ciphers(); const SSL_CIPHER *ciph; size_t mac, in, blk, ex; @@ -21,13 +23,18 @@ int main(void) ciph = ssl3_get_cipher(i); if (!ciph->min_dtls) continue; - if (!ssl_cipher_get_overhead(ciph, &mac, &in, &blk, &ex)) { - printf("Error getting overhead for %s\n", ciph->name); - exit(1); + if (!TEST_true(ssl_cipher_get_overhead(ciph, &mac, &in, &blk, &ex))) { + TEST_info("Failed getting %s", ciph->name); + ret = 0; } else { - printf("Cipher %s: %"OSSLzu" %"OSSLzu" %"OSSLzu" %"OSSLzu"\n", - ciph->name, mac, in, blk, ex); + TEST_info("Cipher %s: %"OSSLzu" %"OSSLzu" %"OSSLzu" %"OSSLzu, + ciph->name, mac, in, blk, ex); } } - exit(0); + return ret; +} + +void register_tests(void) +{ + ADD_TEST(cipher_overhead); } diff --git a/test/constant_time_test.c b/test/constant_time_test.c index e53a73b63a..d34e386a8d 100644 --- a/test/constant_time_test.c +++ b/test/constant_time_test.c @@ -7,12 +7,13 @@ * https://www.openssl.org/source/license.html */ -#include "internal/constant_time_locl.h" -#include "e_os.h" - #include <stdio.h> #include <stdlib.h> +#include "e_os.h" +#include "internal/constant_time_locl.h" +#include "testutil.h" +#include "test_main.h" #include "internal/numbers.h" static const unsigned int CONSTTIME_TRUE = (unsigned)(~0); @@ -26,17 +27,11 @@ static int test_binary_op(unsigned int (*op) (unsigned int a, unsigned int b), const char *op_name, unsigned int a, unsigned int b, int is_true) { - unsigned c = op(a, b); - if (is_true && c != CONSTTIME_TRUE) { - fprintf(stderr, "Test failed for %s(%du, %du): expected %du " - "(TRUE), got %du\n", op_name, a, b, CONSTTIME_TRUE, c); - return 1; - } else if (!is_true && c != CONSTTIME_FALSE) { - fprintf(stderr, "Test failed for %s(%du, %du): expected %du " - "(FALSE), got %du\n", op_name, a, b, CONSTTIME_FALSE, c); - return 1; - } - return 0; + if (is_true && !TEST_uint_eq(op(a, b), CONSTTIME_TRUE)) + return 0; + if (!is_true && !TEST_uint_eq(op(a, b), CONSTTIME_FALSE)) + return 0; + return 1; } static int test_binary_op_8(unsigned @@ -44,210 +39,112 @@ static int test_binary_op_8(unsigned const char *op_name, unsigned int a, unsigned int b, int is_true) { - unsigned char c = op(a, b); - if (is_true && c != CONSTTIME_TRUE_8) { - fprintf(stderr, "Test failed for %s(%du, %du): expected %u " - "(TRUE), got %u\n", op_name, a, b, CONSTTIME_TRUE_8, c); - return 1; - } else if (!is_true && c != CONSTTIME_FALSE_8) { - fprintf(stderr, "Test failed for %s(%du, %du): expected %u " - "(FALSE), got %u\n", op_name, a, b, CONSTTIME_FALSE_8, c); - return 1; - } - return 0; + if (is_true && !TEST_uint_eq(op(a, b), CONSTTIME_TRUE_8)) + return 0; + if (!is_true && !TEST_uint_eq(op(a, b), CONSTTIME_FALSE_8)) + return 0; + return 1; } static int test_binary_op_s(size_t (*op) (size_t a, size_t b), const char *op_name, size_t a, size_t b, int is_true) { - size_t c = op(a, b); - if (is_true && c != CONSTTIME_TRUE_S) { - fprintf(stderr, "Test failed for %s(%"OSSLzu", %"OSSLzu - "): expected %"OSSLzu" (TRUE), got %"OSSLzu"\n", - op_name, a, b, CONSTTIME_TRUE_S, c); - return 1; - } else if (!is_true && c != CONSTTIME_FALSE_S) { - fprintf(stderr, "Test failed for %s(%"OSSLzu", %"OSSLzu - "): expected %" OSSLzu " (FALSE), got %"OSSLzu"\n", - op_name, a, b, CONSTTIME_FALSE_S, c); - return 1; - } - return 0; + if (is_true && !TEST_size_t_eq(op(a,b), CONSTTIME_TRUE_S)) + return 0; + if (!is_true && !TEST_uint_eq(op(a,b), CONSTTIME_FALSE_S)) + return 0; + return 1; } static int test_is_zero(unsigned int a) { - unsigned int c = constant_time_is_zero(a); - if (a == 0 && c != CONSTTIME_TRUE) { - fprintf(stderr, "Test failed for constant_time_is_zero(%du): " - "expected %du (TRUE), got %du\n", a, CONSTTIME_TRUE, c); - return 1; - } else if (a != 0 && c != CONSTTIME_FALSE) { - fprintf(stderr, "Test failed for constant_time_is_zero(%du): " - "expected %du (FALSE), got %du\n", a, CONSTTIME_FALSE, c); - return 1; - } - return 0; + if (a == 0 && !TEST_uint_eq(constant_time_is_zero(a), CONSTTIME_TRUE)) + return 0; + if (a != 0 && !TEST_uint_eq(constant_time_is_zero(a), CONSTTIME_FALSE)) + return 0; + return 1; } static int test_is_zero_8(unsigned int a) { - unsigned char c = constant_time_is_zero_8(a); - if (a == 0 && c != CONSTTIME_TRUE_8) { - fprintf(stderr, "Test failed for constant_time_is_zero(%du): " - "expected %u (TRUE), got %u\n", a, CONSTTIME_TRUE_8, c); - return 1; - } else if (a != 0 && c != CONSTTIME_FALSE) { - fprintf(stderr, "Test failed for constant_time_is_zero(%du): " - "expected %u (FALSE), got %u\n", a, CONSTTIME_FALSE_8, c); - return 1; - } - return 0; + if (a == 0 && !TEST_uint_eq(constant_time_is_zero_8(a), CONSTTIME_TRUE_8)) + return 0; + if (a != 0 && !TEST_uint_eq(constant_time_is_zero_8(a), CONSTTIME_FALSE_8)) + return 0; + return 1; } -static int test_is_zero_s(size_t a) +static int test_is_zero_s(unsigned int a) { - size_t c = constant_time_is_zero_s(a); - if (a == 0 && c != CONSTTIME_TRUE_S) { - fprintf(stderr, "Test failed for constant_time_is_zero_s(%"OSSLzu"): " - "expected %"OSSLzu" (TRUE), got %"OSSLzu"\n", - a, CONSTTIME_TRUE_S, c); - return 1; - } else if (a != 0 && c != CONSTTIME_FALSE) { - fprintf(stderr, "Test failed for constant_time_is_zero_s(%"OSSLzu"): " - "expected %"OSSLzu" (FALSE), got %"OSSLzu"\n", - a, CONSTTIME_FALSE_S, c); - return 1; - } - return 0; + if (a == 0 && !TEST_size_t_eq(constant_time_is_zero_s(a), CONSTTIME_TRUE_S)) + return 0; + if (a != 0 && !TEST_uint_eq(constant_time_is_zero_s(a), CONSTTIME_FALSE_S)) + return 0; + return 1; } + static int test_select(unsigned int a, unsigned int b) { - unsigned int selected = constant_time_select(CONSTTIME_TRUE, a, b); - if (selected != a) { - fprintf(stderr, "Test failed for constant_time_select(%du, %du," - "%du): expected %du(first value), got %du\n", - CONSTTIME_TRUE, a, b, a, selected); - return 1; - } - selected = constant_time_select(CONSTTIME_FALSE, a, b); - if (selected != b) { - fprintf(stderr, "Test failed for constant_time_select(%du, %du," - "%du): expected %du(second value), got %du\n", - CONSTTIME_FALSE, a, b, b, selected); - return 1; - } - return 0; + if (!TEST_uint_eq(constant_time_select(CONSTTIME_TRUE, a, b), a)) + return 0; + if (!TEST_uint_eq(constant_time_select(CONSTTIME_FALSE, a, b), b)) + return 0; + return 1; } static int test_select_8(unsigned char a, unsigned char b) { - unsigned char selected = constant_time_select_8(CONSTTIME_TRUE_8, a, b); - if (selected != a) { - fprintf(stderr, "Test failed for constant_time_select(%u, %u," - "%u): expected %u(first value), got %u\n", - CONSTTIME_TRUE, a, b, a, selected); - return 1; - } - selected = constant_time_select_8(CONSTTIME_FALSE_8, a, b); - if (selected != b) { - fprintf(stderr, "Test failed for constant_time_select(%u, %u," - "%u): expected %u(second value), got %u\n", - CONSTTIME_FALSE, a, b, b, selected); - return 1; - } - return 0; + if (!TEST_uint_eq(constant_time_select_8(CONSTTIME_TRUE_8, a, b), a)) + return 0; + if (!TEST_uint_eq(constant_time_select_8(CONSTTIME_FALSE_8, a, b), b)) + return 0; + return 1; } -static int test_select_int(int a, int b) +static int test_select_s(unsigned char a, unsigned char b) { - int selected = constant_time_select_int(CONSTTIME_TRUE, a, b); - if (selected != a) { - fprintf(stderr, "Test failed for constant_time_select(%du, %d," - "%d): expected %d(first value), got %d\n", - CONSTTIME_TRUE, a, b, a, selected); - return 1; - } - selected = constant_time_select_int(CONSTTIME_FALSE, a, b); - if (selected != b) { - fprintf(stderr, "Test failed for constant_time_select(%du, %d," - "%d): expected %d(second value), got %d\n", - CONSTTIME_FALSE, a, b, b, selected); - return 1; - } - return 0; + if (!TEST_uint_eq(constant_time_select_s(CONSTTIME_TRUE_S, a, b), a)) + return 0; + if (!TEST_uint_eq(constant_time_select_s(CONSTTIME_FALSE_S, a, b), b)) + return 0; + return 1; } - -static int test_select_s(size_t a, size_t b) +static int test_select_int(int a, int b) { - size_t selected = constant_time_select_s(CONSTTIME_TRUE_S, a, b); - if (selected != a) { - fprintf(stderr, "Test failed for constant_time_select_s(%"OSSLzu - ", %"OSSLzu",%"OSSLzu"): expected %"OSSLzu - "(first value), got %"OSSLzu"\n", - CONSTTIME_TRUE_S, a, b, a, selected); - return 1; - } - selected = constant_time_select_s(CONSTTIME_FALSE_S, a, b); - if (selected != b) { - fprintf(stderr, "Test failed for constant_time_select_s(%"OSSLzu - ", %"OSSLzu",%"OSSLzu"): expected %"OSSLzu - "(second value), got %"OSSLzu"\n", - CONSTTIME_FALSE_S, a, b, b, selected); - return 1; - } - return 0; + if (!TEST_int_eq(constant_time_select_int(CONSTTIME_TRUE, a, b), a)) + return 0; + if (!TEST_int_eq(constant_time_select_int(CONSTTIME_FALSE, a, b), b)) + return 0; + return 1; } -static int test_eq_int(int a, int b) +static int test_eq_int_8(int a, int b) { - unsigned int equal = constant_time_eq_int(a, b); - if (a == b && equal != CONSTTIME_TRUE) { - fprintf(stderr, "Test failed for constant_time_eq_int(%d, %d): " - "expected %du(TRUE), got %du\n", a, b, CONSTTIME_TRUE, equal); - return 1; - } else if (a != b && equal != CONSTTIME_FALSE) { - fprintf(stderr, "Test failed for constant_time_eq_int(%d, %d): " - "expected %du(FALSE), got %du\n", - a, b, CONSTTIME_FALSE, equal); - return 1; - } - return 0; + if (a == b && !TEST_int_eq(constant_time_eq_int_8(a, b), CONSTTIME_TRUE_8)) + return 0; + if (a != b && !TEST_int_eq(constant_time_eq_int_8(a, b), CONSTTIME_FALSE_8)) + return 0; + return 1; } -static int test_eq_int_8(int a, int b) +static int test_eq_s(size_t a, size_t b) { - unsigned char equal = constant_time_eq_int_8(a, b); - if (a == b && equal != CONSTTIME_TRUE_8) { - fprintf(stderr, "Test failed for constant_time_eq_int_8(%d, %d): " - "expected %u(TRUE), got %u\n", a, b, CONSTTIME_TRUE_8, equal); - return 1; - } else if (a != b && equal != CONSTTIME_FALSE_8) { - fprintf(stderr, "Test failed for constant_time_eq_int_8(%d, %d): " - "expected %u(FALSE), got %u\n", - a, b, CONSTTIME_FALSE_8, equal); - return 1; - } - return 0; + if (a == b && !TEST_size_t_eq(constant_time_eq_s(a, b), CONSTTIME_TRUE_S)) + return 0; + if (a != b && !TEST_int_eq(constant_time_eq_s(a, b), CONSTTIME_FALSE_S)) + return 0; + return 1; } -static int test_eq_s(size_t a, size_t b) +static int test_eq_int(int a, int b) { - size_t equal = constant_time_eq_s(a, b); - if (a == b && equal != CONSTTIME_TRUE_S) { - fprintf(stderr, "Test failed for constant_time_eq_int(%"OSSLzu - ", %"OSSLzu"): expected %"OSSLzu"(TRUE), got %"OSSLzu"\n", - a, b, CONSTTIME_TRUE_S, equal); - return 1; - } else if (a != b && equal != CONSTTIME_FALSE_S) { - fprintf(stderr, "Test failed for constant_time_eq_int(%"OSSLzu", %" - OSSLzu"): expected %"OSSLzu"(FALSE), got %"OSSLzu"\n", - a, b, CONSTTIME_FALSE_S, equal); - return 1; - } - return 0; + if (a == b && !TEST_uint_eq(constant_time_eq_int(a, b), CONSTTIME_TRUE)) + return 0; + if (a != b && !TEST_uint_eq(constant_time_eq_int(a, b), CONSTTIME_FALSE)) + return 0; + return 1; } static unsigned int test_values[] = @@ -270,108 +167,109 @@ static size_t test_values_s[] = SIZE_MAX }; -int main(int argc, char *argv[]) +static int test_sizeofs(void) { - unsigned int a, b, i, j; - int c, d; - unsigned char e, f; - size_t g, h; - int num_failed = 0, num_all = 0; - fprintf(stdout, "Testing constant time operations...\n"); - - if (OSSL_NELEM(test_values) != OSSL_NELEM(test_values_s)) { - fprintf(stdout, "Unexpected number of tests\n"); - return EXIT_FAILURE; - } + if (!TEST_uint_eq(OSSL_NELEM(test_values), OSSL_NELEM(test_values_s))) + return 0; + return 1; +} - for (i = 0; i < OSSL_NELEM(test_values); ++i) { - a = test_values[i]; - g = test_values_s[i]; - num_failed += test_is_zero(a); - num_failed += test_is_zero_8(a); - num_failed += test_is_zero_s(g); - num_all += 3; - for (j = 0; j < OSSL_NELEM(test_values); ++j) { - b = test_values[j]; - h = test_values[j]; - num_failed += test_binary_op(&constant_time_lt, - "constant_time_lt", a, b, a < b); - num_failed += test_binary_op_8(&constant_time_lt_8, - "constant_time_lt_8", a, b, a < b); - num_failed += test_binary_op_s(&constant_time_lt_s, - "constant_time_lt_s", g, h, g < h); - num_failed += test_binary_op(&constant_time_lt, - "constant_time_lt", b, a, b < a); - num_failed += test_binary_op_8(&constant_time_lt_8, - "constant_time_lt_8", b, a, b < a); - num_failed += test_binary_op_s(&constant_time_lt_s, - "constant_time_lt_s", h, g, h < g); - num_failed += test_binary_op(&constant_time_ge, - "constant_time_ge", a, b, a >= b); - num_failed += test_binary_op_8(&constant_time_ge_8, - "constant_time_ge_8", a, b, - a >= b); - num_failed += test_binary_op_s(&constant_time_ge_s, - "constant_time_ge_s", g, h, g >= h); - num_failed += - test_binary_op(&constant_time_ge, "constant_time_ge", b, a, - b >= a); - num_failed += - test_binary_op_8(&constant_time_ge_8, "constant_time_ge_8", b, - a, b >= a); - num_failed += - test_binary_op_s(&constant_time_ge_s, "constant_time_ge_s", h, g, - h >= g); - num_failed += - test_binary_op(&constant_time_eq, "constant_time_eq", a, b, - a == b); - num_failed += - test_binary_op_8(&constant_time_eq_8, "constant_time_eq_8", a, - b, a == b); - num_failed += - test_binary_op_s(&constant_time_eq_s, "constant_time_eq_s", g, h, - g == h); - num_failed += - test_binary_op(&constant_time_eq, "constant_time_eq", b, a, - b == a); - num_failed += - test_binary_op_8(&constant_time_eq_8, "constant_time_eq_8", b, - a, b == a); - num_failed += - test_binary_op_s(&constant_time_eq_s, "constant_time_eq_s", h, g, - h == g); - num_failed += test_select(a, b); - num_failed += test_select_s(g, h); - num_failed += test_eq_s(g, h); - num_all += 21; - } - } +static int test_binops(int i) +{ + unsigned int a = test_values[i]; + unsigned int g = test_values_s[i]; + int j; + int ret = 1; + + if (!test_is_zero(a) || !test_is_zero_8(a) || !test_is_zero_s(g)) + ret = 0; + + for (j = 0; j < (int)OSSL_NELEM(test_values); ++j) { + unsigned int b = test_values[j]; + unsigned int h = test_values[j]; - for (i = 0; i < OSSL_NELEM(signed_test_values); ++i) { - c = signed_test_values[i]; - for (j = 0; j < OSSL_NELEM(signed_test_values); ++j) { - d = signed_test_values[j]; - num_failed += test_select_int(c, d); - num_failed += test_eq_int(c, d); - num_failed += test_eq_int_8(c, d); - num_all += 3; + if (!test_select(a, b) + || !test_select_s(g, h) + || !test_eq_s(g, h) + || !test_binary_op(&constant_time_lt, "ct_lt", + a, b, a < b) + || !test_binary_op_8(&constant_time_lt_8, "constant_time_lt_8", + a, b, a < b) + || !test_binary_op_s(&constant_time_lt_s, "constant_time_lt_s", + g, h, g < h) + || !test_binary_op(&constant_time_lt, "constant_time_lt", + b, a, b < a) + || !test_binary_op_8(&constant_time_lt_8, "constant_time_lt_8", + b, a, b < a) + || !test_binary_op_s(&constant_time_lt_s, "constant_time_lt_s", + h, g, h < g) + || !test_binary_op(&constant_time_ge, "constant_time_ge", + a, b, a >= b) + || !test_binary_op_8(&constant_time_ge_8, "constant_time_ge_8", + a, b, a >= b) + || !test_binary_op_s(&constant_time_ge_s, "constant_time_ge_s", + g, h, g >= h) + || !test_binary_op(&constant_time_ge, "constant_time_ge", + b, a, b >= a) + || !test_binary_op_8(&constant_time_ge_8, "constant_time_ge_8", + b, a, b >= a) + || !test_binary_op_s(&constant_time_ge_s, "constant_time_ge_s", + h, g, h >= g) + || !test_binary_op(&constant_time_eq, "constant_time_eq", + a, b, a == b) + || !test_binary_op_8(&constant_time_eq_8, "constant_time_eq_8", + a, b, a == b) + || !test_binary_op_s(&constant_time_eq_s, "constant_time_eq_s", + g, h, g == h) + || !test_binary_op(&constant_time_eq, "constant_time_eq", + b, a, b == a) + || !test_binary_op_8(&constant_time_eq_8, "constant_time_eq_8", + b, a, b == a) + || !test_binary_op_s(&constant_time_eq_s, "constant_time_eq_s", + h, g, h == g)) { + ret = 0; } } + return ret; +} - for (i = 0; i < sizeof(test_values_8); ++i) { - e = test_values_8[i]; - for (j = 0; j < sizeof(test_values_8); ++j) { - f = test_values_8[j]; - num_failed += test_select_8(e, f); - num_all += 1; - } +static int test_signed(int i) +{ + int c = signed_test_values[i]; + unsigned int j; + int ret = 1; + + for (j = 0; j < OSSL_NELEM(signed_test_values); ++j) { + int d = signed_test_values[j]; + + if (!test_select_int(c, d) + || !test_eq_int(c, d) + || !test_eq_int_8(c, d)) + ret = 0; } + return ret; +} - if (!num_failed) { - fprintf(stdout, "success (ran %d tests)\n", num_all); - return EXIT_SUCCESS; - } else { - fprintf(stdout, "%d of %d tests failed!\n", num_failed, num_all); - return EXIT_FAILURE; +static int test_8values(int i) +{ + unsigned char e = test_values_8[i]; + unsigned int j; + int ret = 1; + + for (j = 0; j < sizeof(test_values_8); ++j) { + unsigned char f = test_values_8[j]; + + if (!test_select_8(e, f)) + ret = 0; } + return ret; +} + + +void register_tests(void) +{ + ADD_TEST(test_sizeofs); + ADD_ALL_TESTS(test_binops, OSSL_NELEM(test_values)); + ADD_ALL_TESTS(test_signed, OSSL_NELEM(signed_test_values)); + ADD_ALL_TESTS(test_8values, sizeof(test_values_8)); } diff --git a/test/randtest.c b/test/randtest.c index 9f7a0371a6..e1d84c318c 100644 --- a/test/randtest.c +++ b/test/randtest.c @@ -7,33 +7,24 @@ * https://www.openssl.org/source/license.html */ -#include <stdio.h> -#include <stdlib.h> #include <openssl/rand.h> - -#include "../e_os.h" +#include "testutil.h" +#include "test_main.h" /* some FI |