diff --git a/daemon/pseudorand.c b/daemon/pseudorand.c index b8119ea2f..dc8f6b17b 100644 --- a/daemon/pseudorand.c +++ b/daemon/pseudorand.c @@ -1,5 +1,6 @@ #include "pseudorand.h" #include +#include #include #include #include @@ -16,11 +17,14 @@ static void init_if_needed(void) { if (unlikely(!pseudorand_initted)) { unsigned char seedbuf[16]; + struct sha256 sha; randombytes_buf(seedbuf, sizeof(seedbuf)); - - isaac64_init(&isaac64, seedbuf, sizeof(seedbuf)); memcpy(&siphashseed, seedbuf, sizeof(siphashseed)); + + /* In case isaac is reversible, don't leak seed. */ + sha256(&sha, seedbuf, sizeof(seedbuf)); + isaac64_init(&isaac64, sha.u.u8, sizeof(sha.u.u8)); pseudorand_initted = true; } }