forked from GNUsocial/gnu-social
		
	Use hash if available
This commit is contained in:
		| @@ -192,9 +192,6 @@ class MsnPlugin extends ImPlugin { | ||||
|         if (!isset($this->nickname)) { | ||||
|             throw new Exception("Must specify a nickname"); | ||||
|         } | ||||
|         if (!function_exists('mhash')) { | ||||
|             require_once(INSTALLDIR.'/plugins/Msn/extlib/compat/mhash.php'); | ||||
|         } | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|   | ||||
| @@ -1,115 +0,0 @@ | ||||
| <?php | ||||
| // +----------------------------------------------------------------------+ | ||||
| // | PHP Version 4                                                        | | ||||
| // +----------------------------------------------------------------------+ | ||||
| // | Copyright (c) 1997-2004 The PHP Group                                | | ||||
| // +----------------------------------------------------------------------+ | ||||
| // | This source file is subject to version 3.0 of the PHP license,       | | ||||
| // | that is bundled with this package in the file LICENSE, and is        | | ||||
| // | available at through the world-wide-web at                           | | ||||
| // | http://www.php.net/license/3_0.txt.                                  | | ||||
| // | If you did not receive a copy of the PHP license and are unable to   | | ||||
| // | obtain it through the world-wide-web, please send a note to          | | ||||
| // | license@php.net so we can mail you a copy immediately.               | | ||||
| // +----------------------------------------------------------------------+ | ||||
| // | Authors: Aidan Lister <aidan@php.net>                                | | ||||
| // +----------------------------------------------------------------------+ | ||||
| // | ||||
| // $Id: mhash.php,v 1.1 2005/05/10 07:56:44 aidan Exp $ | ||||
|  | ||||
|  | ||||
| if (!defined('MHASH_CRC32')) { | ||||
|     define('MHASH_CRC32', 0); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_MD5')) { | ||||
|     define('MHASH_MD5', 1); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_SHA1')) { | ||||
|     define('MHASH_SHA1', 2); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_HAVAL256')) { | ||||
|     define('MHASH_HAVAL256', 3); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_RIPEMD160')) { | ||||
|     define('MHASH_RIPEMD160', 5); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_TIGER')) { | ||||
|     define('MHASH_TIGER', 7); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_GOST')) { | ||||
|     define('MHASH_GOST', 8); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_CRC32B')) { | ||||
|     define('MHASH_CRC32B', 9); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_HAVAL192')) { | ||||
|     define('MHASH_HAVAL192', 11); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_HAVAL160')) { | ||||
|     define('MHASH_HAVAL160', 12); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_HAVAL128')) { | ||||
|     define('MHASH_HAVAL128', 13); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_TIGER128')) { | ||||
|     define('MHASH_TIGER128', 14); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_TIGER160')) { | ||||
|     define('MHASH_TIGER160', 15); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_MD4')) { | ||||
|     define('MHASH_MD4', 16); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_SHA256')) { | ||||
|     define('MHASH_SHA256', 17); | ||||
| } | ||||
|  | ||||
| if (!defined('MHASH_ADLER32')) { | ||||
|     define('MHASH_ADLER32', 18); | ||||
| } | ||||
|  | ||||
|  | ||||
| /** | ||||
|  * Replace mhash() | ||||
|  * | ||||
|  * @category    PHP | ||||
|  * @package     PHP_Compat | ||||
|  * @link        http://php.net/function.mhash | ||||
|  * @author      Aidan Lister <aidan@php.net> | ||||
|  * @version     $Revision: 1.1 $ | ||||
|  * @since       PHP 4.1.0 | ||||
|  * @require     PHP 4.0.0 (user_error) | ||||
|  */ | ||||
| if (!function_exists('mhash')) { | ||||
|     function mhash($hashtype, $data, $key = '')     | ||||
|     { | ||||
|         switch ($hashtype) { | ||||
|             case MHASH_MD5: | ||||
|                 $key = str_pad((strlen($key) > 64 ? pack("H*", md5($key)) : $key), 64, chr(0x00)); | ||||
|                 $k_opad = $key ^ (str_pad('', 64, chr(0x5c))); | ||||
|                 $k_ipad = $key ^ (str_pad('', 64, chr(0x36))); | ||||
|                 return pack("H*", md5($k_opad . pack("H*", md5($k_ipad .  $data)))); | ||||
|  | ||||
|             default: | ||||
|                 return false; | ||||
|  | ||||
|             break; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| ?> | ||||
| @@ -12,7 +12,7 @@ Documentation on the MSN protocol can be found at: http://msnpiki.msnfanatic.com | ||||
| This class uses MSNP15. | ||||
|  | ||||
| In addition to PHP5, the additional php modules required are: | ||||
| curl pcre mhash mcrypt bcmath | ||||
| curl pcre mcrypt bcmath | ||||
|  | ||||
| */ | ||||
|  | ||||
| @@ -156,7 +156,6 @@ class MSN { | ||||
|         // Check support | ||||
|         if (!function_exists('curl_init')) throw new Exception("curl module not found!\n"); | ||||
|         if (!function_exists('preg_match')) throw new Exception("pcre module not found!\n"); | ||||
|         if (!function_exists('mhash')) throw new Exception("mhash module not found!\n"); | ||||
|         if (!function_exists('mcrypt_cbc')) throw new Exception("mcrypt module not found!\n"); | ||||
|         if (!function_exists('bcmod')) throw new Exception("bcmath module not found!\n"); | ||||
|  | ||||
| @@ -486,7 +485,7 @@ class MSN { | ||||
|         if(!empty($message)) { | ||||
|             $this->debug_message($message); | ||||
|         } | ||||
|         $this->callHandler('ConnectFailed'); | ||||
|         $this->callHandler('ConnectFailed', $message); | ||||
|         $this->NSRetryWait($this->retry_wait); | ||||
|     } | ||||
|  | ||||
| @@ -2651,10 +2650,10 @@ X-OIM-Sequence-Num: 1 | ||||
|      */ | ||||
|  | ||||
|     private function derive_key($key, $magic) { | ||||
|         $hash1 = mhash(MHASH_SHA1, $magic, $key); | ||||
|         $hash2 = mhash(MHASH_SHA1, $hash1.$magic, $key); | ||||
|         $hash3 = mhash(MHASH_SHA1, $hash1, $key); | ||||
|         $hash4 = mhash(MHASH_SHA1, $hash3.$magic, $key); | ||||
|         $hash1 = $this->mhash_sha1($magic, $key); | ||||
|         $hash2 = $this->mhash_sha1($hash1.$magic, $key); | ||||
|         $hash3 = $this->mhash_sha1($hash1, $key); | ||||
|         $hash4 = $this->mhash_sha1($hash3.$magic, $key); | ||||
|         return $hash2.substr($hash4, 0, 4); | ||||
|     } | ||||
|  | ||||
| @@ -2664,7 +2663,7 @@ X-OIM-Sequence-Num: 1 | ||||
|         $key3 = $this->derive_key($key1, 'WS-SecureConversationSESSION KEY ENCRYPTION'); | ||||
|  | ||||
|         // get hash of challenge using key2 | ||||
|         $hash = mhash(MHASH_SHA1, $challenge, $key2); | ||||
|         $hash = $this->mhash_sha1($challenge, $key2); | ||||
|  | ||||
|         // get 8 bytes random data | ||||
|         $iv = substr(base64_encode(rand(1000,9999).rand(1000,9999)), 2, 8); | ||||
| @@ -3180,4 +3179,32 @@ X-OIM-Sequence-Num: 1 | ||||
|         $buf .= "$h_str $a_str\n"; | ||||
|         return $buf; | ||||
|     } | ||||
|  | ||||
|     function mhash_sha1($data, $key) | ||||
|     { | ||||
|         if (extension_loaded("mhash")) | ||||
|             return mhash(MHASH_SHA1, $data, $key); | ||||
|  | ||||
|         if (function_exists("hash_hmac")) | ||||
|             return hash_hmac('sha1', $data, $key, true); | ||||
|  | ||||
|         // RFC 2104 HMAC implementation for php. Hacked by Lance Rushing | ||||
|         $b = 64; | ||||
|         if (strlen($key) > $b) | ||||
|             $key = pack("H*", sha1($key)); | ||||
|         $key = str_pad($key, $b, chr(0x00)); | ||||
|         $ipad = str_pad("", $b, chr(0x36)); | ||||
|         $opad = str_pad("", $b, chr(0x5c)); | ||||
|         $k_ipad = $key ^ $ipad ; | ||||
|         $k_opad = $key ^ $opad; | ||||
|  | ||||
|         $sha1_value = sha1($k_opad . pack("H*", sha1($k_ipad . $data))); | ||||
|  | ||||
|         $hash_data = ''; | ||||
|         $str = join('',explode('\x', $sha1_value)); | ||||
|         $len = strlen($str); | ||||
|         for ($i = 0; $i < $len; $i += 2) | ||||
|             $hash_data .= chr(hexdec(substr($str, $i, 2))); | ||||
|         return $hash_data; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -204,10 +204,11 @@ class MsnManager extends ImManager { | ||||
|     /** | ||||
|     * Called by callback to log failure during connect | ||||
|     * | ||||
|     * @param string $message error message reported | ||||
|     * @return void | ||||
|     */ | ||||
|     public function handle_connect_failed() { | ||||
|         common_log(LOG_NOTICE, 'MSN connect failed, retrying'); | ||||
|     public function handle_connect_failed($message) { | ||||
|         common_log(LOG_NOTICE, 'MSN connect failed, retrying: ' . $message); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|   | ||||
		Reference in New Issue
	
	Block a user