Aleksander Machniak
2012-07-23 114cf1281b1546f1efb8f78f92b179dd6afcaaa9
commit | author | age
627330 1 <?php
114cf1 2 // +-----------------------------------------------------------------------+
AM 3 // | Copyright (c) 2002-2003 Richard Heyes                                 |
4 // | All rights reserved.                                                  |
5 // |                                                                       |
6 // | Redistribution and use in source and binary forms, with or without    |
7 // | modification, are permitted provided that the following conditions    |
8 // | are met:                                                              |
9 // |                                                                       |
10 // | o Redistributions of source code must retain the above copyright      |
11 // |   notice, this list of conditions and the following disclaimer.       |
12 // | o Redistributions in binary form must reproduce the above copyright   |
13 // |   notice, this list of conditions and the following disclaimer in the |
14 // |   documentation and/or other materials provided with the distribution.|
15 // | o The names of the authors may not be used to endorse or promote      |
16 // |   products derived from this software without specific prior written  |
17 // |   permission.                                                         |
18 // |                                                                       |
19 // | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |
20 // | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |
21 // | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
22 // | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |
23 // | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
24 // | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |
25 // | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
26 // | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
27 // | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |
28 // | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
29 // | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |
30 // |                                                                       |
31 // +-----------------------------------------------------------------------+
32 // | Author: Richard Heyes <richard@php.net>                               |
33 // +-----------------------------------------------------------------------+
34 //
627330 35 // $Id$
T 36
37 /**
38 * Common functionality to SASL mechanisms
39 *
40 * @author  Richard Heyes <richard@php.net>
41 * @access  public
42 * @version 1.0
43 * @package Auth_SASL
44 */
45
46 class Auth_SASL_Common
47 {
48     /**
49     * Function which implements HMAC MD5 digest
50     *
51     * @param  string $key  The secret key
114cf1 52     * @param  string $data The data to hash
AM 53     * @param  bool $raw_output Whether the digest is returned in binary or hexadecimal format.
54     *
55     * @return string       The HMAC-MD5 digest
627330 56     */
114cf1 57     function _HMAC_MD5($key, $data, $raw_output = FALSE)
627330 58     {
T 59         if (strlen($key) > 64) {
60             $key = pack('H32', md5($key));
61         }
62
63         if (strlen($key) < 64) {
64             $key = str_pad($key, 64, chr(0));
65         }
66
67         $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
68         $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
69
70         $inner  = pack('H32', md5($k_ipad . $data));
114cf1 71         $digest = md5($k_opad . $inner, $raw_output);
627330 72
T 73         return $digest;
74     }
114cf1 75
AM 76     /**
77     * Function which implements HMAC-SHA-1 digest
78     *
79     * @param  string $key  The secret key
80     * @param  string $data The data to hash
81     * @param  bool $raw_output Whether the digest is returned in binary or hexadecimal format.
82     * @return string       The HMAC-SHA-1 digest
83     * @author Jehan <jehan.marmottard@gmail.com>
84     * @access protected
85     */
86     protected function _HMAC_SHA1($key, $data, $raw_output = FALSE)
87     {
88         if (strlen($key) > 64) {
89             $key = sha1($key, TRUE);
90         }
91
92         if (strlen($key) < 64) {
93             $key = str_pad($key, 64, chr(0));
94         }
95
96         $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
97         $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
98
99         $inner  = pack('H40', sha1($k_ipad . $data));
100         $digest = sha1($k_opad . $inner, $raw_output);
101
102          return $digest;
103      }
627330 104 }
T 105 ?>