Skip to content

Commit 7e705d8

Browse files
panvajuanarbol
authored andcommitted
crypto: fix webcrypto deriveBits validations
PR-URL: #44173 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Tobias Nießen <[email protected]> Backport-PR-URL: #44872
1 parent 7ad2a26 commit 7e705d8

File tree

5 files changed

+23
-521
lines changed

5 files changed

+23
-521
lines changed

‎lib/internal/crypto/hkdf.js‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,6 @@ function hkdfSync(hash, key, salt, info, length){
142142
}
143143

144144
asyncfunctionhkdfDeriveBits(algorithm,baseKey,length){
145-
validateUint32(length,'length');
146145
const{ hash }=algorithm;
147146
constsalt=getArrayBufferOrView(algorithm.salt,'algorithm.salt');
148147
constinfo=getArrayBufferOrView(algorithm.info,'algorithm.info');
@@ -153,6 +152,9 @@ async function hkdfDeriveBits(algorithm, baseKey, length){
153152
if(length!==undefined){
154153
if(length===0)
155154
throwlazyDOMException('length cannot be zero','OperationError');
155+
if(length===null)
156+
throwlazyDOMException('length cannot be null','OperationError');
157+
validateUint32(length,'length');
156158
if(length%8){
157159
throwlazyDOMException(
158160
'length must be a multiple of 8',

‎lib/internal/crypto/pbkdf2.js‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,16 @@ function check(password, salt, iterations, keylen, digest){
101101
}
102102

103103
asyncfunctionpbkdf2DeriveBits(algorithm,baseKey,length){
104-
validateUint32(length,'length');
105104
const{ iterations }=algorithm;
106105
let{ hash }=algorithm;
107106
constsalt=getArrayBufferOrView(algorithm.salt,'algorithm.salt');
108107
if(hash===undefined)
109108
thrownewERR_MISSING_OPTION('algorithm.hash');
110-
validateInteger(iterations,'algorithm.iterations',1);
109+
validateInteger(iterations,'algorithm.iterations');
110+
if(iterations===0)
111+
throwlazyDOMException(
112+
'iterations cannot be zero',
113+
'OperationError');
111114

112115
hash=normalizeHashName(hash.name);
113116

@@ -117,6 +120,9 @@ async function pbkdf2DeriveBits(algorithm, baseKey, length){
117120
if(length!==undefined){
118121
if(length===0)
119122
throwlazyDOMException('length cannot be zero','OperationError');
123+
if(length===null)
124+
throwlazyDOMException('length cannot be null','OperationError');
125+
validateUint32(length,'length');
120126
if(length%8){
121127
throwlazyDOMException(
122128
'length must be a multiple of 8',

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -259,15 +259,18 @@ async function testDeriveBitsBadLengths(
259259
returnPromise.all([
260260
assert.rejects(
261261
subtle.deriveBits(algorithm,baseKeys[size],0),{
262-
message: /lengthcannotbezero/
262+
message: /lengthcannotbezero/,
263+
name: 'OperationError',
263264
}),
264265
assert.rejects(
265266
subtle.deriveBits(algorithm,baseKeys[size],null),{
266-
code: 'ERR_INVALID_ARG_TYPE'
267+
message: 'length cannot be null',
268+
name: 'OperationError',
267269
}),
268270
assert.rejects(
269271
subtle.deriveBits(algorithm,baseKeys[size],15),{
270-
message: /lengthmustbeamultipleof8/
272+
message: /lengthmustbeamultipleof8/,
273+
name: 'OperationError',
271274
}),
272275
]);
273276
}

‎test/pummel/test-webcrypto-derivebits-pbkdf2.js‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -448,15 +448,18 @@ async function testDeriveBitsBadLengths(
448448
returnPromise.all([
449449
assert.rejects(
450450
subtle.deriveBits(algorithm,baseKeys[size],0),{
451-
message: /lengthcannotbezero/
451+
message: /lengthcannotbezero/,
452+
name: 'OperationError',
452453
}),
453454
assert.rejects(
454455
subtle.deriveBits(algorithm,baseKeys[size],null),{
455-
code: 'ERR_INVALID_ARG_TYPE'
456+
message: 'length cannot be null',
457+
name: 'OperationError',
456458
}),
457459
assert.rejects(
458460
subtle.deriveBits(algorithm,baseKeys[size],15),{
459-
message: /lengthmustbeamultipleof8/
461+
message: /lengthmustbeamultipleof8/,
462+
name: 'OperationError',
460463
}),
461464
]);
462465
}

0 commit comments

Comments
(0)