Merge "Special:Newpages feed now shows first revision instead of latest revision"
[lhc/web/wiklou.git] / includes / password / Pbkdf2Password.php
index 8ef6f8d..4a8831e 100644 (file)
@@ -41,12 +41,17 @@ class Pbkdf2Password extends ParameterizedPassword {
                return ':';
        }
 
+       protected function shouldUseHashExtension() {
+               return isset( $this->config['use-hash-extension'] ) ?
+                       $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 ) );
                }
 
-               if ( function_exists( 'hash_pbkdf2' ) ) {
+               if ( $this->shouldUseHashExtension() ) {
                        $hash = hash_pbkdf2(
                                $this->params['algo'],
                                $password,
@@ -55,8 +60,15 @@ class Pbkdf2Password extends ParameterizedPassword {
                                (int)$this->params['length'],
                                true
                        );
+                       if ( !is_string( $hash ) ) {
+                               throw new PasswordError( 'Error when hashing password.' );
+                       }
                } else {
-                       $hashLen = strlen( hash( $this->params['algo'], '', true ) );
+                       $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 = '';