diff options
Diffstat (limited to 'Python/random.c')
| -rw-r--r-- | Python/random.c | 24 | 
1 files changed, 9 insertions, 15 deletions
| diff --git a/Python/random.c b/Python/random.c index 825260f..337be86 100644 --- a/Python/random.c +++ b/Python/random.c @@ -165,8 +165,12 @@ dev_urandom_python(char *buffer, Py_ssize_t size)      Py_END_ALLOW_THREADS      if (fd < 0)      { -        PyErr_SetString(PyExc_NotImplementedError, -                        "/dev/urandom (or equivalent) not found"); +        if (errno == ENOENT || errno == ENXIO || +            errno == ENODEV || errno == EACCES) +            PyErr_SetString(PyExc_NotImplementedError, +                            "/dev/urandom (or equivalent) not found"); +        else +            PyErr_SetFromErrno(PyExc_OSError);          return -1;      } @@ -220,8 +224,9 @@ lcg_urandom(unsigned int x0, unsigned char *buffer, size_t size)      }  } -/* Fill buffer with size pseudo-random bytes, not suitable for cryptographic -   use, from the operating random number generator (RNG). +/* Fill buffer with size pseudo-random bytes from the operating system random +   number generator (RNG). It is suitable for for most cryptographic purposes +   except long living private keys for asymmetric encryption.     Return 0 on success, raise an exception and return -1 on error. */  int @@ -258,17 +263,6 @@ _PyRandom_Init(void)      _Py_HashSecret_Initialized = 1;      /* -      By default, hash randomization is disabled, and only -      enabled if PYTHONHASHSEED is set to non-empty or if -      "-R" is provided at the command line: -    */ -    if (!Py_HashRandomizationFlag) { -        /* Disable the randomized hash: */ -        memset(secret, 0, secret_size); -        return; -    } - -    /*        Hash randomization is enabled.  Generate a per-process secret,        using PYTHONHASHSEED if provided.      */ | 
