summaryrefslogtreecommitdiff
path: root/random/rndgetentropy.c
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2021-11-18 12:02:24 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2021-11-18 12:04:21 +0900
commit5493282b4aacd6b466c4ddd366ce9eb4036b3562 (patch)
tree078569182cf1efea1072866900b3fb1760304fc1 /random/rndgetentropy.c
parent2101da04924b1361e2a1021b406a519a3bde9aee (diff)
downloadlibgcrypt-5493282b4aacd6b466c4ddd366ce9eb4036b3562.tar.gz
random: Fix rndgetentropy correctly uses rndjent.
* random/rndgetentropy.c (_gcry_rndgetentropy_gather_random): Call _gcry_rndjent_poll for GCRY_VERY_STRONG_RANDOM. -- GnuPG-bug-id: 5692 Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
Diffstat (limited to 'random/rndgetentropy.c')
-rw-r--r--random/rndgetentropy.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/random/rndgetentropy.c b/random/rndgetentropy.c
index 5a033276..a64b7299 100644
--- a/random/rndgetentropy.c
+++ b/random/rndgetentropy.c
@@ -41,8 +41,6 @@ _gcry_rndgetentropy_gather_random (void (*add)(const void*, size_t,
{
byte buffer[256];
- (void)level;
-
if (!add)
{
/* Special mode to release resouces. */
@@ -50,6 +48,20 @@ _gcry_rndgetentropy_gather_random (void (*add)(const void*, size_t,
return 0;
}
+ /* When using a blocking random generator try to get some entropy
+ * from the jitter based RNG. In this case we take up to 50% of the
+ * remaining requested bytes. */
+ if (level >= GCRY_VERY_STRONG_RANDOM)
+ {
+ size_t n;
+
+ n = _gcry_rndjent_poll (add, origin, length/2);
+ if (n > length/2)
+ n = length/2;
+ if (length > 1)
+ length -= n;
+ }
+
/* Enter the loop. */
while (length)
{