diff options
author | David Timber <mieabby@gmail.com> | 2020-01-11 18:03:47 +1100 |
---|---|---|
committer | David Timber <mieabby@gmail.com> | 2020-01-11 18:03:47 +1100 |
commit | 10512fc50e6184397206a41c157c09d9b02e9e1a (patch) | |
tree | 5f0779032edf0f0710400ae6c99b9a3f2977735d /src/rnd.c | |
parent | 129e12d7685a6ea99fde514ad104a0368a19033d (diff) |
staged resolv_worker
* replaced RNG from `rnd` to `mbedtls_ctr_drbg`
* use of `uint_fastN_t` where appropriate
* heartbeat protocol draft
* improved worker scheduling mech
Diffstat (limited to 'src/rnd.c')
-rw-r--r-- | src/rnd.c | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -2,6 +2,10 @@ #include "util_rt.h" #include <stdlib.h> +#include <time.h> + +#include <unistd.h> +#include <sys/random.h> #define N ((size_t)624) @@ -92,3 +96,26 @@ uint32_t prne_rnd_gen_int (prne_rnd_engine_t *engine) { double prne_rnd_gen_double (prne_rnd_engine_t *engine) { return (double)prne_rnd_gen_int(engine) * 2.3283064370807974e-10; } + +prne_rnd_engine_t *prne_mk_rnd_engine (void) { + uint32_t seed = 0; + prne_rnd_engnie_alloc_result_t ret; + + getrandom(&seed, sizeof(uint32_t), 0); + + if (seed == 0) { + // fall back to seeding with what's available. + seed = + (uint32_t)(time(NULL) % 0xFFFFFFFF) ^ + (uint32_t)(getpid() % 0xFFFFFFFF) ^ + (uint32_t)(getppid() % 0xFFFFFFFF) ^ + (uint32_t)(clock() % 0xFFFFFFFF); + } + + ret = prne_alloc_rnd_engine(seed == 0 ? NULL : &seed); + if (ret.result != PRNE_RND_ENGINE_ALLOC_OK) { + return NULL; + } + + return ret.engine; +} |