internxt-crypto 0.0.10-alpha → 0.0.13

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