summaryrefslogtreecommitdiff
path: root/ext/node/polyfills/internal/crypto/util.ts
diff options
context:
space:
mode:
Diffstat (limited to 'ext/node/polyfills/internal/crypto/util.ts')
-rw-r--r--ext/node/polyfills/internal/crypto/util.ts129
1 files changed, 129 insertions, 0 deletions
diff --git a/ext/node/polyfills/internal/crypto/util.ts b/ext/node/polyfills/internal/crypto/util.ts
new file mode 100644
index 000000000..f9fce8b2d
--- /dev/null
+++ b/ext/node/polyfills/internal/crypto/util.ts
@@ -0,0 +1,129 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+// Copyright Joyent, Inc. and Node.js contributors. All rights reserved. MIT license.
+
+import { getCiphers } from "internal:deno_node/polyfills/_crypto/crypto_browserify/browserify_aes/mod.js";
+import { notImplemented } from "internal:deno_node/polyfills/_utils.ts";
+import { Buffer } from "internal:deno_node/polyfills/buffer.ts";
+import {
+ ERR_INVALID_ARG_TYPE,
+ hideStackFrames,
+} from "internal:deno_node/polyfills/internal/errors.ts";
+import {
+ isAnyArrayBuffer,
+ isArrayBufferView,
+} from "internal:deno_node/polyfills/internal/util/types.ts";
+import { crypto as constants } from "internal:deno_node/polyfills/internal_binding/constants.ts";
+import {
+ kHandle,
+ kKeyObject,
+} from "internal:deno_node/polyfills/internal/crypto/constants.ts";
+
+// TODO(kt3k): Generate this list from `digestAlgorithms`
+// of std/crypto/_wasm/mod.ts
+const digestAlgorithms = [
+ "blake2b256",
+ "blake2b384",
+ "blake2b",
+ "blake2s",
+ "blake3",
+ "keccak-224",
+ "keccak-256",
+ "keccak-384",
+ "keccak-512",
+ "sha384",
+ "sha3-224",
+ "sha3-256",
+ "sha3-384",
+ "sha3-512",
+ "shake128",
+ "shake256",
+ "tiger",
+ "rmd160",
+ "sha224",
+ "sha256",
+ "sha512",
+ "md4",
+ "md5",
+ "sha1",
+];
+
+let defaultEncoding = "buffer";
+
+export function setDefaultEncoding(val: string) {
+ defaultEncoding = val;
+}
+
+export function getDefaultEncoding(): string {
+ return defaultEncoding;
+}
+
+// This is here because many functions accepted binary strings without
+// any explicit encoding in older versions of node, and we don't want
+// to break them unnecessarily.
+export function toBuf(val: string | Buffer, encoding?: string): Buffer {
+ if (typeof val === "string") {
+ if (encoding === "buffer") {
+ encoding = "utf8";
+ }
+
+ return Buffer.from(val, encoding);
+ }
+
+ return val;
+}
+
+export const validateByteSource = hideStackFrames((val, name) => {
+ val = toBuf(val);
+
+ if (isAnyArrayBuffer(val) || isArrayBufferView(val)) {
+ return;
+ }
+
+ throw new ERR_INVALID_ARG_TYPE(
+ name,
+ ["string", "ArrayBuffer", "TypedArray", "DataView", "Buffer"],
+ val,
+ );
+});
+
+/**
+ * Returns an array of the names of the supported hash algorithms, such as 'sha1'.
+ */
+export function getHashes(): readonly string[] {
+ return digestAlgorithms;
+}
+
+export function getCurves(): readonly string[] {
+ notImplemented("crypto.getCurves");
+}
+
+export interface SecureHeapUsage {
+ total: number;
+ min: number;
+ used: number;
+ utilization: number;
+}
+
+export function secureHeapUsed(): SecureHeapUsage {
+ notImplemented("crypto.secureHeapUsed");
+}
+
+export function setEngine(_engine: string, _flags: typeof constants) {
+ notImplemented("crypto.setEngine");
+}
+
+export { getCiphers, kHandle, kKeyObject };
+
+export default {
+ getDefaultEncoding,
+ getHashes,
+ setDefaultEncoding,
+ getCiphers,
+ getCurves,
+ secureHeapUsed,
+ setEngine,
+ validateByteSource,
+ toBuf,
+ kHandle,
+ kKeyObject,
+};