![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/laminas/laminas-crypt/src/ |
<?php namespace Laminas\Crypt; use function function_exists; use function hash_algos; use function hash_hmac; use function hash_hmac_algos; use function in_array; use function mb_strlen; use function strtolower; /** * PHP implementation of the RFC 2104 Hash based Message Authentication Code */ class Hmac { public const OUTPUT_STRING = false; public const OUTPUT_BINARY = true; /** * Last algorithm supported * * @var string|null */ protected static $lastAlgorithmSupported; /** * Performs a HMAC computation given relevant details such as Key, Hashing * algorithm, the data to compute MAC of, and an output format of String, * or Binary. * * @param string $key * @param string $hash * @param string $data * @param bool $output * @throws Exception\InvalidArgumentException * @return string */ public static function compute($key, $hash, $data, $output = self::OUTPUT_STRING) { if (empty($key)) { throw new Exception\InvalidArgumentException('Provided key is null or empty'); } if (! $hash || ($hash !== static::$lastAlgorithmSupported && ! static::isSupported($hash))) { throw new Exception\InvalidArgumentException( "Hash algorithm is not supported on this PHP installation; provided '{$hash}'" ); } return hash_hmac($hash, $data, $key, $output); } /** * Get the output size according to the hash algorithm and the output format * * @param string $hash * @param bool $output * @return int */ public static function getOutputSize($hash, $output = self::OUTPUT_STRING) { return mb_strlen(static::compute('key', $hash, 'data', $output), '8bit'); } /** * Get the supported algorithm * * @return array */ public static function getSupportedAlgorithms() { return function_exists('hash_hmac_algos') ? hash_hmac_algos() : hash_algos(); } /** * Is the hash algorithm supported? * * @param string $algorithm * @return bool */ public static function isSupported($algorithm) { if ($algorithm === static::$lastAlgorithmSupported) { return true; } $algos = static::getSupportedAlgorithms(); if (in_array(strtolower($algorithm), $algos, true)) { static::$lastAlgorithmSupported = $algorithm; return true; } return false; } /** * Clear the cache of last algorithm supported */ public static function clearLastAlgorithmCache() { static::$lastAlgorithmSupported = null; } }