diff options
author | Guillem Jover <guillem@hadrons.org> | 2008-06-18 08:44:18 +0300 |
---|---|---|
committer | Guillem Jover <guillem@hadrons.org> | 2008-06-18 08:44:18 +0300 |
commit | bf4eeb29f049e374b33b788a8df02357d659183c (patch) | |
tree | 38f2c81448e5c8e9fabc5cde2fa5d4d7dc48d245 /src | |
parent | 26ab4750eebff515ca5717ee272a79fa3866ab55 (diff) | |
download | libbsd-bf4eeb29f049e374b33b788a8df02357d659183c.tar.gz |
Add arc4random_stir and arc4random_addrandom functions
Diffstat (limited to 'src')
-rw-r--r-- | src/arc4random.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/arc4random.c b/src/arc4random.c index 22dae59..5c1837e 100644 --- a/src/arc4random.c +++ b/src/arc4random.c @@ -31,6 +31,7 @@ __FBSDID("$FreeBSD: src/lib/libc/gen/arc4random.c,v 1.10 2004/03/24 14:44:57 gre #include <stdlib.h> #include <fcntl.h> #include <unistd.h> +#include <pthread.h> struct arc4_stream { u_int8_t i; @@ -39,8 +40,14 @@ struct arc4_stream { }; #define RANDOMDEV "/dev/urandom" +#ifdef __REENTRANT +static pthread_mutex_t arc4random_mtx = PTHREAD_MUTEX_INITIALIZER; +#define THREAD_LOCK() pthread_mutex_lock(&arc4random_mtx) +#define THREAD_UNLOCK() pthread_mutex_unlock(&arc4random_mtx) +#else #define THREAD_LOCK() #define THREAD_UNLOCK() +#endif static struct arc4_stream rs; static int rs_initialized; @@ -155,6 +162,27 @@ arc4_check_stir(void) } } +void +arc4random_stir() +{ + THREAD_LOCK(); + arc4_check_init(); + arc4_stir(&rs); + THREAD_UNLOCK(); +} + +void +arc4random_addrandom(dat, datlen) + u_char *dat; + int datlen; +{ + THREAD_LOCK(); + arc4_check_init(); + arc4_check_stir(); + arc4_addrandom(&rs, dat, datlen); + THREAD_UNLOCK(); +} + u_int32_t arc4random() { |