Larry Hastings added the comment:

> Can we please try to be clear about what kind of blocking we mean? 
> getrandom(flags=0) absolutely *can* block: that's what the original issue was 
> all about. To ensure it *never* blocks you need to call 
> getrandom(GRND_NONBLOCK): that's why the flag exists.

Thanks, I was actually confused on this issue.  I thought CPython was using 
getrandom(GRND_RANDOM) and that's why it was blocking.  But to be clear, you're 
right: 3.5.1 is calling getrandom(0) in all circumstances.  It never passes in 
GRND_RANDOM and it never passes in GRND_NOBLOCK.  And according to the manpage 
for getrandom(), getrandom(0) "blocks if the entropy pool has not yet been 
initialized".

What I don't understand is this, from the manpage for urandom:

> A read from the /dev/urandom device will not block waiting for more entropy.  
> If there is not sufficient entropy, a pseudorandom number generator is used 
> to create the requested bytes.

If both sources are right, then /dev/urandom behaves quite differently from 
getrandom(0).

Imagine how confused I was when Theodore Ts'o said:

> First of all, if you are OK with reading from /dev/urandom, then you might as 
> well use getrandom's GRND_NONBLOCK flag.  They are logically equivalent.

He wrote it.  But what he said there doesn't jibe with what the manpages say.  
Those say that if you call getrandom(GRND_NONBLOCK) before the entropy pool has 
been initialized, it will return EAGAIN, but any time you read from 
/dev/urandom you will always get random data.

... the more I learn about this, the less I think I understand it.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27266>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to