Keep things simple; directly initialize the example RNG from the system one

This commit is contained in:
Frank Denis 2018-01-17 15:11:18 +01:00
parent 673b2b2b1e
commit 13513e886b

View File

@ -329,9 +329,6 @@ randombytes_salsa20_random_init(void)
static void static void
randombytes_salsa20_random_stir(void) randombytes_salsa20_random_stir(void)
{ {
unsigned char m0[crypto_stream_salsa20_KEYBYTES +
crypto_stream_salsa20_NONCEBYTES];
memset(stream.rnd32, 0, sizeof stream.rnd32); memset(stream.rnd32, 0, sizeof stream.rnd32);
stream.rnd32_outleft = (size_t) 0U; stream.rnd32_outleft = (size_t) 0U;
if (global.initialized == 0) { if (global.initialized == 0) {
@ -345,34 +342,31 @@ randombytes_salsa20_random_stir(void)
#ifndef _WIN32 #ifndef _WIN32
# ifdef HAVE_SAFE_ARC4RANDOM # ifdef HAVE_SAFE_ARC4RANDOM
arc4random_buf(m0, sizeof m0); arc4random_buf(stream.key, sizeof stream.key);
# elif defined(SYS_getrandom) && defined(__NR_getrandom) # elif defined(SYS_getrandom) && defined(__NR_getrandom)
if (global.getrandom_available != 0) { if (global.getrandom_available != 0) {
if (randombytes_linux_getrandom(m0, sizeof m0) != 0) { if (randombytes_linux_getrandom(stream.key, sizeof stream.key) != 0) {
sodium_misuse(); /* LCOV_EXCL_LINE */ sodium_misuse(); /* LCOV_EXCL_LINE */
} }
} else if (global.random_data_source_fd == -1 || } else if (global.random_data_source_fd == -1 ||
safe_read(global.random_data_source_fd, m0, safe_read(global.random_data_source_fd, stream.key,
sizeof m0) != (ssize_t) sizeof m0) { sizeof stream.key) != (ssize_t) sizeof stream.key) {
sodium_misuse(); /* LCOV_EXCL_LINE */ sodium_misuse(); /* LCOV_EXCL_LINE */
} }
# else # else
if (global.random_data_source_fd == -1 || if (global.random_data_source_fd == -1 ||
safe_read(global.random_data_source_fd, m0, safe_read(global.random_data_source_fd, stream.key,
sizeof m0) != (ssize_t) sizeof m0) { sizeof stream.key) != (ssize_t) sizeof stream.key) {
sodium_misuse(); /* LCOV_EXCL_LINE */ sodium_misuse(); /* LCOV_EXCL_LINE */
} }
# endif # endif
#else /* _WIN32 */ #else /* _WIN32 */
if (! RtlGenRandom((PVOID) m0, (ULONG) sizeof m0)) { if (! RtlGenRandom((PVOID) stream.key, (ULONG) sizeof stream.key)) {
sodium_misuse(); /* LCOV_EXCL_LINE */ sodium_misuse(); /* LCOV_EXCL_LINE */
} }
#endif #endif
crypto_stream_salsa20(stream.key, sizeof stream.key,
m0 + crypto_stream_salsa20_KEYBYTES, m0);
sodium_memzero(m0, sizeof m0);
stream.initialized = 1; stream.initialized = 1;
} }