From 60fede7678330739a2a797841219d72a40250489 Mon Sep 17 00:00:00 2001 From: Brian Cox Date: Sat, 15 Jul 2017 22:59:50 -0700 Subject: [PATCH] Tweak device random stuff for Linux --- src/twcrypto/crypto.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/twcrypto/crypto.cpp b/src/twcrypto/crypto.cpp index 1eb5953..72f8172 100644 --- a/src/twcrypto/crypto.cpp +++ b/src/twcrypto/crypto.cpp @@ -1241,37 +1241,34 @@ cHashedKey192::~cHashedKey192() RandomizeBytes(mKey, KEYLEN); } +///////////////////////////////////////////////////////// + +#if HAVE_DEVICE_RANDOM static bool randomize_by_device(const char* device_name, int8* destbuf, int len) { - int dev_random = open("/dev/random", O_RDONLY|O_NONBLOCK); - if (dev_random >= 0) + int rng_device = open(device_name, O_RDONLY|O_NONBLOCK); + if (rng_device >= 0) { - int bytes_read = read(dev_random, destbuf, len); - close(dev_random); + int bytes_read = read(rng_device, destbuf, len); + close(rng_device); if (bytes_read == len) - return true; + return true; } return false; } +#else +static bool gRandomizeBytesSeeded = false; +#endif /////////////////////////////////////////////////////////////////////////////// // void RandomizeBytes(byte* destbuf, int len) -- Fill a buffer with random bytes -static bool gRandomizeBytesSeeded = false; - void RandomizeBytes(int8* destbuf, int len) { #if HAVE_DEVICE_RANDOM -#if HAVE_DEV_RANDOM - if (randomize_by_device("/dev/random", destbuf, len)) - return; - - iUserNotify::GetInstance()->Notify( iUserNotify::V_NORMAL, "Could not read from /dev/random, falling back to /dev/urandom"); -#endif - #if HAVE_DEV_URANDOM if (randomize_by_device("/dev/urandom", destbuf, len)) return; @@ -1282,6 +1279,11 @@ void RandomizeBytes(int8* destbuf, int len) return; #endif +#if HAVE_DEV_RANDOM + if (randomize_by_device("/dev/random", destbuf, len)) + return; +#endif + ThrowAndAssert(eInternal(_T("Failed to read from any RNG devices"))); // TODO: OpenSSL or other impls that are better than the default one