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