From d76092bbefdf79aa22e18af0bbae4a6bc4b5a169 Mon Sep 17 00:00:00 2001 From: "Alfred E. Heggestad" Date: Fri, 15 Apr 2016 07:09:59 +0000 Subject: [PATCH] sys: add support for arc4random thanks to Dmitrij D. Czarkoff for the original patch --- mk/re.mk | 5 +++++ src/sys/rand.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/mk/re.mk b/mk/re.mk index d92bf26..9dd0297 100644 --- a/mk/re.mk +++ b/mk/re.mk @@ -290,6 +290,7 @@ ifeq ($(OS),openbsd) AR := ar AFLAGS := cru HAVE_KQUEUE := 1 + HAVE_ARC4RANDOM := 1 endif ifeq ($(OS),win32) CFLAGS += -DWIN32 -D_WIN32_WINNT=0x0501 -D__ssize_t_defined @@ -578,6 +579,10 @@ CFLAGS += -DHAVE_GAI_STRERROR endif endif +ifneq ($(HAVE_ARC4RANDOM),) +CFLAGS += -DHAVE_ARC4RANDOM +endif + ############################################################################## # diff --git a/src/sys/rand.c b/src/sys/rand.c index f6aa17f..4da7076 100644 --- a/src/sys/rand.c +++ b/src/sys/rand.c @@ -85,6 +85,8 @@ uint32_t rand_u32(void) ERR_GET_REASON(ERR_get_error())); ERR_clear_error(); } +#elif defined(HAVE_ARC4RANDOM) + v = arc4random(); #elif defined(WIN32) v = (rand() << 16) + rand(); /* note: 16-bit rand */ #else @@ -161,6 +163,8 @@ void rand_bytes(uint8_t *p, size_t size) ERR_GET_REASON(ERR_get_error())); ERR_clear_error(); } +#elif defined (HAVE_ARC4RANDOM) + arc4random_buf(p, size); #else while (size--) { p[size] = rand_u32();