cpython: 980e2c781810 (original) (raw)

--- a/Python/random.c +++ b/Python/random.c @@ -39,10 +39,9 @@ win32_urandom_init(int raise) return 0; error:

@@ -55,8 +54,9 @@ win32_urandom(unsigned char *buffer, Py_ if (hCryptProv == 0) {

@@ -86,29 +84,28 @@ win32_urandom(unsigned char buffer, Py_ / Fill buffer with size pseudo-random bytes generated by getentropy(). Return 0 on success, or raise an exception and return -1 on error.

-

+

buffer += len; @@ -195,18 +192,15 @@ py_getrandom(void *buffer, Py_ssize_t si if (errno == EINTR) { if (PyErr_CheckSignals()) {

@@ -225,9 +219,9 @@ static struct { /* Read size bytes from /dev/urandom into buffer.

#ifdef PY_GETRANDOM

#endif fd = _Py_open_noraise("/dev/urandom", O_RDONLY);

while (0 < size) { do { n = read(fd, buffer, (size_t)size); } while (n < 0 && errno == EINTR);

+

+ buffer += n; size -= n; } close(fd); +

} /* Read size bytes from /dev/urandom into buffer. @@ -379,6 +377,40 @@ lcg_urandom(unsigned int x0, unsigned ch } } +/* If raise is zero:

+

+ +#ifdef MS_WINDOWS

+#elif defined(PY_GETENTROPY)

+#else

+#endif +} + /* Fill buffer with size pseudo-random bytes from the operating system random number generator (RNG). It is suitable for most cryptographic purposes except long living private keys for asymmetric encryption. @@ -387,21 +419,7 @@ lcg_urandom(unsigned int x0, unsigned ch int _PyOS_URandom(void *buffer, Py_ssize_t size) {

- -#ifdef MS_WINDOWS

-#elif defined(PY_GETENTROPY)

-#else

-#endif

} void @@ -442,13 +460,14 @@ void } } else { -#ifdef MS_WINDOWS

-#elif defined(PY_GETENTROPY)

-#else

-#endif

+