diff options
author | Niels Möller <nisse@lysator.liu.se> | 2021-11-13 17:17:36 +0100 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2021-11-13 17:17:36 +0100 |
commit | 2c9a600dd1649cea86eafaead157823197316cbc (patch) | |
tree | 43b31973ebc60d073972e8e3553783a14bd4f53a /testsuite/testutils.c | |
parent | 48d61c28e951116d5ef8e945f9611d558a9b4777 (diff) | |
download | nettle-2c9a600dd1649cea86eafaead157823197316cbc.tar.gz |
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.
Diffstat (limited to 'testsuite/testutils.c')
-rw-r--r-- | testsuite/testutils.c | 60 |
1 files changed, 59 insertions, 1 deletions
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 <assert.h> +#include <errno.h> #include <ctype.h> +#include <sys/time.h> 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) |