diff options
author | NIIBE Yutaka <gniibe@fsij.org> | 2021-11-18 12:02:24 +0900 |
---|---|---|
committer | NIIBE Yutaka <gniibe@fsij.org> | 2021-11-18 12:04:21 +0900 |
commit | 5493282b4aacd6b466c4ddd366ce9eb4036b3562 (patch) | |
tree | 078569182cf1efea1072866900b3fb1760304fc1 /random/rndgetentropy.c | |
parent | 2101da04924b1361e2a1021b406a519a3bde9aee (diff) | |
download | libgcrypt-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.c | 16 |
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) { |