Use hash if available
This commit is contained in:
parent
05712ae62b
commit
6c02c665f2
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user