diff --git a/src/network/mcpe/NetworkSession.php b/src/network/mcpe/NetworkSession.php index 6eee0f7a7..399bbac6f 100644 --- a/src/network/mcpe/NetworkSession.php +++ b/src/network/mcpe/NetworkSession.php @@ -36,6 +36,7 @@ use pocketmine\math\Vector3; use pocketmine\network\BadPacketException; use pocketmine\network\mcpe\compression\CompressBatchPromise; use pocketmine\network\mcpe\compression\Zlib; +use pocketmine\network\mcpe\encryption\DecryptionException; use pocketmine\network\mcpe\encryption\NetworkCipher; use pocketmine\network\mcpe\encryption\PrepareEncryptionTask; use pocketmine\network\mcpe\handler\DeathPacketHandler; @@ -261,7 +262,7 @@ class NetworkSession{ Timings::$playerNetworkReceiveDecryptTimer->startTiming(); try{ $payload = $this->cipher->decrypt($payload); - }catch(\UnexpectedValueException $e){ + }catch(DecryptionException $e){ $this->logger->debug("Encrypted packet: " . base64_encode($payload)); throw BadPacketException::wrap($e, "Packet decryption error"); }finally{ diff --git a/src/network/mcpe/encryption/DecryptionException.php b/src/network/mcpe/encryption/DecryptionException.php new file mode 100644 index 000000000..1a5e7e690 --- /dev/null +++ b/src/network/mcpe/encryption/DecryptionException.php @@ -0,0 +1,28 @@ +decryptCipher->decryptUpdate($encrypted); $payload = substr($decrypted, 0, -8); if(($expected = $this->calculateChecksum($this->decryptCounter++, $payload)) !== ($actual = substr($decrypted, -8))){ - throw new \UnexpectedValueException("Encrypted payload has invalid checksum (expected " . bin2hex($expected) . ", got " . bin2hex($actual) . ")"); + throw new DecryptionException("Encrypted payload has invalid checksum (expected " . bin2hex($expected) . ", got " . bin2hex($actual) . ")"); } return $payload;