diff options
Diffstat (limited to 'ext/node/polyfills/internal/crypto')
-rw-r--r-- | ext/node/polyfills/internal/crypto/_randomFill.mjs | 13 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/_randomInt.ts | 6 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/cipher.ts | 46 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/diffiehellman.ts | 26 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/hash.ts | 29 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/hkdf.ts | 14 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/keygen.ts | 35 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/keys.ts | 10 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/pbkdf2.ts | 12 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/random.ts | 33 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/scrypt.ts | 6 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/sig.ts | 13 | ||||
-rw-r--r-- | ext/node/polyfills/internal/crypto/x509.ts | 42 |
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 { |