Add arc4random_stir and arc4random_addrandom functions

This commit is contained in:
Guillem Jover 2008-06-18 08:44:18 +03:00
parent 26ab4750ee
commit bf4eeb29f0
4 changed files with 33 additions and 1 deletions

View File

@ -33,7 +33,7 @@ LIB_SHARED_SO = $(LIB_NAME).so
LIB_SONAME = $(LIB_SHARED_SO).$(LIB_VERSION_MAJOR)
LIB_SHARED = $(LIB_SONAME).$(LIB_VERSION_MINOR)
MK_CFLAGS = -Iinclude/ -include bsd/bsd.h -D_GNU_SOURCE
MK_CFLAGS = -Iinclude/ -include bsd/bsd.h -D_GNU_SOURCE -D__REENTRANT
libs: $(LIB_STATIC) $(LIB_SHARED_SO)

View File

@ -1,6 +1,8 @@
LIBBSD_0.0 {
global:
arc4random;
arc4random_stir;
arc4random_addrandom;
bsd_getopt; optreset;
errc; warnc; verrc; vwarnc;
fgetln;

View File

@ -30,6 +30,8 @@
#include <sys/types.h>
u_int32_t arc4random();
void arc4random_stir();
void arc4random_addrandom(u_char *dat, int datlen);
#endif

View File

@ -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()
{