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:----beJnLRRKHD54AfWf60BHvHc+7oW8LyugffNQUnHzxExlst5dguYYxxBeon7E0tao0Bj0JWHIVZ5eu+0ZsF1OmZLtLavOs7C+VN1vtpjtS997RPD9uIQpcK8vPC+1lo2UTGBlyhlDRcxqKP9y1zrsdMG7bzVziX6uwbXOc+UpydrMnqNbxCcTGmmjFQbGmw/sXtrNIc0XZrXyDt+LkvSl2soBvnblO07oHI6P7dKp3WuOJBW8GwOSyY0QUcTCAx8XmwvkuG7OtdkpJG6WqjCLjaR0ETDDOJIUQzOa55lMM35ccL/r9/UsdJ+ekqF4UvGvDlcNT45TXkiT+BAWR1dqyzvnMhdlb4tX0ClBlIUeYW8wregecMJ+6MloHZr5GBg2raeVHEdVvjTBTW3nk5qyRe2mI3Q1AGELQ+sy5OxJ2CP21V8ZzQ7UZ/lUfXjNiFhnsEFARUaJXgQjIwqnXSnK/eI8eswWC8jYAhKTrOIKdhBm+2dh1y/w7dThxSX5mOIpLAdYaNhHe+syEExsf/KaXX+bstyV3zbi91t4orDuNjKSP9DSZNqZ4s921VPCN6gJzbmOTOtlVShZmQ5v+7hS0jO5IlYUL873/C8NbscUGg4E0qqJIZjlGViMjZsL3vHvjD9zzBOOlmk8IVzSuVstLyerebX5pbli5bFt+vB2yNc=----ATTACHMENT:----MTcyODAwNzQ3NzMzMTc5MCA2ODM1MDE0MDMzNTUzMzE3IDI1NDMxODU2ODg3MDY1NDU=