mirror of
https://github.com/nodejs/node.git
synced 2026-10-14 10:26:26 -04:00
crypto: support Big(U)Int64Array in getRandomValues
Refs: https://github.com/w3c/webcrypto/issues/255 Fixes: https://github.com/nodejs/node/issues/39442 PR-URL: https://github.com/nodejs/node/pull/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>
This commit is contained in:
1 parent
ab73d95ace
commit
56a7e0aa90
2 files changed
+25
-25
No files matched your search
@@ -50,7 +50,6 @@ const {
|
||||
const {
|
||||
isArrayBufferView,
|
||||
isAnyArrayBuffer,
|
||||
isBigInt64Array,
|
||||
isFloat32Array,
|
||||
isFloat64Array,
|
||||
} = require('internal/util/types');
|
||||
@@ -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,
|
||||
|
||||
@@ -9,8 +9,15 @@ 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 },
|
||||
);
|
||||
});
|
||||
|
||||
{
|
||||
@@ -18,32 +25,27 @@ const { getRandomValues } = require('crypto').webcrypto;
|
||||
getRandomValues(buf);
|
||||
}
|
||||
|
||||
{
|
||||
const buf = new Uint8Array(new Array(10).fill(0));
|
||||
const before = Buffer.from(buf).toString('hex');
|
||||
const intTypedConstructors = [
|
||||
Int8Array,
|
||||
Int16Array,
|
||||
Int32Array,
|
||||
Uint8Array,
|
||||
Uint16Array,
|
||||
Uint32Array,
|
||||
BigInt64Array,
|
||||
BigUint64Array,
|
||||
];
|
||||
|
||||
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 before = Buffer.from(buf).toString('hex');
|
||||
getRandomValues(buf);
|
||||
const after = Buffer.from(buf).toString('hex');
|
||||
assert.notStrictEqual(before, after);
|
||||
}
|
||||
|
||||
{
|
||||
const buf = new Uint32Array(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 buf = new Uint16Array(10);
|
||||
const before = Buffer.from(buf).toString('hex');
|
||||
getRandomValues(new DataView(buf.buffer));
|
||||
const after = Buffer.from(buf).toString('hex');
|
||||
|
||||
Reference in new issue
Block a user