internxt-crypto 0.0.9-alpha → 0.0.11

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 (120) hide show
  1. package/README.md +3 -4
  2. package/dist/asymmetric-crypto-BORmLhnx.js +143 -0
  3. package/dist/asymmetric-crypto-BORmLhnx.js.map +1 -0
  4. package/dist/asymmetric-crypto-CyXsV4XT.mjs +102 -0
  5. package/dist/asymmetric-crypto-CyXsV4XT.mjs.map +1 -0
  6. package/dist/asymmetric-crypto.d.mts +47 -0
  7. package/dist/asymmetric-crypto.d.ts +47 -0
  8. package/dist/asymmetric-crypto.js +8 -0
  9. package/dist/asymmetric-crypto.mjs +3 -0
  10. package/dist/chunk-DWirmd9C.mjs +18 -0
  11. package/dist/chunk-Dt-PWiN7.js +60 -0
  12. package/dist/constants-Ccp21E03.js +208 -0
  13. package/dist/constants-Ccp21E03.js.map +1 -0
  14. package/dist/constants-kTeX-2T0.mjs +34 -0
  15. package/dist/constants-kTeX-2T0.mjs.map +1 -0
  16. package/dist/constants.d.mts +33 -0
  17. package/dist/constants.d.ts +33 -0
  18. package/dist/constants.js +31 -0
  19. package/dist/constants.mjs +3 -0
  20. package/dist/derive-key-Be7hS-cN.mjs +751 -0
  21. package/dist/derive-key-Be7hS-cN.mjs.map +1 -0
  22. package/dist/derive-key-CBf2WxJd.js +2513 -0
  23. package/dist/derive-key-CBf2WxJd.js.map +1 -0
  24. package/dist/derive-key.d.mts +97 -0
  25. package/dist/derive-key.d.ts +97 -0
  26. package/dist/derive-key.js +15 -0
  27. package/dist/derive-key.mjs +6 -0
  28. package/dist/email-crypto-BrT98taw.js +617 -0
  29. package/dist/email-crypto-BrT98taw.js.map +1 -0
  30. package/dist/email-crypto-DJUEjTxA.mjs +534 -0
  31. package/dist/email-crypto-DJUEjTxA.mjs.map +1 -0
  32. package/dist/email-crypto.d.mts +86 -0
  33. package/dist/email-crypto.d.ts +86 -0
  34. package/dist/email-crypto.js +17 -0
  35. package/dist/email-crypto.mjs +8 -0
  36. package/dist/email-search.d.mts +235 -0
  37. package/dist/email-search.d.ts +235 -0
  38. package/dist/email-search.js +637 -0
  39. package/dist/email-search.js.map +1 -0
  40. package/dist/email-search.mjs +608 -0
  41. package/dist/email-search.mjs.map +1 -0
  42. package/dist/hash-BoqwNkcd.js +190 -0
  43. package/dist/hash-BoqwNkcd.js.map +1 -0
  44. package/dist/hash-CXeGAwai.mjs +131 -0
  45. package/dist/hash-CXeGAwai.mjs.map +1 -0
  46. package/dist/hash.d.mts +65 -0
  47. package/dist/hash.d.ts +65 -0
  48. package/dist/hash.js +11 -0
  49. package/dist/hash.mjs +3 -0
  50. package/dist/index-CQqgKsbX.d.ts +50 -0
  51. package/dist/index-CintVUbp.d.ts +97 -0
  52. package/dist/index-D5pBU_A5.d.mts +50 -0
  53. package/dist/index-MaOov-ag.d.mts +97 -0
  54. package/dist/index.d.mts +52 -0
  55. package/dist/index.d.ts +52 -0
  56. package/dist/index.js +116 -2055
  57. package/dist/index.mjs +15 -8712
  58. package/dist/keystore-crypto-B4yCVo9l.js +182 -0
  59. package/dist/keystore-crypto-B4yCVo9l.js.map +1 -0
  60. package/dist/keystore-crypto-Bjgriq9h.mjs +159 -0
  61. package/dist/keystore-crypto-Bjgriq9h.mjs.map +1 -0
  62. package/dist/keystore-crypto.d.mts +40 -0
  63. package/dist/keystore-crypto.d.ts +40 -0
  64. package/dist/keystore-crypto.js +11 -0
  65. package/dist/keystore-crypto.mjs +9 -0
  66. package/dist/keystore-service.d.mts +48 -0
  67. package/dist/keystore-service.d.ts +48 -0
  68. package/dist/keystore-service.js +122 -0
  69. package/dist/keystore-service.js.map +1 -0
  70. package/dist/keystore-service.mjs +114 -0
  71. package/dist/keystore-service.mjs.map +1 -0
  72. package/dist/post-quantum-crypto-CAi-cEkV.js +189 -0
  73. package/dist/post-quantum-crypto-CAi-cEkV.js.map +1 -0
  74. package/dist/post-quantum-crypto-Vv34t6gX.mjs +154 -0
  75. package/dist/post-quantum-crypto-Vv34t6gX.mjs.map +1 -0
  76. package/dist/post-quantum-crypto.d.mts +2 -0
  77. package/dist/post-quantum-crypto.d.ts +2 -0
  78. package/dist/post-quantum-crypto.js +17 -0
  79. package/dist/post-quantum-crypto.mjs +3 -0
  80. package/dist/storage-service-BgIK2aYZ.js +82 -0
  81. package/dist/storage-service-BgIK2aYZ.js.map +1 -0
  82. package/dist/storage-service-CubCbhY2.mjs +65 -0
  83. package/dist/storage-service-CubCbhY2.mjs.map +1 -0
  84. package/dist/storage-service.d.mts +2 -0
  85. package/dist/storage-service.d.ts +2 -0
  86. package/dist/storage-service.js +14 -0
  87. package/dist/storage-service.mjs +3 -0
  88. package/dist/symmetric-crypto-CrdS1Che.mjs +197 -0
  89. package/dist/symmetric-crypto-CrdS1Che.mjs.map +1 -0
  90. package/dist/symmetric-crypto-D65zB396.js +244 -0
  91. package/dist/symmetric-crypto-D65zB396.js.map +1 -0
  92. package/dist/symmetric-crypto.d.mts +60 -0
  93. package/dist/symmetric-crypto.d.ts +60 -0
  94. package/dist/symmetric-crypto.js +10 -0
  95. package/dist/symmetric-crypto.mjs +4 -0
  96. package/dist/types-52g887Zi.js +16 -0
  97. package/dist/types-52g887Zi.js.map +1 -0
  98. package/dist/types-BiEoleqw.mjs +10 -0
  99. package/dist/types-BiEoleqw.mjs.map +1 -0
  100. package/dist/types-Ds3ivE9W.d.ts +104 -0
  101. package/dist/types-DwQJtrTx.d.mts +104 -0
  102. package/dist/types.d.mts +2 -0
  103. package/dist/types.d.ts +2 -0
  104. package/dist/types.js +3 -0
  105. package/dist/types.mjs +3 -0
  106. package/dist/utils-CNs3cyDj.js +263 -0
  107. package/dist/utils-CNs3cyDj.js.map +1 -0
  108. package/dist/utils-DS04iUcX.mjs +173 -0
  109. package/dist/utils-DS04iUcX.mjs.map +1 -0
  110. package/dist/utils.d.mts +99 -0
  111. package/dist/utils.d.ts +99 -0
  112. package/dist/utils.js +16 -0
  113. package/dist/utils.mjs +3 -0
  114. package/package.json +12 -11
  115. package/dist/__vite-browser-external-Dyvby5gX.js +0 -2
  116. package/dist/__vite-browser-external-Dyvby5gX.js.map +0 -1
  117. package/dist/__vite-browser-external-l0sNRNKZ.mjs +0 -2
  118. package/dist/__vite-browser-external-l0sNRNKZ.mjs.map +0 -1
  119. package/dist/index.js.map +0 -1
  120. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,751 @@
1
+ import { t as __exportAll } from "./chunk-DWirmd9C.mjs";
2
+ import { a as ARGON2ID_OUTPUT_BYTE_LENGTH, i as ARGON2ID_MEMORY_SIZE, l as CONTEXT_DERIVE, n as AES_KEY_BIT_LENGTH, o as ARGON2ID_PARALLELISM, r as ARGON2ID_ITERATIONS, s as ARGON2ID_SALT_BYTE_LENGTH } from "./constants-kTeX-2T0.mjs";
3
+ import { f as hexToUint8Array, m as uint8ArrayToHex, u as UTF8ToUint8 } from "./utils-DS04iUcX.mjs";
4
+ import { c as importSymmetricCryptoKey } from "./symmetric-crypto-CrdS1Che.mjs";
5
+ import { blake3 } from "@noble/hashes/blake3.js";
6
+
7
+ //#region src/derive-key/deriveKeysFromKey.ts
8
+ /**
9
+ * Derives a symmetric key from the base key and context string
10
+ *
11
+ * @param context - The context string.
12
+ * The context string should be hardcoded, globally unique, and application-specific.
13
+ * @param baseKey - The base key (NOT PASSWORD!)
14
+ * @returns The derived secret key
15
+ */
16
+ function deriveSymmetricKeyFromContext(context, baseKey) {
17
+ return blake3(baseKey, { context: UTF8ToUint8(context) });
18
+ }
19
+ /**
20
+ * Derives a symmetric CryptoKey from the base key and context string
21
+ *
22
+ * @param context - The context string.
23
+ * The context string should be hardcoded, globally unique, and application-specific.
24
+ * @param baseKey - The base key (NOT PASSWORD!)
25
+ * @returns The derived secret CryptoKey
26
+ */
27
+ async function deriveSymmetricCryptoKeyFromContext(context, baseKey) {
28
+ try {
29
+ if (baseKey.length != AES_KEY_BIT_LENGTH / 8) throw new Error(`Base key length must be exactly ${AES_KEY_BIT_LENGTH / 8} bytes`);
30
+ if (!context) throw new Error("Context is empry");
31
+ return await importSymmetricCryptoKey(deriveSymmetricKeyFromContext(context, baseKey));
32
+ } catch (error) {
33
+ throw new Error("Failed to derive CryptoKey from base key and context", { cause: error });
34
+ }
35
+ }
36
+ /**
37
+ * Derives a symmetric key from two keys
38
+ *
39
+ * @param key1 - The 32-bytes key
40
+ * @param key2 - The 32-bytes key
41
+ * @returns The derived secret key
42
+ */
43
+ function deriveSymmetricKeyFromTwoKeys(key1, key2) {
44
+ return deriveSymmetricKeyFromTwoKeysAndContext(key1, key2, CONTEXT_DERIVE);
45
+ }
46
+ /**
47
+ * Derives a symmetric CryptoKey from two keys
48
+ *
49
+ * @param key1 - The 32-bytes key
50
+ * @param key2 - The 32-bytes key
51
+ * @returns The derived secret CryptoKey
52
+ */
53
+ async function deriveSymmetricCryptoKeyFromTwoKeys(key1, key2) {
54
+ try {
55
+ return await importSymmetricCryptoKey(deriveSymmetricKeyFromTwoKeys(key1, key2));
56
+ } catch (error) {
57
+ throw new Error("Failed to derive symmetric CryptoKey from two keys", { cause: error });
58
+ }
59
+ }
60
+ /**
61
+ * Derives a symmetric key from two keys and context
62
+ *
63
+ * @param key1 - The 32-bytes key
64
+ * @param key2 - The 32-bytes key
65
+ * @param context - The context string
66
+ * @returns The derived symmetric key
67
+ */
68
+ function deriveSymmetricKeyFromTwoKeysAndContext(key1, key2, context) {
69
+ try {
70
+ if (key2.length != AES_KEY_BIT_LENGTH / 8 || key1.length != AES_KEY_BIT_LENGTH / 8) throw new Error(`Input key length must be exactly ${AES_KEY_BIT_LENGTH / 8} bytes`);
71
+ return blake3(blake3(key1, { key: key2 }), { context: UTF8ToUint8(context) });
72
+ } catch (error) {
73
+ throw new Error("Failed to derive symmetric key from two keys and context", { cause: error });
74
+ }
75
+ }
76
+
77
+ //#endregion
78
+ //#region node_modules/hash-wasm/dist/index.esm.js
79
+ /******************************************************************************
80
+ Copyright (c) Microsoft Corporation.
81
+
82
+ Permission to use, copy, modify, and/or distribute this software for any
83
+ purpose with or without fee is hereby granted.
84
+
85
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
86
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
87
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
88
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
89
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
90
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
91
+ PERFORMANCE OF THIS SOFTWARE.
92
+ ***************************************************************************** */
93
+ function __awaiter(thisArg, _arguments, P, generator) {
94
+ function adopt(value) {
95
+ return value instanceof P ? value : new P(function(resolve) {
96
+ resolve(value);
97
+ });
98
+ }
99
+ return new (P || (P = Promise))(function(resolve, reject) {
100
+ function fulfilled(value) {
101
+ try {
102
+ step(generator.next(value));
103
+ } catch (e) {
104
+ reject(e);
105
+ }
106
+ }
107
+ function rejected(value) {
108
+ try {
109
+ step(generator["throw"](value));
110
+ } catch (e) {
111
+ reject(e);
112
+ }
113
+ }
114
+ function step(result) {
115
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
116
+ }
117
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
118
+ });
119
+ }
120
+ var Mutex = class {
121
+ constructor() {
122
+ this.mutex = Promise.resolve();
123
+ }
124
+ lock() {
125
+ let begin = () => {};
126
+ this.mutex = this.mutex.then(() => new Promise(begin));
127
+ return new Promise((res) => {
128
+ begin = res;
129
+ });
130
+ }
131
+ dispatch(fn) {
132
+ return __awaiter(this, void 0, void 0, function* () {
133
+ const unlock = yield this.lock();
134
+ try {
135
+ return yield Promise.resolve(fn());
136
+ } finally {
137
+ unlock();
138
+ }
139
+ });
140
+ }
141
+ };
142
+ var _a;
143
+ function getGlobal() {
144
+ if (typeof globalThis !== "undefined") return globalThis;
145
+ if (typeof self !== "undefined") return self;
146
+ if (typeof window !== "undefined") return window;
147
+ return global;
148
+ }
149
+ const globalObject = getGlobal();
150
+ const nodeBuffer = (_a = globalObject.Buffer) !== null && _a !== void 0 ? _a : null;
151
+ const textEncoder = globalObject.TextEncoder ? new globalObject.TextEncoder() : null;
152
+ function hexCharCodesToInt(a, b) {
153
+ return (a & 15) + (a >> 6 | a >> 3 & 8) << 4 | (b & 15) + (b >> 6 | b >> 3 & 8);
154
+ }
155
+ function writeHexToUInt8(buf, str) {
156
+ const size = str.length >> 1;
157
+ for (let i = 0; i < size; i++) {
158
+ const index = i << 1;
159
+ buf[i] = hexCharCodesToInt(str.charCodeAt(index), str.charCodeAt(index + 1));
160
+ }
161
+ }
162
+ function hexStringEqualsUInt8(str, buf) {
163
+ if (str.length !== buf.length * 2) return false;
164
+ for (let i = 0; i < buf.length; i++) {
165
+ const strIndex = i << 1;
166
+ if (buf[i] !== hexCharCodesToInt(str.charCodeAt(strIndex), str.charCodeAt(strIndex + 1))) return false;
167
+ }
168
+ return true;
169
+ }
170
+ const alpha = "a".charCodeAt(0) - 10;
171
+ const digit = "0".charCodeAt(0);
172
+ function getDigestHex(tmpBuffer, input, hashLength) {
173
+ let p = 0;
174
+ for (let i = 0; i < hashLength; i++) {
175
+ let nibble = input[i] >>> 4;
176
+ tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
177
+ nibble = input[i] & 15;
178
+ tmpBuffer[p++] = nibble > 9 ? nibble + alpha : nibble + digit;
179
+ }
180
+ return String.fromCharCode.apply(null, tmpBuffer);
181
+ }
182
+ const getUInt8Buffer = nodeBuffer !== null ? (data) => {
183
+ if (typeof data === "string") {
184
+ const buf = nodeBuffer.from(data, "utf8");
185
+ return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);
186
+ }
187
+ if (nodeBuffer.isBuffer(data)) return new Uint8Array(data.buffer, data.byteOffset, data.length);
188
+ if (ArrayBuffer.isView(data)) return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
189
+ throw new Error("Invalid data type!");
190
+ } : (data) => {
191
+ if (typeof data === "string") return textEncoder.encode(data);
192
+ if (ArrayBuffer.isView(data)) return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
193
+ throw new Error("Invalid data type!");
194
+ };
195
+ const base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
196
+ const base64Lookup = new Uint8Array(256);
197
+ for (let i = 0; i < 64; i++) base64Lookup[base64Chars.charCodeAt(i)] = i;
198
+ function encodeBase64(data, pad = true) {
199
+ const len = data.length;
200
+ const extraBytes = len % 3;
201
+ const parts = [];
202
+ const len2 = len - extraBytes;
203
+ for (let i = 0; i < len2; i += 3) {
204
+ const tmp = (data[i] << 16 & 16711680) + (data[i + 1] << 8 & 65280) + (data[i + 2] & 255);
205
+ const triplet = base64Chars.charAt(tmp >> 18 & 63) + base64Chars.charAt(tmp >> 12 & 63) + base64Chars.charAt(tmp >> 6 & 63) + base64Chars.charAt(tmp & 63);
206
+ parts.push(triplet);
207
+ }
208
+ if (extraBytes === 1) {
209
+ const tmp = data[len - 1];
210
+ const a = base64Chars.charAt(tmp >> 2);
211
+ const b = base64Chars.charAt(tmp << 4 & 63);
212
+ parts.push(`${a}${b}`);
213
+ if (pad) parts.push("==");
214
+ } else if (extraBytes === 2) {
215
+ const tmp = (data[len - 2] << 8) + data[len - 1];
216
+ const a = base64Chars.charAt(tmp >> 10);
217
+ const b = base64Chars.charAt(tmp >> 4 & 63);
218
+ const c = base64Chars.charAt(tmp << 2 & 63);
219
+ parts.push(`${a}${b}${c}`);
220
+ if (pad) parts.push("=");
221
+ }
222
+ return parts.join("");
223
+ }
224
+ function getDecodeBase64Length(data) {
225
+ let bufferLength = Math.floor(data.length * .75);
226
+ const len = data.length;
227
+ if (data[len - 1] === "=") {
228
+ bufferLength -= 1;
229
+ if (data[len - 2] === "=") bufferLength -= 1;
230
+ }
231
+ return bufferLength;
232
+ }
233
+ function decodeBase64(data) {
234
+ const bufferLength = getDecodeBase64Length(data);
235
+ const len = data.length;
236
+ const bytes = new Uint8Array(bufferLength);
237
+ let p = 0;
238
+ for (let i = 0; i < len; i += 4) {
239
+ const encoded1 = base64Lookup[data.charCodeAt(i)];
240
+ const encoded2 = base64Lookup[data.charCodeAt(i + 1)];
241
+ const encoded3 = base64Lookup[data.charCodeAt(i + 2)];
242
+ const encoded4 = base64Lookup[data.charCodeAt(i + 3)];
243
+ bytes[p] = encoded1 << 2 | encoded2 >> 4;
244
+ p += 1;
245
+ bytes[p] = (encoded2 & 15) << 4 | encoded3 >> 2;
246
+ p += 1;
247
+ bytes[p] = (encoded3 & 3) << 6 | encoded4 & 63;
248
+ p += 1;
249
+ }
250
+ return bytes;
251
+ }
252
+ const MAX_HEAP = 16 * 1024;
253
+ const WASM_FUNC_HASH_LENGTH = 4;
254
+ const wasmMutex = new Mutex();
255
+ const wasmModuleCache = /* @__PURE__ */ new Map();
256
+ function WASMInterface(binary, hashLength) {
257
+ return __awaiter(this, void 0, void 0, function* () {
258
+ let wasmInstance = null;
259
+ let memoryView = null;
260
+ let initialized = false;
261
+ if (typeof WebAssembly === "undefined") throw new Error("WebAssembly is not supported in this environment!");
262
+ const writeMemory = (data, offset = 0) => {
263
+ memoryView.set(data, offset);
264
+ };
265
+ const getMemory = () => memoryView;
266
+ const getExports = () => wasmInstance.exports;
267
+ const setMemorySize = (totalSize) => {
268
+ wasmInstance.exports.Hash_SetMemorySize(totalSize);
269
+ const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
270
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
271
+ memoryView = new Uint8Array(memoryBuffer, arrayOffset, totalSize);
272
+ };
273
+ const getStateSize = () => {
274
+ return new DataView(wasmInstance.exports.memory.buffer).getUint32(wasmInstance.exports.STATE_SIZE, true);
275
+ };
276
+ const loadWASMPromise = wasmMutex.dispatch(() => __awaiter(this, void 0, void 0, function* () {
277
+ if (!wasmModuleCache.has(binary.name)) {
278
+ const asm = decodeBase64(binary.data);
279
+ const promise = WebAssembly.compile(asm);
280
+ wasmModuleCache.set(binary.name, promise);
281
+ }
282
+ const module = yield wasmModuleCache.get(binary.name);
283
+ wasmInstance = yield WebAssembly.instantiate(module, {});
284
+ }));
285
+ const setupInterface = () => __awaiter(this, void 0, void 0, function* () {
286
+ if (!wasmInstance) yield loadWASMPromise;
287
+ const arrayOffset = wasmInstance.exports.Hash_GetBuffer();
288
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
289
+ memoryView = new Uint8Array(memoryBuffer, arrayOffset, MAX_HEAP);
290
+ });
291
+ const init = (bits = null) => {
292
+ initialized = true;
293
+ wasmInstance.exports.Hash_Init(bits);
294
+ };
295
+ const updateUInt8Array = (data) => {
296
+ let read = 0;
297
+ while (read < data.length) {
298
+ const chunk = data.subarray(read, read + MAX_HEAP);
299
+ read += chunk.length;
300
+ memoryView.set(chunk);
301
+ wasmInstance.exports.Hash_Update(chunk.length);
302
+ }
303
+ };
304
+ const update = (data) => {
305
+ if (!initialized) throw new Error("update() called before init()");
306
+ updateUInt8Array(getUInt8Buffer(data));
307
+ };
308
+ const digestChars = new Uint8Array(hashLength * 2);
309
+ const digest = (outputType, padding = null) => {
310
+ if (!initialized) throw new Error("digest() called before init()");
311
+ initialized = false;
312
+ wasmInstance.exports.Hash_Final(padding);
313
+ if (outputType === "binary") return memoryView.slice(0, hashLength);
314
+ return getDigestHex(digestChars, memoryView, hashLength);
315
+ };
316
+ const save = () => {
317
+ if (!initialized) throw new Error("save() can only be called after init() and before digest()");
318
+ const stateOffset = wasmInstance.exports.Hash_GetState();
319
+ const stateLength = getStateSize();
320
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
321
+ const internalState = new Uint8Array(memoryBuffer, stateOffset, stateLength);
322
+ const prefixedState = new Uint8Array(WASM_FUNC_HASH_LENGTH + stateLength);
323
+ writeHexToUInt8(prefixedState, binary.hash);
324
+ prefixedState.set(internalState, WASM_FUNC_HASH_LENGTH);
325
+ return prefixedState;
326
+ };
327
+ const load = (state) => {
328
+ if (!(state instanceof Uint8Array)) throw new Error("load() expects an Uint8Array generated by save()");
329
+ const stateOffset = wasmInstance.exports.Hash_GetState();
330
+ const stateLength = getStateSize();
331
+ const overallLength = WASM_FUNC_HASH_LENGTH + stateLength;
332
+ const memoryBuffer = wasmInstance.exports.memory.buffer;
333
+ if (state.length !== overallLength) throw new Error(`Bad state length (expected ${overallLength} bytes, got ${state.length})`);
334
+ if (!hexStringEqualsUInt8(binary.hash, state.subarray(0, WASM_FUNC_HASH_LENGTH))) throw new Error("This state was written by an incompatible hash implementation");
335
+ const internalState = state.subarray(WASM_FUNC_HASH_LENGTH);
336
+ new Uint8Array(memoryBuffer, stateOffset, stateLength).set(internalState);
337
+ initialized = true;
338
+ };
339
+ const isDataShort = (data) => {
340
+ if (typeof data === "string") return data.length < MAX_HEAP / 4;
341
+ return data.byteLength < MAX_HEAP;
342
+ };
343
+ let canSimplify = isDataShort;
344
+ switch (binary.name) {
345
+ case "argon2":
346
+ case "scrypt":
347
+ canSimplify = () => true;
348
+ break;
349
+ case "blake2b":
350
+ case "blake2s":
351
+ canSimplify = (data, initParam) => initParam <= 512 && isDataShort(data);
352
+ break;
353
+ case "blake3":
354
+ canSimplify = (data, initParam) => initParam === 0 && isDataShort(data);
355
+ break;
356
+ case "xxhash64":
357
+ case "xxhash3":
358
+ case "xxhash128":
359
+ case "crc64":
360
+ canSimplify = () => false;
361
+ break;
362
+ }
363
+ const calculate = (data, initParam = null, digestParam = null) => {
364
+ if (!canSimplify(data, initParam)) {
365
+ init(initParam);
366
+ update(data);
367
+ return digest("hex", digestParam);
368
+ }
369
+ const buffer = getUInt8Buffer(data);
370
+ memoryView.set(buffer);
371
+ wasmInstance.exports.Hash_Calculate(buffer.length, initParam, digestParam);
372
+ return getDigestHex(digestChars, memoryView, hashLength);
373
+ };
374
+ yield setupInterface();
375
+ return {
376
+ getMemory,
377
+ writeMemory,
378
+ getExports,
379
+ setMemorySize,
380
+ init,
381
+ update,
382
+ digest,
383
+ save,
384
+ load,
385
+ calculate,
386
+ hashLength
387
+ };
388
+ });
389
+ }
390
+ const mutex$l = new Mutex();
391
+ var wasmJson$k = {
392
+ name: "argon2",
393
+ data: "AGFzbQEAAAABKQVgAX8Bf2AAAX9gEH9/f39/f39/f39/f39/f38AYAR/f39/AGACf38AAwYFAAECAwQFBgEBAoCAAgYIAX8BQZCoBAsHQQQGbWVtb3J5AgASSGFzaF9TZXRNZW1vcnlTaXplAAAOSGFzaF9HZXRCdWZmZXIAAQ5IYXNoX0NhbGN1bGF0ZQAECvEyBVgBAn9BACEBAkAgAEEAKAKICCICRg0AAkAgACACayIAQRB2IABBgIB8cSAASWoiAEAAQX9HDQBB/wHADwtBACEBQQBBACkDiAggAEEQdK18NwOICAsgAcALcAECfwJAQQAoAoAIIgANAEEAPwBBEHQiADYCgAhBACgCiAgiAUGAgCBGDQACQEGAgCAgAWsiAEEQdiAAQYCAfHEgAElqIgBAAEF/Rw0AQQAPC0EAQQApA4gIIABBEHStfDcDiAhBACgCgAghAAsgAAvcDgECfiAAIAQpAwAiECAAKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAMIBAgDCkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgBCAQIAQpAwCFQiiJIhA3AwAgACAQIAApAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAwgECAMKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAEIBAgBCkDAIVCAYk3AwAgASAFKQMAIhAgASkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDSAQIA0pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAEgECABKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACANIBAgDSkDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAIgBikDACIQIAIpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIA4gECAOKQMAhUIgiSIQNwMAIAogECAKKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACACIBAgAikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDiAQIA4pAwCFQjCJIhA3AwAgCiAQIAopAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACADIAcpAwAiECADKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAPIBAgDykDAIVCIIkiEDcDACALIBAgCykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAyAQIAMpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA8gECAPKQMAhUIwiSIQNwMAIAsgECALKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgACAFKQMAIhAgACkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDyAQIA8pAwCFQiCJIhA3AwAgCiAQIAopAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAUgECAFKQMAhUIoiSIQNwMAIAAgECAAKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAPIBAgDykDAIVCMIkiEDcDACAKIBAgCikDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBSAQIAUpAwCFQgGJNwMAIAEgBikDACIQIAEpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAwgECAMKQMAhUIgiSIQNwMAIAsgECALKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACAGIBAgBikDAIVCKIkiEDcDACABIBAgASkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgDCAQIAwpAwCFQjCJIhA3AwAgCyAQIAspAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIAYgECAGKQMAhUIBiTcDACACIAcpAwAiECACKQMAIhF8IBFCAYZC/v///x+DIBBC/////w+DfnwiEDcDACANIBAgDSkDAIVCIIkiEDcDACAIIBAgCCkDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgByAQIAcpAwCFQiiJIhA3AwAgAiAQIAIpAwAiEXwgEEL/////D4MgEUIBhkL+////H4N+fCIQNwMAIA0gECANKQMAhUIwiSIQNwMAIAggECAIKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAHIBAgBykDAIVCAYk3AwAgAyAEKQMAIhAgAykDACIRfCARQgGGQv7///8fgyAQQv////8Pg358IhA3AwAgDiAQIA4pAwCFQiCJIhA3AwAgCSAQIAkpAwAiEXwgEUIBhkL+////H4MgEEL/////D4N+fCIQNwMAIAQgECAEKQMAhUIoiSIQNwMAIAMgECADKQMAIhF8IBBC/////w+DIBFCAYZC/v///x+DfnwiEDcDACAOIBAgDikDAIVCMIkiEDcDACAJIBAgCSkDACIRfCAQQv////8PgyARQgGGQv7///8fg358IhA3AwAgBCAQIAQpAwCFQgGJNwMAC98aAQN/QQAhBEEAIAIpAwAgASkDAIU3A5AIQQAgAikDCCABKQMIhTcDmAhBACACKQMQIAEpAxCFNwOgCEEAIAIpAxggASkDGIU3A6gIQQAgAikDICABKQMghTcDsAhBACACKQMoIAEpAyiFNwO4CEEAIAIpAzAgASkDMIU3A8AIQQAgAikDOCABKQM4hTcDyAhBACACKQNAIAEpA0CFNwPQCEEAIAIpA0ggASkDSIU3A9gIQQAgAikDUCABKQNQhTcD4AhBACACKQNYIAEpA1iFNwPoCEEAIAIpA2AgASkDYIU3A/AIQQAgAikDaCABKQNohTcD+AhBACACKQNwIAEpA3CFNwOACUEAIAIpA3ggASkDeIU3A4gJQQAgAikDgAEgASkDgAGFNwOQCUEAIAIpA4gBIAEpA4gBhTcDmAlBACACKQOQASABKQOQAYU3A6AJQQAgAikDmAEgASkDmAGFNwOoCUEAIAIpA6ABIAEpA6ABhTcDsAlBACACKQOoASABKQOoAYU3A7gJQQAgAikDsAEgASkDsAGFNwPACUEAIAIpA7gBIAEpA7gBhTcDyAlBACACKQPAASABKQPAAYU3A9AJQQAgAikDyAEgASkD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",
394
+ hash: "e4cdc523"
395
+ };
396
+ var wasmJson$j = {
397
+ name: "blake2b",
398
+ data: "AGFzbQEAAAABEQRgAAF/YAJ/fwBgAX8AYAAAAwoJAAECAwECAgABBQQBAQICBg4CfwFBsIsFC38AQYAICwdwCAZtZW1vcnkCAA5IYXNoX0dldEJ1ZmZlcgAACkhhc2hfRmluYWwAAwlIYXNoX0luaXQABQtIYXNoX1VwZGF0ZQAGDUhhc2hfR2V0U3RhdGUABw5IYXNoX0NhbGN1bGF0ZQAIClNUQVRFX1NJWkUDAQrTOAkFAEGACQvrAgIFfwF+AkAgAUEBSA0AAkACQAJAIAFBgAFBACgC4IoBIgJrIgNKDQAgASEEDAELQQBBADYC4IoBAkAgAkH/AEoNACACQeCJAWohBSAAIQRBACEGA0AgBSAELQAAOgAAIARBAWohBCAFQQFqIQUgAyAGQQFqIgZB/wFxSg0ACwtBAEEAKQPAiQEiB0KAAXw3A8CJAUEAQQApA8iJASAHQv9+Vq18NwPIiQFB4IkBEAIgACADaiEAAkAgASADayIEQYEBSA0AIAIgAWohBQNAQQBBACkDwIkBIgdCgAF8NwPAiQFBAEEAKQPIiQEgB0L/flatfDcDyIkBIAAQAiAAQYABaiEAIAVBgH9qIgVBgAJLDQALIAVBgH9qIQQMAQsgBEEATA0BC0EAIQUDQCAFQQAoAuCKAWpB4IkBaiAAIAVqLQAAOgAAIAQgBUEBaiIFQf8BcUoNAAsLQQBBACgC4IoBIARqNgLgigELC78uASR+QQBBACkD0IkBQQApA7CJASIBQQApA5CJAXwgACkDICICfCIDhULr+obav7X2wR+FQiCJIgRCq/DT9K/uvLc8fCIFIAGFQiiJIgYgA3wgACkDKCIBfCIHIASFQjCJIgggBXwiCSAGhUIBiSIKQQApA8iJAUEAKQOoiQEiBEEAKQOIiQF8IAApAxAiA3wiBYVCn9j52cKR2oKbf4VCIIkiC0K7zqqm2NDrs7t/fCIMIASFQiiJIg0gBXwgACkDGCIEfCIOfCAAKQNQIgV8Ig9BACkDwIkBQQApA6CJASIQQQApA4CJASIRfCAAKQMAIgZ8IhKFQtGFmu/6z5SH0QCFQiCJIhNCiJLznf/M+YTqAHwiFCAQhUIoiSIVIBJ8IAApAwgiEHwiFiAThUIwiSIXhUIgiSIYQQApA9iJAUEAKQO4iQEiE0EAKQOYiQF8IAApAzAiEnwiGYVC+cL4m5Gjs/DbAIVCIIkiGkLx7fT4paf9p6V/fCIbIBOFQiiJIhwgGXwgACkDOCITfCIZIBqFQjCJIhogG3wiG3wiHSAKhUIoiSIeIA98IAApA1giCnwiDyAYhUIwiSIYIB18Ih0gDiALhUIwiSIOIAx8Ih8gDYVCAYkiDCAWfCAAKQNAIgt8Ig0gGoVCIIkiFiAJfCIaIAyFQiiJIiAgDXwgACkDSCIJfCIhIBaFQjCJIhYgGyAchUIBiSIMIAd8IAApA2AiB3wiDSAOhUIgiSIOIBcgFHwiFHwiFyAMhUIoiSIbIA18IAApA2giDHwiHCAOhUIwiSIOIBd8IhcgG4VCAYkiGyAZIBQgFYVCAYkiFHwgACkDcCINfCIVIAiFQiCJIhkgH3wiHyAUhUIoiSIUIBV8IAApA3giCHwiFXwgDHwiIoVCIIkiI3wiJCAbhUIoiSIbICJ8IBJ8IiIgFyAYIBUgGYVCMIkiFSAffCIZIBSFQgGJIhQgIXwgDXwiH4VCIIkiGHwiFyAUhUIoiSIUIB98IAV8Ih8gGIVCMIkiGCAXfCIXIBSFQgGJIhR8IAF8IiEgFiAafCIWIBUgHSAehUIBiSIaIBx8IAl8IhyFQiCJIhV8Ih0gGoVCKIkiGiAcfCAIfCIcIBWFQjCJIhWFQiCJIh4gGSAOIBYgIIVCAYkiFiAPfCACfCIPhUIgiSIOfCIZIBaFQiiJIhYgD3wgC3wiDyAOhUIwiSIOIBl8Ihl8IiAgFIVCKIkiFCAhfCAEfCIhIB6FQjCJIh4gIHwiICAiICOFQjCJIiIgJHwiIyAbhUIBiSIbIBx8IAp8IhwgDoVCIIkiDiAXfCIXIBuFQiiJIhsgHHwgE3wiHCAOhUIwiSIOIBkgFoVCAYkiFiAffCAQfCIZICKFQiCJIh8gFSAdfCIVfCIdIBaFQiiJIhYgGXwgB3wiGSAfhUIwiSIfIB18Ih0gFoVCAYkiFiAVIBqFQgGJIhUgD3wgBnwiDyAYhUIgiSIYICN8IhogFYVCKIkiFSAPfCADfCIPfCAHfCIihUIgiSIjfCIkIBaFQiiJIhYgInwgBnwiIiAjhUIwiSIjICR8IiQgFoVCAYkiFiAOIBd8Ig4gDyAYhUIwiSIPICAgFIVCAYkiFCAZfCAKfCIXhUIgiSIYfCIZIBSFQiiJIhQgF3wgC3wiF3wgBXwiICAPIBp8Ig8gHyAOIBuFQgGJIg4gIXwgCHwiGoVCIIkiG3wiHyAOhUIoiSIOIBp8IAx8IhogG4VCMIkiG4VCIIkiISAdIB4gDyAVhUIBiSIPIBx8IAF8IhWFQiCJIhx8Ih0gD4VCKIkiDyAVfCADfCIVIByFQjCJIhwgHXwiHXwiHiAWhUIoiSIWICB8IA18IiAgIYVCMIkiISAefCIeIBogFyAYhUIwiSIXIBl8IhggFIVCAYkiFHwgCXwiGSAchUIgiSIaICR8IhwgFIVCKIkiFCAZfCACfCIZIBqFQjCJIhogHSAPhUIBiSIPICJ8IAR8Ih0gF4VCIIkiFyAbIB98Iht8Ih8gD4VCKIkiDyAdfCASfCIdIBeFQjCJIhcgH3wiHyAPhUIBiSIPIBsgDoVCAYkiDiAVfCATfCIVICOFQiCJIhsgGHwiGCAOhUIoiSIOIBV8IBB8IhV8IAx8IiKFQiCJIiN8IiQgD4VCKIkiDyAifCAHfCIiICOFQjCJIiMgJHwiJCAPhUIBiSIPIBogHHwiGiAVIBuFQjCJIhUgHiAWhUIBiSIWIB18IAR8IhuFQiCJIhx8Ih0gFoVCKIkiFiAbfCAQfCIbfCABfCIeIBUgGHwiFSAXIBogFIVCAYkiFCAgfCATfCIYhUIgiSIXfCIaIBSFQiiJIhQgGHwgCXwiGCAXhUIwiSIXhUIgiSIgIB8gISAVIA6FQgGJIg4gGXwgCnwiFYVCIIkiGXwiHyAOhUIoiSIOIBV8IA18IhUgGYVCMIkiGSAffCIffCIhIA+FQiiJIg8gHnwgBXwiHiAghUIwiSIgICF8IiEgGyAchUIwiSIbIB18IhwgFoVCAYkiFiAYfCADfCIYIBmFQiCJIhkgJHwiHSAWhUIoiSIWIBh8IBJ8IhggGYVCMIkiGSAfIA6FQgGJIg4gInwgAnwiHyAbhUIgiSIbIBcgGnwiF3wiGiAOhUIoiSIOIB98IAZ8Ih8gG4VCMIkiGyAafCIaIA6FQgGJIg4gFSAXIBSFQgGJIhR8IAh8IhUgI4VCIIkiFyAcfCIcIBSFQiiJIhQgFXwgC3wiFXwgBXwiIoVCIIkiI3wiJCAOhUIoiSIOICJ8IAh8IiIgGiAgIBUgF4VCMIkiFSAcfCIXIBSFQgGJIhQgGHwgCXwiGIVCIIkiHHwiGiAUhUIoiSIUIBh8IAZ8IhggHIVCMIkiHCAafCIaIBSFQgGJIhR8IAR8IiAgGSAdfCIZIBUgISAPhUIBiSIPIB98IAN8Ih2FQiCJIhV8Ih8gD4VCKIkiDyAdfCACfCIdIBWFQjCJIhWFQiCJIiEgFyAbIBkgFoVCAYkiFiAefCABfCIZhUIgiSIbfCIXIBaFQiiJIhYgGXwgE3wiGSAbhUIwiSIbIBd8Ihd8Ih4gFIVCKIkiFCAgfCAMfCIgICGFQjCJIiEgHnwiHiAiICOFQjCJIiIgJHwiIyAOhUIBiSIOIB18IBJ8Ih0gG4VCIIkiGyAafCIaIA6FQiiJIg4gHXwgC3wiHSAbhUIwiSIbIBcgFoVCAYkiFiAYfCANfCIXICKFQiCJIhggFSAffCIVfCIfIBaFQiiJIhYgF3wgEHwiFyAYhUIwiSIYIB98Ih8gFoVCAYkiFiAVIA+FQgGJIg8gGXwgCnwiFSAchUIgiSIZICN8IhwgD4VCKIkiDyAVfCAHfCIVfCASfCIihUIgiSIjfCIkIBaFQiiJIhYgInwgBXwiIiAjhUIwiSIjICR8IiQgFoVCAYkiFiAbIBp8IhogFSAZhUIwiSIVIB4gFIVCAYkiFCAXfCADfCIXhUIgiSIZfCIbIBSFQiiJIhQgF3wgB3wiF3wgAnwiHiAVIBx8IhUgGCAaIA6FQgGJIg4gIHwgC3wiGoVCIIkiGHwiHCAOhUIoiSIOIBp8IAR8IhogGIVCMIkiGIVCIIkiICAfICEgFSAPhUIBiSIPIB18IAZ8IhWFQiCJIh18Ih8gD4VCKIkiDyAVfCAKfCIVIB2FQjCJIh0gH3wiH3wiISAWhUIoiSIWIB58IAx8Ih4gIIVCMIkiICAhfCIhIBogFyAZhUIwiSIXIBt8IhkgFIVCAYkiFHwgEHwiGiAdhUIgiSIbICR8Ih0gFIVCKIkiFCAafCAJfCIaIBuFQjCJIhsgHyAPhUIBiSIPICJ8IBN8Ih8gF4VCIIkiFyAYIBx8Ihh8IhwgD4VCKIkiDyAffCABfCIfIBeFQjCJIhcgHHwiHCAPhUIBiSIPIBggDoVCAYkiDiAVfCAIfCIVICOFQiCJIhggGXwiGSAOhUIoiSIOIBV8IA18IhV8IA18IiKFQiCJIiN8IiQgD4VCKIkiDyAifCAMfCIiICOFQjCJIiMgJHwiJCAPhUIBiSIPIBsgHXwiGyAVIBiFQjCJIhUgISAWhUIBiSIWIB98IBB8IhiFQiCJIh18Ih8gFoVCKIkiFiAYfCAIfCIYfCASfCIhIBUgGXwiFSAXIBsgFIVCAYkiFCAefCAHfCIZhUIgiSIXfCIbIBSFQiiJIhQgGXwgAXwiGSAXhUIwiSIXhUIgiSIeIBwgICAVIA6FQgGJIg4gGnwgAnwiFYVCIIkiGnwiHCAOhUIoiSIOIBV8IAV8IhUgGoVCMIkiGiAcfCIcfCIgIA+FQiiJIg8gIXwgBHwiISAehUIwiSIeICB8IiAgGCAdhUIwiSIYIB98Ih0gFoVCAYkiFiAZfCAGfCIZIBqFQiCJIhogJHwiHyAWhUIoiSIWIBl8IBN8IhkgGoVCMIkiGiAcIA6FQgGJIg4gInwgCXwiHCAYhUIgiSIYIBcgG3wiF3wiGyAOhUIoiSIOIBx8IAN8IhwgGIVCMIkiGCAbfCIbIA6FQgGJIg4gFSAXIBSFQgGJIhR8IAt8IhUgI4VCIIkiFyAdfCIdIBSFQiiJIhQgFXwgCnwiFXwgBHwiIoVCIIkiI3wiJCAOhUIoiSIOICJ8IAl8IiIgGyAeIBUgF4VCMIkiFSAdfCIXIBSFQgGJIhQgGXwgDHwiGYVCIIkiHXwiGyAUhUIoiSIUIBl8IAp8IhkgHYVCMIkiHSAbfCIbIBSFQgGJIhR8IAN8Ih4gGiAffCIaIBUgICAPhUIBiSIPIBx8IAd8IhyFQiCJIhV8Ih8gD4VCKIkiDyAcfCAQfCIcIBWFQjCJIhWFQiCJIiAgFyAYIBogFoVCAYkiFiAhfCATfCIahUIgiSIYfCIXIBaFQiiJIhYgGnwgDXwiGiAYhUIwiSIYIBd8Ihd8IiEgFIVCKIkiFCAefCAFfCIeICCFQjCJIiAgIXwiISAiICOFQjCJIiIgJHwiIyAOhUIBiSIOIBx8IAt8IhwgGIVCIIkiGCAbfCIbIA6FQiiJIg4gHHwgEnwiHCAYhUIwiSIYIBcgFoVCAYkiFiAZfCABfCIXICKFQiCJIhkgFSAffCIVfCIfIBaFQiiJIhYgF3wgBnwiFyAZhUIwiSIZIB98Ih8gFoVCAYkiFiAVIA+FQgGJIg8gGnwgCHwiFSAdhUIgiSIaICN8Ih0gD4VCKIkiDyAVfCACfCIVfCANfCIihUIgiSIjfCIkIBaFQiiJIhYgInwgCXwiIiAjhUIwiSIjICR8IiQgFoVCAYkiFiAYIBt8IhggFSAahUIwiSIVICEgFIVCAYkiFCAXfCASfCIXhUIgiSIafCIbIBSFQiiJIhQgF3wgCHwiF3wgB3wiISAVIB18IhUgGSAYIA6FQgGJIg4gHnwgBnwiGIVCIIkiGXwiHSAOhUIoiSIOIBh8IAt8IhggGYVCMIkiGYVCIIkiHiAfICAgFSAPhUIBiSIPIBx8IAp8IhWFQiCJIhx8Ih8gD4VCKIkiDyAVfCAEfCIVIByFQjCJIhwgH3wiH3wiICAWhUIoiSIWICF8IAN8IiEgHoVCMIkiHiAgfCIgIBggFyAahUIwiSIXIBt8IhogFIVCAYkiFHwgBXwiGCAchUIgiSIbICR8IhwgFIVCKIkiFCAYfCABfCIYIBuFQjCJIhsgHyAPhUIBiSIPICJ8IAx8Ih8gF4VCIIkiFyAZIB18Ihl8Ih0gD4VCKIkiDyAffCATfCIfIBeFQjCJIhcgHXwiHSAPhUIBiSIPIBkgDoVCAYkiDiAVfCAQfCIVICOFQiCJIhkgGnwiGiAOhUIoiSIOIBV8IAJ8IhV8IBN8IiKFQiCJIiN8IiQgD4VCKIkiDyAifCASfCIiICOFQjCJIiMgJHwiJCAPhUIBiSIPIBsgHHwiGyAVIBmFQjCJIhUgICAWhUIBiSIWIB98IAt8IhmFQiCJIhx8Ih8gFoVCKIkiFiAZfCACfCIZfCAJfCIgIBUgGnwiFSAXIBsgFIVCAYkiFCAhfCAFfCIahUIgiSIXfCIbIBSFQiiJIhQgGnwgA3wiGiAXhUIwiSIXhUIgiSIhIB0gHiAVIA6FQgGJIg4gGHwgEHwiFYVCIIkiGHwiHSAOhUIoiSIOIBV8IAF8IhUgGIVCMIkiGCAdfCIdfCIeIA+FQiiJIg8gIHwgDXwiICAhhUIwiSIhIB58Ih4gGSAchUIwiSIZIB98IhwgFoVCAYkiFiAafCAIfCIaIBiFQiCJIhggJHwiHyAWhUIoiSIWIBp8IAp8IhogGIVCMIkiGCAdIA6FQgGJIg4gInwgBHwiHSAZhUIgiSIZIBcgG3wiF3wiGyAOhUIoiSIOIB18IAd8Ih0gGYVCMIkiGSAbfCIbIA6FQgGJIg4gFSAXIBSFQgGJIhR8IAx8IhUgI4VCIIkiFyAcfCIcIBSFQiiJIhQgFXwgBnwiFXwgEnwiIoVCIIkiI3wiJCAOhUIoiSIOICJ8IBN8IiIgGyAhIBUgF4VCMIkiFSAcfCIXIBSFQgGJIhQgGnwgBnwiGoVCIIkiHHwiGyAUhUIoiSIUIBp8IBB8IhogHIVCMIkiHCAbfCIbIBSFQgGJIhR8IA18IiEgGCAffCIYIBUgHiAPhUIBiSIPIB18IAJ8Ih2FQiCJIhV8Ih4gD4VCKIkiDyAdfCABfCIdIBWFQjCJIhWFQiCJIh8gFyAZIBggFoVCAYkiFiAgfCADfCIYhUIgiSIZfCIXIBaFQiiJIhYgGHwgBHwiGCAZhUIwiSIZIBd8Ihd8IiAgFIVCKIkiFCAhfCAIfCIhIB+FQjCJIh8gIHwiICAiICOFQjCJIiIgJHwiIyAOhUIBiSIOIB18IAd8Ih0gGYVCIIkiGSAbfCIbIA6FQiiJIg4gHXwgDHwiHSAZhUIwiSIZIBcgFoVCAYkiFiAafCALfCIXICKFQiCJIhogFSAefCIVfCIeIBaFQiiJIhYgF3wgCXwiFyAahUIwiSIaIB58Ih4gFoVCAYkiFiAVIA+FQgGJIg8gGHwgBXwiFSAchUIgiSIYICN8IhwgD4VCKIkiDyAVfCAKfCIVfCACfCIChUIgiSIifCIjIBaFQiiJIhYgAnwgC3wiAiAihUIwiSILICN8IiIgFoVCAYkiFiAZIBt8IhkgFSAYhUIwiSIVICAgFIVCAYkiFCAXfCANfCINhUIgiSIXfCIYIBSFQiiJIhQgDXwgBXwiBXwgEHwiECAVIBx8Ig0gGiAZIA6FQgGJIg4gIXwgDHwiDIVCIIkiFXwiGSAOhUIoiSIOIAx8IBJ8IhIgFYVCMIkiDIVCIIkiFSAeIB8gDSAPhUIBiSINIB18IAl8IgmFQiCJIg98IhogDYVCKIkiDSAJfCAIfCIJIA+FQjCJIgggGnwiD3wiGiAWhUIoiSIWIBB8IAd8IhAgEYUgDCAZfCIHIA6FQgGJIgwgCXwgCnwiCiALhUIgiSILIAUgF4VCMIkiBSAYfCIJfCIOIAyFQiiJIgwgCnwgE3wiEyALhUIwiSIKIA58IguFNwOAiQFBACADIAYgDyANhUIBiSINIAJ8fCICIAWFQiCJIgUgB3wiBiANhUIoiSIHIAJ8fCICQQApA4iJAYUgBCABIBIgCSAUhUIBiSIDfHwiASAIhUIgiSISICJ8IgkgA4VCKIkiAyABfHwiASAShUIwiSIEIAl8IhKFNwOIiQFBACATQQApA5CJAYUgECAVhUIwiSIQIBp8IhOFNwOQiQFBACABQQApA5iJAYUgAiAFhUIwiSICIAZ8IgGFNwOYiQFBACASIAOFQgGJQQApA6CJAYUgAoU3A6CJAUEAIBMgFoVCAYlBACkDqIkBhSAKhTcDqIkBQQAgASAHhUIBiUEAKQOwiQGFIASFNwOwiQFBACALIAyFQgGJQQApA7iJAYUgEIU3A7iJAQvdAgUBfwF+AX8BfgJ/IwBBwABrIgAkAAJAQQApA9CJAUIAUg0AQQBBACkDwIkBIgFBACgC4IoBIgKsfCIDNwPAiQFBAEEAKQPIiQEgAyABVK18NwPIiQECQEEALQDoigFFDQBBAEJ/NwPYiQELQQBCfzcD0IkBAkAgAkH/AEoNAEEAIQQDQCACIARqQeCJAWpBADoAACAEQQFqIgRBgAFBACgC4IoBIgJrSA0ACwtB4IkBEAIgAEEAKQOAiQE3AwAgAEEAKQOIiQE3AwggAEEAKQOQiQE3AxAgAEEAKQOYiQE3AxggAEEAKQOgiQE3AyAgAEEAKQOoiQE3AyggAEEAKQOwiQE3AzAgAEEAKQO4iQE3AzhBACgC5IoBIgVBAUgNAEEAIQRBACECA0AgBEGACWogACAEai0AADoAACAEQQFqIQQgBSACQQFqIgJB/wFxSg0ACwsgAEHAAGokAAv9AwMBfwF+AX8jAEGAAWsiAiQAQQBBgQI7AfKKAUEAIAE6APGKAUEAIAA6APCKAUGQfiEAA0AgAEGAiwFqQgA3AAAgAEH4igFqQgA3AAAgAEHwigFqQgA3AAAgAEEYaiIADQALQQAhAEEAQQApA/CKASIDQoiS853/zPmE6gCFNwOAiQFBAEEAKQP4igFCu86qptjQ67O7f4U3A4iJAUEAQQApA4CLAUKr8NP0r+68tzyFNwOQiQFBAEEAKQOIiwFC8e30+KWn/aelf4U3A5iJAUEAQQApA5CLAULRhZrv+s+Uh9EAhTcDoIkBQQBBACkDmIsBQp/Y+dnCkdqCm3+FNwOoiQFBAEEAKQOgiwFC6/qG2r+19sEfhTcDsIkBQQBBACkDqIsBQvnC+JuRo7Pw2wCFNwO4iQFBACADp0H/AXE2AuSKAQJAIAFBAUgNACACQgA3A3ggAkIANwNwIAJCADcDaCACQgA3A2AgAkIANwNYIAJCADcDUCACQgA3A0ggAkIANwNAIAJCADcDOCACQgA3AzAgAkIANwMoIAJCADcDICACQgA3AxggAkIANwMQIAJCADcDCCACQgA3AwBBACEEA0AgAiAAaiAAQYAJai0AADoAACAAQQFqIQAgBEEBaiIEQf8BcSABSA0ACyACQYABEAELIAJBgAFqJAALEgAgAEEDdkH/P3EgAEEQdhAECwkAQYAJIAAQAQsGAEGAiQELGwAgAUEDdkH/P3EgAUEQdhAEQYAJIAAQARADCwsLAQBBgAgLBPAAAAA=",
399
+ hash: "c6f286e6"
400
+ };
401
+ const mutex$k = new Mutex();
402
+ function validateBits$4(bits) {
403
+ if (!Number.isInteger(bits) || bits < 8 || bits > 512 || bits % 8 !== 0) return /* @__PURE__ */ new Error("Invalid variant! Valid values: 8, 16, ..., 512");
404
+ return null;
405
+ }
406
+ function getInitParam$1(outputBits, keyBits) {
407
+ return outputBits | keyBits << 16;
408
+ }
409
+ /**
410
+ * Creates a new BLAKE2b hash instance
411
+ * @param bits Number of output bits, which has to be a number
412
+ * divisible by 8, between 8 and 512. Defaults to 512.
413
+ * @param key Optional key (string, Buffer or TypedArray). Maximum length is 64 bytes.
414
+ */
415
+ function createBLAKE2b(bits = 512, key = null) {
416
+ if (validateBits$4(bits)) return Promise.reject(validateBits$4(bits));
417
+ let keyBuffer = null;
418
+ let initParam = bits;
419
+ if (key !== null) {
420
+ keyBuffer = getUInt8Buffer(key);
421
+ if (keyBuffer.length > 64) return Promise.reject(/* @__PURE__ */ new Error("Max key length is 64 bytes"));
422
+ initParam = getInitParam$1(bits, keyBuffer.length);
423
+ }
424
+ const outputSize = bits / 8;
425
+ return WASMInterface(wasmJson$j, outputSize).then((wasm) => {
426
+ if (initParam > 512) wasm.writeMemory(keyBuffer);
427
+ wasm.init(initParam);
428
+ const obj = {
429
+ init: initParam > 512 ? () => {
430
+ wasm.writeMemory(keyBuffer);
431
+ wasm.init(initParam);
432
+ return obj;
433
+ } : () => {
434
+ wasm.init(initParam);
435
+ return obj;
436
+ },
437
+ update: (data) => {
438
+ wasm.update(data);
439
+ return obj;
440
+ },
441
+ digest: (outputType) => wasm.digest(outputType),
442
+ save: () => wasm.save(),
443
+ load: (data) => {
444
+ wasm.load(data);
445
+ return obj;
446
+ },
447
+ blockSize: 128,
448
+ digestSize: outputSize
449
+ };
450
+ return obj;
451
+ });
452
+ }
453
+ function encodeResult(salt, options, res) {
454
+ const parameters = [
455
+ `m=${options.memorySize}`,
456
+ `t=${options.iterations}`,
457
+ `p=${options.parallelism}`
458
+ ].join(",");
459
+ return `$argon2${options.hashType}$v=19$${parameters}$${encodeBase64(salt, false)}$${encodeBase64(res, false)}`;
460
+ }
461
+ const uint32View = /* @__PURE__ */ new DataView(/* @__PURE__ */ new ArrayBuffer(4));
462
+ function int32LE(x) {
463
+ uint32View.setInt32(0, x, true);
464
+ return new Uint8Array(uint32View.buffer);
465
+ }
466
+ function hashFunc(blake512, buf, len) {
467
+ return __awaiter(this, void 0, void 0, function* () {
468
+ if (len <= 64) {
469
+ const blake = yield createBLAKE2b(len * 8);
470
+ blake.update(int32LE(len));
471
+ blake.update(buf);
472
+ return blake.digest("binary");
473
+ }
474
+ const r = Math.ceil(len / 32) - 2;
475
+ const ret = new Uint8Array(len);
476
+ blake512.init();
477
+ blake512.update(int32LE(len));
478
+ blake512.update(buf);
479
+ let vp = blake512.digest("binary");
480
+ ret.set(vp.subarray(0, 32), 0);
481
+ for (let i = 1; i < r; i++) {
482
+ blake512.init();
483
+ blake512.update(vp);
484
+ vp = blake512.digest("binary");
485
+ ret.set(vp.subarray(0, 32), i * 32);
486
+ }
487
+ const partialBytesNeeded = len - 32 * r;
488
+ let blakeSmall;
489
+ if (partialBytesNeeded === 64) {
490
+ blakeSmall = blake512;
491
+ blakeSmall.init();
492
+ } else blakeSmall = yield createBLAKE2b(partialBytesNeeded * 8);
493
+ blakeSmall.update(vp);
494
+ vp = blakeSmall.digest("binary");
495
+ ret.set(vp.subarray(0, partialBytesNeeded), r * 32);
496
+ return ret;
497
+ });
498
+ }
499
+ function getHashType(type) {
500
+ switch (type) {
501
+ case "d": return 0;
502
+ case "i": return 1;
503
+ default: return 2;
504
+ }
505
+ }
506
+ function argon2Internal(options) {
507
+ return __awaiter(this, void 0, void 0, function* () {
508
+ var _a;
509
+ const { parallelism, iterations, hashLength } = options;
510
+ const password = getUInt8Buffer(options.password);
511
+ const salt = getUInt8Buffer(options.salt);
512
+ const version = 19;
513
+ const hashType = getHashType(options.hashType);
514
+ const { memorySize } = options;
515
+ const secret = getUInt8Buffer((_a = options.secret) !== null && _a !== void 0 ? _a : "");
516
+ const [argon2Interface, blake512] = yield Promise.all([WASMInterface(wasmJson$k, 1024), createBLAKE2b(512)]);
517
+ argon2Interface.setMemorySize(memorySize * 1024 + 1024);
518
+ const initVector = new Uint8Array(24);
519
+ const initVectorView = new DataView(initVector.buffer);
520
+ initVectorView.setInt32(0, parallelism, true);
521
+ initVectorView.setInt32(4, hashLength, true);
522
+ initVectorView.setInt32(8, memorySize, true);
523
+ initVectorView.setInt32(12, iterations, true);
524
+ initVectorView.setInt32(16, version, true);
525
+ initVectorView.setInt32(20, hashType, true);
526
+ argon2Interface.writeMemory(initVector, memorySize * 1024);
527
+ blake512.init();
528
+ blake512.update(initVector);
529
+ blake512.update(int32LE(password.length));
530
+ blake512.update(password);
531
+ blake512.update(int32LE(salt.length));
532
+ blake512.update(salt);
533
+ blake512.update(int32LE(secret.length));
534
+ blake512.update(secret);
535
+ blake512.update(int32LE(0));
536
+ const lanes = Math.floor(memorySize / (parallelism * 4)) * 4;
537
+ const param = new Uint8Array(72);
538
+ const H0 = blake512.digest("binary");
539
+ param.set(H0);
540
+ for (let lane = 0; lane < parallelism; lane++) {
541
+ param.set(int32LE(0), 64);
542
+ param.set(int32LE(lane), 68);
543
+ let position = lane * lanes;
544
+ let chunk = yield hashFunc(blake512, param, 1024);
545
+ argon2Interface.writeMemory(chunk, position * 1024);
546
+ position += 1;
547
+ param.set(int32LE(1), 64);
548
+ chunk = yield hashFunc(blake512, param, 1024);
549
+ argon2Interface.writeMemory(chunk, position * 1024);
550
+ }
551
+ const C = new Uint8Array(1024);
552
+ writeHexToUInt8(C, argon2Interface.calculate(new Uint8Array([]), memorySize));
553
+ const res = yield hashFunc(blake512, C, hashLength);
554
+ if (options.outputType === "hex") return getDigestHex(new Uint8Array(hashLength * 2), res, hashLength);
555
+ if (options.outputType === "encoded") return encodeResult(salt, options, res);
556
+ return res;
557
+ });
558
+ }
559
+ const validateOptions$3 = (options) => {
560
+ var _a;
561
+ if (!options || typeof options !== "object") throw new Error("Invalid options parameter. It requires an object.");
562
+ if (!options.password) throw new Error("Password must be specified");
563
+ options.password = getUInt8Buffer(options.password);
564
+ if (options.password.length < 1) throw new Error("Password must be specified");
565
+ if (!options.salt) throw new Error("Salt must be specified");
566
+ options.salt = getUInt8Buffer(options.salt);
567
+ if (options.salt.length < 8) throw new Error("Salt should be at least 8 bytes long");
568
+ options.secret = getUInt8Buffer((_a = options.secret) !== null && _a !== void 0 ? _a : "");
569
+ if (!Number.isInteger(options.iterations) || options.iterations < 1) throw new Error("Iterations should be a positive number");
570
+ if (!Number.isInteger(options.parallelism) || options.parallelism < 1) throw new Error("Parallelism should be a positive number");
571
+ if (!Number.isInteger(options.hashLength) || options.hashLength < 4) throw new Error("Hash length should be at least 4 bytes.");
572
+ if (!Number.isInteger(options.memorySize)) throw new Error("Memory size should be specified.");
573
+ if (options.memorySize < 8 * options.parallelism) throw new Error("Memory size should be at least 8 * parallelism.");
574
+ if (options.outputType === void 0) options.outputType = "hex";
575
+ if (![
576
+ "hex",
577
+ "binary",
578
+ "encoded"
579
+ ].includes(options.outputType)) throw new Error(`Insupported output type ${options.outputType}. Valid values: ['hex', 'binary', 'encoded']`);
580
+ };
581
+ /**
582
+ * Calculates hash using the argon2id password-hashing function
583
+ * @returns Computed hash
584
+ */
585
+ function argon2id(options) {
586
+ return __awaiter(this, void 0, void 0, function* () {
587
+ validateOptions$3(options);
588
+ return argon2Internal(Object.assign(Object.assign({}, options), { hashType: "id" }));
589
+ });
590
+ }
591
+ const mutex$j = new Mutex();
592
+ const mutex$i = new Mutex();
593
+ const mutex$h = new Mutex();
594
+ const mutex$g = new Mutex();
595
+ const polyBuffer = new Uint8Array(8);
596
+ const mutex$f = new Mutex();
597
+ const mutex$e = new Mutex();
598
+ const mutex$d = new Mutex();
599
+ const mutex$c = new Mutex();
600
+ const mutex$b = new Mutex();
601
+ const mutex$a = new Mutex();
602
+ const mutex$9 = new Mutex();
603
+ const mutex$8 = new Mutex();
604
+ const mutex$7 = new Mutex();
605
+ const mutex$6 = new Mutex();
606
+ const mutex$5 = new Mutex();
607
+ const seedBuffer$2 = new Uint8Array(8);
608
+ const mutex$4 = new Mutex();
609
+ const seedBuffer$1 = new Uint8Array(8);
610
+ const mutex$3 = new Mutex();
611
+ const seedBuffer = new Uint8Array(8);
612
+ const mutex$2 = new Mutex();
613
+ const mutex$1 = new Mutex();
614
+ const mutex = new Mutex();
615
+
616
+ //#endregion
617
+ //#region src/derive-key/core.ts
618
+ /**
619
+ * Calculates hash using the argon2id password-hashing function
620
+ *
621
+ * @param password - The user's password
622
+ * @param salt - The given salt
623
+ * @param parallelism - The degree of parallelism
624
+ * @param iterations - The number of iterations
625
+ * @param memorySize - The memory size in KB
626
+ * @param hashLength - The desired hash byte length
627
+ * @returns The resulting hash
628
+ */
629
+ async function argon2(password, salt, parallelism = ARGON2ID_PARALLELISM, iterations = ARGON2ID_ITERATIONS, memorySize = ARGON2ID_MEMORY_SIZE, hashLength = ARGON2ID_OUTPUT_BYTE_LENGTH) {
630
+ return argon2id({
631
+ password,
632
+ salt,
633
+ parallelism,
634
+ iterations,
635
+ memorySize,
636
+ hashLength,
637
+ outputType: "binary"
638
+ });
639
+ }
640
+ /**
641
+ * Samples a salt
642
+ *
643
+ * @returns The salt
644
+ */
645
+ function sampleSalt() {
646
+ try {
647
+ const salt = new Uint8Array(ARGON2ID_SALT_BYTE_LENGTH);
648
+ crypto.getRandomValues(salt);
649
+ return salt;
650
+ } catch (error) {
651
+ throw new Error("Failed to sample salt", { cause: error });
652
+ }
653
+ }
654
+
655
+ //#endregion
656
+ //#region src/derive-key/deriveKeysFromPassword.ts
657
+ /**
658
+ * Derives a symmetric key from a user's password with a randomly sampled salt
659
+ *
660
+ * @param password - The user's password
661
+ * @returns The derived secret key and randomly sampled salt
662
+ */
663
+ async function getKeyFromPassword(password) {
664
+ try {
665
+ if (!password) throw new Error("No password given");
666
+ const salt = sampleSalt();
667
+ return {
668
+ key: await argon2(password, salt),
669
+ salt
670
+ };
671
+ } catch (error) {
672
+ throw new Error("Failed to derive key from password", { cause: error });
673
+ }
674
+ }
675
+ /**
676
+ * Derives a symmetric key from a user's password and salt
677
+ *
678
+ * @param password - The user's password
679
+ * @param salt - The given salt
680
+ * @returns The derived secret key
681
+ */
682
+ async function getKeyFromPasswordAndSalt(password, salt) {
683
+ try {
684
+ if (!salt.length) throw new Error("No salt given");
685
+ if (!password) throw new Error("No password given");
686
+ return await argon2(password, salt);
687
+ } catch (error) {
688
+ throw new Error("Failed to derive key from password and salt", { cause: error });
689
+ }
690
+ }
691
+ /**
692
+ * Derives a HEX symmetric key from a user's password with a randomly sampled salt
693
+ *
694
+ * @param password - The user's password
695
+ * @returns The derived HEX secret key and randomly sampled HEX salt
696
+ */
697
+ async function getKeyFromPasswordHex(password) {
698
+ try {
699
+ const { key, salt } = await getKeyFromPassword(password);
700
+ return {
701
+ keyHex: uint8ArrayToHex(key),
702
+ saltHex: uint8ArrayToHex(salt)
703
+ };
704
+ } catch (error) {
705
+ throw new Error("Failed to derive key from password", { cause: error });
706
+ }
707
+ }
708
+ /**
709
+ * Derives a HEX symmetric key from a user's password and salt
710
+ *
711
+ * @param password - The user's password
712
+ * @param saltHex - The given HEX salt
713
+ * @returns The derived HEX secret key
714
+ */
715
+ async function getKeyFromPasswordAndSaltHex(password, saltHex) {
716
+ try {
717
+ return uint8ArrayToHex(await getKeyFromPasswordAndSalt(password, hexToUint8Array(saltHex)));
718
+ } catch (error) {
719
+ throw new Error("Failed to derive key from password and salt", { cause: error });
720
+ }
721
+ }
722
+ /**
723
+ * Verifies the derived key
724
+ *
725
+ * @param password - The user's password
726
+ * @param saltHex - The given HEX salt
727
+ * @param keyHex - The derived HEX key
728
+ * @returns The result of the key verification
729
+ */
730
+ async function verifyKeyFromPasswordHex(password, saltHex, keyHex) {
731
+ return keyHex === await getKeyFromPasswordAndSaltHex(password, saltHex);
732
+ }
733
+
734
+ //#endregion
735
+ //#region src/derive-key/index.ts
736
+ var derive_key_exports = /* @__PURE__ */ __exportAll({
737
+ deriveSymmetricCryptoKeyFromContext: () => deriveSymmetricCryptoKeyFromContext,
738
+ deriveSymmetricCryptoKeyFromTwoKeys: () => deriveSymmetricCryptoKeyFromTwoKeys,
739
+ deriveSymmetricKeyFromContext: () => deriveSymmetricKeyFromContext,
740
+ deriveSymmetricKeyFromTwoKeys: () => deriveSymmetricKeyFromTwoKeys,
741
+ deriveSymmetricKeyFromTwoKeysAndContext: () => deriveSymmetricKeyFromTwoKeysAndContext,
742
+ getKeyFromPassword: () => getKeyFromPassword,
743
+ getKeyFromPasswordAndSalt: () => getKeyFromPasswordAndSalt,
744
+ getKeyFromPasswordAndSaltHex: () => getKeyFromPasswordAndSaltHex,
745
+ getKeyFromPasswordHex: () => getKeyFromPasswordHex,
746
+ verifyKeyFromPasswordHex: () => verifyKeyFromPasswordHex
747
+ });
748
+
749
+ //#endregion
750
+ export { getKeyFromPasswordHex as a, deriveSymmetricCryptoKeyFromTwoKeys as c, deriveSymmetricKeyFromTwoKeysAndContext as d, getKeyFromPasswordAndSaltHex as i, deriveSymmetricKeyFromContext as l, getKeyFromPassword as n, verifyKeyFromPasswordHex as o, getKeyFromPasswordAndSalt as r, deriveSymmetricCryptoKeyFromContext as s, derive_key_exports as t, deriveSymmetricKeyFromTwoKeys as u };
751
+ //# sourceMappingURL=derive-key-Be7hS-cN.mjs.map