* @license http://opensource.org/licenses/MIT MIT */ if (!function_exists('hash_equals')) { function hash_equals($known_string, $user_string) { // We jump trough some hoops to match the internals errors as closely as possible $argc = func_num_args(); $params = func_get_args(); if ($argc < 2) { trigger_error("hash_equals() expects at least 2 parameters, {$argc} given", E_USER_WARNING); return null; } if (!is_string($known_string)) { trigger_error("hash_equals(): Expected known_string to be a string, " . gettype($known_string) . " given", E_USER_WARNING); return false; } if (!is_string($user_string)) { trigger_error("hash_equals(): Expected user_string to be a string, " . gettype($user_string) . " given", E_USER_WARNING); return false; } if (strlen($known_string) !== strlen($user_string)) { return false; } $len = strlen($known_string); $result = 0; for ($i = 0; $i < $len; $i++) { $result |= (ord($known_string[$i]) ^ ord($user_string[$i])); } // They are only identical strings if $result is exactly 0... return 0 === $result; } }