diff options
-rw-r--r-- | random.c | 24 | ||||
-rw-r--r-- | wscript | 1 |
2 files changed, 12 insertions, 13 deletions
@@ -4,6 +4,12 @@ * generators, scrambled”, Sebastiano Vigna */ +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <assert.h> +#include <unistd.h> + #include "random.h" uint64_t rand_u64 (randctx * const st) { @@ -33,21 +39,15 @@ int rand_bool (randctx * const st) { return rand_u64 (st) & 1; } -/* Generate random uint64_t with Intel’s rdrand instruction - */ -static uint64_t rand64 () { - unsigned long long rand; - while (!__builtin_ia32_rdrand64_step (&rand)); - return rand; -} - /* Seed rng with rdrand */ void rand_seed (randctx * const st) { - /* seed with high-quality randomness */ - for (unsigned char i = 0; i < XORSHIFT_S; i++) { - st->s[i] = rand64 (); - } + int fd = open ("/dev/urandom", O_RDONLY); + assert (fd != -1); + int ret = read (fd, &st->s, sizeof (st->s)); + assert (ret != -1); + close (fd); + st->p = 0; } #if 0 @@ -6,7 +6,6 @@ def configure(conf): conf.load ('compiler_c') conf.env.append_unique ('CFLAGS', '-std=gnu99') - conf.env.append_unique ('CFLAGS', '-mrdrnd') conf.check_cfg (path='xml2-config', args='--cflags --libs', package='', uselib_store='xml2') conf.check_cc (lib='xml2', header_name='libxml/parser.h', function_name='xmlParseFile', use='xml2') |