Skip to content

Commit 018f61c

Browse files
panvatargos
authored andcommitted
crypto: fix webcrypto AES-KW keys accepting encrypt/decrypt usages
PR-URL: #43431 Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Antoine du Hamel <[email protected]>
1 parent 3ee0bb8 commit 018f61c

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

‎lib/internal/crypto/aes.js‎

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,13 +230,17 @@ async function aesGenerateKey(algorithm, extractable, keyUsages){
230230
validateInteger(length,'algorithm.length');
231231
validateOneOf(length,'algorithm.length',kAesKeyLengths);
232232

233-
constusageSet=newSafeSet(keyUsages);
233+
constcheckUsages=['wrapKey','unwrapKey'];
234+
if(name!=='AES-KW')
235+
ArrayPrototypePush(checkUsages,'encrypt','decrypt');
234236

235-
if(hasAnyNotIn(usageSet,['encrypt','decrypt','wrapKey','unwrapKey'])){
237+
constusagesSet=newSafeSet(keyUsages);
238+
if(hasAnyNotIn(usagesSet,checkUsages)){
236239
throwlazyDOMException(
237240
'Unsupported key usage for an AES key',
238241
'SyntaxError');
239242
}
243+
240244
returnnewPromise((resolve,reject)=>{
241245
generateKey('aes',{ length },(err,key)=>{
242246
if(err){
@@ -249,7 +253,7 @@ async function aesGenerateKey(algorithm, extractable, keyUsages){
249253
resolve(newInternalCryptoKey(
250254
key,
251255
{ name, length },
252-
ArrayFrom(usageSet),
256+
ArrayFrom(usagesSet),
253257
extractable));
254258
});
255259
});

‎test/parallel/test-webcrypto-keygen.js‎

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -211,14 +211,16 @@ const vectors ={
211211
if(!vectors[name].usages.includes(usage))
212212
invalidUsages.push(usage);
213213
});
214-
returnassert.rejects(
215-
subtle.generateKey(
216-
{
217-
name, ...vectors[name].algorithm
218-
},
219-
true,
220-
invalidUsages),
221-
{message: /Unsupportedkeyusage/});
214+
for(constinvalidUsageofinvalidUsages){
215+
awaitassert.rejects(
216+
subtle.generateKey(
217+
{
218+
name, ...vectors[name].algorithm
219+
},
220+
true,
221+
[...vectors[name].usages,invalidUsage]),
222+
{message: /Unsupportedkeyusage/});
223+
}
222224
}
223225

224226
consttests=Object.keys(vectors).map(test);

0 commit comments

Comments
(0)