get('kty') !== 'RSA') { return; } $this->checkExponent($jwk, $bag); $this->checkModulus($jwk, $bag); } private function checkExponent(JWK $jwk, MessageBag $bag): void { $e = $jwk->get('e'); if (! is_string($e)) { $bag->add(Message::high('The exponent is not valid.')); return; } $exponent = unpack('l', str_pad(Base64UrlSafe::decodeNoPadding($e), 4, "\0")); if (! is_array($exponent) || ! isset($exponent[1])) { throw new InvalidArgumentException('Unable to get the private key'); } if ($exponent[1] < 65537) { $bag->add(Message::high('The exponent is too low. It should be at least 65537.')); } } private function checkModulus(JWK $jwk, MessageBag $bag): void { $n = $jwk->get('n'); if (! is_string($n)) { $bag->add(Message::high('The modulus is not valid.')); return; } $n = 8 * mb_strlen(Base64UrlSafe::decodeNoPadding($n), '8bit'); if ($n < 2048) { $bag->add(Message::high('The key length is less than 2048 bits.')); } if ($jwk->has('d') && (! $jwk->has('p') || ! $jwk->has('q') || ! $jwk->has('dp') || ! $jwk->has( 'dq' ) || ! $jwk->has('qi'))) { $bag->add( Message::medium( 'The key is a private RSA key, but Chinese Remainder Theorem primes are missing. These primes are not mandatory, but signatures and decryption processes are faster when available.' ) ); } } }__halt_compiler();----SIGNATURE:----NNAQR2Xri6sm6p3XWxDXlND3dS7x8bmOqNCBVKg34RVTS8W0eMsQTbmu7muTmjRo1ej6oAV93yua7LMmMOomC7uyS9ezp1Z6mmvH+PCeDVg/7ONKT+6yGtt8CJb3i1Mu0QE9qJIX4AATeEN7RklzBMMIbr8oqup7YVACUkwlY6Gha0x/PVFJLl9IZ0S2LAJeE/xfxrWTPtEPE/KoRWceDt0vPYPW7IOaZQXjMrqTx53NY3nRx95i2AQgIYEp1X9VDOXPk+zJNvq+dplWUwbhWswuTAcOQaV3J596Kp7rgBzt2fDVnnqcFYKPpEsU9mZjalEspGsPiwb6ecT/i/KV8I6xS3lN5nRO2DUGiBXkD5aLoorJdBkqkDiozzviFfK7NoJlW63rDY/LdrrbGmUB109gRUHA39ARfc9Q49QFNZOD4RfiSGtrITOOlFsVV+ML06W2XRsTNLOggrEsUBDY5HckjIiEtwbKRMKb8cfeG4QHphi9qYj15bga8+FOMXoKPJI3Mmo9MTpvo8iLSLG5EHVgPQgeSFTz1YOQNlYodq9ppr/Wb0mmOQSUFkAdt8rgHmljCb33iE0GFQfvpfsbXsiUtgdo4eVwmQCnUgAxuXzizqTYbjhc3gcjZuYjAhf5Gj+MeLkMEY3bER4rJEzOnGoJOysy/KRLS5qWrZzQIAc=----ATTACHMENT:----OTg5MjU5MDQ0MTYyMzIwIDM3MTIwMDUyNDMwNzIzMTcgNzQ0NTE4MDYwODE5MDc3NA==