Tweak device random stuff for Linux
This commit is contained in:
parent
eec812814a
commit
60fede7678
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue