@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.451 → 8.2.1-alpha.453
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/src/tss/eddsa-mps/dkg.d.ts +6 -2
- package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -1
- package/dist/src/tss/eddsa-mps/dkg.js +68 -7
- package/dist/src/tss/eddsa-mps/dsg.d.ts +90 -0
- package/dist/src/tss/eddsa-mps/dsg.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/dsg.js +278 -0
- package/dist/src/tss/eddsa-mps/index.d.ts +1 -0
- package/dist/src/tss/eddsa-mps/index.d.ts.map +1 -1
- package/dist/src/tss/eddsa-mps/index.js +3 -2
- package/dist/src/tss/eddsa-mps/types.d.ts +17 -0
- package/dist/src/tss/eddsa-mps/types.d.ts.map +1 -1
- package/dist/src/tss/eddsa-mps/types.js +20 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -10,7 +10,7 @@ import { DeserializedMessage, DeserializedMessages, DkgState } from './types';
|
|
|
10
10
|
* ```typescript
|
|
11
11
|
* const dkg = new DKG(3, 2, 0);
|
|
12
12
|
* // X25519 keys come from GPG encryption subkeys (extracted by the orchestrator)
|
|
13
|
-
* dkg.initDkg(myX25519PrivKey, [otherParty1X25519PubKey, otherParty2X25519PubKey]);
|
|
13
|
+
* await dkg.initDkg(myX25519PrivKey, [otherParty1X25519PubKey, otherParty2X25519PubKey]);
|
|
14
14
|
* const msg1 = dkg.getFirstMessage();
|
|
15
15
|
* const msg2s = dkg.handleIncomingMessages(allThreeMsg1s);
|
|
16
16
|
* dkg.handleIncomingMessages(allThreeMsg2s); // completes DKG
|
|
@@ -33,8 +33,12 @@ export declare class DKG {
|
|
|
33
33
|
private sharePk;
|
|
34
34
|
/** 32-byte chain code from round2 */
|
|
35
35
|
private shareChaincode;
|
|
36
|
+
/** Lazily loaded WASM module */
|
|
37
|
+
private wasmMps;
|
|
36
38
|
protected dkgState: DkgState;
|
|
37
39
|
constructor(n: number, t: number, partyIdx: number);
|
|
40
|
+
private loadWasmMps;
|
|
41
|
+
private getWasmMps;
|
|
38
42
|
getState(): DkgState;
|
|
39
43
|
/**
|
|
40
44
|
* Initialises the DKG session with this party's X25519 private key and the other parties'
|
|
@@ -44,7 +48,7 @@ export declare class DKG {
|
|
|
44
48
|
* @param otherEncPublicKeys - Other parties' 32-byte X25519 public keys, sorted by ascending
|
|
45
49
|
* party index (excluding own). For a 3-party setup, this is [party_A_pub, party_B_pub].
|
|
46
50
|
*/
|
|
47
|
-
initDkg(decryptionKey: Buffer, otherEncPublicKeys: Buffer[]): void
|
|
51
|
+
initDkg(decryptionKey: Buffer, otherEncPublicKeys: Buffer[]): Promise<void>;
|
|
48
52
|
/**
|
|
49
53
|
* Runs round0 of the DKG protocol. Returns this party's broadcast message.
|
|
50
54
|
* Stores the round state bytes internally for the next round.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dkg.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps/dkg.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,QAAQ,EAAwB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"dkg.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps/dkg.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,QAAQ,EAAwB,MAAM,SAAS,CAAC;AAMpG;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,GAAG;IACd,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE3B,sDAAsD;IACtD,OAAO,CAAC,aAAa,CAAuB;IAC5C,mGAAmG;IACnG,OAAO,CAAC,YAAY,CAAyB;IAC7C,2EAA2E;IAC3E,OAAO,CAAC,aAAa,CAAuB;IAC5C,qDAAqD;IACrD,OAAO,CAAC,QAAQ,CAAuB;IACvC,6CAA6C;IAC7C,OAAO,CAAC,OAAO,CAAuB;IACtC,qCAAqC;IACrC,OAAO,CAAC,cAAc,CAAuB;IAC7C,gCAAgC;IAChC,OAAO,CAAC,OAAO,CAAwB;IAEvC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAA0B;gBAE1C,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;YAMpC,WAAW;IAoBzB,OAAO,CAAC,UAAU;IAOlB,QAAQ,IAAI,QAAQ;IAIpB;;;;;;;OAOG;IACG,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjF;;;;;OAKG;IACH,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,mBAAmB;IAmBtD;;;;;;;;;;;OAWG;IACH,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,oBAAoB;IAuDvF;;;OAGG;IACH,WAAW,IAAI,MAAM;IAOrB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAO3B;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAO3B;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAU5B;;;;OAIG;IACH,UAAU,IAAI,MAAM;IAepB;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAOtC"}
|
|
@@ -1,10 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
exports.DKG = void 0;
|
|
7
|
-
const wasm_mps_1 = require("@bitgo/wasm-mps");
|
|
8
40
|
const cbor_x_1 = require("cbor-x");
|
|
9
41
|
const crypto_1 = __importDefault(require("crypto"));
|
|
10
42
|
const types_1 = require("./types");
|
|
@@ -19,7 +51,7 @@ const types_1 = require("./types");
|
|
|
19
51
|
* ```typescript
|
|
20
52
|
* const dkg = new DKG(3, 2, 0);
|
|
21
53
|
* // X25519 keys come from GPG encryption subkeys (extracted by the orchestrator)
|
|
22
|
-
* dkg.initDkg(myX25519PrivKey, [otherParty1X25519PubKey, otherParty2X25519PubKey]);
|
|
54
|
+
* await dkg.initDkg(myX25519PrivKey, [otherParty1X25519PubKey, otherParty2X25519PubKey]);
|
|
23
55
|
* const msg1 = dkg.getFirstMessage();
|
|
24
56
|
* const msg2s = dkg.handleIncomingMessages(allThreeMsg1s);
|
|
25
57
|
* dkg.handleIncomingMessages(allThreeMsg2s); // completes DKG
|
|
@@ -40,11 +72,37 @@ class DKG {
|
|
|
40
72
|
this.sharePk = null;
|
|
41
73
|
/** 32-byte chain code from round2 */
|
|
42
74
|
this.shareChaincode = null;
|
|
75
|
+
/** Lazily loaded WASM module */
|
|
76
|
+
this.wasmMps = null;
|
|
43
77
|
this.dkgState = types_1.DkgState.Uninitialized;
|
|
44
78
|
this.n = n;
|
|
45
79
|
this.t = t;
|
|
46
80
|
this.partyIdx = partyIdx;
|
|
47
81
|
}
|
|
82
|
+
async loadWasmMps() {
|
|
83
|
+
if (!this.wasmMps) {
|
|
84
|
+
if (typeof window !== 'undefined' &&
|
|
85
|
+
/* checks for electron processes */
|
|
86
|
+
!window.process &&
|
|
87
|
+
!window.process?.['type']) {
|
|
88
|
+
// Browser: web build has explicit init() — guaranteed ready after await
|
|
89
|
+
// eslint-disable-next-line import/no-internal-modules -- @bitgo/wasm-mps exposes environment-specific subpath exports.
|
|
90
|
+
const webWasm = await Promise.resolve().then(() => __importStar(require('@bitgo/wasm-mps/web')));
|
|
91
|
+
await webWasm.default();
|
|
92
|
+
this.wasmMps = webWasm;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
// Node.js: dynamic import() rewritten to require() by tsc → CJS build → readFileSync
|
|
96
|
+
this.wasmMps = await Promise.resolve().then(() => __importStar(require('@bitgo/wasm-mps')));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
getWasmMps() {
|
|
101
|
+
if (!this.wasmMps) {
|
|
102
|
+
throw Error('WASM module not loaded');
|
|
103
|
+
}
|
|
104
|
+
return this.wasmMps;
|
|
105
|
+
}
|
|
48
106
|
getState() {
|
|
49
107
|
return this.dkgState;
|
|
50
108
|
}
|
|
@@ -56,7 +114,8 @@ class DKG {
|
|
|
56
114
|
* @param otherEncPublicKeys - Other parties' 32-byte X25519 public keys, sorted by ascending
|
|
57
115
|
* party index (excluding own). For a 3-party setup, this is [party_A_pub, party_B_pub].
|
|
58
116
|
*/
|
|
59
|
-
initDkg(decryptionKey, otherEncPublicKeys) {
|
|
117
|
+
async initDkg(decryptionKey, otherEncPublicKeys) {
|
|
118
|
+
await this.loadWasmMps();
|
|
60
119
|
if (!decryptionKey || decryptionKey.length !== 32) {
|
|
61
120
|
throw Error('Missing or invalid decryption key: must be 32 bytes');
|
|
62
121
|
}
|
|
@@ -81,9 +140,10 @@ class DKG {
|
|
|
81
140
|
throw Error('DKG session not initialized');
|
|
82
141
|
}
|
|
83
142
|
const seed = dkgSeed ?? crypto_1.default.randomBytes(32);
|
|
143
|
+
const wasm = this.getWasmMps();
|
|
84
144
|
let result;
|
|
85
145
|
try {
|
|
86
|
-
result =
|
|
146
|
+
result = wasm.ed25519_dkg_round0_process(this.partyIdx, this.decryptionKey, this.otherPubKeys, seed);
|
|
87
147
|
}
|
|
88
148
|
catch (err) {
|
|
89
149
|
throw new Error(`Error while creating the first message from party ${this.partyIdx}: ${err}`);
|
|
@@ -122,10 +182,11 @@ class DKG {
|
|
|
122
182
|
.filter((m) => m.from !== this.partyIdx)
|
|
123
183
|
.sort((a, b) => a.from - b.from)
|
|
124
184
|
.map((m) => m.payload);
|
|
185
|
+
const wasm = this.getWasmMps();
|
|
125
186
|
if (this.dkgState === types_1.DkgState.WaitMsg1) {
|
|
126
187
|
let result;
|
|
127
188
|
try {
|
|
128
|
-
result =
|
|
189
|
+
result = wasm.ed25519_dkg_round1_process(otherMsgs, this.dkgStateBytes);
|
|
129
190
|
}
|
|
130
191
|
catch (err) {
|
|
131
192
|
throw new Error(`Error while creating messages from party ${this.partyIdx}, round ${this.dkgState}: ${err}`);
|
|
@@ -138,7 +199,7 @@ class DKG {
|
|
|
138
199
|
if (this.dkgState === types_1.DkgState.WaitMsg2) {
|
|
139
200
|
let share;
|
|
140
201
|
try {
|
|
141
|
-
share =
|
|
202
|
+
share = wasm.ed25519_dkg_round2_process(otherMsgs, this.dkgStateBytes);
|
|
142
203
|
}
|
|
143
204
|
catch (err) {
|
|
144
205
|
throw new Error(`Error while creating messages from party ${this.partyIdx}, round ${this.dkgState}: ${err}`);
|
|
@@ -225,4 +286,4 @@ class DKG {
|
|
|
225
286
|
}
|
|
226
287
|
}
|
|
227
288
|
exports.DKG = DKG;
|
|
228
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGtnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lZGRzYS1tcHMvZGtnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhDQUFxSDtBQUNySCxtQ0FBZ0M7QUFDaEMsb0RBQTRCO0FBQzVCLG1DQUFvRztBQUVwRzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFhLEdBQUc7SUFvQmQsWUFBWSxDQUFTLEVBQUUsQ0FBUyxFQUFFLFFBQWdCO1FBZmxELHNEQUFzRDtRQUM5QyxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDNUMsbUdBQW1HO1FBQzNGLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQUM3QywyRUFBMkU7UUFDbkUsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO1FBQzVDLHFEQUFxRDtRQUM3QyxhQUFRLEdBQWtCLElBQUksQ0FBQztRQUN2Qyw2Q0FBNkM7UUFDckMsWUFBTyxHQUFrQixJQUFJLENBQUM7UUFDdEMscUNBQXFDO1FBQzdCLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUVuQyxhQUFRLEdBQWEsZ0JBQVEsQ0FBQyxhQUFhLENBQUM7UUFHcEQsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsT0FBTyxDQUFDLGFBQXFCLEVBQUUsa0JBQTRCO1FBQ3pELElBQUksQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNsRCxNQUFNLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLElBQUksa0JBQWtCLENB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ZTtRQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDM0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDM0YsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBRSxJQUFJLENBQUMsWUFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0SCxDQUFDO0NBQ0Y7QUEzTkQsa0JBMk5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZWQyNTUxOV9ka2dfcm91bmQwX3Byb2Nlc3MsIGVkMjU1MTlfZGtnX3JvdW5kMV9wcm9jZXNzLCBlZDI1NTE5X2RrZ19yb3VuZDJfcHJvY2VzcyB9IGZyb20gJ0BiaXRnby93YXNtLW1wcyc7XG5pbXBvcnQgeyBlbmNvZGUgfSBmcm9tICdjYm9yLXgnO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkTWVzc2FnZSwgRGVzZXJpYWxpemVkTWVzc2FnZXMsIERrZ1N0YXRlLCBFZGRzYVJlZHVjZWRLZXlTaGFyZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEVkRFNBIERpc3RyaWJ1dGVkIEtleSBHZW5lcmF0aW9uIChES0cpIGltcGxlbWVudGF0aW9uIHVzaW5nIEBiaXRnby93YXNtLW1wcy5cbiAqXG4gKiBTdGF0ZSBpcyBleHBsaWNpdDogZWFjaCByb3VuZCBmdW5jdGlvbiByZXR1cm5zIGB7IG1zZywgc3RhdGUgfWAgYnl0ZXMuXG4gKiBUaGUgc3RhdGUgYnl0ZXMgYXJlIHN0b3JlZCBiZXR3ZWVuIHJvdW5kcyBhbmQgcGFzc2VkIHRvIHRoZSBuZXh0IHJvdW5kIGZ1bmN0aW9uLFxuICogbWlycm9yaW5nIHRoZSBzZXJ2ZXItc2lkZSBwZXJzaXN0ZW5jZSBwYXR0ZXJuIChzdGF0ZSB3b3VsZCBiZSBzZXJpYWxpc2VkIHRvIERCKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZGtnID0gbmV3IERLRygzLCAyLCAwKTtcbiAqIC8vIFgyNTUxOSBrZXlzIGNvbWUgZnJvbSBHUEcgZW5jcnlwdGlvbiBzdWJrZXlzIChleHRyYWN0ZWQgYnkgdGhlIG9yY2hlc3RyYXRvcilcbiAqIGRrZy5pbml0RGtnKG15WDI1NTE5UHJpdktleSwgW290aGVyUGFydHkxWDI1NTE5UHViS2V5LCBvdGhlclBhcnR5MlgyNTUxOVB1YktleV0pO1xuICogY29uc3QgbXNnMSA9IGRrZy5nZXRGaXJzdE1lc3NhZ2UoKTtcbiAqIGNvbnN0IG1zZzJzID0gZGtnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoYWxsVGhyZWVNc2cxcyk7XG4gKiBka2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhhbGxUaHJlZU1zZzJzKTsgIC8vIGNvbXBsZXRlcyBES0dcbiAqIGNvbnN0IGtleVNoYXJlID0gZGtnLmdldEtleVNoYXJlKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIERLRyB7XG4gIHByb3RlY3RlZCBuOiBudW1iZXI7XG4gIHByb3RlY3RlZCB0OiBudW1iZXI7XG4gIHByb3RlY3RlZCBwYXJ0eUlkeDogbnVtYmVyO1xuXG4gIC8qKiBQcml2YXRlIFgyNTUxOSBrZXkgKGZyb20gR1BHIGVuY3J5cHRpb24gc3Via2V5KSAqL1xuICBwcml2YXRlIGRlY3J5cHRpb25LZXk6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuICAvKiogT3RoZXIgcGFydGllcycgWDI1NTE5IHB1YmxpYyBrZXlzIChmcm9tIHRoZWlyIEdQRyBlbmNyeXB0aW9uIHN1YmtleXMpLCBzb3J0ZWQgYnkgcGFydHkgaW5kZXggKi9cbiAgcHJpdmF0ZSBvdGhlclB1YktleXM6IEJ1ZmZlcltdIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBTZXJpYWxpc2VkIHJvdW5kIHN0YXRlIGJ5dGVzIHJldHVybmVkIGJ5IHRoZSBwcmV2aW91cyByb3VuZCBmdW5jdGlvbiAqL1xuICBwcml2YXRlIGRrZ1N0YXRlQnl0ZXM6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuICAvKiogT3BhcXVlIGJpbmNvZGUtc2VyaWFsaXNlZCBrZXlzaGFyZSBmcm9tIHJvdW5kMiAqL1xuICBwcml2YXRlIGtleVNoYXJlOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIDMyLWJ5dGUgRWQyNTUxOSBwdWJsaWMga2V5IGZyb20gcm91bmQyICovXG4gIHByaXZhdGUgc2hhcmVQazogQnVmZmVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiAzMi1ieXRlIGNoYWluIGNvZGUgZnJvbSByb3VuZDIgKi9cbiAgcHJpdmF0ZSBzaGFyZUNoYWluY29kZTogQnVmZmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJvdGVjdGVkIGRrZ1N0YXRlOiBEa2dTdGF0ZSA9IERrZ1N0YXRlLlVuaW5pdGlhbGl6ZWQ7XG5cbiAgY29uc3RydWN0b3IobjogbnVtYmVyLCB0OiBudW1iZXIsIHBhcnR5SWR4OiBudW1iZXIpIHtcbiAgICB0aGlzLm4gPSBuO1xuICAgIHRoaXMudCA9IHQ7XG4gICAgdGhpcy5wYXJ0eUlkeCA9IHBhcnR5SWR4O1xuICB9XG5cbiAgZ2V0U3RhdGUoKTogRGtnU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmRrZ1N0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2VzIHRoZSBES0cgc2Vzc2lvbiB3aXRoIHRoaXMgcGFydHkncyBYMjU1MTkgcHJpdmF0ZSBrZXkgYW5kIHRoZSBvdGhlciBwYXJ0aWVzJ1xuICAgKiBYMjU1MTkgcHVibGljIGtleXMuIEtleXMgYXJlIGV4dHJhY3RlZCBmcm9tIEdQRyBlbmNyeXB0aW9uIHN1YmtleXMgYnkgdGhlIG9yY2hlc3RyYXRvci5cbiAgICpcbiAgICogQHBhcmFtIGRlY3J5cHRpb25LZXkgLSBUaGlzIHBhcnR5J3MgMzItYnl0ZSBYMjU1MTkgcHJpdmF0ZSBrZXkgKEdQRyBlbmMgc3Via2V5IHByaXZhdGUgcGFydCkuXG4gICAqIEBwYXJhbSBvdGhlckVuY1B1YmxpY0tleXMgLSBPdGhlciBwYXJ0aWVzJyAzMi1ieXRlIFgyNTUxOSBwdWJsaWMga2V5cywgc29ydGVkIGJ5IGFzY2VuZGluZ1xuICAgKiAgIHBhcnR5IGluZGV4IChleGNsdWRpbmcgb3duKS4gRm9yIGEgMy1wYXJ0eSBzZXR1cCwgdGhpcyBpcyBbcGFydHlfQV9wdWIsIHBhcnR5X0JfcHViXS5cbiAgICovXG4gIGluaXREa2coZGVjcnlwdGlvbktleTogQnVmZmVyLCBvdGhlckVuY1B1YmxpY0tleXM6IEJ1ZmZlcltdKTogdm9pZCB7XG4gICAgaWYgKCFkZWNyeXB0aW9uS2V5IHx8IGRlY3J5cHRpb25LZXkubGVuZ3RoICE9PSAzMikge1xuICAgICAgdGhyb3cgRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCBkZWNyeXB0aW9uIGtleTogbXVzdCBiZSAzMiBieXRlcycpO1xuICAgIH1cbiAgICBpZiAoIW90aGVyRW5jUHVibGljS2V5cyB8fCBvdGhlckVuY1B1YmxpY0tleXMubGVuZ3RoICE9PSB0aGlzLm4gLSAxKSB7XG4gICAgICB0aHJvdyBFcnJvcihgRXhwZWN0ZWQgJHt0aGlzLm4gLSAxfSBvdGhlciBwYXJ0aWVzJyBwdWJsaWMga2V5c2ApO1xuICAgIH1cbiAgICBpZiAodGhpcy50ID4gdGhpcy5uIHx8IHRoaXMucGFydHlJZHggPj0gdGhpcy5uKSB7XG4gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBwYXJhbWV0ZXJzIGZvciBES0cnKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlY3J5cHRpb25LZXkgPSBkZWNyeXB0aW9uS2V5O1xuICAgIHRoaXMub3RoZXJQdWJLZXlzID0gb3RoZXJFbmNQdWJsaWNLZXlzO1xuICAgIHRoaXMuZGtnU3RhdGUgPSBEa2dTdGF0ZS5Jbml0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcm91bmQwIG9mIHRoZSBES0cgcHJvdG9jb2wuIFJldHVybnMgdGhpcyBwYXJ0eSdzIGJyb2FkY2FzdCBtZXNzYWdlLlxuICAgKiBTdG9yZXMgdGhlIHJvdW5kIHN0YXRlIGJ5dGVzIGludGVybmFsbHkgZm9yIHRoZSBuZXh0IHJvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0gZGtnU2VlZCAtIE9wdGlvbmFsIDMyLWJ5dGUgc2VlZCBmb3IgZGV0ZXJtaW5pc3RpYyBES0cgb3V0cHV0ICh0ZXN0aW5nIG9ubHkpLlxuICAgKi9cbiAgZ2V0Rmlyc3RNZXNzYWdlKGRrZ1NlZWQ/OiBCdWZmZXIpOiBEZXNlcmlhbGl6ZWRNZXNzYWdlIHtcbiAgICBpZiAodGhpcy5ka2dTdGF0ZSAhPT0gRGtnU3RhdGUuSW5pdCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RLRyBzZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlZWQgPSBka2dTZWVkID8/IGNyeXB0by5yYW5kb21CeXRlcygzMik7XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gZWQyNTUxOV9ka2dfcm91bmQwX3Byb2Nlc3ModGhpcy5wYXJ0eUlkeCwgdGhpcy5kZWNyeXB0aW9uS2V5ISwgdGhpcy5vdGhlclB1YktleXMhLCBzZWVkKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGZpcnN0IG1lc3NhZ2UgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9OiAke2Vycn1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmRrZ1N0YXRlQnl0ZXMgPSBCdWZmZXIuZnJvbShyZXN1bHQuc3RhdGUpO1xuICAgIHRoaXMuZGtnU3RhdGUgPSBEa2dTdGF0ZS5XYWl0TXNnMTtcbiAgICByZXR1cm4geyBwYXlsb2FkOiBuZXcgVWludDhBcnJheShyZXN1bHQubXNnKSwgZnJvbTogdGhpcy5wYXJ0eUlkeCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgaW5jb21pbmcgbWVzc2FnZXMgZnJvbSBhbGwgcGFydGllcyBhbmQgYWR2YW5jZXMgdGhlIHByb3RvY29sLlxuICAgKlxuICAgKiAtIEluIFdhaXRNc2cxOiBydW5zIHJvdW5kMSwgcmV0dXJucyB0aGlzIHBhcnR5J3Mgcm91bmQxIGJyb2FkY2FzdCBtZXNzYWdlLlxuICAgKiAtIEluIFdhaXRNc2cyOiBydW5zIHJvdW5kMiwgY29tcGxldGVzIERLRywgcmV0dXJucyBbXS5cbiAgICpcbiAgICogVGhlIGNhbGxlciBwYXNzZXMgYWxsIG4gbWVzc2FnZXMgKGluY2x1ZGluZyBvd24pOyBvd24gbWVzc2FnZSBpcyBmaWx0ZXJlZFxuICAgKiBvdXQgaW50ZXJuYWxseS4gT3RoZXIgcGFydGllcycgbWVzc2FnZXMgYXJlIHNvcnRlZCBieSBhc2NlbmRpbmcgcGFydHkgaW5kZXgsXG4gICAqIG1hdGNoaW5nIHRoZSBvcmRlcmluZyBleHBlY3RlZCBieSBAYml0Z28vd2FzbS1tcHMuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlc0Zvckl0aFJvdW5kIC0gQWxsIG4gbWVzc2FnZXMgZm9yIHRoaXMgcm91bmQgKGluY2x1ZGluZyBvd24pLlxuICAgKi9cbiAgaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlc0Zvckl0aFJvdW5kOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyk6IERlc2VyaWFsaXplZE1lc3NhZ2VzIHtcbiAgICBpZiAodGhpcy5ka2dTdGF0ZSA9PT0gRGtnU3RhdGUuQ29tcGxldGUpIHtcbiAgICAgIHRocm93IEVycm9yKCdES0cgc2Vzc2lvbiBhbHJlYWR5IGNvbXBsZXRlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ka2dTdGF0ZSA9PT0gRGtnU3RhdGUuVW5pbml0aWFsaXplZCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RLRyBzZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ka2dTdGF0ZSA9PT0gRGtnU3RhdGUuSW5pdCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdES0cgc2Vzc2lvbiBtdXN0IGNhbGwgZ2V0Rmlyc3RNZXNzYWdlKCkgYmVmb3JlIGhhbmRsaW5nIGluY29taW5nIG1lc3NhZ2VzLiBDYWxsIGdldEZpcnN0TWVzc2FnZSgpIGZpcnN0LidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlc0Zvckl0aFJvdW5kLmxlbmd0aCAhPT0gdGhpcy5uKSB7XG4gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBudW1iZXIgb2YgbWVzc2FnZXMgZm9yIHRoZSByb3VuZC4gTnVtYmVyIG9mIG1lc3NhZ2VzIHNob3VsZCBiZSBlcXVhbCB0byBOJyk7XG4gICAgfVxuXG4gICAgLy8gRXh0cmFjdCBvdGhlciBwYXJ0aWVzJyBtZXNzYWdlcywgc29ydGVkIGJ5IHBhcnR5IGluZGV4IChhc2NlbmRpbmcpXG4gICAgY29uc3Qgb3RoZXJNc2dzID0gbWVzc2FnZXNGb3JJdGhSb3VuZFxuICAgICAgLmZpbHRlcigobSkgPT4gbS5mcm9tICE9PSB0aGlzLnBhcnR5SWR4KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuZnJvbSAtIGIuZnJvbSlcbiAgICAgIC5tYXAoKG0pID0+IG0ucGF5bG9hZCk7XG5cbiAgICBpZiAodGhpcy5ka2dTdGF0ZSA9PT0gRGtnU3RhdGUuV2FpdE1zZzEpIHtcbiAgICAgIGxldCByZXN1bHQ7XG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBlZDI1NTE5X2RrZ19yb3VuZDFfcHJvY2VzcyhvdGhlck1zZ3MsIHRoaXMuZGtnU3RhdGVCeXRlcyEpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbWVzc2FnZXMgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9LCByb3VuZCAke3RoaXMuZGtnU3RhdGV9OiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0b3JlIG5ldyBzdGF0ZTsgdGhpcyBpcyB3aGF0IHdvdWxkIGJlIHBlcnNpc3RlZCB0byBEQiBiZXR3ZWVuIEFQSSByb3VuZHNcbiAgICAgIHRoaXMuZGtnU3RhdGVCeXRlcyA9IEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGF0ZSk7XG4gICAgICB0aGlzLmRrZ1N0YXRlID0gRGtnU3RhdGUuV2FpdE1zZzI7XG4gICAgICByZXR1cm4gW3sgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkocmVzdWx0Lm1zZyksIGZyb206IHRoaXMucGFydHlJZHggfV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGtnU3RhdGUgPT09IERrZ1N0YXRlLldhaXRNc2cyKSB7XG4gICAgICBsZXQgc2hhcmU7XG4gICAgICB0cnkge1xuICAgICAgICBzaGFyZSA9IGVkMjU1MTlfZGtnX3JvdW5kMl9wcm9jZXNzKG90aGVyTXNncywgdGhpcy5ka2dTdGF0ZUJ5dGVzISk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBtZXNzYWdlcyBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH0sIHJvdW5kICR7dGhpcy5ka2dTdGF0ZX06ICR7ZXJyfWApO1xuICAgICAgfVxuICAgICAgdGhpcy5rZXlTaGFyZSA9IEJ1ZmZlci5mcm9tKHNoYXJlLnNoYXJlKTtcbiAgICAgIHRoaXMuc2hhcmVQayA9IEJ1ZmZlci5mcm9tKHNoYXJlLnBrKTtcbiAgICAgIHRoaXMuc2hhcmVDaGFpbmNvZGUgPSBCdWZmZXIuZnJvbShzaGFyZS5jaGFpbmNvZGUpO1xuICAgICAgdGhpcy5ka2dTdGF0ZUJ5dGVzID0gbnVsbDtcbiAgICAgIHRoaXMuZGtnU3RhdGUgPSBEa2dTdGF0ZS5Db21wbGV0ZTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB0aHJvdyBFcnJvcignVW5leHBlY3RlZCBES0cgc3RhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvcGFxdWUgYmluY29kZS1zZXJpYWxpc2VkIGtleXNoYXJlIHByb2R1Y2VkIGJ5IHJvdW5kMi5cbiAgICogVGhpcyBpcyB1c2VkIGFzIGlucHV0IHRvIHRoZSBzaWduaW5nIHByb3RvY29sLlxuICAgKi9cbiAgZ2V0S2V5U2hhcmUoKTogQnVmZmVyIHtcbiAgICBpZiAoIXRoaXMua2V5U2hhcmUpIHtcbiAgICAgIHRocm93IEVycm9yKCdES0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMua2V5U2hhcmU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgMzItYnl0ZSBFZDI1NTE5IHB1YmxpYyBrZXkgYWdyZWVkIGJ5IGFsbCBwYXJ0aWVzIGR1cmluZyBES0cuXG4gICAqL1xuICBnZXRTaGFyZVB1YmxpY0tleSgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5zaGFyZVBrKSB7XG4gICAgICB0aHJvdyBFcnJvcignREtHIHNlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNoYXJlUGs7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgMTI4LWNoYXIgaGV4IGNvbW1vbiBrZXljaGFpbjogNjQtY2hhciBwdWJsaWMga2V5ICsgNjQtY2hhciBjaGFpbiBjb2RlLlxuICAgKiBUaGlzIG1hdGNoZXMgdGhlIGZvcm1hdCBleHBlY3RlZCBieSBhZGRyZXNzIGRlcml2YXRpb24gKEVkZHNhLmRlcml2ZVVuaGFyZGVuZWQpLlxuICAgKi9cbiAgZ2V0Q29tbW9uS2V5Y2hhaW4oKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuc2hhcmVQayB8fCAhdGhpcy5zaGFyZUNoYWluY29kZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RLRyBzZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaGFyZVBrLnRvU3RyaW5nKCdoZXgnKSArIHRoaXMuc2hhcmVDaGFpbmNvZGUudG9TdHJpbmcoJ2hleCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBDQk9SLWVuY29kZWQgcmVkdWNlZCByZXByZXNlbnRhdGlvbiBjb250YWluaW5nIHRoZSBwdWJsaWMga2V5LlxuICAgKi9cbiAgZ2V0UmVkdWNlZEtleVNoYXJlKCk6IEJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLnNoYXJlUGspIHtcbiAgICAgIHRocm93IEVycm9yKCdES0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgY29uc3QgcmVkdWNlZEtleVNoYXJlOiBFZGRzYVJlZHVjZWRLZXlTaGFyZSA9IHtcbiAgICAgIHB1YjogQXJyYXkuZnJvbSh0aGlzLnNoYXJlUGspLFxuICAgIH07XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGVuY29kZShyZWR1Y2VkS2V5U2hhcmUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnRzIHRoZSBjdXJyZW50IHNlc3Npb24gc3RhdGUgYXMgYSBKU09OIHN0cmluZyBmb3IgcGVyc2lzdGVuY2UuXG4gICAqIEluY2x1ZGVzOiByb3VuZCBzdGF0ZSBieXRlcywgY3VycmVudCBES0cgcm91bmQsIGRlY3J5cHRpb24ga2V5LCBvdGhlciBwYXJ0aWVzJyBwdWIga2V5cy5cbiAgICogVGhpcyBtaXJyb3JzIHdoYXQgYSBzZXJ2ZXIgd291bGQgc3RvcmUgaW4gYSBkYXRhYmFzZSBiZXR3ZWVuIEFQSSByb3VuZHMuXG4gICAqL1xuICBnZXRTZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZGtnU3RhdGUgPT09IERrZ1N0YXRlLkNvbXBsZXRlKSB7XG4gICAgICB0aHJvdyBFcnJvcignREtHIHNlc3Npb24gaXMgY29tcGxldGUuIEV4cG9ydGluZyB0aGUgc2Vzc2lvbiBpcyBub3QgYWxsb3dlZC4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGtnU3RhdGUgPT09IERrZ1N0YXRlLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdES0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGRrZ1N0YXRlQnl0ZXM6IHRoaXMuZGtnU3RhdGVCeXRlcz8udG9TdHJpbmcoJ2Jhc2U2NCcpID8/IG51bGwsXG4gICAgICBka2dSb3VuZDogdGhpcy5ka2dTdGF0ZSxcbiAgICAgIGRlY3J5cHRpb25LZXk6IHRoaXMuZGVjcnlwdGlvbktleT8udG9TdHJpbmcoJ2Jhc2U2NCcpID8/IG51bGwsXG4gICAgICBvdGhlclB1YktleXM6IHRoaXMub3RoZXJQdWJLZXlzPy5tYXAoKGspID0+IGsudG9TdHJpbmcoJ2Jhc2U2NCcpKSA/PyBudWxsLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmVzIGEgcHJldmlvdXNseSBleHBvcnRlZCBzZXNzaW9uLiBBbGxvd3MgdGhlIHByb3RvY29sIHRvIGNvbnRpbnVlXG4gICAqIGZyb20gd2hlcmUgaXQgbGVmdCBvZmYsIGFzIGlmIHRoZSByb3VuZCBzdGF0ZSB3YXMgbG9hZGVkIGZyb20gYSBkYXRhYmFzZS5cbiAgICovXG4gIHJlc3RvcmVTZXNzaW9uKHNlc3Npb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHNlc3Npb24pO1xuICAgIHRoaXMuZGtnU3RhdGVCeXRlcyA9IGRhdGEuZGtnU3RhdGVCeXRlcyA/IEJ1ZmZlci5mcm9tKGRhdGEuZGtnU3RhdGVCeXRlcywgJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICB0aGlzLmRrZ1N0YXRlID0gZGF0YS5ka2dSb3VuZDtcbiAgICB0aGlzLmRlY3J5cHRpb25LZXkgPSBkYXRhLmRlY3J5cHRpb25LZXkgPyBCdWZmZXIuZnJvbShkYXRhLmRlY3J5cHRpb25LZXksICdiYXNlNjQnKSA6IG51bGw7XG4gICAgdGhpcy5vdGhlclB1YktleXMgPSBkYXRhLm90aGVyUHViS2V5cyA/IChkYXRhLm90aGVyUHViS2V5cyBhcyBzdHJpbmdbXSkubWFwKChrKSA9PiBCdWZmZXIuZnJvbShrLCAnYmFzZTY0JykpIDogbnVsbDtcbiAgfVxufVxuIl19
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGtnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lZGRzYS1tcHMvZGtnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLG1DQUFnQztBQUNoQyxvREFBNEI7QUFDNUIsbUNBQW9HO0FBTXBHOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQWEsR0FBRztJQXNCZCxZQUFZLENBQVMsRUFBRSxDQUFTLEVBQUUsUUFBZ0I7UUFqQmxELHNEQUFzRDtRQUM5QyxrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFDNUMsbUdBQW1HO1FBQzNGLGlCQUFZLEdBQW9CLElBQUksQ0FBQztRQUM3QywyRUFBMkU7UUFDbkUsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO1FBQzVDLHFEQUFxRDtRQUM3QyxhQUFRLEdBQWtCLElBQUksQ0FBQztRQUN2Qyw2Q0FBNkM7UUFDckMsWUFBTyxHQUFrQixJQUFJLENBQUM7UUFDdEMscUNBQXFDO1FBQzdCLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUM3QyxnQ0FBZ0M7UUFDeEIsWUFBTyxHQUFtQixJQUFJLENBQUM7UUFFN0IsYUFBUSxHQUFhLGdCQUFRLENBQUMsYUFBYSxDQUFDO1FBR3BELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVc7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixJQUNFLE9BQU8sTUFBTSxLQUFLLFdBQVc7Z0JBQzdCLG1DQUFtQztnQkFDbkMsQ0FBQyxNQUFNLENBQUMsT0FBTztnQkFDZixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFDekIs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LENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMzRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMzRixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxZQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RILENBQUM7Q0FDRjtBQTVQRCxrQkE0UEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1zZ1N0YXRlLCBTaGFyZSB9IGZyb20gJ0BiaXRnby93YXNtLW1wcyc7XG5pbXBvcnQgeyBlbmNvZGUgfSBmcm9tICdjYm9yLXgnO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkTWVzc2FnZSwgRGVzZXJpYWxpemVkTWVzc2FnZXMsIERrZ1N0YXRlLCBFZGRzYVJlZHVjZWRLZXlTaGFyZSB9IGZyb20gJy4vdHlwZXMnO1xuXG50eXBlIE5vZGVXYXNtZXIgPSB0eXBlb2YgaW1wb3J0KCdAYml0Z28vd2FzbS1tcHMnKTtcbnR5cGUgV2ViV2FzbWVyID0gdHlwZW9mIGltcG9ydCgnQGJpdGdvL3dhc20tbXBzL3dlYicpO1xudHlwZSBXYXNtTXBzID0gTm9kZVdhc21lciB8IFdlYldhc21lcjtcblxuLyoqXG4gKiBFZERTQSBEaXN0cmlidXRlZCBLZXkgR2VuZXJhdGlvbiAoREtHKSBpbXBsZW1lbnRhdGlvbiB1c2luZyBAYml0Z28vd2FzbS1tcHMuXG4gKlxuICogU3RhdGUgaXMgZXhwbGljaXQ6IGVhY2ggcm91bmQgZnVuY3Rpb24gcmV0dXJucyBgeyBtc2csIHN0YXRlIH1gIGJ5dGVzLlxuICogVGhlIHN0YXRlIGJ5dGVzIGFyZSBzdG9yZWQgYmV0d2VlbiByb3VuZHMgYW5kIHBhc3NlZCB0byB0aGUgbmV4dCByb3VuZCBmdW5jdGlvbixcbiAqIG1pcnJvcmluZyB0aGUgc2VydmVyLXNpZGUgcGVyc2lzdGVuY2UgcGF0dGVybiAoc3RhdGUgd291bGQgYmUgc2VyaWFsaXNlZCB0byBEQikuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGRrZyA9IG5ldyBES0coMywgMiwgMCk7XG4gKiAvLyBYMjU1MTkga2V5cyBjb21lIGZyb20gR1BHIGVuY3J5cHRpb24gc3Via2V5cyAoZXh0cmFjdGVkIGJ5IHRoZSBvcmNoZXN0cmF0b3IpXG4gKiBhd2FpdCBka2cuaW5pdERrZyhteVgyNTUxOVByaXZLZXksIFtvdGhlclBhcnR5MVgyNTUxOVB1YktleSwgb3RoZXJQYXJ0eTJYMjU1MTlQdWJLZXldKTtcbiAqIGNvbnN0IG1zZzEgPSBka2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG4gKiBjb25zdCBtc2cycyA9IGRrZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKGFsbFRocmVlTXNnMXMpO1xuICogZGtnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoYWxsVGhyZWVNc2cycyk7ICAvLyBjb21wbGV0ZXMgREtHXG4gKiBjb25zdCBrZXlTaGFyZSA9IGRrZy5nZXRLZXlTaGFyZSgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBES0cge1xuICBwcm90ZWN0ZWQgbjogbnVtYmVyO1xuICBwcm90ZWN0ZWQgdDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgcGFydHlJZHg6IG51bWJlcjtcblxuICAvKiogUHJpdmF0ZSBYMjU1MTkga2V5IChmcm9tIEdQRyBlbmNyeXB0aW9uIHN1YmtleSkgKi9cbiAgcHJpdmF0ZSBkZWNyeXB0aW9uS2V5OiBCdWZmZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIE90aGVyIHBhcnRpZXMnIFgyNTUxOSBwdWJsaWMga2V5cyAoZnJvbSB0aGVpciBHUEcgZW5jcnlwdGlvbiBzdWJrZXlzKSwgc29ydGVkIGJ5IHBhcnR5IGluZGV4ICovXG4gIHByaXZhdGUgb3RoZXJQdWJLZXlzOiBCdWZmZXJbXSB8IG51bGwgPSBudWxsO1xuICAvKiogU2VyaWFsaXNlZCByb3VuZCBzdGF0ZSBieXRlcyByZXR1cm5lZCBieSB0aGUgcHJldmlvdXMgcm91bmQgZnVuY3Rpb24gKi9cbiAgcHJpdmF0ZSBka2dTdGF0ZUJ5dGVzOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIE9wYXF1ZSBiaW5jb2RlLXNlcmlhbGlzZWQga2V5c2hhcmUgZnJvbSByb3VuZDIgKi9cbiAgcHJpdmF0ZSBrZXlTaGFyZTogQnVmZmVyIHwgbnVsbCA9IG51bGw7XG4gIC8qKiAzMi1ieXRlIEVkMjU1MTkgcHVibGljIGtleSBmcm9tIHJvdW5kMiAqL1xuICBwcml2YXRlIHNoYXJlUGs6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuICAvKiogMzItYnl0ZSBjaGFpbiBjb2RlIGZyb20gcm91bmQyICovXG4gIHByaXZhdGUgc2hhcmVDaGFpbmNvZGU6IEJ1ZmZlciB8IG51bGwgPSBudWxsO1xuICAvKiogTGF6aWx5IGxvYWRlZCBXQVNNIG1vZHVsZSAqL1xuICBwcml2YXRlIHdhc21NcHM6IFdhc21NcHMgfCBudWxsID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgZGtnU3RhdGU6IERrZ1N0YXRlID0gRGtnU3RhdGUuVW5pbml0aWFsaXplZDtcblxuICBjb25zdHJ1Y3RvcihuOiBudW1iZXIsIHQ6IG51bWJlciwgcGFydHlJZHg6IG51bWJlcikge1xuICAgIHRoaXMubiA9IG47XG4gICAgdGhpcy50ID0gdDtcbiAgICB0aGlzLnBhcnR5SWR4ID0gcGFydHlJZHg7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRXYXNtTXBzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy53YXNtTXBzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIC8qIGNoZWNrcyBmb3IgZWxlY3Ryb24gcHJvY2Vzc2VzICovXG4gICAgICAgICF3aW5kb3cucHJvY2VzcyAmJlxuICAgICAgICAhd2luZG93LnByb2Nlc3M/LlsndHlwZSddXG4gICAgICApIHtcbiAgICAgICAgLy8gQnJvd3Nlcjogd2ViIGJ1aWxkIGhhcyBleHBsaWNpdCBpbml0KCkg4oCUIGd1YXJhbnRlZWQgcmVhZHkgYWZ0ZXIgYXdhaXRcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1pbnRlcm5hbC1tb2R1bGVzIC0tIEBiaXRnby93YXNtLW1wcyBleHBvc2VzIGVudmlyb25tZW50LXNwZWNpZmljIHN1YnBhdGggZXhwb3J0cy5cbiAgICAgICAgY29uc3Qgd2ViV2FzbSA9IGF3YWl0IGltcG9ydCgnQGJpdGdvL3dhc20tbXBzL3dlYicpO1xuICAgICAgICBhd2FpdCB3ZWJXYXNtLmRlZmF1bHQoKTtcbiAgICAgICAgdGhpcy53YXNtTXBzID0gd2ViV2FzbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vZGUuanM6IGR5bmFtaWMgaW1wb3J0KCkgcmV3cml0dGVuIHRvIHJlcXVpcmUoKSBieSB0c2Mg4oaSIENKUyBidWlsZCDihpIgcmVhZEZpbGVTeW5jXG4gICAgICAgIHRoaXMud2FzbU1wcyA9IGF3YWl0IGltcG9ydCgnQGJpdGdvL3dhc20tbXBzJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRXYXNtTXBzKCk6IFdhc21NcHMge1xuICAgIGlmICghdGhpcy53YXNtTXBzKSB7XG4gICAgICB0aHJvdyBFcnJvcignV0FTTSBtb2R1bGUgbm90IGxvYWRlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy53YXNtTXBzO1xuICB9XG5cbiAgZ2V0U3RhdGUoKTogRGtnU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmRrZ1N0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2VzIHRoZSBES0cgc2Vzc2lvbiB3aXRoIHRoaXMgcGFydHkncyBYMjU1MTkgcHJpdmF0ZSBrZXkgYW5kIHRoZSBvdGhlciBwYXJ0aWVzJ1xuICAgKiBYMjU1MTkgcHVibGljIGtleXMuIEtleXMgYXJlIGV4dHJhY3RlZCBmcm9tIEdQRyBlbmNyeXB0aW9uIHN1YmtleXMgYnkgdGhlIG9yY2hlc3RyYXRvci5cbiAgICpcbiAgICogQHBhcmFtIGRlY3J5cHRpb25LZXkgLSBUaGlzIHBhcnR5J3MgMzItYnl0ZSBYMjU1MTkgcHJpdmF0ZSBrZXkgKEdQRyBlbmMgc3Via2V5IHByaXZhdGUgcGFydCkuXG4gICAqIEBwYXJhbSBvdGhlckVuY1B1YmxpY0tleXMgLSBPdGhlciBwYXJ0aWVzJyAzMi1ieXRlIFgyNTUxOSBwdWJsaWMga2V5cywgc29ydGVkIGJ5IGFzY2VuZGluZ1xuICAgKiAgIHBhcnR5IGluZGV4IChleGNsdWRpbmcgb3duKS4gRm9yIGEgMy1wYXJ0eSBzZXR1cCwgdGhpcyBpcyBbcGFydHlfQV9wdWIsIHBhcnR5X0JfcHViXS5cbiAgICovXG4gIGFzeW5jIGluaXREa2coZGVjcnlwdGlvbktleTogQnVmZmVyLCBvdGhlckVuY1B1YmxpY0tleXM6IEJ1ZmZlcltdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkV2FzbU1wcygpO1xuICAgIGlmICghZGVjcnlwdGlvbktleSB8fCBkZWNyeXB0aW9uS2V5Lmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgZGVjcnlwdGlvbiBrZXk6IG11c3QgYmUgMzIgYnl0ZXMnKTtcbiAgICB9XG4gICAgaWYgKCFvdGhlckVuY1B1YmxpY0tleXMgfHwgb3RoZXJFbmNQdWJsaWNLZXlzLmxlbmd0aCAhPT0gdGhpcy5uIC0gMSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEV4cGVjdGVkICR7dGhpcy5uIC0gMX0gb3RoZXIgcGFydGllcycgcHVibGljIGtleXNgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudCA+IHRoaXMubiB8fCB0aGlzLnBhcnR5SWR4ID49IHRoaXMubikge1xuICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgcGFyYW1ldGVycyBmb3IgREtHJyk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWNyeXB0aW9uS2V5ID0gZGVjcnlwdGlvbktleTtcbiAgICB0aGlzLm90aGVyUHViS2V5cyA9IG90aGVyRW5jUHVibGljS2V5cztcbiAgICB0aGlzLmRrZ1N0YXRlID0gRGtnU3RhdGUuSW5pdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJvdW5kMCBvZiB0aGUgREtHIHByb3RvY29sLiBSZXR1cm5zIHRoaXMgcGFydHkncyBicm9hZGNhc3QgbWVzc2FnZS5cbiAgICogU3RvcmVzIHRoZSByb3VuZCBzdGF0ZSBieXRlcyBpbnRlcm5hbGx5IGZvciB0aGUgbmV4dCByb3VuZC5cbiAgICpcbiAgICogQHBhcmFtIGRrZ1NlZWQgLSBPcHRpb25hbCAzMi1ieXRlIHNlZWQgZm9yIGRldGVybWluaXN0aWMgREtHIG91dHB1dCAodGVzdGluZyBvbmx5KS5cbiAgICovXG4gIGdldEZpcnN0TWVzc2FnZShka2dTZWVkPzogQnVmZmVyKTogRGVzZXJpYWxpemVkTWVzc2FnZSB7XG4gICAgaWYgKHRoaXMuZGtnU3RhdGUgIT09IERrZ1N0YXRlLkluaXQpIHtcbiAgICAgIHRocm93IEVycm9yKCdES0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWVkID0gZGtnU2VlZCA/PyBjcnlwdG8ucmFuZG9tQnl0ZXMoMzIpO1xuICAgIGNvbnN0IHdhc20gPSB0aGlzLmdldFdhc21NcHMoKTtcbiAgICBsZXQgcmVzdWx0OiBNc2dTdGF0ZTtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gd2FzbS5lZDI1NTE5X2RrZ19yb3VuZDBfcHJvY2Vzcyh0aGlzLnBhcnR5SWR4LCB0aGlzLmRlY3J5cHRpb25LZXkhLCB0aGlzLm90aGVyUHViS2V5cyEsIHNlZWQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyB0aGUgZmlyc3QgbWVzc2FnZSBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH06ICR7ZXJyfWApO1xuICAgIH1cblxuICAgIHRoaXMuZGtnU3RhdGVCeXRlcyA9IEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGF0ZSk7XG4gICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLldhaXRNc2cxO1xuICAgIHJldHVybiB7IHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KHJlc3VsdC5tc2cpLCBmcm9tOiB0aGlzLnBhcnR5SWR4IH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBpbmNvbWluZyBtZXNzYWdlcyBmcm9tIGFsbCBwYXJ0aWVzIGFuZCBhZHZhbmNlcyB0aGUgcHJvdG9jb2wuXG4gICAqXG4gICAqIC0gSW4gV2FpdE1zZzE6IHJ1bnMgcm91bmQxLCByZXR1cm5zIHRoaXMgcGFydHkncyByb3VuZDEgYnJvYWRjYXN0IG1lc3NhZ2UuXG4gICAqIC0gSW4gV2FpdE1zZzI6IHJ1bnMgcm91bmQyLCBjb21wbGV0ZXMgREtHLCByZXR1cm5zIFtdLlxuICAgKlxuICAgKiBUaGUgY2FsbGVyIHBhc3NlcyBhbGwgbiBtZXNzYWdlcyAoaW5jbHVkaW5nIG93bik7IG93biBtZXNzYWdlIGlzIGZpbHRlcmVkXG4gICAqIG91dCBpbnRlcm5hbGx5LiBPdGhlciBwYXJ0aWVzJyBtZXNzYWdlcyBhcmUgc29ydGVkIGJ5IGFzY2VuZGluZyBwYXJ0eSBpbmRleCxcbiAgICogbWF0Y2hpbmcgdGhlIG9yZGVyaW5nIGV4cGVjdGVkIGJ5IEBiaXRnby93YXNtLW1wcy5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2VzRm9ySXRoUm91bmQgLSBBbGwgbiBtZXNzYWdlcyBmb3IgdGhpcyByb3VuZCAoaW5jbHVkaW5nIG93bikuXG4gICAqL1xuICBoYW5kbGVJbmNvbWluZ01lc3NhZ2VzKG1lc3NhZ2VzRm9ySXRoUm91bmQ6IERlc2VyaWFsaXplZE1lc3NhZ2VzKTogRGVzZXJpYWxpemVkTWVzc2FnZXMge1xuICAgIGlmICh0aGlzLmRrZ1N0YXRlID09PSBEa2dTdGF0ZS5Db21wbGV0ZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RLRyBzZXNzaW9uIGFscmVhZHkgY29tcGxldGVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRrZ1N0YXRlID09PSBEa2dTdGF0ZS5VbmluaXRpYWxpemVkKSB7XG4gICAgICB0aHJvdyBFcnJvcignREtHIHNlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRrZ1N0YXRlID09PSBEa2dTdGF0ZS5Jbml0KSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0RLRyBzZXNzaW9uIG11c3QgY2FsbCBnZXRGaXJzdE1lc3NhZ2UoKSBiZWZvcmUgaGFuZGxpbmcgaW5jb21pbmcgbWVzc2FnZXMuIENhbGwgZ2V0Rmlyc3RNZXNzYWdlKCkgZmlyc3QuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG1lc3NhZ2VzRm9ySXRoUm91bmQubGVuZ3RoICE9PSB0aGlzLm4pIHtcbiAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIG51bWJlciBvZiBtZXNzYWdlcyBmb3IgdGhlIHJvdW5kLiBOdW1iZXIgb2YgbWVzc2FnZXMgc2hvdWxkIGJlIGVxdWFsIHRvIE4nKTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IG90aGVyIHBhcnRpZXMnIG1lc3NhZ2VzLCBzb3J0ZWQgYnkgcGFydHkgaW5kZXggKGFzY2VuZGluZylcbiAgICBjb25zdCBvdGhlck1zZ3MgPSBtZXNzYWdlc0Zvckl0aFJvdW5kXG4gICAgICAuZmlsdGVyKChtKSA9PiBtLmZyb20gIT09IHRoaXMucGFydHlJZHgpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5mcm9tIC0gYi5mcm9tKVxuICAgICAgLm1hcCgobSkgPT4gbS5wYXlsb2FkKTtcblxuICAgIGNvbnN0IHdhc20gPSB0aGlzLmdldFdhc21NcHMoKTtcblxuICAgIGlmICh0aGlzLmRrZ1N0YXRlID09PSBEa2dTdGF0ZS5XYWl0TXNnMSkge1xuICAgICAgbGV0IHJlc3VsdDogTXNnU3RhdGU7XG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSB3YXNtLmVkMjU1MTlfZGtnX3JvdW5kMV9wcm9jZXNzKG90aGVyTXNncywgdGhpcy5ka2dTdGF0ZUJ5dGVzISk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBtZXNzYWdlcyBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH0sIHJvdW5kICR7dGhpcy5ka2dTdGF0ZX06ICR7ZXJyfWApO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgbmV3IHN0YXRlOyB0aGlzIGlzIHdoYXQgd291bGQgYmUgcGVyc2lzdGVkIHRvIERCIGJldHdlZW4gQVBJIHJvdW5kc1xuICAgICAgdGhpcy5ka2dTdGF0ZUJ5dGVzID0gQnVmZmVyLmZyb20ocmVzdWx0LnN0YXRlKTtcbiAgICAgIHRoaXMuZGtnU3RhdGUgPSBEa2dTdGF0ZS5XYWl0TXNnMjtcbiAgICAgIHJldHVybiBbeyBwYXlsb2FkOiBuZXcgVWludDhBcnJheShyZXN1bHQubXNnKSwgZnJvbTogdGhpcy5wYXJ0eUlkeCB9XTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5ka2dTdGF0ZSA9PT0gRGtnU3RhdGUuV2FpdE1zZzIpIHtcbiAgICAgIGxldCBzaGFyZTogU2hhcmU7XG4gICAgICB0cnkge1xuICAgICAgICBzaGFyZSA9IHdhc20uZWQyNTUxOV9ka2dfcm91bmQyX3Byb2Nlc3Mob3RoZXJNc2dzLCB0aGlzLmRrZ1N0YXRlQnl0ZXMhKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIG1lc3NhZ2VzIGZyb20gcGFydHkgJHt0aGlzLnBhcnR5SWR4fSwgcm91bmQgJHt0aGlzLmRrZ1N0YXRlfTogJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgICB0aGlzLmtleVNoYXJlID0gQnVmZmVyLmZyb20oc2hhcmUuc2hhcmUpO1xuICAgICAgdGhpcy5zaGFyZVBrID0gQnVmZmVyLmZyb20oc2hhcmUucGspO1xuICAgICAgdGhpcy5zaGFyZUNoYWluY29kZSA9IEJ1ZmZlci5mcm9tKHNoYXJlLmNoYWluY29kZSk7XG4gICAgICB0aGlzLmRrZ1N0YXRlQnl0ZXMgPSBudWxsO1xuICAgICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLkNvbXBsZXRlO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHRocm93IEVycm9yKCdVbmV4cGVjdGVkIERLRyBzdGF0ZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9wYXF1ZSBiaW5jb2RlLXNlcmlhbGlzZWQga2V5c2hhcmUgcHJvZHVjZWQgYnkgcm91bmQyLlxuICAgKiBUaGlzIGlzIHVzZWQgYXMgaW5wdXQgdG8gdGhlIHNpZ25pbmcgcHJvdG9jb2wuXG4gICAqL1xuICBnZXRLZXlTaGFyZSgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5rZXlTaGFyZSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RLRyBzZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5rZXlTaGFyZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSAzMi1ieXRlIEVkMjU1MTkgcHVibGljIGtleSBhZ3JlZWQgYnkgYWxsIHBhcnRpZXMgZHVyaW5nIERLRy5cbiAgICovXG4gIGdldFNoYXJlUHVibGljS2V5KCk6IEJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLnNoYXJlUGspIHtcbiAgICAgIHRocm93IEVycm9yKCdES0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hhcmVQaztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSAxMjgtY2hhciBoZXggY29tbW9uIGtleWNoYWluOiA2NC1jaGFyIHB1YmxpYyBrZXkgKyA2NC1jaGFyIGNoYWluIGNvZGUuXG4gICAqIFRoaXMgbWF0Y2hlcyB0aGUgZm9ybWF0IGV4cGVjdGVkIGJ5IGFkZHJlc3MgZGVyaXZhdGlvbiAoRWRkc2EuZGVyaXZlVW5oYXJkZW5lZCkuXG4gICAqL1xuICBnZXRDb21tb25LZXljaGFpbigpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5zaGFyZVBrIHx8ICF0aGlzLnNoYXJlQ2hhaW5jb2RlKSB7XG4gICAgICB0aHJvdyBFcnJvcignREtHIHNlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNoYXJlUGsudG9TdHJpbmcoJ2hleCcpICsgdGhpcy5zaGFyZUNoYWluY29kZS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIENCT1ItZW5jb2RlZCByZWR1Y2VkIHJlcHJlc2VudGF0aW9uIGNvbnRhaW5pbmcgdGhlIHB1YmxpYyBrZXkuXG4gICAqL1xuICBnZXRSZWR1Y2VkS2V5U2hhcmUoKTogQnVmZmVyIHtcbiAgICBpZiAoIXRoaXMuc2hhcmVQaykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RLRyBzZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICBjb25zdCByZWR1Y2VkS2V5U2hhcmU6IEVkZHNhUmVkdWNlZEtleVNoYXJlID0ge1xuICAgICAgcHViOiBBcnJheS5mcm9tKHRoaXMuc2hhcmVQayksXG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oZW5jb2RlKHJlZHVjZWRLZXlTaGFyZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBzdGF0ZSBhcyBhIEpTT04gc3RyaW5nIGZvciBwZXJzaXN0ZW5jZS5cbiAgICogSW5jbHVkZXM6IHJvdW5kIHN0YXRlIGJ5dGVzLCBjdXJyZW50IERLRyByb3VuZCwgZGVjcnlwdGlvbiBrZXksIG90aGVyIHBhcnRpZXMnIHB1YiBrZXlzLlxuICAgKiBUaGlzIG1pcnJvcnMgd2hhdCBhIHNlcnZlciB3b3VsZCBzdG9yZSBpbiBhIGRhdGFiYXNlIGJldHdlZW4gQVBJIHJvdW5kcy5cbiAgICovXG4gIGdldFNlc3Npb24oKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5ka2dTdGF0ZSA9PT0gRGtnU3RhdGUuQ29tcGxldGUpIHtcbiAgICAgIHRocm93IEVycm9yKCdES0cgc2Vzc2lvbiBpcyBjb21wbGV0ZS4gRXhwb3J0aW5nIHRoZSBzZXNzaW9uIGlzIG5vdCBhbGxvd2VkLicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ka2dTdGF0ZSA9PT0gRGtnU3RhdGUuVW5pbml0aWFsaXplZCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RLRyBzZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZGtnU3RhdGVCeXRlczogdGhpcy5ka2dTdGF0ZUJ5dGVzPy50b1N0cmluZygnYmFzZTY0JykgPz8gbnVsbCxcbiAgICAgIGRrZ1JvdW5kOiB0aGlzLmRrZ1N0YXRlLFxuICAgICAgZGVjcnlwdGlvbktleTogdGhpcy5kZWNyeXB0aW9uS2V5Py50b1N0cmluZygnYmFzZTY0JykgPz8gbnVsbCxcbiAgICAgIG90aGVyUHViS2V5czogdGhpcy5vdGhlclB1YktleXM/Lm1hcCgoaykgPT4gay50b1N0cmluZygnYmFzZTY0JykpID8/IG51bGwsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdG9yZXMgYSBwcmV2aW91c2x5IGV4cG9ydGVkIHNlc3Npb24uIEFsbG93cyB0aGUgcHJvdG9jb2wgdG8gY29udGludWVcbiAgICogZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZiwgYXMgaWYgdGhlIHJvdW5kIHN0YXRlIHdhcyBsb2FkZWQgZnJvbSBhIGRhdGFiYXNlLlxuICAgKi9cbiAgcmVzdG9yZVNlc3Npb24oc2Vzc2lvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvbik7XG4gICAgdGhpcy5ka2dTdGF0ZUJ5dGVzID0gZGF0YS5ka2dTdGF0ZUJ5dGVzID8gQnVmZmVyLmZyb20oZGF0YS5ka2dTdGF0ZUJ5dGVzLCAnYmFzZTY0JykgOiBudWxsO1xuICAgIHRoaXMuZGtnU3RhdGUgPSBkYXRhLmRrZ1JvdW5kO1xuICAgIHRoaXMuZGVjcnlwdGlvbktleSA9IGRhdGEuZGVjcnlwdGlvbktleSA/IEJ1ZmZlci5mcm9tKGRhdGEuZGVjcnlwdGlvbktleSwgJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICB0aGlzLm90aGVyUHViS2V5cyA9IGRhdGEub3RoZXJQdWJLZXlzID8gKGRhdGEub3RoZXJQdWJLZXlzIGFzIHN0cmluZ1tdKS5tYXAoKGspID0+IEJ1ZmZlci5mcm9tKGssICdiYXNlNjQnKSkgOiBudWxsO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { DeserializedMessage, DeserializedMessages, DsgState } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* EdDSA Distributed Sign Generation (DSG) implementation using @bitgo/wasm-mps.
|
|
4
|
+
*
|
|
5
|
+
* State is explicit: each WASM round function returns
|
|
6
|
+
* `{ msg, state }` bytes; the state bytes are stored between rounds and passed to the
|
|
7
|
+
* next round function (this is what a server would persist to a database between API
|
|
8
|
+
* rounds).
|
|
9
|
+
*
|
|
10
|
+
* The protocol is hard-coded 2-of-3: each signing party communicates with exactly one
|
|
11
|
+
* counterpart. `handleIncomingMessages` accepts both messages (own + counterpart), and
|
|
12
|
+
* filters own out internally.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const dsg = new DSG(0); // partyIdx 0
|
|
17
|
+
* dsg.initDsg(keyShare, message, 'm', 2); // counterpart is party 2
|
|
18
|
+
* const msg1 = dsg.getFirstMessage();
|
|
19
|
+
* const msg2 = dsg.handleIncomingMessages([msg1, peerMsg1]); // emits SignMsg2
|
|
20
|
+
* const msg3 = dsg.handleIncomingMessages([msg2[0], peerMsg2]); // emits SignMsg3
|
|
21
|
+
* dsg.handleIncomingMessages([msg3[0], peerMsg3]); // completes DSG
|
|
22
|
+
* const signature = dsg.getSignature(); // 64-byte Ed25519 signature
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare class DSG {
|
|
26
|
+
protected partyIdx: number;
|
|
27
|
+
protected otherPartyIdx: number | null;
|
|
28
|
+
/** Opaque bincode-serialised Keyshare from a prior DKG */
|
|
29
|
+
private keyShare;
|
|
30
|
+
/** Raw message bytes to sign (Ed25519 hashes internally; no prehashing required) */
|
|
31
|
+
private message;
|
|
32
|
+
/** BIP-32-style derivation path, e.g. "m" or "m/0/1". Folded in via Keyshare::derive_with_offset */
|
|
33
|
+
private derivationPath;
|
|
34
|
+
/** Serialised round state bytes returned by the previous round function */
|
|
35
|
+
private dsgStateBytes;
|
|
36
|
+
/** Final 64-byte Ed25519 signature, available after WaitMsg3 -> Complete */
|
|
37
|
+
private signature;
|
|
38
|
+
protected dsgState: DsgState;
|
|
39
|
+
constructor(partyIdx: number);
|
|
40
|
+
getState(): DsgState;
|
|
41
|
+
/**
|
|
42
|
+
* Initialises the DSG session. The keyshare must come from a prior DKG run, and
|
|
43
|
+
* `otherPartyIdx` must be the single counterpart who will co-sign with this party.
|
|
44
|
+
*
|
|
45
|
+
* @param keyShare - Opaque bincode-serialised Keyshare bytes from `DKG.getKeyShare()`.
|
|
46
|
+
* @param message - Raw message bytes to sign (no prehashing).
|
|
47
|
+
* @param derivationPath - BIP-32-style derivation path. Use `"m"` for the root key.
|
|
48
|
+
* @param otherPartyIdx - Party index of the single counterpart in this signing session.
|
|
49
|
+
* Must differ from this party's own `partyIdx` and be in `[0, 2]`.
|
|
50
|
+
*/
|
|
51
|
+
initDsg(keyShare: Buffer, message: Buffer, derivationPath: string, otherPartyIdx: number): void;
|
|
52
|
+
/**
|
|
53
|
+
* Runs round 0 of the DSG protocol. Returns this party's broadcast message
|
|
54
|
+
* (a `SignMsg1` containing the commitment to `R_i`). Stores the round state
|
|
55
|
+
* bytes internally for the next round.
|
|
56
|
+
*/
|
|
57
|
+
getFirstMessage(): DeserializedMessage;
|
|
58
|
+
/**
|
|
59
|
+
* Handles incoming messages for the current round and advances the protocol.
|
|
60
|
+
*
|
|
61
|
+
* - In `WaitMsg1`: runs round 1, returns this party's `SignMsg2` broadcast.
|
|
62
|
+
* - In `WaitMsg2`: runs round 2 (which internally fuses two Silence Labs transitions),
|
|
63
|
+
* returns this party's `SignMsg3` broadcast (partial signature).
|
|
64
|
+
* - In `WaitMsg3`: runs round 3, completes DSG, returns `[]`.
|
|
65
|
+
*
|
|
66
|
+
* The caller passes both messages (own + counterpart) for symmetry with
|
|
67
|
+
* `DKG.handleIncomingMessages`. Own message is filtered out internally; only the
|
|
68
|
+
* counterpart's payload is forwarded to the WASM round function.
|
|
69
|
+
*
|
|
70
|
+
* @param messagesForIthRound - Both messages for this round (own + counterpart).
|
|
71
|
+
*/
|
|
72
|
+
handleIncomingMessages(messagesForIthRound: DeserializedMessages): DeserializedMessages;
|
|
73
|
+
/**
|
|
74
|
+
* Returns the final 64-byte Ed25519 signature produced by round 3.
|
|
75
|
+
* Only available once the protocol reaches `Complete`.
|
|
76
|
+
*/
|
|
77
|
+
getSignature(): Buffer;
|
|
78
|
+
/**
|
|
79
|
+
* Exports the current session state as a JSON string for persistence.
|
|
80
|
+
* Includes the opaque round state bytes plus everything needed to re-enter the
|
|
81
|
+
* protocol after a restart (keyshare, message, derivation path, counterpart).
|
|
82
|
+
*/
|
|
83
|
+
getSession(): string;
|
|
84
|
+
/**
|
|
85
|
+
* Restores a previously exported session. Allows the protocol to continue from
|
|
86
|
+
* where it left off, as if the round state was loaded from a database.
|
|
87
|
+
*/
|
|
88
|
+
restoreSession(session: string): void;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=dsg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dsg.d.ts","sourceRoot":"","sources":["../../../../src/tss/eddsa-mps/dsg.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,GAAG;IACd,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE9C,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAuB;IACvC,oFAAoF;IACpF,OAAO,CAAC,OAAO,CAAuB;IACtC,oGAAoG;IACpG,OAAO,CAAC,cAAc,CAAuB;IAE7C,2EAA2E;IAC3E,OAAO,CAAC,aAAa,CAAuB;IAC5C,4EAA4E;IAC5E,OAAO,CAAC,SAAS,CAAuB;IAExC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAA0B;gBAE1C,QAAQ,EAAE,MAAM;IAI5B,QAAQ,IAAI,QAAQ;IAIpB;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAqB/F;;;;OAIG;IACH,eAAe,IAAI,mBAAmB;IAoBtC;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,oBAAoB;IAqEvF;;;OAGG;IACH,YAAY,IAAI,MAAM;IAOtB;;;;OAIG;IACH,UAAU,IAAI,MAAM;IAqBpB;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CA2DtC"}
|