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/_randomInt.ts26
-rw-r--r--ext/node/polyfills/internal/crypto/keygen.ts21
-rw-r--r--ext/node/polyfills/internal/crypto/random.ts1
3 files changed, 35 insertions, 13 deletions
diff --git a/ext/node/polyfills/internal/crypto/_randomInt.ts b/ext/node/polyfills/internal/crypto/_randomInt.ts
index 7f4d703ad..e08b3e963 100644
--- a/ext/node/polyfills/internal/crypto/_randomInt.ts
+++ b/ext/node/polyfills/internal/crypto/_randomInt.ts
@@ -1,9 +1,15 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
-// TODO(petamoriken): enable prefer-primordials for node polyfills
-// deno-lint-ignore-file prefer-primordials
-
import { op_node_random_int } from "ext:core/ops";
+import { primordials } from "ext:core/mod.js";
+const {
+ Error,
+ MathCeil,
+ MathFloor,
+ MathPow,
+ NumberIsSafeInteger,
+ RangeError,
+} = primordials;
export default function randomInt(max: number): number;
export default function randomInt(min: number, max: number): number;
@@ -23,7 +29,9 @@ export default function randomInt(
cb?: (err: Error | null, n?: number) => void,
): number | void {
if (typeof max === "number" && typeof min === "number") {
- [max, min] = [min, max];
+ const temp = max;
+ max = min;
+ min = temp;
}
if (min === undefined) min = 0;
else if (typeof min === "function") {
@@ -32,13 +40,13 @@ export default function randomInt(
}
if (
- !Number.isSafeInteger(min) ||
- typeof max === "number" && !Number.isSafeInteger(max)
+ !NumberIsSafeInteger(min) ||
+ typeof max === "number" && !NumberIsSafeInteger(max)
) {
throw new Error("max or min is not a Safe Number");
}
- if (max - min > Math.pow(2, 48)) {
+ if (max - min > MathPow(2, 48)) {
throw new RangeError("max - min should be less than 2^48!");
}
@@ -46,8 +54,8 @@ export default function randomInt(
throw new Error("Min is bigger than Max!");
}
- min = Math.ceil(min);
- max = Math.floor(max);
+ min = MathCeil(min);
+ max = MathFloor(max);
const result = op_node_random_int(min, max);
if (cb) {
diff --git a/ext/node/polyfills/internal/crypto/keygen.ts b/ext/node/polyfills/internal/crypto/keygen.ts
index a40c76c0d..b023ab106 100644
--- a/ext/node/polyfills/internal/crypto/keygen.ts
+++ b/ext/node/polyfills/internal/crypto/keygen.ts
@@ -29,6 +29,8 @@ import {
} from "ext:deno_node/internal/validators.mjs";
import { Buffer } from "node:buffer";
import { KeyFormat, KeyType } from "ext:deno_node/internal/crypto/types.ts";
+import process from "node:process";
+import { promisify } from "node:util";
import {
op_node_generate_dh_group_key,
@@ -569,7 +571,15 @@ export function generateKeyPair(
privateKey: any,
) => void,
) {
- createJob(kAsync, type, options).then((pair) => {
+ _generateKeyPair(type, options)
+ .then(
+ (res) => callback(null, res.publicKey, res.privateKey),
+ (err) => callback(err, null, null),
+ );
+}
+
+function _generateKeyPair(type: string, options: unknown) {
+ return createJob(kAsync, type, options).then((pair) => {
const privateKeyHandle = op_node_get_private_key_from_pair(pair);
const publicKeyHandle = op_node_get_public_key_from_pair(pair);
@@ -588,12 +598,15 @@ export function generateKeyPair(
}
}
- callback(null, publicKey, privateKey);
- }).catch((err) => {
- callback(err, null, null);
+ return { publicKey, privateKey };
});
}
+Object.defineProperty(generateKeyPair, promisify.custom, {
+ enumerable: false,
+ value: _generateKeyPair,
+});
+
export interface KeyPairKeyObjectResult {
publicKey: KeyObject;
privateKey: KeyObject;
diff --git a/ext/node/polyfills/internal/crypto/random.ts b/ext/node/polyfills/internal/crypto/random.ts
index 4219414dc..a41b86819 100644
--- a/ext/node/polyfills/internal/crypto/random.ts
+++ b/ext/node/polyfills/internal/crypto/random.ts
@@ -38,6 +38,7 @@ import {
ERR_INVALID_ARG_TYPE,
ERR_OUT_OF_RANGE,
} from "ext:deno_node/internal/errors.ts";
+import { Buffer } from "node:buffer";
export { default as randomBytes } from "ext:deno_node/internal/crypto/_randomBytes.ts";
export {