diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-12-17 14:24:37 -0500 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-12-17 14:24:37 -0500 |
| commit | aa262344712be27afc02441a309ddde03fa2bec9 (patch) | |
| tree | de9a2f90d415bb6cdac6a76815d2dff0d29b2273 /stdlib/rng.c | |
| parent | d3eb8b8339b9f2aa1702cd6e38cc12448eff5882 (diff) | |
Minor cleanups and fixes to RNG, chacha, and text
Diffstat (limited to 'stdlib/rng.c')
| -rw-r--r-- | stdlib/rng.c | 24 |
1 files changed, 11 insertions, 13 deletions
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.<random-bits> |
