From 553bd7dec328884785da805d8ef4f9c4510e1366 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Wed, 28 Aug 2024 19:54:49 +0530 Subject: fix(ext/node): import EC JWK keys (#25266) --- tests/unit_node/crypto/crypto_key_test.ts | 51 +++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) (limited to 'tests/unit_node/crypto') diff --git a/tests/unit_node/crypto/crypto_key_test.ts b/tests/unit_node/crypto/crypto_key_test.ts index 6c2c9f851..dba9ba062 100644 --- a/tests/unit_node/crypto/crypto_key_test.ts +++ b/tests/unit_node/crypto/crypto_key_test.ts @@ -440,7 +440,7 @@ Deno.test("create private key with invalid utf-8 string", function () { ); }); -Deno.test("Ed25519 jwk public key #1", function () { +Deno.test("Ed25519 import jwk public key #1", function () { const key = { "kty": "OKP", "crv": "Ed25519", @@ -460,7 +460,7 @@ MCowBQYDK2VwAyEA11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo= assertEquals(spkiActual, spkiExpected); }); -Deno.test("Ed25519 jwk public key #2", function () { +Deno.test("Ed25519 import jwk public key #2", function () { const key = { "kty": "OKP", "crv": "Ed25519", @@ -478,7 +478,7 @@ MCowBQYDK2VwAyEA11qYAYKxCrfVS/7TyWQHOg7hcvPapiMlrwIaaPcHURo= assertEquals(spki, spkiExpected); }); -Deno.test("Ed25519 jwk private key", function () { +Deno.test("Ed25519 import jwk private key", function () { const key = { "kty": "OKP", "crv": "Ed25519", @@ -497,3 +497,48 @@ MC4CAQAwBQYDK2VwBCIEIJ1hsZ3v/VpguoRK9JLsLMREScVpezJpGXA7rAMcrn9g assertEquals(pkcs8Actual, pkcs8Expected); }); + +Deno.test("EC import jwk public key", function () { + const publicKey = createPublicKey({ + key: { + kty: "EC", + x: "_GGuz19zab5J70zyiUK6sAM5mHqUbsY8H6U2TnVlt-k", + y: "TcZG5efXZDIhNGDp6XuujoJqOEJU2D2ckjG9nOnSPIQ", + crv: "P-256", + }, + format: "jwk", + }); + + const publicSpki = publicKey.export({ type: "spki", format: "pem" }); + const spkiExpected = `-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/GGuz19zab5J70zyiUK6sAM5mHqU +bsY8H6U2TnVlt+lNxkbl59dkMiE0YOnpe66Ogmo4QlTYPZySMb2c6dI8hA== +-----END PUBLIC KEY----- +`; + + assertEquals(publicSpki, spkiExpected); +}); + +Deno.test("EC import jwk private key", function () { + const privateKey = createPrivateKey({ + key: { + kty: "EC", + x: "_GGuz19zab5J70zyiUK6sAM5mHqUbsY8H6U2TnVlt-k", + y: "TcZG5efXZDIhNGDp6XuujoJqOEJU2D2ckjG9nOnSPIQ", + crv: "P-256", + d: "Wobjne0GqlB_1NynKu19rsw7zBHa94tKcWIxwIb88m8", + }, + format: "jwk", + }); + + const privatePkcs8 = privateKey.export({ type: "pkcs8", format: "pem" }); + + const pkcs8Expected = `-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgWobjne0GqlB/1Nyn +Ku19rsw7zBHa94tKcWIxwIb88m+hRANCAAT8Ya7PX3NpvknvTPKJQrqwAzmYepRu +xjwfpTZOdWW36U3GRuXn12QyITRg6el7ro6CajhCVNg9nJIxvZzp0jyE +-----END PRIVATE KEY----- +`; + + assertEquals(privatePkcs8, pkcs8Expected); +}); -- cgit v1.2.3