aboutsummaryrefslogtreecommitdiffstats
path: root/include/php_compat/hash_hmac.php
blob: 5f05e370cdc20517e11bd774dcf97677fa207d37 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
//(hash) - enabled by default as of PHP 5.1.2
function hash_hmac($algo, $data, $key, $raw_output=false)
{
  /* md5 and sha1 only */
  $algo=strtolower($algo);
  $p=array('md5'=>'H32','sha1'=>'H40');
  if ( !isset($p[$algo]) or !function_exists($algo) )
  {
    $algo = 'md5';
  }
  if(strlen($key)>64) $key=pack($p[$algo],$algo($key));
  if(strlen($key)<64) $key=str_pad($key,64,chr(0));

  $ipad=substr($key,0,64) ^ str_repeat(chr(0x36),64);
  $opad=substr($key,0,64) ^ str_repeat(chr(0x5C),64);

  $ret = $algo($opad.pack($p[$algo],$algo($ipad.$data)));
  if ($raw_output)
  {
    $ret = pack('H*', $ret);
  }
  return $ret;
}
?>