From: Niels Möller Date: Sat, 13 Nov 2021 16:17:36 +0000 (+0100) Subject: Move NETTLE_TEST_SEED logic to testutils.c. X-Git-Tag: nettle_3.8_release_20220602~67 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c9a600dd1649cea86eafaead157823197316cbc;p=thirdparty%2Fnettle.git Move NETTLE_TEST_SEED logic to testutils.c. * testsuite/testutils.c (get_random_seed): Move function here. (test_randomize): New function. * testsuite/ecc-mod-test.c (get_random_seed): Delete old copy. (test_main): Use test_randomize. * testsuite/rsa-compute-root-test.c (get_random_seed): Delete old copy. (test_main): Use test_randomize. --- diff --git a/ChangeLog b/ChangeLog index ba4fa689..e3da5bd2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2021-11-13 Niels Möller + * testsuite/testutils.c (get_random_seed): Move function here. + (test_randomize): New function. + * testsuite/ecc-mod-test.c (get_random_seed): Delete old copy. + (test_main): Use test_randomize. + * testsuite/rsa-compute-root-test.c (get_random_seed): Delete old copy. + (test_main): Use test_randomize. + * ecc-secp224r1.c (ecc_secp224r1_sqrt): Fix result for zero input, which needs handling as a special case in the Tonelli-Shanks algorithm. diff --git a/testsuite/ecc-mod-test.c b/testsuite/ecc-mod-test.c index 719789c0..50fbeecf 100644 --- a/testsuite/ecc-mod-test.c +++ b/testsuite/ecc-mod-test.c @@ -1,9 +1,5 @@ #include "testutils.h" -#include -#include -#include - static void ref_mod (mp_limb_t *rp, const mp_limb_t *ap, const mp_limb_t *mp, mp_size_t mn) { @@ -215,40 +211,9 @@ test_patterns (const char *name, mpz_clear (r); } -#if !NETTLE_USE_MINI_GMP -static void -get_random_seed(mpz_t seed) -{ - struct timeval tv; - FILE *f; - f = fopen ("/dev/urandom", "rb"); - if (f) - { - uint8_t buf[8]; - size_t res; - - setbuf (f, NULL); - res = fread (&buf, sizeof(buf), 1, f); - fclose(f); - if (res == 1) - { - nettle_mpz_set_str_256_u (seed, sizeof(buf), buf); - return; - } - fprintf (stderr, "Read of /dev/urandom failed: %s\n", - strerror (errno)); - } - gettimeofday(&tv, NULL); - mpz_set_ui (seed, tv.tv_sec); - mpz_mul_ui (seed, seed, 1000000UL); - mpz_add_ui (seed, seed, tv.tv_usec); -} -#endif /* !NETTLE_USE_MINI_GMP */ - void test_main (void) { - const char *nettle_test_seed; gmp_randstate_t rands; unsigned count = COUNT; unsigned i; @@ -263,27 +228,8 @@ test_main (void) test_patterns ("q", &ecc_curves[i]->p); } -#if !NETTLE_USE_MINI_GMP - nettle_test_seed = getenv ("NETTLE_TEST_SEED"); - if (nettle_test_seed && *nettle_test_seed) - { - mpz_t seed; - mpz_init (seed); - if (mpz_set_str (seed, nettle_test_seed, 0) < 0 - || mpz_sgn (seed) < 0) - die ("Invalid NETTLE_TEST_SEED: %s\n", - nettle_test_seed); - if (mpz_sgn (seed) == 0) - get_random_seed (seed); - fprintf (stderr, "Using NETTLE_TEST_SEED="); - mpz_out_str (stderr, 10, seed); - fprintf (stderr, "\n"); - - gmp_randseed (rands, seed); - mpz_clear (seed); - count *= 20; - } -#endif /* !NETTLE_USE_MINI_GMP */ + if (test_randomize(rands)) + count *= 20; for (i = 0; ecc_curves[i]; i++) { diff --git a/testsuite/rsa-compute-root-test.c b/testsuite/rsa-compute-root-test.c index e97d987e..de3586ef 100644 --- a/testsuite/rsa-compute-root-test.c +++ b/testsuite/rsa-compute-root-test.c @@ -1,9 +1,6 @@ #include "testutils.h" #include -#include -#include -#include #include "rsa.h" @@ -141,40 +138,9 @@ generate_keypair (gmp_randstate_t rands, } #endif -#if !NETTLE_USE_MINI_GMP -static void -get_random_seed(mpz_t seed) -{ - struct timeval tv; - FILE *f; - f = fopen ("/dev/urandom", "rb"); - if (f) - { - uint8_t buf[8]; - size_t res; - - setbuf (f, NULL); - res = fread (&buf, sizeof(buf), 1, f); - fclose(f); - if (res == 1) - { - nettle_mpz_set_str_256_u (seed, sizeof(buf), buf); - return; - } - fprintf (stderr, "Read of /dev/urandom failed: %s\n", - strerror (errno)); - } - gettimeofday(&tv, NULL); - mpz_set_ui (seed, tv.tv_sec); - mpz_mul_ui (seed, seed, 1000000UL); - mpz_add_ui (seed, seed, tv.tv_usec); -} -#endif /* !NETTLE_USE_MINI_GMP */ - void test_main (void) { - const char *nettle_test_seed; gmp_randstate_t rands; struct rsa_public_key pub; struct rsa_private_key key; @@ -186,27 +152,7 @@ test_main (void) mpz_init (plaintext); gmp_randinit_default (rands); - -#if !NETTLE_USE_MINI_GMP - nettle_test_seed = getenv ("NETTLE_TEST_SEED"); - if (nettle_test_seed && *nettle_test_seed) - { - mpz_t seed; - mpz_init (seed); - if (mpz_set_str (seed, nettle_test_seed, 0) < 0 - || mpz_sgn (seed) < 0) - die ("Invalid NETTLE_TEST_SEED: %s\n", - nettle_test_seed); - if (mpz_sgn (seed) == 0) - get_random_seed (seed); - fprintf (stderr, "Using NETTLE_TEST_SEED="); - mpz_out_str (stderr, 10, seed); - fprintf (stderr, "\n"); - - gmp_randseed (rands, seed); - mpz_clear (seed); - } -#endif + test_randomize(rands); for (j = 0; j < KEY_COUNT; j++) { diff --git a/testsuite/testutils.c b/testsuite/testutils.c index 626c13fc..ef67c53e 100644 --- a/testsuite/testutils.c +++ b/testsuite/testutils.c @@ -11,7 +11,9 @@ #include "nettle-internal.h" #include +#include #include +#include void die(const char *format, ...) @@ -1107,7 +1109,63 @@ mpz_urandomb (mpz_t r, struct knuth_lfib_ctx *ctx, mp_bitcnt_t bits) nettle_mpz_set_str_256_u (r, bytes, buf); free (buf); } -#endif /* NETTLE_USE_MINI_GMP */ +#else /* !NETTLE_USE_MINI_GMP */ +static void +get_random_seed(mpz_t seed) +{ + struct timeval tv; + FILE *f; + f = fopen ("/dev/urandom", "rb"); + if (f) + { + uint8_t buf[8]; + size_t res; + + setbuf (f, NULL); + res = fread (&buf, sizeof(buf), 1, f); + fclose(f); + if (res == 1) + { + nettle_mpz_set_str_256_u (seed, sizeof(buf), buf); + return; + } + fprintf (stderr, "Read of /dev/urandom failed: %s\n", + strerror (errno)); + } + gettimeofday(&tv, NULL); + mpz_set_ui (seed, tv.tv_sec); + mpz_mul_ui (seed, seed, 1000000UL); + mpz_add_ui (seed, seed, tv.tv_usec); +} + +int +test_randomize(gmp_randstate_t rands) +{ + const char *nettle_test_seed; + + nettle_test_seed = getenv ("NETTLE_TEST_SEED"); + if (nettle_test_seed && *nettle_test_seed) + { + mpz_t seed; + mpz_init (seed); + if (mpz_set_str (seed, nettle_test_seed, 0) < 0 + || mpz_sgn (seed) < 0) + die ("Invalid NETTLE_TEST_SEED: %s\n", + nettle_test_seed); + if (mpz_sgn (seed) == 0) + get_random_seed (seed); + fprintf (stderr, "Using NETTLE_TEST_SEED="); + mpz_out_str (stderr, 10, seed); + fprintf (stderr, "\n"); + + gmp_randseed (rands, seed); + mpz_clear (seed); + return 1; + } + else + return 0; +} +#endif /* !NETTLE_USE_MINI_GMP */ mp_limb_t * xalloc_limbs (mp_size_t n) diff --git a/testsuite/testutils.h b/testsuite/testutils.h index 0dc235c6..b220dde1 100644 --- a/testsuite/testutils.h +++ b/testsuite/testutils.h @@ -163,8 +163,12 @@ void gmp_randinit_default (struct knuth_lfib_ctx *ctx); void mpz_urandomb (mpz_t r, struct knuth_lfib_ctx *ctx, mp_bitcnt_t bits); /* This is cheating */ #define mpz_rrandomb mpz_urandomb +#define test_randomize(rands) 0 +#else /* !NETTLE_USE_MINI_GMP */ +int +test_randomize(gmp_randstate_t rands); -#endif /* NETTLE_USE_MINI_GMP */ +#endif /* !NETTLE_USE_MINI_GMP */ void mpn_out_str (FILE *f, int base, const mp_limb_t *xp, mp_size_t xn);