@bitgo-beta/sdk-api 1.10.1-beta.1732 → 1.10.1-beta.1734
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/package.json +8 -8
- package/dist/src/bitgoAPI.d.ts +10 -0
- package/dist/src/bitgoAPI.d.ts.map +1 -1
- package/dist/src/bitgoAPI.js +24 -1
- package/dist/src/encrypt.d.ts.map +1 -1
- package/dist/src/encrypt.js +7 -4
- package/dist/src/encryptV2.d.ts +5 -2
- package/dist/src/encryptV2.d.ts.map +1 -1
- package/dist/src/encryptV2.js +23 -10
- package/dist/src/encryptionSession.d.ts +1 -1
- package/dist/src/encryptionSession.d.ts.map +1 -1
- package/dist/src/encryptionSession.js +10 -5
- package/dist/test/unit/encrypt.js +86 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../../src/encrypt.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,EAAE,GAAG,MAAM,CAKjE;AAED,kEAAkE;AAClE,wBAAgB,OAAO,CACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,MAAM,CAmBR;AAED,kCAAkC;AAClC,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../../src/encrypt.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,EAAE,GAAG,MAAM,CAKjE;AAED,kEAAkE;AAClE,wBAAgB,OAAO,CACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,MAAM,CAmBR;AAED,kCAAkC;AAClC,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBxF"}
|
package/dist/src/encrypt.js
CHANGED
|
@@ -86,18 +86,21 @@ function decrypt(password, ciphertext) {
|
|
|
86
86
|
* the breaking release that flips the default to v2.
|
|
87
87
|
*/
|
|
88
88
|
async function decryptAsync(password, ciphertext) {
|
|
89
|
-
let
|
|
89
|
+
let envelopeVersion;
|
|
90
90
|
try {
|
|
91
91
|
const envelope = JSON.parse(ciphertext);
|
|
92
|
-
|
|
92
|
+
envelopeVersion = envelope.v;
|
|
93
93
|
}
|
|
94
94
|
catch {
|
|
95
95
|
throw new Error('decrypt: ciphertext is not valid JSON');
|
|
96
96
|
}
|
|
97
|
-
if (
|
|
97
|
+
if (envelopeVersion === 2) {
|
|
98
98
|
// Do not catch: wrong password on v2 must not silently fall through to v1.
|
|
99
99
|
return (0, encryptV2_1.decryptV2)(password, ciphertext);
|
|
100
100
|
}
|
|
101
|
+
if (envelopeVersion !== undefined && envelopeVersion !== 1) {
|
|
102
|
+
throw new Error(`decrypt: unknown envelope version ${envelopeVersion}`);
|
|
103
|
+
}
|
|
101
104
|
return sjcl.decrypt(password, ciphertext);
|
|
102
105
|
}
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV0Esa0NBS0M7QUFHRCwwQkF1QkM7QUFHRCwwQkFFQztBQVFELG9DQWdCQztBQXZFRCx1REFBeUM7QUFDekMsbUNBQXFDO0FBRXJDLDJDQUF3QztBQUV4Qzs7Ozs7R0FLRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxLQUE2QjtJQUN2RCxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6RCxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxrRUFBa0U7QUFDbEUsU0FBZ0IsT0FBTyxDQUNyQixRQUFnQixFQUNoQixTQUFpQixFQUNqQixPQUF3RDtJQUV4RCxNQUFNLElBQUksR0FBRyxPQUFPLEVBQUUsSUFBSSxJQUFJLElBQUEsb0JBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMvRCxNQUFNLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUEsb0JBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQztJQUMxQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssRUFBRTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUU3RCxNQUFNLGNBQWMsR0FBK0U7UUFDakcsSUFBSSxFQUFFLEtBQUs7UUFDWCxFQUFFLEVBQUUsR0FBRztRQUNQLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsRUFBRSxFQUFFO1lBQ0YsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNCLFdBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQixXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUIsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzlCO0tBQ0YsQ0FBQztJQUNGLElBQUksT0FBTyxFQUFFLEtBQUs7UUFBRSxjQUFjLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDekQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELGtDQUFrQztBQUNsQyxTQUFnQixPQUFPLENBQUMsUUFBZ0IsRUFBRSxVQUFrQjtJQUMxRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxZQUFZLENBQUMsUUFBZ0IsRUFBRSxVQUFrQjtJQUNyRSxJQUFJLGVBQW1DLENBQUM7SUFDeEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxlQUFlLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxQiwyRUFBMkU7UUFDM0UsT0FBTyxJQUFBLHFCQUFTLEVBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxJQUFJLGVBQWUsS0FBSyxTQUFTLElBQUksZUFBZSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNELE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDNUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNqY2wgZnJvbSAnQGJpdGdvLWJldGEvc2pjbCc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCB7IGRlY3J5cHRWMiB9IGZyb20gJy4vZW5jcnlwdFYyJztcblxuLyoqXG4gKiBjb252ZXJ0IGEgNCBlbGVtZW50IFVpbnQ4QXJyYXkgdG8gYSA0IGJ5dGUgTnVtYmVyXG4gKlxuICogQHBhcmFtIGJ5dGVzXG4gKiBAcmV0dXJuIDQgYnl0ZSBudW1iZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ5dGVzVG9Xb3JkKGJ5dGVzPzogVWludDhBcnJheSB8IG51bWJlcltdKTogbnVtYmVyIHtcbiAgaWYgKCEoYnl0ZXMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB8fCBieXRlcy5sZW5ndGggIT09IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2J5dGVzIG11c3QgYmUgYSBVaW50OEFycmF5IHdpdGggbGVuZ3RoIDQnKTtcbiAgfVxuICByZXR1cm4gYnl0ZXMucmVkdWNlKChudW0sIGJ5dGUpID0+IG51bSAqIDB4MTAwICsgYnl0ZSwgMCk7XG59XG5cbi8qKiBFbmNyeXB0IHVzaW5nIGxlZ2FjeSB2MSBTSkNMIChQQktERjItU0hBMjU2ICsgQUVTLTI1Ni1DQ00pLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY3J5cHQoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIHBsYWludGV4dDogc3RyaW5nLFxuICBvcHRpb25zPzogeyBzYWx0PzogQnVmZmVyOyBpdj86IEJ1ZmZlcjsgYWRhdGE/OiBzdHJpbmcgfVxuKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FsdCA9IG9wdGlvbnM/LnNhbHQgfHwgcmFuZG9tQnl0ZXMoOCk7XG4gIGlmIChzYWx0Lmxlbmd0aCAhPT0gOCkgdGhyb3cgbmV3IEVycm9yKCdzYWx0IG11c3QgYmUgOCBieXRlcycpO1xuICBjb25zdCBpdiA9IG9wdGlvbnM/Lml2IHx8IHJhbmRvbUJ5dGVzKDE2KTtcbiAgaWYgKGl2Lmxlbmd0aCAhPT0gMTYpIHRocm93IG5ldyBFcnJvcignaXYgbXVzdCBiZSAxNiBieXRlcycpO1xuXG4gIGNvbnN0IGVuY3J5cHRPcHRpb25zOiB7IGl0ZXI6IG51bWJlcjsga3M6IG51bWJlcjsgc2FsdDogbnVtYmVyW107IGl2OiBudW1iZXJbXTsgYWRhdGE/OiBzdHJpbmcgfSA9IHtcbiAgICBpdGVyOiAxMDAwMCxcbiAgICBrczogMjU2LFxuICAgIHNhbHQ6IFtieXRlc1RvV29yZChzYWx0LnNsaWNlKDAsIDQpKSwgYnl0ZXNUb1dvcmQoc2FsdC5zbGljZSg0KSldLFxuICAgIGl2OiBbXG4gICAgICBieXRlc1RvV29yZChpdi5zbGljZSgwLCA0KSksXG4gICAgICBieXRlc1RvV29yZChpdi5zbGljZSg0LCA4KSksXG4gICAgICBieXRlc1RvV29yZChpdi5zbGljZSg4LCAxMikpLFxuICAgICAgYnl0ZXNUb1dvcmQoaXYuc2xpY2UoMTIsIDE2KSksXG4gICAgXSxcbiAgfTtcbiAgaWYgKG9wdGlvbnM/LmFkYXRhKSBlbmNyeXB0T3B0aW9ucy5hZGF0YSA9IG9wdGlvbnMuYWRhdGE7XG4gIHJldHVybiBzamNsLmVuY3J5cHQocGFzc3dvcmQsIHBsYWludGV4dCwgZW5jcnlwdE9wdGlvbnMpO1xufVxuXG4vKiogRGVjcnlwdCBhIHYxIFNKQ0wgZW52ZWxvcGUuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjcnlwdChwYXNzd29yZDogc3RyaW5nLCBjaXBoZXJ0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc2pjbC5kZWNyeXB0KHBhc3N3b3JkLCBjaXBoZXJ0ZXh0KTtcbn1cblxuLyoqXG4gKiBBdXRvLWRldGVjdCB2MSAoU0pDTCkgb3IgdjIgKEFyZ29uMmlkICsgQUVTLTI1Ni1HQ00pIGZyb20gdGhlIGVudmVsb3BlIGB2YCBmaWVsZCBhbmQgZGVjcnlwdC5cbiAqXG4gKiBNaWdyYXRpb24gcGF0aCBmcm9tIHN5bmMgYGRlY3J5cHQoKWAuIE1vdmUgY2FsbCBzaXRlcyB0byBgZGVjcnlwdEFzeW5jKClgIGJlZm9yZVxuICogdGhlIGJyZWFraW5nIHJlbGVhc2UgdGhhdCBmbGlwcyB0aGUgZGVmYXVsdCB0byB2Mi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlY3J5cHRBc3luYyhwYXNzd29yZDogc3RyaW5nLCBjaXBoZXJ0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBsZXQgZW52ZWxvcGVWZXJzaW9uOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgY29uc3QgZW52ZWxvcGUgPSBKU09OLnBhcnNlKGNpcGhlcnRleHQpO1xuICAgIGVudmVsb3BlVmVyc2lvbiA9IGVudmVsb3BlLnY7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVjcnlwdDogY2lwaGVydGV4dCBpcyBub3QgdmFsaWQgSlNPTicpO1xuICB9XG4gIGlmIChlbnZlbG9wZVZlcnNpb24gPT09IDIpIHtcbiAgICAvLyBEbyBub3QgY2F0Y2g6IHdyb25nIHBhc3N3b3JkIG9uIHYyIG11c3Qgbm90IHNpbGVudGx5IGZhbGwgdGhyb3VnaCB0byB2MS5cbiAgICByZXR1cm4gZGVjcnlwdFYyKHBhc3N3b3JkLCBjaXBoZXJ0ZXh0KTtcbiAgfVxuICBpZiAoZW52ZWxvcGVWZXJzaW9uICE9PSB1bmRlZmluZWQgJiYgZW52ZWxvcGVWZXJzaW9uICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBkZWNyeXB0OiB1bmtub3duIGVudmVsb3BlIHZlcnNpb24gJHtlbnZlbG9wZVZlcnNpb259YCk7XG4gIH1cbiAgcmV0dXJuIHNqY2wuZGVjcnlwdChwYXNzd29yZCwgY2lwaGVydGV4dCk7XG59XG4iXX0=
|
package/dist/src/encryptV2.d.ts
CHANGED
|
@@ -24,6 +24,8 @@ declare const V2EnvelopeCodec: t.IntersectionC<[t.TypeC<{
|
|
|
24
24
|
}>, t.PartialC<{
|
|
25
25
|
/** Base64-encoded per-call HKDF salt -- present only in session-produced envelopes */
|
|
26
26
|
hkdfSalt: t.Type<string, string, unknown>;
|
|
27
|
+
/** Additional authenticated data for context binding (e.g. transaction hash + derivation path) */
|
|
28
|
+
adata: t.StringC;
|
|
27
29
|
}>]>;
|
|
28
30
|
export type V2Envelope = t.TypeOf<typeof V2EnvelopeCodec>;
|
|
29
31
|
export declare function argon2ToHkdfKey(password: string, salt: Uint8Array, params: {
|
|
@@ -32,8 +34,8 @@ export declare function argon2ToHkdfKey(password: string, salt: Uint8Array, para
|
|
|
32
34
|
parallelism: number;
|
|
33
35
|
}): Promise<CryptoKey>;
|
|
34
36
|
export declare function hkdfDeriveAesKey(hkdfKey: CryptoKey, hkdfSalt: Uint8Array, usage: KeyUsage): Promise<CryptoKey>;
|
|
35
|
-
export declare function aesGcmEncrypt(key: CryptoKey, iv: Uint8Array, plaintext: string): Promise<Uint8Array>;
|
|
36
|
-
export declare function aesGcmDecrypt(key: CryptoKey, iv: Uint8Array, ct: Uint8Array): Promise<string>;
|
|
37
|
+
export declare function aesGcmEncrypt(key: CryptoKey, iv: Uint8Array, plaintext: string, additionalData?: Uint8Array): Promise<Uint8Array>;
|
|
38
|
+
export declare function aesGcmDecrypt(key: CryptoKey, iv: Uint8Array, ct: Uint8Array, additionalData?: Uint8Array): Promise<string>;
|
|
37
39
|
export declare function parseV2Envelope(ciphertext: string): V2Envelope;
|
|
38
40
|
/**
|
|
39
41
|
* Encrypt plaintext using Argon2id KDF + AES-256-GCM.
|
|
@@ -50,6 +52,7 @@ export declare function encryptV2(password: string, plaintext: string, options?:
|
|
|
50
52
|
memorySize?: number;
|
|
51
53
|
iterations?: number;
|
|
52
54
|
parallelism?: number;
|
|
55
|
+
adata?: string;
|
|
53
56
|
}): Promise<string>;
|
|
54
57
|
/**
|
|
55
58
|
* Decrypt a v2 envelope (Argon2id + AES-256-GCM).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryptV2.d.ts","sourceRoot":"","sources":["../../src/encryptV2.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AAaX,qCAAqC;AACrC,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAOnC,QAAA,MAAM,eAAe;;;;;;;;;IAWjB,sFAAsF;;
|
|
1
|
+
{"version":3,"file":"encryptV2.d.ts","sourceRoot":"","sources":["../../src/encryptV2.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AAaX,qCAAqC;AACrC,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,yCAAyC;AACzC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAOnC,QAAA,MAAM,eAAe;;;;;;;;;IAWjB,sFAAsF;;IAEtF,kGAAkG;;IAGpG,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AA6B1D,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACtE,OAAO,CAAC,SAAS,CAAC,CAGpB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAQ9G;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,SAAS,EACd,EAAE,EAAE,UAAU,EACd,SAAS,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,UAAU,GAC1B,OAAO,CAAC,UAAU,CAAC,CAKrB;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,SAAS,EACd,EAAE,EAAE,UAAU,EACd,EAAE,EAAE,UAAU,EACd,cAAc,CAAC,EAAE,UAAU,GAC1B,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAQ9D;AAID;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IACR,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBrF"}
|
package/dist/src/encryptV2.js
CHANGED
|
@@ -85,6 +85,8 @@ const V2EnvelopeCodec = t.intersection([
|
|
|
85
85
|
t.partial({
|
|
86
86
|
/** Base64-encoded per-call HKDF salt -- present only in session-produced envelopes */
|
|
87
87
|
hkdfSalt: sdk_core_1.base64String,
|
|
88
|
+
/** Additional authenticated data for context binding (e.g. transaction hash + derivation path) */
|
|
89
|
+
adata: t.string,
|
|
88
90
|
}),
|
|
89
91
|
]);
|
|
90
92
|
// Crypto helpers
|
|
@@ -110,12 +112,18 @@ async function argon2ToHkdfKey(password, salt, params) {
|
|
|
110
112
|
function hkdfDeriveAesKey(hkdfKey, hkdfSalt, usage) {
|
|
111
113
|
return crypto.subtle.deriveKey({ name: 'HKDF', hash: 'SHA-256', salt: hkdfSalt, info: HKDF_INFO }, hkdfKey, { name: 'AES-GCM', length: 256 }, false, [usage]);
|
|
112
114
|
}
|
|
113
|
-
async function aesGcmEncrypt(key, iv, plaintext) {
|
|
114
|
-
const
|
|
115
|
+
async function aesGcmEncrypt(key, iv, plaintext, additionalData) {
|
|
116
|
+
const params = { name: 'AES-GCM', iv, tagLength: 128 };
|
|
117
|
+
if (additionalData)
|
|
118
|
+
params.additionalData = additionalData;
|
|
119
|
+
const ct = await crypto.subtle.encrypt(params, key, new TextEncoder().encode(plaintext));
|
|
115
120
|
return new Uint8Array(ct);
|
|
116
121
|
}
|
|
117
|
-
async function aesGcmDecrypt(key, iv, ct) {
|
|
118
|
-
const
|
|
122
|
+
async function aesGcmDecrypt(key, iv, ct, additionalData) {
|
|
123
|
+
const params = { name: 'AES-GCM', iv, tagLength: 128 };
|
|
124
|
+
if (additionalData)
|
|
125
|
+
params.additionalData = additionalData;
|
|
126
|
+
const plaintext = await crypto.subtle.decrypt(params, key, ct);
|
|
119
127
|
return new TextDecoder().decode(plaintext);
|
|
120
128
|
}
|
|
121
129
|
function parseV2Envelope(ciphertext) {
|
|
@@ -148,9 +156,10 @@ async function encryptV2(password, plaintext, options) {
|
|
|
148
156
|
const iv = options?.iv ?? new Uint8Array((0, crypto_1.randomBytes)(exports.GCM_IV_LENGTH));
|
|
149
157
|
if (iv.length !== exports.GCM_IV_LENGTH)
|
|
150
158
|
throw new Error(`iv must be ${exports.GCM_IV_LENGTH} bytes`);
|
|
159
|
+
const adataBytes = options?.adata ? new TextEncoder().encode(options.adata) : undefined;
|
|
151
160
|
const key = await argon2ToAesKey(password, salt, { memorySize, iterations, parallelism });
|
|
152
|
-
const ct = await aesGcmEncrypt(key, iv, plaintext);
|
|
153
|
-
|
|
161
|
+
const ct = await aesGcmEncrypt(key, iv, plaintext, adataBytes);
|
|
162
|
+
const envelope = {
|
|
154
163
|
v: 2,
|
|
155
164
|
m: memorySize,
|
|
156
165
|
t: iterations,
|
|
@@ -158,7 +167,10 @@ async function encryptV2(password, plaintext, options) {
|
|
|
158
167
|
salt: Buffer.from(salt).toString('base64'),
|
|
159
168
|
iv: Buffer.from(iv).toString('base64'),
|
|
160
169
|
ct: Buffer.from(ct).toString('base64'),
|
|
161
|
-
}
|
|
170
|
+
};
|
|
171
|
+
if (options?.adata)
|
|
172
|
+
envelope.adata = options.adata;
|
|
173
|
+
return JSON.stringify(envelope);
|
|
162
174
|
}
|
|
163
175
|
/**
|
|
164
176
|
* Decrypt a v2 envelope (Argon2id + AES-256-GCM).
|
|
@@ -175,13 +187,14 @@ async function decryptV2(password, ciphertext) {
|
|
|
175
187
|
const iv = new Uint8Array(Buffer.from(envelope.iv, 'base64'));
|
|
176
188
|
const ct = new Uint8Array(Buffer.from(envelope.ct, 'base64'));
|
|
177
189
|
const params = { memorySize: envelope.m, iterations: envelope.t, parallelism: envelope.p };
|
|
190
|
+
const adataBytes = envelope.adata ? new TextEncoder().encode(envelope.adata) : undefined;
|
|
178
191
|
if (envelope.hkdfSalt) {
|
|
179
192
|
const hkdfKey = await argon2ToHkdfKey(password, salt, params);
|
|
180
193
|
const hkdfSalt = new Uint8Array(Buffer.from(envelope.hkdfSalt, 'base64'));
|
|
181
194
|
const aesKey = await hkdfDeriveAesKey(hkdfKey, hkdfSalt, 'decrypt');
|
|
182
|
-
return aesGcmDecrypt(aesKey, iv, ct);
|
|
195
|
+
return aesGcmDecrypt(aesKey, iv, ct, adataBytes);
|
|
183
196
|
}
|
|
184
197
|
const key = await argon2ToAesKey(password, salt, params);
|
|
185
|
-
return aesGcmDecrypt(key, iv, ct);
|
|
198
|
+
return aesGcmDecrypt(key, iv, ct, adataBytes);
|
|
186
199
|
}
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdFYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VuY3J5cHRWMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtRkEsMENBT0M7QUFFRCw0Q0FRQztBQUVELHNDQU9DO0FBRUQsc0NBR0M7QUFFRCwwQ0FRQztBQWFELDhCQTJCQztBQVdELDhCQWdCQztBQS9MRCwrQ0FBOEM7QUFDOUMsbURBQWlGO0FBQ2pGLG1DQUFxQztBQUNyQyx5Q0FBMkI7QUFFM0I7O0dBRUc7QUFDVSxRQUFBLGVBQWUsR0FBRztJQUM3QixVQUFVLEVBQUUsS0FBSyxFQUFFLGdCQUFnQjtJQUNuQyxVQUFVLEVBQUUsQ0FBQztJQUNiLFdBQVcsRUFBRSxDQUFDO0lBQ2QsVUFBVSxFQUFFLEVBQUUsRUFBRSxjQUFjO0lBQzlCLFVBQVUsRUFBRSxFQUFFLEVBQUUsZUFBZTtDQUN2QixDQUFDO0FBRVg7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxHQUFHO0lBQ2pCLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFVBQVUsRUFBRSxFQUFFO0lBQ2QsV0FBVyxFQUFFLEVBQUU7Q0FDUCxDQUFDO0FBRVgscUNBQXFDO0FBQ3hCLFFBQUEsYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUVoQyx5Q0FBeUM7QUFDNUIsUUFBQSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFFbkMsZ0ZBQWdGO0FBQ2hGLE1BQU0sU0FBUyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFL0QsaUJBQWlCO0FBRWpCLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDckMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNMLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsRUFBRSxJQUFBLHFCQUFVLEVBQUMsQ0FBQyxFQUFFLFVB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LFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRTNGLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekQsT0FBTyxhQUFhLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXJnb24yaWQgfSBmcm9tICdAYml0Z28tYmV0YS9hcmdvbjInO1xuaW1wb3J0IHsgYmFzZTY0U3RyaW5nLCBib3VuZGVkSW50LCBkZWNvZGVXaXRoQ29kZWMgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcblxuLyoqIERlZmF1bHQgQXJnb24yaWQgcGFyYW1ldGVycyBwZXIgUkZDIDkxMDYgc2Vjb25kIHJlY29tbWVuZGF0aW9uXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTA2I3NlY3Rpb24tNFxuICovXG5leHBvcnQgY29uc3QgQVJHT04yX0RFRkFVTFRTID0ge1xuICBtZW1vcnlTaXplOiA2NTUzNiwgLy8gNjQgTWlCIGluIEtpQlxuICBpdGVyYXRpb25zOiAzLFxuICBwYXJhbGxlbGlzbTogNCxcbiAgaGFzaExlbmd0aDogMzIsIC8vIDI1Ni1iaXQga2V5XG4gIHNhbHRMZW5ndGg6IDE2LCAvLyAxMjgtYml0IHNhbHRcbn0gYXMgY29uc3Q7XG5cbi8qKiBNYXhpbXVtIGFsbG93ZWQgQXJnb24yaWQgcGFyYW1ldGVycyB0byBwcmV2ZW50IERvUyB2aWEgY3JhZnRlZCBlbnZlbG9wZXMuXG4gKiBtZW1vcnlTaXplOiAyNTYgTWlCICg0eCBkZWZhdWx0KSAtLSBjYXBzIG1lbW9yeSBhbGxvY2F0aW9uIG9uIHVudHJ1c3RlZCBpbnB1dC5cbiAqIGl0ZXJhdGlvbnM6IDE2IC0tIGNhcHMgQ1BVIHRpbWUuXG4gKiBwYXJhbGxlbGlzbTogMTYgLS0gY2FwcyB0aHJlYWQgY291bnQuXG4gKi9cbmNvbnN0IEFSR09OMl9NQVggPSB7XG4gIG1lbW9yeVNpemU6IDI2MjE0NCxcbiAgaXRlcmF0aW9uczogMTYsXG4gIHBhcmFsbGVsaXNtOiAxNixcbn0gYXMgY29uc3Q7XG5cbi8qKiBBRVMtMjU2LUdDTSBJViBsZW5ndGggaW4gYnl0ZXMgKi9cbmV4cG9ydCBjb25zdCBHQ01fSVZfTEVOR1RIID0gMTI7XG5cbi8qKiBIS0RGIHBlci1jYWxsIHNhbHQgbGVuZ3RoIGluIGJ5dGVzICovXG5leHBvcnQgY29uc3QgSEtERl9TQUxUX0xFTkdUSCA9IDMyO1xuXG4vKiogRml4ZWQgSEtERiBpbmZvIHN0cmluZyBmb3IgZG9tYWluIHNlcGFyYXRpb24gYWNyb3NzIEJpdEdvIHYyIHNlc3Npb24ga2V5cyAqL1xuY29uc3QgSEtERl9JTkZPID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKCdiaXRnby12Mi1zZXNzaW9uJyk7XG5cbi8vIEVudmVsb3BlIGNvZGVjXG5cbmNvbnN0IFYyRW52ZWxvcGVDb2RlYyA9IHQuaW50ZXJzZWN0aW9uKFtcbiAgdC50eXBlKHtcbiAgICB2OiB0LmxpdGVyYWwoMiksXG4gICAgbTogYm91bmRlZEludCgxLCBBUkdPTjJfTUFYLm1lbW9yeVNpemUsICdtZW1vcnlTaXplJyksXG4gICAgdDogYm91bmRlZEludCgxLCBBUkdPTjJfTUFYLml0ZXJhdGlvbnMsICdpdGVyYXRpb25zJyksXG4gICAgcDogYm91bmRlZEludCgxLCBBUkdPTjJfTUFYLnBhcmFsbGVsaXNtLCAncGFyYWxsZWxpc20nKSxcbiAgICBzYWx0OiBiYXNlNjRTdHJpbmcsXG4gICAgaXY6IGJhc2U2NFN0cmluZyxcbiAgICBjdDogYmFzZTY0U3RyaW5nLFxuICB9KSxcbiAgdC5wYXJ0aWFsKHtcbiAgICAvKiogQmFzZTY0LWVuY29kZWQgcGVyLWNhbGwgSEtERiBzYWx0IC0tIHByZXNlbnQgb25seSBpbiBzZXNzaW9uLXByb2R1Y2VkIGVudmVsb3BlcyAqL1xuICAgIGhrZGZTYWx0OiBiYXNlNjRTdHJpbmcsXG4gIH0pLFxuXSk7XG5cbmV4cG9ydCB0eXBlIFYyRW52ZWxvcGUgPSB0LlR5cGVPZjx0eXBlb2YgVjJFbnZlbG9wZUNvZGVjPjtcblxuLy8gQ3J5cHRvIGhlbHBlcnNcblxuYXN5bmMgZnVuY3Rpb24gYXJnb24ySGFzaChcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgc2FsdDogVWludDhBcnJheSxcbiAgcGFyYW1zOiB7IG1lbW9yeVNpemU6IG51bWJlcjsgaXRlcmF0aW9uczogbnVtYmVyOyBwYXJhbGxlbGlzbTogbnVtYmVyIH1cbik6IFByb21pc2U8VWludDhBcnJheT4ge1xuICByZXR1cm4gYXJnb24yaWQoe1xuICAgIHBhc3N3b3JkLFxuICAgIHNhbHQsXG4gICAgbWVtb3J5U2l6ZTogcGFyYW1zLm1lbW9yeVNpemUsXG4gICAgaXRlcmF0aW9uczogcGFyYW1zLml0ZXJhdGlvbnMsXG4gICAgcGFyYWxsZWxpc206IHBhcmFtcy5wYXJhbGxlbGlzbSxcbiAgICBoYXNoTGVuZ3RoOiBBUkdPTjJfREVGQVVMVFMuaGFzaExlbmd0aCxcbiAgICBvdXRwdXRUeXBlOiAnYmluYXJ5JyxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFyZ29uMlRvQWVzS2V5KFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBzYWx0OiBVaW50OEFycmF5LFxuICBwYXJhbXM6IHsgbWVtb3J5U2l6ZTogbnVtYmVyOyBpdGVyYXRpb25zOiBudW1iZXI7IHBhcmFsbGVsaXNtOiBudW1iZXIgfVxuKTogUHJvbWlzZTxDcnlwdG9LZXk+IHtcbiAgY29uc3Qga2V5Qnl0ZXMgPSBhd2FpdCBhcmdvbjJIYXNoKHBhc3N3b3JkLCBzYWx0LCBwYXJhbXMpO1xuICByZXR1cm4gY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoJ3JhdycsIGtleUJ5dGVzLCB7IG5hbWU6ICdBRVMtR0NNJyB9LCBmYWxzZSwgWydlbmNyeXB0JywgJ2RlY3J5cHQnXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcmdvbjJUb0hrZGZLZXkoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIHNhbHQ6IFVpbnQ4QXJyYXksXG4gIHBhcmFtczogeyBtZW1vcnlTaXplOiBudW1iZXI7IGl0ZXJhdGlvbnM6IG51bWJlcjsgcGFyYWxsZWxpc206IG51bWJlciB9XG4pOiBQcm9taXNlPENyeXB0b0tleT4ge1xuICBjb25zdCBrZXlCeXRlcyA9IGF3YWl0IGFyZ29uMkhhc2gocGFzc3dvcmQsIHNhbHQsIHBhcmFtcyk7XG4gIHJldHVybiBjcnlwdG8uc3VidGxlLmltcG9ydEtleSgncmF3Jywga2V5Qnl0ZXMsICdIS0RGJywgZmFsc2UsIFsnZGVyaXZlS2V5J10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGtkZkRlcml2ZUFlc0tleShoa2RmS2V5OiBDcnlwdG9LZXksIGhrZGZTYWx0OiBVaW50OEFycmF5LCB1c2FnZTogS2V5VXNhZ2UpOiBQcm9taXNlPENyeXB0b0tleT4ge1xuICByZXR1cm4gY3J5cHRvLnN1YnRsZS5kZXJpdmVLZXkoXG4gICAgeyBuYW1lOiAnSEtERicsIGhhc2g6ICdTSEEtMjU2Jywgc2FsdDogaGtkZlNhbHQsIGluZm86IEhLREZfSU5GTyB9LFxuICAgIGhrZGZLZXksXG4gICAgeyBuYW1lOiAnQUVTLUdDTScsIGxlbmd0aDogMjU2IH0sXG4gICAgZmFsc2UsXG4gICAgW3VzYWdlXVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYWVzR2NtRW5jcnlwdChrZXk6IENyeXB0b0tleSwgaXY6IFVpbnQ4QXJyYXksIHBsYWludGV4dDogc3RyaW5nKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIGNvbnN0IGN0ID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5lbmNyeXB0KFxuICAgIHsgbmFtZTogJ0FFUy1HQ00nLCBpdiwgdGFnTGVuZ3RoOiAxMjggfSxcbiAgICBrZXksXG4gICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBsYWludGV4dClcbiAgKTtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGN0KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFlc0djbURlY3J5cHQoa2V5OiBDcnlwdG9LZXksIGl2OiBVaW50OEFycmF5LCBjdDogVWludDhBcnJheSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHBsYWludGV4dCA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7IG5hbWU6ICdBRVMtR0NNJywgaXYsIHRhZ0xlbmd0aDogMTI4IH0sIGtleSwgY3QpO1xuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHBsYWludGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVYyRW52ZWxvcGUoY2lwaGVydGV4dDogc3RyaW5nKTogVjJFbnZlbG9wZSB7XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShjaXBoZXJ0ZXh0KTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2MiBkZWNyeXB0OiBpbnZhbGlkIEpTT04gZW52ZWxvcGUnKTtcbiAgfVxuICByZXR1cm4gZGVjb2RlV2l0aENvZGVjKFYyRW52ZWxvcGVDb2RlYywgcGFyc2VkLCAndjIgZGVjcnlwdDogaW52YWxpZCBlbnZlbG9wZScpO1xufVxuXG4vLyBQdWJsaWMgQVBJXG5cbi8qKlxuICogRW5jcnlwdCBwbGFpbnRleHQgdXNpbmcgQXJnb24yaWQgS0RGICsgQUVTLTI1Ni1HQ00uXG4gKlxuICogUmV0dXJucyBhIHNlbGYtZGVzY3JpYmluZyBKU09OIHYyIGVudmVsb3BlIGNvbnRhaW5pbmcgYWxsIEFyZ29uMmlkIHBhcmFtZXRlcnMsXG4gKiBzYWx0LCBJViwgYW5kIGNpcGhlcnRleHQgLS0gZnVsbHkgc3RhbmRhbG9uZSBmb3IgZGVjcnlwdGlvbi5cbiAqXG4gKiBGb3IgbXVsdGktY2FsbCBvcGVyYXRpb25zIChNUEMgc2lnbmluZywgd2FsbGV0IGNyZWF0aW9uKSwgcHJlZmVyXG4gKiBjcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbiB0byBydW4gQXJnb24yaWQgb25jZSBhbmQgZGVyaXZlIHBlci1jYWxsIGtleXMgdmlhIEhLREYuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0VjIoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIHBsYWludGV4dDogc3RyaW5nLFxuICBvcHRpb25zPzogeyBzYWx0PzogVWludDhBcnJheTsgaXY/OiBVaW50OEFycmF5OyBtZW1vcnlTaXplPzogbnVtYmVyOyBpdGVyYXRpb25zPzogbnVtYmVyOyBwYXJhbGxlbGlzbT86IG51bWJlciB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBtZW1vcnlTaXplID0gb3B0aW9ucz8ubWVtb3J5U2l6ZSA/PyBBUkdPTjJfREVGQVVMVFMubWVtb3J5U2l6ZTtcbiAgY29uc3QgaXRlcmF0aW9ucyA9IG9wdGlvbnM/Lml0ZXJhdGlvbnMgPz8gQVJHT04yX0RFRkFVTFRTLml0ZXJhdGlvbnM7XG4gIGNvbnN0IHBhcmFsbGVsaXNtID0gb3B0aW9ucz8ucGFyYWxsZWxpc20gPz8gQVJHT04yX0RFRkFVTFRTLnBhcmFsbGVsaXNtO1xuXG4gIGNvbnN0IHNhbHQgPSBvcHRpb25zPy5zYWx0ID8/IG5ldyBVaW50OEFycmF5KHJhbmRvbUJ5dGVzKEFSR09OMl9ERUZBVUxUUy5zYWx0TGVuZ3RoKSk7XG4gIGlmIChzYWx0Lmxlbmd0aCAhPT0gQVJHT04yX0RFRkFVTFRTLnNhbHRMZW5ndGgpIHRocm93IG5ldyBFcnJvcihgc2FsdCBtdXN0IGJlICR7QVJHT04yX0RFRkFVTFRTLnNhbHRMZW5ndGh9IGJ5dGVzYCk7XG5cbiAgY29uc3QgaXYgPSBvcHRpb25zPy5pdiA/PyBuZXcgVWludDhBcnJheShyYW5kb21CeXRlcyhHQ01fSVZfTEVOR1RIKSk7XG4gIGlmIChpdi5sZW5ndGggIT09IEdDTV9JVl9MRU5HVEgpIHRocm93IG5ldyBFcnJvcihgaXYgbXVzdCBiZSAke0dDTV9JVl9MRU5HVEh9IGJ5dGVzYCk7XG5cbiAgY29uc3Qga2V5ID0gYXdhaXQgYXJnb24yVG9BZXNLZXkocGFzc3dvcmQsIHNhbHQsIHsgbWVtb3J5U2l6ZSwgaXRlcmF0aW9ucywgcGFyYWxsZWxpc20gfSk7XG4gIGNvbnN0IGN0ID0gYXdhaXQgYWVzR2NtRW5jcnlwdChrZXksIGl2LCBwbGFpbnRleHQpO1xuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgdjogMixcbiAgICBtOiBtZW1vcnlTaXplLFxuICAgIHQ6IGl0ZXJhdGlvbnMsXG4gICAgcDogcGFyYWxsZWxpc20sXG4gICAgc2FsdDogQnVmZmVyLmZyb20oc2FsdCkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgIGl2OiBCdWZmZXIuZnJvbShpdikudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgIGN0OiBCdWZmZXIuZnJvbShjdCkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICB9IHNhdGlzZmllcyBWMkVudmVsb3BlKTtcbn1cblxuLyoqXG4gKiBEZWNyeXB0IGEgdjIgZW52ZWxvcGUgKEFyZ29uMmlkICsgQUVTLTI1Ni1HQ00pLlxuICpcbiAqIEhhbmRsZXMgYm90aCBlbnZlbG9wZSB0eXBlcyBhdXRvbWF0aWNhbGx5OlxuICogICAtIFN0YW5kYXJkICAobm8gaGtkZlNhbHQpOiBBcmdvbjJpZCAtPiBBRVMtR0NNXG4gKiAgIC0gU2Vzc2lvbiAgIChoa2RmU2FsdCBwcmVzZW50KTogQXJnb24yaWQgLT4gSEtERiAtPiBBRVMtR0NNXG4gKlxuICogQWxsIHBhcmFtZXRlcnMgYXJlIHN0b3JlZCBpbiB0aGUgZW52ZWxvcGUgLS0gbm8gc2Vzc2lvbiBjb250ZXh0IHJlcXVpcmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVjcnlwdFYyKHBhc3N3b3JkOiBzdHJpbmcsIGNpcGhlcnRleHQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVudmVsb3BlID0gcGFyc2VWMkVudmVsb3BlKGNpcGhlcnRleHQpO1xuICBjb25zdCBzYWx0ID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oZW52ZWxvcGUuc2FsdCwgJ2Jhc2U2NCcpKTtcbiAgY29uc3QgaXYgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShlbnZlbG9wZS5pdiwgJ2Jhc2U2NCcpKTtcbiAgY29uc3QgY3QgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShlbnZlbG9wZS5jdCwgJ2Jhc2U2NCcpKTtcbiAgY29uc3QgcGFyYW1zID0geyBtZW1vcnlTaXplOiBlbnZlbG9wZS5tLCBpdGVyYXRpb25zOiBlbnZlbG9wZS50LCBwYXJhbGxlbGlzbTogZW52ZWxvcGUucCB9O1xuXG4gIGlmIChlbnZlbG9wZS5oa2RmU2FsdCkge1xuICAgIGNvbnN0IGhrZGZLZXkgPSBhd2FpdCBhcmdvbjJUb0hrZGZLZXkocGFzc3dvcmQsIHNhbHQsIHBhcmFtcyk7XG4gICAgY29uc3QgaGtkZlNhbHQgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShlbnZlbG9wZS5oa2RmU2FsdCwgJ2Jhc2U2NCcpKTtcbiAgICBjb25zdCBhZXNLZXkgPSBhd2FpdCBoa2RmRGVyaXZlQWVzS2V5KGhrZGZLZXksIGhrZGZTYWx0LCAnZGVjcnlwdCcpO1xuICAgIHJldHVybiBhZXNHY21EZWNyeXB0KGFlc0tleSwgaXYsIGN0KTtcbiAgfVxuXG4gIGNvbnN0IGtleSA9IGF3YWl0IGFyZ29uMlRvQWVzS2V5KHBhc3N3b3JkLCBzYWx0LCBwYXJhbXMpO1xuICByZXR1cm4gYWVzR2NtRGVjcnlwdChrZXksIGl2LCBjdCk7XG59XG4iXX0=
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdFYyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VuY3J5cHRWMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxRkEsMENBT0M7QUFFRCw0Q0FRQztBQUVELHNDQVVDO0FBRUQsc0NBVUM7QUFFRCwwQ0FRQztBQWFELDhCQXFDQztBQVdELDhCQWlCQztBQXRORCwrQ0FBOEM7QUFDOUMsbURBQWlGO0FBQ2pGLG1DQUFxQztBQUNyQyx5Q0FBMkI7QUFFM0I7O0dBRUc7QUFDVSxRQUFBLGVBQWUsR0FBRztJQUM3QixVQUFVLEVBQUUsS0FBSyxFQUFFLGdCQUFnQjtJQUNuQyxVQUFVLEVBQUUsQ0FBQztJQUNiLFdBQVcsRUFBRSxDQUFDO0lBQ2QsVUFBVSxFQUFFLEVBQUUsRUFBRSxjQUFjO0lBQzlCLFVBQVUsRUFBRSxFQUFFLEVBQUUsZUFBZTtDQUN2QixDQUFDO0FBRVg7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxHQUFHO0lBQ2pCLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLFVBQVUsRUFBRSxFQUFFO0lBQ2QsV0FBVyxFQUFFLEVBQUU7Q0FDUCxDQUFDO0FBRVgscUNBQXFDO0FBQ3hCLFFBQUEsYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUVoQyx5Q0FBeUM7QUFDNUIsUUFBQSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFFbkMsZ0ZBQWdGO0FBQ2hGLE1BQU0sU0FBUyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFL0QsaUJBQWlCO0FBRWpCLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDckMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNMLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNmLENBQUMsRUFBRSxJQUFBLHFCQUFVLEVBQUMsQ0FBQyxFQUFFLFVB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QVEsQ0FBQztRQUMxQyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ3RDLEVBQUUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7S0FDdkMsQ0FBQztJQUNGLElBQUksT0FBTyxFQUFFLEtBQUs7UUFBRSxRQUFRLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbkQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSxTQUFTLENBQUMsUUFBZ0IsRUFBRSxVQUFrQjtJQUNsRSxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzNGLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRXpGLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxNQUFNLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sYUFBYSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELE9BQU8sYUFBYSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhcmdvbjJpZCB9IGZyb20gJ0BiaXRnby1iZXRhL2FyZ29uMic7XG5pbXBvcnQgeyBiYXNlNjRTdHJpbmcsIGJvdW5kZWRJbnQsIGRlY29kZVdpdGhDb2RlYyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIHQgZnJvbSAnaW8tdHMnO1xuXG4vKiogRGVmYXVsdCBBcmdvbjJpZCBwYXJhbWV0ZXJzIHBlciBSRkMgOTEwNiBzZWNvbmQgcmVjb21tZW5kYXRpb25cbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMDYjc2VjdGlvbi00XG4gKi9cbmV4cG9ydCBjb25zdCBBUkdPTjJfREVGQVVMVFMgPSB7XG4gIG1lbW9yeVNpemU6IDY1NTM2LCAvLyA2NCBNaUIgaW4gS2lCXG4gIGl0ZXJhdGlvbnM6IDMsXG4gIHBhcmFsbGVsaXNtOiA0LFxuICBoYXNoTGVuZ3RoOiAzMiwgLy8gMjU2LWJpdCBrZXlcbiAgc2FsdExlbmd0aDogMTYsIC8vIDEyOC1iaXQgc2FsdFxufSBhcyBjb25zdDtcblxuLyoqIE1heGltdW0gYWxsb3dlZCBBcmdvbjJpZCBwYXJhbWV0ZXJzIHRvIHByZXZlbnQgRG9TIHZpYSBjcmFmdGVkIGVudmVsb3Blcy5cbiAqIG1lbW9yeVNpemU6IDI1NiBNaUIgKDR4IGRlZmF1bHQpIC0tIGNhcHMgbWVtb3J5IGFsbG9jYXRpb24gb24gdW50cnVzdGVkIGlucHV0LlxuICogaXRlcmF0aW9uczogMTYgLS0gY2FwcyBDUFUgdGltZS5cbiAqIHBhcmFsbGVsaXNtOiAxNiAtLSBjYXBzIHRocmVhZCBjb3VudC5cbiAqL1xuY29uc3QgQVJHT04yX01BWCA9IHtcbiAgbWVtb3J5U2l6ZTogMjYyMTQ0LFxuICBpdGVyYXRpb25zOiAxNixcbiAgcGFyYWxsZWxpc206IDE2LFxufSBhcyBjb25zdDtcblxuLyoqIEFFUy0yNTYtR0NNIElWIGxlbmd0aCBpbiBieXRlcyAqL1xuZXhwb3J0IGNvbnN0IEdDTV9JVl9MRU5HVEggPSAxMjtcblxuLyoqIEhLREYgcGVyLWNhbGwgc2FsdCBsZW5ndGggaW4gYnl0ZXMgKi9cbmV4cG9ydCBjb25zdCBIS0RGX1NBTFRfTEVOR1RIID0gMzI7XG5cbi8qKiBGaXhlZCBIS0RGIGluZm8gc3RyaW5nIGZvciBkb21haW4gc2VwYXJhdGlvbiBhY3Jvc3MgQml0R28gdjIgc2Vzc2lvbiBrZXlzICovXG5jb25zdCBIS0RGX0lORk8gPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoJ2JpdGdvLXYyLXNlc3Npb24nKTtcblxuLy8gRW52ZWxvcGUgY29kZWNcblxuY29uc3QgVjJFbnZlbG9wZUNvZGVjID0gdC5pbnRlcnNlY3Rpb24oW1xuICB0LnR5cGUoe1xuICAgIHY6IHQubGl0ZXJhbCgyKSxcbiAgICBtOiBib3VuZGVkSW50KDEsIEFSR09OMl9NQVgubWVtb3J5U2l6ZSwgJ21lbW9yeVNpemUnKSxcbiAgICB0OiBib3VuZGVkSW50KDEsIEFSR09OMl9NQVguaXRlcmF0aW9ucywgJ2l0ZXJhdGlvbnMnKSxcbiAgICBwOiBib3VuZGVkSW50KDEsIEFSR09OMl9NQVgucGFyYWxsZWxpc20sICdwYXJhbGxlbGlzbScpLFxuICAgIHNhbHQ6IGJhc2U2NFN0cmluZyxcbiAgICBpdjogYmFzZTY0U3RyaW5nLFxuICAgIGN0OiBiYXNlNjRTdHJpbmcsXG4gIH0pLFxuICB0LnBhcnRpYWwoe1xuICAgIC8qKiBCYXNlNjQtZW5jb2RlZCBwZXItY2FsbCBIS0RGIHNhbHQgLS0gcHJlc2VudCBvbmx5IGluIHNlc3Npb24tcHJvZHVjZWQgZW52ZWxvcGVzICovXG4gICAgaGtkZlNhbHQ6IGJhc2U2NFN0cmluZyxcbiAgICAvKiogQWRkaXRpb25hbCBhdXRoZW50aWNhdGVkIGRhdGEgZm9yIGNvbnRleHQgYmluZGluZyAoZS5nLiB0cmFuc2FjdGlvbiBoYXNoICsgZGVyaXZhdGlvbiBwYXRoKSAqL1xuICAgIGFkYXRhOiB0LnN0cmluZyxcbiAgfSksXG5dKTtcblxuZXhwb3J0IHR5cGUgVjJFbnZlbG9wZSA9IHQuVHlwZU9mPHR5cGVvZiBWMkVudmVsb3BlQ29kZWM+O1xuXG4vLyBDcnlwdG8gaGVscGVyc1xuXG5hc3luYyBmdW5jdGlvbiBhcmdvbjJIYXNoKFxuICBwYXNzd29yZDogc3RyaW5nLFxuICBzYWx0OiBVaW50OEFycmF5LFxuICBwYXJhbXM6IHsgbWVtb3J5U2l6ZTogbnVtYmVyOyBpdGVyYXRpb25zOiBudW1iZXI7IHBhcmFsbGVsaXNtOiBudW1iZXIgfVxuKTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gIHJldHVybiBhcmdvbjJpZCh7XG4gICAgcGFzc3dvcmQsXG4gICAgc2FsdCxcbiAgICBtZW1vcnlTaXplOiBwYXJhbXMubWVtb3J5U2l6ZSxcbiAgICBpdGVyYXRpb25zOiBwYXJhbXMuaXRlcmF0aW9ucyxcbiAgICBwYXJhbGxlbGlzbTogcGFyYW1zLnBhcmFsbGVsaXNtLFxuICAgIGhhc2hMZW5ndGg6IEFSR09OMl9ERUZBVUxUUy5oYXNoTGVuZ3RoLFxuICAgIG91dHB1dFR5cGU6ICdiaW5hcnknLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXJnb24yVG9BZXNLZXkoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIHNhbHQ6IFVpbnQ4QXJyYXksXG4gIHBhcmFtczogeyBtZW1vcnlTaXplOiBudW1iZXI7IGl0ZXJhdGlvbnM6IG51bWJlcjsgcGFyYWxsZWxpc206IG51bWJlciB9XG4pOiBQcm9taXNlPENyeXB0b0tleT4ge1xuICBjb25zdCBrZXlCeXRlcyA9IGF3YWl0IGFyZ29uMkhhc2gocGFzc3dvcmQsIHNhbHQsIHBhcmFtcyk7XG4gIHJldHVybiBjcnlwdG8uc3VidGxlLmltcG9ydEtleSgncmF3Jywga2V5Qnl0ZXMsIHsgbmFtZTogJ0FFUy1HQ00nIH0sIGZhbHNlLCBbJ2VuY3J5cHQnLCAnZGVjcnlwdCddKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFyZ29uMlRvSGtkZktleShcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgc2FsdDogVWludDhBcnJheSxcbiAgcGFyYW1zOiB7IG1lbW9yeVNpemU6IG51bWJlcjsgaXRlcmF0aW9uczogbnVtYmVyOyBwYXJhbGxlbGlzbTogbnVtYmVyIH1cbik6IFByb21pc2U8Q3J5cHRvS2V5PiB7XG4gIGNvbnN0IGtleUJ5dGVzID0gYXdhaXQgYXJnb24ySGFzaChwYXNzd29yZCwgc2FsdCwgcGFyYW1zKTtcbiAgcmV0dXJuIGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KCdyYXcnLCBrZXlCeXRlcywgJ0hLREYnLCBmYWxzZSwgWydkZXJpdmVLZXknXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoa2RmRGVyaXZlQWVzS2V5KGhrZGZLZXk6IENyeXB0b0tleSwgaGtkZlNhbHQ6IFVpbnQ4QXJyYXksIHVzYWdlOiBLZXlVc2FnZSk6IFByb21pc2U8Q3J5cHRvS2V5PiB7XG4gIHJldHVybiBjcnlwdG8uc3VidGxlLmRlcml2ZUtleShcbiAgICB7IG5hbWU6ICdIS0RGJywgaGFzaDogJ1NIQS0yNTYnLCBzYWx0OiBoa2RmU2FsdCwgaW5mbzogSEtERl9JTkZPIH0sXG4gICAgaGtkZktleSxcbiAgICB7IG5hbWU6ICdBRVMtR0NNJywgbGVuZ3RoOiAyNTYgfSxcbiAgICBmYWxzZSxcbiAgICBbdXNhZ2VdXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZXNHY21FbmNyeXB0KFxuICBrZXk6IENyeXB0b0tleSxcbiAgaXY6IFVpbnQ4QXJyYXksXG4gIHBsYWludGV4dDogc3RyaW5nLFxuICBhZGRpdGlvbmFsRGF0YT86IFVpbnQ4QXJyYXlcbik6IFByb21pc2U8VWludDhBcnJheT4ge1xuICBjb25zdCBwYXJhbXM6IEFlc0djbVBhcmFtcyA9IHsgbmFtZTogJ0FFUy1HQ00nLCBpdiwgdGFnTGVuZ3RoOiAxMjggfTtcbiAgaWYgKGFkZGl0aW9uYWxEYXRhKSBwYXJhbXMuYWRkaXRpb25hbERhdGEgPSBhZGRpdGlvbmFsRGF0YTtcbiAgY29uc3QgY3QgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmVuY3J5cHQocGFyYW1zLCBrZXksIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShwbGFpbnRleHQpKTtcbiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGN0KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFlc0djbURlY3J5cHQoXG4gIGtleTogQ3J5cHRvS2V5LFxuICBpdjogVWludDhBcnJheSxcbiAgY3Q6IFVpbnQ4QXJyYXksXG4gIGFkZGl0aW9uYWxEYXRhPzogVWludDhBcnJheVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcGFyYW1zOiBBZXNHY21QYXJhbXMgPSB7IG5hbWU6ICdBRVMtR0NNJywgaXYsIHRhZ0xlbmd0aDogMTI4IH07XG4gIGlmIChhZGRpdGlvbmFsRGF0YSkgcGFyYW1zLmFkZGl0aW9uYWxEYXRhID0gYWRkaXRpb25hbERhdGE7XG4gIGNvbnN0IHBsYWludGV4dCA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGVjcnlwdChwYXJhbXMsIGtleSwgY3QpO1xuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKHBsYWludGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVYyRW52ZWxvcGUoY2lwaGVydGV4dDogc3RyaW5nKTogVjJFbnZlbG9wZSB7XG4gIGxldCBwYXJzZWQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShjaXBoZXJ0ZXh0KTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd2MiBkZWNyeXB0OiBpbnZhbGlkIEpTT04gZW52ZWxvcGUnKTtcbiAgfVxuICByZXR1cm4gZGVjb2RlV2l0aENvZGVjKFYyRW52ZWxvcGVDb2RlYywgcGFyc2VkLCAndjIgZGVjcnlwdDogaW52YWxpZCBlbnZlbG9wZScpO1xufVxuXG4vLyBQdWJsaWMgQVBJXG5cbi8qKlxuICogRW5jcnlwdCBwbGFpbnRleHQgdXNpbmcgQXJnb24yaWQgS0RGICsgQUVTLTI1Ni1HQ00uXG4gKlxuICogUmV0dXJucyBhIHNlbGYtZGVzY3JpYmluZyBKU09OIHYyIGVudmVsb3BlIGNvbnRhaW5pbmcgYWxsIEFyZ29uMmlkIHBhcmFtZXRlcnMsXG4gKiBzYWx0LCBJViwgYW5kIGNpcGhlcnRleHQgLS0gZnVsbHkgc3RhbmRhbG9uZSBmb3IgZGVjcnlwdGlvbi5cbiAqXG4gKiBGb3IgbXVsdGktY2FsbCBvcGVyYXRpb25zIChNUEMgc2lnbmluZywgd2FsbGV0IGNyZWF0aW9uKSwgcHJlZmVyXG4gKiBjcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbiB0byBydW4gQXJnb24yaWQgb25jZSBhbmQgZGVyaXZlIHBlci1jYWxsIGtleXMgdmlhIEhLREYuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmNyeXB0VjIoXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIHBsYWludGV4dDogc3RyaW5nLFxuICBvcHRpb25zPzoge1xuICAgIHNhbHQ/OiBVaW50OEFycmF5O1xuICAgIGl2PzogVWludDhBcnJheTtcbiAgICBtZW1vcnlTaXplPzogbnVtYmVyO1xuICAgIGl0ZXJhdGlvbnM/OiBudW1iZXI7XG4gICAgcGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgYWRhdGE/OiBzdHJpbmc7XG4gIH1cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG1lbW9yeVNpemUgPSBvcHRpb25zPy5tZW1vcnlTaXplID8/IEFSR09OMl9ERUZBVUxUUy5tZW1vcnlTaXplO1xuICBjb25zdCBpdGVyYXRpb25zID0gb3B0aW9ucz8uaXRlcmF0aW9ucyA/PyBBUkdPTjJfREVGQVVMVFMuaXRlcmF0aW9ucztcbiAgY29uc3QgcGFyYWxsZWxpc20gPSBvcHRpb25zPy5wYXJhbGxlbGlzbSA/PyBBUkdPTjJfREVGQVVMVFMucGFyYWxsZWxpc207XG5cbiAgY29uc3Qgc2FsdCA9IG9wdGlvbnM/LnNhbHQgPz8gbmV3IFVpbnQ4QXJyYXkocmFuZG9tQnl0ZXMoQVJHT04yX0RFRkFVTFRTLnNhbHRMZW5ndGgpKTtcbiAgaWYgKHNhbHQubGVuZ3RoICE9PSBBUkdPTjJfREVGQVVMVFMuc2FsdExlbmd0aCkgdGhyb3cgbmV3IEVycm9yKGBzYWx0IG11c3QgYmUgJHtBUkdPTjJfREVGQVVMVFMuc2FsdExlbmd0aH0gYnl0ZXNgKTtcblxuICBjb25zdCBpdiA9IG9wdGlvbnM/Lml2ID8/IG5ldyBVaW50OEFycmF5KHJhbmRvbUJ5dGVzKEdDTV9JVl9MRU5HVEgpKTtcbiAgaWYgKGl2Lmxlbmd0aCAhPT0gR0NNX0lWX0xFTkdUSCkgdGhyb3cgbmV3IEVycm9yKGBpdiBtdXN0IGJlICR7R0NNX0lWX0xFTkdUSH0gYnl0ZXNgKTtcblxuICBjb25zdCBhZGF0YUJ5dGVzID0gb3B0aW9ucz8uYWRhdGEgPyBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUob3B0aW9ucy5hZGF0YSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGtleSA9IGF3YWl0IGFyZ29uMlRvQWVzS2V5KHBhc3N3b3JkLCBzYWx0LCB7IG1lbW9yeVNpemUsIGl0ZXJhdGlvbnMsIHBhcmFsbGVsaXNtIH0pO1xuICBjb25zdCBjdCA9IGF3YWl0IGFlc0djbUVuY3J5cHQoa2V5LCBpdiwgcGxhaW50ZXh0LCBhZGF0YUJ5dGVzKTtcblxuICBjb25zdCBlbnZlbG9wZTogVjJFbnZlbG9wZSA9IHtcbiAgICB2OiAyLFxuICAgIG06IG1lbW9yeVNpemUsXG4gICAgdDogaXRlcmF0aW9ucyxcbiAgICBwOiBwYXJhbGxlbGlzbSxcbiAgICBzYWx0OiBCdWZmZXIuZnJvbShzYWx0KS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgaXY6IEJ1ZmZlci5mcm9tKGl2KS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgY3Q6IEJ1ZmZlci5mcm9tKGN0KS50b1N0cmluZygnYmFzZTY0JyksXG4gIH07XG4gIGlmIChvcHRpb25zPy5hZGF0YSkgZW52ZWxvcGUuYWRhdGEgPSBvcHRpb25zLmFkYXRhO1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZW52ZWxvcGUpO1xufVxuXG4vKipcbiAqIERlY3J5cHQgYSB2MiBlbnZlbG9wZSAoQXJnb24yaWQgKyBBRVMtMjU2LUdDTSkuXG4gKlxuICogSGFuZGxlcyBib3RoIGVudmVsb3BlIHR5cGVzIGF1dG9tYXRpY2FsbHk6XG4gKiAgIC0gU3RhbmRhcmQgIChubyBoa2RmU2FsdCk6IEFyZ29uMmlkIC0+IEFFUy1HQ01cbiAqICAgLSBTZXNzaW9uICAgKGhrZGZTYWx0IHByZXNlbnQpOiBBcmdvbjJpZCAtPiBIS0RGIC0+IEFFUy1HQ01cbiAqXG4gKiBBbGwgcGFyYW1ldGVycyBhcmUgc3RvcmVkIGluIHRoZSBlbnZlbG9wZSAtLSBubyBzZXNzaW9uIGNvbnRleHQgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWNyeXB0VjIocGFzc3dvcmQ6IHN0cmluZywgY2lwaGVydGV4dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZW52ZWxvcGUgPSBwYXJzZVYyRW52ZWxvcGUoY2lwaGVydGV4dCk7XG4gIGNvbnN0IHNhbHQgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShlbnZlbG9wZS5zYWx0LCAnYmFzZTY0JykpO1xuICBjb25zdCBpdiA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGVudmVsb3BlLml2LCAnYmFzZTY0JykpO1xuICBjb25zdCBjdCA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGVudmVsb3BlLmN0LCAnYmFzZTY0JykpO1xuICBjb25zdCBwYXJhbXMgPSB7IG1lbW9yeVNpemU6IGVudmVsb3BlLm0sIGl0ZXJhdGlvbnM6IGVudmVsb3BlLnQsIHBhcmFsbGVsaXNtOiBlbnZlbG9wZS5wIH07XG4gIGNvbnN0IGFkYXRhQnl0ZXMgPSBlbnZlbG9wZS5hZGF0YSA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShlbnZlbG9wZS5hZGF0YSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKGVudmVsb3BlLmhrZGZTYWx0KSB7XG4gICAgY29uc3QgaGtkZktleSA9IGF3YWl0IGFyZ29uMlRvSGtkZktleShwYXNzd29yZCwgc2FsdCwgcGFyYW1zKTtcbiAgICBjb25zdCBoa2RmU2FsdCA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGVudmVsb3BlLmhrZGZTYWx0LCAnYmFzZTY0JykpO1xuICAgIGNvbnN0IGFlc0tleSA9IGF3YWl0IGhrZGZEZXJpdmVBZXNLZXkoaGtkZktleSwgaGtkZlNhbHQsICdkZWNyeXB0Jyk7XG4gICAgcmV0dXJuIGFlc0djbURlY3J5cHQoYWVzS2V5LCBpdiwgY3QsIGFkYXRhQnl0ZXMpO1xuICB9XG5cbiAgY29uc3Qga2V5ID0gYXdhaXQgYXJnb24yVG9BZXNLZXkocGFzc3dvcmQsIHNhbHQsIHBhcmFtcyk7XG4gIHJldHVybiBhZXNHY21EZWNyeXB0KGtleSwgaXYsIGN0LCBhZGF0YUJ5dGVzKTtcbn1cbiJdfQ==
|
|
@@ -17,7 +17,7 @@ export declare class EncryptionSession {
|
|
|
17
17
|
iterations: number;
|
|
18
18
|
parallelism: number;
|
|
19
19
|
});
|
|
20
|
-
encrypt(plaintext: string): Promise<string>;
|
|
20
|
+
encrypt(plaintext: string, adata?: string): Promise<string>;
|
|
21
21
|
decrypt(ciphertext: string): Promise<string>;
|
|
22
22
|
destroy(): void;
|
|
23
23
|
private getKeyOrThrow;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryptionSession.d.ts","sourceRoot":"","sources":["../../src/encryptionSession.ts"],"names":[],"mappings":"AAcA;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,sEAAsE;gBAEpE,OAAO,EAAE,SAAS,EAClB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IASnE,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"encryptionSession.d.ts","sourceRoot":"","sources":["../../src/encryptionSession.ts"],"names":[],"mappings":"AAcA;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,sEAAsE;gBAEpE,OAAO,EAAE,SAAS,EAClB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;IASnE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAY3D,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiBlD,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,aAAa;CAYtB;AAED,kGAAkG;AAClG,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GAC9F,OAAO,CAAC,iBAAiB,CAAC,CAe5B"}
|
|
@@ -20,13 +20,17 @@ class EncryptionSession {
|
|
|
20
20
|
this.iterations = params.iterations;
|
|
21
21
|
this.parallelism = params.parallelism;
|
|
22
22
|
}
|
|
23
|
-
async encrypt(plaintext) {
|
|
23
|
+
async encrypt(plaintext, adata) {
|
|
24
24
|
const key = this.getKeyOrThrow();
|
|
25
25
|
const hkdfSalt = new Uint8Array((0, crypto_1.randomBytes)(encryptV2_1.HKDF_SALT_LENGTH));
|
|
26
26
|
const iv = new Uint8Array((0, crypto_1.randomBytes)(encryptV2_1.GCM_IV_LENGTH));
|
|
27
|
+
const adataBytes = adata ? new TextEncoder().encode(adata) : undefined;
|
|
27
28
|
const aesKey = await (0, encryptV2_1.hkdfDeriveAesKey)(key, hkdfSalt, 'encrypt');
|
|
28
|
-
const ct = await (0, encryptV2_1.aesGcmEncrypt)(aesKey, iv, plaintext);
|
|
29
|
-
|
|
29
|
+
const ct = await (0, encryptV2_1.aesGcmEncrypt)(aesKey, iv, plaintext, adataBytes);
|
|
30
|
+
const envelope = this.buildEnvelope(hkdfSalt, iv, ct);
|
|
31
|
+
if (adata)
|
|
32
|
+
envelope.adata = adata;
|
|
33
|
+
return JSON.stringify(envelope);
|
|
30
34
|
}
|
|
31
35
|
async decrypt(ciphertext) {
|
|
32
36
|
const key = this.getKeyOrThrow();
|
|
@@ -40,8 +44,9 @@ class EncryptionSession {
|
|
|
40
44
|
const iv = new Uint8Array(Buffer.from(envelope.iv, 'base64'));
|
|
41
45
|
const ct = new Uint8Array(Buffer.from(envelope.ct, 'base64'));
|
|
42
46
|
const hkdfSalt = new Uint8Array(Buffer.from(envelope.hkdfSalt, 'base64'));
|
|
47
|
+
const adataBytes = envelope.adata ? new TextEncoder().encode(envelope.adata) : undefined;
|
|
43
48
|
const aesKey = await (0, encryptV2_1.hkdfDeriveAesKey)(key, hkdfSalt, 'decrypt');
|
|
44
|
-
return (0, encryptV2_1.aesGcmDecrypt)(aesKey, iv, ct);
|
|
49
|
+
return (0, encryptV2_1.aesGcmDecrypt)(aesKey, iv, ct, adataBytes);
|
|
45
50
|
}
|
|
46
51
|
destroy() {
|
|
47
52
|
this.hkdfKey = null;
|
|
@@ -87,4 +92,4 @@ async function createEncryptionSession(password, options) {
|
|
|
87
92
|
const argon2SaltB64 = Buffer.from(argon2Salt).toString('base64');
|
|
88
93
|
return new EncryptionSession(hkdfKey, argon2SaltB64, params);
|
|
89
94
|
}
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdGlvblNlc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW5jcnlwdGlvblNlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBbUdBLDBEQWtCQztBQXJIRCxtQ0FBcUM7QUFFckMsMkNBVXFCO0FBRXJCOzs7Ozs7R0FNRztBQUNILE1BQWEsaUJBQWlCO0lBTTVCLHNFQUFzRTtJQUN0RSxZQUNFLE9BQWtCLEVBQ2xCLGFBQXFCLEVBQ3JCLE1BQXVFO1FBRXZFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQWlCO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFBLG9CQUFXLEVBQUMsNEJBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUEsb0JBQVcsRUFBQyx5QkFBYSxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsNEJBQWdCLEVBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEseUJBQWEsRUFBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFB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VUFBVSxJQUFJLDJCQUFlLENBQUMsVUFBVSxDQUFDO0lBQ3JFLE1BQU0sVUFBVSxHQUFHLE9BQU8sRUFBRSxVQUFVLElBQUksMkJBQWUsQ0FBQyxVQUFVLENBQUM7SUFDckUsTUFBTSxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSwyQkFBZSxDQUFDLFdBQVcsQ0FBQztJQUN4RSxNQUFNLE1BQU0sR0FBRyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFFdkQsTUFBTSxVQUFVLEdBQUcsT0FBTyxFQUFFLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxJQUFBLG9CQUFXLEVBQUMsMkJBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzVGLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSywyQkFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLDJCQUFlLENBQUMsVUFBVSxRQUFRLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFBLDJCQUFlLEVBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVqRSxPQUFPLElBQUksaUJBQWlCLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQge1xuICBhZXNHY21EZWNyeXB0LFxuICBhZXNHY21FbmNyeXB0LFxuICBBUkdPTjJfREVGQVVMVFMsXG4gIGFyZ29uMlRvSGtkZktleSxcbiAgR0NNX0lWX0xFTkdUSCxcbiAgaGtkZkRlcml2ZUFlc0tleSxcbiAgSEtERl9TQUxUX0xFTkdUSCxcbiAgcGFyc2VWMkVudmVsb3BlLFxuICBWMkVudmVsb3BlLFxufSBmcm9tICcuL2VuY3J5cHRWMic7XG5cbi8qKlxuICogUnVucyBBcmdvbjJpZCBvbmNlIG9uIGNyZWF0aW9uLCB0aGVuIGRlcml2ZXMgcGVyLWNhbGwgQUVTLTI1Ni1HQ00ga2V5cyB2aWEgSEtERi5cbiAqIFVzZSB3aGVuIGVuY3J5cHRpbmcgb3IgZGVjcnlwdGluZyBtdWx0aXBsZSB2YWx1ZXMgd2l0aCB0aGUgc2FtZSBwYXNzd29yZC5cbiAqXG4gKiBTZXNzaW9uIGVudmVsb3BlcyBhcmUgc2VsZi1kZXNjcmliaW5nIGFuZCBjYW4gYmUgZGVjcnlwdGVkIHN0YW5kYWxvbmUgdmlhIGRlY3J5cHRWMi5cbiAqIENhbGwgZGVzdHJveSgpIHdoZW4gZG9uZSB0byBjbGVhciB0aGUgY2FjaGVkIGtleSBmcm9tIG1lbW9yeS5cbiAqL1xuZXhwb3J0IGNsYXNzIEVuY3J5cHRpb25TZXNzaW9uIHtcbiAgcHJpdmF0ZSBoa2RmS2V5OiBDcnlwdG9LZXkgfCBudWxsO1xuICBwcml2YXRlIGFyZ29uMlNhbHRCNjQ6IHN0cmluZyB8IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVtb3J5U2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGl0ZXJhdGlvbnM6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJhbGxlbGlzbTogbnVtYmVyO1xuICAvKiogVXNlIGNyZWF0ZUVuY3J5cHRpb25TZXNzaW9uKCkgaW5zdGVhZCBvZiBjYWxsaW5nIHRoaXMgZGlyZWN0bHkuICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhrZGZLZXk6IENyeXB0b0tleSxcbiAgICBhcmdvbjJTYWx0QjY0OiBzdHJpbmcsXG4gICAgcGFyYW1zOiB7IG1lbW9yeVNpemU6IG51bWJlcjsgaXRlcmF0aW9uczogbnVtYmVyOyBwYXJhbGxlbGlzbTogbnVtYmVyIH1cbiAgKSB7XG4gICAgdGhpcy5oa2RmS2V5ID0gaGtkZktleTtcbiAgICB0aGlzLmFyZ29uMlNhbHRCNjQgPSBhcmdvbjJTYWx0QjY0O1xuICAgIHRoaXMubWVtb3J5U2l6ZSA9IHBhcmFtcy5tZW1vcnlTaXplO1xuICAgIHRoaXMuaXRlcmF0aW9ucyA9IHBhcmFtcy5pdGVyYXRpb25zO1xuICAgIHRoaXMucGFyYWxsZWxpc20gPSBwYXJhbXMucGFyYWxsZWxpc207XG4gIH1cblxuICBhc3luYyBlbmNyeXB0KHBsYWludGV4dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleU9yVGhyb3coKTtcbiAgICBjb25zdCBoa2RmU2FsdCA9IG5ldyBVaW50OEFycmF5KHJhbmRvbUJ5dGVzKEhLREZfU0FMVF9MRU5HVEgpKTtcbiAgICBjb25zdCBpdiA9IG5ldyBVaW50OEFycmF5KHJhbmRvbUJ5dGVzKEdDTV9JVl9MRU5HVEgpKTtcbiAgICBjb25zdCBhZXNLZXkgPSBhd2FpdCBoa2RmRGVyaXZlQWVzS2V5KGtleSwgaGtkZlNhbHQsICdlbmNyeXB0Jyk7XG4gICAgY29uc3QgY3QgPSBhd2FpdCBhZXNHY21FbmNyeXB0KGFlc0tleSwgaXYsIHBsYWludGV4dCk7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRFbnZlbG9wZShoa2RmU2FsdCwgaXYsIGN0KSk7XG4gIH1cblxuICBhc3luYyBkZWNyeXB0KGNpcGhlcnRleHQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXlPclRocm93KCk7XG4gICAgY29uc3QgZW52ZWxvcGUgPSBwYXJzZVYyRW52ZWxvcGUoY2lwaGVydGV4dCk7XG4gICAgaWYgKCFlbnZlbG9wZS5oa2RmU2FsdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdlbnZlbG9wZSB3YXMgbm90IGVuY3J5cHRlZCB3aXRoIGEgc2Vzc2lvbjsgdXNlIGRlY3J5cHRWMiBpbnN0ZWFkJyk7XG4gICAgfVxuICAgIGlmIChlbnZlbG9wZS5zYWx0ICE9PSB0aGlzLmdldFNhbHRPclRocm93KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZW52ZWxvcGUgd2FzIG5vdCBlbmNyeXB0ZWQgd2l0aCB0aGlzIHNlc3Npb24nKTtcbiAgICB9XG4gICAgY29uc3QgaXYgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShlbnZlbG9wZS5pdiwgJ2Jhc2U2NCcpKTtcbiAgICBjb25zdCBjdCA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGVudmVsb3BlLmN0LCAnYmFzZTY0JykpO1xuICAgIGNvbnN0IGhrZGZTYWx0ID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oZW52ZWxvcGUuaGtkZlNhbHQsICdiYXNlNjQnKSk7XG4gICAgY29uc3QgYWVzS2V5ID0gYXdhaXQgaGtkZkRlcml2ZUFlc0tleShrZXksIGhrZGZTYWx0LCAnZGVjcnlwdCcpO1xuICAgIHJldHVybiBhZXNHY21EZWNyeXB0KGFlc0tleSwgaXYsIGN0KTtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5oa2RmS2V5ID0gbnVsbDtcbiAgICB0aGlzLmFyZ29uMlNhbHRCNjQgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRLZXlPclRocm93KCk6IENyeXB0b0tleSB7XG4gICAgaWYgKHRoaXMuaGtkZktleSA9PT0gbnVsbCB8fCB0aGlzLmFyZ29uMlNhbHRCNjQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRW5jcnlwdGlvblNlc3Npb24gaGFzIGJlZW4gZGVzdHJveWVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhrZGZLZXk7XG4gIH1cblxuICBwcml2YXRlIGdldFNhbHRPclRocm93KCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuYXJnb24yU2FsdEI2NCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmNyeXB0aW9uU2Vzc2lvbiBoYXMgYmVlbiBkZXN0cm95ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXJnb24yU2FsdEI2NDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRFbnZlbG9wZShoa2RmU2FsdDogVWludDhBcnJheSwgaXY6IFVpbnQ4QXJyYXksIGN0OiBVaW50OEFycmF5KTogVjJFbnZlbG9wZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHY6IDIsXG4gICAgICBtOiB0aGlzLm1lbW9yeVNpemUsXG4gICAgICB0OiB0aGlzLml0ZXJhdGlvbnMsXG4gICAgICBwOiB0aGlzLnBhcmFsbGVsaXNtLFxuICAgICAgc2FsdDogdGhpcy5nZXRTYWx0T3JUaHJvdygpLFxuICAgICAgaGtkZlNhbHQ6IEJ1ZmZlci5mcm9tKGhrZGZTYWx0KS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICBpdjogQnVmZmVyLmZyb20oaXYpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIGN0OiBCdWZmZXIuZnJvbShjdCkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqIENyZWF0ZSBhbiBFbmNyeXB0aW9uU2Vzc2lvbi4gUnVucyBBcmdvbjJpZCBvbmNlOyBhbGwgc3Vic2VxdWVudCBjYWxscyBkZXJpdmUga2V5cyB2aWEgSEtERi4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVFbmNyeXB0aW9uU2Vzc2lvbihcbiAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IHsgbWVtb3J5U2l6ZT86IG51bWJlcjsgaXRlcmF0aW9ucz86IG51bWJlcjsgcGFyYWxsZWxpc20/OiBudW1iZXI7IHNhbHQ/OiBVaW50OEFycmF5IH1cbik6IFByb21pc2U8RW5jcnlwdGlvblNlc3Npb24+IHtcbiAgY29uc3QgbWVtb3J5U2l6ZSA9IG9wdGlvbnM/Lm1lbW9yeVNpemUgPz8gQVJHT04yX0RFRkFVTFRTLm1lbW9yeVNpemU7XG4gIGNvbnN0IGl0ZXJhdGlvbnMgPSBvcHRpb25zPy5pdGVyYXRpb25zID8/IEFSR09OMl9ERUZBVUxUUy5pdGVyYXRpb25zO1xuICBjb25zdCBwYXJhbGxlbGlzbSA9IG9wdGlvbnM/LnBhcmFsbGVsaXNtID8/IEFSR09OMl9ERUZBVUxUUy5wYXJhbGxlbGlzbTtcbiAgY29uc3QgcGFyYW1zID0geyBtZW1vcnlTaXplLCBpdGVyYXRpb25zLCBwYXJhbGxlbGlzbSB9O1xuXG4gIGNvbnN0IGFyZ29uMlNhbHQgPSBvcHRpb25zPy5zYWx0ID8/IG5ldyBVaW50OEFycmF5KHJhbmRvbUJ5dGVzKEFSR09OMl9ERUZBVUxUUy5zYWx0TGVuZ3RoKSk7XG4gIGlmIChhcmdvbjJTYWx0Lmxlbmd0aCAhPT0gQVJHT04yX0RFRkFVTFRTLnNhbHRMZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHNhbHQgbXVzdCBiZSAke0FSR09OMl9ERUZBVUxUUy5zYWx0TGVuZ3RofSBieXRlc2ApO1xuICB9XG5cbiAgY29uc3QgaGtkZktleSA9IGF3YWl0IGFyZ29uMlRvSGtkZktleShwYXNzd29yZCwgYXJnb24yU2FsdCwgcGFyYW1zKTtcbiAgY29uc3QgYXJnb24yU2FsdEI2NCA9IEJ1ZmZlci5mcm9tKGFyZ29uMlNhbHQpLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICByZXR1cm4gbmV3IEVuY3J5cHRpb25TZXNzaW9uKGhrZGZLZXksIGFyZ29uMlNhbHRCNjQsIHBhcmFtcyk7XG59XG4iXX0=
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdGlvblNlc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW5jcnlwdGlvblNlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBdUdBLDBEQWtCQztBQXpIRCxtQ0FBcUM7QUFFckMsMkNBVXFCO0FBRXJCOzs7Ozs7R0FNRztBQUNILE1BQWEsaUJBQWlCO0lBTTVCLHNFQUFzRTtJQUN0RSxZQUNFLE9BQWtCLEVBQ2xCLGFBQXFCLEVBQ3JCLE1BQXVFO1FBRXZFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQWlCLEVBQUUsS0FBYztRQUM3QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBQSxvQkFBVyxFQUFDLDRCQUFnQixDQUFDLENBQUMsQ0FBQztRQUMvRCxNQUFNLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFBLG9CQUFXLEVBQUMseUJBQWEsQ0FBQyxDQUFDLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSw0QkFBZ0IsRUFBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hF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QyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWpFLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCB7XG4gIGFlc0djbURlY3J5cHQsXG4gIGFlc0djbUVuY3J5cHQsXG4gIEFSR09OMl9ERUZBVUxUUyxcbiAgYXJnb24yVG9Ia2RmS2V5LFxuICBHQ01fSVZfTEVOR1RILFxuICBoa2RmRGVyaXZlQWVzS2V5LFxuICBIS0RGX1NBTFRfTEVOR1RILFxuICBwYXJzZVYyRW52ZWxvcGUsXG4gIFYyRW52ZWxvcGUsXG59IGZyb20gJy4vZW5jcnlwdFYyJztcblxuLyoqXG4gKiBSdW5zIEFyZ29uMmlkIG9uY2Ugb24gY3JlYXRpb24sIHRoZW4gZGVyaXZlcyBwZXItY2FsbCBBRVMtMjU2LUdDTSBrZXlzIHZpYSBIS0RGLlxuICogVXNlIHdoZW4gZW5jcnlwdGluZyBvciBkZWNyeXB0aW5nIG11bHRpcGxlIHZhbHVlcyB3aXRoIHRoZSBzYW1lIHBhc3N3b3JkLlxuICpcbiAqIFNlc3Npb24gZW52ZWxvcGVzIGFyZSBzZWxmLWRlc2NyaWJpbmcgYW5kIGNhbiBiZSBkZWNyeXB0ZWQgc3RhbmRhbG9uZSB2aWEgZGVjcnlwdFYyLlxuICogQ2FsbCBkZXN0cm95KCkgd2hlbiBkb25lIHRvIGNsZWFyIHRoZSBjYWNoZWQga2V5IGZyb20gbWVtb3J5LlxuICovXG5leHBvcnQgY2xhc3MgRW5jcnlwdGlvblNlc3Npb24ge1xuICBwcml2YXRlIGhrZGZLZXk6IENyeXB0b0tleSB8IG51bGw7XG4gIHByaXZhdGUgYXJnb24yU2FsdEI2NDogc3RyaW5nIHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBtZW1vcnlTaXplOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXRlcmF0aW9uczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmFsbGVsaXNtOiBudW1iZXI7XG4gIC8qKiBVc2UgY3JlYXRlRW5jcnlwdGlvblNlc3Npb24oKSBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhpcyBkaXJlY3RseS4gKi9cbiAgY29uc3RydWN0b3IoXG4gICAgaGtkZktleTogQ3J5cHRvS2V5LFxuICAgIGFyZ29uMlNhbHRCNjQ6IHN0cmluZyxcbiAgICBwYXJhbXM6IHsgbWVtb3J5U2l6ZTogbnVtYmVyOyBpdGVyYXRpb25zOiBudW1iZXI7IHBhcmFsbGVsaXNtOiBudW1iZXIgfVxuICApIHtcbiAgICB0aGlzLmhrZGZLZXkgPSBoa2RmS2V5O1xuICAgIHRoaXMuYXJnb24yU2FsdEI2NCA9IGFyZ29uMlNhbHRCNjQ7XG4gICAgdGhpcy5tZW1vcnlTaXplID0gcGFyYW1zLm1lbW9yeVNpemU7XG4gICAgdGhpcy5pdGVyYXRpb25zID0gcGFyYW1zLml0ZXJhdGlvbnM7XG4gICAgdGhpcy5wYXJhbGxlbGlzbSA9IHBhcmFtcy5wYXJhbGxlbGlzbTtcbiAgfVxuXG4gIGFzeW5jIGVuY3J5cHQocGxhaW50ZXh0OiBzdHJpbmcsIGFkYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleU9yVGhyb3coKTtcbiAgICBjb25zdCBoa2RmU2FsdCA9IG5ldyBVaW50OEFycmF5KHJhbmRvbUJ5dGVzKEhLREZfU0FMVF9MRU5HVEgpKTtcbiAgICBjb25zdCBpdiA9IG5ldyBVaW50OEFycmF5KHJhbmRvbUJ5dGVzKEdDTV9JVl9MRU5HVEgpKTtcbiAgICBjb25zdCBhZGF0YUJ5dGVzID0gYWRhdGEgPyBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoYWRhdGEpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFlc0tleSA9IGF3YWl0IGhrZGZEZXJpdmVBZXNLZXkoa2V5LCBoa2RmU2FsdCwgJ2VuY3J5cHQnKTtcbiAgICBjb25zdCBjdCA9IGF3YWl0IGFlc0djbUVuY3J5cHQoYWVzS2V5LCBpdiwgcGxhaW50ZXh0LCBhZGF0YUJ5dGVzKTtcbiAgICBjb25zdCBlbnZlbG9wZSA9IHRoaXMuYnVpbGRFbnZlbG9wZShoa2RmU2FsdCwgaXYsIGN0KTtcbiAgICBpZiAoYWRhdGEpIGVudmVsb3BlLmFkYXRhID0gYWRhdGE7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGVudmVsb3BlKTtcbiAgfVxuXG4gIGFzeW5jIGRlY3J5cHQoY2lwaGVydGV4dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleU9yVGhyb3coKTtcbiAgICBjb25zdCBlbnZlbG9wZSA9IHBhcnNlVjJFbnZlbG9wZShjaXBoZXJ0ZXh0KTtcbiAgICBpZiAoIWVudmVsb3BlLmhrZGZTYWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VudmVsb3BlIHdhcyBub3QgZW5jcnlwdGVkIHdpdGggYSBzZXNzaW9uOyB1c2UgZGVjcnlwdFYyIGluc3RlYWQnKTtcbiAgICB9XG4gICAgaWYgKGVudmVsb3BlLnNhbHQgIT09IHRoaXMuZ2V0U2FsdE9yVGhyb3coKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdlbnZlbG9wZSB3YXMgbm90IGVuY3J5cHRlZCB3aXRoIHRoaXMgc2Vzc2lvbicpO1xuICAgIH1cbiAgICBjb25zdCBpdiA9IG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGVudmVsb3BlLml2LCAnYmFzZTY0JykpO1xuICAgIGNvbnN0IGN0ID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oZW52ZWxvcGUuY3QsICdiYXNlNjQnKSk7XG4gICAgY29uc3QgaGtkZlNhbHQgPSBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShlbnZlbG9wZS5oa2RmU2FsdCwgJ2Jhc2U2NCcpKTtcbiAgICBjb25zdCBhZGF0YUJ5dGVzID0gZW52ZWxvcGUuYWRhdGEgPyBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZW52ZWxvcGUuYWRhdGEpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFlc0tleSA9IGF3YWl0IGhrZGZEZXJpdmVBZXNLZXkoa2V5LCBoa2RmU2FsdCwgJ2RlY3J5cHQnKTtcbiAgICByZXR1cm4gYWVzR2NtRGVjcnlwdChhZXNLZXksIGl2LCBjdCwgYWRhdGFCeXRlcyk7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuaGtkZktleSA9IG51bGw7XG4gICAgdGhpcy5hcmdvbjJTYWx0QjY0ID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0S2V5T3JUaHJvdygpOiBDcnlwdG9LZXkge1xuICAgIGlmICh0aGlzLmhrZGZLZXkgPT09IG51bGwgfHwgdGhpcy5hcmdvbjJTYWx0QjY0ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY3J5cHRpb25TZXNzaW9uIGhhcyBiZWVuIGRlc3Ryb3llZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5oa2RmS2V5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTYWx0T3JUaHJvdygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmFyZ29uMlNhbHRCNjQgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRW5jcnlwdGlvblNlc3Npb24gaGFzIGJlZW4gZGVzdHJveWVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFyZ29uMlNhbHRCNjQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRW52ZWxvcGUoaGtkZlNhbHQ6IFVpbnQ4QXJyYXksIGl2OiBVaW50OEFycmF5LCBjdDogVWludDhBcnJheSk6IFYyRW52ZWxvcGUge1xuICAgIHJldHVybiB7XG4gICAgICB2OiAyLFxuICAgICAgbTogdGhpcy5tZW1vcnlTaXplLFxuICAgICAgdDogdGhpcy5pdGVyYXRpb25zLFxuICAgICAgcDogdGhpcy5wYXJhbGxlbGlzbSxcbiAgICAgIHNhbHQ6IHRoaXMuZ2V0U2FsdE9yVGhyb3coKSxcbiAgICAgIGhrZGZTYWx0OiBCdWZmZXIuZnJvbShoa2RmU2FsdCkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgaXY6IEJ1ZmZlci5mcm9tKGl2KS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICBjdDogQnVmZmVyLmZyb20oY3QpLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKiBDcmVhdGUgYW4gRW5jcnlwdGlvblNlc3Npb24uIFJ1bnMgQXJnb24yaWQgb25jZTsgYWxsIHN1YnNlcXVlbnQgY2FsbHMgZGVyaXZlIGtleXMgdmlhIEhLREYuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlRW5jcnlwdGlvblNlc3Npb24oXG4gIHBhc3N3b3JkOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiB7IG1lbW9yeVNpemU/OiBudW1iZXI7IGl0ZXJhdGlvbnM/OiBudW1iZXI7IHBhcmFsbGVsaXNtPzogbnVtYmVyOyBzYWx0PzogVWludDhBcnJheSB9XG4pOiBQcm9taXNlPEVuY3J5cHRpb25TZXNzaW9uPiB7XG4gIGNvbnN0IG1lbW9yeVNpemUgPSBvcHRpb25zPy5tZW1vcnlTaXplID8/IEFSR09OMl9ERUZBVUxUUy5tZW1vcnlTaXplO1xuICBjb25zdCBpdGVyYXRpb25zID0gb3B0aW9ucz8uaXRlcmF0aW9ucyA/PyBBUkdPTjJfREVGQVVMVFMuaXRlcmF0aW9ucztcbiAgY29uc3QgcGFyYWxsZWxpc20gPSBvcHRpb25zPy5wYXJhbGxlbGlzbSA/PyBBUkdPTjJfREVGQVVMVFMucGFyYWxsZWxpc207XG4gIGNvbnN0IHBhcmFtcyA9IHsgbWVtb3J5U2l6ZSwgaXRlcmF0aW9ucywgcGFyYWxsZWxpc20gfTtcblxuICBjb25zdCBhcmdvbjJTYWx0ID0gb3B0aW9ucz8uc2FsdCA/PyBuZXcgVWludDhBcnJheShyYW5kb21CeXRlcyhBUkdPTjJfREVGQVVMVFMuc2FsdExlbmd0aCkpO1xuICBpZiAoYXJnb24yU2FsdC5sZW5ndGggIT09IEFSR09OMl9ERUZBVUxUUy5zYWx0TGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzYWx0IG11c3QgYmUgJHtBUkdPTjJfREVGQVVMVFMuc2FsdExlbmd0aH0gYnl0ZXNgKTtcbiAgfVxuXG4gIGNvbnN0IGhrZGZLZXkgPSBhd2FpdCBhcmdvbjJUb0hrZGZLZXkocGFzc3dvcmQsIGFyZ29uMlNhbHQsIHBhcmFtcyk7XG4gIGNvbnN0IGFyZ29uMlNhbHRCNjQgPSBCdWZmZXIuZnJvbShhcmdvbjJTYWx0KS50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgcmV0dXJuIG5ldyBFbmNyeXB0aW9uU2Vzc2lvbihoa2RmS2V5LCBhcmdvbjJTYWx0QjY0LCBwYXJhbXMpO1xufVxuIl19
|