From 761f57a1b167abeda40c5cc0fce801a4230f2400 Mon Sep 17 00:00:00 2001 From: Anton Kling Date: Mon, 13 Nov 2023 16:05:31 +0100 Subject: Crypto: Implement fast insecure RNG for overwritting memory areas. This is mainly done to test for uninitlalized memory and find bugs faster. Therefore it does not need to be cryptographically secure or perfectly uniform. Xoshiro256++ seems like a good fit. --- kernel/random.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'kernel/random.c') diff --git a/kernel/random.c b/kernel/random.c index c043cdf..329b7d6 100644 --- a/kernel/random.c +++ b/kernel/random.c @@ -1,6 +1,7 @@ // FIXME: This is mostlikely incredibly inefficent and insecure. #include #include +#include #include #include #include @@ -40,7 +41,23 @@ void mix_chacha(void) { internal_chacha_block[COUNT] = 0; } -void get_random(BYTEPTR buffer, u64 len) { +void get_fast_insecure_random(u8 *buffer, u64 len) { + static u8 is_fast_random_seeded = 0; + if (!is_fast_random_seeded) { + uint64_t seed[4]; + get_random((u8 *)&seed, sizeof(seed)); + seed_xoshiro_256_pp(seed); + is_fast_random_seeded = 1; + } + for (; len >= 8; len -= 8, buffer += 8) { + *((uint64_t *)buffer) = xoshiro_256_pp(); + } + for (; len > 0; len--, buffer++) { + *((uint8_t *)buffer) = xoshiro_256_pp() & 0xFF; + } +} + +void get_random(u8* buffer, u64 len) { u8 rand_data[BLOCK_SIZE]; for (; len > 0;) { if (COUNT_MAX - 1 == internal_chacha_block[COUNT]) { -- cgit v1.2.3