From 0b3cc980840a79edc979fba7a0e4915fed2210e0 Mon Sep 17 00:00:00 2001 From: terrafrost Date: Sun, 26 Jun 2022 17:07:45 -0500 Subject: [PATCH] BigInteger: fix behavior on 32-bit PHP installs --- phpseclib/Math/BigInteger/Engines/PHP32.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/phpseclib/Math/BigInteger/Engines/PHP32.php b/phpseclib/Math/BigInteger/Engines/PHP32.php index 9042e664..964cd170 100644 --- a/phpseclib/Math/BigInteger/Engines/PHP32.php +++ b/phpseclib/Math/BigInteger/Engines/PHP32.php @@ -75,9 +75,12 @@ class PHP32 extends PHP $i = 0; } list(, $digit) = unpack('N', substr($val, $i, 4)); + if ($digit < 0) { + $digit += 0xFFFFFFFF + 1; + } $step = count($vals) & 3; if ($step) { - $digit >>= 2 * $step; + $digit = floor($digit / pow(2, 2 * $step)); } if ($step != 3) { $digit &= static::MAX_DIGIT;