cipher-kit 2.0.0-beta.0 → 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/{chunk-J5YHHXDC.js → chunk-6HNTSQAP.js} +60 -29
  2. package/dist/chunk-6HNTSQAP.js.map +1 -0
  3. package/dist/{chunk-IYMK2O3K.cjs → chunk-DZLEO2JD.cjs} +136 -98
  4. package/dist/chunk-DZLEO2JD.cjs.map +1 -0
  5. package/dist/{chunk-M7V4HSRH.js → chunk-I25C3WUZ.js} +61 -26
  6. package/dist/chunk-I25C3WUZ.js.map +1 -0
  7. package/dist/{chunk-N2ZI2CIT.js → chunk-SRGSVNQ2.js} +66 -28
  8. package/dist/chunk-SRGSVNQ2.js.map +1 -0
  9. package/dist/{chunk-4IOWANDJ.cjs → chunk-UR5HPMNF.cjs} +128 -93
  10. package/dist/chunk-UR5HPMNF.cjs.map +1 -0
  11. package/dist/{chunk-D656BYPA.cjs → chunk-ZIVTPFKN.cjs} +60 -30
  12. package/dist/chunk-ZIVTPFKN.cjs.map +1 -0
  13. package/dist/{export-Bh49U7Yf.d.ts → export-C2vQXrZa.d.cts} +35 -26
  14. package/dist/{export-VUQLKGvM.d.ts → export-DEWwhS-S.d.ts} +35 -26
  15. package/dist/{export-CrT_Y2Cy.d.cts → export-DzNR1ht3.d.ts} +35 -26
  16. package/dist/{export-VtQvdOuA.d.cts → export-oVEmcDLI.d.cts} +35 -26
  17. package/dist/index.cjs +36 -40
  18. package/dist/index.d.cts +3 -3
  19. package/dist/index.d.ts +3 -3
  20. package/dist/index.js +3 -3
  21. package/dist/node.cjs +33 -33
  22. package/dist/node.d.cts +2 -2
  23. package/dist/node.d.ts +2 -2
  24. package/dist/node.js +2 -2
  25. package/dist/{validate-CPWPEEAt.d.cts → validate-TRx4DDtg.d.cts} +46 -9
  26. package/dist/{validate-CPWPEEAt.d.ts → validate-TRx4DDtg.d.ts} +46 -9
  27. package/dist/web-api.cjs +33 -33
  28. package/dist/web-api.d.cts +2 -2
  29. package/dist/web-api.d.ts +2 -2
  30. package/dist/web-api.js +2 -2
  31. package/package.json +1 -1
  32. package/dist/chunk-4IOWANDJ.cjs.map +0 -1
  33. package/dist/chunk-D656BYPA.cjs.map +0 -1
  34. package/dist/chunk-IYMK2O3K.cjs.map +0 -1
  35. package/dist/chunk-J5YHHXDC.js.map +0 -1
  36. package/dist/chunk-M7V4HSRH.js.map +0 -1
  37. package/dist/chunk-N2ZI2CIT.js.map +0 -1
@@ -5,11 +5,64 @@ var __export = (target, all) => {
5
5
  for (var name in all)
6
6
  __defProp(target, name, { get: all[name], enumerable: true });
7
7
  };
8
- function $isStr(value, min = 1) {
9
- return value !== null && value !== void 0 && typeof value === "string" && value.trim().length >= min;
8
+
9
+ // src/helpers/consts.ts
10
+ var ENCODING_FORMATS = Object.freeze(["base64", "base64url", "hex", "utf8", "latin1"]);
11
+ var DIGEST_ALGORITHMS = Object.freeze({
12
+ sha256: { node: "sha256", web: "SHA-256" },
13
+ sha384: { node: "sha384", web: "SHA-384" },
14
+ sha512: { node: "sha512", web: "SHA-512" }
15
+ });
16
+ var ENCRYPTION_ALGORITHMS = Object.freeze({
17
+ aes256gcm: { name: "aes256gcm", keyBytes: 32, ivLength: 12, node: "aes-256-gcm", web: "AES-GCM" },
18
+ aes192gcm: { name: "aes192gcm", keyBytes: 24, ivLength: 12, node: "aes-192-gcm", web: "AES-GCM" },
19
+ aes128gcm: { name: "aes128gcm", keyBytes: 16, ivLength: 12, node: "aes-128-gcm", web: "AES-GCM" }
20
+ });
21
+ var PASSWORD_HASHING = Object.freeze({
22
+ pbkdf2: { saltLength: 16, iterations: 32e4, keyLength: 64 }
23
+ });
24
+
25
+ // src/helpers/validate.ts
26
+ function $isStr(x, min = 1) {
27
+ return x !== null && x !== void 0 && typeof x === "string" && x.trim().length >= min;
10
28
  }
11
- function $isObj(value) {
12
- return typeof value === "object" && value !== null && value !== void 0 && (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null);
29
+ function $isObj(x) {
30
+ if (typeof x !== "object" || x === null || x === void 0) return false;
31
+ const proto = Object.getPrototypeOf(x);
32
+ return proto === Object.prototype || proto === null;
33
+ }
34
+ function $isLooseObj(x) {
35
+ return typeof x === "object" && x !== null && x !== void 0;
36
+ }
37
+ var expectedKeys = /* @__PURE__ */ new Set(["platform", "digest", "algo", "key"]);
38
+ var expectedAlgoKeys = /* @__PURE__ */ new Set(["name", "keyBytes", "ivLength", "node", "web"]);
39
+ function isSecretKey(x, platform) {
40
+ if (!$isLooseObj(x) || platform !== "node" && platform !== "web" || x.platform !== platform) return false;
41
+ const keys = Object.keys(x);
42
+ if (keys.length !== expectedKeys.size) return false;
43
+ for (const key of keys) if (!expectedKeys.has(key)) return false;
44
+ for (const key of expectedKeys) if (!Object.hasOwn(x, key)) return false;
45
+ if (typeof x.digest !== "string" || !(x.digest in DIGEST_ALGORITHMS)) return false;
46
+ if (!$isLooseObj(x.algo) || typeof x.algo.name !== "string" || !(x.algo.name in ENCRYPTION_ALGORITHMS)) return false;
47
+ const algoKeys = Object.keys(x.algo);
48
+ if (algoKeys.length !== expectedAlgoKeys.size) return false;
49
+ for (const key of algoKeys) if (!expectedAlgoKeys.has(key)) return false;
50
+ for (const key of expectedAlgoKeys) if (!Object.hasOwn(x.algo, key)) return false;
51
+ const algo = ENCRYPTION_ALGORITHMS[x.algo.name];
52
+ if (x.algo.keyBytes !== algo.keyBytes || x.algo.ivLength !== algo.ivLength || x.algo.node !== algo.node || x.algo.web !== algo.web) {
53
+ return false;
54
+ }
55
+ if (!$isLooseObj(x.key) || x.key.type !== "secret") return false;
56
+ if (platform === "node") {
57
+ if (!(x.key instanceof nodeCrypto.KeyObject) || typeof x.key.symmetricKeySize === "number" && x.key.symmetricKeySize !== algo.keyBytes) {
58
+ return false;
59
+ }
60
+ return true;
61
+ }
62
+ if (!$isLooseObj(x.key.algorithm) || x.key.algorithm.name !== algo.web || typeof x.key.algorithm.length === "number" && x.key.algorithm.length !== algo.keyBytes * 8 || typeof x.key.extractable !== "boolean" || !Array.isArray(x.key.usages) || x.key.usages.length !== 2 || !(x.key.usages.includes("encrypt") && x.key.usages.includes("decrypt"))) {
63
+ return false;
64
+ }
65
+ return true;
13
66
  }
14
67
  var ENCRYPTED_REGEX = Object.freeze({
15
68
  general: /^(?:[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+(?:\.[A-Za-z0-9_-]+)?\.)$/,
@@ -21,12 +74,6 @@ function matchPattern(data, format) {
21
74
  if (!(format in ENCRYPTED_REGEX)) throw new Error(`Unknown format: ${format}`);
22
75
  return ENCRYPTED_REGEX[format].test(data);
23
76
  }
24
- function isNodeSecretKey(key) {
25
- return key instanceof nodeCrypto.KeyObject;
26
- }
27
- function isWebSecretKey(key) {
28
- return key !== null && key !== void 0 && typeof key === "object" && "type" in key && typeof key.type === "string" && "algorithm" in key && typeof key.algorithm === "object" && "extractable" in key && typeof key.extractable === "boolean" && "usages" in key && Array.isArray(key.usages) && key.usages.every((usage) => typeof usage === "string");
29
- }
30
77
 
31
78
  // src/helpers/error.ts
32
79
  function $ok(result) {
@@ -87,22 +134,6 @@ function parseToObj(str) {
87
134
  return result;
88
135
  }
89
136
 
90
- // src/helpers/consts.ts
91
- var ENCODING_FORMATS = Object.freeze(["base64", "base64url", "hex", "utf8", "latin1"]);
92
- var DIGEST_ALGORITHMS = Object.freeze({
93
- sha256: { node: "sha256", web: "SHA-256" },
94
- sha384: { node: "sha384", web: "SHA-384" },
95
- sha512: { node: "sha512", web: "SHA-512" }
96
- });
97
- var ENCRYPTION_ALGORITHMS = Object.freeze({
98
- aes256gcm: { keyBytes: 32, ivLength: 12, node: "aes-256-gcm", web: "AES-GCM" },
99
- aes192gcm: { keyBytes: 24, ivLength: 12, node: "aes-192-gcm", web: "AES-GCM" },
100
- aes128gcm: { keyBytes: 16, ivLength: 12, node: "aes-128-gcm", web: "AES-GCM" }
101
- });
102
- var PASSWORD_HASHING = Object.freeze({
103
- pbkdf2: { saltLength: 16, iterations: 32e4, keyLength: 64 }
104
- });
105
-
106
- export { $err, $fmtError, $fmtResultErr, $isStr, $ok, $parseToObj, $stringifyObj, DIGEST_ALGORITHMS, ENCODING_FORMATS, ENCRYPTED_REGEX, ENCRYPTION_ALGORITHMS, PASSWORD_HASHING, __export, isNodeSecretKey, isWebSecretKey, matchPattern, parseToObj, stringifyObj, tryParseToObj, tryStringifyObj };
107
- //# sourceMappingURL=chunk-J5YHHXDC.js.map
108
- //# sourceMappingURL=chunk-J5YHHXDC.js.map
137
+ export { $err, $fmtError, $fmtResultErr, $isStr, $ok, $parseToObj, $stringifyObj, DIGEST_ALGORITHMS, ENCODING_FORMATS, ENCRYPTED_REGEX, ENCRYPTION_ALGORITHMS, PASSWORD_HASHING, __export, isSecretKey, matchPattern, parseToObj, stringifyObj, tryParseToObj, tryStringifyObj };
138
+ //# sourceMappingURL=chunk-6HNTSQAP.js.map
139
+ //# sourceMappingURL=chunk-6HNTSQAP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/helpers/consts.ts","../src/helpers/validate.ts","../src/helpers/error.ts","../src/helpers/object.ts"],"names":[],"mappings":"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","file":"chunk-6HNTSQAP.js","sourcesContent":["export const ENCODING_FORMATS = Object.freeze(['base64', 'base64url', 'hex', 'utf8', 'latin1'] as const);\r\n\r\nexport const DIGEST_ALGORITHMS = Object.freeze({\r\n sha256: { node: 'sha256', web: 'SHA-256' },\r\n sha384: { node: 'sha384', web: 'SHA-384' },\r\n sha512: { node: 'sha512', web: 'SHA-512' },\r\n} as const);\r\n\r\nexport const ENCRYPTION_ALGORITHMS = Object.freeze({\r\n aes256gcm: { name: 'aes256gcm', keyBytes: 32, ivLength: 12, node: 'aes-256-gcm', web: 'AES-GCM' },\r\n aes192gcm: { name: 'aes192gcm', keyBytes: 24, ivLength: 12, node: 'aes-192-gcm', web: 'AES-GCM' },\r\n aes128gcm: { name: 'aes128gcm', keyBytes: 16, ivLength: 12, node: 'aes-128-gcm', web: 'AES-GCM' },\r\n} as const);\r\n\r\nexport const PASSWORD_HASHING = Object.freeze({\r\n pbkdf2: { saltLength: 16, iterations: 320_000, keyLength: 64 },\r\n} as const);\r\n","import nodeCrypto from 'node:crypto';\r\nimport type { SecretKey } from '~/helpers/types';\r\nimport { DIGEST_ALGORITHMS, ENCRYPTION_ALGORITHMS } from './consts';\r\n\r\nexport function $isStr(x: unknown, min = 1): x is string {\r\n return x !== null && x !== undefined && typeof x === 'string' && x.trim().length >= min;\r\n}\r\n\r\nexport function $isObj(x: unknown): x is Record<string, unknown> {\r\n if (typeof x !== 'object' || x === null || x === undefined) return false;\r\n const proto = Object.getPrototypeOf(x);\r\n return proto === Object.prototype || proto === null;\r\n}\r\n\r\nexport function $isLooseObj(x: unknown): x is Record<string, unknown> {\r\n return typeof x === 'object' && x !== null && x !== undefined;\r\n}\r\n\r\nconst expectedKeys = new Set(['platform', 'digest', 'algo', 'key']);\r\nconst expectedAlgoKeys = new Set(['name', 'keyBytes', 'ivLength', 'node', 'web']);\r\n\r\nexport function isSecretKey<Platform extends 'node' | 'web'>(x: unknown, platform: Platform): x is SecretKey<Platform> {\r\n if (!$isLooseObj(x) || (platform !== 'node' && platform !== 'web') || x.platform !== platform) return false;\r\n\r\n const keys = Object.keys(x);\r\n if (keys.length !== expectedKeys.size) return false;\r\n for (const key of keys) if (!expectedKeys.has(key)) return false;\r\n for (const key of expectedKeys) if (!Object.hasOwn(x, key)) return false;\r\n\r\n if (typeof x.digest !== 'string' || !(x.digest in DIGEST_ALGORITHMS)) return false;\r\n if (!$isLooseObj(x.algo) || typeof x.algo.name !== 'string' || !(x.algo.name in ENCRYPTION_ALGORITHMS)) return false;\r\n\r\n const algoKeys = Object.keys(x.algo);\r\n if (algoKeys.length !== expectedAlgoKeys.size) return false;\r\n for (const key of algoKeys) if (!expectedAlgoKeys.has(key)) return false;\r\n for (const key of expectedAlgoKeys) if (!Object.hasOwn(x.algo, key)) return false;\r\n\r\n const algo = ENCRYPTION_ALGORITHMS[x.algo.name as keyof typeof ENCRYPTION_ALGORITHMS];\r\n if (\r\n x.algo.keyBytes !== algo.keyBytes ||\r\n x.algo.ivLength !== algo.ivLength ||\r\n x.algo.node !== algo.node ||\r\n x.algo.web !== algo.web\r\n ) {\r\n return false;\r\n }\r\n\r\n if (!$isLooseObj(x.key) || x.key.type !== 'secret') return false;\r\n\r\n if (platform === 'node') {\r\n if (\r\n !(x.key instanceof nodeCrypto.KeyObject) ||\r\n (typeof x.key.symmetricKeySize === 'number' && x.key.symmetricKeySize !== algo.keyBytes)\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (\r\n !$isLooseObj(x.key.algorithm) ||\r\n x.key.algorithm.name !== algo.web ||\r\n (typeof x.key.algorithm.length === 'number' && x.key.algorithm.length !== algo.keyBytes * 8) ||\r\n typeof x.key.extractable !== 'boolean' ||\r\n !Array.isArray(x.key.usages) ||\r\n x.key.usages.length !== 2 ||\r\n !(x.key.usages.includes('encrypt') && x.key.usages.includes('decrypt'))\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\n/** Regular expressions for encrypted data patterns */\r\nexport const ENCRYPTED_REGEX = Object.freeze({\r\n general: /^(?:[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+(?:\\.[A-Za-z0-9_-]+)?\\.)$/,\r\n node: /^([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.$/,\r\n web: /^([A-Za-z0-9_-]+)\\.([A-Za-z0-9_-]+)\\.$/,\r\n});\r\n\r\n/** Checks if the input string matches the specified encrypted data pattern. */\r\nexport function matchPattern(data: string, format: 'general' | 'node' | 'web'): boolean {\r\n if (typeof data !== 'string') return false;\r\n if (!(format in ENCRYPTED_REGEX)) throw new Error(`Unknown format: ${format}`);\r\n return ENCRYPTED_REGEX[format].test(data);\r\n}\r\n","import { $isObj } from './validate';\r\n\r\nexport interface ResultErr {\r\n readonly message: string;\r\n readonly description: string;\r\n}\r\n\r\nexport type Result<T, E = ResultErr> = T extends object\r\n ?\r\n | ({ readonly [K in keyof T]: T[K] } & { readonly success: true; readonly error?: undefined })\r\n | ({ readonly [K in keyof T]?: undefined } & { readonly success: false; readonly error: E })\r\n :\r\n | { readonly success: true; readonly result: T; readonly error?: undefined }\r\n | { readonly success: false; readonly error: E; readonly result?: undefined };\r\n\r\nexport function $ok<T>(result?: T): Result<T> {\r\n if ($isObj(result)) return { success: true, ...(result as T & object) } as Result<T>;\r\n return { success: true, result } as Result<T>;\r\n}\r\n\r\nexport function $err(err: { msg: string; desc: string }): Result<never, ResultErr>;\r\nexport function $err(err: ResultErr): Result<never, ResultErr>;\r\nexport function $err(err: { msg: string; desc: string } | ResultErr): Result<never, ResultErr> {\r\n return {\r\n success: false,\r\n error: {\r\n message: 'msg' in err ? err.msg : err.message,\r\n description: 'desc' in err ? err.desc : err.description,\r\n },\r\n } as Result<never, ResultErr>;\r\n}\r\n\r\nexport function $fmtError(error: unknown): string {\r\n if (error instanceof Error) return error.message;\r\n if (typeof error === 'string') return error;\r\n return String(error);\r\n}\r\n\r\nexport function $fmtResultErr(err: ResultErr): string {\r\n return `${err.message} - ${err.description}`;\r\n}\r\n","import { $err, $fmtError, $fmtResultErr, $ok, type Result } from './error';\r\nimport { $isObj, $isStr } from './validate';\r\n\r\nexport function $stringifyObj<T extends object = Record<string, unknown>>(obj: T): Result<string> {\r\n try {\r\n if (!$isObj(obj)) return $err({ msg: 'Invalid object', desc: 'Input is not a plain object' });\r\n return $ok(JSON.stringify(obj));\r\n } catch (error) {\r\n return $err({ msg: 'Utility: Stringify error', desc: $fmtError(error) });\r\n }\r\n}\r\n\r\n/**\r\n * Stringify an object.\r\n *\r\n * @param obj - The object to stringify.\r\n * @returns An JSON string.\r\n * @throws {Error} If the object cannot be stringified.\r\n */\r\nexport function stringifyObj<T extends object = Record<string, unknown>>(obj: T): string {\r\n const { result, error } = $stringifyObj(obj);\r\n if (error) throw new Error($fmtResultErr(error));\r\n return result;\r\n}\r\n\r\n/**\r\n * Stringify an object.\r\n *\r\n * @param obj - The object to stringify.\r\n * @returns A Result containing the JSON string or an error.\r\n */\r\nexport function tryStringifyObj<T extends object = Record<string, unknown>>(obj: T): Result<string> {\r\n return $stringifyObj(obj);\r\n}\r\n\r\nexport function $parseToObj<T extends object = Record<string, unknown>>(str: string): Result<{ result: T }> {\r\n try {\r\n if (!$isStr(str)) return $err({ msg: 'Utility: Invalid input', desc: 'Input is not a valid string' });\r\n const obj = JSON.parse(str);\r\n\r\n if (!$isObj(obj)) return $err({ msg: 'Utility: Invalid object format', desc: 'Parsed data is not a plain object' });\r\n return $ok({ result: obj as T });\r\n } catch (error) {\r\n return $err({ msg: 'Utility: Invalid format', desc: $fmtError(error) });\r\n }\r\n}\r\n\r\n/**\r\n * Parse a string to an object.\r\n *\r\n * @param str - The JSON string to parse.\r\n * @returns A Result containing the parsed object or an error.\r\n */\r\nexport function tryParseToObj<T extends object = Record<string, unknown>>(str: string): Result<{ result: T }> {\r\n return $parseToObj<T>(str);\r\n}\r\n\r\n/**\r\n * Parse a string to an object.\r\n *\r\n * @param str - The JSON string to parse.\r\n * @returns A parsed object.\r\n * @throws {Error} If the string cannot be parsed or is not a valid object.\r\n */\r\nexport function parseToObj<T extends object = Record<string, unknown>>(str: string): T {\r\n const { result, error } = $parseToObj<T>(str);\r\n if (error) throw new Error($fmtResultErr(error));\r\n return result;\r\n}\r\n"]}
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkD656BYPA_cjs = require('./chunk-D656BYPA.cjs');
3
+ var chunkZIVTPFKN_cjs = require('./chunk-ZIVTPFKN.cjs');
4
4
 
5
5
  // src/web/kit.ts
6
6
  var kit_exports = {};
7
- chunkD656BYPA_cjs.__export(kit_exports, {
7
+ chunkZIVTPFKN_cjs.__export(kit_exports, {
8
8
  convertBytesToStr: () => convertBytesToStr,
9
9
  convertFormat: () => convertFormat,
10
10
  convertStrToBytes: () => convertStrToBytes,
@@ -16,7 +16,6 @@ chunkD656BYPA_cjs.__export(kit_exports, {
16
16
  generateUuid: () => generateUuid,
17
17
  hash: () => hash,
18
18
  hashPassword: () => hashPassword,
19
- isWebSecretKey: () => chunkD656BYPA_cjs.isWebSecretKey,
20
19
  tryConvertBytesToStr: () => tryConvertBytesToStr,
21
20
  tryConvertFormat: () => tryConvertFormat,
22
21
  tryConvertStrToBytes: () => tryConvertStrToBytes,
@@ -35,34 +34,34 @@ chunkD656BYPA_cjs.__export(kit_exports, {
35
34
  var textEncoder = new TextEncoder();
36
35
  var textDecoder = new TextDecoder();
37
36
  function $convertStrToBytes(data, format = "utf8") {
38
- if (!chunkD656BYPA_cjs.$isStr(data)) {
39
- return chunkD656BYPA_cjs.$err({
37
+ if (!chunkZIVTPFKN_cjs.$isStr(data)) {
38
+ return chunkZIVTPFKN_cjs.$err({
40
39
  msg: "Crypto Web API - String to Bytes: Empty data",
41
40
  desc: "Data must be a non-empty string"
42
41
  });
43
42
  }
44
- if (!chunkD656BYPA_cjs.ENCODING_FORMATS.includes(format)) {
45
- return chunkD656BYPA_cjs.$err({
43
+ if (!chunkZIVTPFKN_cjs.ENCODING_FORMATS.includes(format)) {
44
+ return chunkZIVTPFKN_cjs.$err({
46
45
  msg: `Crypto Web API - String to Bytes: Unsupported encode format: ${format}`,
47
46
  desc: "Use base64, base64url, hex, utf8, or latin1"
48
47
  });
49
48
  }
50
49
  try {
51
50
  const bytes = strToBytes[format](data);
52
- return chunkD656BYPA_cjs.$ok({ result: bytes });
51
+ return chunkZIVTPFKN_cjs.$ok({ result: bytes });
53
52
  } catch (error) {
54
- return chunkD656BYPA_cjs.$err({ msg: "Crypto Web API - String to Bytes: Failed to convert data", desc: chunkD656BYPA_cjs.$fmtError(error) });
53
+ return chunkZIVTPFKN_cjs.$err({ msg: "Crypto Web API - String to Bytes: Failed to convert data", desc: chunkZIVTPFKN_cjs.$fmtError(error) });
55
54
  }
56
55
  }
57
56
  function $convertBytesToStr(data, format = "utf8") {
58
57
  if (!(data instanceof ArrayBuffer || data instanceof Uint8Array)) {
59
- return chunkD656BYPA_cjs.$err({
58
+ return chunkZIVTPFKN_cjs.$err({
60
59
  msg: "Crypto Web API - Bytes to String: Invalid data type",
61
60
  desc: "Data must be an ArrayBuffer or Uint8Array"
62
61
  });
63
62
  }
64
- if (!chunkD656BYPA_cjs.ENCODING_FORMATS.includes(format)) {
65
- return chunkD656BYPA_cjs.$err({
63
+ if (!chunkZIVTPFKN_cjs.ENCODING_FORMATS.includes(format)) {
64
+ return chunkZIVTPFKN_cjs.$err({
66
65
  msg: `Crypto Web API - Bytes to String: Unsupported format: ${format}`,
67
66
  desc: "Use base64, base64url, hex, utf8, or latin1"
68
67
  });
@@ -70,29 +69,29 @@ function $convertBytesToStr(data, format = "utf8") {
70
69
  try {
71
70
  const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);
72
71
  const str = bytesToStr[format](bytes);
73
- return chunkD656BYPA_cjs.$ok(str);
72
+ return chunkZIVTPFKN_cjs.$ok(str);
74
73
  } catch (error) {
75
- return chunkD656BYPA_cjs.$err({ msg: "Crypto Web API - Bytes to String: Failed to convert data", desc: chunkD656BYPA_cjs.$fmtError(error) });
74
+ return chunkZIVTPFKN_cjs.$err({ msg: "Crypto Web API - Bytes to String: Failed to convert data", desc: chunkZIVTPFKN_cjs.$fmtError(error) });
76
75
  }
77
76
  }
78
77
  function $convertFormat(data, from, to) {
79
- if (!chunkD656BYPA_cjs.$isStr(data)) {
80
- return chunkD656BYPA_cjs.$err({
78
+ if (!chunkZIVTPFKN_cjs.$isStr(data)) {
79
+ return chunkZIVTPFKN_cjs.$err({
81
80
  msg: "Crypto Web API - Convert Format: Empty data",
82
81
  desc: "Data must be a non-empty string"
83
82
  });
84
83
  }
85
- if (!chunkD656BYPA_cjs.ENCODING_FORMATS.includes(from) || !chunkD656BYPA_cjs.ENCODING_FORMATS.includes(to)) {
86
- return chunkD656BYPA_cjs.$err({
84
+ if (!chunkZIVTPFKN_cjs.ENCODING_FORMATS.includes(from) || !chunkZIVTPFKN_cjs.ENCODING_FORMATS.includes(to)) {
85
+ return chunkZIVTPFKN_cjs.$err({
87
86
  msg: `Crypto Web API - Convert Format: Unsupported format: from ${from} to ${to}`,
88
87
  desc: "Use base64, base64url, hex, utf8, or latin1"
89
88
  });
90
89
  }
91
90
  const bytes = $convertStrToBytes(data, from);
92
- if (bytes.error) return chunkD656BYPA_cjs.$err({ msg: bytes.error.message, desc: bytes.error.description });
91
+ if (bytes.error) return chunkZIVTPFKN_cjs.$err({ msg: bytes.error.message, desc: bytes.error.description });
93
92
  const str = $convertBytesToStr(bytes.result, to);
94
- if (str.error) return chunkD656BYPA_cjs.$err({ msg: str.error.message, desc: str.error.description });
95
- return chunkD656BYPA_cjs.$ok({ result: str.result });
93
+ if (str.error) return chunkZIVTPFKN_cjs.$err({ msg: str.error.message, desc: str.error.description });
94
+ return chunkZIVTPFKN_cjs.$ok({ result: str.result });
96
95
  }
97
96
  var strToBytes = {
98
97
  base64: $fromBase64,
@@ -158,136 +157,175 @@ function $fromHex(data) {
158
157
  // src/web/web-encrypt.ts
159
158
  function $generateUuid() {
160
159
  try {
161
- return chunkD656BYPA_cjs.$ok(crypto.randomUUID());
160
+ return chunkZIVTPFKN_cjs.$ok(crypto.randomUUID());
162
161
  } catch (error) {
163
- return chunkD656BYPA_cjs.$err({ msg: "Crypto Web API - UUID Generation: Failed to generate UUID", desc: chunkD656BYPA_cjs.$fmtError(error) });
162
+ return chunkZIVTPFKN_cjs.$err({ msg: "Crypto Web API - UUID Generation: Failed to generate UUID", desc: chunkZIVTPFKN_cjs.$fmtError(error) });
164
163
  }
165
164
  }
166
- async function $createSecretKey(key) {
167
- if (!chunkD656BYPA_cjs.$isStr(key)) {
168
- return chunkD656BYPA_cjs.$err({ msg: "Crypto Web API - Key Generation: Empty key", desc: "Key must be a non-empty string" });
165
+ async function $createSecretKey(secret, options = {}) {
166
+ if (!chunkZIVTPFKN_cjs.$isStr(secret)) {
167
+ return chunkZIVTPFKN_cjs.$err({ msg: "Crypto Web API - Key Generation: Empty Secret", desc: "Secret must be a non-empty string" });
169
168
  }
169
+ const algorithm = options.algorithm ?? "aes256gcm";
170
+ if (!(algorithm in chunkZIVTPFKN_cjs.ENCRYPTION_ALGORITHMS)) {
171
+ return chunkZIVTPFKN_cjs.$err({
172
+ msg: `Crypto NodeJS API - Key Generation: Unsupported algorithm: ${algorithm}`,
173
+ desc: `Supported algorithms are: ${Object.keys(chunkZIVTPFKN_cjs.ENCRYPTION_ALGORITHMS).join(", ")}`
174
+ });
175
+ }
176
+ const digest = options.digest ?? "sha256";
177
+ if (!(digest in chunkZIVTPFKN_cjs.DIGEST_ALGORITHMS)) {
178
+ return chunkZIVTPFKN_cjs.$err({
179
+ msg: `Crypto NodeJS API - Key Generation: Unsupported digest: ${digest}`,
180
+ desc: `Supported digests are: ${Object.keys(chunkZIVTPFKN_cjs.DIGEST_ALGORITHMS).join(", ")}`
181
+ });
182
+ }
183
+ const salt = options.salt ?? "cipher-kit-salt";
184
+ if (!chunkZIVTPFKN_cjs.$isStr(salt, 8)) {
185
+ return chunkZIVTPFKN_cjs.$err({
186
+ msg: "Crypto NodeJS API - Key Generation: Weak salt",
187
+ desc: "Salt must be a non-empty string with at least 8 characters"
188
+ });
189
+ }
190
+ const info = options.info ?? "cipher-kit";
191
+ if (!chunkZIVTPFKN_cjs.$isStr(info)) {
192
+ return chunkZIVTPFKN_cjs.$err({
193
+ msg: "Crypto NodeJS API - Key Generation: Invalid info",
194
+ desc: "Info must be a non-empty string"
195
+ });
196
+ }
197
+ const encryptAlgo = chunkZIVTPFKN_cjs.ENCRYPTION_ALGORITHMS[algorithm];
198
+ const digestAlgo = chunkZIVTPFKN_cjs.DIGEST_ALGORITHMS[digest];
170
199
  try {
171
- const secretKey = await crypto.subtle.deriveKey(
200
+ const ikm = await crypto.subtle.importKey("raw", textEncoder.encode(secret.normalize("NFKC")), "HKDF", false, [
201
+ "deriveKey"
202
+ ]);
203
+ const key = await crypto.subtle.deriveKey(
172
204
  {
173
205
  name: "HKDF",
174
- hash: chunkD656BYPA_cjs.DIGEST_ALGORITHMS.sha256.web,
175
- salt: textEncoder.encode("cipher-kit-salt"),
176
- info: textEncoder.encode("cipher-kit")
206
+ hash: digestAlgo.web,
207
+ salt: textEncoder.encode(salt.normalize("NFKC")),
208
+ info: textEncoder.encode(info.normalize("NFKC"))
177
209
  },
178
- await crypto.subtle.importKey("raw", textEncoder.encode(key.normalize("NFKC")), "HKDF", false, ["deriveKey"]),
179
- { name: chunkD656BYPA_cjs.ENCRYPTION_ALGORITHMS.aes256gcm.web, length: chunkD656BYPA_cjs.ENCRYPTION_ALGORITHMS.aes256gcm.keyBytes * 8 },
210
+ ikm,
211
+ { name: encryptAlgo.web, length: encryptAlgo.keyBytes * 8 },
180
212
  true,
181
213
  ["encrypt", "decrypt"]
182
214
  );
183
- return chunkD656BYPA_cjs.$ok({ result: secretKey });
215
+ const secretKey = Object.freeze({
216
+ platform: "web",
217
+ digest,
218
+ algo: encryptAlgo,
219
+ key
220
+ });
221
+ return chunkZIVTPFKN_cjs.$ok({ result: secretKey });
184
222
  } catch (error) {
185
- return chunkD656BYPA_cjs.$err({
223
+ return chunkZIVTPFKN_cjs.$err({
186
224
  msg: "Crypto Web API - Key Generation: Failed to create secret key",
187
- desc: chunkD656BYPA_cjs.$fmtError(error)
225
+ desc: chunkZIVTPFKN_cjs.$fmtError(error)
188
226
  });
189
227
  }
190
228
  }
191
229
  async function $encrypt(data, secretKey) {
192
- if (!chunkD656BYPA_cjs.$isStr(data)) {
193
- return chunkD656BYPA_cjs.$err({
230
+ if (!chunkZIVTPFKN_cjs.$isStr(data)) {
231
+ return chunkZIVTPFKN_cjs.$err({
194
232
  msg: "Crypto Web API - Encryption: Empty data for encryption",
195
233
  desc: "Data must be a non-empty string"
196
234
  });
197
235
  }
198
- if (!chunkD656BYPA_cjs.isWebSecretKey(secretKey)) {
199
- return chunkD656BYPA_cjs.$err({
200
- msg: "Crypto Web API - Encryption: Invalid encryption key",
201
- desc: "Expected a WebApiKey (webcrypto.CryptoKey)"
236
+ if (!chunkZIVTPFKN_cjs.isSecretKey(secretKey, "web")) {
237
+ return chunkZIVTPFKN_cjs.$err({
238
+ msg: "Crypto Web API - Encryption: Invalid Secret Key",
239
+ desc: "Expected a Web SecretKey"
202
240
  });
203
241
  }
204
242
  const bytes = $convertStrToBytes(data, "utf8");
205
- if (bytes.error) return chunkD656BYPA_cjs.$err(bytes.error);
243
+ if (bytes.error) return chunkZIVTPFKN_cjs.$err(bytes.error);
206
244
  try {
207
- const iv = crypto.getRandomValues(new Uint8Array(chunkD656BYPA_cjs.ENCRYPTION_ALGORITHMS.aes256gcm.ivLength));
245
+ const iv = crypto.getRandomValues(new Uint8Array(secretKey.algo.ivLength));
208
246
  const cipherWithTag = await crypto.subtle.encrypt(
209
- { name: chunkD656BYPA_cjs.ENCRYPTION_ALGORITHMS.aes256gcm.web, iv },
210
- secretKey,
247
+ { name: secretKey.algo.web, iv },
248
+ secretKey.key,
211
249
  bytes.result
212
250
  );
213
251
  const ivStr = $convertBytesToStr(iv, "base64url");
214
252
  const cipherStr = $convertBytesToStr(cipherWithTag, "base64url");
215
253
  if (ivStr.error || cipherStr.error) {
216
- return chunkD656BYPA_cjs.$err({
254
+ return chunkZIVTPFKN_cjs.$err({
217
255
  msg: "Crypto Web API - Encryption: Failed to convert IV or encrypted data",
218
256
  desc: `Conversion error: ${ivStr.error || cipherStr.error}`
219
257
  });
220
258
  }
221
- return chunkD656BYPA_cjs.$ok(`${ivStr.result}.${cipherStr.result}.`);
259
+ return chunkZIVTPFKN_cjs.$ok(`${ivStr.result}.${cipherStr.result}.`);
222
260
  } catch (error) {
223
- return chunkD656BYPA_cjs.$err({ msg: "Crypto Web API - Encryption: Failed to encrypt data", desc: chunkD656BYPA_cjs.$fmtError(error) });
261
+ return chunkZIVTPFKN_cjs.$err({ msg: "Crypto Web API - Encryption: Failed to encrypt data", desc: chunkZIVTPFKN_cjs.$fmtError(error) });
224
262
  }
225
263
  }
226
264
  async function $decrypt(encrypted, secretKey) {
227
- if (chunkD656BYPA_cjs.matchPattern(encrypted, "web") === false) {
228
- return chunkD656BYPA_cjs.$err({
265
+ if (chunkZIVTPFKN_cjs.matchPattern(encrypted, "web") === false) {
266
+ return chunkZIVTPFKN_cjs.$err({
229
267
  msg: "Crypto Web API - Decryption: Invalid encrypted data format",
230
268
  desc: 'Encrypted data must be in the format "iv.cipherWithTag."'
231
269
  });
232
270
  }
233
271
  const [iv, encryptedWithTag] = encrypted.split(".", 3);
234
- if (!chunkD656BYPA_cjs.$isStr(iv) || !chunkD656BYPA_cjs.$isStr(encryptedWithTag)) {
235
- return chunkD656BYPA_cjs.$err({
272
+ if (!chunkZIVTPFKN_cjs.$isStr(iv) || !chunkZIVTPFKN_cjs.$isStr(encryptedWithTag)) {
273
+ return chunkZIVTPFKN_cjs.$err({
236
274
  msg: "Crypto Web API - Decryption: Invalid encrypted data",
237
275
  desc: "Encrypted data must contain valid IV, encrypted and tag components"
238
276
  });
239
277
  }
240
- if (!chunkD656BYPA_cjs.isWebSecretKey(secretKey)) {
241
- return chunkD656BYPA_cjs.$err({
242
- msg: "Crypto Web API - Decryption: Invalid decryption key",
243
- desc: "Expected a WebApiKey (webcrypto.CryptoKey)"
278
+ if (!chunkZIVTPFKN_cjs.isSecretKey(secretKey, "web")) {
279
+ return chunkZIVTPFKN_cjs.$err({
280
+ msg: "Crypto Web API - Decryption: Invalid Secret Key",
281
+ desc: "Expected a Web SecretKey"
244
282
  });
245
283
  }
246
284
  const ivBytes = $convertStrToBytes(iv, "base64url");
247
285
  const cipherWithTagBytes = $convertStrToBytes(encryptedWithTag, "base64url");
248
286
  if (ivBytes.error || cipherWithTagBytes.error) {
249
- return chunkD656BYPA_cjs.$err({
287
+ return chunkZIVTPFKN_cjs.$err({
250
288
  msg: "Crypto Web API - Decryption: Failed to convert IV or encrypted data",
251
289
  desc: `Conversion error: ${ivBytes.error || cipherWithTagBytes.error}`
252
290
  });
253
291
  }
254
292
  try {
255
293
  const decrypted = await crypto.subtle.decrypt(
256
- { name: chunkD656BYPA_cjs.ENCRYPTION_ALGORITHMS.aes256gcm.web, iv: ivBytes.result },
257
- secretKey,
294
+ { name: secretKey.algo.web, iv: ivBytes.result },
295
+ secretKey.key,
258
296
  cipherWithTagBytes.result
259
297
  );
260
298
  return $convertBytesToStr(decrypted, "utf8");
261
299
  } catch (error) {
262
- return chunkD656BYPA_cjs.$err({ msg: "Crypto Web API - Decryption: Failed to decrypt data", desc: chunkD656BYPA_cjs.$fmtError(error) });
300
+ return chunkZIVTPFKN_cjs.$err({ msg: "Crypto Web API - Decryption: Failed to decrypt data", desc: chunkZIVTPFKN_cjs.$fmtError(error) });
263
301
  }
264
302
  }
265
303
  async function $encryptObj(data, secretKey) {
266
- const { result, error } = chunkD656BYPA_cjs.$stringifyObj(data);
267
- if (error) return chunkD656BYPA_cjs.$err(error);
304
+ const { result, error } = chunkZIVTPFKN_cjs.$stringifyObj(data);
305
+ if (error) return chunkZIVTPFKN_cjs.$err(error);
268
306
  return await $encrypt(result, secretKey);
269
307
  }
270
308
  async function $decryptObj(encrypted, secretKey) {
271
309
  const { result, error } = await $decrypt(encrypted, secretKey);
272
- if (error) return chunkD656BYPA_cjs.$err(error);
273
- return chunkD656BYPA_cjs.$parseToObj(result);
310
+ if (error) return chunkZIVTPFKN_cjs.$err(error);
311
+ return chunkZIVTPFKN_cjs.$parseToObj(result);
274
312
  }
275
313
  async function $hash(data) {
276
- if (!chunkD656BYPA_cjs.$isStr(data, 0)) {
277
- return chunkD656BYPA_cjs.$err({ msg: "Crypto Web API - Hashing: Empty data for hashing", desc: "Data must be a non-empty string" });
314
+ if (!chunkZIVTPFKN_cjs.$isStr(data, 0)) {
315
+ return chunkZIVTPFKN_cjs.$err({ msg: "Crypto Web API - Hashing: Empty data for hashing", desc: "Data must be a non-empty string" });
278
316
  }
279
317
  const bytes = $convertStrToBytes(data, "utf8");
280
- if (bytes.error) return chunkD656BYPA_cjs.$err(bytes.error);
318
+ if (bytes.error) return chunkZIVTPFKN_cjs.$err(bytes.error);
281
319
  try {
282
- const hashed = await crypto.subtle.digest(chunkD656BYPA_cjs.DIGEST_ALGORITHMS.sha256.web, bytes.result);
320
+ const hashed = await crypto.subtle.digest(chunkZIVTPFKN_cjs.DIGEST_ALGORITHMS.sha256.web, bytes.result);
283
321
  return $convertBytesToStr(hashed, "base64url");
284
322
  } catch (error) {
285
- return chunkD656BYPA_cjs.$err({ msg: "Crypto Web API - Hashing: Failed to hash data", desc: chunkD656BYPA_cjs.$fmtError(error) });
323
+ return chunkZIVTPFKN_cjs.$err({ msg: "Crypto Web API - Hashing: Failed to hash data", desc: chunkZIVTPFKN_cjs.$fmtError(error) });
286
324
  }
287
325
  }
288
326
  async function $hashPassword(password) {
289
- if (!chunkD656BYPA_cjs.$isStr(password)) {
290
- return chunkD656BYPA_cjs.$err({
327
+ if (!chunkZIVTPFKN_cjs.$isStr(password)) {
328
+ return chunkZIVTPFKN_cjs.$err({
291
329
  msg: "Crypto Web API - Password Hashing: Empty password",
292
330
  desc: "Password must be a non-empty string"
293
331
  });
@@ -302,21 +340,21 @@ async function $hashPassword(password) {
302
340
  ["deriveBits"]
303
341
  );
304
342
  const bits = await crypto.subtle.deriveBits(
305
- { name: "PBKDF2", salt, iterations: chunkD656BYPA_cjs.PASSWORD_HASHING.pbkdf2.iterations, hash: chunkD656BYPA_cjs.DIGEST_ALGORITHMS.sha512.web },
343
+ { name: "PBKDF2", salt, iterations: chunkZIVTPFKN_cjs.PASSWORD_HASHING.pbkdf2.iterations, hash: chunkZIVTPFKN_cjs.DIGEST_ALGORITHMS.sha512.web },
306
344
  baseKey,
307
- chunkD656BYPA_cjs.PASSWORD_HASHING.pbkdf2.keyLength * 8
345
+ chunkZIVTPFKN_cjs.PASSWORD_HASHING.pbkdf2.keyLength * 8
308
346
  );
309
347
  const saltStr = $convertBytesToStr(salt, "base64url");
310
- if (saltStr.error) return chunkD656BYPA_cjs.$err(saltStr.error);
348
+ if (saltStr.error) return chunkZIVTPFKN_cjs.$err(saltStr.error);
311
349
  const hashedPasswordStr = $convertBytesToStr(bits, "base64url");
312
- if (hashedPasswordStr.error) return chunkD656BYPA_cjs.$err(hashedPasswordStr.error);
313
- return chunkD656BYPA_cjs.$ok({ hash: hashedPasswordStr.result, salt: saltStr.result });
350
+ if (hashedPasswordStr.error) return chunkZIVTPFKN_cjs.$err(hashedPasswordStr.error);
351
+ return chunkZIVTPFKN_cjs.$ok({ hash: hashedPasswordStr.result, salt: saltStr.result });
314
352
  } catch (error) {
315
- return chunkD656BYPA_cjs.$err({ msg: "Crypto Web API - Password Hashing: Failed to hash password", desc: chunkD656BYPA_cjs.$fmtError(error) });
353
+ return chunkZIVTPFKN_cjs.$err({ msg: "Crypto Web API - Password Hashing: Failed to hash password", desc: chunkZIVTPFKN_cjs.$fmtError(error) });
316
354
  }
317
355
  }
318
356
  async function $verifyPassword(password, hashedPassword, salt) {
319
- if (!chunkD656BYPA_cjs.$isStr(password) || !chunkD656BYPA_cjs.$isStr(hashedPassword) || !chunkD656BYPA_cjs.$isStr(salt)) return false;
357
+ if (!chunkZIVTPFKN_cjs.$isStr(password) || !chunkZIVTPFKN_cjs.$isStr(hashedPassword) || !chunkZIVTPFKN_cjs.$isStr(salt)) return false;
320
358
  const saltBytes = $convertStrToBytes(salt, "base64url");
321
359
  if (saltBytes.error) return false;
322
360
  const { result: hashedPasswordBytes, error: hashedPasswordError } = $convertStrToBytes(hashedPassword, "base64url");
@@ -334,11 +372,11 @@ async function $verifyPassword(password, hashedPassword, salt) {
334
372
  {
335
373
  name: "PBKDF2",
336
374
  salt: saltBytes.result,
337
- iterations: chunkD656BYPA_cjs.PASSWORD_HASHING.pbkdf2.iterations,
338
- hash: chunkD656BYPA_cjs.DIGEST_ALGORITHMS.sha512.web
375
+ iterations: chunkZIVTPFKN_cjs.PASSWORD_HASHING.pbkdf2.iterations,
376
+ hash: chunkZIVTPFKN_cjs.DIGEST_ALGORITHMS.sha512.web
339
377
  },
340
378
  baseKey,
341
- chunkD656BYPA_cjs.PASSWORD_HASHING.pbkdf2.keyLength * 8
379
+ chunkZIVTPFKN_cjs.PASSWORD_HASHING.pbkdf2.keyLength * 8
342
380
  )
343
381
  );
344
382
  if (bits.length !== hashedPasswordBytes.length) return false;
@@ -358,15 +396,15 @@ function tryGenerateUuid() {
358
396
  }
359
397
  function generateUuid() {
360
398
  const { result, error } = $generateUuid();
361
- if (error) throw new Error(chunkD656BYPA_cjs.$fmtResultErr(error));
399
+ if (error) throw new Error(chunkZIVTPFKN_cjs.$fmtResultErr(error));
362
400
  return result;
363
401
  }
364
- async function tryCreateSecretKey(key) {
365
- return await $createSecretKey(key);
402
+ async function tryCreateSecretKey(secret, options = {}) {
403
+ return await $createSecretKey(secret, options);
366
404
  }
367
- async function createSecretKey(key) {
368
- const { result, error } = await $createSecretKey(key);
369
- if (error) throw new Error(chunkD656BYPA_cjs.$fmtResultErr(error));
405
+ async function createSecretKey(secret, options = {}) {
406
+ const { result, error } = await $createSecretKey(secret, options);
407
+ if (error) throw new Error(chunkZIVTPFKN_cjs.$fmtResultErr(error));
370
408
  return result;
371
409
  }
372
410
  async function tryEncrypt(data, secretKey) {
@@ -374,7 +412,7 @@ async function tryEncrypt(data, secretKey) {
374
412
  }
375
413
  async function encrypt(data, secretKey) {
376
414
  const { result, error } = await $encrypt(data, secretKey);
377
- if (error) throw new Error(chunkD656BYPA_cjs.$fmtResultErr(error));
415
+ if (error) throw new Error(chunkZIVTPFKN_cjs.$fmtResultErr(error));
378
416
  return result;
379
417
  }
380
418
  async function tryDecrypt(encrypted, secretKey) {
@@ -382,7 +420,7 @@ async function tryDecrypt(encrypted, secretKey) {
382
420
  }
383
421
  async function decrypt(encrypted, secretKey) {
384
422
  const { result, error } = await $decrypt(encrypted, secretKey);
385
- if (error) throw new Error(chunkD656BYPA_cjs.$fmtResultErr(error));
423
+ if (error) throw new Error(chunkZIVTPFKN_cjs.$fmtResultErr(error));
386
424
  return result;
387
425
  }
388
426
  async function tryEncryptObj(data, secretKey) {
@@ -390,7 +428,7 @@ async function tryEncryptObj(data, secretKey) {
390
428
  }
391
429
  async function encryptObj(data, secretKey) {
392
430
  const { result, error } = await $encryptObj(data, secretKey);
393
- if (error) throw new Error(chunkD656BYPA_cjs.$fmtResultErr(error));
431
+ if (error) throw new Error(chunkZIVTPFKN_cjs.$fmtResultErr(error));
394
432
  return result;
395
433
  }
396
434
  async function tryDecryptObj(encrypted, secretKey) {
@@ -398,7 +436,7 @@ async function tryDecryptObj(encrypted, secretKey) {
398
436
  }
399
437
  async function decryptObj(encrypted, secretKey) {
400
438
  const { result, error } = await $decryptObj(encrypted, secretKey);
401
- if (error) throw new Error(chunkD656BYPA_cjs.$fmtResultErr(error));
439
+ if (error) throw new Error(chunkZIVTPFKN_cjs.$fmtResultErr(error));
402
440
  return { result };
403
441
  }
404
442
  async function tryHash(data) {
@@ -406,7 +444,7 @@ async function tryHash(data) {
406
444
  }
407
445
  async function hash(data) {
408
446
  const { result, error } = await $hash(data);
409
- if (error) throw new Error(chunkD656BYPA_cjs.$fmtResultErr(error));
447
+ if (error) throw new Error(chunkZIVTPFKN_cjs.$fmtResultErr(error));
410
448
  return result;
411
449
  }
412
450
  async function tryHashPassword(password) {
@@ -414,7 +452,7 @@ async function tryHashPassword(password) {
414
452
  }
415
453
  async function hashPassword(password) {
416
454
  const { hash: hash2, salt, error } = await $hashPassword(password);
417
- if (error) throw new Error(chunkD656BYPA_cjs.$fmtResultErr(error));
455
+ if (error) throw new Error(chunkZIVTPFKN_cjs.$fmtResultErr(error));
418
456
  return { hash: hash2, salt };
419
457
  }
420
458
  async function verifyPassword(password, hashedPassword, salt) {
@@ -425,7 +463,7 @@ function tryConvertStrToBytes(data, format = "utf8") {
425
463
  }
426
464
  function convertStrToBytes(data, format = "utf8") {
427
465
  const { result, error } = $convertStrToBytes(data, format);
428
- if (error) throw new Error(chunkD656BYPA_cjs.$fmtResultErr(error));
466
+ if (error) throw new Error(chunkZIVTPFKN_cjs.$fmtResultErr(error));
429
467
  return result;
430
468
  }
431
469
  function tryConvertBytesToStr(data, format = "utf8") {
@@ -433,7 +471,7 @@ function tryConvertBytesToStr(data, format = "utf8") {
433
471
  }
434
472
  function convertBytesToStr(data, format = "utf8") {
435
473
  const { result, error } = $convertBytesToStr(data, format);
436
- if (error) throw new Error(chunkD656BYPA_cjs.$fmtResultErr(error));
474
+ if (error) throw new Error(chunkZIVTPFKN_cjs.$fmtResultErr(error));
437
475
  return result;
438
476
  }
439
477
  function tryConvertFormat(data, from, to) {
@@ -441,7 +479,7 @@ function tryConvertFormat(data, from, to) {
441
479
  }
442
480
  function convertFormat(data, from, to) {
443
481
  const { result, error } = $convertFormat(data, from, to);
444
- if (error) throw new Error(chunkD656BYPA_cjs.$fmtResultErr(error));
482
+ if (error) throw new Error(chunkZIVTPFKN_cjs.$fmtResultErr(error));
445
483
  return result;
446
484
  }
447
485
 
@@ -469,5 +507,5 @@ exports.tryGenerateUuid = tryGenerateUuid;
469
507
  exports.tryHash = tryHash;
470
508
  exports.tryHashPassword = tryHashPassword;
471
509
  exports.verifyPassword = verifyPassword;
472
- //# sourceMappingURL=chunk-IYMK2O3K.cjs.map
473
- //# sourceMappingURL=chunk-IYMK2O3K.cjs.map
510
+ //# sourceMappingURL=chunk-DZLEO2JD.cjs.map
511
+ //# sourceMappingURL=chunk-DZLEO2JD.cjs.map