From c04f409d2346ffe4f3fee41b57f0ff0323244643 Mon Sep 17 00:00:00 2001 From: MikeCAT Date: Thu, 17 Nov 2022 20:24:54 +0900 Subject: [PATCH] PseudoRandomNumberGenerator: support larger output than 65536 bytes --- src/core/operations/PseudoRandomNumberGenerator.mjs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/operations/PseudoRandomNumberGenerator.mjs b/src/core/operations/PseudoRandomNumberGenerator.mjs index 033aa859..53150566 100644 --- a/src/core/operations/PseudoRandomNumberGenerator.mjs +++ b/src/core/operations/PseudoRandomNumberGenerator.mjs @@ -52,8 +52,12 @@ class PseudoRandomNumberGenerator extends Operation { let bytes; if (isWorkerEnvironment() && self.crypto) { - bytes = self.crypto.getRandomValues(new Uint8Array(numBytes)); - bytes = Utils.arrayBufferToStr(bytes.buffer); + bytes = new ArrayBuffer(numBytes); + const CHUNK_SIZE = 65536; + for (let i = 0; i < numBytes; i += CHUNK_SIZE) { + self.crypto.getRandomValues(new Uint8Array(bytes, i, Math.min(numBytes - i, CHUNK_SIZE))); + } + bytes = Utils.arrayBufferToStr(bytes); } else { bytes = forge.random.getBytesSync(numBytes); }