2016-06-23 2:35 GMT+02:00 Barry Warsaw <ba...@python.org>:
> Because the os module has traditionally surfaced lower-level operating system
> functions,

Well, that's not true. os.urandom() is a bad example since it has many
implementations depending on the platform.

https://haypo-notes.readthedocs.io/pep_random.html#leave-os-urandom-unchanged-add-os-getrandom
or
https://haypo-notes.readthedocs.io/pep_random.html#operating-system-random-functions


>  That's also why I
> advocate simplifying os.urandom() so that it reverts more or less to exposing
> /dev/urandom to Python.  With perhaps a few exceptions, os doesn't provide
> higher level APIs.

Hum, I modified os.urandom() to use getrandom() to use the private
file descriptor and not require the /dev/urandom device. Using a file
descriptor has many issues. Tell me if you need more details on these
issues.

In Python 3.5.2, os.urandom() uses getrandom() on Linux, but only
falls back on reading /dev/urandom is getrandom(GRND_NONBLOCK) fails
with EAGAIN.

I'm not sure that I understand you. Do you want to stop using getrandom()?

What about getrandom() on Solaris? And getentropy() on OpenBSD?

(And Windows uses CryptGenRandom() ;-))


> The point here is that, let's say you're an experienced Linux developer and
> you know you want to use getrandom(2) in Python.  os.getrandom() is exactly
> that.  It's completely analogous to why we provide, e.g. os.chroot() and such.

Even if we modify os.urandom() to make it blocking, adding
os.getrandom() makes sense.

getrandom() allows also to read /dev/random (not /dev/urandom) without
using a FD, getrandom(GRND_NONBLOCK) also gives access to the
non-blocking mode.

Victor
_______________________________________________
Security-SIG mailing list
Security-SIG@python.org
https://mail.python.org/mailman/listinfo/security-sig

Reply via email to