Skip to content

Commit

Permalink
crypto: support Big(U)Int64Array in getRandomValues
Browse files Browse the repository at this point in the history
Refs: w3c/webcrypto#255
Fixes: #39442

PR-URL: #39443
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Zeyu Yang <himself65@outlook.com>
  • Loading branch information
targos authored and BethGriggs committed Jul 29, 2021
1 parent cc7b617 commit d16d36f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 24 deletions.
2 changes: 0 additions & 2 deletions lib/internal/crypto/random.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ const {
const {
isArrayBufferView,
isAnyArrayBuffer,
isBigInt64Array,
isFloat32Array,
isFloat64Array,
} = require('internal/util/types');
Expand Down Expand Up @@ -309,7 +308,6 @@ function onJobDone(buf, callback, error) {
// be an integer-type TypedArray.
function getRandomValues(data) {
if (!isArrayBufferView(data) ||
isBigInt64Array(data) ||
isFloat32Array(data) ||
isFloat64Array(data)) {
// Ordinarily this would be an ERR_INVALID_ARG_TYPE. However,
Expand Down
46 changes: 24 additions & 22 deletions test/parallel/test-webcrypto-random.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,41 +9,43 @@ const { Buffer } = require('buffer');
const assert = require('assert');
const { getRandomValues } = require('crypto').webcrypto;

[undefined, null, '', 1, {}, []].forEach((i) => {
assert.throws(() => getRandomValues(i), { code: 17 });
[
undefined, null, '', 1, {}, [],
new Float32Array(1),
new Float64Array(1),
].forEach((i) => {
assert.throws(
() => getRandomValues(i),
{ name: 'TypeMismatchError', code: 17 },
);
});

{
const buf = new Uint8Array(0);
getRandomValues(buf);
}

{
const buf = new Uint8Array(new Array(10).fill(0));
const before = Buffer.from(buf).toString('hex');
getRandomValues(buf);
const after = Buffer.from(buf).toString('hex');
assert.notStrictEqual(before, after);
}

{
const buf = new Uint16Array(new Array(10).fill(0));
const before = Buffer.from(buf).toString('hex');
getRandomValues(buf);
const after = Buffer.from(buf).toString('hex');
assert.notStrictEqual(before, after);
}
const intTypedConstructors = [
Int8Array,
Int16Array,
Int32Array,
Uint8Array,
Uint16Array,
Uint32Array,
BigInt64Array,
BigUint64Array,
];

{
const buf = new Uint32Array(new Array(10).fill(0));
const before = Buffer.from(buf).toString('hex');
for (const ctor of intTypedConstructors) {
const buf = new ctor(10);
const before = Buffer.from(buf.buffer).toString('hex');
getRandomValues(buf);
const after = Buffer.from(buf).toString('hex');
const after = Buffer.from(buf.buffer).toString('hex');
assert.notStrictEqual(before, after);
}

{
const buf = new Uint16Array(new Array(10).fill(0));
const buf = new Uint16Array(10);
const before = Buffer.from(buf).toString('hex');
getRandomValues(new DataView(buf.buffer));
const after = Buffer.from(buf).toString('hex');
Expand Down

0 comments on commit d16d36f

Please sign in to comment.