Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

Common.php 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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$
  36. /**
  37. * Common functionality to SASL mechanisms
  38. *
  39. * @author Richard Heyes <richard@php.net>
  40. * @access public
  41. * @version 1.0
  42. * @package Auth_SASL
  43. */
  44. class Auth_SASL_Common
  45. {
  46. /**
  47. * Function which implements HMAC MD5 digest
  48. *
  49. * @param string $key The secret key
  50. * @param string $data The data to hash
  51. * @param bool $raw_output Whether the digest is returned in binary or hexadecimal format.
  52. *
  53. * @return string The HMAC-MD5 digest
  54. */
  55. function _HMAC_MD5($key, $data, $raw_output = FALSE)
  56. {
  57. if (strlen($key) > 64) {
  58. $key = pack('H32', md5($key));
  59. }
  60. if (strlen($key) < 64) {
  61. $key = str_pad($key, 64, chr(0));
  62. }
  63. $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
  64. $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
  65. $inner = pack('H32', md5($k_ipad . $data));
  66. $digest = md5($k_opad . $inner, $raw_output);
  67. return $digest;
  68. }
  69. /**
  70. * Function which implements HMAC-SHA-1 digest
  71. *
  72. * @param string $key The secret key
  73. * @param string $data The data to hash
  74. * @param bool $raw_output Whether the digest is returned in binary or hexadecimal format.
  75. * @return string The HMAC-SHA-1 digest
  76. * @author Jehan <jehan.marmottard@gmail.com>
  77. * @access protected
  78. */
  79. protected function _HMAC_SHA1($key, $data, $raw_output = FALSE)
  80. {
  81. if (strlen($key) > 64) {
  82. $key = sha1($key, TRUE);
  83. }
  84. if (strlen($key) < 64) {
  85. $key = str_pad($key, 64, chr(0));
  86. }
  87. $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
  88. $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
  89. $inner = pack('H40', sha1($k_ipad . $data));
  90. $digest = sha1($k_opad . $inner, $raw_output);
  91. return $digest;
  92. }
  93. }
  94. ?>