From 69325956ce3a192b8ec8722ad0fae4e6f80e968c Mon Sep 17 00:00:00 2001 From: terrafrost Date: Wed, 26 Jul 2023 21:23:08 -0500 Subject: [PATCH 1/3] Tests: add test for garbage collected primefield --- tests/Unit/Math/PrimeFieldTest.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/Unit/Math/PrimeFieldTest.php b/tests/Unit/Math/PrimeFieldTest.php index 24ecfabd..5d003b01 100644 --- a/tests/Unit/Math/PrimeFieldTest.php +++ b/tests/Unit/Math/PrimeFieldTest.php @@ -20,4 +20,21 @@ class PrimeFieldTest extends PhpseclibTestCase echo $num2->squareRoot(); } + + /** + * @group github1929 + */ + public function testGarbageCollectedToBytes() + { + $blob = base64_decode('BFgsTFQeqKr0toyURbtT43INMDS7FTHjz3yn3MR1/Yv/pb2b9ZCYNQ/Tafe5hQpEJ4TpZOKfikP/hWZvFL8QCPgqbIGqw/KTfA=='); + $public = "\0" . substr($blob, 0, 49); + $private = substr($blob, -24); + + $point = \phpseclib3\Crypt\EC\Formats\Keys\PKCS1::extractPoint( + $public, + new \phpseclib3\Crypt\EC\Curves\secp192r1() + ); + + $point[0]->toBytes(); + } } From 25a06f00714b6a1a4dd9307beae2c3408171b84d Mon Sep 17 00:00:00 2001 From: terrafrost Date: Wed, 26 Jul 2023 21:34:39 -0500 Subject: [PATCH 2/3] Math/PrimeField: fix for when garbage collection has wiped data --- phpseclib/Math/PrimeField/Integer.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/phpseclib/Math/PrimeField/Integer.php b/phpseclib/Math/PrimeField/Integer.php index 748f9a49..ddb04912 100644 --- a/phpseclib/Math/PrimeField/Integer.php +++ b/phpseclib/Math/PrimeField/Integer.php @@ -312,8 +312,11 @@ class Integer extends Base */ public function toBytes() { - $length = static::$modulo[$this->instanceID]->getLengthInBytes(); - return str_pad($this->value->toBytes(), $length, "\0", STR_PAD_LEFT); + if (isset(static::$modulo[$this->instanceID])) { + $length = static::$modulo[$this->instanceID]->getLengthInBytes(); + return str_pad($this->value->toBytes(), $length, "\0", STR_PAD_LEFT); + } + return $this->value->toBytes(); } /** From 426de8d5bf95f5053bac76f21aefd1425724adf6 Mon Sep 17 00:00:00 2001 From: terrafrost Date: Wed, 26 Jul 2023 21:54:02 -0500 Subject: [PATCH 3/3] Tests: tweak unit test --- tests/Unit/Math/PrimeFieldTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Unit/Math/PrimeFieldTest.php b/tests/Unit/Math/PrimeFieldTest.php index 5d003b01..3f6f10f1 100644 --- a/tests/Unit/Math/PrimeFieldTest.php +++ b/tests/Unit/Math/PrimeFieldTest.php @@ -35,6 +35,6 @@ class PrimeFieldTest extends PhpseclibTestCase new \phpseclib3\Crypt\EC\Curves\secp192r1() ); - $point[0]->toBytes(); + $this->assertIsString($point[0]->toBytes()); } }