* Removed the $method parameters from MWCryptRand. Apparently Dantman didn't know about our awesome debug traceback functions like wfGetAllCallers(). The weird optional-middle-parameter calling convention thankfully disappears as a consequence.

* Reduced the amount of debug log noise slightly, removing a few redundant messages.
This commit is contained in:
Tim Starling 2012-03-21 10:27:34 +00:00
parent 64e9ccb8d3
commit 4b8e45d604
4 changed files with 17 additions and 30 deletions

View file

@ -256,17 +256,10 @@ class MWCryptRand {
/**
* @see self::generate()
*/
public function realGenerate( $bytes, $forceStrong = false, $method = null ) {
public function realGenerate( $bytes, $forceStrong = false ) {
wfProfileIn( __METHOD__ );
if ( is_string( $forceStrong ) && is_null( $method ) ) {
// If $forceStrong is a string then it's really $method
$method = $forceStrong;
$forceStrong = false;
}
if ( !is_null( $method ) ) {
wfDebug( __METHOD__ . ": Generating cryptographic random bytes for $method\n" );
}
wfDebug( __METHOD__ . ": Generating cryptographic random bytes for " . wfGetAllCallers( 5 ) . "\n" );
$bytes = floor( $bytes );
static $buffer = '';
@ -285,7 +278,6 @@ class MWCryptRand {
if ( function_exists( 'mcrypt_create_iv' ) ) {
wfProfileIn( __METHOD__ . '-mcrypt' );
$rem = $bytes - strlen( $buffer );
wfDebug( __METHOD__ . ": Trying to generate $rem bytes of randomness using mcrypt_create_iv.\n" );
$iv = mcrypt_create_iv( $rem, MCRYPT_DEV_URANDOM );
if ( $iv === false ) {
wfDebug( __METHOD__ . ": mcrypt_create_iv returned false.\n" );
@ -306,7 +298,6 @@ class MWCryptRand {
) {
wfProfileIn( __METHOD__ . '-openssl' );
$rem = $bytes - strlen( $buffer );
wfDebug( __METHOD__ . ": Trying to generate $rem bytes of randomness using openssl_random_pseudo_bytes.\n" );
$openssl_bytes = openssl_random_pseudo_bytes( $rem, $openssl_strong );
if ( $openssl_bytes === false ) {
wfDebug( __METHOD__ . ": openssl_random_pseudo_bytes returned false.\n" );
@ -327,7 +318,6 @@ class MWCryptRand {
if ( strlen( $buffer ) < $bytes && ( function_exists( 'stream_set_read_buffer' ) || $forceStrong ) ) {
wfProfileIn( __METHOD__ . '-fopen-urandom' );
$rem = $bytes - strlen( $buffer );
wfDebug( __METHOD__ . ": Trying to generate $rem bytes of randomness using /dev/urandom.\n" );
if ( !function_exists( 'stream_set_read_buffer' ) && $forceStrong ) {
wfDebug( __METHOD__ . ": Was forced to read from /dev/urandom without control over the buffer size.\n" );
}
@ -351,7 +341,6 @@ class MWCryptRand {
stream_set_read_buffer( $urandom, $rem );
$chunk_size = $rem;
}
wfDebug( __METHOD__ . ": Reading from /dev/urandom with a buffer size of $chunk_size.\n" );
$random_bytes = fread( $urandom, max( $chunk_size, $rem ) );
$buffer .= $random_bytes;
fclose( $urandom );
@ -399,13 +388,13 @@ class MWCryptRand {
/**
* @see self::generateHex()
*/
public function realGenerateHex( $chars, $forceStrong = false, $method = null ) {
public function realGenerateHex( $chars, $forceStrong = false ) {
// hex strings are 2x the length of raw binary so we divide the length in half
// odd numbers will result in a .5 that leads the generate() being 1 character
// short, so we use ceil() to ensure that we always have enough bytes
$bytes = ceil( $chars / 2 );
// Generate the data and then convert it to a hex string
$hex = bin2hex( $this->generate( $bytes, $forceStrong, $method ) );
$hex = bin2hex( $this->generate( $bytes, $forceStrong ) );
// A bit of paranoia here, the caller asked for a specific length of string
// here, and it's possible (eg when given an odd number) that we may actually
// have at least 1 char more than they asked for. Just in case they made this
@ -449,11 +438,10 @@ class MWCryptRand {
* @param $forceStrong bool Pass true if you want generate to prefer cryptographically
* strong sources of entropy even if reading from them may steal
* more entropy from the system than optimal.
* @param $method The calling method, for debug info. May be the second argument if you are not using forceStrong
* @return String Raw binary random data
*/
public static function generate( $bytes, $forceStrong = false, $method = null ) {
return self::singleton()->realGenerate( $bytes, $forceStrong, $method );
public static function generate( $bytes, $forceStrong = false ) {
return self::singleton()->realGenerate( $bytes, $forceStrong );
}
/**
@ -466,11 +454,10 @@ class MWCryptRand {
* @param $forceStrong bool Pass true if you want generate to prefer cryptographically
* strong sources of entropy even if reading from them may steal
* more entropy from the system than optimal.
* @param $method The calling method, for debug info. May be the second argument if you are not using forceStrong
* @return String Hexadecimal random data
*/
public static function generateHex( $chars, $forceStrong = false, $method = null ) {
return self::singleton()->realGenerateHex( $chars, $forceStrong, $method );
public static function generateHex( $chars, $forceStrong = false ) {
return self::singleton()->realGenerateHex( $chars, $forceStrong );
}
}

View file

@ -3363,7 +3363,7 @@ function wfFixSessionID() {
// If built-in entropy is not enabled or not sufficient override php's built in session id generation code
if ( !$entropyEnabled ) {
wfDebug( __METHOD__ . ": PHP's built in entropy is disabled or not sufficient, overriding session id generation using our cryptrand source.\n" );
session_id( MWCryptRand::generateHex( 32, __METHOD__ ) );
session_id( MWCryptRand::generateHex( 32 ) );
}
}

View file

@ -847,7 +847,7 @@ class User {
// Multiply by 1.25 to get the number of hex characters we need
$length = $length * 1.25;
// Generate random hex chars
$hex = MWCryptRand::generateHex( $length, __METHOD__ );
$hex = MWCryptRand::generateHex( $length );
// Convert from base 16 to base 32 to get a proper password like string
return wfBaseConvert( $hex, 16, 32 );
}
@ -2044,7 +2044,7 @@ class User {
global $wgSecretKey, $wgProxyKey;
$this->load();
if ( !$token ) {
$this->mToken = MWCryptRand::generateHex( USER_TOKEN_LENGTH, __METHOD__ );
$this->mToken = MWCryptRand::generateHex( USER_TOKEN_LENGTH );
} else {
$this->mToken = $token;
}
@ -3179,7 +3179,7 @@ class User {
} else {
$token = $request->getSessionData( 'wsEditToken' );
if ( $token === null ) {
$token = MWCryptRand::generateHex( 32, __METHOD__ );
$token = MWCryptRand::generateHex( 32 );
$request->setSessionData( 'wsEditToken', $token );
}
if( is_array( $salt ) ) {
@ -3197,7 +3197,7 @@ class User {
* @deprecated since 1.20; Use MWCryptRand for secure purposes or wfRandomString for pesudo-randomness
*/
public static function generateToken( $salt = '' ) {
return MWCryptRand::generateHex( 32, __METHOD__ );
return MWCryptRand::generateHex( 32 );
}
/**
@ -3304,7 +3304,7 @@ class User {
$now = time();
$expires = $now + $wgUserEmailConfirmationTokenExpiry;
$this->load();
$token = MWCryptRand::generateHex( 32, __METHOD__ );
$token = MWCryptRand::generateHex( 32 );
$hash = md5( $token );
$this->mEmailToken = $hash;
$this->mEmailTokenExpires = wfTimestamp( TS_MW, $expires );
@ -3856,7 +3856,7 @@ class User {
if( $wgPasswordSalt ) {
if ( $salt === false ) {
$salt = MWCryptRand::generateHex( 8, __METHOD__ );
$salt = MWCryptRand::generateHex( 8 );
}
return ':B:' . $salt . ':' . md5( $salt . '-' . md5( $password ) );
} else {

View file

@ -1152,7 +1152,7 @@ class LoginForm extends SpecialPage {
global $wgRequest;
// Generate a token directly instead of using $user->editToken()
// because the latter reuses $_SESSION['wsEditToken']
$wgRequest->setSessionData( 'wsLoginToken', MWCryptRand::generateHex( 32, __METHOD__ ) );
$wgRequest->setSessionData( 'wsLoginToken', MWCryptRand::generateHex( 32 ) );
}
/**
@ -1177,7 +1177,7 @@ class LoginForm extends SpecialPage {
*/
public static function setCreateaccountToken() {
global $wgRequest;
$wgRequest->setSessionData( 'wsCreateaccountToken', MWCryptRand::generateHex( 32, __METHOD__ ) );
$wgRequest->setSessionData( 'wsCreateaccountToken', MWCryptRand::generateHex( 32 ) );
}
/**