X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Flibs%2FCryptRand.php;h=f7702dd3ac54121048ee8d12aeaef54dd081cdf0;hp=859d58b5ddb151a1fd2f620206b52f525191d2c9;hb=631e8695b15412ec16c31623cbd6e5aa3d6efb1e;hpb=5d4099246e49ff3e2b369e329aaaf3286f883bcd diff --git a/includes/libs/CryptRand.php b/includes/libs/CryptRand.php index 859d58b5dd..f7702dd3ac 100644 --- a/includes/libs/CryptRand.php +++ b/includes/libs/CryptRand.php @@ -94,9 +94,9 @@ class CryptRand { $files[] = dirname( __DIR__ ); foreach ( $files as $file ) { - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $stat = stat( $file ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); if ( $stat ) { // stat() duplicates data into numeric and string keys so kill off all the numeric ones foreach ( $stat as $k => $v ) { @@ -259,43 +259,40 @@ class CryptRand { } } - if ( strlen( $buffer ) < $bytes ) { + if ( strlen( $buffer ) < $bytes && function_exists( 'mcrypt_create_iv' ) ) { // If available make use of mcrypt_create_iv URANDOM source to generate randomness // On unix-like systems this reads from /dev/urandom but does it without any buffering // and bypasses openbasedir restrictions, so it's preferable to reading directly // On Windows starting in PHP 5.3.0 Windows' native CryptGenRandom is used to generate // entropy so this is also preferable to just trying to read urandom because it may work // on Windows systems as well. - if ( function_exists( 'mcrypt_create_iv' ) ) { - $rem = $bytes - strlen( $buffer ); - $iv = mcrypt_create_iv( $rem, MCRYPT_DEV_URANDOM ); - if ( $iv === false ) { - $this->logger->debug( "mcrypt_create_iv returned false." ); - } else { - $buffer .= $iv; - $this->logger->debug( "mcrypt_create_iv generated " . strlen( $iv ) . - " bytes of randomness." ); - } + $rem = $bytes - strlen( $buffer ); + $iv = mcrypt_create_iv( $rem, MCRYPT_DEV_URANDOM ); + if ( $iv === false ) { + $this->logger->debug( "mcrypt_create_iv returned false." ); + } else { + $buffer .= $iv; + $this->logger->debug( "mcrypt_create_iv generated " . strlen( $iv ) . + " bytes of randomness." ); } } - if ( strlen( $buffer ) < $bytes ) { - if ( function_exists( 'openssl_random_pseudo_bytes' ) ) { - $rem = $bytes - strlen( $buffer ); - $openssl_bytes = openssl_random_pseudo_bytes( $rem, $openssl_strong ); - if ( $openssl_bytes === false ) { - $this->logger->debug( "openssl_random_pseudo_bytes returned false." ); - } else { - $buffer .= $openssl_bytes; - $this->logger->debug( "openssl_random_pseudo_bytes generated " . - strlen( $openssl_bytes ) . " bytes of " . - ( $openssl_strong ? "strong" : "weak" ) . " randomness." ); - } - if ( strlen( $buffer ) >= $bytes ) { - // openssl tells us if the random source was strong, if some of our data was generated - // using it use it's say on whether the randomness is strong - $this->strong = !!$openssl_strong; - } + if ( strlen( $buffer ) < $bytes && function_exists( 'openssl_random_pseudo_bytes' ) ) { + $rem = $bytes - strlen( $buffer ); + $openssl_strong = false; + $openssl_bytes = openssl_random_pseudo_bytes( $rem, $openssl_strong ); + if ( $openssl_bytes === false ) { + $this->logger->debug( "openssl_random_pseudo_bytes returned false." ); + } else { + $buffer .= $openssl_bytes; + $this->logger->debug( "openssl_random_pseudo_bytes generated " . + strlen( $openssl_bytes ) . " bytes of " . + ( $openssl_strong ? "strong" : "weak" ) . " randomness." ); + } + if ( strlen( $buffer ) >= $bytes ) { + // openssl tells us if the random source was strong, if some of our data was generated + // using it use it's say on whether the randomness is strong + $this->strong = !!$openssl_strong; } } @@ -310,9 +307,9 @@ class CryptRand { } // /dev/urandom is generally considered the best possible commonly // available random source, and is available on most *nix systems. - MediaWiki\suppressWarnings(); + Wikimedia\suppressWarnings(); $urandom = fopen( "/dev/urandom", "rb" ); - MediaWiki\restoreWarnings(); + Wikimedia\restoreWarnings(); // Attempt to read all our random data from urandom // php's fread always does buffered reads based on the stream's chunk_size