add support for Linux getrandom() with WOLFSSL_GETRANDOM

This commit is contained in:
Chris Conlon
2022-05-06 10:20:33 -06:00
parent 6aaee73585
commit e6ce735ed8

View File

@ -161,6 +161,9 @@ int wc_RNG_GenerateByte(WC_RNG* rng, byte* b)
#elif defined(WOLFSSL_ZEPHYR)
#elif defined(WOLFSSL_TELIT_M2MB)
#elif defined(WOLFSSL_SCE) && !defined(WOLFSSL_SCE_NO_TRNG)
#elif defined(WOLFSSL_GETRANDOM)
#include <errno.h>
#include <sys/random.h>
#else
/* include headers that may be needed to get good seed */
#include <fcntl.h>
@ -2684,6 +2687,36 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
return 0;
}
#elif defined(WOLFSSL_GETRANDOM)
/* getrandom() was added to the Linux kernel in version 3.17.
* Added to glibc in version 2.25. */
int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
{
int ret = 0;
int len = 0;
(void)os;
while (sz) {
errno = 0;
len = (int)getrandom(output, sz, 0);
if (len == -1) {
if (errno == EINTR) {
/* interrupted, call getrandom again */
continue;
}
else {
ret = READ_RAN_E;
}
break;
}
sz -= len;
output += len;
}
return ret;
}
#elif defined(NO_DEV_RANDOM)
#error "you need to write an os specific wc_GenerateSeed() here"