ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash

Advertisement

Summery Summery

Do we need to rehash this password?

Syntax Syntax

ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash( string $hash, int $opslimit, int $memlimit )

Parameters Parameters

$hash

(Required)

$opslimit

(Required)

$memlimit

(Required)

Return Return

(bool)

Source Source

File: wp-includes/sodium_compat/src/Compat.php

    public static function crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit)
    {
        ParagonIE_Sodium_Core_Util::declareScalarType($hash, 'string', 1);
        ParagonIE_Sodium_Core_Util::declareScalarType($opslimit, 'int', 2);
        ParagonIE_Sodium_Core_Util::declareScalarType($memlimit, 'int', 3);

        // Just grab the first 4 pieces.
        $pieces = explode('$', (string) $hash);
        $prefix = implode('$', array_slice($pieces, 0, 4));

        // Rebuild the expected header.
        /** @var int $ops */
        $ops = (int) $opslimit;
        /** @var int $mem */
        $mem = (int) $memlimit >> 10;
        $encoded = self::CRYPTO_PWHASH_STRPREFIX . 'v=19$m=' . $mem . ',t=' . $ops . ',p=1';

        // Do they match? If so, we don't need to rehash, so return false.
        return !ParagonIE_Sodium_Core_Util::hashEquals($encoded, $prefix);
    }

Advertisement

Advertisement

Leave a Reply