crypto: make deriveBits length parameter optional and nullable · nodejs/node@3cc01aa · GitHub
Skip to content

Commit 3cc01aa

Browse files
panvaaduh95
authored andcommitted
crypto: make deriveBits length parameter optional and nullable
PR-URL: #53601 Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
1 parent dd2157b commit 3cc01aa

7 files changed

Lines changed: 51 additions & 9 deletions

File tree

doc/api/webcrypto.md

Lines changed: 11 additions & 7 deletions

lib/internal/crypto/webcrypto.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,12 +178,12 @@ async function generateKey(
178178
return result;
179179
}
180180

181-
async function deriveBits(algorithm, baseKey, length) {
181+
async function deriveBits(algorithm, baseKey, length = null) {
182182
if (this !== subtle) throw new ERR_INVALID_THIS('SubtleCrypto');
183183

184184
webidl ??= require('internal/crypto/webidl');
185185
const prefix = "Failed to execute 'deriveBits' on 'SubtleCrypto'";
186-
webidl.requiredArguments(arguments.length, 3, { prefix });
186+
webidl.requiredArguments(arguments.length, 2, { prefix });
187187
algorithm = webidl.converters.AlgorithmIdentifier(algorithm, {
188188
prefix,
189189
context: '1st argument',

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,16 @@ async function prepareKeys() {
101101
assert.strictEqual(Buffer.from(bits).toString('hex'), result);
102102
}
103103

104+
{
105+
// Default length
106+
const bits = await subtle.deriveBits({
107+
name,
108+
public: publicKey
109+
}, privateKey);
110+
111+
assert.strictEqual(Buffer.from(bits).toString('hex'), result);
112+
}
113+
104114
{
105115
// Short Result
106116
const bits = await subtle.deriveBits({

test/parallel/test-webcrypto-derivebits-ecdh.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,16 @@ async function prepareKeys() {
122122
assert.strictEqual(Buffer.from(bits).toString('hex'), result);
123123
}
124124

125+
{
126+
// Default length
127+
const bits = await subtle.deriveBits({
128+
name: 'ECDH',
129+
public: publicKey
130+
}, privateKey);
131+
132+
assert.strictEqual(Buffer.from(bits).toString('hex'), result);
133+
}
134+
125135
{
126136
// Short Result
127137
const bits = await subtle.deriveBits({

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,11 @@ async function testDeriveBitsBadLengths(
271271
message: 'length cannot be null',
272272
name: 'OperationError',
273273
}),
274+
assert.rejects(
275+
subtle.deriveBits(algorithm, baseKeys[size]), {
276+
message: 'length cannot be null',
277+
name: 'OperationError',
278+
}),
274279
assert.rejects(
275280
subtle.deriveBits(algorithm, baseKeys[size], 15), {
276281
message: /length must be a multiple of 8/,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,11 @@ async function testDeriveBitsBadLengths(
459459
message: 'length cannot be null',
460460
name: 'OperationError',
461461
}),
462+
assert.rejects(
463+
subtle.deriveBits(algorithm, baseKeys[size]), {
464+
message: 'length cannot be null',
465+
name: 'OperationError',
466+
}),
462467
assert.rejects(
463468
subtle.deriveBits(algorithm, baseKeys[size], 15), {
464469
message: /length must be a multiple of 8/,

test/wpt/status/WebCryptoAPI.json

Lines changed: 8 additions & 0 deletions

0 commit comments

Comments
 (0)