summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler_random.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler_random.cc')
-rw-r--r--winsup/cygwin/fhandler_random.cc31
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);
}