Viewing file: HMAC.php (3.64 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
/** * Class to calculate RFC 2104 compliant hashes * * * PHP versions 4 and 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.txt. If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * @category Encryption * @package Crypt_HMAC * @author Derick Rethans <derick@php.net> * @author Matthew Fonda <mfonda@dotgeek.org> * @copyright 1997-2005 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version CVS: $Id: HMAC.php,v 1.3 2005/02/20 19:18:29 mfonda Exp $ * @link http://pear.php.net/package/Crypt_HMAC */
/** * Calculates RFC 2104 compliant HMACs * * @access public * @category Encryption * @package Crypt_HMAC * @author Derick Rethans <derick@php.net> * @author Matthew Fonda <mfonda@dotgeek.org> * @copyright 1997-2005 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @link http://pear.php.net/package/Crypt_HMAC */ class Crypt_HMAC {
/** * Hash function to use * @var string * @access private */ var $_func;
/** * Inner padded key * @var string * @access private */ var $_ipad;
/** * Outer padded key * @var string * @access private */ var $_opad; /** * Pack format * @var string * @access private */ var $_pack; /** * Constructor * Pass method as first parameter * * @param string $key Key to use for hash * @param string $func Hash function used for the calculation * @return void * @access public */ function Crypt_HMAC($key, $func = 'md5') { $this->setFunction($func); $this->setKey($key); } /** * Sets hash function * * @param string $func Hash function to use * @return void * @access public */ function setFunction($func) { if (!$this->_pack = $this->_getPackFormat($func)) { die('Unsupported hash function'); } $this->_func = $func; } /** * Sets key to use with hash * * @param string $key * @return void * @access public */ function setKey($key) { /* * Pad the key as the RFC wishes */ $func = $this->_func; if (strlen($key) > 64) { $key = pack($this->_pack, $func($key)); } if (strlen($key) < 64) { $key = str_pad($key, 64, chr(0)); }
/* Calculate the padded keys and save them */ $this->_ipad = (substr($key, 0, 64) ^ str_repeat(chr(0x36), 64)); $this->_opad = (substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64)); } /** * Gets pack formats for specifed hash function * * @param string $func * @return mixed false if hash function doesnt exist, pack format on success * @access private */ function _getPackFormat($func) { $packs = array('md5' => 'H32', 'sha1' => 'H40'); return isset($packs[$func]) ? $packs[$func] : false; } /** * Hashing function * * @param string $data string that will encrypted * @return string * @access public */ function hash($data) { $func = $this->_func; return $func($this->_opad . pack($this->_pack, $func($this->_ipad . $data))); }
}
?>
|