From 3995fb8aee32783d3386d82a5a6910a86c7bf38c Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Sun, 8 Mar 2015 11:58:06 +0100 Subject: Add two entropy sources. Warning: prng is not secure in any way, I have no knowlege of such things. --- src/kernel/core/prng.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/kernel/core/prng.c') diff --git a/src/kernel/core/prng.c b/src/kernel/core/prng.c index d4307b6..dbffba5 100644 --- a/src/kernel/core/prng.c +++ b/src/kernel/core/prng.c @@ -1,4 +1,5 @@ #include +#include #define EPOOLSIZE 2048 @@ -10,11 +11,10 @@ static const uint32_t a = 16807; static const uint32_t m = 0x7FFFFFFF; uint16_t prng_word() { - if (++n == 100) { + if (++n >= 100) { n = 0; if (entropy_count) { - entropy_count--; - x += entropy[entropy_count]; + x += entropy[--entropy_count]; } } x = (x * a) % m; @@ -30,9 +30,13 @@ void prng_bytes(uint8_t* out, size_t nbytes) { } void prng_add_entropy(const uint8_t* ptr, size_t nbytes) { + int st = enter_critical(CL_NOINT); + while (nbytes-- && entropy_count < EPOOLSIZE - 1) { entropy[entropy_count++] = *(ptr++); } + + exit_critical(st); } /* vim: set ts=4 sw=4 tw=0 noet :*/ -- cgit v1.2.3