| --- a/Modules/posixmodule.c Fri Dec 30 21:26:08 2011 +0100 |
| +++ b/Modules/posixmodule.c Tue Jan 03 21:48:43 2012 +0100 |
| @@ -9330,17 +9330,6 @@ |
| "urandom(n) -> str\n\n\ |
| Return n random bytes suitable for cryptographic use."); |
| -typedef BOOL (WINAPI *CRYPTACQUIRECONTEXTA)(HCRYPTPROV *phProv,\ |
| - LPCSTR pszContainer, LPCSTR pszProvider, DWORD dwProvType,\ |
| - DWORD dwFlags ); |
| -typedef BOOL (WINAPI *CRYPTGENRANDOM)(HCRYPTPROV hProv, DWORD dwLen,\ |
| - BYTE *pbBuffer ); |
| - |
| -static CRYPTGENRANDOM pCryptGenRandom = NULL; |
| -/* This handle is never explicitly released. Instead, the operating |
| - system will release it when the process terminates. */ |
| -static HCRYPTPROV hCryptProv = 0; |
| - |
| static PyObject* |
| win32_urandom(PyObject *self, PyObject *args) |
| { |
| @@ -9350,50 +9339,15 @@ |
| /* Read arguments */ |
| if (! PyArg_ParseTuple(args, "i:urandom", &howMany)) |
| return NULL; |
| - if (howMany < 0) |
| - return PyErr_Format(PyExc_ValueError, |
| - "negative argument not allowed"); |
| - |
| - if (hCryptProv == 0) { |
| - HINSTANCE hAdvAPI32 = NULL; |
| - CRYPTACQUIRECONTEXTA pCryptAcquireContext = NULL; |
| - |
| - /* Obtain handle to the DLL containing CryptoAPI |
| - This should not fail */ |
| - hAdvAPI32 = GetModuleHandle("advapi32.dll"); |
| - if(hAdvAPI32 == NULL) |
| - return win32_error("GetModuleHandle", NULL); |
| - |
| - /* Obtain pointers to the CryptoAPI functions |
| - This will fail on some early versions of Win95 */ |
| - pCryptAcquireContext = (CRYPTACQUIRECONTEXTA)GetProcAddress( |
| - hAdvAPI32, |
| - "CryptAcquireContextA"); |
| - if (pCryptAcquireContext == NULL) |
| - return PyErr_Format(PyExc_NotImplementedError, |
| - "CryptAcquireContextA not found"); |
| - |
| - pCryptGenRandom = (CRYPTGENRANDOM)GetProcAddress( |
| - hAdvAPI32, "CryptGenRandom"); |
| - if (pCryptGenRandom == NULL) |
| - return PyErr_Format(PyExc_NotImplementedError, |
| - "CryptGenRandom not found"); |
| - |
| - /* Acquire context */ |
| - if (! pCryptAcquireContext(&hCryptProv, NULL, NULL, |
| - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) |
| - return win32_error("CryptAcquireContext", NULL); |
| - } |
| /* Allocate bytes */ |
| result = PyBytes_FromStringAndSize(NULL, howMany); |
| if (result != NULL) { |
| /* Get random data */ |
| memset(PyBytes_AS_STRING(result), 0, howMany); /* zero seed */ |
| - if (! pCryptGenRandom(hCryptProv, howMany, (unsigned char*) |
| - PyBytes_AS_STRING(result))) { |
| + if (PyOS_URandom(PyBytes_AS_STRING(result), howMany) == -1) { |
| Py_DECREF(result); |
| - return win32_error("CryptGenRandom", NULL); |
| + return NULL; |
| } |
| } |
| return result; |