summaryrefslogtreecommitdiff
path: root/random
diff options
context:
space:
mode:
authorJakub Jelen <jjelen@redhat.com>2022-09-26 18:45:33 +0200
committerNIIBE Yutaka <gniibe@fsij.org>2022-10-04 13:52:50 +0900
commita6a6e94027abf18a51f5f93bf9fb2cfe5496bdf8 (patch)
tree58076dfb2750f924e22bb7d897957a83fe10f6a3 /random
parent567bc62e1c3046594088de7209fee7c545ece1e3 (diff)
downloadlibgcrypt-a6a6e94027abf18a51f5f93bf9fb2cfe5496bdf8.tar.gz
random: Get maximum 32B of entropy at once in FIPS Mode
* random/rndgetentropy.c (_gcry_rndgetentropy_gather_random): In fips mode, gather max 32 B of strong entropy for initialization. -- The limitation of our current kernel patch guarantees that only 32B of strong random data can be gathered using getrandom(). Signed-off-by: Jakub Jelen <jjelen@redhat.com>
Diffstat (limited to 'random')
-rw-r--r--random/rndgetentropy.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/random/rndgetentropy.c b/random/rndgetentropy.c
index db4b09ed..b2ec8209 100644
--- a/random/rndgetentropy.c
+++ b/random/rndgetentropy.c
@@ -80,12 +80,18 @@ _gcry_rndgetentropy_gather_random (void (*add)(const void*, size_t,
* never blocking once the kernel is seeded. */
do
{
- nbytes = length < sizeof (buffer)? length : sizeof (buffer);
_gcry_pre_syscall ();
if (fips_mode ())
- ret = getrandom (buffer, nbytes, GRND_RANDOM);
+ {
+ /* The getrandom API returns maximum 32 B of strong entropy */
+ nbytes = length < 32 ? length : 32;
+ ret = getrandom (buffer, nbytes, GRND_RANDOM);
+ }
else
- ret = getentropy (buffer, nbytes);
+ {
+ nbytes = length < sizeof (buffer) ? length : sizeof (buffer);
+ ret = getentropy (buffer, nbytes);
+ }
_gcry_post_syscall ();
}
while (ret == -1 && errno == EINTR);