From 5757a53d6106012cbb93b9e435ac6ec343dc85aa Mon Sep 17 00:00:00 2001 From: Brian Cox Date: Mon, 17 Jul 2017 22:35:17 -0700 Subject: [PATCH] Simplify urandom usage, & keep device open between uses --- src/twcrypto/crypto.cpp | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/twcrypto/crypto.cpp b/src/twcrypto/crypto.cpp index 72f8172..d856382 100644 --- a/src/twcrypto/crypto.cpp +++ b/src/twcrypto/crypto.cpp @@ -1244,16 +1244,18 @@ cHashedKey192::~cHashedKey192() ///////////////////////////////////////////////////////// #if HAVE_DEVICE_RANDOM - static bool randomize_by_device(const char* device_name, int8* destbuf, int len) { - int rng_device = open(device_name, O_RDONLY|O_NONBLOCK); + static int rng_device = -1; + + if (-1 == rng_device) + rng_device = open(device_name, O_RDONLY|O_NONBLOCK); + if (rng_device >= 0) { int bytes_read = read(rng_device, destbuf, len); - close(rng_device); if (bytes_read == len) - return true; + return true; } return false; @@ -1267,27 +1269,11 @@ static bool gRandomizeBytesSeeded = false; void RandomizeBytes(int8* destbuf, int len) { -#if HAVE_DEVICE_RANDOM - #if HAVE_DEV_URANDOM if (randomize_by_device("/dev/urandom", destbuf, len)) return; -#endif - -#if HAVE_DEV_ARANDOM - if (randomize_by_device("/dev/arandom", destbuf, 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 + ThrowAndAssert(eInternal(_T("Failed to read from RNG device"))); #else if (!gRandomizeBytesSeeded) {