~ubuntu-branches/ubuntu/saucy/php-auth-sasl/saucy

« back to all changes in this revision

Viewing changes to Auth_SASL-1.0.4/Auth/SASL/Common.php

  • Committer: Bazaar Package Importer
  • Author(s): Benoit Mortier
  • Date: 2010-03-22 23:55:05 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100322235505-2iyoaor3gcd8n1c8
Tags: 1.0.4-1
New upstream Release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?php
 
2
// +-----------------------------------------------------------------------+ 
 
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
// 
 
35
// $Id: Common.php 286825 2009-08-05 06:23:42Z cweiske $
 
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
 
52
    * @param  string $data The data to protect
 
53
    * @return string       The HMAC MD5 digest
 
54
    */
 
55
    function _HMAC_MD5($key, $data)
 
56
    {
 
57
        if (strlen($key) > 64) {
 
58
            $key = pack('H32', md5($key));
 
59
        }
 
60
 
 
61
        if (strlen($key) < 64) {
 
62
            $key = str_pad($key, 64, chr(0));
 
63
        }
 
64
 
 
65
        $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
 
66
        $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
 
67
 
 
68
        $inner  = pack('H32', md5($k_ipad . $data));
 
69
        $digest = md5($k_opad . $inner);
 
70
 
 
71
        return $digest;
 
72
    }
 
73
}
 
74
?>