diff --git a/src/Hashing/BaseHashing.php b/src/Hashing/BaseHashing.php index 7a6af1e..9156ab5 100644 --- a/src/Hashing/BaseHashing.php +++ b/src/Hashing/BaseHashing.php @@ -42,19 +42,18 @@ abstract class BaseHashing implements Hashing { public function hash($string) { $seed1 = 0x7FED7FED; - $seed2 = ((0xEEEE << 16) | 0xEEEE); + $seed2 = 0xEEEEEEEE; $strLen = strlen($string); for ($i = 0;$i < $strLen;$i++) { $next = ord(strtoupper(substr($string, $i, 1))); - $seed1 = CryptoUtils::$cryptTable[($this->hashType << 8) + $next] ^ (CryptoUtils::uPlus($seed1,$seed2)); - $seed2 = CryptoUtils::uPlus(CryptoUtils::uPlus(CryptoUtils::uPlus(CryptoUtils::uPlus($next,$seed1),$seed2),$seed2 << 5),3); + $seed1 = CryptoUtils::$cryptTable[($this->hashType << 8) + $next] ^ (CryptoUtils::uPlus($seed1,$seed2)) & 0xFFFFFFFF; + $seed2 = CryptoUtils::uPlus(CryptoUtils::uPlus(CryptoUtils::uPlus(CryptoUtils::uPlus($next,$seed1),$seed2),$seed2 << 5),3) & 0xFFFFFFFF; } return $seed1; } - // function that adds up two integers without allowing them to overflow to floats private function uPlus($o1, $o2) { $o1h = ($o1 >> 16) & 0xFFFF; diff --git a/src/MPQFile.php b/src/MPQFile.php index 848ec3c..77b076a 100644 --- a/src/MPQFile.php +++ b/src/MPQFile.php @@ -130,12 +130,12 @@ class MPQFile { $parser->seek($this->getUserDataOffset() + $this->getHeader()->getBlockTablePos()); $blocks = array(); - $offsetFix = 0; +// $offsetFix = 0; for($i = 0; $i<$this->getHeader()->getBlockTableSize(); $i++) { - $block = $blocks[$i - $offsetFix] = Block::parse($parser); - if($block->getSize() == 0) { - $offsetFix++; - } + $block = $blocks[$i] = Block::parse($parser); +// if($block->getSize() == 0) { +// $offsetFix++; +// } } return new BlockTable($blocks); } @@ -184,6 +184,7 @@ class MPQFile { if($hash == NULL) { return NULL; } + return $this->getBlockTable()->getBlock($hash->getBlockIndex()); } @@ -202,22 +203,11 @@ class MPQFile { $blockSize = $block->getCompressedSize(); $fileSize = $block->getSize(); - print_r($this->getBlockTable()->getBlocks()); - -// print_r($block); -// echo $block->isExisting() ? "true" : "false"; -// echo "\n"; -// -// echo $fileSize."\n"; -// echo $this->getHeader()->getBlockSize()."\n"; - for ($i = $fileSize; $i > 0; $i -= $blockSize) { - echo $i; $sectors[] = $parser->readUInt32(); $blockSize -= 4; } - print_r($sectors); -// $sectors[] = $parser->readUInt32(); + $sectors[] = $parser->readUInt32(); } else { $sectors = array( 0,