From aa262344712be27afc02441a309ddde03fa2bec9 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 17 Dec 2024 14:24:37 -0500 Subject: Minor cleanups and fixes to RNG, chacha, and text --- stdlib/rng.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'stdlib/rng.c') diff --git a/stdlib/rng.c b/stdlib/rng.c index befc535a..9558f96b 100644 --- a/stdlib/rng.c +++ b/stdlib/rng.c @@ -76,19 +76,17 @@ static void random_bytes(RNG_t rng, uint8_t *dest, size_t needed) { while (needed > 0) { assert(rng->unused_bytes <= sizeof(rng->random_bytes)); - if (rng->unused_bytes == 0) { + if (rng->unused_bytes == 0) rekey(rng); - } else { - size_t to_get = MIN(needed, rng->unused_bytes); - assert(to_get <= rng->unused_bytes); - uint8_t *keystream = rng->random_bytes + sizeof(rng->random_bytes) - rng->unused_bytes; - memcpy(dest, keystream, to_get); - memset(keystream, 0, to_get); - dest += to_get; - needed -= to_get; - rng->unused_bytes -= to_get; - assert(rng->unused_bytes <= sizeof(rng->random_bytes)); - } + + size_t batch_size = MIN(needed, rng->unused_bytes); + uint8_t *batch_src = rng->random_bytes + sizeof(rng->random_bytes) - rng->unused_bytes; + memcpy(dest, batch_src, batch_size); + memset(batch_src, 0, batch_size); + rng->unused_bytes -= batch_size; + dest += batch_size; + needed -= batch_size; + assert(rng->unused_bytes <= sizeof(rng->random_bytes)); } } @@ -224,7 +222,7 @@ public Num_t RNG$num(RNG_t rng, Num_t min, Num_t max) union { Num_t num; uint64_t bits; - } r, one = {.num=1.0}; + } r = {.bits=0}, one = {.num=1.0}; random_bytes(rng, (void*)&r, sizeof(r)); // Set r.num to 1. -- cgit v1.2.3