Skip to content

Commit 22a10c3

Browse files
committed
crypto: fix webcrypto EC key namedCurve validation errors
1 parent c3ff198 commit 22a10c3

File tree

3 files changed

+15
-52
lines changed

3 files changed

+15
-52
lines changed

lib/internal/crypto/ec.js

+14-15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
'use strict';
22

33
const {
4+
ArrayPrototypeIncludes,
45
ObjectKeys,
56
Promise,
67
SafeSet,
@@ -17,11 +18,6 @@ const {
1718
kSigEncP1363,
1819
} = internalBinding('crypto');
1920

20-
const {
21-
validateOneOf,
22-
validateString,
23-
} = require('internal/validators');
24-
2521
const {
2622
codes: {
2723
ERR_MISSING_OPTION,
@@ -88,11 +84,12 @@ function createECPublicKeyRaw(namedCurve, keyData) {
8884

8985
async function ecGenerateKey(algorithm, extractable, keyUsages) {
9086
const { name, namedCurve } = algorithm;
91-
validateString(namedCurve, 'algorithm.namedCurve');
92-
validateOneOf(
93-
namedCurve,
94-
'algorithm.namedCurve',
95-
ObjectKeys(kNamedCurveAliases));
87+
88+
if (!ArrayPrototypeIncludes(ObjectKeys(kNamedCurveAliases), namedCurve)) {
89+
throw lazyDOMException(
90+
'Unrecognized namedCurve',
91+
'NotSupportedError');
92+
}
9693

9794
const usageSet = new SafeSet(keyUsages);
9895
switch (name) {
@@ -168,11 +165,13 @@ async function ecImportKey(
168165
keyUsages) {
169166

170167
const { name, namedCurve } = algorithm;
171-
validateString(namedCurve, 'algorithm.namedCurve');
172-
validateOneOf(
173-
namedCurve,
174-
'algorithm.namedCurve',
175-
ObjectKeys(kNamedCurveAliases));
168+
169+
if (!ArrayPrototypeIncludes(ObjectKeys(kNamedCurveAliases), namedCurve)) {
170+
throw lazyDOMException(
171+
'Unrecognized namedCurve',
172+
'NotSupportedError');
173+
}
174+
176175
let keyObject;
177176
const usagesSet = new SafeSet(keyUsages);
178177
switch (format) {

test/parallel/test-webcrypto-keygen.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ const vectors = {
452452
[1, true, {}, [], undefined, null].forEach(async (namedCurve) => {
453453
await assert.rejects(
454454
subtle.generateKey({ name, namedCurve }, true, privateUsages), {
455-
code: 'ERR_INVALID_ARG_TYPE'
455+
name: 'NotSupportedError'
456456
});
457457
});
458458
}

test/wpt/status/WebCryptoAPI.json

-36
Original file line numberDiff line numberDiff line change
@@ -3383,48 +3383,12 @@
33833383
"generateKey/failures_ECDH.https.any.js": {
33843384
"fail": {
33853385
"expected": [
3386-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey])",
3387-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey])",
3388-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits, deriveKey])",
3389-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits, deriveKey])",
3390-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits])",
3391-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits])",
3392-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [])",
3393-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [])",
3394-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])",
3395-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])",
3396-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey])",
3397-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey])",
3398-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits, deriveKey])",
3399-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits, deriveKey])",
3400-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits])",
3401-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits])",
3402-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [])",
3403-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [])",
3404-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])",
3405-
"Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])"
34063386
]
34073387
}
34083388
},
34093389
"generateKey/failures_ECDSA.https.any.js": {
34103390
"fail": {
34113391
"expected": [
3412-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign])",
3413-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign])",
3414-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign])",
3415-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [verify, sign])",
3416-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [])",
3417-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [])",
3418-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign, verify, sign, sign, verify])",
3419-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign, verify, sign, sign, verify])",
3420-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign])",
3421-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign])",
3422-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [verify, sign])",
3423-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [verify, sign])",
3424-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [])",
3425-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [])",
3426-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify])",
3427-
"Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify])"
34283392
]
34293393
}
34303394
},

0 commit comments

Comments
 (0)