From f926137cb0af6f930c33679755ee3d004d8d43ff Mon Sep 17 00:00:00 2001 From: Alexander Danilov Date: Mon, 3 Nov 2025 16:18:00 +0200 Subject: [PATCH] performance improvement for integer --- src/ASN1/Universal/Integer.php | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/ASN1/Universal/Integer.php b/src/ASN1/Universal/Integer.php index a799846..e62a115 100644 --- a/src/ASN1/Universal/Integer.php +++ b/src/ASN1/Universal/Integer.php @@ -116,17 +116,14 @@ public function __get(string $name) public function setValue(Content $content) { $binaryData = $content->getBinary(); - $offsetIndex = 0; $contentLength = $this->contentLength->getLength(); - $isNegative = (\ord($binaryData[$offsetIndex]) & 0x80) != 0x00; - $number = gmp_init(\ord($binaryData[$offsetIndex++]) & 0x7F, 10); + $isNegative = (\ord($binaryData[0]) & 0x80) != 0x00; - for ($i = 0; $i < $contentLength - 1; $i++) { - $number = gmp_or(gmp_mul($number, 0x100), \ord($binaryData[$offsetIndex++])); - } + $number = gmp_import($binaryData, 1, GMP_MSW_FIRST | GMP_BIG_ENDIAN); if ($isNegative) { - $number = gmp_sub($number, gmp_pow(2, 8 * $contentLength - 1)); + // For negative numbers in two's complement, we need to subtract 2^(bits) + $number = gmp_sub($number, gmp_pow(2, 8 * $contentLength)); } $this->gmpValue = $number;