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.mjs13
-rw-r--r--ext/node/polyfills/internal/crypto/_randomInt.ts6
-rw-r--r--ext/node/polyfills/internal/crypto/cipher.ts46
-rw-r--r--ext/node/polyfills/internal/crypto/diffiehellman.ts26
-rw-r--r--ext/node/polyfills/internal/crypto/hash.ts29
-rw-r--r--ext/node/polyfills/internal/crypto/hkdf.ts14
-rw-r--r--ext/node/polyfills/internal/crypto/keygen.ts35
-rw-r--r--ext/node/polyfills/internal/crypto/keys.ts10
-rw-r--r--ext/node/polyfills/internal/crypto/pbkdf2.ts12
-rw-r--r--ext/node/polyfills/internal/crypto/random.ts33
-rw-r--r--ext/node/polyfills/internal/crypto/scrypt.ts6
-rw-r--r--ext/node/polyfills/internal/crypto/sig.ts13
-rw-r--r--ext/node/polyfills/internal/crypto/x509.ts42
13 files changed, 179 insertions, 106 deletions
diff --git a/ext/node/polyfills/internal/crypto/_randomFill.mjs b/ext/node/polyfills/internal/crypto/_randomFill.mjs
index 7f66cfb4b..cb61e27ef 100644
--- a/ext/node/polyfills/internal/crypto/_randomFill.mjs
+++ b/ext/node/polyfills/internal/crypto/_randomFill.mjs
@@ -3,17 +3,18 @@
// TODO(petamoriken): enable prefer-primordials for node polyfills
// deno-lint-ignore-file prefer-primordials
+import { core } from "ext:core/mod.js";
+const {
+ op_node_generate_secret,
+ op_node_generate_secret_async,
+} = core.ensureFastOps(true);
+
import {
MAX_SIZE as kMaxUint32,
} from "ext:deno_node/internal/crypto/_randomBytes.ts";
import { Buffer } from "node:buffer";
import { isAnyArrayBuffer, isArrayBufferView } from "node:util/types";
import { ERR_INVALID_ARG_TYPE } from "ext:deno_node/internal/errors.ts";
-const { core } = globalThis.__bootstrap;
-const { ops } = core;
-const {
- op_node_generate_secret_async,
-} = core.ensureFastOps();
const kBufferMaxLength = 0x7fffffff;
@@ -87,7 +88,7 @@ export function randomFillSync(buf, offset = 0, size) {
}
const bytes = new Uint8Array(buf.buffer ? buf.buffer : buf, offset, size);
- ops.op_node_generate_secret(bytes);
+ op_node_generate_secret(bytes);
return buf;
}
diff --git a/ext/node/polyfills/internal/crypto/_randomInt.ts b/ext/node/polyfills/internal/crypto/_randomInt.ts
index aba5a9b26..072d74c11 100644
--- a/ext/node/polyfills/internal/crypto/_randomInt.ts
+++ b/ext/node/polyfills/internal/crypto/_randomInt.ts
@@ -4,7 +4,9 @@
// deno-lint-ignore-file prefer-primordials
import { core } from "ext:core/mod.js";
-const ops = core.ops;
+const {
+ op_node_random_int,
+} = core.ensureFastOps();
export default function randomInt(max: number): number;
export default function randomInt(min: number, max: number): number;
@@ -49,7 +51,7 @@ export default function randomInt(
min = Math.ceil(min);
max = Math.floor(max);
- const result = ops.op_node_random_int(min, max);
+ const result = op_node_random_int(min, max);
if (cb) {
cb(null, result);
diff --git a/ext/node/polyfills/internal/crypto/cipher.ts b/ext/node/polyfills/internal/crypto/cipher.ts
index 164d6d11d..fdbdb6fd4 100644
--- a/ext/node/polyfills/internal/crypto/cipher.ts
+++ b/ext/node/polyfills/internal/crypto/cipher.ts
@@ -4,6 +4,24 @@
// TODO(petamoriken): enable prefer-primordials for node polyfills
// deno-lint-ignore-file prefer-primordials
+import { core } from "ext:core/mod.js";
+const {
+ encode,
+} = core;
+const {
+ op_node_cipheriv_encrypt,
+ op_node_cipheriv_final,
+ op_node_cipheriv_set_aad,
+ op_node_create_cipheriv,
+ op_node_create_decipheriv,
+ op_node_decipheriv_decrypt,
+ op_node_decipheriv_final,
+ op_node_decipheriv_set_aad,
+ op_node_private_decrypt,
+ op_node_private_encrypt,
+ op_node_public_encrypt,
+} = core.ensureFastOps();
+
import { ERR_INVALID_ARG_TYPE } from "ext:deno_node/internal/errors.ts";
import {
validateInt32,
@@ -35,8 +53,6 @@ export function isStringOrBuffer(val) {
Buffer.isBuffer(val);
}
-const { ops, encode } = globalThis.__bootstrap.core;
-
const NO_TAG = new Uint8Array();
export type CipherCCMTypes =
@@ -168,7 +184,7 @@ export class Cipheriv extends Transform implements Cipher {
...options,
});
this.#cache = new BlockModeCache(false);
- this.#context = ops.op_node_create_cipheriv(cipher, toU8(key), toU8(iv));
+ this.#context = op_node_create_cipheriv(cipher, toU8(key), toU8(iv));
this.#needsBlockCache =
!(cipher == "aes-128-gcm" || cipher == "aes-256-gcm");
if (this.#context == 0) {
@@ -178,7 +194,7 @@ export class Cipheriv extends Transform implements Cipher {
final(encoding: string = getDefaultEncoding()): Buffer | string {
const buf = new Buffer(16);
- const maybeTag = ops.op_node_cipheriv_final(
+ const maybeTag = op_node_cipheriv_final(
this.#context,
this.#cache.cache,
buf,
@@ -200,7 +216,7 @@ export class Cipheriv extends Transform implements Cipher {
plaintextLength: number;
},
): this {
- ops.op_node_cipheriv_set_aad(this.#context, buffer);
+ op_node_cipheriv_set_aad(this.#context, buffer);
return this;
}
@@ -223,7 +239,7 @@ export class Cipheriv extends Transform implements Cipher {
let output;
if (!this.#needsBlockCache) {
output = Buffer.allocUnsafe(buf.length);
- ops.op_node_cipheriv_encrypt(this.#context, buf, output);
+ op_node_cipheriv_encrypt(this.#context, buf, output);
return outputEncoding === "buffer"
? output
: output.toString(outputEncoding);
@@ -236,7 +252,7 @@ export class Cipheriv extends Transform implements Cipher {
output = Buffer.alloc(0);
} else {
output = Buffer.allocUnsafe(input.length);
- ops.op_node_cipheriv_encrypt(this.#context, input, output);
+ op_node_cipheriv_encrypt(this.#context, input, output);
}
return outputEncoding === "buffer"
? output
@@ -311,7 +327,7 @@ export class Decipheriv extends Transform implements Cipher {
...options,
});
this.#cache = new BlockModeCache(true);
- this.#context = ops.op_node_create_decipheriv(cipher, toU8(key), toU8(iv));
+ this.#context = op_node_create_decipheriv(cipher, toU8(key), toU8(iv));
this.#needsBlockCache =
!(cipher == "aes-128-gcm" || cipher == "aes-256-gcm");
if (this.#context == 0) {
@@ -321,7 +337,7 @@ export class Decipheriv extends Transform implements Cipher {
final(encoding: string = getDefaultEncoding()): Buffer | string {
let buf = new Buffer(16);
- ops.op_node_decipheriv_final(
+ op_node_decipheriv_final(
this.#context,
this.#cache.cache,
buf,
@@ -342,7 +358,7 @@ export class Decipheriv extends Transform implements Cipher {
plaintextLength: number;
},
): this {
- ops.op_node_decipheriv_set_aad(this.#context, buffer);
+ op_node_decipheriv_set_aad(this.#context, buffer);
return this;
}
@@ -369,7 +385,7 @@ export class Decipheriv extends Transform implements Cipher {
let output;
if (!this.#needsBlockCache) {
output = Buffer.allocUnsafe(buf.length);
- ops.op_node_decipheriv_decrypt(this.#context, buf, output);
+ op_node_decipheriv_decrypt(this.#context, buf, output);
return outputEncoding === "buffer"
? output
: output.toString(outputEncoding);
@@ -381,7 +397,7 @@ export class Decipheriv extends Transform implements Cipher {
output = Buffer.alloc(0);
} else {
output = new Buffer(input.length);
- ops.op_node_decipheriv_decrypt(this.#context, input, output);
+ op_node_decipheriv_decrypt(this.#context, input, output);
}
return outputEncoding === "buffer"
? output
@@ -432,7 +448,7 @@ export function privateEncrypt(
const padding = privateKey.padding || 1;
buffer = getArrayBufferOrView(buffer, "buffer");
- return ops.op_node_private_encrypt(data, buffer, padding);
+ return op_node_private_encrypt(data, buffer, padding);
}
export function privateDecrypt(
@@ -443,7 +459,7 @@ export function privateDecrypt(
const padding = privateKey.padding || 1;
buffer = getArrayBufferOrView(buffer, "buffer");
- return ops.op_node_private_decrypt(data, buffer, padding);
+ return op_node_private_decrypt(data, buffer, padding);
}
export function publicEncrypt(
@@ -454,7 +470,7 @@ export function publicEncrypt(
const padding = publicKey.padding || 1;
buffer = getArrayBufferOrView(buffer, "buffer");
- return ops.op_node_public_encrypt(data, buffer, padding);
+ return op_node_public_encrypt(data, buffer, padding);
}
export function prepareKey(key) {
diff --git a/ext/node/polyfills/internal/crypto/diffiehellman.ts b/ext/node/polyfills/internal/crypto/diffiehellman.ts
index 315c37278..fbcdab185 100644
--- a/ext/node/polyfills/internal/crypto/diffiehellman.ts
+++ b/ext/node/polyfills/internal/crypto/diffiehellman.ts
@@ -4,6 +4,18 @@
// TODO(petamoriken): enable prefer-primordials for node polyfills
// deno-lint-ignore-file prefer-primordials
+import { core } from "ext:core/mod.js";
+const {
+ op_node_dh_compute_secret,
+ op_node_dh_generate2,
+ op_node_ecdh_compute_secret,
+ op_node_ecdh_generate_keys,
+ op_node_ecdh_compute_public_key,
+} = core.ensureFastOps();
+const {
+ op_node_gen_prime,
+} = core.ensureFastOps(true);
+
import { notImplemented } from "ext:deno_node/_utils.ts";
import {
isAnyArrayBuffer,
@@ -33,8 +45,6 @@ import type {
import { KeyObject } from "ext:deno_node/internal/crypto/keys.ts";
import type { BufferEncoding } from "ext:deno_node/_global.d.ts";
-const { ops } = Deno.core;
-
const DH_GENERATOR = 2;
export class DiffieHellman {
@@ -92,7 +102,7 @@ export class DiffieHellman {
}
this.#prime = Buffer.from(
- ops.op_node_gen_prime(this.#primeLength).buffer,
+ op_node_gen_prime(this.#primeLength).buffer,
);
}
@@ -173,7 +183,7 @@ export class DiffieHellman {
buf = Buffer.from(otherPublicKey.buffer);
}
- const sharedSecret = ops.op_node_dh_compute_secret(
+ const sharedSecret = op_node_dh_compute_secret(
this.#prime,
this.#privateKey,
buf,
@@ -190,7 +200,7 @@ export class DiffieHellman {
generateKeys(encoding: BinaryToTextEncoding): string;
generateKeys(_encoding?: BinaryToTextEncoding): Buffer | string {
const generator = this.#checkGenerator();
- const [privateKey, publicKey] = ops.op_node_dh_generate2(
+ const [privateKey, publicKey] = op_node_dh_generate2(
this.#prime,
this.#primeLength ?? 0,
generator,
@@ -1215,7 +1225,7 @@ export class ECDH {
): Buffer | string {
const secretBuf = Buffer.alloc(this.#curve.sharedSecretSize);
- ops.op_node_ecdh_compute_secret(
+ op_node_ecdh_compute_secret(
this.#curve.name,
this.#privbuf,
otherPublicKey,
@@ -1231,7 +1241,7 @@ export class ECDH {
encoding?: BinaryToTextEncoding,
_format?: ECDHKeyFormat,
): Buffer | string {
- ops.op_node_ecdh_generate_keys(
+ op_node_ecdh_generate_keys(
this.#curve.name,
this.#pubbuf,
this.#privbuf,
@@ -1273,7 +1283,7 @@ export class ECDH {
this.#privbuf = privateKey;
this.#pubbuf = Buffer.alloc(this.#curve.publicKeySize);
- ops.op_node_ecdh_compute_public_key(
+ op_node_ecdh_compute_public_key(
this.#curve.name,
this.#privbuf,
this.#pubbuf,
diff --git a/ext/node/polyfills/internal/crypto/hash.ts b/ext/node/polyfills/internal/crypto/hash.ts
index 6188e59d6..8d56f601e 100644
--- a/ext/node/polyfills/internal/crypto/hash.ts
+++ b/ext/node/polyfills/internal/crypto/hash.ts
@@ -4,6 +4,17 @@
// TODO(petamoriken): enable prefer-primordials for node polyfills
// deno-lint-ignore-file prefer-primordials
+import { core } from "ext:core/mod.js";
+const {
+ op_node_create_hash,
+ op_node_get_hashes,
+ op_node_hash_clone,
+ op_node_hash_digest_hex,
+ op_node_hash_digest,
+ op_node_hash_update_str,
+ op_node_hash_update,
+} = core.ensureFastOps();
+
import { TextEncoder } from "ext:deno_web/08_text_encoding.js";
import { Buffer } from "node:buffer";
import { Transform } from "node:stream";
@@ -23,8 +34,6 @@ import {
prepareSecretKey,
} from "ext:deno_node/internal/crypto/keys.ts";
-const { ops } = globalThis.__bootstrap.core;
-
// TODO(@littledivy): Use Result<T, E> instead of boolean when
// https://bugs.chromium.org/p/v8/issues/detail?id=13600 is fixed.
function unwrapErr(ok: boolean) {
@@ -65,7 +74,7 @@ export class Hash extends Transform {
) {
super({
transform(chunk: string, _encoding: string, callback: () => void) {
- ops.op_node_hash_update(context, coerceToBytes(chunk));
+ op_node_hash_update(context, coerceToBytes(chunk));
callback();
},
flush(callback: () => void) {
@@ -75,7 +84,7 @@ export class Hash extends Transform {
});
if (typeof algorithm === "string") {
- this.#context = ops.op_node_create_hash(
+ this.#context = op_node_create_hash(
algorithm.toLowerCase(),
);
if (this.#context === 0) {
@@ -89,7 +98,7 @@ export class Hash extends Transform {
}
copy(): Hash {
- return new Hash(ops.op_node_clone_hash(this.#context));
+ return new Hash(op_node_hash_clone(this.#context));
}
/**
@@ -97,9 +106,9 @@ export class Hash extends Transform {
*/
update(data: string | ArrayBuffer, _encoding?: string): this {
if (typeof data === "string") {
- unwrapErr(ops.op_node_hash_update_str(this.#context, data));
+ unwrapErr(op_node_hash_update_str(this.#context, data));
} else {
- unwrapErr(ops.op_node_hash_update(this.#context, coerceToBytes(data)));
+ unwrapErr(op_node_hash_update(this.#context, coerceToBytes(data)));
}
return this;
@@ -114,10 +123,10 @@ export class Hash extends Transform {
*/
digest(encoding?: string): Buffer | string {
if (encoding === "hex") {
- return ops.op_node_hash_digest_hex(this.#context);
+ return op_node_hash_digest_hex(this.#context);
}
- const digest = ops.op_node_hash_digest(this.#context);
+ const digest = op_node_hash_digest(this.#context);
if (encoding === undefined) {
return Buffer.from(digest);
}
@@ -237,7 +246,7 @@ export function createHash(algorithm: string, opts?: TransformOptions) {
* @returns Array of hash algorithm names.
*/
export function getHashes() {
- return ops.op_node_get_hashes();
+ return op_node_get_hashes();
}
export default {
diff --git a/ext/node/polyfills/internal/crypto/hkdf.ts b/ext/node/polyfills/internal/crypto/hkdf.ts
index 50b64001f..8e09f6388 100644
--- a/ext/node/polyfills/internal/crypto/hkdf.ts
+++ b/ext/node/polyfills/internal/crypto/hkdf.ts
@@ -4,6 +4,12 @@
// TODO(petamoriken): enable prefer-primordials for node polyfills
// deno-lint-ignore-file prefer-primordials
+import { core } from "ext:core/mod.js";
+const {
+ op_node_hkdf,
+ op_node_hkdf_async,
+} = core.ensureFastOps();
+
import {
validateFunction,
validateInteger,
@@ -31,12 +37,6 @@ import {
isArrayBufferView,
} from "ext:deno_node/internal/util/types.ts";
-const { core } = globalThis.__bootstrap;
-const { ops } = core;
-const {
- op_node_hkdf_async,
-} = core.ensureFastOps();
-
const validateParameters = hideStackFrames((hash, key, salt, info, length) => {
validateString(hash, "digest");
key = new Uint8Array(prepareKey(key));
@@ -134,7 +134,7 @@ export function hkdfSync(
const okm = new Uint8Array(length);
try {
- ops.op_node_hkdf(hash, key, salt, info, okm);
+ op_node_hkdf(hash, key, salt, info, okm);
} catch (e) {
throw new ERR_CRYPTO_INVALID_DIGEST(e);
}
diff --git a/ext/node/polyfills/internal/crypto/keygen.ts b/ext/node/polyfills/internal/crypto/keygen.ts
index d11399caf..7b6c58d59 100644
--- a/ext/node/polyfills/internal/crypto/keygen.ts
+++ b/ext/node/polyfills/internal/crypto/keygen.ts
@@ -29,18 +29,27 @@ import {
import { Buffer } from "node:buffer";
import { KeyFormat, KeyType } from "ext:deno_node/internal/crypto/types.ts";
-const { core } = globalThis.__bootstrap;
-const { ops } = core;
+import { core } from "ext:core/mod.js";
const {
+ op_node_dh_generate,
op_node_dh_generate_async,
+ op_node_dh_generate_group,
op_node_dh_generate_group_async,
+ op_node_dsa_generate,
op_node_dsa_generate_async,
+ op_node_ec_generate,
op_node_ec_generate_async,
- op_node_generate_rsa_async,
- op_node_generate_secret_async,
+ op_node_ed25519_generate,
op_node_ed25519_generate_async,
+ op_node_generate_rsa,
+ op_node_generate_rsa_async,
+ op_node_x25519_generate,
op_node_x25519_generate_async,
} = core.ensureFastOps();
+const {
+ op_node_generate_secret,
+ op_node_generate_secret_async,
+} = core.ensureFastOps(true);
function validateGenerateKey(
type: "hmac" | "aes",
@@ -75,7 +84,7 @@ export function generateKeySync(
const { length } = options;
const key = new Uint8Array(Math.floor(length / 8));
- ops.op_node_generate_secret(key);
+ op_node_generate_secret(key);
return new SecretKeyObject(setOwnedKey(key));
}
@@ -804,7 +813,7 @@ function createJob(mode, type, options) {
if (type === "rsa") {
if (mode === kSync) {
- return ops.op_node_generate_rsa(
+ return op_node_generate_rsa(
modulusLength,
publicExponent,
);
@@ -859,7 +868,7 @@ function createJob(mode, type, options) {
}
if (mode === kSync) {
- return ops.op_node_generate_rsa(
+ return op_node_generate_rsa(
modulusLength,
publicExponent,
);
@@ -883,7 +892,7 @@ function createJob(mode, type, options) {
}
if (mode === kSync) {
- return ops.op_node_dsa_generate(modulusLength, divisorLength);
+ return op_node_dsa_generate(modulusLength, divisorLength);
}
return op_node_dsa_generate_async(
modulusLength,
@@ -905,20 +914,20 @@ function createJob(mode, type, options) {
}
if (mode === kSync) {
- return ops.op_node_ec_generate(namedCurve);
+ return op_node_ec_generate(namedCurve);
} else {
return op_node_ec_generate_async(namedCurve);
}
}
case "ed25519": {
if (mode === kSync) {
- return ops.op_node_ed25519_generate();
+ return op_node_ed25519_generate();
}
return op_node_ed25519_generate_async();
}
case "x25519": {
if (mode === kSync) {
- return ops.op_node_x25519_generate();
+ return op_node_x25519_generate();
}
return op_node_x25519_generate_async();
}
@@ -944,7 +953,7 @@ function createJob(mode, type, options) {
validateString(group, "options.group");
if (mode === kSync) {
- return ops.op_node_dh_generate_group(group);
+ return op_node_dh_generate_group(group);
} else {
return op_node_dh_generate_group_async(group);
}
@@ -971,7 +980,7 @@ function createJob(mode, type, options) {
const g = generator == null ? 2 : generator;
if (mode === kSync) {
- return ops.op_node_dh_generate(prime, primeLength ?? 0, g);
+ return op_node_dh_generate(prime, primeLength ?? 0, g);
} else {
return op_node_dh_generate_async(
prime,
diff --git a/ext/node/polyfills/internal/crypto/keys.ts b/ext/node/polyfills/internal/crypto/keys.ts
index 0f2c7f985..f1da42daf 100644
--- a/ext/node/polyfills/internal/crypto/keys.ts
+++ b/ext/node/polyfills/internal/crypto/keys.ts
@@ -4,6 +4,11 @@
// TODO(petamoriken): enable prefer-primordials for node polyfills
// deno-lint-ignore-file prefer-primordials
+import { core } from "ext:core/mod.js";
+const {
+ op_node_create_private_key,
+} = core.ensureFastOps();
+
import {
kHandle,
kKeyObject,
@@ -39,9 +44,6 @@ import {
forgivingBase64UrlEncode as encodeToBase64Url,
} from "ext:deno_web/00_infra.js";
-const { core } = globalThis.__bootstrap;
-const { ops } = core;
-
export const getArrayBufferOrView = hideStackFrames(
(
buffer,
@@ -234,7 +236,7 @@ export function createPrivateKey(
key: PrivateKeyInput | string | Buffer | JsonWebKeyInput,
): PrivateKeyObject {
const { data, format, type } = prepareAsymmetricKey(key);
- const details = ops.op_node_create_private_key(data, format, type);
+ const details = op_node_create_private_key(data, format, type);
const handle = setOwnedKey(copyBuffer(data));
return new PrivateKeyObject(handle, details);
}
diff --git a/ext/node/polyfills/internal/crypto/pbkdf2.ts b/ext/node/polyfills/internal/crypto/pbkdf2.ts
index e365ef3f0..47c66043c 100644
--- a/ext/node/polyfills/internal/crypto/pbkdf2.ts
+++ b/ext/node/polyfills/internal/crypto/pbkdf2.ts
@@ -3,13 +3,15 @@
// TODO(petamoriken): enable prefer-primordials for node polyfills
// deno-lint-ignore-file prefer-primordials
+import { core } from "ext:core/mod.js";
+const {
+ op_node_pbkdf2,
+ op_node_pbkdf2_async,
+} = core.ensureFastOps();
+
import { Buffer } from "node:buffer";
import { HASH_DATA } from "ext:deno_node/internal/crypto/types.ts";
-const { core } = globalThis.__bootstrap;
-const { ops } = core;
-const { op_node_pbkdf2_async } = core.ensureFastOps();
-
export const MAX_ALLOC = Math.pow(2, 30) - 1;
export type NormalizedAlgorithms =
@@ -51,7 +53,7 @@ export function pbkdf2Sync(
}
const DK = new Uint8Array(keylen);
- if (!ops.op_node_pbkdf2(password, salt, iterations, digest, DK)) {
+ if (!op_node_pbkdf2(password, salt, iterations, digest, DK)) {
throw new Error("Invalid digest");
}
diff --git a/ext/node/polyfills/internal/crypto/random.ts b/ext/node/polyfills/internal/crypto/random.ts
index 450754734..52f6db272 100644
--- a/ext/node/polyfills/internal/crypto/random.ts
+++ b/ext/node/polyfills/internal/crypto/random.ts
@@ -4,6 +4,22 @@
// TODO(petamoriken): enable prefer-primordials for node polyfills
// deno-lint-ignore-file prefer-primordials
+import { core, primordials } from "ext:core/mod.js";
+const {
+ op_node_check_prime,
+ op_node_check_prime_async,
+ op_node_check_prime_bytes,
+ op_node_check_prime_bytes_async,
+ op_node_gen_prime_async,
+} = core.ensureFastOps();
+const {
+ op_node_gen_prime,
+} = core.ensureFastOps(true);
+const {
+ StringPrototypePadStart,
+ StringPrototypeToString,
+} = primordials;
+
import { notImplemented } from "ext:deno_node/_utils.ts";
import randomBytes from "ext:deno_node/internal/crypto/_randomBytes.ts";
import randomFill, {
@@ -32,17 +48,6 @@ export {
} from "ext:deno_node/internal/crypto/_randomFill.mjs";
export { default as randomInt } from "ext:deno_node/internal/crypto/_randomInt.ts";
-import { primordials } from "ext:core/mod.js";
-const { StringPrototypePadStart, StringPrototypeToString } = primordials;
-
-const { core } = globalThis.__bootstrap;
-const { ops } = core;
-const {
- op_node_gen_prime_async,
- op_node_check_prime_bytes_async,
- op_node_check_prime_async,
-} = Deno.core.ensureFastOps();
-
export type LargeNumberLike =
| ArrayBufferView
| SharedArrayBuffer
@@ -129,7 +134,7 @@ export function checkPrimeSync(
validateInt32(checks, "options.checks", 0);
if (typeof candidate === "bigint") {
- return ops.op_node_check_prime(candidate, checks);
+ return op_node_check_prime(candidate, checks);
} else if (!isAnyArrayBuffer(candidate) && !isArrayBufferView(candidate)) {
throw new ERR_INVALID_ARG_TYPE(
"candidate",
@@ -144,7 +149,7 @@ export function checkPrimeSync(
);
}
- return ops.op_node_check_prime_bytes(candidate, checks);
+ return op_node_check_prime_bytes(candidate, checks);
}
export interface GeneratePrimeOptions {
@@ -186,7 +191,7 @@ export function generatePrimeSync(
bigint,
} = validateRandomPrimeJob(size, options);
- const prime = ops.op_node_gen_prime(size);
+ const prime = op_node_gen_prime(size);
if (bigint) return arrayBufferToUnsignedBigInt(prime.buffer);
return prime.buffer;
}
diff --git a/ext/node/polyfills/internal/crypto/scrypt.ts b/ext/node/polyfills/internal/crypto/scrypt.ts
index 49dd815c6..7de5a3ab8 100644
--- a/ext/node/polyfills/internal/crypto/scrypt.ts
+++ b/ext/node/polyfills/internal/crypto/scrypt.ts
@@ -29,9 +29,9 @@ SOFTWARE.
import { Buffer } from "node:buffer";
import { HASH_DATA } from "ext:deno_node/internal/crypto/types.ts";
-const { core } = globalThis.__bootstrap;
-const { ops } = core;
+import { core } from "ext:core/mod.js";
const {
+ op_node_scrypt_sync,
op_node_scrypt_async,
} = core.ensureFastOps();
@@ -78,7 +78,7 @@ export function scryptSync(
}
const buf = Buffer.alloc(keylen);
- ops.op_node_scrypt_sync(
+ op_node_scrypt_sync(
password,
salt,
keylen,
diff --git a/ext/node/polyfills/internal/crypto/sig.ts b/ext/node/polyfills/internal/crypto/sig.ts
index 066857d51..fb303e4e2 100644
--- a/ext/node/polyfills/internal/crypto/sig.ts
+++ b/ext/node/polyfills/internal/crypto/sig.ts
@@ -4,6 +4,12 @@
// TODO(petamoriken): enable prefer-primordials for node polyfills
// deno-lint-ignore-file prefer-primordials
+import { core } from "ext:core/mod.js";
+const {
+ op_node_sign,
+ op_node_verify,
+} = core.ensureFastOps();
+
import { notImplemented } from "ext:deno_node/_utils.ts";
import {
validateFunction,
@@ -28,9 +34,6 @@ import { KeyFormat, KeyType } from "ext:deno_node/internal/crypto/types.ts";
import { isArrayBufferView } from "ext:deno_node/internal/util/types.ts";
import { ERR_CRYPTO_SIGN_KEY_REQUIRED } from "ext:deno_node/internal/errors.ts";
-const { core } = globalThis.__bootstrap;
-const { ops } = core;
-
export type DSAEncoding = "der" | "ieee-p1363";
export interface SigningOptions {
@@ -81,7 +84,7 @@ export class SignImpl extends Writable {
encoding?: BinaryToTextEncoding,
): Buffer | string {
const { data, format, type } = prepareAsymmetricKey(privateKey);
- const ret = Buffer.from(ops.op_node_sign(
+ const ret = Buffer.from(op_node_sign(
this.hash.digest(),
this.#digestType,
data!,
@@ -157,7 +160,7 @@ export class VerifyImpl extends Writable {
"crypto.Verify.prototype.verify with non BinaryLike input",
);
}
- return ops.op_node_verify(
+ return op_node_verify(
this.hash.digest(),
this.#digestType,
keyData!,
diff --git a/ext/node/polyfills/internal/crypto/x509.ts b/ext/node/polyfills/internal/crypto/x509.ts
index 07037bd4a..380deefc3 100644
--- a/ext/node/polyfills/internal/crypto/x509.ts
+++ b/ext/node/polyfills/internal/crypto/x509.ts
@@ -4,6 +4,22 @@
// TODO(petamoriken): enable prefer-primordials for node polyfills
// deno-lint-ignore-file prefer-primordials
+import { core } from "ext:core/mod.js";
+const {
+ op_node_x509_ca,
+ op_node_x509_check_email,
+ op_node_x509_fingerprint,
+ op_node_x509_fingerprint256,
+ op_node_x509_fingerprint512,
+ op_node_x509_get_issuer,
+ op_node_x509_get_serial_number,
+ op_node_x509_get_subject,
+ op_node_x509_get_valid_from,
+ op_node_x509_get_valid_to,
+ op_node_x509_key_usage,
+ op_node_x509_parse,
+} = core.ensureFastOps();
+
import { KeyObject } from "ext:deno_node/internal/crypto/keys.ts";
import { Buffer } from "node:buffer";
import { ERR_INVALID_ARG_TYPE } from "ext:deno_node/internal/errors.ts";
@@ -12,8 +28,6 @@ import { validateString } from "ext:deno_node/internal/validators.mjs";
import { notImplemented } from "ext:deno_node/_utils.ts";
import { BinaryLike } from "ext:deno_node/internal/crypto/types.ts";
-const { ops } = globalThis.__bootstrap.core;
-
// deno-lint-ignore no-explicit-any
export type PeerCertificate = any;
@@ -56,11 +70,11 @@ export class X509Certificate {
);
}
- this.#handle = ops.op_node_x509_parse(buffer);
+ this.#handle = op_node_x509_parse(buffer);
}
get ca(): boolean {
- return ops.op_node_x509_ca(this.#handle);
+ return op_node_x509_ca(this.#handle);
}
checkEmail(
@@ -68,7 +82,7 @@ export class X509Certificate {
_options?: Pick<X509CheckOptions, "subject">,
): string | undefined {
validateString(email, "email");
- if (ops.op_node_x509_check_email(this.#handle, email)) {
+ if (op_node_x509_check_email(this.#handle, email)) {
return email;
}
}
@@ -90,15 +104,15 @@ export class X509Certificate {
}
get fingerprint(): string {
- return ops.op_node_x509_fingerprint(this.#handle);
+ return op_node_x509_fingerprint(this.#handle);
}
get fingerprint256(): string {
- return ops.op_node_x509_fingerprint256(this.#handle);
+ return op_node_x509_fingerprint256(this.#handle);
}
get fingerprint512(): string {
- return ops.op_node_x509_fingerprint512(this.#handle);
+ return op_node_x509_fingerprint512(this.#handle);
}
get infoAccess(): string | undefined {
@@ -108,7 +122,7 @@ export class X509Certificate {
}
get issuer(): string {
- return ops.op_node_x509_get_issuer(this.#handle);
+ return op_node_x509_get_issuer(this.#handle);
}
get issuerCertificate(): X509Certificate | undefined {
@@ -116,7 +130,7 @@ export class X509Certificate {
}
get keyUsage(): string[] | undefined {
- const flags = ops.op_node_x509_key_usage(this.#handle);
+ const flags = op_node_x509_key_usage(this.#handle);
if (flags === 0) return undefined;
const result: string[] = [];
if (flags & 0x01) result.push("DigitalSignature");
@@ -144,11 +158,11 @@ export class X509Certificate {
}
get serialNumber(): string {
- return ops.op_node_x509_get_serial_number(this.#handle);
+ return op_node_x509_get_serial_number(this.#handle);
}
get subject(): string {
- return ops.op_node_x509_get_subject(this.#handle);
+ return op_node_x509_get_subject(this.#handle);
}
get subjectAltName(): string | undefined {
@@ -168,11 +182,11 @@ export class X509Certificate {
}
get validFrom(): string {
- return ops.op_node_x509_get_valid_from(this.#handle);
+ return op_node_x509_get_valid_from(this.#handle);
}
get validTo(): string {
- return ops.op_node_x509_get_valid_to(this.#handle);
+ return op_node_x509_get_valid_to(this.#handle);
}
verify(_publicKey: KeyObject): boolean {