summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/internal/crypto
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node/polyfills/internal/crypto')
-rw-r--r--ext/node/polyfills/internal/crypto/_randomFill.ts24
-rw-r--r--ext/node/polyfills/internal/crypto/_randomInt.ts11
2 files changed, 18 insertions, 17 deletions
diff --git a/ext/node/polyfills/internal/crypto/_randomFill.ts b/ext/node/polyfills/internal/crypto/_randomFill.ts
index ba8b9cbec..89c374c02 100644
--- a/ext/node/polyfills/internal/crypto/_randomFill.ts
+++ b/ext/node/polyfills/internal/crypto/_randomFill.ts
@@ -1,8 +1,10 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
-import randomBytes, {
+import {
MAX_SIZE as kMaxUint32,
} from "ext:deno_node/internal/crypto/_randomBytes.ts";
import { Buffer } from "ext:deno_node/buffer.ts";
+const { core } = globalThis.__bootstrap;
+const { ops } = core;
const kBufferMaxLength = 0x7fffffff;
@@ -62,11 +64,14 @@ export default function randomFill(
assertOffset(offset as number, buf.length);
assertSize(size as number, offset as number, buf.length);
- randomBytes(size as number, (err, bytes) => {
- if (err) return cb!(err, buf);
- bytes?.copy(buf, offset as number);
- cb!(null, buf);
- });
+ core.opAsync("op_node_generate_secret_async", Math.floor(size as number))
+ .then(
+ (randomData: Uint8Array) => {
+ const randomBuf = Buffer.from(randomData.buffer);
+ randomBuf.copy(buf, offset as number, 0, size as number);
+ cb!(null, buf);
+ },
+ );
}
export function randomFillSync(buf: Buffer, offset = 0, size?: number) {
@@ -76,9 +81,10 @@ export function randomFillSync(buf: Buffer, offset = 0, size?: number) {
assertSize(size, offset, buf.length);
- const bytes = randomBytes(size);
-
- bytes.copy(buf, offset);
+ const bytes: Uint8Array = new Uint8Array(Math.floor(size));
+ ops.op_node_generate_secret(bytes);
+ const bytesBuf: Buffer = Buffer.from(bytes.buffer);
+ bytesBuf.copy(buf, offset, 0, size);
return buf;
}
diff --git a/ext/node/polyfills/internal/crypto/_randomInt.ts b/ext/node/polyfills/internal/crypto/_randomInt.ts
index 637251541..4e55eba9d 100644
--- a/ext/node/polyfills/internal/crypto/_randomInt.ts
+++ b/ext/node/polyfills/internal/crypto/_randomInt.ts
@@ -1,4 +1,6 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+const ops = globalThis.Deno.core.ops;
+
export default function randomInt(max: number): number;
export default function randomInt(min: number, max: number): number;
export default function randomInt(
@@ -40,16 +42,9 @@ export default function randomInt(
throw new Error("Min is bigger than Max!");
}
- const randomBuffer = new Uint32Array(1);
-
- globalThis.crypto.getRandomValues(randomBuffer);
-
- const randomNumber = randomBuffer[0] / (0xffffffff + 1);
-
min = Math.ceil(min);
max = Math.floor(max);
-
- const result = Math.floor(randomNumber * (max - min)) + min;
+ const result = ops.op_node_random_int(min, max);
if (cb) {
cb(null, result);