From 54c91185c9273b9699693910fa95383c86f2af22 Mon Sep 17 00:00:00 2001 From: David CARLIER Date: Sat, 16 Jan 2021 12:47:33 +0000 Subject: random generator update for Mac proposal using getentropy for seeding, reading 256 bytes at a time to avoid the EIO errno since this is the maximum. --- random.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'random.c') diff --git a/random.c b/random.c index 28b7a9fba4..7b78efe7ca 100644 --- a/random.c +++ b/random.c @@ -49,7 +49,7 @@ # include #endif -#if defined HAVE_GETRANDOM +#if defined HAVE_GETRANDOM || defined HAVE_GETENTROPY # include #elif defined __linux__ && defined __NR_getrandom # include @@ -425,7 +425,23 @@ random_init(int argc, VALUE *argv, VALUE obj) # define USE_DEV_URANDOM 0 #endif -#if USE_DEV_URANDOM +#if HAVE_GETENTROPY +# define MAX_SEED_LEN_PER_READ 256 +static int +fill_random_bytes_urandom(void *seed, size_t size) +{ + unsigned char *p = (unsigned char *)seed; + while (size) { + size_t len = size < MAX_SEED_LEN_PER_READ ? size : MAX_SEED_LEN_PER_READ; + if (getentropy(p, len) != 0) { + return -1; + } + p += len; + size -= len; + } + return 0; +} +#elif USE_DEV_URANDOM static int fill_random_bytes_urandom(void *seed, size_t size) { -- cgit v1.2.3