GeezerVison is showing github.com — crypto: fix X25519 and X448 webcrypto public CryptoKey usages · nodejs/node@a976a63
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/cfrg.js +8-1Lines changed: 8 additions & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
@@ -53,7 +53,14 @@ function verifyAcceptableCfrgKeyUse(name, type, usages) { | 53 | 53 | case 'X25519': | 54 | 54 | // Fall through | 55 | 55 | case 'X448': | 56 | | - checkSet = ['deriveKey', 'deriveBits']; | | 56 | + switch (type) { | | 57 | + case 'private': | | 58 | + checkSet = ['deriveKey', 'deriveBits']; | | 59 | + break; | | 60 | + case 'public': | | 61 | + checkSet = []; | | 62 | + break; | | 63 | + } | 57 | 64 | break; | 58 | 65 | case 'Ed25519': | 59 | 66 | // Fall through | |
Collapse file Copy file name to clipboardExpand all lines: test/parallel/test-webcrypto-derivebits-cfrg.js +4-4Lines changed: 4 additions & 4 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -52,7 +52,7 @@ async function prepareKeys() { | 52 | 52 | Buffer.from(spki, 'hex'), | 53 | 53 | { name }, | 54 | 54 | true, | 55 | | - ['deriveKey', 'deriveBits']), | | 55 | + []), | 56 | 56 | ]); | 57 | 57 | keys[name] = { | 58 | 58 | privateKey, | @@ -180,7 +180,7 @@ async function prepareKeys() { | 180 | 180 | name: 'X448', | 181 | 181 | public: keys.X448.publicKey | 182 | 182 | }, keys.X448.publicKey, null), { | 183 | | - message: /baseKey must be a private key/ | | 183 | + name: 'InvalidAccessError' | 184 | 184 | }); | 185 | 185 | } | 186 | 186 |
| @@ -190,7 +190,7 @@ async function prepareKeys() { | 190 | 190 | name: 'X448', | 191 | 191 | public: keys.X448.privateKey | 192 | 192 | }, keys.X448.publicKey, null), { | 193 | | - message: /algorithm\.public must be a public key/ | | 193 | + name: 'InvalidAccessError' | 194 | 194 | }); | 195 | 195 | } | 196 | 196 |
| @@ -207,7 +207,7 @@ async function prepareKeys() { | 207 | 207 | name: 'X448', | 208 | 208 | public: key | 209 | 209 | }, keys.X448.publicKey, null), { | 210 | | - message: /algorithm\.public must be a public key/ | | 210 | + name: 'InvalidAccessError' | 211 | 211 | }); | 212 | 212 | } | 213 | 213 | })().then(common.mustCall()); |
Collapse file Copy file name to clipboardExpand all lines: test/parallel/test-webcrypto-derivekey-cfrg.js +6-6Lines changed: 6 additions & 6 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -51,7 +51,7 @@ async function prepareKeys() { | 51 | 51 | Buffer.from(spki, 'hex'), | 52 | 52 | { name }, | 53 | 53 | true, | 54 | | - ['deriveKey', 'deriveBits']), | | 54 | + []), | 55 | 55 | ]); | 56 | 56 | keys[name] = { | 57 | 57 | privateKey, | @@ -150,20 +150,20 @@ async function prepareKeys() { | 150 | 150 | }, | 151 | 151 | keys.X448.publicKey, | 152 | 152 | ...otherArgs), | 153 | | - { message: /baseKey must be a private key/ }); | | 153 | + { name: 'InvalidAccessError' }); | 154 | 154 | } | 155 | 155 |
| 156 | 156 | { | 157 | | - // Base key is not a private key | | 157 | + // Public is not a public key | 158 | 158 | await assert.rejects( | 159 | 159 | subtle.deriveKey( | 160 | 160 | { | 161 | 161 | name: 'X448', | 162 | 162 | public: keys.X448.privateKey | 163 | 163 | }, | 164 | | - keys.X448.publicKey, | | 164 | + keys.X448.privateKey, | 165 | 165 | ...otherArgs), | 166 | | - { message: /algorithm\.public must be a public key/ }); | | 166 | + { name: 'InvalidAccessError' }); | 167 | 167 | } | 168 | 168 |
| 169 | 169 | { | @@ -183,6 +183,6 @@ async function prepareKeys() { | 183 | 183 | }, | 184 | 184 | keys.X448.publicKey, | 185 | 185 | ...otherArgs), | 186 | | - { message: /algorithm\.public must be a public key/ }); | | 186 | + { name: 'InvalidAccessError' }); | 187 | 187 | } | 188 | 188 | })().then(common.mustCall()); |
Collapse file Copy file name to clipboardExpand all lines: test/parallel/test-webcrypto-export-import-cfrg.js +6-6Lines changed: 6 additions & 6 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -315,19 +315,19 @@ async function testImportRaw({ name, publicUsages }) { | 315 | 315 | const rsaPrivate = crypto.createPrivateKey( | 316 | 316 | fixtures.readKey('rsa_private_2048.pem')); | 317 | 317 |
| 318 | | - for (const [name, [publicUsage, privateUsage]] of Object.entries({ | 319 | | - 'Ed25519': ['verify', 'sign'], | 320 | | - 'X448': ['deriveBits', 'deriveBits'], | 321 | | - })) { | | 318 | + for (const [name, publicUsages, privateUsages] of [ | | 319 | + ['Ed25519', ['verify'], ['sign']], | | 320 | + ['X448', [], ['deriveBits']], | | 321 | + ]) { | 322 | 322 | assert.rejects(subtle.importKey( | 323 | 323 | 'spki', | 324 | 324 | rsaPublic.export({ format: 'der', type: 'spki' }), | 325 | 325 | { name }, | 326 | | - true, [publicUsage]), { message: /Invalid key type/ }); | | 326 | + true, publicUsages), { message: /Invalid key type/ }); | 327 | 327 | assert.rejects(subtle.importKey( | 328 | 328 | 'pkcs8', | 329 | 329 | rsaPrivate.export({ format: 'der', type: 'pkcs8' }), | 330 | 330 | { name }, | 331 | | - true, [privateUsage]), { message: /Invalid key type/ }); | | 331 | + true, privateUsages), { message: /Invalid key type/ }); | 332 | 332 | } | 333 | 333 | } |
Collapse file Copy file name to clipboardExpand all lines: test/wpt/status/WebCryptoAPI.json -16Lines changed: 0 additions & 16 deletions | Original file line number | Diff line number | Diff line change |
|---|
| 59 | 59 | "import_export/okp_importKey_failures_X25519.https.any.js": { | 60 | 60 | "fail": { | 61 | 61 | "expected": [ | 62 | | - "Bad usages: importKey(spki, {name: X25519}, true, [deriveKey])", | 63 | | - "Bad usages: importKey(spki, {name: X25519}, false, [deriveKey])", | 64 | | - "Bad usages: importKey(spki, {name: X25519}, true, [deriveBits])", | 65 | | - "Bad usages: importKey(spki, {name: X25519}, false, [deriveBits])", | 66 | | - "Bad usages: importKey(jwk (public) , {name: X25519}, true, [deriveKey])", | 67 | | - "Bad usages: importKey(jwk (public) , {name: X25519}, false, [deriveKey])", | 68 | | - "Bad usages: importKey(jwk (public) , {name: X25519}, true, [deriveBits])", | 69 | | - "Bad usages: importKey(jwk (public) , {name: X25519}, false, [deriveBits])", | 70 | 62 | "Bad key length: importKey(spki, {name: X25519}, true, [])", | 71 | 63 | "Bad key length: importKey(spki, {name: X25519}, false, [])", | 72 | 64 | "Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveKey])", | | 97 | 89 | "import_export/okp_importKey_failures_X448.https.any.js": { | 98 | 90 | "fail": { | 99 | 91 | "expected": [ | 100 | | - "Bad usages: importKey(spki, {name: X448}, true, [deriveKey])", | 101 | | - "Bad usages: importKey(spki, {name: X448}, false, [deriveKey])", | 102 | | - "Bad usages: importKey(spki, {name: X448}, true, [deriveBits])", | 103 | | - "Bad usages: importKey(spki, {name: X448}, false, [deriveBits])", | 104 | | - "Bad usages: importKey(jwk (public) , {name: X448}, true, [deriveKey])", | 105 | | - "Bad usages: importKey(jwk (public) , {name: X448}, false, [deriveKey])", | 106 | | - "Bad usages: importKey(jwk (public) , {name: X448}, true, [deriveBits])", | 107 | | - "Bad usages: importKey(jwk (public) , {name: X448}, false, [deriveBits])", | 108 | 92 | "Bad key length: importKey(spki, {name: X448}, true, [])", | 109 | 93 | "Bad key length: importKey(spki, {name: X448}, false, [])", | 110 | 94 | "Bad key length: importKey(pkcs8, {name: X448}, true, [deriveKey])", | |
|