]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Testing: allow the user to pass a seed in for reproducible-RNG tests
authorNick Mathewson <nickm@torproject.org>
Wed, 15 May 2019 00:05:53 +0000 (20:05 -0400)
committerNick Mathewson <nickm@torproject.org>
Wed, 15 May 2019 11:50:56 +0000 (07:50 -0400)
The environment variable TOR_TEST_RNG_SEED, if provided, is a hex
value for the RNG seed.

src/test/rng_test_helpers.c

index c4243f5e9a13ca667a7e3602018affa8b6be6e1a..1ee267230273a56ab08cb30614fd2912d780ac09 100644 (file)
@@ -124,9 +124,22 @@ enable_deterministic_rng_impl(const uint8_t *seed, size_t seed_len)
 void
 testing_enable_reproducible_rng(void)
 {
-  uint8_t seed[16];
-  crypto_rand((char*)seed, sizeof(seed));
-  enable_deterministic_rng_impl(seed, sizeof(seed));
+  const char *provided_seed = getenv("TOR_TEST_RNG_SEED");
+  if (provided_seed) {
+    size_t hexlen = strlen(provided_seed);
+    size_t seedlen = hexlen / 2;
+    uint8_t *seed = tor_malloc(hexlen / 2);
+    if (base16_decode((char*)seed, seedlen, provided_seed, hexlen) < 0) {
+      puts("Cannot decode value in TOR_TEST_RNG_SEED");
+      exit(1);
+    }
+    enable_deterministic_rng_impl(seed, seedlen);
+    tor_free(seed);
+  } else {
+    uint8_t seed[16];
+    crypto_rand((char*)seed, sizeof(seed));
+    enable_deterministic_rng_impl(seed, sizeof(seed));
+  }
 }
 
 /**