mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 21:19:50 +01:00
e74b84e458
PR-URL: https://github.com/nodejs/node/pull/46357 Reviewed-By: Filip Skokan <panva.ip@gmail.com>
77 lines
1.5 KiB
JavaScript
77 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
|
|
if (!common.hasCrypto)
|
|
common.skip('missing crypto');
|
|
|
|
const { Buffer } = require('buffer');
|
|
const assert = require('assert');
|
|
const { crypto } = globalThis;
|
|
|
|
[
|
|
undefined, null, '', 1, {}, [],
|
|
new Float32Array(1),
|
|
new Float64Array(1),
|
|
new DataView(new ArrayBuffer(1)),
|
|
].forEach((i) => {
|
|
assert.throws(
|
|
() => crypto.getRandomValues(i),
|
|
{ name: 'TypeMismatchError', code: 17 },
|
|
);
|
|
});
|
|
|
|
{
|
|
const buf = new Uint8Array(0);
|
|
crypto.getRandomValues(buf);
|
|
}
|
|
|
|
const intTypedConstructors = [
|
|
Int8Array,
|
|
Int16Array,
|
|
Int32Array,
|
|
Uint8Array,
|
|
Uint16Array,
|
|
Uint32Array,
|
|
Uint8ClampedArray,
|
|
BigInt64Array,
|
|
BigUint64Array,
|
|
];
|
|
|
|
for (const ctor of intTypedConstructors) {
|
|
const buf = new ctor(10);
|
|
const before = Buffer.from(buf.buffer).toString('hex');
|
|
crypto.getRandomValues(buf);
|
|
const after = Buffer.from(buf.buffer).toString('hex');
|
|
assert.notStrictEqual(before, after);
|
|
}
|
|
|
|
{
|
|
const buf = Buffer.alloc(10);
|
|
const before = buf.toString('hex');
|
|
crypto.getRandomValues(buf);
|
|
const after = buf.toString('hex');
|
|
assert.notStrictEqual(before, after);
|
|
}
|
|
|
|
{
|
|
let kData;
|
|
try {
|
|
kData = Buffer.alloc(65536 + 1);
|
|
} catch {
|
|
// Ignore if error here.
|
|
}
|
|
|
|
if (kData !== undefined) {
|
|
assert.throws(
|
|
() => crypto.getRandomValues(kData),
|
|
{ name: 'QuotaExceededError', code: 22 },
|
|
);
|
|
}
|
|
}
|
|
|
|
{
|
|
const typedArray = new Uint8Array(32);
|
|
assert.strictEqual(crypto.getRandomValues(typedArray), typedArray);
|
|
}
|