From 5aa27c45f1cae6f0121e0860cd4be329ced887a6 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Wed, 20 Dec 2023 07:54:55 +0530 Subject: [PATCH] fix(node): add crypto.pseudoRandomBytes (#21649) --- .../unit_node/internal/_randomBytes_test.ts | 22 ++++++++++++++++++- ext/node/polyfills/crypto.ts | 6 +++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/cli/tests/unit_node/internal/_randomBytes_test.ts b/cli/tests/unit_node/internal/_randomBytes_test.ts index 69845705e8..b126741701 100644 --- a/cli/tests/unit_node/internal/_randomBytes_test.ts +++ b/cli/tests/unit_node/internal/_randomBytes_test.ts @@ -6,7 +6,7 @@ import { assertThrows, } from "../../../../test_util/std/assert/mod.ts"; import { assertCallbackErrorUncaught } from "../_test_utils.ts"; -import { randomBytes } from "node:crypto"; +import { pseudoRandomBytes, randomBytes } from "node:crypto"; const MAX_RANDOM_VALUES = 65536; const MAX_SIZE = 4294967295; @@ -90,3 +90,23 @@ Deno.test("[std/node/crypto] randomBytes callback isn't called twice if error is invocation: "randomBytes(0, ", }); }); + +// https://github.com/denoland/deno/issues/21632 +Deno.test("pseudoRandomBytes works", function () { + assertEquals(pseudoRandomBytes(0).length, 0, "len: " + 0); + assertEquals(pseudoRandomBytes(3).length, 3, "len: " + 3); + assertEquals(pseudoRandomBytes(30).length, 30, "len: " + 30); + assertEquals(pseudoRandomBytes(300).length, 300, "len: " + 300); + assertEquals( + pseudoRandomBytes(17 + MAX_RANDOM_VALUES).length, + 17 + MAX_RANDOM_VALUES, + "len: " + 17 + MAX_RANDOM_VALUES, + ); + assertEquals( + pseudoRandomBytes(MAX_RANDOM_VALUES * 100).length, + MAX_RANDOM_VALUES * 100, + "len: " + MAX_RANDOM_VALUES * 100, + ); + assertThrows(() => pseudoRandomBytes(MAX_SIZE + 1)); + assertThrows(() => pseudoRandomBytes(-1)); +}); diff --git a/ext/node/polyfills/crypto.ts b/ext/node/polyfills/crypto.ts index 53c9fc2eaf..0893932229 100644 --- a/ext/node/polyfills/crypto.ts +++ b/ext/node/polyfills/crypto.ts @@ -306,6 +306,9 @@ const setFips = fipsForced ? setFipsForced : setFipsCrypto; const sign = signOneShot; const verify = verifyOneShot; +/* Deprecated in Node.js, alias of randomBytes */ +const pseudoRandomBytes = randomBytes; + export default { Certificate, checkPrime, @@ -353,6 +356,7 @@ export default { publicDecrypt, publicEncrypt, randomBytes, + pseudoRandomBytes, randomFill, randomFillSync, randomInt, @@ -485,6 +489,8 @@ export { pbkdf2Sync, privateDecrypt, privateEncrypt, + /* Deprecated in Node.js, alias of randomBytes */ + pseudoRandomBytes, publicDecrypt, publicEncrypt, randomBytes,