]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Rework test randomization, new functions test_get_seed and test_randinit. add-test_random_seed
authorNiels Möller <nisse@lysator.liu.se>
Sun, 3 May 2026 18:12:53 +0000 (20:12 +0200)
committerNiels Möller <nisse@lysator.liu.se>
Sun, 3 May 2026 18:12:53 +0000 (20:12 +0200)
12 files changed:
ChangeLog
testsuite/ecc-mod-arith-test.c
testsuite/ecc-mod-test.c
testsuite/ecc-modinv-test.c
testsuite/ecc-mul-a-test.c
testsuite/ecc-mul-g-test.c
testsuite/ecc-redc-test.c
testsuite/ecc-sqrt-test.c
testsuite/eddsa-compress-test.c
testsuite/rsa-compute-root-test.c
testsuite/testutils.c
testsuite/testutils.h

index 470df6fb903ea344163aab2e3e8aa5ac0dafd2f0..3750e0e7e383ce89c57db3d7baf2c5171d446cf6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2026-05-03  Niels Möller  <nisse@lysator.liu.se>
+
+       * testsuite/testutils.c (test_random_seed, test_get_seed): New functions.
+       (get_random_seed): Deleted, replaced by test_random_seed.
+       (test_randinit): New function, using gmp_randinit_default and
+       test_random_seed. Replaces...
+       (test_randomize): ... deleted function. Updated all callers.
+
 2026-04-30  Niels Möller  <nisse@lysator.liu.se>
 
        * sexp.c: Fix bugs reported by Sebastián Alba Vives.
index de77d48914f42612cff6b126d9c4eb1890983e38..414813f63b4653b9cf23780f52fb3fcb1c1973be 100644 (file)
@@ -145,9 +145,7 @@ test_main (void)
   gmp_randstate_t rands;
   unsigned i;
 
-  gmp_randinit_default (rands);
-
-  test_randomize(rands);
+  test_randinit (rands);
 
   for (i = 0; ecc_curves[i]; i++)
     {
index d6641d385ab68db7c0097ecdc3de2b02229aa8e8..4133b86d36a84cc653619876ac9dfe5b111bb97d 100644 (file)
@@ -217,8 +217,6 @@ test_main (void)
   gmp_randstate_t rands;
   unsigned i;
 
-  gmp_randinit_default (rands);
-
   test_fixed ();
 
   for (i = 0; ecc_curves[i]; i++)
@@ -227,7 +225,7 @@ test_main (void)
       test_patterns ("q", &ecc_curves[i]->p);
     }
 
-  test_randomize(rands);
+  test_randinit (rands);
 
   for (i = 0; ecc_curves[i]; i++)
     {
index fdb013d760e48c28b9380e2eee9f7dcd7c46494a..99ce0fb66addc28c3095282e277a6f9be2d52010 100644 (file)
@@ -139,8 +139,7 @@ test_main (void)
   gmp_randstate_t rands;
   unsigned i;
 
-  gmp_randinit_default (rands);
-  test_randomize(rands);
+  test_randinit (rands);
 
   for (i = 0; ecc_curves[i]; i++)
     {
index ec78ca572167874f7fa3f5b8df955b94f8c3bf52..a3657d76ecd49b6e4d54cbe125f18fe251501aad 100644 (file)
@@ -7,8 +7,7 @@ test_main (void)
   mpz_t r;
   unsigned i;
 
-  gmp_randinit_default (rands);
-  test_randomize (rands);
+  test_randinit (rands);
   mpz_init (r);
   
   for (i = 0; ecc_curves[i]; i++)
index e2396ad0451c6c1620b679eb899c9fc2f1207750..36282eac6dd2af9a5f7a25befd1cbfc247b540a2 100644 (file)
@@ -7,8 +7,7 @@ test_main (void)
   mpz_t r;
   unsigned i;
 
-  gmp_randinit_default (rands);
-  test_randomize(rands);
+  test_randinit (rands);
 
   mpz_init (r);
 
index 7caab0b74c61af738c9d25f6c9f312b09b2bcdc9..1135bb5162349562db802d767270a98dc0d6c4dc 100644 (file)
@@ -50,8 +50,7 @@ test_main (void)
   unsigned i;
   mpz_t r;
 
-  gmp_randinit_default (rands);
-  test_randomize(rands);
+  test_randinit (rands);
   
   mpz_init (r);
   
index 7fe6f17676285fd756bbce42ba86f1b551b505d8..6747f8e8e60d5ad729b1a5aa2c401667a13b8fa6 100644 (file)
@@ -291,8 +291,7 @@ test_main (void)
   gmp_randstate_t rands;
   unsigned i;
 
-  gmp_randinit_default (rands);
-  test_randomize(rands);
+  test_randinit (rands);
 
   for (i = 0; ecc_curves[i]; i++)
     {
index c0d2c52ce2f4c1ff8435e813c570e8f73d92ed15..93602af3e91b708d953141542cac076fd6d92c55 100644 (file)
@@ -41,8 +41,7 @@ void test_main (void)
   gmp_randstate_t rands;
   unsigned i;
 
-  gmp_randinit_default (rands);
-  test_randomize(rands);
+  test_randinit (rands);
 
   for (i = 0; ecc_curves[i]; i++)
     {
index e7e7848d02f08088c64b63a31ad1cc13c12ba67f..b5851090c37d3002a72ce1336a0bd9a6f0872627 100644 (file)
@@ -151,8 +151,7 @@ test_main (void)
   rsa_public_key_init(&pub);
   mpz_init (plaintext);
 
-  gmp_randinit_default (rands);
-  test_randomize(rands);
+  test_randinit (rands);
 
   for (j = 0; j < KEY_COUNT; j++)
     {
index 74798c49bec1e0be9efc01fe40f7b0778f95cac2..e5173c8742fa7ef1e1cafebd61578cba20fd1263 100644 (file)
@@ -11,6 +11,7 @@
 #include "nettle-internal.h"
 
 #include <assert.h>
+#include <inttypes.h>
 #include <errno.h>
 #include <ctype.h>
 #include <sys/time.h>
@@ -175,6 +176,53 @@ void
 mark_bytes_defined (size_t size UNUSED, const void *p UNUSED) {}
 #endif
 
+static uint64_t
+test_random_seed (void)
+{
+  struct timeval tv;
+  FILE *f = fopen ("/dev/urandom", "rb");
+  if (f)
+    {
+      uint64_t seed;
+      size_t res;
+
+      setbuf (f, NULL);
+      res = fread (&seed, sizeof(seed), 1, f);
+      fclose(f);
+      if (res == 1)
+       return seed;
+
+      fprintf (stderr, "Read of /dev/urandom failed: %s\n",
+              strerror (errno));
+    }
+  gettimeofday (&tv, NULL);
+  return (uint64_t) tv.tv_sec * 10000000 + tv.tv_usec;
+}
+
+uint64_t
+test_get_seed (void)
+{
+  const char *nettle_test_seed;
+
+  nettle_test_seed = getenv ("NETTLE_TEST_SEED");
+  if (nettle_test_seed && *nettle_test_seed)
+    {
+      char *endp;
+      uint64_t seed = strtoull (nettle_test_seed, &endp, 10);
+      if (*endp)
+       die ("Invalid $NETTLE_TEST_SEED value.\n");
+
+      if (seed == 0)
+       {
+         seed = test_random_seed ();
+         fprintf (stderr, "Using NETTLE_TEST_SEED=%" PRIu64 "\n", seed);
+       }
+      return seed;
+    }
+  else
+    return UINT64_C(0x15c0a3c132cefe24);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -1379,11 +1427,6 @@ mpn_out_str (FILE *f, int base, const mp_limb_t *xp, mp_size_t xn)
 
 #if NETTLE_USE_MINI_GMP
 void
-gmp_randinit_default (struct knuth_lfib_ctx *ctx)
-{
-  knuth_lfib_init (ctx, 17);
-}
-void
 mpz_urandomb (mpz_t r, struct knuth_lfib_ctx *ctx, mp_bitcnt_t bits)
 {
   size_t bytes = (bits+7)/8;
@@ -1401,61 +1444,27 @@ mpz_urandomm (mpz_t r, struct knuth_lfib_ctx *ctx, const mpz_t n)
   mpz_urandomb(r, ctx, mpz_sizeinbase(n, 2) + 30);
   mpz_mod(r, r, n);
 }
-#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);
+void
+test_randinit(gmp_randstate_t rands)
+{
+  knuth_lfib_init (rands, 17);
 }
 
-int
-test_randomize(gmp_randstate_t rands)
+#else /* !NETTLE_USE_MINI_GMP */
+
+void
+test_randinit(gmp_randstate_t rands)
 {
-  const char *nettle_test_seed;
+  uint64_t seed = test_get_seed ();
+  mpz_t seed_z;
 
-  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;
+  mpz_init (seed_z);
+  mpz_import (seed_z, 1, 1, sizeof (seed), 0, 0, &seed);
+  gmp_randinit_default (rands);
+  gmp_randseed (rands, seed_z);
+
+  mpz_clear (seed_z);
 }
 #endif /* !NETTLE_USE_MINI_GMP */
 
index b30dedac2ee510c454ff9e57c5c0ba90c83aa19c..698028f2f9f67cd145dc2d42336349586ebb06d9 100644 (file)
@@ -82,6 +82,9 @@ mark_bytes_undefined (size_t size, const void *p);
 void
 mark_bytes_defined (size_t size, const void *p);
 
+uint64_t
+test_get_seed (void);
+
 /* The main program */
 void
 test_main(void);
@@ -210,20 +213,16 @@ test_mac(const struct nettle_mac *mac,
 #if NETTLE_USE_MINI_GMP
 typedef struct knuth_lfib_ctx gmp_randstate_t[1];
 
-void gmp_randinit_default (struct knuth_lfib_ctx *ctx);
 #define gmp_randclear(state)
 void mpz_urandomb (mpz_t r, struct knuth_lfib_ctx *ctx, mp_bitcnt_t bits);
 void mpz_urandomm (mpz_t r, struct knuth_lfib_ctx *ctx, const mpz_t n);
 /* This is cheating */
 #define mpz_rrandomb mpz_urandomb
 #define mpz_rrandomm mpz_urandomm
-static inline int
-test_randomize (gmp_randstate_t rands UNUSED) { return 0; }
-#else /* !NETTLE_USE_MINI_GMP */
-int
-test_randomize (gmp_randstate_t rands);
+#endif /* NETTLE_USE_MINI_GMP */
 
-#endif /* !NETTLE_USE_MINI_GMP */
+void
+test_randinit (gmp_randstate_t rands);
 
 void
 mpn_out_str (FILE *f, int base, const mp_limb_t *xp, mp_size_t xn);