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)) {
|
if (!isset($this->nickname)) {
|
||||||
throw new Exception("Must specify a nickname");
|
throw new Exception("Must specify a nickname");
|
||||||
}
|
}
|
||||||
if (!function_exists('mhash')) {
|
|
||||||
require_once(INSTALLDIR.'/plugins/Msn/extlib/compat/mhash.php');
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
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.
|
This class uses MSNP15.
|
||||||
|
|
||||||
In addition to PHP5, the additional php modules required are:
|
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
|
// Check support
|
||||||
if (!function_exists('curl_init')) throw new Exception("curl module not found!\n");
|
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('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('mcrypt_cbc')) throw new Exception("mcrypt module not found!\n");
|
||||||
if (!function_exists('bcmod')) throw new Exception("bcmath 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)) {
|
if(!empty($message)) {
|
||||||
$this->debug_message($message);
|
$this->debug_message($message);
|
||||||
}
|
}
|
||||||
$this->callHandler('ConnectFailed');
|
$this->callHandler('ConnectFailed', $message);
|
||||||
$this->NSRetryWait($this->retry_wait);
|
$this->NSRetryWait($this->retry_wait);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2651,10 +2650,10 @@ X-OIM-Sequence-Num: 1
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
private function derive_key($key, $magic) {
|
private function derive_key($key, $magic) {
|
||||||
$hash1 = mhash(MHASH_SHA1, $magic, $key);
|
$hash1 = $this->mhash_sha1($magic, $key);
|
||||||
$hash2 = mhash(MHASH_SHA1, $hash1.$magic, $key);
|
$hash2 = $this->mhash_sha1($hash1.$magic, $key);
|
||||||
$hash3 = mhash(MHASH_SHA1, $hash1, $key);
|
$hash3 = $this->mhash_sha1($hash1, $key);
|
||||||
$hash4 = mhash(MHASH_SHA1, $hash3.$magic, $key);
|
$hash4 = $this->mhash_sha1($hash3.$magic, $key);
|
||||||
return $hash2.substr($hash4, 0, 4);
|
return $hash2.substr($hash4, 0, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2664,7 +2663,7 @@ X-OIM-Sequence-Num: 1
|
|||||||
$key3 = $this->derive_key($key1, 'WS-SecureConversationSESSION KEY ENCRYPTION');
|
$key3 = $this->derive_key($key1, 'WS-SecureConversationSESSION KEY ENCRYPTION');
|
||||||
|
|
||||||
// get hash of challenge using key2
|
// get hash of challenge using key2
|
||||||
$hash = mhash(MHASH_SHA1, $challenge, $key2);
|
$hash = $this->mhash_sha1($challenge, $key2);
|
||||||
|
|
||||||
// get 8 bytes random data
|
// get 8 bytes random data
|
||||||
$iv = substr(base64_encode(rand(1000,9999).rand(1000,9999)), 2, 8);
|
$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";
|
$buf .= "$h_str $a_str\n";
|
||||||
return $buf;
|
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
|
* Called by callback to log failure during connect
|
||||||
*
|
*
|
||||||
|
* @param string $message error message reported
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function handle_connect_failed() {
|
public function handle_connect_failed($message) {
|
||||||
common_log(LOG_NOTICE, 'MSN connect failed, retrying');
|
common_log(LOG_NOTICE, 'MSN connect failed, retrying: ' . $message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user