From 0dbb13fea09407c516e7a3a2f68b287d1316a7ab Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Wed, 1 Oct 2025 02:41:09 +0200 Subject: [PATCH] Extend badrand with badrand_buf --- kern/libkern/badrand.c | 19 ++++++++++++++++++- kern/libkern/badrand.h | 5 +++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/kern/libkern/badrand.c b/kern/libkern/badrand.c index 48df698..f7c06f8 100644 --- a/kern/libkern/badrand.c +++ b/kern/libkern/badrand.c @@ -1,5 +1,6 @@ #include "badrand.h" #include +#include #define PRAND_BUILD_SEED \ ((uint64_t)(__TIME__[0]) * (uint64_t)(__TIME__[1]) * (uint64_t)(__TIME__[3]) * (uint64_t)(__TIME__[4]) * \ @@ -24,7 +25,23 @@ uint64_t badrand_range(uint64_t min, uint64_t max) { return min + (x % range); } -void sbadprand(uint64_t s) { +void badrand_buf(char *buf, size_t len) { + unsigned char *p = (unsigned char *)buf; + + while (len >= 8) { + uint64_t r = badrand(); + memcpy(p, &r, 8); + p += 8; + len -= 8; + } + + if (len > 0) { + uint64_t r = badrand(); + memcpy(p, &r, len); + } +} + +void sbadrand(uint64_t s) { if (s) { seed ^= (s * 0x9e3779b97f4a7c15ULL) + (seed << 6) + (seed >> 2); } else { diff --git a/kern/libkern/badrand.h b/kern/libkern/badrand.h index 8a0ab9c..6710b89 100644 --- a/kern/libkern/badrand.h +++ b/kern/libkern/badrand.h @@ -40,4 +40,9 @@ uint64_t badrand(); */ uint64_t badrand_range(uint64_t min, uint64_t max); +/** + * @brief Fills buffer with random data + */ +void badrand_buf(char *buf, size_t len); + #endif // BADRAND_H