[PATCH 01/10] bench-slope: add option to disable quick random generation

Jussi Kivilinna jussi.kivilinna at iki.fi
Sun Aug 2 11:55:06 CEST 2026


* tests/bench-slope.c (print_help): Add '--no-quick-rng'.
(main): Add '--no-quick-rng' option and initialize RNG before
benchmarking.
--

Quick random skips entropy gathering, which hides cost of
GCRY_VERY_STRONG_RANDOM requests. Such request takes about 2 ms and
dominates ECC key generation, so measuring what applications actually
get needs a way to turn quick random off. Default stays as before, since
otherwise entropy gathering swamps the algorithms.

Random pool is initialized up front because fast random poll done on
handle creation is no-operation until pool exists, which would make
first measurements differ from rest.

Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
 tests/bench-slope.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/tests/bench-slope.c b/tests/bench-slope.c
index 4b14541b..831fe545 100644
--- a/tests/bench-slope.c
+++ b/tests/bench-slope.c
@@ -3265,6 +3265,7 @@ print_help (void)
     "   --repetitions <n>         Use N repetitions (default "
                                      STR2(NUM_MEASUREMENT_REPETITIONS) ")",
     "   --unaligned               Use unaligned input buffers.",
+    "   --no-quick-rng            Use default random number generation",
     "   --csv                     Use CSV output format",
     NULL
   };
@@ -3297,6 +3298,8 @@ int
 main (int argc, char **argv)
 {
   int last_argc = -1;
+  int no_quick_rng = 0;
+  char tmp[4];
 
   if (argc)
     {
@@ -3351,6 +3354,12 @@ main (int argc, char **argv)
 	  argc--;
 	  argv++;
 	}
+      else if (!strcmp (*argv, "--no-quick-rng"))
+	{
+	  no_quick_rng = 1;
+	  argc--;
+	  argv++;
+	}
       else if (!strcmp (*argv, "--unaligned"))
 	{
 	  unaligned_mode = 1;
@@ -3427,7 +3436,12 @@ main (int argc, char **argv)
 
   xgcry_control ((GCRYCTL_DISABLE_SECMEM, 0));
   xgcry_control ((GCRYCTL_INITIALIZATION_FINISHED, 0));
-  xgcry_control ((GCRYCTL_ENABLE_QUICK_RANDOM, 0));
+
+  if (!no_quick_rng)
+    xgcry_control ((GCRYCTL_ENABLE_QUICK_RANDOM, 0));
+
+  /* Fill random pool so that first measurement is not different. */
+  gcry_randomize (tmp, sizeof(tmp), GCRY_STRONG_RANDOM);
 
   if (gcry_fips_mode_active ())
     in_fips_mode = 1;
-- 
2.53.0




More information about the Gcrypt-devel mailing list