@vex-chat/crypto 10.0.0 → 11.0.0
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/dist/index.d.ts +31 -24
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +136 -68
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/XUtils/stringEncoding.ts +6 -0
- package/src/__tests__/cryptoProfile.ts +10 -0
- package/src/__tests__/xAsyncApi.extended.test.ts +38 -0
- package/src/__tests__/xHMAC.ts +12 -1
- package/src/index.ts +216 -91
package/dist/index.d.ts
CHANGED
|
@@ -55,8 +55,8 @@ export declare class XUtils {
|
|
|
55
55
|
* Checks if two buffer-like objects are equal.
|
|
56
56
|
* When lengths match, comparison is constant-time in the inputs (no early exit on first differing byte).
|
|
57
57
|
*
|
|
58
|
-
* @param buf1
|
|
59
|
-
* @param buf2
|
|
58
|
+
* @param buf1 - First buffer to compare.
|
|
59
|
+
* @param buf2 - Second buffer to compare.
|
|
60
60
|
*
|
|
61
61
|
* @returns True if equal, else false.
|
|
62
62
|
*/
|
|
@@ -71,8 +71,8 @@ export declare class XUtils {
|
|
|
71
71
|
* Decrypts a secret key from the binary format produced by encryptKeyData().
|
|
72
72
|
* No I/O — the caller handles reading the data.
|
|
73
73
|
*
|
|
74
|
-
* @param keyData The encrypted key data as a Uint8Array.
|
|
75
|
-
* @param password The password used to encrypt.
|
|
74
|
+
* @param keyData - The encrypted key data as a Uint8Array.
|
|
75
|
+
* @param password - The password used to encrypt.
|
|
76
76
|
* @returns The hex-encoded secret key.
|
|
77
77
|
*/
|
|
78
78
|
static decryptKeyData: (keyData: Uint8Array, password: string) => string;
|
|
@@ -82,10 +82,8 @@ export declare class XUtils {
|
|
|
82
82
|
*/
|
|
83
83
|
static decryptKeyDataAsync: (keyData: Uint8Array, password: string) => Promise<string>;
|
|
84
84
|
/**
|
|
85
|
-
* 32-byte
|
|
86
|
-
*
|
|
87
|
-
* For `fips` the identity secret is PKCS#8; HKDF is applied so AES keys never
|
|
88
|
-
* equal the raw private key material.
|
|
85
|
+
* Derive a purpose-separated 32-byte key for local at-rest encryption.
|
|
86
|
+
* The result never aliases raw identity-key bytes in either crypto profile.
|
|
89
87
|
*/
|
|
90
88
|
static deriveLocalAtRestAesKey(identitySk: Uint8Array, profile: CryptoProfile): Uint8Array;
|
|
91
89
|
/**
|
|
@@ -107,9 +105,9 @@ export declare class XUtils {
|
|
|
107
105
|
*
|
|
108
106
|
* Format: [iterations(6)|salt(24)|nonce(24)|ciphertext(N)]
|
|
109
107
|
*
|
|
110
|
-
* @param password The password to derive the encryption key from.
|
|
111
|
-
* @param keyToSave The hex-encoded secret key to encrypt.
|
|
112
|
-
* @param iterationOverride Optional PBKDF2 iteration count (
|
|
108
|
+
* @param password - The password to derive the encryption key from.
|
|
109
|
+
* @param keyToSave - The hex-encoded secret key to encrypt.
|
|
110
|
+
* @param iterationOverride - Optional PBKDF2 iteration count (220,000 if omitted).
|
|
113
111
|
* @returns The encrypted key data as a Uint8Array.
|
|
114
112
|
*/
|
|
115
113
|
static encryptKeyData: (password: string, keyToSave: string, iterationOverride?: number) => Uint8Array;
|
|
@@ -123,22 +121,22 @@ export declare class XUtils {
|
|
|
123
121
|
* The integer must be positive, and it must be able to be stored
|
|
124
122
|
* in six bytes.
|
|
125
123
|
*
|
|
126
|
-
* @param n The number to convert.
|
|
124
|
+
* @param n - The number to convert.
|
|
127
125
|
* @returns The Uint8Array representation of n.
|
|
128
126
|
*/
|
|
129
127
|
static numberToUint8Arr(n: number): Uint8Array;
|
|
130
128
|
/**
|
|
131
129
|
* Packs a javascript object and a 32 byte header into a vex message.
|
|
132
130
|
*
|
|
133
|
-
* @param msg Message body (msgpack-serialized).
|
|
134
|
-
* @param header Optional 32-byte header; defaults to an empty header.
|
|
131
|
+
* @param msg - Message body (msgpack-serialized).
|
|
132
|
+
* @param header - Optional 32-byte header; defaults to an empty header.
|
|
135
133
|
* @returns the packed message.
|
|
136
134
|
*/
|
|
137
135
|
static packMessage(msg: unknown, header?: Uint8Array): Uint8Array<ArrayBufferLike>;
|
|
138
136
|
/**
|
|
139
137
|
* Converts a Uint8Array representation of an integer back into a number.
|
|
140
138
|
*
|
|
141
|
-
* @param arr The array to convert.
|
|
139
|
+
* @param arr - The array to convert.
|
|
142
140
|
* @returns the number representation of arr.
|
|
143
141
|
*/
|
|
144
142
|
static uint8ArrToNumber(arr: Uint8Array): number;
|
|
@@ -146,25 +144,34 @@ export declare class XUtils {
|
|
|
146
144
|
* Takes a vex message and unpacks it into its header and a javascript object
|
|
147
145
|
* representation of its body.
|
|
148
146
|
*
|
|
149
|
-
* @param msg Full wire message (32-byte header + msgpack body).
|
|
147
|
+
* @param msg - Full wire message (32-byte header + msgpack body).
|
|
150
148
|
* @returns [32 byte header, message body]
|
|
151
149
|
*/
|
|
152
150
|
static unpackMessage(msg: Buffer | Uint8Array): [Uint8Array, BaseMsg];
|
|
151
|
+
private static readKeyDataIterations;
|
|
152
|
+
private static validateKeyDataIterations;
|
|
153
153
|
}
|
|
154
154
|
/**
|
|
155
155
|
* Returns a 32 byte HMAC of a javscript object.
|
|
156
156
|
*
|
|
157
|
-
* @param msg
|
|
158
|
-
* @param SK
|
|
157
|
+
* @param msg - The message to create the HMAC of.
|
|
158
|
+
* @param SK - The secret key to create the HMAC with.
|
|
159
159
|
*/
|
|
160
160
|
export declare function xHMAC(msg: unknown, SK: Uint8Array): Uint8Array<ArrayBufferLike> & Uint8Array<ArrayBuffer>;
|
|
161
|
+
/** Derive independent payload-encryption and envelope-authentication keys. */
|
|
162
|
+
export declare function xMessageKeySubkeys(messageKey: Uint8Array): {
|
|
163
|
+
authenticationKey: Uint8Array;
|
|
164
|
+
encryptionKey: Uint8Array;
|
|
165
|
+
};
|
|
161
166
|
/**
|
|
162
167
|
* Gets a word list representation of a byte sequence.
|
|
163
168
|
*
|
|
164
|
-
* @param entropy The bytes to derive the wordlist from.
|
|
165
|
-
* @param wordList Optional
|
|
169
|
+
* @param entropy - The bytes to derive the wordlist from.
|
|
170
|
+
* @param wordList - Optional override for the wordlist. See bip39 docs for details.
|
|
166
171
|
*/
|
|
167
172
|
export declare function xMnemonic(entropy: Uint8Array, wordList?: string[]): string;
|
|
173
|
+
/** Domain-separated payload signed for X3DH signed and one-time prekeys. */
|
|
174
|
+
export declare function xPreKeySignaturePayload(publicKey: Uint8Array, kind: "one-time" | "signed", profile?: CryptoProfile): Uint8Array;
|
|
168
175
|
/**
|
|
169
176
|
* Constants for vex.
|
|
170
177
|
*/
|
|
@@ -207,15 +214,15 @@ export declare function xBoxKeyPairFromSecretAsync(secretKey: Uint8Array): Promi
|
|
|
207
214
|
/**
|
|
208
215
|
* Concatanates multiple Uint8Arrays.
|
|
209
216
|
*
|
|
210
|
-
* @param arrays
|
|
217
|
+
* @param arrays - The Uint8Arrays to concatenate.
|
|
211
218
|
*/
|
|
212
219
|
export declare function xConcat(...arrays: Uint8Array[]): Uint8Array;
|
|
213
220
|
/**
|
|
214
221
|
* Derives a shared Secret Key from a known private key and
|
|
215
222
|
* a peer's known public key.
|
|
216
223
|
*
|
|
217
|
-
* @param myPrivateKey Your own private key
|
|
218
|
-
* @param theirPublicKey Their public key
|
|
224
|
+
* @param myPrivateKey - Your own private key.
|
|
225
|
+
* @param theirPublicKey - Their public key.
|
|
219
226
|
* @returns The derived shared secret, SK.
|
|
220
227
|
*/
|
|
221
228
|
export declare function xDH(myPrivateKey: Uint8Array, theirPublicKey: Uint8Array): Uint8Array;
|
|
@@ -237,7 +244,7 @@ export declare function xEncode(curveType: "X448" | "X25519", publicKey: Uint8Ar
|
|
|
237
244
|
/**
|
|
238
245
|
* Hashes some data.
|
|
239
246
|
*
|
|
240
|
-
* @param data
|
|
247
|
+
* @param data - The data to hash.
|
|
241
248
|
* @returns The hash of the data.
|
|
242
249
|
*/
|
|
243
250
|
export declare function xHash(data: Uint8Array): string;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAQ/C,OAAO,EACH,MAAM,IAAI,YAAY,EACtB,MAAM,IAAI,YAAY,EACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7E,OAAO,QAAQ,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -16,6 +16,11 @@ import ed2curve from "ed2curve";
|
|
|
16
16
|
import { Packr } from "msgpackr";
|
|
17
17
|
import nacl from "tweetnacl";
|
|
18
18
|
import { z } from "zod/v4";
|
|
19
|
+
const KEY_DATA_HEADER_BYTES = 54;
|
|
20
|
+
const KEY_DATA_MAC_BYTES = 16;
|
|
21
|
+
const KEY_DATA_PBKDF2_ITERATIONS = 220_000;
|
|
22
|
+
const KEY_DATA_PBKDF2_MIN_ITERATIONS = 1_000;
|
|
23
|
+
const KEY_DATA_PBKDF2_MAX_ITERATIONS = 2_000_000;
|
|
19
24
|
function getWebCrypto() {
|
|
20
25
|
const cryptoCandidate = globalThis.crypto;
|
|
21
26
|
if (!isWebCryptoLike(cryptoCandidate)) {
|
|
@@ -33,6 +38,23 @@ function isWebCryptoLike(value) {
|
|
|
33
38
|
typeof value.subtle === "object" &&
|
|
34
39
|
value.subtle !== null);
|
|
35
40
|
}
|
|
41
|
+
async function pbkdf2Sha512Async(password, salt, iterations) {
|
|
42
|
+
const cryptoCandidate = globalThis.crypto;
|
|
43
|
+
if (!isWebCryptoLike(cryptoCandidate)) {
|
|
44
|
+
return noblePbkdf2(sha512, password, salt, {
|
|
45
|
+
c: iterations,
|
|
46
|
+
dkLen: 32,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
const passwordKey = await cryptoCandidate.subtle.importKey("raw", new TextEncoder().encode(password), "PBKDF2", false, ["deriveBits"]);
|
|
50
|
+
const bits = await cryptoCandidate.subtle.deriveBits({
|
|
51
|
+
hash: "SHA-512",
|
|
52
|
+
iterations,
|
|
53
|
+
name: "PBKDF2",
|
|
54
|
+
salt: new Uint8Array(salt),
|
|
55
|
+
}, passwordKey, 256);
|
|
56
|
+
return new Uint8Array(bits);
|
|
57
|
+
}
|
|
36
58
|
function randomBytesWebCrypto(length) {
|
|
37
59
|
if (!Number.isInteger(length) || length < 0) {
|
|
38
60
|
throw new Error(`Expected non-negative integer length, received ${String(length)}.`);
|
|
@@ -266,8 +288,8 @@ export class XUtils {
|
|
|
266
288
|
* Checks if two buffer-like objects are equal.
|
|
267
289
|
* When lengths match, comparison is constant-time in the inputs (no early exit on first differing byte).
|
|
268
290
|
*
|
|
269
|
-
* @param buf1
|
|
270
|
-
* @param buf2
|
|
291
|
+
* @param buf1 - First buffer to compare.
|
|
292
|
+
* @param buf2 - Second buffer to compare.
|
|
271
293
|
*
|
|
272
294
|
* @returns True if equal, else false.
|
|
273
295
|
*/
|
|
@@ -297,19 +319,25 @@ export class XUtils {
|
|
|
297
319
|
if (hexString.length === 0) {
|
|
298
320
|
return new Uint8Array();
|
|
299
321
|
}
|
|
300
|
-
|
|
301
|
-
|
|
322
|
+
if (hexString.length % 2 !== 0 || !/^[0-9a-fA-F]+$/.test(hexString)) {
|
|
323
|
+
throw new Error("Expected an even-length hexadecimal string.");
|
|
324
|
+
}
|
|
325
|
+
const bytes = new Uint8Array(hexString.length / 2);
|
|
326
|
+
for (let i = 0; i < bytes.length; i += 1) {
|
|
327
|
+
bytes[i] = Number.parseInt(hexString.slice(i * 2, i * 2 + 2), 16);
|
|
328
|
+
}
|
|
329
|
+
return bytes;
|
|
302
330
|
}
|
|
303
331
|
/**
|
|
304
332
|
* Decrypts a secret key from the binary format produced by encryptKeyData().
|
|
305
333
|
* No I/O — the caller handles reading the data.
|
|
306
334
|
*
|
|
307
|
-
* @param keyData The encrypted key data as a Uint8Array.
|
|
308
|
-
* @param password The password used to encrypt.
|
|
335
|
+
* @param keyData - The encrypted key data as a Uint8Array.
|
|
336
|
+
* @param password - The password used to encrypt.
|
|
309
337
|
* @returns The hex-encoded secret key.
|
|
310
338
|
*/
|
|
311
339
|
static decryptKeyData = (keyData, password) => {
|
|
312
|
-
const ITERATIONS = XUtils.
|
|
340
|
+
const ITERATIONS = XUtils.readKeyDataIterations(keyData);
|
|
313
341
|
const PKBDF_SALT = keyData.slice(6, 30);
|
|
314
342
|
const ENCRYPTION_NONCE = keyData.slice(30, 54);
|
|
315
343
|
const ENCRYPTED_KEY = keyData.slice(54);
|
|
@@ -317,47 +345,53 @@ export class XUtils {
|
|
|
317
345
|
c: ITERATIONS,
|
|
318
346
|
dkLen: 32,
|
|
319
347
|
});
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
348
|
+
try {
|
|
349
|
+
const DECRYPTED_SIGNKEY = provider().secretboxOpen(ENCRYPTED_KEY, ENCRYPTION_NONCE, DERIVED_KEY);
|
|
350
|
+
if (DECRYPTED_SIGNKEY === null) {
|
|
351
|
+
throw new Error("Decryption failed. Wrong password?");
|
|
352
|
+
}
|
|
353
|
+
const decryptedHex = XUtils.encodeHex(DECRYPTED_SIGNKEY);
|
|
354
|
+
DECRYPTED_SIGNKEY.fill(0);
|
|
355
|
+
return decryptedHex;
|
|
356
|
+
}
|
|
357
|
+
finally {
|
|
358
|
+
DERIVED_KEY.fill(0);
|
|
323
359
|
}
|
|
324
|
-
return XUtils.encodeHex(DECRYPTED_SIGNKEY);
|
|
325
360
|
};
|
|
326
361
|
/**
|
|
327
362
|
* Async variant of decryptKeyData for cross-runtime/FIPS backends.
|
|
328
363
|
* Supports both profile formats emitted by encryptKeyDataAsync.
|
|
329
364
|
*/
|
|
330
365
|
static decryptKeyDataAsync = async (keyData, password) => {
|
|
331
|
-
const ITERATIONS = XUtils.
|
|
366
|
+
const ITERATIONS = XUtils.readKeyDataIterations(keyData);
|
|
332
367
|
const PKBDF_SALT = keyData.slice(6, 30);
|
|
333
368
|
const ENCRYPTION_NONCE = keyData.slice(30, 54);
|
|
334
369
|
const ENCRYPTED_KEY = keyData.slice(54);
|
|
335
|
-
const DERIVED_KEY =
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
370
|
+
const DERIVED_KEY = await pbkdf2Sha512Async(password, PKBDF_SALT, ITERATIONS);
|
|
371
|
+
try {
|
|
372
|
+
const decrypted = activeCryptoProfile === "fips"
|
|
373
|
+
? await xSecretboxOpenAsync(ENCRYPTED_KEY, ENCRYPTION_NONCE, DERIVED_KEY)
|
|
374
|
+
: xSecretboxOpen(ENCRYPTED_KEY, ENCRYPTION_NONCE, DERIVED_KEY);
|
|
375
|
+
if (decrypted === null) {
|
|
376
|
+
throw new Error("Decryption failed. Wrong password?");
|
|
377
|
+
}
|
|
378
|
+
const decryptedHex = XUtils.encodeHex(decrypted);
|
|
379
|
+
decrypted.fill(0);
|
|
380
|
+
return decryptedHex;
|
|
381
|
+
}
|
|
382
|
+
finally {
|
|
383
|
+
DERIVED_KEY.fill(0);
|
|
344
384
|
}
|
|
345
|
-
return XUtils.encodeHex(decrypted);
|
|
346
385
|
};
|
|
347
386
|
/**
|
|
348
|
-
* 32-byte
|
|
349
|
-
*
|
|
350
|
-
* For `fips` the identity secret is PKCS#8; HKDF is applied so AES keys never
|
|
351
|
-
* equal the raw private key material.
|
|
387
|
+
* Derive a purpose-separated 32-byte key for local at-rest encryption.
|
|
388
|
+
* The result never aliases raw identity-key bytes in either crypto profile.
|
|
352
389
|
*/
|
|
353
390
|
static deriveLocalAtRestAesKey(identitySk, profile) {
|
|
354
|
-
if (
|
|
355
|
-
|
|
356
|
-
throw new Error("Expected at least 32 bytes of identity secret in tweetnacl mode.");
|
|
357
|
-
}
|
|
358
|
-
return identitySk.subarray(0, 32);
|
|
391
|
+
if (identitySk.length < 32) {
|
|
392
|
+
throw new Error("Expected at least 32 bytes of identity secret.");
|
|
359
393
|
}
|
|
360
|
-
return new Uint8Array(hkdf(sha256, identitySk, new Uint8Array(0), new TextEncoder().encode(
|
|
394
|
+
return new Uint8Array(hkdf(sha256, identitySk, new Uint8Array(0), new TextEncoder().encode(`vex:at-rest:3:${profile}`), 32));
|
|
361
395
|
}
|
|
362
396
|
/**
|
|
363
397
|
* Returns the empty header (32 0's)
|
|
@@ -382,19 +416,14 @@ export class XUtils {
|
|
|
382
416
|
*
|
|
383
417
|
* Format: [iterations(6)|salt(24)|nonce(24)|ciphertext(N)]
|
|
384
418
|
*
|
|
385
|
-
* @param password The password to derive the encryption key from.
|
|
386
|
-
* @param keyToSave The hex-encoded secret key to encrypt.
|
|
387
|
-
* @param iterationOverride Optional PBKDF2 iteration count (
|
|
419
|
+
* @param password - The password to derive the encryption key from.
|
|
420
|
+
* @param keyToSave - The hex-encoded secret key to encrypt.
|
|
421
|
+
* @param iterationOverride - Optional PBKDF2 iteration count (220,000 if omitted).
|
|
388
422
|
* @returns The encrypted key data as a Uint8Array.
|
|
389
423
|
*/
|
|
390
424
|
static encryptKeyData = (password, keyToSave, iterationOverride) => {
|
|
391
425
|
const UNENCRYPTED_SIGNKEY = XUtils.decodeHex(keyToSave);
|
|
392
|
-
const
|
|
393
|
-
const rand = provider().randomBytes(2);
|
|
394
|
-
const [N1 = 0, N2 = 0] = rand;
|
|
395
|
-
const iterations = iterationOverride !== undefined && iterationOverride !== 0
|
|
396
|
-
? iterationOverride
|
|
397
|
-
: N1 * N2 + OFFSET;
|
|
426
|
+
const iterations = XUtils.validateKeyDataIterations(iterationOverride ?? KEY_DATA_PBKDF2_ITERATIONS);
|
|
398
427
|
const ITERATIONS = XUtils.numberToUint8Arr(iterations);
|
|
399
428
|
const PKBDF_SALT = xMakeNonce();
|
|
400
429
|
const ENCRYPTION_KEY = noblePbkdf2(sha512, password, PKBDF_SALT, {
|
|
@@ -402,7 +431,14 @@ export class XUtils {
|
|
|
402
431
|
dkLen: 32,
|
|
403
432
|
});
|
|
404
433
|
const NONCE = xMakeNonce();
|
|
405
|
-
|
|
434
|
+
let ENCRYPTED_SIGNKEY;
|
|
435
|
+
try {
|
|
436
|
+
ENCRYPTED_SIGNKEY = provider().secretbox(UNENCRYPTED_SIGNKEY, NONCE, ENCRYPTION_KEY);
|
|
437
|
+
}
|
|
438
|
+
finally {
|
|
439
|
+
ENCRYPTION_KEY.fill(0);
|
|
440
|
+
UNENCRYPTED_SIGNKEY.fill(0);
|
|
441
|
+
}
|
|
406
442
|
const result = new Uint8Array(ITERATIONS.length +
|
|
407
443
|
PKBDF_SALT.length +
|
|
408
444
|
NONCE.length +
|
|
@@ -423,22 +459,22 @@ export class XUtils {
|
|
|
423
459
|
*/
|
|
424
460
|
static encryptKeyDataAsync = async (password, keyToSave, iterationOverride) => {
|
|
425
461
|
const UNENCRYPTED_SIGNKEY = XUtils.decodeHex(keyToSave);
|
|
426
|
-
const
|
|
427
|
-
const rand = xRandomBytes(2);
|
|
428
|
-
const [N1 = 0, N2 = 0] = rand;
|
|
429
|
-
const iterations = iterationOverride !== undefined && iterationOverride !== 0
|
|
430
|
-
? iterationOverride
|
|
431
|
-
: N1 * N2 + OFFSET;
|
|
462
|
+
const iterations = XUtils.validateKeyDataIterations(iterationOverride ?? KEY_DATA_PBKDF2_ITERATIONS);
|
|
432
463
|
const ITERATIONS = XUtils.numberToUint8Arr(iterations);
|
|
433
464
|
const PKBDF_SALT = xMakeNonce();
|
|
434
|
-
const ENCRYPTION_KEY =
|
|
435
|
-
c: iterations,
|
|
436
|
-
dkLen: 32,
|
|
437
|
-
});
|
|
465
|
+
const ENCRYPTION_KEY = await pbkdf2Sha512Async(password, PKBDF_SALT, iterations);
|
|
438
466
|
const NONCE = xMakeNonce();
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
467
|
+
let ENCRYPTED_SIGNKEY;
|
|
468
|
+
try {
|
|
469
|
+
ENCRYPTED_SIGNKEY =
|
|
470
|
+
activeCryptoProfile === "fips"
|
|
471
|
+
? await xSecretboxAsync(UNENCRYPTED_SIGNKEY, NONCE, ENCRYPTION_KEY)
|
|
472
|
+
: xSecretbox(UNENCRYPTED_SIGNKEY, NONCE, ENCRYPTION_KEY);
|
|
473
|
+
}
|
|
474
|
+
finally {
|
|
475
|
+
ENCRYPTION_KEY.fill(0);
|
|
476
|
+
UNENCRYPTED_SIGNKEY.fill(0);
|
|
477
|
+
}
|
|
442
478
|
const result = new Uint8Array(ITERATIONS.length +
|
|
443
479
|
PKBDF_SALT.length +
|
|
444
480
|
NONCE.length +
|
|
@@ -458,7 +494,7 @@ export class XUtils {
|
|
|
458
494
|
* The integer must be positive, and it must be able to be stored
|
|
459
495
|
* in six bytes.
|
|
460
496
|
*
|
|
461
|
-
* @param n The number to convert.
|
|
497
|
+
* @param n - The number to convert.
|
|
462
498
|
* @returns The Uint8Array representation of n.
|
|
463
499
|
*/
|
|
464
500
|
static numberToUint8Arr(n) {
|
|
@@ -475,8 +511,8 @@ export class XUtils {
|
|
|
475
511
|
/**
|
|
476
512
|
* Packs a javascript object and a 32 byte header into a vex message.
|
|
477
513
|
*
|
|
478
|
-
* @param msg Message body (msgpack-serialized).
|
|
479
|
-
* @param header Optional 32-byte header; defaults to an empty header.
|
|
514
|
+
* @param msg - Message body (msgpack-serialized).
|
|
515
|
+
* @param header - Optional 32-byte header; defaults to an empty header.
|
|
480
516
|
* @returns the packed message.
|
|
481
517
|
*/
|
|
482
518
|
static packMessage(msg, header) {
|
|
@@ -487,7 +523,7 @@ export class XUtils {
|
|
|
487
523
|
/**
|
|
488
524
|
* Converts a Uint8Array representation of an integer back into a number.
|
|
489
525
|
*
|
|
490
|
-
* @param arr The array to convert.
|
|
526
|
+
* @param arr - The array to convert.
|
|
491
527
|
* @returns the number representation of arr.
|
|
492
528
|
*/
|
|
493
529
|
static uint8ArrToNumber(arr) {
|
|
@@ -501,7 +537,7 @@ export class XUtils {
|
|
|
501
537
|
* Takes a vex message and unpacks it into its header and a javascript object
|
|
502
538
|
* representation of its body.
|
|
503
539
|
*
|
|
504
|
-
* @param msg Full wire message (32-byte header + msgpack body).
|
|
540
|
+
* @param msg - Full wire message (32-byte header + msgpack body).
|
|
505
541
|
* @returns [32 byte header, message body]
|
|
506
542
|
*/
|
|
507
543
|
static unpackMessage(msg) {
|
|
@@ -518,26 +554,58 @@ export class XUtils {
|
|
|
518
554
|
.parse(raw);
|
|
519
555
|
return [msgh, msgb];
|
|
520
556
|
}
|
|
557
|
+
static readKeyDataIterations(keyData) {
|
|
558
|
+
if (keyData.length < KEY_DATA_HEADER_BYTES + KEY_DATA_MAC_BYTES) {
|
|
559
|
+
throw new Error("Encrypted key data is truncated.");
|
|
560
|
+
}
|
|
561
|
+
return XUtils.validateKeyDataIterations(XUtils.uint8ArrToNumber(keyData.slice(0, 6)));
|
|
562
|
+
}
|
|
563
|
+
static validateKeyDataIterations(iterations) {
|
|
564
|
+
if (!Number.isSafeInteger(iterations) ||
|
|
565
|
+
iterations < KEY_DATA_PBKDF2_MIN_ITERATIONS ||
|
|
566
|
+
iterations > KEY_DATA_PBKDF2_MAX_ITERATIONS) {
|
|
567
|
+
throw new Error(`PBKDF2 iterations must be between ${String(KEY_DATA_PBKDF2_MIN_ITERATIONS)} and ${String(KEY_DATA_PBKDF2_MAX_ITERATIONS)}.`);
|
|
568
|
+
}
|
|
569
|
+
return iterations;
|
|
570
|
+
}
|
|
521
571
|
}
|
|
522
572
|
/**
|
|
523
573
|
* Returns a 32 byte HMAC of a javscript object.
|
|
524
574
|
*
|
|
525
|
-
* @param msg
|
|
526
|
-
* @param SK
|
|
575
|
+
* @param msg - The message to create the HMAC of.
|
|
576
|
+
* @param SK - The secret key to create the HMAC with.
|
|
527
577
|
*/
|
|
528
578
|
export function xHMAC(msg, SK) {
|
|
529
579
|
const packedMsg = msgpackEncode(msg);
|
|
530
580
|
return hmac(sha256, SK, packedMsg);
|
|
531
581
|
}
|
|
582
|
+
/** Derive independent payload-encryption and envelope-authentication keys. */
|
|
583
|
+
export function xMessageKeySubkeys(messageKey) {
|
|
584
|
+
if (messageKey.length < 32) {
|
|
585
|
+
throw new Error("Message keys must contain at least 32 bytes.");
|
|
586
|
+
}
|
|
587
|
+
return {
|
|
588
|
+
authenticationKey: hmac(sha256, messageKey, XUtils.decodeUTF8("vex:message:auth:v1")),
|
|
589
|
+
encryptionKey: hmac(sha256, messageKey, XUtils.decodeUTF8("vex:message:encryption:v1")),
|
|
590
|
+
};
|
|
591
|
+
}
|
|
532
592
|
/**
|
|
533
593
|
* Gets a word list representation of a byte sequence.
|
|
534
594
|
*
|
|
535
|
-
* @param entropy The bytes to derive the wordlist from.
|
|
536
|
-
* @param wordList Optional
|
|
595
|
+
* @param entropy - The bytes to derive the wordlist from.
|
|
596
|
+
* @param wordList - Optional override for the wordlist. See bip39 docs for details.
|
|
537
597
|
*/
|
|
538
598
|
export function xMnemonic(entropy, wordList) {
|
|
539
599
|
return bip39.entropyToMnemonic(XUtils.encodeHex(entropy), wordList);
|
|
540
600
|
}
|
|
601
|
+
/** Domain-separated payload signed for X3DH signed and one-time prekeys. */
|
|
602
|
+
export function xPreKeySignaturePayload(publicKey, kind, profile = getCryptoProfile()) {
|
|
603
|
+
if (publicKey.length === 0) {
|
|
604
|
+
throw new Error("Prekey public key cannot be empty.");
|
|
605
|
+
}
|
|
606
|
+
const separator = new Uint8Array([0]);
|
|
607
|
+
return xConcat(XUtils.decodeUTF8("vex:x3dh:prekey:v2"), separator, XUtils.decodeUTF8(profile), separator, XUtils.decodeUTF8(kind), separator, publicKey);
|
|
608
|
+
}
|
|
541
609
|
/**
|
|
542
610
|
* Constants for vex.
|
|
543
611
|
*/
|
|
@@ -610,7 +678,7 @@ export async function xBoxKeyPairFromSecretAsync(secretKey) {
|
|
|
610
678
|
/**
|
|
611
679
|
* Concatanates multiple Uint8Arrays.
|
|
612
680
|
*
|
|
613
|
-
* @param arrays
|
|
681
|
+
* @param arrays - The Uint8Arrays to concatenate.
|
|
614
682
|
*/
|
|
615
683
|
export function xConcat(...arrays) {
|
|
616
684
|
const totalLength = arrays.reduce((acc, value) => acc + value.length, 0);
|
|
@@ -631,8 +699,8 @@ export function xConcat(...arrays) {
|
|
|
631
699
|
* Derives a shared Secret Key from a known private key and
|
|
632
700
|
* a peer's known public key.
|
|
633
701
|
*
|
|
634
|
-
* @param myPrivateKey Your own private key
|
|
635
|
-
* @param theirPublicKey Their public key
|
|
702
|
+
* @param myPrivateKey - Your own private key.
|
|
703
|
+
* @param theirPublicKey - Their public key.
|
|
636
704
|
* @returns The derived shared secret, SK.
|
|
637
705
|
*/
|
|
638
706
|
export function xDH(myPrivateKey, theirPublicKey) {
|
|
@@ -714,7 +782,7 @@ export function xEncode(curveType, publicKey) {
|
|
|
714
782
|
/**
|
|
715
783
|
* Hashes some data.
|
|
716
784
|
*
|
|
717
|
-
* @param data
|
|
785
|
+
* @param data - The data to hash.
|
|
718
786
|
* @returns The hash of the data.
|
|
719
787
|
*/
|
|
720
788
|
export function xHash(data) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACH,MAAM,IAAI,YAAY,EACtB,MAAM,IAAI,YAAY,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACjC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAC3C,MAAM,8BAA8B,GAAG,KAAK,CAAC;AAC7C,MAAM,8BAA8B,GAAG,SAAS,CAAC;AA6CjD,SAAS,YAAY;IACjB,MAAM,eAAe,GAAY,UAAU,CAAC,MAAM,CAAC;IACnD,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACX,8EAA8E,CACjF,CAAC;IACN,CAAC;IACD,OAAO,eAAe,CAAC;AAC3B,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,CACH,iBAAiB,IAAI,KAAK;QAC1B,OAAO,KAAK,CAAC,eAAe,KAAK,UAAU;QAC3C,QAAQ,IAAI,KAAK;QACjB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAChC,KAAK,CAAC,MAAM,KAAK,IAAI,CACxB,CAAC;AACN,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC5B,QAAgB,EAChB,IAAgB,EAChB,UAAkB;IAElB,MAAM,eAAe,GAAY,UAAU,CAAC,MAAM,CAAC;IACnD,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvC,CAAC,EAAE,UAAU;YACb,KAAK,EAAE,EAAE;SACZ,CAAC,CAAC;IACP,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,SAAS,CACtD,KAAK,EACL,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAClC,QAAQ,EACR,KAAK,EACL,CAAC,YAAY,CAAC,CACjB,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,UAAU,CAChD;QACI,IAAI,EAAE,SAAS;QACf,UAAU;QACV,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC;KAC7B,EACD,WAAW,EACX,GAAG,CACN,CAAC;IACF,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc;IACxC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACX,kDAAkD,MAAM,CAAC,MAAM,CAAC,GAAG,CACtE,CAAC;IACN,CAAC;IACD,MAAM,UAAU,GAAG,YAAY,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,MAAM,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC;QAC5D,UAAU,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAClC,MAAM,IAAI,WAAW,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,OAAsB,EAAE,SAAiB;IAC1D,MAAM,IAAI,KAAK,CACX,mBAAmB,OAAO,wBAAwB,SAAS,OAAO,CACrE,CAAC;AACN,CAAC;AAED,MAAM,iBAAiB,GAAmB;IACtC,SAAS,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,EAAE,CACxC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC;IACjD,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;IACpC,oBAAoB,EAAE,CAAC,SAAS,EAAE,EAAE,CAChC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;IAC7C,OAAO,EAAE,WAAW;IACpB,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjD,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC;IAC3E,aAAa,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC;IAC/C,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;IAC3D,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IACtC,qBAAqB,EAAE,CAAC,SAAS,EAAE,EAAE,CACjC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC;IAC9C,QAAQ,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,CACnC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC;CAC/C,CAAC;AAEF,MAAM,YAAY,GAAmB;IACjC,SAAS,EAAE,CAAC,YAAY,EAAE,cAAc,EAAE,EAAE;QACxC,KAAK,YAAY,CAAC;QAClB,KAAK,cAAc,CAAC;QACpB,OAAO,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,UAAU,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC;IACpD,oBAAoB,EAAE,CAAC,SAAS,EAAE,EAAE;QAChC,KAAK,SAAS,CAAC;QACf,OAAO,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC;IACrD,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACjC,KAAK,SAAS,CAAC;QACf,KAAK,KAAK,CAAC;QACX,KAAK,GAAG,CAAC;QACT,OAAO,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC7C,CAAC;IACD,aAAa,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACtC,KAAK,UAAU,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,GAAG,CAAC;QACT,OAAO,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE;QACzB,KAAK,OAAO,CAAC;QACb,KAAK,SAAS,CAAC;QACf,OAAO,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IACD,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC;IACtD,qBAAqB,EAAE,CAAC,SAAS,EAAE,EAAE;QACjC,KAAK,SAAS,CAAC;QACf,OAAO,WAAW,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACzD,CAAC;IACD,QAAQ,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE;QACnC,KAAK,aAAa,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,OAAO,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC5C,CAAC;CACJ,CAAC;AAEF,MAAM,SAAS,GAA0C;IACrD,IAAI,EAAE,YAAY;IAClB,SAAS,EAAE,iBAAiB;CAC/B,CAAC;AAEF,IAAI,mBAAmB,GAAkB,WAAW,CAAC;AACrD,IAAI,oBAAoB,GAAmB,SAAS,CAAC,mBAAmB,CAAC,CAAC;AAE1E,uDAAuD;AACvD,MAAM,UAAU,gBAAgB;IAC5B,OAAO,mBAAmB,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAsB;IACnD,mBAAmB,GAAG,OAAO,CAAC;IAC9B,oBAAoB,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,uBAAuB,GAAoB,EAAE,CAAC;AAEpD;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAsB;IAC1D,uBAAuB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAClD,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,uBAAuB;IACnC,MAAM,IAAI,GAAG,uBAAuB,CAAC,GAAG,EAAE,CAAC;IAC3C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACX,2EAA2E,CAC9E,CAAC;IACN,CAAC;IACD,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAiB;IACvC,OAAO,UAAU;SACZ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAChD,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,CAAa,EAAE,CAAa;IAC7C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAChD,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACd,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACrB,OAAO,GAAG,CAAC;AACf,CAAC;AAED,SAAS,uBAAuB,CAAC,aAAyB;IAItD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACX,+DAA+D,CAClE,CAAC;IACN,CAAC;IACD,MAAM,eAAe,GACjB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG,CAAC,CAAC;IACzB,MAAM,YAAY,GAAG,cAAc,GAAG,eAAe,CAAC;IACtD,IAAI,aAAa,CAAC,MAAM,GAAG,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACX,uEAAuE,CAC1E,CAAC;IACN,CAAC;IACD,OAAO;QACH,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;QAC1C,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,YAAY,CAAC;KAC/D,CAAC;AACN,CAAC;AAED,SAAS,uBAAuB,CAC5B,SAAqB,EACrB,OAAmB;IAEnB,IAAI,SAAS,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3C,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;IACpC,OAAO,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,6BAA6B,CACxC,SAAqB,EACrB,MAAoB;IAEpB,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACX,yDAAyD,CAC5D,CAAC;IACN,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,eAAe,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,GAAG,GAAe;QACpB,GAAG,EAAE,OAAO;QACZ,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC;QACxB,GAAG,EAAE,IAAI;QACT,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3C,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KAC/C,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CACnC,KAAK,EACL,GAAG,EACH,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EACrC,IAAI,EACJ,CAAC,YAAY,CAAC,CACjB,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAe,EAAE,GAAG,UAAU,EAAE,CAAC;IACpD,OAAO,aAAa,CAAC,CAAC,CAAC;IACvB,aAAa,CAAC,OAAO,GAAG,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAClC,KAAK,EACL,aAAa,EACb,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EACrC,IAAI,EACJ,EAAE,CACL,CAAC;IACF,OAAO;QACH,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjE,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;KACvE,CAAC;AACN,CAAC;AAED,KAAK,UAAU,wBAAwB,CACnC,SAAqB,EACrB,MAAoB;IAEpB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CACnC,OAAO,EACP,cAAc,CAAC,SAAS,CAAC,EACzB,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EACrC,IAAI,EACJ,CAAC,YAAY,CAAC,CACjB,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,UAAU,GAAe,EAAE,GAAG,GAAG,EAAE,CAAC;IAC1C,OAAO,UAAU,CAAC,CAAC,CAAC;IACpB,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAClC,KAAK,EACL,UAAU,EACV,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EACrC,IAAI,EACJ,EAAE,CACL,CAAC;IACF,OAAO;QACH,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjE,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;KACvE,CAAC;AACN,CAAC;AAED,SAAS,eAAe;IACpB,OAAO,YAAY,EAAE,CAAC,MAAM,CAAC;AACjC,CAAC;AAED,SAAS,QAAQ;IACb,OAAO,oBAAoB,CAAC;AAChC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAiB;IACzC,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACX,2DAA2D,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CACrF,CAAC;IACN,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,cAAc,CAAC,KAAiB;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AACzC,CAAC;AAED,2FAA2F;AAC3F,kFAAkF;AAClF,kFAAkF;AAClF,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AAClE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC;;;GAGG;AACH,+HAA+H;AAC/H,MAAM,OAAO,MAAM;IACR,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAEnC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAE/B,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAEnC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAEtC;;;;;;;;OAQG;IACI,MAAM,CAAC,UAAU,CACpB,IAA8B,EAC9B,IAA8B;QAE9B,MAAM,CAAC,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,SAAS,CAAC,SAAiB;QACrC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,UAAU,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,cAAc,GAAG,CAC3B,OAAmB,EACnB,QAAgB,EACV,EAAE;QACR,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;YAC1D,CAAC,EAAE,UAAU;YACb,KAAK,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,IAAI,CAAC;YACD,MAAM,iBAAiB,GAAG,QAAQ,EAAE,CAAC,aAAa,CAC9C,aAAa,EACb,gBAAgB,EAChB,WAAW,CACd,CAAC;YAEF,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;YACzD,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC1B,OAAO,YAAY,CAAC;QACxB,CAAC;gBAAS,CAAC;YACP,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACL,CAAC,CAAC;IAEF;;;OAGG;IACI,MAAM,CAAC,mBAAmB,GAAG,KAAK,EACrC,OAAmB,EACnB,QAAgB,EACD,EAAE;QACjB,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,MAAM,iBAAiB,CACvC,QAAQ,EACR,UAAU,EACV,UAAU,CACb,CAAC;QACF,IAAI,CAAC;YACD,MAAM,SAAS,GACX,mBAAmB,KAAK,MAAM;gBAC1B,CAAC,CAAC,MAAM,mBAAmB,CACrB,aAAa,EACb,gBAAgB,EAChB,WAAW,CACd;gBACH,CAAC,CAAC,cAAc,CACV,aAAa,EACb,gBAAgB,EAChB,WAAW,CACd,CAAC;YAEZ,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACjD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,OAAO,YAAY,CAAC;QACxB,CAAC;gBAAS,CAAC;YACP,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACL,CAAC,CAAC;IAEF;;;OAGG;IACI,MAAM,CAAC,uBAAuB,CACjC,UAAsB,EACtB,OAAsB;QAEtB,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,UAAU,CACjB,IAAI,CACA,MAAM,EACN,UAAU,EACV,IAAI,UAAU,CAAC,CAAC,CAAC,EACjB,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,iBAAiB,OAAO,EAAE,CAAC,EACpD,EAAE,CACL,CACJ,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,WAAW;QACrB,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,SAAS,CAAC,KAAiB;QACrC,OAAO,KAAK,CAAC,MAAM,CACf,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EACvD,EAAE,CACL,CAAC;IACN,CAAC;IAED;;;;;;;;;;;OAWG;IACI,MAAM,CAAC,cAAc,GAAG,CAC3B,QAAgB,EAChB,SAAiB,EACjB,iBAA0B,EAChB,EAAE;QACZ,MAAM,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,CAC/C,iBAAiB,IAAI,0BAA0B,CAClD,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;YAC7D,CAAC,EAAE,UAAU;YACb,KAAK,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;QAC3B,IAAI,iBAA6B,CAAC;QAClC,IAAI,CAAC;YACD,iBAAiB,GAAG,QAAQ,EAAE,CAAC,SAAS,CACpC,mBAAmB,EACnB,KAAK,EACL,cAAc,CACjB,CAAC;QACN,CAAC;gBAAS,CAAC;YACP,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,UAAU,CACzB,UAAU,CAAC,MAAM;YACb,UAAU,CAAC,MAAM;YACjB,KAAK,CAAC,MAAM;YACZ,iBAAiB,CAAC,MAAM,CAC/B,CAAC;QACF,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF;;;OAGG;IACI,MAAM,CAAC,mBAAmB,GAAG,KAAK,EACrC,QAAgB,EAChB,SAAiB,EACjB,iBAA0B,EACP,EAAE;QACrB,MAAM,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,CAC/C,iBAAiB,IAAI,0BAA0B,CAClD,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAC1C,QAAQ,EACR,UAAU,EACV,UAAU,CACb,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;QAC3B,IAAI,iBAA6B,CAAC;QAClC,IAAI,CAAC;YACD,iBAAiB;gBACb,mBAAmB,KAAK,MAAM;oBAC1B,CAAC,CAAC,MAAM,eAAe,CACjB,mBAAmB,EACnB,KAAK,EACL,cAAc,CACjB;oBACH,CAAC,CAAC,UAAU,CAAC,mBAAmB,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QACrE,CAAC;gBAAS,CAAC;YACP,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,UAAU,CACzB,UAAU,CAAC,MAAM;YACb,UAAU,CAAC,MAAM;YACjB,KAAK,CAAC,MAAM;YACZ,iBAAiB,CAAC,MAAM,CAC/B,CAAC;QACF,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF;;;;;;;OAOG;IACI,MAAM,CAAC,gBAAgB,CAAC,CAAS;QACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,eAAe,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACX,qDAAqD;gBACjD,MAAM,CAAC,CAAC,CAAC,CAChB,CAAC;QACN,CAAC;QAED,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACrB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,WAAW,CAAC,GAAY,EAAE,MAAmB;QACvD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,gBAAgB,CAAC,GAAe;QAC1C,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACrB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,aAAa,CACvB,GAAwB;QAExB,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;QACnD,6EAA6E;QAC7E,MAAM,GAAG,GAAY,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,CAAC;aACT,MAAM,CAAC;YACJ,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;YAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,CAAC;aACD,KAAK,EAAE;aACP,KAAK,CAAC,GAAG,CAAY,CAAC;QAE3B,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,OAAmB;QACpD,IAAI,OAAO,CAAC,MAAM,GAAG,qBAAqB,GAAG,kBAAkB,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,MAAM,CAAC,yBAAyB,CACnC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAC/C,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,yBAAyB,CAAC,UAAkB;QACvD,IACI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC;YACjC,UAAU,GAAG,8BAA8B;YAC3C,UAAU,GAAG,8BAA8B,EAC7C,CAAC;YACC,MAAM,IAAI,KAAK,CACX,qCAAqC,MAAM,CAAC,8BAA8B,CAAC,QAAQ,MAAM,CAAC,8BAA8B,CAAC,GAAG,CAC/H,CAAC;QACN,CAAC;QACD,OAAO,UAAU,CAAC;IACtB,CAAC;;AAGL;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,GAAY,EAAE,EAAc;IAC9C,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB,CAAC,UAAsB;IAIrD,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IACD,OAAO;QACH,iBAAiB,EAAE,IAAI,CACnB,MAAM,EACN,UAAU,EACV,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAC3C;QACD,aAAa,EAAE,IAAI,CACf,MAAM,EACN,UAAU,EACV,MAAM,CAAC,UAAU,CAAC,2BAA2B,CAAC,CACjD;KACJ,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,OAAmB,EAAE,QAAmB;IAC9D,OAAO,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,uBAAuB,CACnC,SAAqB,EACrB,IAA2B,EAC3B,UAAyB,gBAAgB,EAAE;IAE3C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,OAAO,CACV,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,EACvC,SAAS,EACT,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAC1B,SAAS,EACT,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EACvB,SAAS,EACT,SAAS,CACZ,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAe;IAClC,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,EAAE;IACf,IAAI,EAAE,OAAO;IACb,UAAU,EAAE,EAAE;IACd,cAAc,EAAE,GAAG;CACtB,CAAC;AAkCF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sCAAsC,CACxD,SAAqB;IAErB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpD,IACI,GAAG,CAAC,CAAC,KAAK,SAAS;QACnB,GAAG,CAAC,CAAC,KAAK,SAAS;QACnB,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;QAClB,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EACpB,CAAC;QACC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,OAAO,GAAe,EAAE,GAAG,GAAG,EAAE,CAAC;IACvC,OAAO,OAAO,CAAC,CAAC,CAAC;IACjB,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;IACrB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IACnB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAClC,KAAK,EACL,OAAO,EACP,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EACrC,IAAI,EACJ,EAAE,CACL,CAAC;IACF,OAAO,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,WAAW;IACvB,OAAO,QAAQ,EAAE,CAAC,UAAU,EAAE,CAAC;AACnC,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAClC,IAAI,mBAAmB,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,WAAW,EAAE,CAAC;IACzB,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CACjC,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EACrC,IAAI,EACJ,CAAC,YAAY,CAAC,CACjB,CAAC;IACF,OAAO;QACH,SAAS,EAAE,IAAI,UAAU,CACrB,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,CAChD;QACD,SAAS,EAAE,IAAI,UAAU,CACrB,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CACnD;KACJ,CAAC;AACN,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,qBAAqB,CAAC,SAAqB;IACvD,OAAO,QAAQ,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,+EAA+E;AAE/E,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC5C,SAAqB;IAErB,IAAI,mBAAmB,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,OAAO,6BAA6B,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,wBAAwB,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;AAClE,CAAC;AAED,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,MAAoB;IAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEzE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAE3C,uCAAuC;IACvC,oDAAoD;IACpD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG,CACf,YAAwB,EACxB,cAA0B;IAE1B,OAAO,QAAQ,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;AAC9D,CAAC;AAED,gDAAgD;AAChD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC1B,YAAwB,EACxB,cAA0B;IAE1B,IAAI,mBAAmB,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAClC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EACnC,UAAU,EACV,GAAG,CACN,CAAC;IACF,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACnD,IAAa;IAEb,IAAI,mBAAmB,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,MAAM,CACjB,IAAI,KAAK,CACL,wHAAwH,CAC3H,CACJ,CAAC;IACN,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACrD,IAAI,OAAO,GAAG,CAAC,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,OAAO,GAAe,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;IAChE,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IACnB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CACnC,KAAK,EACL,OAAO,EACP,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EACrC,IAAI,EACJ,CAAC,YAAY,CAAC,CACjB,CAAC;IACF,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAe,EAAE,GAAG,UAAU,EAAE,CAAC;IACpD,OAAO,aAAa,CAAC,CAAC,CAAC;IACvB,aAAa,CAAC,OAAO,GAAG,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAClC,KAAK,EACL,aAAa,EACb,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EACrC,IAAI,EACJ,EAAE,CACL,CAAC;IACF,OAAO;QACH,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjE,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;KACvE,CAAC;AACN,CAAC;AAED,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CACnB,SAA4B,EAC5B,SAAqB;IAErB,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACX,6CAA6C;YACzC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;YACxB,0BAA0B,CACjC,CAAC;IACN,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,QAAQ,SAAS,EAAE,CAAC;QAChB,KAAK,MAAM;YACP,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,MAAM;QACV,KAAK,QAAQ;YACT,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,MAAM;IACd,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEvD,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,IAAgB;IAClC,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,6EAA6E;AAE7E,MAAM,UAAU,IAAI,CAAC,GAAe;IAChC,OAAO,IAAI,CACP,MAAM,EACN,GAAG,EACH,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAC3B,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EACzC,UAAU,CAAC,UAAU,CACxB,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACtB,OAAO,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,8EAA8E;AAE9E,6CAA6C;AAC7C,MAAM,UAAU,YAAY,CAAC,MAAc;IACvC,OAAO,QAAQ,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,wCAAwC;AACxC,MAAM,UAAU,UAAU,CACtB,SAAqB,EACrB,KAAiB,EACjB,GAAe;IAEf,OAAO,QAAQ,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,eAAe,CACjC,SAAqB,EACrB,KAAiB,EACjB,GAAe;IAEf,IAAI,mBAAmB,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,CACnC,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAC3C,MAAM,EACN,cAAc,CAAC,SAAS,CAAC,CAC5B,CAAC;IACF,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;AACtC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAC1B,UAAsB,EACtB,KAAiB,EACjB,GAAe;IAEf,OAAO,QAAQ,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,UAAsB,EACtB,KAAiB,EACjB,GAAe;IAEf,IAAI,mBAAmB,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,cAAc,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,IAAI,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,CAClC,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAC3C,MAAM,EACN,cAAc,CAAC,UAAU,CAAC,CAC7B,CAAC;QACF,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,KAAK,CAAC,OAAmB,EAAE,SAAqB;IAC5D,OAAO,QAAQ,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC5B,OAAmB,EACnB,SAAqB;IAErB,IAAI,mBAAmB,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,IAAI,UAAU,CAC5B,MAAM,MAAM,CAAC,IAAI,CACb,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAClC,UAAU,EACV,cAAc,CAAC,OAAO,CAAC,CAC1B,CACJ,CAAC;IACF,OAAO,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AAED,iDAAiD;AACjD,MAAM,UAAU,YAAY;IACxB,OAAO,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACnC,IAAI,mBAAmB,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,YAAY,EAAE,CAAC;IAC1B,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CACjC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EACtC,IAAI,EACJ,CAAC,MAAM,EAAE,QAAQ,CAAC,CACrB,CAAC;IACF,OAAO;QACH,SAAS,EAAE,IAAI,UAAU,CACrB,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CACjD;QACD,SAAS,EAAE,IAAI,UAAU,CACrB,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CACnD;KACJ,CAAC;AACN,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,sBAAsB,CAAC,SAAqB;IACxD,OAAO,QAAQ,EAAE,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;AACvD,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC7C,SAAqB;IAErB,IAAI,mBAAmB,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,yBAAyB,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,SAAS,CACrB,aAAyB,EACzB,SAAqB;IAErB,OAAO,QAAQ,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;AACzD,CAAC;AAED,yDAAyD;AACzD,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,aAAyB,EACzB,SAAqB;IAErB,IAAI,mBAAmB,KAAK,WAAW,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAC7B,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAClC,SAAS,EACT,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,EAChC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CACjC,CAAC;IACF,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,yBAAyB,CACpC,SAAqB,EACrB,MAAoB;IAEpB,MAAM,SAAS,GAAG,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,WAAW,GAAe,EAAE,GAAG,GAAG,EAAE,CAAC;IAC3C,OAAO,WAAW,CAAC,CAAC,CAAC;IACrB,WAAW,CAAC,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CACnC,KAAK,EACL,WAAW,EACX,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EACtC,IAAI,EACJ,CAAC,QAAQ,CAAC,CACb,CAAC;IACF,OAAO;QACH,SAAS,EAAE,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnE,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;KACxC,CAAC;AACN,CAAC;AAED,KAAK,UAAU,YAAY,CACvB,GAAe,EACf,MAA2B;IAE3B,OAAO,eAAe,EAAE,CAAC,SAAS,CAC9B,KAAK,EACL,cAAc,CAAC,GAAG,CAAC,EACnB,EAAE,IAAI,EAAE,SAAS,EAAE,EACnB,KAAK,EACL,MAAM,CACT,CAAC;AACN,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,SAAqB;IACrD,OAAO,eAAe,EAAE,CAAC,SAAS,CAC9B,OAAO,EACP,cAAc,CAAC,SAAS,CAAC,EACzB,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EACrC,IAAI,EACJ,CAAC,YAAY,CAAC,CACjB,CAAC;AACN,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,SAAqB;IACpD,OAAO,eAAe,EAAE,CAAC,SAAS,CAC9B,KAAK,EACL,cAAc,CAAC,SAAS,CAAC,EACzB,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EACrC,IAAI,EACJ,EAAE,CACL,CAAC;AACN,CAAC;AAED,KAAK,UAAU,qBAAqB,CAChC,SAAqB;IAErB,OAAO,eAAe,EAAE,CAAC,SAAS,CAC9B,OAAO,EACP,cAAc,CAAC,SAAS,CAAC,EACzB,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EACtC,IAAI,EACJ,CAAC,MAAM,CAAC,CACX,CAAC;AACN,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,SAAqB;IACrD,OAAO,eAAe,EAAE,CAAC,SAAS,CAC9B,MAAM,EACN,cAAc,CAAC,SAAS,CAAC,EACzB,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,EACtC,IAAI,EACJ,CAAC,QAAQ,CAAC,CACb,CAAC;AACN,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,KAAa;IACzB,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;SAAM,CAAC;QACJ,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAwB;IACvC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAwB;IACvC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vex-chat/crypto",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "11.0.0",
|
|
4
4
|
"description": "Crypto primitives for the Vex encrypted chat platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
29
|
"typescript": ">=5.9.0 || >=6.0.0",
|
|
30
|
-
"@vex-chat/types": "^4.3.
|
|
30
|
+
"@vex-chat/types": "^4.3.3"
|
|
31
31
|
},
|
|
32
32
|
"peerDependenciesMeta": {
|
|
33
33
|
"typescript": {
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"typescript-eslint": "8.58.1",
|
|
67
67
|
"vitest": "4.1.4",
|
|
68
68
|
"@vex-chat/eslint-config": "0.0.1",
|
|
69
|
-
"@vex-chat/types": "^4.3.
|
|
69
|
+
"@vex-chat/types": "^4.3.3"
|
|
70
70
|
},
|
|
71
71
|
"directories": {
|
|
72
72
|
"doc": "docs"
|
|
@@ -33,6 +33,12 @@ test("Encodes and decodes hex", () => {
|
|
|
33
33
|
}
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
+
test("Rejects malformed hex instead of silently changing bytes", () => {
|
|
37
|
+
expect(() => decodeHex("abc")).toThrow(/even-length hexadecimal/);
|
|
38
|
+
expect(() => decodeHex("gg")).toThrow(/even-length hexadecimal/);
|
|
39
|
+
expect(decodeHex("")).toEqual(new Uint8Array());
|
|
40
|
+
});
|
|
41
|
+
|
|
36
42
|
test("Encodes and decodes utf8", () => {
|
|
37
43
|
const data = [
|
|
38
44
|
"L-dr`?%z5%?R8rT:Lwvk",
|
|
@@ -46,6 +46,16 @@ test("fips profile still supports random bytes", () => {
|
|
|
46
46
|
expect(nonce.length).toBe(24);
|
|
47
47
|
});
|
|
48
48
|
|
|
49
|
+
test("local storage keys are purpose-separated from identity keys", () => {
|
|
50
|
+
const identity = new Uint8Array(64).fill(7);
|
|
51
|
+
const tweetnacl = XUtils.deriveLocalAtRestAesKey(identity, "tweetnacl");
|
|
52
|
+
const fips = XUtils.deriveLocalAtRestAesKey(identity, "fips");
|
|
53
|
+
|
|
54
|
+
expect(tweetnacl).toHaveLength(32);
|
|
55
|
+
expect(tweetnacl).not.toEqual(identity.slice(0, 32));
|
|
56
|
+
expect(fips).not.toEqual(tweetnacl);
|
|
57
|
+
});
|
|
58
|
+
|
|
49
59
|
test("switching back to tweetnacl restores behavior", () => {
|
|
50
60
|
const myPrivateKey = XUtils.decodeHex(
|
|
51
61
|
"918ed243e2c6c507168b20e8b167cff33a10c30e99e8defe28dc2147f5cce703",
|
|
@@ -37,6 +37,44 @@ test("encryptKeyDataAsync / decryptKeyDataAsync (tweetnacl)", async () => {
|
|
|
37
37
|
await expect(XUtils.decryptKeyDataAsync(enc, "wrong")).rejects.toThrow();
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
+
test("native async PBKDF2 remains compatible with the portable sync format", async () => {
|
|
41
|
+
setCryptoProfile("tweetnacl");
|
|
42
|
+
const secret = "00112233445566778899aabbccddeeff";
|
|
43
|
+
const syncEnvelope = XUtils.encryptKeyData(
|
|
44
|
+
"correct horse",
|
|
45
|
+
secret,
|
|
46
|
+
fixedIterations,
|
|
47
|
+
);
|
|
48
|
+
await expect(
|
|
49
|
+
XUtils.decryptKeyDataAsync(syncEnvelope, "correct horse"),
|
|
50
|
+
).resolves.toBe(secret);
|
|
51
|
+
|
|
52
|
+
const asyncEnvelope = await XUtils.encryptKeyDataAsync(
|
|
53
|
+
"correct horse",
|
|
54
|
+
secret,
|
|
55
|
+
fixedIterations,
|
|
56
|
+
);
|
|
57
|
+
expect(XUtils.decryptKeyData(asyncEnvelope, "correct horse")).toBe(secret);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
test("decryptKeyDataAsync rejects malformed or hostile work factors", async () => {
|
|
61
|
+
setCryptoProfile("tweetnacl");
|
|
62
|
+
await expect(
|
|
63
|
+
XUtils.decryptKeyDataAsync(new Uint8Array(54), "password"),
|
|
64
|
+
).rejects.toThrow(/truncated/);
|
|
65
|
+
|
|
66
|
+
const hostile = new Uint8Array(70).fill(0xff);
|
|
67
|
+
await expect(
|
|
68
|
+
XUtils.decryptKeyDataAsync(hostile, "password"),
|
|
69
|
+
).rejects.toThrow(/PBKDF2 iterations/);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test("encryptKeyDataAsync uses the hardened default work factor", async () => {
|
|
73
|
+
setCryptoProfile("tweetnacl");
|
|
74
|
+
const enc = await XUtils.encryptKeyDataAsync("password", "00");
|
|
75
|
+
expect(XUtils.uint8ArrToNumber(enc.slice(0, 6))).toBe(220_000);
|
|
76
|
+
});
|
|
77
|
+
|
|
40
78
|
test("encryptKeyDataAsync / decryptKeyDataAsync (FIPS)", async () => {
|
|
41
79
|
setCryptoProfile("fips");
|
|
42
80
|
const { publicKey, secretKey } = await xSignKeyPairAsync();
|
package/src/__tests__/xHMAC.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { createHmac } from "crypto";
|
|
|
8
8
|
|
|
9
9
|
import { Packr } from "msgpackr";
|
|
10
10
|
|
|
11
|
-
import { xHMAC, XUtils } from "../index.js";
|
|
11
|
+
import { xHMAC, xMessageKeySubkeys, XUtils } from "../index.js";
|
|
12
12
|
|
|
13
13
|
test("xHMAC", () => {
|
|
14
14
|
const message = {
|
|
@@ -30,3 +30,14 @@ test("xHMAC", () => {
|
|
|
30
30
|
// Compare
|
|
31
31
|
expect(hmac).toBe(expectedHMAC);
|
|
32
32
|
});
|
|
33
|
+
|
|
34
|
+
test("message encryption and authentication keys are separated", () => {
|
|
35
|
+
const messageKey = new Uint8Array(32).fill(9);
|
|
36
|
+
const first = xMessageKeySubkeys(messageKey);
|
|
37
|
+
const second = xMessageKeySubkeys(messageKey);
|
|
38
|
+
|
|
39
|
+
expect(first.encryptionKey).toHaveLength(32);
|
|
40
|
+
expect(first.authenticationKey).toHaveLength(32);
|
|
41
|
+
expect(first.encryptionKey).not.toEqual(first.authenticationKey);
|
|
42
|
+
expect(first).toEqual(second);
|
|
43
|
+
});
|
package/src/index.ts
CHANGED
|
@@ -29,6 +29,12 @@ import { Packr } from "msgpackr";
|
|
|
29
29
|
import nacl from "tweetnacl";
|
|
30
30
|
import { z } from "zod/v4";
|
|
31
31
|
|
|
32
|
+
const KEY_DATA_HEADER_BYTES = 54;
|
|
33
|
+
const KEY_DATA_MAC_BYTES = 16;
|
|
34
|
+
const KEY_DATA_PBKDF2_ITERATIONS = 220_000;
|
|
35
|
+
const KEY_DATA_PBKDF2_MIN_ITERATIONS = 1_000;
|
|
36
|
+
const KEY_DATA_PBKDF2_MAX_ITERATIONS = 2_000_000;
|
|
37
|
+
|
|
32
38
|
/** Runtime crypto profile selector. */
|
|
33
39
|
export type CryptoProfile = "fips" | "tweetnacl";
|
|
34
40
|
|
|
@@ -95,6 +101,39 @@ function isWebCryptoLike(value: unknown): value is WebCryptoLike {
|
|
|
95
101
|
);
|
|
96
102
|
}
|
|
97
103
|
|
|
104
|
+
async function pbkdf2Sha512Async(
|
|
105
|
+
password: string,
|
|
106
|
+
salt: Uint8Array,
|
|
107
|
+
iterations: number,
|
|
108
|
+
): Promise<Uint8Array> {
|
|
109
|
+
const cryptoCandidate: unknown = globalThis.crypto;
|
|
110
|
+
if (!isWebCryptoLike(cryptoCandidate)) {
|
|
111
|
+
return noblePbkdf2(sha512, password, salt, {
|
|
112
|
+
c: iterations,
|
|
113
|
+
dkLen: 32,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const passwordKey = await cryptoCandidate.subtle.importKey(
|
|
118
|
+
"raw",
|
|
119
|
+
new TextEncoder().encode(password),
|
|
120
|
+
"PBKDF2",
|
|
121
|
+
false,
|
|
122
|
+
["deriveBits"],
|
|
123
|
+
);
|
|
124
|
+
const bits = await cryptoCandidate.subtle.deriveBits(
|
|
125
|
+
{
|
|
126
|
+
hash: "SHA-512",
|
|
127
|
+
iterations,
|
|
128
|
+
name: "PBKDF2",
|
|
129
|
+
salt: new Uint8Array(salt),
|
|
130
|
+
},
|
|
131
|
+
passwordKey,
|
|
132
|
+
256,
|
|
133
|
+
);
|
|
134
|
+
return new Uint8Array(bits);
|
|
135
|
+
}
|
|
136
|
+
|
|
98
137
|
function randomBytesWebCrypto(length: number): Uint8Array {
|
|
99
138
|
if (!Number.isInteger(length) || length < 0) {
|
|
100
139
|
throw new Error(
|
|
@@ -411,8 +450,8 @@ export class XUtils {
|
|
|
411
450
|
* Checks if two buffer-like objects are equal.
|
|
412
451
|
* When lengths match, comparison is constant-time in the inputs (no early exit on first differing byte).
|
|
413
452
|
*
|
|
414
|
-
* @param buf1
|
|
415
|
-
* @param buf2
|
|
453
|
+
* @param buf1 - First buffer to compare.
|
|
454
|
+
* @param buf2 - Second buffer to compare.
|
|
416
455
|
*
|
|
417
456
|
* @returns True if equal, else false.
|
|
418
457
|
*/
|
|
@@ -446,24 +485,30 @@ export class XUtils {
|
|
|
446
485
|
if (hexString.length === 0) {
|
|
447
486
|
return new Uint8Array();
|
|
448
487
|
}
|
|
488
|
+
if (hexString.length % 2 !== 0 || !/^[0-9a-fA-F]+$/.test(hexString)) {
|
|
489
|
+
throw new Error("Expected an even-length hexadecimal string.");
|
|
490
|
+
}
|
|
449
491
|
|
|
450
|
-
const
|
|
451
|
-
|
|
492
|
+
const bytes = new Uint8Array(hexString.length / 2);
|
|
493
|
+
for (let i = 0; i < bytes.length; i += 1) {
|
|
494
|
+
bytes[i] = Number.parseInt(hexString.slice(i * 2, i * 2 + 2), 16);
|
|
495
|
+
}
|
|
496
|
+
return bytes;
|
|
452
497
|
}
|
|
453
498
|
|
|
454
499
|
/**
|
|
455
500
|
* Decrypts a secret key from the binary format produced by encryptKeyData().
|
|
456
501
|
* No I/O — the caller handles reading the data.
|
|
457
502
|
*
|
|
458
|
-
* @param keyData The encrypted key data as a Uint8Array.
|
|
459
|
-
* @param password The password used to encrypt.
|
|
503
|
+
* @param keyData - The encrypted key data as a Uint8Array.
|
|
504
|
+
* @param password - The password used to encrypt.
|
|
460
505
|
* @returns The hex-encoded secret key.
|
|
461
506
|
*/
|
|
462
507
|
public static decryptKeyData = (
|
|
463
508
|
keyData: Uint8Array,
|
|
464
509
|
password: string,
|
|
465
510
|
): string => {
|
|
466
|
-
const ITERATIONS = XUtils.
|
|
511
|
+
const ITERATIONS = XUtils.readKeyDataIterations(keyData);
|
|
467
512
|
const PKBDF_SALT = keyData.slice(6, 30);
|
|
468
513
|
const ENCRYPTION_NONCE = keyData.slice(30, 54);
|
|
469
514
|
const ENCRYPTED_KEY = keyData.slice(54);
|
|
@@ -471,16 +516,22 @@ export class XUtils {
|
|
|
471
516
|
c: ITERATIONS,
|
|
472
517
|
dkLen: 32,
|
|
473
518
|
});
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
519
|
+
try {
|
|
520
|
+
const DECRYPTED_SIGNKEY = provider().secretboxOpen(
|
|
521
|
+
ENCRYPTED_KEY,
|
|
522
|
+
ENCRYPTION_NONCE,
|
|
523
|
+
DERIVED_KEY,
|
|
524
|
+
);
|
|
479
525
|
|
|
480
|
-
|
|
481
|
-
|
|
526
|
+
if (DECRYPTED_SIGNKEY === null) {
|
|
527
|
+
throw new Error("Decryption failed. Wrong password?");
|
|
528
|
+
}
|
|
529
|
+
const decryptedHex = XUtils.encodeHex(DECRYPTED_SIGNKEY);
|
|
530
|
+
DECRYPTED_SIGNKEY.fill(0);
|
|
531
|
+
return decryptedHex;
|
|
532
|
+
} finally {
|
|
533
|
+
DERIVED_KEY.fill(0);
|
|
482
534
|
}
|
|
483
|
-
return XUtils.encodeHex(DECRYPTED_SIGNKEY);
|
|
484
535
|
};
|
|
485
536
|
|
|
486
537
|
/**
|
|
@@ -491,53 +542,57 @@ export class XUtils {
|
|
|
491
542
|
keyData: Uint8Array,
|
|
492
543
|
password: string,
|
|
493
544
|
): Promise<string> => {
|
|
494
|
-
const ITERATIONS = XUtils.
|
|
545
|
+
const ITERATIONS = XUtils.readKeyDataIterations(keyData);
|
|
495
546
|
const PKBDF_SALT = keyData.slice(6, 30);
|
|
496
547
|
const ENCRYPTION_NONCE = keyData.slice(30, 54);
|
|
497
548
|
const ENCRYPTED_KEY = keyData.slice(54);
|
|
498
|
-
const DERIVED_KEY =
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
549
|
+
const DERIVED_KEY = await pbkdf2Sha512Async(
|
|
550
|
+
password,
|
|
551
|
+
PKBDF_SALT,
|
|
552
|
+
ITERATIONS,
|
|
553
|
+
);
|
|
554
|
+
try {
|
|
555
|
+
const decrypted =
|
|
556
|
+
activeCryptoProfile === "fips"
|
|
557
|
+
? await xSecretboxOpenAsync(
|
|
558
|
+
ENCRYPTED_KEY,
|
|
559
|
+
ENCRYPTION_NONCE,
|
|
560
|
+
DERIVED_KEY,
|
|
561
|
+
)
|
|
562
|
+
: xSecretboxOpen(
|
|
563
|
+
ENCRYPTED_KEY,
|
|
564
|
+
ENCRYPTION_NONCE,
|
|
565
|
+
DERIVED_KEY,
|
|
566
|
+
);
|
|
567
|
+
|
|
568
|
+
if (decrypted === null) {
|
|
569
|
+
throw new Error("Decryption failed. Wrong password?");
|
|
570
|
+
}
|
|
571
|
+
const decryptedHex = XUtils.encodeHex(decrypted);
|
|
572
|
+
decrypted.fill(0);
|
|
573
|
+
return decryptedHex;
|
|
574
|
+
} finally {
|
|
575
|
+
DERIVED_KEY.fill(0);
|
|
513
576
|
}
|
|
514
|
-
return XUtils.encodeHex(decrypted);
|
|
515
577
|
};
|
|
516
578
|
|
|
517
579
|
/**
|
|
518
|
-
* 32-byte
|
|
519
|
-
*
|
|
520
|
-
* For `fips` the identity secret is PKCS#8; HKDF is applied so AES keys never
|
|
521
|
-
* equal the raw private key material.
|
|
580
|
+
* Derive a purpose-separated 32-byte key for local at-rest encryption.
|
|
581
|
+
* The result never aliases raw identity-key bytes in either crypto profile.
|
|
522
582
|
*/
|
|
523
583
|
public static deriveLocalAtRestAesKey(
|
|
524
584
|
identitySk: Uint8Array,
|
|
525
585
|
profile: CryptoProfile,
|
|
526
586
|
): Uint8Array {
|
|
527
|
-
if (
|
|
528
|
-
|
|
529
|
-
throw new Error(
|
|
530
|
-
"Expected at least 32 bytes of identity secret in tweetnacl mode.",
|
|
531
|
-
);
|
|
532
|
-
}
|
|
533
|
-
return identitySk.subarray(0, 32);
|
|
587
|
+
if (identitySk.length < 32) {
|
|
588
|
+
throw new Error("Expected at least 32 bytes of identity secret.");
|
|
534
589
|
}
|
|
535
590
|
return new Uint8Array(
|
|
536
591
|
hkdf(
|
|
537
592
|
sha256,
|
|
538
593
|
identitySk,
|
|
539
594
|
new Uint8Array(0),
|
|
540
|
-
new TextEncoder().encode(
|
|
595
|
+
new TextEncoder().encode(`vex:at-rest:3:${profile}`),
|
|
541
596
|
32,
|
|
542
597
|
),
|
|
543
598
|
);
|
|
@@ -571,9 +626,9 @@ export class XUtils {
|
|
|
571
626
|
*
|
|
572
627
|
* Format: [iterations(6)|salt(24)|nonce(24)|ciphertext(N)]
|
|
573
628
|
*
|
|
574
|
-
* @param password The password to derive the encryption key from.
|
|
575
|
-
* @param keyToSave The hex-encoded secret key to encrypt.
|
|
576
|
-
* @param iterationOverride Optional PBKDF2 iteration count (
|
|
629
|
+
* @param password - The password to derive the encryption key from.
|
|
630
|
+
* @param keyToSave - The hex-encoded secret key to encrypt.
|
|
631
|
+
* @param iterationOverride - Optional PBKDF2 iteration count (220,000 if omitted).
|
|
577
632
|
* @returns The encrypted key data as a Uint8Array.
|
|
578
633
|
*/
|
|
579
634
|
public static encryptKeyData = (
|
|
@@ -582,13 +637,9 @@ export class XUtils {
|
|
|
582
637
|
iterationOverride?: number,
|
|
583
638
|
): Uint8Array => {
|
|
584
639
|
const UNENCRYPTED_SIGNKEY = XUtils.decodeHex(keyToSave);
|
|
585
|
-
const
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
const iterations =
|
|
589
|
-
iterationOverride !== undefined && iterationOverride !== 0
|
|
590
|
-
? iterationOverride
|
|
591
|
-
: N1 * N2 + OFFSET;
|
|
640
|
+
const iterations = XUtils.validateKeyDataIterations(
|
|
641
|
+
iterationOverride ?? KEY_DATA_PBKDF2_ITERATIONS,
|
|
642
|
+
);
|
|
592
643
|
const ITERATIONS = XUtils.numberToUint8Arr(iterations);
|
|
593
644
|
const PKBDF_SALT = xMakeNonce();
|
|
594
645
|
const ENCRYPTION_KEY = noblePbkdf2(sha512, password, PKBDF_SALT, {
|
|
@@ -596,11 +647,17 @@ export class XUtils {
|
|
|
596
647
|
dkLen: 32,
|
|
597
648
|
});
|
|
598
649
|
const NONCE = xMakeNonce();
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
650
|
+
let ENCRYPTED_SIGNKEY: Uint8Array;
|
|
651
|
+
try {
|
|
652
|
+
ENCRYPTED_SIGNKEY = provider().secretbox(
|
|
653
|
+
UNENCRYPTED_SIGNKEY,
|
|
654
|
+
NONCE,
|
|
655
|
+
ENCRYPTION_KEY,
|
|
656
|
+
);
|
|
657
|
+
} finally {
|
|
658
|
+
ENCRYPTION_KEY.fill(0);
|
|
659
|
+
UNENCRYPTED_SIGNKEY.fill(0);
|
|
660
|
+
}
|
|
604
661
|
|
|
605
662
|
const result = new Uint8Array(
|
|
606
663
|
ITERATIONS.length +
|
|
@@ -629,28 +686,31 @@ export class XUtils {
|
|
|
629
686
|
iterationOverride?: number,
|
|
630
687
|
): Promise<Uint8Array> => {
|
|
631
688
|
const UNENCRYPTED_SIGNKEY = XUtils.decodeHex(keyToSave);
|
|
632
|
-
const
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
const iterations =
|
|
636
|
-
iterationOverride !== undefined && iterationOverride !== 0
|
|
637
|
-
? iterationOverride
|
|
638
|
-
: N1 * N2 + OFFSET;
|
|
689
|
+
const iterations = XUtils.validateKeyDataIterations(
|
|
690
|
+
iterationOverride ?? KEY_DATA_PBKDF2_ITERATIONS,
|
|
691
|
+
);
|
|
639
692
|
const ITERATIONS = XUtils.numberToUint8Arr(iterations);
|
|
640
693
|
const PKBDF_SALT = xMakeNonce();
|
|
641
|
-
const ENCRYPTION_KEY =
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
694
|
+
const ENCRYPTION_KEY = await pbkdf2Sha512Async(
|
|
695
|
+
password,
|
|
696
|
+
PKBDF_SALT,
|
|
697
|
+
iterations,
|
|
698
|
+
);
|
|
645
699
|
const NONCE = xMakeNonce();
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
700
|
+
let ENCRYPTED_SIGNKEY: Uint8Array;
|
|
701
|
+
try {
|
|
702
|
+
ENCRYPTED_SIGNKEY =
|
|
703
|
+
activeCryptoProfile === "fips"
|
|
704
|
+
? await xSecretboxAsync(
|
|
705
|
+
UNENCRYPTED_SIGNKEY,
|
|
706
|
+
NONCE,
|
|
707
|
+
ENCRYPTION_KEY,
|
|
708
|
+
)
|
|
709
|
+
: xSecretbox(UNENCRYPTED_SIGNKEY, NONCE, ENCRYPTION_KEY);
|
|
710
|
+
} finally {
|
|
711
|
+
ENCRYPTION_KEY.fill(0);
|
|
712
|
+
UNENCRYPTED_SIGNKEY.fill(0);
|
|
713
|
+
}
|
|
654
714
|
|
|
655
715
|
const result = new Uint8Array(
|
|
656
716
|
ITERATIONS.length +
|
|
@@ -674,7 +734,7 @@ export class XUtils {
|
|
|
674
734
|
* The integer must be positive, and it must be able to be stored
|
|
675
735
|
* in six bytes.
|
|
676
736
|
*
|
|
677
|
-
* @param n The number to convert.
|
|
737
|
+
* @param n - The number to convert.
|
|
678
738
|
* @returns The Uint8Array representation of n.
|
|
679
739
|
*/
|
|
680
740
|
public static numberToUint8Arr(n: number): Uint8Array {
|
|
@@ -695,8 +755,8 @@ export class XUtils {
|
|
|
695
755
|
/**
|
|
696
756
|
* Packs a javascript object and a 32 byte header into a vex message.
|
|
697
757
|
*
|
|
698
|
-
* @param msg Message body (msgpack-serialized).
|
|
699
|
-
* @param header Optional 32-byte header; defaults to an empty header.
|
|
758
|
+
* @param msg - Message body (msgpack-serialized).
|
|
759
|
+
* @param header - Optional 32-byte header; defaults to an empty header.
|
|
700
760
|
* @returns the packed message.
|
|
701
761
|
*/
|
|
702
762
|
public static packMessage(msg: unknown, header?: Uint8Array) {
|
|
@@ -708,7 +768,7 @@ export class XUtils {
|
|
|
708
768
|
/**
|
|
709
769
|
* Converts a Uint8Array representation of an integer back into a number.
|
|
710
770
|
*
|
|
711
|
-
* @param arr The array to convert.
|
|
771
|
+
* @param arr - The array to convert.
|
|
712
772
|
* @returns the number representation of arr.
|
|
713
773
|
*/
|
|
714
774
|
public static uint8ArrToNumber(arr: Uint8Array) {
|
|
@@ -723,7 +783,7 @@ export class XUtils {
|
|
|
723
783
|
* Takes a vex message and unpacks it into its header and a javascript object
|
|
724
784
|
* representation of its body.
|
|
725
785
|
*
|
|
726
|
-
* @param msg Full wire message (32-byte header + msgpack body).
|
|
786
|
+
* @param msg - Full wire message (32-byte header + msgpack body).
|
|
727
787
|
* @returns [32 byte header, message body]
|
|
728
788
|
*/
|
|
729
789
|
public static unpackMessage(
|
|
@@ -743,29 +803,94 @@ export class XUtils {
|
|
|
743
803
|
|
|
744
804
|
return [msgh, msgb];
|
|
745
805
|
}
|
|
806
|
+
|
|
807
|
+
private static readKeyDataIterations(keyData: Uint8Array): number {
|
|
808
|
+
if (keyData.length < KEY_DATA_HEADER_BYTES + KEY_DATA_MAC_BYTES) {
|
|
809
|
+
throw new Error("Encrypted key data is truncated.");
|
|
810
|
+
}
|
|
811
|
+
return XUtils.validateKeyDataIterations(
|
|
812
|
+
XUtils.uint8ArrToNumber(keyData.slice(0, 6)),
|
|
813
|
+
);
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
private static validateKeyDataIterations(iterations: number): number {
|
|
817
|
+
if (
|
|
818
|
+
!Number.isSafeInteger(iterations) ||
|
|
819
|
+
iterations < KEY_DATA_PBKDF2_MIN_ITERATIONS ||
|
|
820
|
+
iterations > KEY_DATA_PBKDF2_MAX_ITERATIONS
|
|
821
|
+
) {
|
|
822
|
+
throw new Error(
|
|
823
|
+
`PBKDF2 iterations must be between ${String(KEY_DATA_PBKDF2_MIN_ITERATIONS)} and ${String(KEY_DATA_PBKDF2_MAX_ITERATIONS)}.`,
|
|
824
|
+
);
|
|
825
|
+
}
|
|
826
|
+
return iterations;
|
|
827
|
+
}
|
|
746
828
|
}
|
|
747
829
|
|
|
748
830
|
/**
|
|
749
831
|
* Returns a 32 byte HMAC of a javscript object.
|
|
750
832
|
*
|
|
751
|
-
* @param msg
|
|
752
|
-
* @param SK
|
|
833
|
+
* @param msg - The message to create the HMAC of.
|
|
834
|
+
* @param SK - The secret key to create the HMAC with.
|
|
753
835
|
*/
|
|
754
836
|
export function xHMAC(msg: unknown, SK: Uint8Array) {
|
|
755
837
|
const packedMsg = msgpackEncode(msg);
|
|
756
838
|
return hmac(sha256, SK, packedMsg);
|
|
757
839
|
}
|
|
758
840
|
|
|
841
|
+
/** Derive independent payload-encryption and envelope-authentication keys. */
|
|
842
|
+
export function xMessageKeySubkeys(messageKey: Uint8Array): {
|
|
843
|
+
authenticationKey: Uint8Array;
|
|
844
|
+
encryptionKey: Uint8Array;
|
|
845
|
+
} {
|
|
846
|
+
if (messageKey.length < 32) {
|
|
847
|
+
throw new Error("Message keys must contain at least 32 bytes.");
|
|
848
|
+
}
|
|
849
|
+
return {
|
|
850
|
+
authenticationKey: hmac(
|
|
851
|
+
sha256,
|
|
852
|
+
messageKey,
|
|
853
|
+
XUtils.decodeUTF8("vex:message:auth:v1"),
|
|
854
|
+
),
|
|
855
|
+
encryptionKey: hmac(
|
|
856
|
+
sha256,
|
|
857
|
+
messageKey,
|
|
858
|
+
XUtils.decodeUTF8("vex:message:encryption:v1"),
|
|
859
|
+
),
|
|
860
|
+
};
|
|
861
|
+
}
|
|
862
|
+
|
|
759
863
|
/**
|
|
760
864
|
* Gets a word list representation of a byte sequence.
|
|
761
865
|
*
|
|
762
|
-
* @param entropy The bytes to derive the wordlist from.
|
|
763
|
-
* @param wordList Optional
|
|
866
|
+
* @param entropy - The bytes to derive the wordlist from.
|
|
867
|
+
* @param wordList - Optional override for the wordlist. See bip39 docs for details.
|
|
764
868
|
*/
|
|
765
869
|
export function xMnemonic(entropy: Uint8Array, wordList?: string[]) {
|
|
766
870
|
return bip39.entropyToMnemonic(XUtils.encodeHex(entropy), wordList);
|
|
767
871
|
}
|
|
768
872
|
|
|
873
|
+
/** Domain-separated payload signed for X3DH signed and one-time prekeys. */
|
|
874
|
+
export function xPreKeySignaturePayload(
|
|
875
|
+
publicKey: Uint8Array,
|
|
876
|
+
kind: "one-time" | "signed",
|
|
877
|
+
profile: CryptoProfile = getCryptoProfile(),
|
|
878
|
+
): Uint8Array {
|
|
879
|
+
if (publicKey.length === 0) {
|
|
880
|
+
throw new Error("Prekey public key cannot be empty.");
|
|
881
|
+
}
|
|
882
|
+
const separator = new Uint8Array([0]);
|
|
883
|
+
return xConcat(
|
|
884
|
+
XUtils.decodeUTF8("vex:x3dh:prekey:v2"),
|
|
885
|
+
separator,
|
|
886
|
+
XUtils.decodeUTF8(profile),
|
|
887
|
+
separator,
|
|
888
|
+
XUtils.decodeUTF8(kind),
|
|
889
|
+
separator,
|
|
890
|
+
publicKey,
|
|
891
|
+
);
|
|
892
|
+
}
|
|
893
|
+
|
|
769
894
|
/**
|
|
770
895
|
* Constants for vex.
|
|
771
896
|
*/
|
|
@@ -898,7 +1023,7 @@ export async function xBoxKeyPairFromSecretAsync(
|
|
|
898
1023
|
/**
|
|
899
1024
|
* Concatanates multiple Uint8Arrays.
|
|
900
1025
|
*
|
|
901
|
-
* @param arrays
|
|
1026
|
+
* @param arrays - The Uint8Arrays to concatenate.
|
|
902
1027
|
*/
|
|
903
1028
|
export function xConcat(...arrays: Uint8Array[]): Uint8Array {
|
|
904
1029
|
const totalLength = arrays.reduce((acc, value) => acc + value.length, 0);
|
|
@@ -924,8 +1049,8 @@ export function xConcat(...arrays: Uint8Array[]): Uint8Array {
|
|
|
924
1049
|
* Derives a shared Secret Key from a known private key and
|
|
925
1050
|
* a peer's known public key.
|
|
926
1051
|
*
|
|
927
|
-
* @param myPrivateKey Your own private key
|
|
928
|
-
* @param theirPublicKey Their public key
|
|
1052
|
+
* @param myPrivateKey - Your own private key.
|
|
1053
|
+
* @param theirPublicKey - Their public key.
|
|
929
1054
|
* @returns The derived shared secret, SK.
|
|
930
1055
|
*/
|
|
931
1056
|
export function xDH(
|
|
@@ -1050,7 +1175,7 @@ export function xEncode(
|
|
|
1050
1175
|
/**
|
|
1051
1176
|
* Hashes some data.
|
|
1052
1177
|
*
|
|
1053
|
-
* @param data
|
|
1178
|
+
* @param data - The data to hash.
|
|
1054
1179
|
* @returns The hash of the data.
|
|
1055
1180
|
*/
|
|
1056
1181
|
export function xHash(data: Uint8Array) {
|