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.
- package/README.md +3 -4
- package/dist/aes-DSDxP8uF.mjs +184 -0
- package/dist/aes-DSDxP8uF.mjs.map +1 -0
- package/dist/aes-bOrKZuUC.js +226 -0
- package/dist/aes-bOrKZuUC.js.map +1 -0
- package/dist/asymmetric-crypto.d.mts +5 -2
- package/dist/asymmetric-crypto.d.mts.map +1 -0
- package/dist/asymmetric-crypto.d.ts +5 -2
- package/dist/asymmetric-crypto.d.ts.map +1 -0
- package/dist/asymmetric-crypto.js +9 -92
- package/dist/asymmetric-crypto.mjs +2 -84
- package/dist/chunk-DQk6qfdC.mjs +18 -0
- package/dist/chunk-EbLFQX5m.js +60 -0
- package/dist/constants.d.mts +5 -11
- package/dist/constants.d.mts.map +1 -0
- package/dist/constants.d.ts +5 -11
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +33 -49
- package/dist/constants.js.map +1 -1
- package/dist/constants.mjs +32 -40
- package/dist/constants.mjs.map +1 -1
- package/dist/derive-key.d.mts +11 -8
- package/dist/derive-key.d.mts.map +1 -0
- package/dist/derive-key.d.ts +11 -8
- package/dist/derive-key.d.ts.map +1 -0
- package/dist/derive-key.js +13 -795
- package/dist/derive-key.mjs +2 -783
- package/dist/deriveKeysFromPassword-DJRWZ8Rw.mjs +735 -0
- package/dist/deriveKeysFromPassword-DJRWZ8Rw.mjs.map +1 -0
- package/dist/deriveKeysFromPassword-Ko7NxkHM.js +2492 -0
- package/dist/deriveKeysFromPassword-Ko7NxkHM.js.map +1 -0
- package/dist/email-crypto.d.mts +55 -78
- package/dist/email-crypto.d.mts.map +1 -0
- package/dist/email-crypto.d.ts +55 -78
- package/dist/email-crypto.d.ts.map +1 -0
- package/dist/email-crypto.js +13 -1409
- package/dist/email-crypto.mjs +2 -1380
- package/dist/email-search.d.mts +36 -32
- package/dist/email-search.d.mts.map +1 -0
- package/dist/email-search.d.ts +36 -32
- package/dist/email-search.d.ts.map +1 -0
- package/dist/email-search.js +534 -540
- package/dist/email-search.js.map +1 -1
- package/dist/email-search.mjs +532 -538
- package/dist/email-search.mjs.map +1 -1
- package/dist/emailEncryptionKey-27mIHh18.mjs +150 -0
- package/dist/emailEncryptionKey-27mIHh18.mjs.map +1 -0
- package/dist/emailEncryptionKey-DbaDAdoW.js +167 -0
- package/dist/emailEncryptionKey-DbaDAdoW.js.map +1 -0
- package/dist/emailKeys-BJGdkLrg.js +593 -0
- package/dist/emailKeys-BJGdkLrg.js.map +1 -0
- package/dist/emailKeys-Fp9WR3wl.mjs +509 -0
- package/dist/emailKeys-Fp9WR3wl.mjs.map +1 -0
- package/dist/genID-3Er5IowC.mjs +153 -0
- package/dist/genID-3Er5IowC.mjs.map +1 -0
- package/dist/genID-YJSl3YhL.js +238 -0
- package/dist/genID-YJSl3YhL.js.map +1 -0
- package/dist/hash.d.mts +18 -15
- package/dist/hash.d.mts.map +1 -0
- package/dist/hash.d.ts +18 -15
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +12 -95
- package/dist/hash.mjs +2 -84
- package/dist/index.d.mts +15 -18
- package/dist/index.d.mts.map +1 -0
- package/dist/index.d.ts +15 -18
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +125 -2698
- package/dist/index.mjs +13 -2538
- package/dist/keys-BfcaiAOv.mjs +90 -0
- package/dist/keys-BfcaiAOv.mjs.map +1 -0
- package/dist/keys-CinT7kEY.js +125 -0
- package/dist/keys-CinT7kEY.js.map +1 -0
- package/dist/keystore-crypto.d.mts +17 -46
- package/dist/keystore-crypto.d.mts.map +1 -0
- package/dist/keystore-crypto.d.ts +17 -46
- package/dist/keystore-crypto.d.ts.map +1 -0
- package/dist/keystore-crypto.js +5 -529
- package/dist/keystore-crypto.mjs +2 -500
- package/dist/kyber1024-PpwE1rki.mjs +144 -0
- package/dist/kyber1024-PpwE1rki.mjs.map +1 -0
- package/dist/kyber1024-jeKS8CXf.js +173 -0
- package/dist/kyber1024-jeKS8CXf.js.map +1 -0
- package/dist/{kyber768-B87rMQ7u.d.mts → kyber768-DGBB_RS7.d.ts} +8 -6
- package/dist/kyber768-DGBB_RS7.d.ts.map +1 -0
- package/dist/{kyber768-B87rMQ7u.d.ts → kyber768-DzIcGg1i.d.mts} +8 -6
- package/dist/kyber768-DzIcGg1i.d.mts.map +1 -0
- package/dist/mac-BMb1F0dN.js +170 -0
- package/dist/mac-BMb1F0dN.js.map +1 -0
- package/dist/mac-ZpRlx8Fs.mjs +116 -0
- package/dist/mac-ZpRlx8Fs.mjs.map +1 -0
- package/dist/post-quantum-crypto.d.mts +23 -27
- package/dist/post-quantum-crypto.d.mts.map +1 -0
- package/dist/post-quantum-crypto.d.ts +23 -27
- package/dist/post-quantum-crypto.d.ts.map +1 -0
- package/dist/post-quantum-crypto.js +14 -92
- package/dist/post-quantum-crypto.mjs +2 -89
- package/dist/storage-service.d.mts +28 -34
- package/dist/storage-service.d.mts.map +1 -0
- package/dist/storage-service.d.ts +28 -34
- package/dist/storage-service.d.ts.map +1 -0
- package/dist/storage-service.js +51 -53
- package/dist/storage-service.js.map +1 -1
- package/dist/storage-service.mjs +40 -51
- package/dist/storage-service.mjs.map +1 -1
- package/dist/symmetric-crypto.d.mts +8 -7
- package/dist/symmetric-crypto.d.mts.map +1 -0
- package/dist/symmetric-crypto.d.ts +8 -7
- package/dist/symmetric-crypto.d.ts.map +1 -0
- package/dist/symmetric-crypto.js +10 -142
- package/dist/symmetric-crypto.mjs +2 -133
- package/dist/types.d.mts +71 -69
- package/dist/types.d.mts.map +1 -0
- package/dist/types.d.ts +71 -69
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -10
- package/dist/types.js.map +1 -1
- package/dist/types.mjs +7 -9
- package/dist/types.mjs.map +1 -1
- package/dist/utils.d.mts +34 -78
- package/dist/utils.d.mts.map +1 -0
- package/dist/utils.d.ts +34 -78
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +17 -313
- package/dist/utils.mjs +2 -272
- package/package.json +21 -87
- package/dist/asymmetric-crypto.js.map +0 -1
- package/dist/asymmetric-crypto.mjs.map +0 -1
- package/dist/derive-key.js.map +0 -1
- package/dist/derive-key.mjs.map +0 -1
- package/dist/email-crypto.js.map +0 -1
- package/dist/email-crypto.mjs.map +0 -1
- package/dist/email-service.d.mts +0 -38
- package/dist/email-service.d.ts +0 -38
- package/dist/email-service.js +0 -154
- package/dist/email-service.js.map +0 -1
- package/dist/email-service.mjs +0 -147
- package/dist/email-service.mjs.map +0 -1
- package/dist/hash.js.map +0 -1
- package/dist/hash.mjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/keystore-crypto.js.map +0 -1
- package/dist/keystore-crypto.mjs.map +0 -1
- package/dist/keystore-service.d.mts +0 -82
- package/dist/keystore-service.d.ts +0 -82
- package/dist/keystore-service.js +0 -349
- package/dist/keystore-service.js.map +0 -1
- package/dist/keystore-service.mjs +0 -342
- package/dist/keystore-service.mjs.map +0 -1
- package/dist/post-quantum-crypto.js.map +0 -1
- package/dist/post-quantum-crypto.mjs.map +0 -1
- package/dist/symmetric-crypto.js.map +0 -1
- package/dist/symmetric-crypto.mjs.map +0 -1
- package/dist/utils-BDaK_d6T.d.ts +0 -114
- package/dist/utils-v34IRTIx.d.mts +0 -114
- package/dist/utils.js.map +0 -1
- 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: "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=",
|
|
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
|