diff options
Diffstat (limited to 'winsup/cygwin/fhandler_random.cc')
-rw-r--r-- | winsup/cygwin/fhandler_random.cc | 31 |
1 files changed, 5 insertions, 26 deletions
diff --git a/winsup/cygwin/fhandler_random.cc b/winsup/cygwin/fhandler_random.cc index 375398296..37bc76e80 100644 --- a/winsup/cygwin/fhandler_random.cc +++ b/winsup/cygwin/fhandler_random.cc @@ -29,23 +29,6 @@ details. */ #define PSEUDO_MULTIPLIER (6364136223846793005LL) #define PSEUDO_SHIFTVAL (21) -/* There's a bug in ntsecapi.h (Mingw as well as MSFT). SystemFunction036 - is, in fact, a WINAPI function, but it's not defined as such. Therefore - we have to do it correctly here. */ -#define RtlGenRandom SystemFunction036 -extern "C" BOOLEAN WINAPI RtlGenRandom (PVOID, ULONG); - -bool -fhandler_dev_random::crypt_gen_random (void *ptr, size_t len) -{ - if (!RtlGenRandom (ptr, len)) - { - debug_printf ("%E = RtlGenRandom()"); - return false; - } - return true; -} - int fhandler_dev_random::pseudo_write (const void *ptr, size_t len) { @@ -73,11 +56,8 @@ fhandler_dev_random::write (const void *ptr, size_t len) memcpy (buf, ptr, limited_len); /* Mess up system entropy source. Return error if device is /dev/random. */ - if (!crypt_gen_random (buf, limited_len) && dev () == FH_RANDOM) - { - __seterrno (); - return -1; - } + if (getentropy (buf, limited_len) && dev () == FH_RANDOM) + return -1; /* Mess up the pseudo random number generator. */ pseudo_write (buf, limited_len); return len; @@ -125,10 +105,9 @@ fhandler_dev_random::read (void *ptr, size_t& len) } for (size_t offset = 0; offset < len; offset += 512) { - if (!crypt_gen_random (dummy, RESEED_INTERVAL) || - !crypt_gen_random ((PBYTE) ptr + offset, len - offset)) + if (getentropy (dummy, RESEED_INTERVAL) || + getentropy ((PBYTE) ptr + offset, len - offset)) { - __seterrno (); len = (size_t) -1; break; } @@ -138,6 +117,6 @@ fhandler_dev_random::read (void *ptr, size_t& len) /* If device is /dev/urandom, just use system RNG as is, with our own PRNG as fallback. */ - else if (!crypt_gen_random (ptr, len)) + else if (getentropy (ptr, len)) len = pseudo_read (ptr, len); } |