Skip to content

Commit 9f1de2c

Browse files
panvadanielleadams
authored andcommitted
crypto: fix webcrypto import of cfrg raw public keys
PR-URL: #43404 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
1 parent 7f02e22 commit 9f1de2c

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

lib/internal/crypto/cfrg.js

+1-8
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,6 @@ function verifyAcceptableCfrgKeyUse(name, type, usages) {
7272
}
7373
}
7474

75-
function createECPublicKeyRaw(name, keyData) {
76-
const handle = new KeyObjectHandle();
77-
keyData = getArrayBufferOrView(keyData, 'keyData');
78-
if (handle.initECRaw(name.toLowerCase(), keyData))
79-
return new PublicKeyObject(handle);
80-
}
81-
8275
function createCFRGRawKey(name, keyData, isPublic) {
8376
const handle = new KeyObjectHandle();
8477
keyData = getArrayBufferOrView(keyData, 'keyData');
@@ -297,7 +290,7 @@ async function cfrgImportKey(
297290
}
298291
case 'raw': {
299292
verifyAcceptableCfrgKeyUse(name, 'public', usagesSet);
300-
keyObject = createECPublicKeyRaw(name, keyData);
293+
keyObject = createCFRGRawKey(name, keyData, true);
301294
if (keyObject === undefined)
302295
throw lazyDOMException('Unable to import CFRG key', 'OperationError');
303296
break;

test/parallel/test-webcrypto-export-import-cfrg.js

+15
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,20 @@ async function testImportJwk({ name, publicUsages, privateUsages }, extractable)
281281
}
282282
}
283283

284+
async function testImportRaw({ name, publicUsages }) {
285+
const jwk = keyData[name].jwk;
286+
287+
const publicKey = await subtle.importKey(
288+
'raw',
289+
Buffer.from(jwk.x, 'base64url'),
290+
{ name },
291+
true, publicUsages);
292+
293+
assert.strictEqual(publicKey.type, 'public');
294+
assert.deepStrictEqual(publicKey.usages, publicUsages);
295+
assert.strictEqual(publicKey.algorithm.name, name);
296+
}
297+
284298
(async function() {
285299
const tests = [];
286300
testVectors.forEach((vector) => {
@@ -289,6 +303,7 @@ async function testImportJwk({ name, publicUsages, privateUsages }, extractable)
289303
tests.push(testImportPkcs8(vector, extractable));
290304
tests.push(testImportJwk(vector, extractable));
291305
});
306+
tests.push(testImportRaw(vector));
292307
});
293308

294309
await Promise.all(tests);

0 commit comments

Comments
 (0)