From: Philip Homburg Date: Tue, 20 Sep 2022 12:47:19 +0000 (+0200) Subject: Align with version 1.58 on cvsweb.openbsd.org X-Git-Tag: release-1.17.0rc1~22^2^2 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=5f3b4605865a929e028511268caff320e34af079;p=thirdparty%2Funbound.git Align with version 1.58 on cvsweb.openbsd.org --- diff --git a/compat/arc4random.c b/compat/arc4random.c index ae342d3a4..486ab89c6 100644 --- a/compat/arc4random.c +++ b/compat/arc4random.c @@ -22,7 +22,7 @@ /* * ChaCha based random number generator for OpenBSD. */ -#define REKEY_BASE (1024*1024) //base 2 + #include #include #include @@ -57,6 +57,8 @@ #define BLOCKSZ 64 #define RSBUFSZ (16*BLOCKSZ) +#define REKEY_BASE (1024*1024) /* NB. should be a power of 2 */ + /* Marked MAP_INHERIT_ZERO, so zero'd out in fork children. */ static struct { size_t rs_have; /* valid bytes at end of rs_buf */ @@ -180,6 +182,7 @@ _rs_stir(void) { u_char rnd[KEYSZ + IVSZ]; uint32_t rekey_fuzz = 0; + if (getentropy(rnd, sizeof rnd) == -1) { if(errno != ENOSYS || fallback_getentropy_urandom(rnd, sizeof rnd) == -1) { @@ -201,9 +204,10 @@ _rs_stir(void) rs->rs_have = 0; memset(rsx->rs_buf, 0, sizeof(rsx->rs_buf)); - /*rs->rs_count = 1600000;*/ - chacha_encrypt_bytes(&rsx->rs_chacha, (uint8_t *)&rekey_fuzz,(uint8_t *)&rekey_fuzz, sizeof(rekey_fuzz)); - rs->rs_count = REKEY_BASE + (rekey_fuzz % REKEY_BASE); + /* rekey interval should not be predictable */ + chacha_encrypt_bytes(&rsx->rs_chacha, (uint8_t *)&rekey_fuzz, + (uint8_t *)&rekey_fuzz, sizeof(rekey_fuzz)); + rs->rs_count = REKEY_BASE + (rekey_fuzz % REKEY_BASE); } static inline void