Source of file Hmac.php
Size: 2,730 Bytes - Last Modified: 2014-03-12T23:21:18+01:00
/home/theseer/Downloads/ZendFramework-2.3.0/library/Zend/Crypt/Hmac.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 | <?php /** * Zend Framework (http://framework.zend.com/) * * @link http://github.com/zendframework/zf2 for the canonical source repository * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ namespace Zend\Crypt; /** * PHP implementation of the RFC 2104 Hash based Message Authentication Code */ class Hmac { const OUTPUT_STRING = false; 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 strlen(static::compute('key', $hash, 'data', $output)); } /** * Get the supported algorithm * * @return array */ public static function getSupportedAlgorithms() { return hash_algos(); } /** * Is the hash algorithm supported? * * @param string $algorithm * @return bool */ public static function isSupported($algorithm) { if ($algorithm === static::$lastAlgorithmSupported) { return true; } if (in_array(strtolower($algorithm), hash_algos(), true)) { static::$lastAlgorithmSupported = $algorithm; return true; } return false; } /** * Clear the cache of last algorithm supported */ public static function clearLastAlgorithmCache() { static::$lastAlgorithmSupported = null; } } |