]> granicus.if.org Git - php/commitdiff
- use new function to get random bytes
authorPierre Joye <pajoye@php.net>
Tue, 8 Jun 2010 18:27:23 +0000 (18:27 +0000)
committerPierre Joye <pajoye@php.net>
Tue, 8 Jun 2010 18:27:23 +0000 (18:27 +0000)
ext/mcrypt/mcrypt.c

index b3c711b52976af427c72af94ac0c5da60881364a..6bbc4e200b2adced57e5578cab5e03be74d172ca 100644 (file)
@@ -27,8 +27,7 @@
 #if HAVE_LIBMCRYPT
 
 #if PHP_WIN32
-# include <Wincrypt.h>
-# include <Ntsecapi.h>
+# include "win32/winutil.h"
 #endif
 
 #include "php_mcrypt.h"
@@ -1391,23 +1390,14 @@ PHP_FUNCTION(mcrypt_create_iv)
        
        if (source == RANDOM || source == URANDOM) {
 #if PHP_WIN32
-                       /* random/urandom equivalent on Windows */
-                       HCRYPTPROV     hCryptProv;
-                       BYTE *iv_b = (BYTE *) iv;
-
-                       /* It could be done using LoadLibrary but as we rely on 2k+ for 5.3, cleaner to use a clear dependency (Advapi32) and a 
-                               standard API call (no f=getAddr..; f();) */
-                       if(!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
-                               efree(iv);
-                               php_error_docref(NULL TSRMLS_CC, E_ERROR, "Cannot open random device");
-                               RETURN_FALSE;
-                       }
-                       if(!CryptGenRandom(hCryptProv, size,  iv_b)) {
-                               efree(iv);
-                               php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not gather sufficient random data");
-                               RETURN_FALSE;
-                       }
-                       n = size;
+               /* random/urandom equivalent on Windows */
+               BYTE *iv_b = (BYTE *) iv;
+               if (php_win32_get_random_bytes(iv_b, (size_t) size) == FAILURE){
+                       efree(iv);
+                       php_error_docref(NULL TSRMLS_CC, E_ERROR, "Could not gather sufficient random data");
+                       RETURN_FALSE;
+               }
+               n = size;
 #else
                int    fd;
                size_t read_bytes = 0;