summaryrefslogtreecommitdiff
path: root/testsuite/testutils.c
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2021-11-13 17:17:36 +0100
committerNiels Möller <nisse@lysator.liu.se>2021-11-13 17:17:36 +0100
commit2c9a600dd1649cea86eafaead157823197316cbc (patch)
tree43b31973ebc60d073972e8e3553783a14bd4f53a /testsuite/testutils.c
parent48d61c28e951116d5ef8e945f9611d558a9b4777 (diff)
downloadnettle-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.c60
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)