Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit a976a63

Browse filesBrowse files
panvadanielleadams
authored andcommitted
crypto: fix X25519 and X448 webcrypto public CryptoKey usages
PR-URL: #45569 Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de>
1 parent 27adcc9 commit a976a63
Copy full SHA for a976a63

File tree

Expand file treeCollapse file tree

5 files changed

+24
-33
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

5 files changed

+24
-33
lines changed
Open diff view settings
Collapse file

‎lib/internal/crypto/cfrg.js‎

Copy file name to clipboardExpand all lines: lib/internal/crypto/cfrg.js
+8-1Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,14 @@ function verifyAcceptableCfrgKeyUse(name, type, usages) {
5353
case 'X25519':
5454
// Fall through
5555
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+
}
5764
break;
5865
case 'Ed25519':
5966
// Fall through
Collapse file

‎test/parallel/test-webcrypto-derivebits-cfrg.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-webcrypto-derivebits-cfrg.js
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ async function prepareKeys() {
5252
Buffer.from(spki, 'hex'),
5353
{ name },
5454
true,
55-
['deriveKey', 'deriveBits']),
55+
[]),
5656
]);
5757
keys[name] = {
5858
privateKey,
@@ -180,7 +180,7 @@ async function prepareKeys() {
180180
name: 'X448',
181181
public: keys.X448.publicKey
182182
}, keys.X448.publicKey, null), {
183-
message: /baseKey must be a private key/
183+
name: 'InvalidAccessError'
184184
});
185185
}
186186

@@ -190,7 +190,7 @@ async function prepareKeys() {
190190
name: 'X448',
191191
public: keys.X448.privateKey
192192
}, keys.X448.publicKey, null), {
193-
message: /algorithm\.public must be a public key/
193+
name: 'InvalidAccessError'
194194
});
195195
}
196196

@@ -207,7 +207,7 @@ async function prepareKeys() {
207207
name: 'X448',
208208
public: key
209209
}, keys.X448.publicKey, null), {
210-
message: /algorithm\.public must be a public key/
210+
name: 'InvalidAccessError'
211211
});
212212
}
213213
})().then(common.mustCall());
Collapse file

‎test/parallel/test-webcrypto-derivekey-cfrg.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-webcrypto-derivekey-cfrg.js
+6-6Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ async function prepareKeys() {
5151
Buffer.from(spki, 'hex'),
5252
{ name },
5353
true,
54-
['deriveKey', 'deriveBits']),
54+
[]),
5555
]);
5656
keys[name] = {
5757
privateKey,
@@ -150,20 +150,20 @@ async function prepareKeys() {
150150
},
151151
keys.X448.publicKey,
152152
...otherArgs),
153-
{ message: /baseKey must be a private key/ });
153+
{ name: 'InvalidAccessError' });
154154
}
155155

156156
{
157-
// Base key is not a private key
157+
// Public is not a public key
158158
await assert.rejects(
159159
subtle.deriveKey(
160160
{
161161
name: 'X448',
162162
public: keys.X448.privateKey
163163
},
164-
keys.X448.publicKey,
164+
keys.X448.privateKey,
165165
...otherArgs),
166-
{ message: /algorithm\.public must be a public key/ });
166+
{ name: 'InvalidAccessError' });
167167
}
168168

169169
{
@@ -183,6 +183,6 @@ async function prepareKeys() {
183183
},
184184
keys.X448.publicKey,
185185
...otherArgs),
186-
{ message: /algorithm\.public must be a public key/ });
186+
{ name: 'InvalidAccessError' });
187187
}
188188
})().then(common.mustCall());
Collapse file

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

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 numberDiff line numberDiff line change
@@ -315,19 +315,19 @@ async function testImportRaw({ name, publicUsages }) {
315315
const rsaPrivate = crypto.createPrivateKey(
316316
fixtures.readKey('rsa_private_2048.pem'));
317317

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+
]) {
322322
assert.rejects(subtle.importKey(
323323
'spki',
324324
rsaPublic.export({ format: 'der', type: 'spki' }),
325325
{ name },
326-
true, [publicUsage]), { message: /Invalid key type/ });
326+
true, publicUsages), { message: /Invalid key type/ });
327327
assert.rejects(subtle.importKey(
328328
'pkcs8',
329329
rsaPrivate.export({ format: 'der', type: 'pkcs8' }),
330330
{ name },
331-
true, [privateUsage]), { message: /Invalid key type/ });
331+
true, privateUsages), { message: /Invalid key type/ });
332332
}
333333
}
Collapse file

‎test/wpt/status/WebCryptoAPI.json‎

Copy file name to clipboardExpand all lines: test/wpt/status/WebCryptoAPI.json
-16Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,6 @@
5959
"import_export/okp_importKey_failures_X25519.https.any.js": {
6060
"fail": {
6161
"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])",
7062
"Bad key length: importKey(spki, {name: X25519}, true, [])",
7163
"Bad key length: importKey(spki, {name: X25519}, false, [])",
7264
"Bad key length: importKey(pkcs8, {name: X25519}, true, [deriveKey])",
@@ -97,14 +89,6 @@
9789
"import_export/okp_importKey_failures_X448.https.any.js": {
9890
"fail": {
9991
"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])",
10892
"Bad key length: importKey(spki, {name: X448}, true, [])",
10993
"Bad key length: importKey(spki, {name: X448}, false, [])",
11094
"Bad key length: importKey(pkcs8, {name: X448}, true, [deriveKey])",

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.