random: Take at max 25% from RDRAND
authorWerner Koch <wk@gnupg.org>
Sun, 27 Dec 2015 11:39:45 +0000 (12:39 +0100)
committerWerner Koch <wk@gnupg.org>
Sun, 27 Dec 2015 19:24:57 +0000 (20:24 +0100)
* random/rndlinux.c (_gcry_rndlinux_gather_random): Change use of
RDRAND from 50% to 25%.

Signed-off-by: Werner Koch <wk@gnupg.org>
random/rndlinux.c

index 9eeec57..0cb65df 100644 (file)
@@ -139,10 +139,18 @@ _gcry_rndlinux_gather_random (void (*add)(const void*, size_t,
 
 
   /* First read from a hardware source.  However let it account only
-     for up to 50% of the requested bytes.  */
+     for up to 50% (or 25% for RDRAND) of the requested bytes.  */
   n_hw = _gcry_rndhw_poll_slow (add, origin);
-  if (n_hw > length/2)
-    n_hw = length/2;
+  if ((_gcry_get_hw_features () & HWF_INTEL_RDRAND))
+    {
+      if (n_hw > length/4)
+        n_hw = length/4;
+    }
+  else
+    {
+      if (n_hw > length/2)
+        n_hw = length/2;
+    }
   if (length > 1)
     length -= n_hw;