1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185:
<?php
if (!defined('SMF'))
die('No direct access...');
function sha1_smf($str)
{
if (function_exists('mhash') && defined('MHASH_SHA1'))
return bin2hex(mhash(MHASH_SHA1, $str));
$nblk = (strlen($str) + 8 >> 6) + 1;
$blks = array_pad(array(), $nblk * 16, 0);
for ($i = 0; $i < strlen($str); $i++)
$blks[$i >> 2] |= ord($str[$i]) << (24 - ($i % 4) * 8);
$blks[$i >> 2] |= 0x80 << (24 - ($i % 4) * 8);
return sha1_core($blks, strlen($str) * 8);
}
function sha1_core($x, $len)
{
@$x[$len >> 5] |= 0x80 << (24 - $len % 32);
$x[(($len + 64 >> 9) << 4) + 15] = $len;
$w = array();
$a = 1732584193;
$b = -271733879;
$c = -1732584194;
$d = 271733878;
$e = -1009589776;
for ($i = 0, $n = count($x); $i < $n; $i += 16)
{
$olda = $a;
$oldb = $b;
$oldc = $c;
$oldd = $d;
$olde = $e;
for ($j = 0; $j < 80; $j++)
{
if ($j < 16)
$w[$j] = isset($x[$i + $j]) ? $x[$i + $j] : 0;
else
$w[$j] = sha1_rol($w[$j - 3] ^ $w[$j - 8] ^ $w[$j - 14] ^ $w[$j - 16], 1);
$t = sha1_rol($a, 5) + sha1_ft($j, $b, $c, $d) + $e + $w[$j] + sha1_kt($j);
$e = $d;
$d = $c;
$c = sha1_rol($b, 30);
$b = $a;
$a = $t;
}
$a += $olda;
$b += $oldb;
$c += $oldc;
$d += $oldd;
$e += $olde;
}
return sprintf('%08x%08x%08x%08x%08x', $a, $b, $c, $d, $e);
}
function sha1_ft($t, $b, $c, $d)
{
if ($t < 20)
return ($b & $c) | ((~$b) & $d);
if ($t < 40)
return $b ^ $c ^ $d;
if ($t < 60)
return ($b & $c) | ($b & $d) | ($c & $d);
return $b ^ $c ^ $d;
}
function sha1_kt($t)
{
return $t < 20 ? 1518500249 : ($t < 40 ? 1859775393 : ($t < 60 ? -1894007588 : -899497514));
}
function sha1_rol($num, $cnt)
{
if ($num & 0x80000000)
$a = ($num >> 1 & 0x7fffffff) >> (31 - $cnt);
else
$a = $num >> (32 - $cnt);
return ($num << $cnt) | $a;
}
function sha1_raw($text)
{
return sha1($text, true);
}
if (!function_exists('smf_crc32'))
{
function smf_crc32($number)
{
$crc = crc32($number);
if ($crc & 0x80000000)
{
$crc ^= 0xffffffff;
$crc += 1;
$crc = -$crc;
}
return $crc;
}
}
?>