X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fpassword%2FPbkdf2Password.php;h=ce684ded40b4feffdcd29c08e0d994be8e2e1eca;hb=56f171b9586f56bd4f9eb4b0bd25859d56561c1e;hp=541fd0e1a2d7eb60dd66456aa5515e5a92247d9c;hpb=a9d9f196de81b9ae6f1b30d46df60771339adb75;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/password/Pbkdf2Password.php b/includes/password/Pbkdf2Password.php index 541fd0e1a2..ce684ded40 100644 --- a/includes/password/Pbkdf2Password.php +++ b/includes/password/Pbkdf2Password.php @@ -41,54 +41,21 @@ class Pbkdf2Password extends ParameterizedPassword { return ':'; } - protected function shouldUseHashExtension() { - return $this->config['use-hash-extension'] ?? function_exists( 'hash_pbkdf2' ); - } - public function crypt( $password ) { if ( count( $this->args ) == 0 ) { - $this->args[] = base64_encode( MWCryptRand::generate( 16, true ) ); + $this->args[] = base64_encode( random_bytes( 16 ) ); } - if ( $this->shouldUseHashExtension() ) { - $hash = hash_pbkdf2( - $this->params['algo'], - $password, - base64_decode( $this->args[0] ), - (int)$this->params['rounds'], - (int)$this->params['length'], - true - ); - if ( !is_string( $hash ) ) { - throw new PasswordError( 'Error when hashing password.' ); - } - } else { - $hashLenHash = hash( $this->params['algo'], '', true ); - if ( !is_string( $hashLenHash ) ) { - throw new PasswordError( 'Error when hashing password.' ); - } - $hashLen = strlen( $hashLenHash ); - $blockCount = ceil( $this->params['length'] / $hashLen ); - - $hash = ''; - $salt = base64_decode( $this->args[0] ); - for ( $i = 1; $i <= $blockCount; ++$i ) { - $roundTotal = $lastRound = hash_hmac( - $this->params['algo'], - $salt . pack( 'N', $i ), - $password, - true - ); - - for ( $j = 1; $j < $this->params['rounds']; ++$j ) { - $lastRound = hash_hmac( $this->params['algo'], $lastRound, $password, true ); - $roundTotal ^= $lastRound; - } - - $hash .= $roundTotal; - } - - $hash = substr( $hash, 0, $this->params['length'] ); + $hash = hash_pbkdf2( + $this->params['algo'], + $password, + base64_decode( $this->args[0] ), + (int)$this->params['rounds'], + (int)$this->params['length'], + true + ); + if ( !is_string( $hash ) ) { + throw new PasswordError( 'Error when hashing password.' ); } $this->hash = base64_encode( $hash );