From 6298d1cd55c3ffa44533bd41906caec246b60440 Mon Sep 17 00:00:00 2001 From: terrafrost Date: Thu, 2 Mar 2023 03:25:08 -0600 Subject: [PATCH] PrimeField: prevent infinite loop with composite primefields --- phpseclib/Math/PrimeField.php | 6 +++--- phpseclib/Math/PrimeField/Integer.php | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/phpseclib/Math/PrimeField.php b/phpseclib/Math/PrimeField.php index 17ff87a0..1a0667f0 100644 --- a/phpseclib/Math/PrimeField.php +++ b/phpseclib/Math/PrimeField.php @@ -44,9 +44,9 @@ class PrimeField extends FiniteField */ public function __construct(BigInteger $modulo) { - //if (!$modulo->isPrime()) { - // throw new \UnexpectedValueException('PrimeField requires a prime number be passed to the constructor'); - //} + if (!$modulo->isPrime()) { + throw new \UnexpectedValueException('PrimeField requires a prime number be passed to the constructor'); + } $this->instanceID = self::$instanceCounter++; Integer::setModulo($this->instanceID, $modulo); diff --git a/phpseclib/Math/PrimeField/Integer.php b/phpseclib/Math/PrimeField/Integer.php index 2d0c10ca..748f9a49 100644 --- a/phpseclib/Math/PrimeField/Integer.php +++ b/phpseclib/Math/PrimeField/Integer.php @@ -263,13 +263,13 @@ class Integer extends Base $r = $this->value->powMod($temp, static::$modulo[$this->instanceID]); while (!$t->equals($one)) { - $i = clone $one; - - while (!$t->powMod($two->pow($i), static::$modulo[$this->instanceID])->equals($one)) { - $i = $i->add($one); + for ($i == clone $one; $i->compare($m) < 0; $i = $i->add($one)) { + if ($t->powMod($two->pow($i), static::$modulo[$this->instanceID])->equals($one)) { + break; + } } - if ($i->compare($m) >= 0) { + if ($i->compare($m) == 0) { return false; } $b = $c->powMod($two->pow($m->subtract($i)->subtract($one)), static::$modulo[$this->instanceID]);