From 0a9454deb889c5e74b7cd796b9dff9a8c6a36273 Mon Sep 17 00:00:00 2001 From: Lleyton Gray Date: Mon, 5 Jun 2023 19:02:17 -0700 Subject: [PATCH 1/2] Support P-384 curve --- src/JWK.php | 4 ++-- tests/JWKTest.php | 9 +++++---- tests/data/ec-jwkset.json | 9 +++++++++ 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/JWK.php b/src/JWK.php index c7eff8ae..e6747026 100644 --- a/src/JWK.php +++ b/src/JWK.php @@ -27,7 +27,7 @@ class JWK private const EC_CURVES = [ 'P-256' => '1.2.840.10045.3.1.7', // Len: 64 'secp256k1' => '1.3.132.0.10', // Len: 64 - // 'P-384' => '1.3.132.0.34', // Len: 96 (not yet supported) + 'P-384' => '1.3.132.0.34', // Len: 96 // 'P-521' => '1.3.132.0.35', // Len: 132 (not supported) ]; @@ -156,7 +156,7 @@ public static function parseKey(array $jwk, string $defaultAlg = null): ?Key /** * Converts the EC JWK values to pem format. * - * @param string $crv The EC curve (only P-256 is supported) + * @param string $crv The EC curve (only P-256 & P-384 is supported) * @param string $x The EC x-coordinate * @param string $y The EC y-coordinate * diff --git a/tests/JWKTest.php b/tests/JWKTest.php index 93afea70..9930af9b 100644 --- a/tests/JWKTest.php +++ b/tests/JWKTest.php @@ -129,11 +129,11 @@ public function testDecodeByJwkKeySetTokenExpired() /** * @dataProvider provideDecodeByJwkKeySet */ - public function testDecodeByJwkKeySet($pemFile, $jwkFile, $alg) + public function testDecodeByJwkKeySet($pemFile, $jwkFile, $alg, $keyId) { $privKey1 = file_get_contents(__DIR__ . '/data/' . $pemFile); $payload = ['sub' => 'foo', 'exp' => strtotime('+10 seconds')]; - $msg = JWT::encode($payload, $privKey1, $alg, 'jwk1'); + $msg = JWT::encode($payload, $privKey1, $alg, $keyId); $jwkSet = json_decode( file_get_contents(__DIR__ . '/data/' . $jwkFile), @@ -149,8 +149,9 @@ public function testDecodeByJwkKeySet($pemFile, $jwkFile, $alg) public function provideDecodeByJwkKeySet() { return [ - ['rsa1-private.pem', 'rsa-jwkset.json', 'RS256'], - ['ecdsa256-private.pem', 'ec-jwkset.json', 'ES256'], + ['rsa1-private.pem', 'rsa-jwkset.json', 'RS256', 'jwk1'], + ['ecdsa256-private.pem', 'ec-jwkset.json', 'ES256', 'jwk1'], + ['ecdsa384-private.pem', 'ec-jwkset.json', 'ES384', 'jwk4'] ]; } diff --git a/tests/data/ec-jwkset.json b/tests/data/ec-jwkset.json index 213f68ac..50c5b24e 100644 --- a/tests/data/ec-jwkset.json +++ b/tests/data/ec-jwkset.json @@ -26,6 +26,15 @@ "x": "EFpwNuP322bU3WP1DtJgx67L0CUV1MxNixqPVMH2L9Q", "y": "_fSTbijIJjpsqL16cIEvxxf3MaYMY8MbqEq066yV9ls", "alg": "ES256K" + }, + { + "kty": "EC", + "use": "sig", + "crv": "P-384", + "kid": "jwk4", + "x": "FhXXcyKmWkTkdVbWYYU3dtJqpJ0JmLGftEdNzUEFEKSU5MlnLr_FjcneszvXAqEB", + "y": "M4veJF_dO_zhFk44bh_ELXbp0_nn9QaViVtQpuTvpu29eefx6PfUMqX0K--IS4NQ", + "alg": "ES384" } ] } \ No newline at end of file From a236a7af970e8eec8a4d7ad42053eae85fec51ce Mon Sep 17 00:00:00 2001 From: lleyton Date: Wed, 14 Jun 2023 12:22:06 -0700 Subject: [PATCH 2/2] Update tests/JWKTest.php Co-authored-by: Brent Shaffer --- tests/JWKTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/JWKTest.php b/tests/JWKTest.php index 9930af9b..01082a40 100644 --- a/tests/JWKTest.php +++ b/tests/JWKTest.php @@ -151,7 +151,8 @@ public function provideDecodeByJwkKeySet() return [ ['rsa1-private.pem', 'rsa-jwkset.json', 'RS256', 'jwk1'], ['ecdsa256-private.pem', 'ec-jwkset.json', 'ES256', 'jwk1'], - ['ecdsa384-private.pem', 'ec-jwkset.json', 'ES384', 'jwk4'] + ['ecdsa384-private.pem', 'ec-jwkset.json', 'ES384', 'jwk4'], + ['ed25519-1.sec', 'ed25519-jwkset.json', 'EdDSA', 'jwk1'], ]; }