-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathrfc2104.php
63 lines (55 loc) · 1.77 KB
/
rfc2104.php
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
/**
* phpsnmp - a PHP SNMP library
*
* Copyright (C) 2004 David Eder <david@eder,us>
*
* Based on snmp - a Python SNMP library
* Copyright (C) 2003 Unicity Pty Ltd <libsnmp@unicity.com.au>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* @author David Eder <david@eder.us>
* @copyright 2004 David Eder
* @package phpSNMP
* @subpackage rfc2104
* @version .7
*/
/**
*/
/**
* generate HMAC
*
* @param string $data
* @param string $key
* @param string $hash_function
* @param integer $block_size
* @return string
*/
function HMAC($data, $key, $hash_function='md5', $block_size=64)
{
if(!is_callable($hash_function))
{
trigger_error("$hash_function does not exist.", E_USER_WARNING);
return '';
}
if(strlen($key) > $block_size) $key = pack('H*', $hash_function($key));
$key = str_pad($key, $block_size, chr(0));
$ipad = $key ^ str_repeat(chr(0x36), $block_size);
$opad = $key ^ str_repeat(chr(0x5c), $block_size);
$digest = pack('H*', $hash_function($ipad . $data));
return pack('H*', $hash_function($opad . $digest));
}
?>