Skip to content

Commit 20557fc

Browse files
committed
fix: respect JWK ext for symmetric keys
1 parent 84b56ee commit 20557fc

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

src/key/import.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ export async function importJWK(
261261
octAsKeyObject ??= jwk.ext !== true
262262

263263
if (octAsKeyObject) {
264-
return asKeyObject({ ...jwk, alg, ext: false })
264+
return asKeyObject({ ...jwk, alg, ext: jwk.ext ?? false })
265265
}
266266

267267
return decodeBase64URL(jwk.k)

test/jwk/jwk2key.test.mjs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,13 @@ test('oct JWK (ext: true)', async (t) => {
8080
196, 31, 242, 115, 77, 179, 107, 193, 17, 146, 114,
8181
],
8282
)
83+
84+
const k = await importJWK(oct, 'HS256', true)
85+
t.true('type' in k)
86+
t.is(k.type, 'secret')
87+
if ('extractable' in k) {
88+
t.is(k.extractable, true)
89+
}
8390
})
8491

8592
test('oct JWK (ext: false)', async (t) => {
@@ -89,10 +96,13 @@ test('oct JWK (ext: false)', async (t) => {
8996
ext: false,
9097
}
9198

92-
const k = await importJWK(oct, 'HS256')
99+
const k = await importJWK(oct, 'HS256', true)
93100

94101
t.true('type' in k)
95102
t.is(k.type, 'secret')
103+
if ('extractable' in k) {
104+
t.is(k.extractable, false)
105+
}
96106
})
97107

98108
test('oct JWK (ext missing)', async (t) => {
@@ -101,10 +111,13 @@ test('oct JWK (ext missing)', async (t) => {
101111
kty: 'oct',
102112
}
103113

104-
const k = await importJWK(oct, 'HS256')
114+
const k = await importJWK(oct, 'HS256', true)
105115

106116
t.true('type' in k)
107117
t.is(k.type, 'secret')
118+
if ('extractable' in k) {
119+
t.is(k.extractable, false)
120+
}
108121
})
109122

110123
async function testKeyImportExport(t, jwk) {
@@ -221,7 +234,7 @@ test('Uin8tArray can be transformed to a JWK', async (t) => {
221234
)
222235
})
223236

224-
conditional({ webcrypto: 0 })('secret key object can be transformed to a JWK', async (t) => {
237+
test('secret KeyLike can be transformed to a JWK', async (t) => {
225238
const keylike = await importJWK(
226239
{
227240
ext: true,

0 commit comments

Comments
 (0)