Skip to content

Commit 8fe9bb9

Browse files
authored
Fixes incorrect RSA Keys PEM encoding (#420)
1 parent e98580b commit 8fe9bb9

File tree

8 files changed

+149
-61
lines changed

8 files changed

+149
-61
lines changed

src/Component/Core/Util/RSAKey.php

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@
44

55
namespace Jose\Component\Core\Util;
66

7+
use SpomkyLabs\Pki\ASN1\Type\Constructed\Sequence;
8+
use SpomkyLabs\Pki\ASN1\Type\Primitive\BitString;
9+
use SpomkyLabs\Pki\ASN1\Type\Primitive\Integer;
10+
use SpomkyLabs\Pki\ASN1\Type\Primitive\NullType;
11+
use SpomkyLabs\Pki\ASN1\Type\Primitive\ObjectIdentifier;
12+
use SpomkyLabs\Pki\ASN1\Type\Primitive\OctetString;
13+
use SpomkyLabs\Pki\CryptoEncoding\PEM;
14+
use SpomkyLabs\Pki\CryptoTypes\AlgorithmIdentifier\Asymmetric\RSAEncryptionAlgorithmIdentifier;
715
use function array_key_exists;
816
use function count;
917
use InvalidArgumentException;
@@ -19,7 +27,7 @@
1927
*/
2028
final class RSAKey
2129
{
22-
private null|RSAPrivateKey|RSAPublicKey $sequence = null;
30+
private null|Sequence $sequence = null;
2331

2432
private readonly array $values;
2533

@@ -131,27 +139,37 @@ public function toArray(): array
131139
public function toPEM(): string
132140
{
133141
if (array_key_exists('d', $this->values)) {
134-
$this->sequence = RSAPrivateKey::create(
135-
$this->fromBase64ToInteger($this->values['n']),
136-
$this->fromBase64ToInteger($this->values['e']),
137-
$this->fromBase64ToInteger($this->values['d']),
138-
isset($this->values['p']) ? $this->fromBase64ToInteger($this->values['p']) : '0',
139-
isset($this->values['q']) ? $this->fromBase64ToInteger($this->values['q']) : '0',
140-
isset($this->values['dp']) ? $this->fromBase64ToInteger($this->values['dp']) : '0',
141-
isset($this->values['dq']) ? $this->fromBase64ToInteger($this->values['dq']) : '0',
142-
isset($this->values['qi']) ? $this->fromBase64ToInteger($this->values['qi']) : '0',
142+
$this->sequence = Sequence::create(
143+
Integer::create(0),
144+
RSAEncryptionAlgorithmIdentifier::create()->toASN1(),
145+
OctetString::create(
146+
RSAPrivateKey::create(
147+
$this->fromBase64ToInteger($this->values['n']),
148+
$this->fromBase64ToInteger($this->values['e']),
149+
$this->fromBase64ToInteger($this->values['d']),
150+
isset($this->values['p']) ? $this->fromBase64ToInteger($this->values['p']) : '0',
151+
isset($this->values['q']) ? $this->fromBase64ToInteger($this->values['q']) : '0',
152+
isset($this->values['dp']) ? $this->fromBase64ToInteger($this->values['dp']) : '0',
153+
isset($this->values['dq']) ? $this->fromBase64ToInteger($this->values['dq']) : '0',
154+
isset($this->values['qi']) ? $this->fromBase64ToInteger($this->values['qi']) : '0',
155+
)->toDER()
156+
)
143157
);
144-
} else {
145-
$this->sequence = RSAPublicKey::create(
146-
$this->fromBase64ToInteger($this->values['n']),
147-
$this->fromBase64ToInteger($this->values['e'])
148-
);
149-
}
150-
if ($this->sequence === null) {
151-
throw new RuntimeException();
152-
}
153158

154-
return $this->sequence->toPEM()
159+
return PEM::create(PEM::TYPE_RSA_PRIVATE_KEY, $this->sequence->toDER())
160+
->string();
161+
}
162+
$this->sequence = Sequence::create(
163+
RSAEncryptionAlgorithmIdentifier::create()->toASN1(),
164+
BitString::create(
165+
RSAPublicKey::create(
166+
$this->fromBase64ToInteger($this->values['n']),
167+
$this->fromBase64ToInteger($this->values['e'])
168+
)->toDER()
169+
)
170+
);
171+
172+
return PEM::create(PEM::TYPE_RSA_PUBLIC_KEY, $this->sequence->toDER())
155173
->string();
156174
}
157175

tests/Component/KeyManagement/CertificateTest.php

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use InvalidArgumentException;
88
use Jose\Component\Core\JWK;
9+
use Jose\Component\Core\Util\RSAKey;
910
use Jose\Component\KeyManagement\JWKFactory;
1011
use Jose\Component\KeyManagement\KeyConverter\KeyConverter;
1112
use PHPUnit\Framework\TestCase;
@@ -41,9 +42,12 @@ public function fileNotValid(): void
4142
/**
4243
* @test
4344
*/
44-
public function certificateConversion(): void
45+
public function rsaEncryptedPrivateKeyConversion(): void
4546
{
47+
// When
4648
$details = KeyConverter::loadFromKeyFile(__DIR__ . '/Keys/RSA/private.encrypted.key', 'tests');
49+
50+
// Then
4751
static::assertEqualsCanonicalizing($details, [
4852
'kty' => 'RSA',
4953
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
@@ -55,13 +59,27 @@ public function certificateConversion(): void
5559
'dq' => 'Swz1-m_vmTFN_pu1bK7vF7S5nNVrL4A0OFiEsGliCmuJWzOKdL14DiYxctvnw3H6qT2dKZZfV2tbse5N9-JecdldUjfuqAoLIe7dD7dKi42YOlTC9QXmqvTh1ohnJu8pmRFXEZQGUm_BVhoIb2_WPkjav6YSkguCUHt4HRd2YwE',
5660
'qi' => 'BocuCOEOq-oyLDALwzMXU8gOf3IL1Q1_BWwsdoANoh6i179psxgE4JXToWcpXZQQqub8ngwE6uR9fpd3m6N_PL4T55vbDDyjPKmrL2ttC2gOtx9KrpPh-Z7LQRo4BE48nHJJrystKHfFlaH2G7JxHNgMBYVADyttN09qEoav8Os',
5761
]);
62+
}
5863

59-
$details = KeyConverter::loadFromKeyFile(__DIR__ . '/Keys/RSA/public.key');
60-
static::assertSame($details, [
64+
/**
65+
* @test
66+
*/
67+
public function rsaPublicKeyConversion(): void
68+
{
69+
// When
70+
$filename = __DIR__ . '/Keys/RSA/public.key';
71+
$content = trim(file_get_contents($filename));
72+
$details = KeyConverter::loadFromKeyFile($filename);
73+
$values = [
6174
'kty' => 'RSA',
6275
'n' => 'tpS1ZmfVKVP5KofIhMBP0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0S-I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0_5rQCpcEt_Dn5iM-BNn7fqpoLIbks8rXKUIj8-qMVqkTXsEKeKinE23t1ykMldsNaaOH-hvGti5Jt2DMnH1JjoXdDXfxvSP_0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY_Cp7J4Mn1ejZ6HNmyvoTE_4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJsw',
6376
'e' => 'AQAB',
64-
]);
77+
];
78+
79+
// Then
80+
static::assertSame($details, $values);
81+
$rsaKey = RSAKey::createFromJWK(new JWK($values));
82+
static::assertSame($content, $rsaKey->toPEM());
6583
}
6684

6785
/**

tests/Component/KeyManagement/JWKFactoryTest.php

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Jose\Tests\Component\KeyManagement;
66

7+
use Jose\Component\Core\Util\ECKey;
78
use Jose\Component\KeyManagement\JWKFactory;
89
use const JSON_THROW_ON_ERROR;
910
use ParagonIE\ConstantTime\Base64UrlSafe;
@@ -219,42 +220,39 @@ public function createFromPrivateEC512KeyFileEncrypted(): void
219220
}
220221

221222
/**
223+
* @dataProvider publicKeysAndPem
222224
* @test
223225
*/
224-
public function createFromPublicEC256KeyFile(): void
226+
public function createFromPublicEC512KeyFile(string $filename, string $expectedJWK): void
225227
{
226-
$result = JWKFactory::createFromKeyFile(__DIR__ . '/Keys/EC/public.es256.key');
228+
// Given
229+
$content = file_get_contents($filename);
227230

228-
static::assertSame(
229-
'{"kty":"EC","crv":"P-256","x":"vuYsP-QnrqAbM7Iyhzjt08hFSuzapyojCB_gFsBt65U","y":"oq-E2K-X0kPeqGuKnhlXkxc5fnxomRSC6KLby7Ij8AE"}',
230-
json_encode($result, JSON_THROW_ON_ERROR)
231-
);
232-
}
233-
234-
/**
235-
* @test
236-
*/
237-
public function createFromPublicEC384KeyFile(): void
238-
{
239-
$result = JWKFactory::createFromKeyFile(__DIR__ . '/Keys/EC/public.es384.key');
231+
// When
232+
$jwk = JWKFactory::createFromKeyFile($filename);
240233

234+
// Then
241235
static::assertSame(
242-
'{"kty":"EC","crv":"P-384","x":"6f-XZsg2Tvn0EoEapQ-ylMYNtsm8CPf0cb8HI2EkfY9Bqpt3QMzwlM7mVsFRmaMZ","y":"b8nOnRwmpmEnvA2U8ydS-dbnPv7bwYl-q1qNeh8Wpjor3VO-RTt4ce0Pn25oGGWU"}',
243-
json_encode($result, JSON_THROW_ON_ERROR)
236+
$expectedJWK,
237+
json_encode($jwk, JSON_THROW_ON_ERROR)
244238
);
239+
static::assertSame($content, ECKey::convertPublicKeyToPEM($jwk));
245240
}
246241

247-
/**
248-
* @test
249-
*/
250-
public function createFromPublicEC512KeyFile(): void
242+
public function publicKeysAndPem(): iterable
251243
{
252-
$result = JWKFactory::createFromKeyFile(__DIR__ . '/Keys/EC/public.es512.key');
253-
254-
static::assertSame(
244+
yield [
245+
__DIR__ . '/Keys/EC/public.es256.key',
246+
'{"kty":"EC","crv":"P-256","x":"vuYsP-QnrqAbM7Iyhzjt08hFSuzapyojCB_gFsBt65U","y":"oq-E2K-X0kPeqGuKnhlXkxc5fnxomRSC6KLby7Ij8AE"}',
247+
];
248+
yield [
249+
__DIR__ . '/Keys/EC/public.es384.key',
250+
'{"kty":"EC","crv":"P-384","x":"6f-XZsg2Tvn0EoEapQ-ylMYNtsm8CPf0cb8HI2EkfY9Bqpt3QMzwlM7mVsFRmaMZ","y":"b8nOnRwmpmEnvA2U8ydS-dbnPv7bwYl-q1qNeh8Wpjor3VO-RTt4ce0Pn25oGGWU"}',
251+
];
252+
yield [
253+
__DIR__ . '/Keys/EC/public.es512.key',
255254
'{"kty":"EC","crv":"P-521","x":"AVpvo7TGpQk5P7ZLo0qkBpaT-fFDv6HQrWElBKMxcrJd_mRNapweATsVv83YON4lTIIRXzgGkmWeqbDr6RQO-1cS","y":"AIs-MoRmLaiPyG2xmPwQCHX2CGX_uCZiT3iOxTAJEZuUbeSA828K4WfAA4ODdGiB87YVShhPOkiQswV3LpbpPGhC"}',
256-
json_encode($result, JSON_THROW_ON_ERROR)
257-
);
255+
];
258256
}
259257

260258
/**

tests/Component/KeyManagement/JWKTest.php

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use InvalidArgumentException;
88
use Jose\Component\Core\JWK;
99
use Jose\Component\Core\JWKSet;
10+
use Jose\Component\Core\Util\RSAKey;
1011
use Jose\Component\KeyManagement\JWKFactory;
1112
use const JSON_THROW_ON_ERROR;
1213
use ParagonIE\ConstantTime\Base64UrlSafe;
@@ -239,4 +240,39 @@ public function loadCertificateChain(): void
239240
$key->all()
240241
);
241242
}
243+
244+
/**
245+
* @test
246+
*/
247+
public function theRSAKeyIsCorrectlyConvertedIntoPEM(): void
248+
{
249+
// Given
250+
$key = new JWK([
251+
'kty' => 'RSA',
252+
'n' => 'z62tHQzm4fDHipqlcrNhC1gUdn0N38pmlcQbVlLvtZf1aRm1OO43cB9YQyWr1MsTrYH4nyWZDMPIGY_BsIfYw1lp9fo2D1tpG2vtCaKRETVimu-N9DySQ9vYs6n8lG0vXy_spK7sGrOLFooijDSt0LYrYrZY9UI3OkyEAKUbZLJhxi7nT3CPtMCYDUMIIt1LgWdR6-ha5fQQrWF7YbyiMNmITg64DZ9yof4-OfouNE2dFXGl3Nr92HaugXbMZF_pILpcB61NT215aql1ifVXvEyGAsyPBnxIcjadfcgQ0UUtepN2BJRj_pq55jfQR2Nl0e11JeKEIPR3ypqvKeDI10Cl-qr9GpU0rFfw2vcp8IHTNrAeam4nTRDVCmXGwiMaLifAKbvfGwxaA2mHbO5i4669KiPf_lXAQz9FzAZZRwpdM1FTB9BlB5R-JgvtBabP5ZGhqlUOgkJM_4UfrpcIkS8Ub4Y60QvPkInCGBMHNdUqpJUkLoA5Mddl8hVW-cMjC2qCckgT1KgZxIsZTgOJXCARX1IObFJNoinxYJ5SNX9bCSRtgefuBKE7BSNukAkHyBPf---kEi9GbYXzlJr-yCMAIsA0UoiEx264hkAF9zF-N1yRhS_QmrhzU5hpj1IE8WRCqyIZV8f_IbSGXBue7MmgknLVRWHuGqehkTSfiNE',
253+
'e' => 'AQAB',
254+
]);
255+
256+
// When
257+
$pem = RSAKey::createFromJWK($key)->toPEM();
258+
259+
// Then
260+
static::assertSame(
261+
'-----BEGIN RSA PUBLIC KEY-----
262+
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAz62tHQzm4fDHipqlcrNh
263+
C1gUdn0N38pmlcQbVlLvtZf1aRm1OO43cB9YQyWr1MsTrYH4nyWZDMPIGY/BsIfY
264+
w1lp9fo2D1tpG2vtCaKRETVimu+N9DySQ9vYs6n8lG0vXy/spK7sGrOLFooijDSt
265+
0LYrYrZY9UI3OkyEAKUbZLJhxi7nT3CPtMCYDUMIIt1LgWdR6+ha5fQQrWF7Ybyi
266+
MNmITg64DZ9yof4+OfouNE2dFXGl3Nr92HaugXbMZF/pILpcB61NT215aql1ifVX
267+
vEyGAsyPBnxIcjadfcgQ0UUtepN2BJRj/pq55jfQR2Nl0e11JeKEIPR3ypqvKeDI
268+
10Cl+qr9GpU0rFfw2vcp8IHTNrAeam4nTRDVCmXGwiMaLifAKbvfGwxaA2mHbO5i
269+
4669KiPf/lXAQz9FzAZZRwpdM1FTB9BlB5R+JgvtBabP5ZGhqlUOgkJM/4UfrpcI
270+
kS8Ub4Y60QvPkInCGBMHNdUqpJUkLoA5Mddl8hVW+cMjC2qCckgT1KgZxIsZTgOJ
271+
XCARX1IObFJNoinxYJ5SNX9bCSRtgefuBKE7BSNukAkHyBPf+++kEi9GbYXzlJr+
272+
yCMAIsA0UoiEx264hkAF9zF+N1yRhS/QmrhzU5hpj1IE8WRCqyIZV8f/IbSGXBue
273+
7MmgknLVRWHuGqehkTSfiNECAwEAAQ==
274+
-----END RSA PUBLIC KEY-----',
275+
$pem
276+
);
277+
}
242278
}

tests/Component/KeyManagement/Keys/ECKeysTest.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Jose\Tests\Component\KeyManagement\Keys;
66

7+
use Jose\Component\Core\Util\ECKey;
78
use const DIRECTORY_SEPARATOR;
89
use InvalidArgumentException;
910
use Jose\Component\Core\JWK;
@@ -71,17 +72,25 @@ public function loadPublicEC256Key(): void
7172
*/
7273
public function loadPrivateEC256Key(): void
7374
{
75+
// Given
7476
$private_pem = file_get_contents(
7577
'file://' . __DIR__ . DIRECTORY_SEPARATOR . 'EC' . DIRECTORY_SEPARATOR . 'private.es256.key'
7678
);
77-
$details = KeyConverter::loadFromKey($private_pem);
78-
static::assertSame($details, [
79+
$expectedValues = [
7980
'kty' => 'EC',
8081
'crv' => 'P-256',
8182
'd' => 'q_VkzNnxTG39jHB0qkwA_SeVXud7yCHT7kb7kZv-0xQ',
8283
'x' => 'vuYsP-QnrqAbM7Iyhzjt08hFSuzapyojCB_gFsBt65U',
8384
'y' => 'oq-E2K-X0kPeqGuKnhlXkxc5fnxomRSC6KLby7Ij8AE',
84-
]);
85+
];
86+
87+
// Whent
88+
$details = KeyConverter::loadFromKey($private_pem, 'test');
89+
90+
//Then
91+
static::assertSame($details, $expectedValues);
92+
$ecKey = ECKey::convertPrivateKeyToPEM(new JWK($expectedValues));
93+
static::assertSame($private_pem, $ecKey);
8594
}
8695

8796
/**

tests/Component/KeyManagement/Keys/RSA/private.key

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
-----BEGIN PRIVATE KEY-----
1+
-----BEGIN RSA PRIVATE KEY-----
22
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAN91kQxBuaze3WjI
33
CNjeR/HD8E3kDzp89+Lhtn3tMish4yQxhNl6BEkabuS3pUj3WDP6+AFjBVqA1j3f
44
u8Wqu7hRJDPHOs2kCII+LhIqvqQTLx/nvNOUhW2DimKn0HuHnlwJODq0MHFJEq5R
@@ -13,4 +13,4 @@ RVdVjA/gFqJp1Q+VWdS1tvYRIqmadkECQCVdqQuwgedEHmcewtNod42crjmwvWBx
1313
BKMTl6/WT4zwVb41eUujVWo0LHRLuCoK//GDqmloIh6L3MU8MqnIGb0CQFWcpD4/
1414
roCkMblk0hPoQPpyapJexc438x7XuEGFEhyxxauqC5R4YFKCf+KBS2gZgr4GSwBU
1515
Qww+qZ3eRYM7faM=
16-
-----END PRIVATE KEY-----
16+
-----END RSA PRIVATE KEY-----
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
-----BEGIN PUBLIC KEY-----
1+
-----BEGIN RSA PUBLIC KEY-----
22
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtpS1ZmfVKVP5KofIhMBP
33
0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0
44
S+I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0/5rQCpcEt/Dn
55
5iM+BNn7fqpoLIbks8rXKUIj8+qMVqkTXsEKeKinE23t1ykMldsNaaOH+hvGti5J
66
t2DMnH1JjoXdDXfxvSP/0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY/
77
Cp7J4Mn1ejZ6HNmyvoTE/4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJ
88
swIDAQAB
9-
-----END PUBLIC KEY-----
9+
-----END RSA PUBLIC KEY-----

tests/Component/KeyManagement/Keys/RSAKeysTest.php

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
namespace Jose\Tests\Component\KeyManagement\Keys;
66

7+
use SpomkyLabs\Pki\ASN1\Type\Constructed\Sequence;
8+
use SpomkyLabs\Pki\ASN1\Type\Primitive\RelativeOID;
9+
use SpomkyLabs\Pki\CryptoEncoding\PEM;
710
use const DIRECTORY_SEPARATOR;
811
use InvalidArgumentException;
912
use Jose\Component\Core\JWK;
@@ -134,9 +137,14 @@ public function loadPublicRSAKeyFromValues(): void
134137
*/
135138
public function loadPrivateRSAKey(): void
136139
{
137-
$file = 'file://' . __DIR__ . DIRECTORY_SEPARATOR . 'RSA' . DIRECTORY_SEPARATOR . 'private.key';
138-
$rsa_key = RSAKey::createFromPEM($file);
140+
// Given
141+
$file = __DIR__ . '/RSA/private.key';
142+
$content = trim(file_get_contents($file));
143+
144+
// When
145+
$rsaKey = RSAKey::createFromPEM('file://'.$file);
139146

147+
// Then
140148
static::assertEqualsCanonicalizing([
141149
'kty' => 'RSA',
142150
'n' => '33WRDEG5rN7daMgI2N5H8cPwTeQPOnz34uG2fe0yKyHjJDGE2XoESRpu5LelSPdYM_r4AWMFWoDWPd-7xaq7uFEkM8c6zaQIgj4uEiq-pBMvH-e805SFbYOKYqfQe4eeXAk4OrQwcUkSrlGskf6YUaw_3IwbPgzEDTgTZFVtQlE',
@@ -147,16 +155,17 @@ public function loadPrivateRSAKey(): void
147155
'dp' => '5m79fpE1Jz0YE1ijT7ivOMAws-fnTCnR08eiB8-W36GBWplbHaXejrJFV1WMD-AWomnVD5VZ1LW29hEiqZp2QQ',
148156
'dq' => 'JV2pC7CB50QeZx7C02h3jZyuObC9YHEEoxOXr9ZPjPBVvjV5S6NVajQsdEu4Kgr_8YOqaWgiHovcxTwyqcgZvQ',
149157
'qi' => 'VZykPj-ugKQxuWTSE-hA-nJqkl7FzjfzHte4QYUSHLHFq6oLlHhgUoJ_4oFLaBmCvgZLAFRDDD6pnd5Fgzt9ow',
150-
], $rsa_key->toArray());
151-
static::assertFalse($rsa_key->isPublic());
158+
], $rsaKey->toArray());
159+
static::assertFalse($rsaKey->isPublic());
152160

153-
$public_key = RSAKey::toPublic($rsa_key);
161+
$public_key = RSAKey::toPublic($rsaKey);
154162
static::assertSame([
155163
'kty' => 'RSA',
156164
'n' => '33WRDEG5rN7daMgI2N5H8cPwTeQPOnz34uG2fe0yKyHjJDGE2XoESRpu5LelSPdYM_r4AWMFWoDWPd-7xaq7uFEkM8c6zaQIgj4uEiq-pBMvH-e805SFbYOKYqfQe4eeXAk4OrQwcUkSrlGskf6YUaw_3IwbPgzEDTgTZFVtQlE',
157165
'e' => 'AQAB',
158166
], $public_key->toArray());
159167
static::assertTrue($public_key->isPublic());
168+
static::assertSame($content, \Jose\Component\Core\Util\RSAKey::createFromJWK($rsaKey->toJwk())->toPEM());
160169
}
161170

162171
/**

0 commit comments

Comments
 (0)