Skip to content

Commit 896dc39

Browse files
committed
crypto: fix webcrypto derive(Bits|Key) resolve values and docs
fixes #38115 PR-URL: #38148 Reviewed-By: Tobias Nießen <[email protected]> Reviewed-By: James M Snell <[email protected]>
1 parent f46d293 commit 896dc39

8 files changed

+11
-4
lines changed

Diff for: doc/api/webcrypto.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ async function pbkdf2Key(pass, salt, iterations = 1000, length = 256) {
275275
ec.encode(pass),
276276
'PBKDF2',
277277
false,
278-
['deriveBits']);
278+
['deriveKey']);
279279
const key = await subtle.deriveKey({
280280
name: 'PBKDF2',
281281
hash: 'SHA-512',
@@ -536,7 +536,7 @@ added: v15.0.0
536536
* `derivedKeyAlgorithm`: {HmacKeyGenParams|AesKeyGenParams}
537537
* `extractable`: {boolean}
538538
* `keyUsages`: {string[]} See [Key usages][].
539-
* Returns: {Promise} containing {ArrayBuffer}
539+
* Returns: {Promise} containing {CryptoKey}
540540
<!--lint enable maximum-line-length remark-lint-->
541541

542542
Using the method and parameters specified in `algorithm`, and the keying

Diff for: lib/internal/crypto/pbkdf2.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ async function pbkdf2DeriveBits(algorithm, baseKey, length) {
122122
return new Promise((resolve, reject) => {
123123
pbkdf2(raw, salt, iterations, byteLength, hash, (err, result) => {
124124
if (err) return reject(err);
125-
resolve(result);
125+
resolve(result.buffer);
126126
});
127127
});
128128
}

Diff for: lib/internal/crypto/scrypt.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ async function scryptDeriveBits(algorithm, baseKey, length) {
167167
return new Promise((resolve, reject) => {
168168
scrypt(raw, salt, byteLength, { N, r, p, maxmem }, (err, result) => {
169169
if (err) return reject(err);
170-
resolve(result);
170+
resolve(result.buffer);
171171
});
172172
});
173173
}

Diff for: test/parallel/test-webcrypto-derivebits-ecdh.js

+1
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ async function prepareKeys() {
9898
public: publicKey
9999
}, privateKey, 8 * size);
100100

101+
assert(bits instanceof ArrayBuffer);
101102
assert.strictEqual(Buffer.from(bits).toString('hex'), result);
102103
}
103104

Diff for: test/parallel/test-webcrypto-derivebits-hkdf.js

+1
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ async function testDeriveBits(
237237
baseKeys[size],
238238
256);
239239

240+
assert(bits instanceof ArrayBuffer);
240241
assert.strictEqual(
241242
Buffer.from(bits).toString('hex'),
242243
kDerivations[size][saltSize][hash][infoSize]);

Diff for: test/parallel/test-webcrypto-derivebits-node-dh.js

+1
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ async function prepareKeys() {
112112
public: publicKey
113113
}, privateKey, null);
114114

115+
assert(bits instanceof ArrayBuffer);
115116
assert.strictEqual(Buffer.from(bits).toString('hex'), result);
116117
}
117118

Diff for: test/parallel/test-webcrypto-derivebits-pbkdf2.js

+1
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,7 @@ async function testDeriveBits(
421421

422422
const bits = await subtle.deriveBits(algorithm, baseKeys[size], 256);
423423

424+
assert(bits instanceof ArrayBuffer);
424425
assert.strictEqual(
425426
Buffer.from(bits).toString('hex'),
426427
kDerivations[size][saltSize][hash][iterations]);

Diff for: test/parallel/test-webcrypto-derivebits.js

+3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ const { internalBinding } = require('internal/test/binding');
3131
}, alice.privateKey, 128),
3232
]);
3333

34+
assert(secret1 instanceof ArrayBuffer);
35+
assert(secret2 instanceof ArrayBuffer);
3436
assert.deepStrictEqual(secret1, secret2);
3537
}
3638

@@ -114,6 +116,7 @@ if (typeof internalBinding('crypto').ScryptJob === 'function') {
114116
name: 'NODE-SCRYPT',
115117
salt: ec.encode(salt),
116118
}, key, length);
119+
assert(secret instanceof ArrayBuffer);
117120
assert.strictEqual(Buffer.from(secret).toString('hex'), expected);
118121
}
119122

0 commit comments

Comments
 (0)