GeezerVison is showing github.com — crypto: fix webcrypto EC key namedCurve validation errors · nodejs/node@02bcf13
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: lib/internal/crypto/ec.js +14-15Lines changed: 14 additions & 15 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 1 | 1 | 'use strict'; | 2 | 2 |
| 3 | 3 | const { | | 4 | + ArrayPrototypeIncludes, | 4 | 5 | ObjectKeys, | 5 | 6 | SafeSet, | 6 | 7 | } = primordials; | @@ -16,11 +17,6 @@ const { | 16 | 17 | kSigEncP1363, | 17 | 18 | } = internalBinding('crypto'); | 18 | 19 |
| 19 | | -const { | 20 | | - validateOneOf, | 21 | | - validateString, | 22 | | -} = require('internal/validators'); | 23 | | - | 24 | 20 | const { | 25 | 21 | codes: { | 26 | 22 | ERR_MISSING_OPTION, | @@ -90,11 +86,12 @@ function createECPublicKeyRaw(namedCurve, keyData) { | 90 | 86 |
| 91 | 87 | async function ecGenerateKey(algorithm, extractable, keyUsages) { | 92 | 88 | const { name, namedCurve } = algorithm; | 93 | | - validateString(namedCurve, 'algorithm.namedCurve'); | 94 | | - validateOneOf( | 95 | | - namedCurve, | 96 | | - 'algorithm.namedCurve', | 97 | | - ObjectKeys(kNamedCurveAliases)); | | 89 | + | | 90 | + if (!ArrayPrototypeIncludes(ObjectKeys(kNamedCurveAliases), namedCurve)) { | | 91 | + throw lazyDOMException( | | 92 | + 'Unrecognized namedCurve', | | 93 | + 'NotSupportedError'); | | 94 | + } | 98 | 95 |
| 99 | 96 | const usageSet = new SafeSet(keyUsages); | 100 | 97 | switch (name) { | @@ -168,11 +165,13 @@ async function ecImportKey( | 168 | 165 | keyUsages) { | 169 | 166 |
| 170 | 167 | 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 | + | 176 | 175 | let keyObject; | 177 | 176 | const usagesSet = new SafeSet(keyUsages); | 178 | 177 | switch (format) { | |
Collapse file Copy file name to clipboardExpand all lines: test/parallel/test-webcrypto-keygen.js +1-1Lines changed: 1 addition & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
@@ -452,7 +452,7 @@ const vectors = { | 452 | 452 | [1, true, {}, [], undefined, null].forEach(async (namedCurve) => { | 453 | 453 | await assert.rejects( | 454 | 454 | subtle.generateKey({ name, namedCurve }, true, privateUsages), { | 455 | | - code: 'ERR_INVALID_ARG_TYPE' | | 455 | + name: 'NotSupportedError' | 456 | 456 | }); | 457 | 457 | }); | 458 | 458 | } | |
Collapse file Copy file name to clipboardExpand all lines: test/wpt/status/WebCryptoAPI.json -36Lines changed: 0 additions & 36 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 2690 | 2690 | "generateKey/failures_ECDH.https.any.js": { | 2691 | 2691 | "fail": { | 2692 | 2692 | "expected": [ | 2693 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey])", | 2694 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey])", | 2695 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits, deriveKey])", | 2696 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits, deriveKey])", | 2697 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveBits])", | 2698 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveBits])", | 2699 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [])", | 2700 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [])", | 2701 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", | 2702 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: P-512}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", | 2703 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey])", | 2704 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey])", | 2705 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits, deriveKey])", | 2706 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits, deriveKey])", | 2707 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveBits])", | 2708 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveBits])", | 2709 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [])", | 2710 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [])", | 2711 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])", | 2712 | | - "Bad algorithm property: generateKey({name: ECDH, namedCurve: Curve25519}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])" | 2713 | 2693 | ] | 2714 | 2694 | } | 2715 | 2695 | }, | 2716 | 2696 | "generateKey/failures_ECDSA.https.any.js": { | 2717 | 2697 | "fail": { | 2718 | 2698 | "expected": [ | 2719 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign])", | 2720 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign])", | 2721 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [verify, sign])", | 2722 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [verify, sign])", | 2723 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [])", | 2724 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [])", | 2725 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, false, [sign, verify, sign, sign, verify])", | 2726 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: P-512}, true, [sign, verify, sign, sign, verify])", | 2727 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign])", | 2728 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign])", | 2729 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [verify, sign])", | 2730 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [verify, sign])", | 2731 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [])", | 2732 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [])", | 2733 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, false, [sign, verify, sign, sign, verify])", | 2734 | | - "Bad algorithm property: generateKey({name: ECDSA, namedCurve: Curve25519}, true, [sign, verify, sign, sign, verify])" | 2735 | 2699 | ] | 2736 | 2700 | } | 2737 | 2701 | }, | |
|