@bitgo/sdk-lib-mpc 10.17.0 → 10.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/src/tss/dkls-vrf/dkg.d.ts +91 -0
  2. package/dist/src/tss/dkls-vrf/dkg.d.ts.map +1 -0
  3. package/dist/src/tss/dkls-vrf/dkg.js +278 -0
  4. package/dist/src/tss/dkls-vrf/index.d.ts +4 -0
  5. package/dist/src/tss/dkls-vrf/index.d.ts.map +1 -0
  6. package/dist/src/tss/dkls-vrf/index.js +40 -0
  7. package/dist/src/tss/dkls-vrf/types.d.ts +28 -0
  8. package/dist/src/tss/dkls-vrf/types.d.ts.map +1 -0
  9. package/dist/src/tss/dkls-vrf/types.js +23 -0
  10. package/dist/src/tss/dkls-vrf/util.d.ts +9 -0
  11. package/dist/src/tss/dkls-vrf/util.d.ts.map +1 -0
  12. package/dist/src/tss/dkls-vrf/util.js +52 -0
  13. package/dist/src/tss/ecdsa-dkls/dkg.d.ts +3 -1
  14. package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -1
  15. package/dist/src/tss/ecdsa-dkls/dkg.js +1 -1
  16. package/dist/src/tss/eddsa-mps/dkg.d.ts +3 -0
  17. package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -1
  18. package/dist/src/tss/eddsa-mps/dkg.js +1 -1
  19. package/dist/src/tss/index.d.ts +1 -0
  20. package/dist/src/tss/index.d.ts.map +1 -1
  21. package/dist/src/tss/index.js +2 -1
  22. package/dist/src/tss/redpallas-mps/commsLayer.d.ts +34 -0
  23. package/dist/src/tss/redpallas-mps/commsLayer.d.ts.map +1 -0
  24. package/dist/src/tss/redpallas-mps/commsLayer.js +100 -0
  25. package/dist/src/tss/redpallas-mps/dsg.d.ts +108 -0
  26. package/dist/src/tss/redpallas-mps/dsg.d.ts.map +1 -0
  27. package/dist/src/tss/redpallas-mps/dsg.js +355 -0
  28. package/dist/src/tss/redpallas-mps/index.d.ts +3 -0
  29. package/dist/src/tss/redpallas-mps/index.d.ts.map +1 -1
  30. package/dist/src/tss/redpallas-mps/index.js +4 -2
  31. package/dist/src/tss/redpallas-mps/types.d.ts +45 -0
  32. package/dist/src/tss/redpallas-mps/types.d.ts.map +1 -1
  33. package/dist/src/tss/redpallas-mps/types.js +25 -2
  34. package/dist/src/tss/redpallas-mps/util.d.ts +28 -0
  35. package/dist/src/tss/redpallas-mps/util.d.ts.map +1 -1
  36. package/dist/src/tss/redpallas-mps/util.js +95 -1
  37. package/dist/tsconfig.tsbuildinfo +1 -1
  38. package/package.json +18 -4
@@ -0,0 +1,355 @@
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
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.RedPallasDSG = void 0;
40
+ const assert_1 = __importDefault(require("assert"));
41
+ const types_1 = require("./types");
42
+ /**
43
+ * RedPallas (Zcash Ironwood) Distributed Sign Generation (DSG) implementation using
44
+ * @bitgo/wasm-mps.
45
+ *
46
+ * Mirrors the structure of the EdDSA MPS `DSG` class (see `../eddsa-mps/dsg.ts`), but wraps
47
+ * the `redpallas_dsg_*` WASM bindings. Unlike the EdDSA version:
48
+ *
49
+ * - `redpallas_dsg_round0_process` does not take a derivation path: RedPallas key derivation
50
+ * (ask/nk/rivk/ivks) happens upstream, as part of DKG (`redpallas_dkg_round2_process` +
51
+ * the platform-side-only `redpallas_derivation_process`); DSG only ever operates on an
52
+ * already-derived (or root) opaque `Keyshare`.
53
+ * - Round3 does not return a raw signature; it returns a `RedPallasSignature` bundle of
54
+ * `signature` (64 raw bytes), `rk` (the randomized verification key the signature
55
+ * verifies against — NOT the DKG public key) and `alpha` (the 32-byte randomizer scalar
56
+ * used to re-randomize the DKG public key into `rk`). See `RedPallasSignatureResult`.
57
+ *
58
+ * State is explicit: each WASM round function returns `{ msg, state }` bytes; the state
59
+ * bytes are stored between rounds and passed to the next round function (this is what a
60
+ * server would persist to a database between API rounds).
61
+ *
62
+ * The protocol is hard-coded 2-of-3: each signing party communicates with exactly one
63
+ * counterpart. `handleIncomingMessages` accepts both messages (own + counterpart), and
64
+ * filters own out internally.
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * const dsg = new RedPallasDSG(0); // partyIdx 0
69
+ * await dsg.initDsg(keyShare, message, 2); // counterpart is party 2
70
+ * const msg1 = dsg.getFirstMessage();
71
+ * const msg2 = dsg.handleIncomingMessages([msg1, peerMsg1]); // emits SignMsg2
72
+ * const msg3 = dsg.handleIncomingMessages([msg2[0], peerMsg2]); // emits SignMsg3
73
+ * dsg.handleIncomingMessages([msg3[0], peerMsg3]); // completes DSG
74
+ * const { signature, rk, alpha } = dsg.getSignature(); // 64-byte RedPallas signature + rk/alpha
75
+ * ```
76
+ */
77
+ class RedPallasDSG {
78
+ constructor(partyIdx) {
79
+ this.otherPartyIdx = null;
80
+ /** Opaque bincode-serialised Keyshare from a prior DKG (already derived, if applicable) */
81
+ this.keyShare = null;
82
+ /** Raw message bytes to sign */
83
+ this.message = null;
84
+ /** Serialised round state bytes returned by the previous round function */
85
+ this.dsgStateBytes = null;
86
+ /** Final signature bundle, available after WaitMsg3 -> Complete */
87
+ this.signatureResult = null;
88
+ /** Lazily loaded WASM module */
89
+ this.wasmMps = null;
90
+ this.dsgState = types_1.RedPallasDsgState.Uninitialized;
91
+ this.partyIdx = partyIdx;
92
+ }
93
+ getState() {
94
+ return this.dsgState;
95
+ }
96
+ getPartyIdx() {
97
+ return this.partyIdx;
98
+ }
99
+ getOtherPartyIdx() {
100
+ return this.otherPartyIdx;
101
+ }
102
+ async loadWasmMps() {
103
+ if (!this.wasmMps) {
104
+ if (typeof window !== 'undefined' &&
105
+ /* checks for electron processes */
106
+ !window.process &&
107
+ !window.process?.['type']) {
108
+ // Browser: web build has explicit init() — guaranteed ready after await
109
+ // eslint-disable-next-line import/no-internal-modules -- @bitgo/wasm-mps exposes environment-specific subpath exports.
110
+ const webWasm = await Promise.resolve().then(() => __importStar(require('@bitgo/wasm-mps/web')));
111
+ await webWasm.default();
112
+ this.wasmMps = webWasm;
113
+ }
114
+ else {
115
+ // Node.js: dynamic import() rewritten to require() by tsc → CJS build → readFileSync
116
+ this.wasmMps = await Promise.resolve().then(() => __importStar(require('@bitgo/wasm-mps')));
117
+ }
118
+ }
119
+ }
120
+ getWasmMps() {
121
+ if (!this.wasmMps) {
122
+ throw Error('WASM module not loaded');
123
+ }
124
+ return this.wasmMps;
125
+ }
126
+ /**
127
+ * Initialises the DSG session. The keyshare must come from a prior DKG run (and, if a
128
+ * derived key is being used, from the subsequent platform-side derivation process), and
129
+ * `otherPartyIdx` must be the single counterpart who will co-sign with this party.
130
+ *
131
+ * @param keyShare - Opaque bincode-serialised Keyshare bytes from `RedPallasDKG.getKeyShare()`.
132
+ * @param message - Raw message bytes to sign.
133
+ * @param otherPartyIdx - Party index of the single counterpart in this signing session.
134
+ * Must differ from this party's own `partyIdx` and be in `[0, 2]`.
135
+ */
136
+ async initDsg(keyShare, message, otherPartyIdx) {
137
+ await this.loadWasmMps();
138
+ if (!keyShare || keyShare.length === 0) {
139
+ throw Error('Missing or invalid keyShare');
140
+ }
141
+ if (!message || message.length === 0) {
142
+ throw Error('Missing or invalid message');
143
+ }
144
+ if (this.partyIdx < 0 || this.partyIdx > 2) {
145
+ throw Error(`Invalid partyIdx ${this.partyIdx}: must be in [0, 2]`);
146
+ }
147
+ if (otherPartyIdx < 0 || otherPartyIdx > 2 || otherPartyIdx === this.partyIdx) {
148
+ throw Error(`Invalid otherPartyIdx ${otherPartyIdx}: must be in [0, 2] and != partyIdx`);
149
+ }
150
+ this.keyShare = keyShare;
151
+ this.message = message;
152
+ this.otherPartyIdx = otherPartyIdx;
153
+ this.dsgState = types_1.RedPallasDsgState.Init;
154
+ }
155
+ /**
156
+ * Runs round 0 of the DSG protocol. Returns this party's broadcast message
157
+ * (a `SignMsg1` containing the commitment to `R_i`). Stores the round state
158
+ * bytes internally for the next round.
159
+ */
160
+ getFirstMessage() {
161
+ if (this.dsgState !== types_1.RedPallasDsgState.Init) {
162
+ throw Error('DSG session not initialized');
163
+ }
164
+ (0, assert_1.default)(this.keyShare, 'keyShare must be set after initDsg');
165
+ (0, assert_1.default)(this.message, 'message must be set after initDsg');
166
+ const wasm = this.getWasmMps();
167
+ let result;
168
+ try {
169
+ result = wasm.redpallas_dsg_round0_process(this.keyShare, this.message);
170
+ }
171
+ catch (err) {
172
+ throw new Error(`Error while creating the first message from party ${this.partyIdx}: ${err}`);
173
+ }
174
+ this.dsgStateBytes = Buffer.from(result.state);
175
+ this.dsgState = types_1.RedPallasDsgState.WaitMsg1;
176
+ return { payload: new Uint8Array(result.msg), from: this.partyIdx };
177
+ }
178
+ /**
179
+ * Handles incoming messages for the current round and advances the protocol.
180
+ *
181
+ * - In `WaitMsg1`: runs round 1, returns this party's `SignMsg2` broadcast.
182
+ * - In `WaitMsg2`: runs round 2 (which internally fuses two Silence Labs transitions),
183
+ * returns this party's `SignMsg3` broadcast (partial signature).
184
+ * - In `WaitMsg3`: runs round 3, completes DSG, returns `[]`.
185
+ *
186
+ * The caller passes both messages (own + counterpart) for symmetry with
187
+ * `RedPallasDKG.handleIncomingMessages`. Own message is filtered out internally; only the
188
+ * counterpart's payload is forwarded to the WASM round function.
189
+ *
190
+ * @param messagesForIthRound - Both messages for this round (own + counterpart).
191
+ */
192
+ handleIncomingMessages(messagesForIthRound) {
193
+ if (this.dsgState === types_1.RedPallasDsgState.Complete) {
194
+ throw Error('DSG session already completed');
195
+ }
196
+ if (this.dsgState === types_1.RedPallasDsgState.Uninitialized) {
197
+ throw Error('DSG session not initialized');
198
+ }
199
+ if (this.dsgState === types_1.RedPallasDsgState.Init) {
200
+ throw Error('DSG session must call getFirstMessage() before handling incoming messages. Call getFirstMessage() first.');
201
+ }
202
+ if (messagesForIthRound.length !== 2) {
203
+ throw Error('Invalid number of messages for the round. Expected 2 messages (own + counterpart) for 2-of-3 DSG');
204
+ }
205
+ const peerMessages = messagesForIthRound.filter((m) => m.from !== this.partyIdx);
206
+ if (peerMessages.length !== 1) {
207
+ throw Error(`Expected exactly 1 counterpart message; got ${peerMessages.length}`);
208
+ }
209
+ const peerMsg = peerMessages[0];
210
+ if (peerMsg.from !== this.otherPartyIdx) {
211
+ throw Error(`Unexpected counterpart party index: got ${peerMsg.from}, expected ${this.otherPartyIdx}`);
212
+ }
213
+ const peerPayload = Buffer.from(peerMsg.payload);
214
+ const wasm = this.getWasmMps();
215
+ if (this.dsgState === types_1.RedPallasDsgState.WaitMsg1) {
216
+ (0, assert_1.default)(this.dsgStateBytes, 'dsgStateBytes must be set in WaitMsg1');
217
+ let result;
218
+ try {
219
+ result = wasm.redpallas_dsg_round1_process(peerPayload, this.dsgStateBytes);
220
+ }
221
+ catch (err) {
222
+ throw new Error(`Error while creating messages from party ${this.partyIdx}, round ${this.dsgState}: ${err}`);
223
+ }
224
+ this.dsgStateBytes = Buffer.from(result.state);
225
+ this.dsgState = types_1.RedPallasDsgState.WaitMsg2;
226
+ return [{ payload: new Uint8Array(result.msg), from: this.partyIdx }];
227
+ }
228
+ if (this.dsgState === types_1.RedPallasDsgState.WaitMsg2) {
229
+ (0, assert_1.default)(this.dsgStateBytes, 'dsgStateBytes must be set in WaitMsg2');
230
+ let result;
231
+ try {
232
+ result = wasm.redpallas_dsg_round2_process(peerPayload, this.dsgStateBytes);
233
+ }
234
+ catch (err) {
235
+ throw new Error(`Error while creating messages from party ${this.partyIdx}, round ${this.dsgState}: ${err}`);
236
+ }
237
+ this.dsgStateBytes = Buffer.from(result.state);
238
+ this.dsgState = types_1.RedPallasDsgState.WaitMsg3;
239
+ return [{ payload: new Uint8Array(result.msg), from: this.partyIdx }];
240
+ }
241
+ if (this.dsgState === types_1.RedPallasDsgState.WaitMsg3) {
242
+ (0, assert_1.default)(this.dsgStateBytes, 'dsgStateBytes must be set in WaitMsg3');
243
+ let result;
244
+ try {
245
+ result = wasm.redpallas_dsg_round3_process(peerPayload, this.dsgStateBytes);
246
+ }
247
+ catch (err) {
248
+ throw new Error(`Error while creating messages from party ${this.partyIdx}, round ${this.dsgState}: ${err}`);
249
+ }
250
+ this.signatureResult = {
251
+ signature: Buffer.from(result.signature),
252
+ rk: Buffer.from(result.rk),
253
+ alpha: Buffer.from(result.alpha),
254
+ };
255
+ this.dsgStateBytes = null;
256
+ this.dsgState = types_1.RedPallasDsgState.Complete;
257
+ return [];
258
+ }
259
+ throw Error('Unexpected DSG state');
260
+ }
261
+ /**
262
+ * Returns the final signature bundle produced by round 3: the 64-byte raw RedPallas
263
+ * signature, the randomized verification key `rk` it must be verified against (via
264
+ * `redpallas_verify(rk, signature, message)` — NOT the DKG public key), and the
265
+ * `alpha` randomizer scalar used to derive `rk` from the DKG public key.
266
+ */
267
+ getSignature() {
268
+ if (!this.signatureResult) {
269
+ throw Error('DSG session has not produced a signature yet');
270
+ }
271
+ return this.signatureResult;
272
+ }
273
+ /**
274
+ * Exports the current session state as a JSON string for persistence.
275
+ * Includes the opaque round state bytes plus everything needed to re-enter the
276
+ * protocol after a restart (keyshare, message, counterpart).
277
+ */
278
+ getSession() {
279
+ if (this.dsgState === types_1.RedPallasDsgState.Complete) {
280
+ throw Error('DSG session is complete. Exporting the session is not allowed.');
281
+ }
282
+ if (this.dsgState === types_1.RedPallasDsgState.Uninitialized) {
283
+ throw Error('DSG session not initialized');
284
+ }
285
+ if (this.dsgState === types_1.RedPallasDsgState.Init) {
286
+ throw Error('DSG session must produce its first message before exporting.');
287
+ }
288
+ return JSON.stringify({
289
+ dsgStateBytes: this.dsgStateBytes?.toString('base64') ?? null,
290
+ dsgRound: this.dsgState,
291
+ keyShare: this.keyShare?.toString('base64') ?? null,
292
+ message: this.message?.toString('base64') ?? null,
293
+ partyIdx: this.partyIdx,
294
+ otherPartyIdx: this.otherPartyIdx,
295
+ });
296
+ }
297
+ /**
298
+ * Restores a previously exported session. Allows the protocol to continue from
299
+ * where it left off, as if the round state was loaded from a database.
300
+ */
301
+ async restoreSession(session) {
302
+ await this.loadWasmMps();
303
+ const data = JSON.parse(session);
304
+ if (!Object.values(types_1.RedPallasDsgState).includes(data.dsgRound)) {
305
+ throw Error(`Invalid dsgRound in session: ${data.dsgRound}`);
306
+ }
307
+ if (data.dsgRound === types_1.RedPallasDsgState.Uninitialized || data.dsgRound === types_1.RedPallasDsgState.Init) {
308
+ throw Error(`Cannot restore DSG session in state ${data.dsgRound}`);
309
+ }
310
+ if (data.dsgRound === types_1.RedPallasDsgState.Complete) {
311
+ throw Error('DSG session is complete. Restoring the session is not allowed.');
312
+ }
313
+ if (typeof data.partyIdx !== 'number' || data.partyIdx < 0 || data.partyIdx > 2) {
314
+ throw Error(`Invalid partyIdx in session: ${data.partyIdx}`);
315
+ }
316
+ if (typeof data.otherPartyIdx !== 'number' ||
317
+ data.otherPartyIdx < 0 ||
318
+ data.otherPartyIdx > 2 ||
319
+ data.otherPartyIdx === data.partyIdx) {
320
+ throw Error(`Invalid otherPartyIdx in session: ${data.otherPartyIdx}`);
321
+ }
322
+ if (this.partyIdx !== data.partyIdx) {
323
+ throw Error(`Session partyIdx ${data.partyIdx} does not match instance ${this.partyIdx}`);
324
+ }
325
+ if (typeof data.dsgStateBytes !== 'string' || data.dsgStateBytes.length === 0) {
326
+ throw Error(`Round ${data.dsgRound} requires dsgStateBytes`);
327
+ }
328
+ if (typeof data.keyShare !== 'string' || data.keyShare.length === 0) {
329
+ throw Error('Restored session missing keyShare');
330
+ }
331
+ if (typeof data.message !== 'string' || data.message.length === 0) {
332
+ throw Error('Restored session missing message');
333
+ }
334
+ const dsgStateBytes = Buffer.from(data.dsgStateBytes, 'base64');
335
+ const keyShare = Buffer.from(data.keyShare, 'base64');
336
+ const message = Buffer.from(data.message, 'base64');
337
+ if (dsgStateBytes.length === 0) {
338
+ throw Error(`Round ${data.dsgRound} requires dsgStateBytes`);
339
+ }
340
+ if (keyShare.length === 0) {
341
+ throw Error('Restored session missing keyShare');
342
+ }
343
+ if (message.length === 0) {
344
+ throw Error('Restored session missing message');
345
+ }
346
+ this.dsgStateBytes = dsgStateBytes;
347
+ this.dsgState = data.dsgRound;
348
+ this.keyShare = keyShare;
349
+ this.message = message;
350
+ this.partyIdx = data.partyIdx;
351
+ this.otherPartyIdx = data.otherPartyIdx;
352
+ }
353
+ }
354
+ exports.RedPallasDSG = RedPallasDSG;
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHNnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9yZWRwYWxsYXMtbXBzL2RzZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFFNUIsbUNBQWlIO0FBTWpIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsTUFBYSxZQUFZO0lBa0J2QixZQUFZLFFBQWdCO1FBaEJsQixrQkFBYSxHQUFrQixJQUFJLENBQUM7UUFFOUMsMkZBQTJGO1FBQ25GLGFBQVEsR0FBa0IsSUFBSSxDQUFDO1FBQ3ZDLGdDQUFnQztRQUN4QixZQUFPLEdBQWtCLElBQUksQ0FBQztRQUV0QywyRUFBMkU7UUFDbkUsa0JBQWEsR0FBa0IsSUFBSSxDQUFDO1FBQzVDLG1FQUFtRTtRQUMzRCxvQkFBZSxHQUFvQyxJQUFJLENBQUM7UUFDaEUsZ0NBQWdDO1FBQ3hCLFlBQU8sR0FBbUIsSUFBSSxDQUFDO1FBRTdCLGFBQVEsR0FBc0IseUJBQWlCLENBQUMsYUFBYSxDQUFDO1FBR3RFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFDRSxPQUFPLE1BQU0sS0FBSyxXQUFXO2dCQUM3QixtQ0FBbUM7Z0JBQ25DLENBQUMsTUFBTSxDQUFDLE9BQU87Z0JBQ2YsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFF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O0FBL1NELG9DQStTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB0eXBlIHsgTXNnU3RhdGUsIFJlZFBhbGxhc1NpZ25hdHVyZSB9IGZyb20gJ0BiaXRnby93YXNtLW1wcyc7XG5pbXBvcnQgeyBEZXNlcmlhbGl6ZWRNZXNzYWdlLCBEZXNlcmlhbGl6ZWRNZXNzYWdlcywgUmVkUGFsbGFzRHNnU3RhdGUsIFJlZFBhbGxhc1NpZ25hdHVyZVJlc3VsdCB9IGZyb20gJy4vdHlwZXMnO1xuXG50eXBlIE5vZGVXYXNtZXIgPSB0eXBlb2YgaW1wb3J0KCdAYml0Z28vd2FzbS1tcHMnKTtcbnR5cGUgV2ViV2FzbWVyID0gdHlwZW9mIGltcG9ydCgnQGJpdGdvL3dhc20tbXBzL3dlYicpO1xudHlwZSBXYXNtTXBzID0gTm9kZVdhc21lciB8IFdlYldhc21lcjtcblxuLyoqXG4gKiBSZWRQYWxsYXMgKFpjYXNoIElyb253b29kKSBEaXN0cmlidXRlZCBTaWduIEdlbmVyYXRpb24gKERTRykgaW1wbGVtZW50YXRpb24gdXNpbmdcbiAqIEBiaXRnby93YXNtLW1wcy5cbiAqXG4gKiBNaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIEVkRFNBIE1QUyBgRFNHYCBjbGFzcyAoc2VlIGAuLi9lZGRzYS1tcHMvZHNnLnRzYCksIGJ1dCB3cmFwc1xuICogdGhlIGByZWRwYWxsYXNfZHNnXypgIFdBU00gYmluZGluZ3MuIFVubGlrZSB0aGUgRWREU0EgdmVyc2lvbjpcbiAqXG4gKiAtIGByZWRwYWxsYXNfZHNnX3JvdW5kMF9wcm9jZXNzYCBkb2VzIG5vdCB0YWtlIGEgZGVyaXZhdGlvbiBwYXRoOiBSZWRQYWxsYXMga2V5IGRlcml2YXRpb25cbiAqICAgKGFzay9uay9yaXZrL2l2a3MpIGhhcHBlbnMgdXBzdHJlYW0sIGFzIHBhcnQgb2YgREtHIChgcmVkcGFsbGFzX2RrZ19yb3VuZDJfcHJvY2Vzc2AgK1xuICogICB0aGUgcGxhdGZvcm0tc2lkZS1vbmx5IGByZWRwYWxsYXNfZGVyaXZhdGlvbl9wcm9jZXNzYCk7IERTRyBvbmx5IGV2ZXIgb3BlcmF0ZXMgb24gYW5cbiAqICAgYWxyZWFkeS1kZXJpdmVkIChvciByb290KSBvcGFxdWUgYEtleXNoYXJlYC5cbiAqIC0gUm91bmQzIGRvZXMgbm90IHJldHVybiBhIHJhdyBzaWduYXR1cmU7IGl0IHJldHVybnMgYSBgUmVkUGFsbGFzU2lnbmF0dXJlYCBidW5kbGUgb2ZcbiAqICAgYHNpZ25hdHVyZWAgKDY0IHJhdyBieXRlcyksIGBya2AgKHRoZSByYW5kb21pemVkIHZlcmlmaWNhdGlvbiBrZXkgdGhlIHNpZ25hdHVyZVxuICogICB2ZXJpZmllcyBhZ2FpbnN0IOKAlCBOT1QgdGhlIERLRyBwdWJsaWMga2V5KSBhbmQgYGFscGhhYCAodGhlIDMyLWJ5dGUgcmFuZG9taXplciBzY2FsYXJcbiAqICAgdXNlZCB0byByZS1yYW5kb21pemUgdGhlIERLRyBwdWJsaWMga2V5IGludG8gYHJrYCkuIFNlZSBgUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0YC5cbiAqXG4gKiBTdGF0ZSBpcyBleHBsaWNpdDogZWFjaCBXQVNNIHJvdW5kIGZ1bmN0aW9uIHJldHVybnMgYHsgbXNnLCBzdGF0ZSB9YCBieXRlczsgdGhlIHN0YXRlXG4gKiBieXRlcyBhcmUgc3RvcmVkIGJldHdlZW4gcm91bmRzIGFuZCBwYXNzZWQgdG8gdGhlIG5leHQgcm91bmQgZnVuY3Rpb24gKHRoaXMgaXMgd2hhdCBhXG4gKiBzZXJ2ZXIgd291bGQgcGVyc2lzdCB0byBhIGRhdGFiYXNlIGJldHdlZW4gQVBJIHJvdW5kcykuXG4gKlxuICogVGhlIHByb3RvY29sIGlzIGhhcmQtY29kZWQgMi1vZi0zOiBlYWNoIHNpZ25pbmcgcGFydHkgY29tbXVuaWNhdGVzIHdpdGggZXhhY3RseSBvbmVcbiAqIGNvdW50ZXJwYXJ0LiBgaGFuZGxlSW5jb21pbmdNZXNzYWdlc2AgYWNjZXB0cyBib3RoIG1lc3NhZ2VzIChvd24gKyBjb3VudGVycGFydCksIGFuZFxuICogZmlsdGVycyBvd24gb3V0IGludGVybmFsbHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGRzZyA9IG5ldyBSZWRQYWxsYXNEU0coMCk7ICAvLyBwYXJ0eUlkeCAwXG4gKiBhd2FpdCBkc2cuaW5pdERzZyhrZXlTaGFyZSwgbWVzc2FnZSwgMik7ICAvLyBjb3VudGVycGFydCBpcyBwYXJ0eSAyXG4gKiBjb25zdCBtc2cxID0gZHNnLmdldEZpcnN0TWVzc2FnZSgpO1xuICogY29uc3QgbXNnMiA9IGRzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFttc2cxLCBwZWVyTXNnMV0pOyAgLy8gZW1pdHMgU2lnbk1zZzJcbiAqIGNvbnN0IG1zZzMgPSBkc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbbXNnMlswXSwgcGVlck1zZzJdKTsgIC8vIGVtaXRzIFNpZ25Nc2czXG4gKiBkc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbbXNnM1swXSwgcGVlck1zZzNdKTsgIC8vIGNvbXBsZXRlcyBEU0dcbiAqIGNvbnN0IHsgc2lnbmF0dXJlLCByaywgYWxwaGEgfSA9IGRzZy5nZXRTaWduYXR1cmUoKTsgIC8vIDY0LWJ5dGUgUmVkUGFsbGFzIHNpZ25hdHVyZSArIHJrL2FscGhhXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFJlZFBhbGxhc0RTRyB7XG4gIHByb3RlY3RlZCBwYXJ0eUlkeDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgb3RoZXJQYXJ0eUlkeDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIE9wYXF1ZSBiaW5jb2RlLXNlcmlhbGlzZWQgS2V5c2hhcmUgZnJvbSBhIHByaW9yIERLRyAoYWxyZWFkeSBkZXJpdmVkLCBpZiBhcHBsaWNhYmxlKSAqL1xuICBwcml2YXRlIGtleVNoYXJlOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIFJhdyBtZXNzYWdlIGJ5dGVzIHRvIHNpZ24gKi9cbiAgcHJpdmF0ZSBtZXNzYWdlOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogU2VyaWFsaXNlZCByb3VuZCBzdGF0ZSBieXRlcyByZXR1cm5lZCBieSB0aGUgcHJldmlvdXMgcm91bmQgZnVuY3Rpb24gKi9cbiAgcHJpdmF0ZSBkc2dTdGF0ZUJ5dGVzOiBCdWZmZXIgfCBudWxsID0gbnVsbDtcbiAgLyoqIEZpbmFsIHNpZ25hdHVyZSBidW5kbGUsIGF2YWlsYWJsZSBhZnRlciBXYWl0TXNnMyAtPiBDb21wbGV0ZSAqL1xuICBwcml2YXRlIHNpZ25hdHVyZVJlc3VsdDogUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBMYXppbHkgbG9hZGVkIFdBU00gbW9kdWxlICovXG4gIHByaXZhdGUgd2FzbU1wczogV2FzbU1wcyB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBkc2dTdGF0ZTogUmVkUGFsbGFzRHNnU3RhdGUgPSBSZWRQYWxsYXNEc2dTdGF0ZS5VbmluaXRpYWxpemVkO1xuXG4gIGNvbnN0cnVjdG9yKHBhcnR5SWR4OiBudW1iZXIpIHtcbiAgICB0aGlzLnBhcnR5SWR4ID0gcGFydHlJZHg7XG4gIH1cblxuICBnZXRTdGF0ZSgpOiBSZWRQYWxsYXNEc2dTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuZHNnU3RhdGU7XG4gIH1cblxuICBnZXRQYXJ0eUlkeCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnBhcnR5SWR4O1xuICB9XG5cbiAgZ2V0T3RoZXJQYXJ0eUlkeCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5vdGhlclBhcnR5SWR4O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkV2FzbU1wcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMud2FzbU1wcykge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAvKiBjaGVja3MgZm9yIGVsZWN0cm9uIHByb2Nlc3NlcyAqL1xuICAgICAgICAhd2luZG93LnByb2Nlc3MgJiZcbiAgICAgICAgIXdpbmRvdy5wcm9jZXNzPy5bJ3R5cGUnXVxuICAgICAgKSB7XG4gICAgICAgIC8vIEJyb3dzZXI6IHdlYiBidWlsZCBoYXMgZXhwbGljaXQgaW5pdCgpIOKAlCBndWFyYW50ZWVkIHJlYWR5IGFmdGVyIGF3YWl0XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8taW50ZXJuYWwtbW9kdWxlcyAtLSBAYml0Z28vd2FzbS1tcHMgZXhwb3NlcyBlbnZpcm9ubWVudC1zcGVjaWZpYyBzdWJwYXRoIGV4cG9ydHMuXG4gICAgICAgIGNvbnN0IHdlYldhc20gPSBhd2FpdCBpbXBvcnQoJ0BiaXRnby93YXNtLW1wcy93ZWInKTtcbiAgICAgICAgYXdhaXQgd2ViV2FzbS5kZWZhdWx0KCk7XG4gICAgICAgIHRoaXMud2FzbU1wcyA9IHdlYldhc207XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBOb2RlLmpzOiBkeW5hbWljIGltcG9ydCgpIHJld3JpdHRlbiB0byByZXF1aXJlKCkgYnkgdHNjIOKGkiBDSlMgYnVpbGQg4oaSIHJlYWRGaWxlU3luY1xuICAgICAgICB0aGlzLndhc21NcHMgPSBhd2FpdCBpbXBvcnQoJ0BiaXRnby93YXNtLW1wcycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0V2FzbU1wcygpOiBXYXNtTXBzIHtcbiAgICBpZiAoIXRoaXMud2FzbU1wcykge1xuICAgICAgdGhyb3cgRXJyb3IoJ1dBU00gbW9kdWxlIG5vdCBsb2FkZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMud2FzbU1wcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXNlcyB0aGUgRFNHIHNlc3Npb24uIFRoZSBrZXlzaGFyZSBtdXN0IGNvbWUgZnJvbSBhIHByaW9yIERLRyBydW4gKGFuZCwgaWYgYVxuICAgKiBkZXJpdmVkIGtleSBpcyBiZWluZyB1c2VkLCBmcm9tIHRoZSBzdWJzZXF1ZW50IHBsYXRmb3JtLXNpZGUgZGVyaXZhdGlvbiBwcm9jZXNzKSwgYW5kXG4gICAqIGBvdGhlclBhcnR5SWR4YCBtdXN0IGJlIHRoZSBzaW5nbGUgY291bnRlcnBhcnQgd2hvIHdpbGwgY28tc2lnbiB3aXRoIHRoaXMgcGFydHkuXG4gICAqXG4gICAqIEBwYXJhbSBrZXlTaGFyZSAtIE9wYXF1ZSBiaW5jb2RlLXNlcmlhbGlzZWQgS2V5c2hhcmUgYnl0ZXMgZnJvbSBgUmVkUGFsbGFzREtHLmdldEtleVNoYXJlKClgLlxuICAgKiBAcGFyYW0gbWVzc2FnZSAtIFJhdyBtZXNzYWdlIGJ5dGVzIHRvIHNpZ24uXG4gICAqIEBwYXJhbSBvdGhlclBhcnR5SWR4IC0gUGFydHkgaW5kZXggb2YgdGhlIHNpbmdsZSBjb3VudGVycGFydCBpbiB0aGlzIHNpZ25pbmcgc2Vzc2lvbi5cbiAgICogICBNdXN0IGRpZmZlciBmcm9tIHRoaXMgcGFydHkncyBvd24gYHBhcnR5SWR4YCBhbmQgYmUgaW4gYFswLCAyXWAuXG4gICAqL1xuICBhc3luYyBpbml0RHNnKGtleVNoYXJlOiBCdWZmZXIsIG1lc3NhZ2U6IEJ1ZmZlciwgb3RoZXJQYXJ0eUlkeDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkV2FzbU1wcygpO1xuICAgIGlmICgha2V5U2hhcmUgfHwga2V5U2hhcmUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIGtleVNoYXJlJyk7XG4gICAgfVxuICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ01pc3Npbmcgb3IgaW52YWxpZCBtZXNzYWdlJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcnR5SWR4IDwgMCB8fCB0aGlzLnBhcnR5SWR4ID4gMikge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgcGFydHlJZHggJHt0aGlzLnBhcnR5SWR4fTogbXVzdCBiZSBpbiBbMCwgMl1gKTtcbiAgICB9XG4gICAgaWYgKG90aGVyUGFydHlJZHggPCAwIHx8IG90aGVyUGFydHlJZHggPiAyIHx8IG90aGVyUGFydHlJZHggPT09IHRoaXMucGFydHlJZHgpIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIG90aGVyUGFydHlJZHggJHtvdGhlclBhcnR5SWR4fTogbXVzdCBiZSBpbiBbMCwgMl0gYW5kICE9IHBhcnR5SWR4YCk7XG4gICAgfVxuXG4gICAgdGhpcy5rZXlTaGFyZSA9IGtleVNoYXJlO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5vdGhlclBhcnR5SWR4ID0gb3RoZXJQYXJ0eUlkeDtcbiAgICB0aGlzLmRzZ1N0YXRlID0gUmVkUGFsbGFzRHNnU3RhdGUuSW5pdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJvdW5kIDAgb2YgdGhlIERTRyBwcm90b2NvbC4gUmV0dXJucyB0aGlzIHBhcnR5J3MgYnJvYWRjYXN0IG1lc3NhZ2VcbiAgICogKGEgYFNpZ25Nc2cxYCBjb250YWluaW5nIHRoZSBjb21taXRtZW50IHRvIGBSX2lgKS4gU3RvcmVzIHRoZSByb3VuZCBzdGF0ZVxuICAgKiBieXRlcyBpbnRlcm5hbGx5IGZvciB0aGUgbmV4dCByb3VuZC5cbiAgICovXG4gIGdldEZpcnN0TWVzc2FnZSgpOiBEZXNlcmlhbGl6ZWRNZXNzYWdlIHtcbiAgICBpZiAodGhpcy5kc2dTdGF0ZSAhPT0gUmVkUGFsbGFzRHNnU3RhdGUuSW5pdCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RTRyBzZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICBhc3NlcnQodGhpcy5rZXlTaGFyZSwgJ2tleVNoYXJlIG11c3QgYmUgc2V0IGFmdGVyIGluaXREc2cnKTtcbiAgICBhc3NlcnQodGhpcy5tZXNzYWdlLCAnbWVzc2FnZSBtdXN0IGJlIHNldCBhZnRlciBpbml0RHNnJyk7XG5cbiAgICBjb25zdCB3YXNtID0gdGhpcy5nZXRXYXNtTXBzKCk7XG4gICAgbGV0IHJlc3VsdDogTXNnU3RhdGU7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IHdhc20ucmVkcGFsbGFzX2RzZ19yb3VuZDBfcHJvY2Vzcyh0aGlzLmtleVNoYXJlLCB0aGlzLm1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyB0aGUgZmlyc3QgbWVzc2FnZSBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH06ICR7ZXJyfWApO1xuICAgIH1cblxuICAgIHRoaXMuZHNnU3RhdGVCeXRlcyA9IEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGF0ZSk7XG4gICAgdGhpcy5kc2dTdGF0ZSA9IFJlZFBhbGxhc0RzZ1N0YXRlLldhaXRNc2cxO1xuICAgIHJldHVybiB7IHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KHJlc3VsdC5tc2cpLCBmcm9tOiB0aGlzLnBhcnR5SWR4IH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBpbmNvbWluZyBtZXNzYWdlcyBmb3IgdGhlIGN1cnJlbnQgcm91bmQgYW5kIGFkdmFuY2VzIHRoZSBwcm90b2NvbC5cbiAgICpcbiAgICogLSBJbiBgV2FpdE1zZzFgOiBydW5zIHJvdW5kIDEsIHJldHVybnMgdGhpcyBwYXJ0eSdzIGBTaWduTXNnMmAgYnJvYWRjYXN0LlxuICAgKiAtIEluIGBXYWl0TXNnMmA6IHJ1bnMgcm91bmQgMiAod2hpY2ggaW50ZXJuYWxseSBmdXNlcyB0d28gU2lsZW5jZSBMYWJzIHRyYW5zaXRpb25zKSxcbiAgICogICByZXR1cm5zIHRoaXMgcGFydHkncyBgU2lnbk1zZzNgIGJyb2FkY2FzdCAocGFydGlhbCBzaWduYXR1cmUpLlxuICAgKiAtIEluIGBXYWl0TXNnM2A6IHJ1bnMgcm91bmQgMywgY29tcGxldGVzIERTRywgcmV0dXJucyBgW11gLlxuICAgKlxuICAgKiBUaGUgY2FsbGVyIHBhc3NlcyBib3RoIG1lc3NhZ2VzIChvd24gKyBjb3VudGVycGFydCkgZm9yIHN5bW1ldHJ5IHdpdGhcbiAgICogYFJlZFBhbGxhc0RLRy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzYC4gT3duIG1lc3NhZ2UgaXMgZmlsdGVyZWQgb3V0IGludGVybmFsbHk7IG9ubHkgdGhlXG4gICAqIGNvdW50ZXJwYXJ0J3MgcGF5bG9hZCBpcyBmb3J3YXJkZWQgdG8gdGhlIFdBU00gcm91bmQgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlc0Zvckl0aFJvdW5kIC0gQm90aCBtZXNzYWdlcyBmb3IgdGhpcyByb3VuZCAob3duICsgY291bnRlcnBhcnQpLlxuICAgKi9cbiAgaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlc0Zvckl0aFJvdW5kOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyk6IERlc2VyaWFsaXplZE1lc3NhZ2VzIHtcbiAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gUmVkUGFsbGFzRHNnU3RhdGUuQ29tcGxldGUpIHtcbiAgICAgIHRocm93IEVycm9yKCdEU0cgc2Vzc2lvbiBhbHJlYWR5IGNvbXBsZXRlZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gUmVkUGFsbGFzRHNnU3RhdGUuVW5pbml0aWFsaXplZCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0RTRyBzZXNzaW9uIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gUmVkUGFsbGFzRHNnU3RhdGUuSW5pdCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdEU0cgc2Vzc2lvbiBtdXN0IGNhbGwgZ2V0Rmlyc3RNZXNzYWdlKCkgYmVmb3JlIGhhbmRsaW5nIGluY29taW5nIG1lc3NhZ2VzLiBDYWxsIGdldEZpcnN0TWVzc2FnZSgpIGZpcnN0LidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChtZXNzYWdlc0Zvckl0aFJvdW5kLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgRXJyb3IoJ0ludmFsaWQgbnVtYmVyIG9mIG1lc3NhZ2VzIGZvciB0aGUgcm91bmQuIEV4cGVjdGVkIDIgbWVzc2FnZXMgKG93biArIGNvdW50ZXJwYXJ0KSBmb3IgMi1vZi0zIERTRycpO1xuICAgIH1cblxuICAgIGNvbnN0IHBlZXJNZXNzYWdlcyA9IG1lc3NhZ2VzRm9ySXRoUm91bmQuZmlsdGVyKChtKSA9PiBtLmZyb20gIT09IHRoaXMucGFydHlJZHgpO1xuICAgIGlmIChwZWVyTWVzc2FnZXMubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSAxIGNvdW50ZXJwYXJ0IG1lc3NhZ2U7IGdvdCAke3BlZXJNZXNzYWdlcy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIGNvbnN0IHBlZXJNc2cgPSBwZWVyTWVzc2FnZXNbMF07XG4gICAgaWYgKHBlZXJNc2cuZnJvbSAhPT0gdGhpcy5vdGhlclBhcnR5SWR4KSB7XG4gICAgICB0aHJvdyBFcnJvcihgVW5leHBlY3RlZCBjb3VudGVycGFydCBwYXJ0eSBpbmRleDogZ290ICR7cGVlck1zZy5mcm9tfSwgZXhwZWN0ZWQgJHt0aGlzLm90aGVyUGFydHlJZHh9YCk7XG4gICAgfVxuICAgIGNvbnN0IHBlZXJQYXlsb2FkID0gQnVmZmVyLmZyb20ocGVlck1zZy5wYXlsb2FkKTtcbiAgICBjb25zdCB3YXNtID0gdGhpcy5nZXRXYXNtTXBzKCk7XG5cbiAgICBpZiAodGhpcy5kc2dTdGF0ZSA9PT0gUmVkUGFsbGFzRHNnU3RhdGUuV2FpdE1zZzEpIHtcbiAgICAgIGFzc2VydCh0aGlzLmRzZ1N0YXRlQnl0ZXMsICdkc2dTdGF0ZUJ5dGVzIG11c3QgYmUgc2V0IGluIFdhaXRNc2cxJyk7XG4gICAgICBsZXQgcmVzdWx0OiBNc2dTdGF0ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IHdhc20ucmVkcGFsbGFzX2RzZ19yb3VuZDFfcHJvY2VzcyhwZWVyUGF5bG9hZCwgdGhpcy5kc2dTdGF0ZUJ5dGVzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIG1lc3NhZ2VzIGZyb20gcGFydHkgJHt0aGlzLnBhcnR5SWR4fSwgcm91bmQgJHt0aGlzLmRzZ1N0YXRlfTogJHtlcnJ9YCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRzZ1N0YXRlQnl0ZXMgPSBCdWZmZXIuZnJvbShyZXN1bHQuc3RhdGUpO1xuICAgICAgdGhpcy5kc2dTdGF0ZSA9IFJlZFBhbGxhc0RzZ1N0YXRlLldhaXRNc2cyO1xuICAgICAgcmV0dXJuIFt7IHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KHJlc3VsdC5tc2cpLCBmcm9tOiB0aGlzLnBhcnR5SWR4IH1dO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRzZ1N0YXRlID09PSBSZWRQYWxsYXNEc2dTdGF0ZS5XYWl0TXNnMikge1xuICAgICAgYXNzZXJ0KHRoaXMuZHNnU3RhdGVCeXRlcywgJ2RzZ1N0YXRlQnl0ZXMgbXVzdCBiZSBzZXQgaW4gV2FpdE1zZzInKTtcbiAgICAgIGxldCByZXN1bHQ6IE1zZ1N0YXRlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gd2FzbS5yZWRwYWxsYXNfZHNnX3JvdW5kMl9wcm9jZXNzKHBlZXJQYXlsb2FkLCB0aGlzLmRzZ1N0YXRlQnl0ZXMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbWVzc2FnZXMgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9LCByb3VuZCAke3RoaXMuZHNnU3RhdGV9OiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZHNnU3RhdGVCeXRlcyA9IEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGF0ZSk7XG4gICAgICB0aGlzLmRzZ1N0YXRlID0gUmVkUGFsbGFzRHNnU3RhdGUuV2FpdE1zZzM7XG4gICAgICByZXR1cm4gW3sgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkocmVzdWx0Lm1zZyksIGZyb206IHRoaXMucGFydHlJZHggfV07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IFJlZFBhbGxhc0RzZ1N0YXRlLldhaXRNc2czKSB7XG4gICAgICBhc3NlcnQodGhpcy5kc2dTdGF0ZUJ5dGVzLCAnZHNnU3RhdGVCeXRlcyBtdXN0IGJlIHNldCBpbiBXYWl0TXNnMycpO1xuICAgICAgbGV0IHJlc3VsdDogUmVkUGFsbGFzU2lnbmF0dXJlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gd2FzbS5yZWRwYWxsYXNfZHNnX3JvdW5kM19wcm9jZXNzKHBlZXJQYXlsb2FkLCB0aGlzLmRzZ1N0YXRlQnl0ZXMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbWVzc2FnZXMgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9LCByb3VuZCAke3RoaXMuZHNnU3RhdGV9OiAke2Vycn1gKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2lnbmF0dXJlUmVzdWx0ID0ge1xuICAgICAgICBzaWduYXR1cmU6IEJ1ZmZlci5mcm9tKHJlc3VsdC5zaWduYXR1cmUpLFxuICAgICAgICByazogQnVmZmVyLmZyb20ocmVzdWx0LnJrKSxcbiAgICAgICAgYWxwaGE6IEJ1ZmZlci5mcm9tKHJlc3VsdC5hbHBoYSksXG4gICAgICB9O1xuICAgICAgdGhpcy5kc2dTdGF0ZUJ5dGVzID0gbnVsbDtcbiAgICAgIHRoaXMuZHNnU3RhdGUgPSBSZWRQYWxsYXNEc2dTdGF0ZS5Db21wbGV0ZTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB0aHJvdyBFcnJvcignVW5leHBlY3RlZCBEU0cgc3RhdGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaW5hbCBzaWduYXR1cmUgYnVuZGxlIHByb2R1Y2VkIGJ5IHJvdW5kIDM6IHRoZSA2NC1ieXRlIHJhdyBSZWRQYWxsYXNcbiAgICogc2lnbmF0dXJlLCB0aGUgcmFuZG9taXplZCB2ZXJpZmljYXRpb24ga2V5IGBya2AgaXQgbXVzdCBiZSB2ZXJpZmllZCBhZ2FpbnN0ICh2aWFcbiAgICogYHJlZHBhbGxhc192ZXJpZnkocmssIHNpZ25hdHVyZSwgbWVzc2FnZSlgIOKAlCBOT1QgdGhlIERLRyBwdWJsaWMga2V5KSwgYW5kIHRoZVxuICAgKiBgYWxwaGFgIHJhbmRvbWl6ZXIgc2NhbGFyIHVzZWQgdG8gZGVyaXZlIGBya2AgZnJvbSB0aGUgREtHIHB1YmxpYyBrZXkuXG4gICAqL1xuICBnZXRTaWduYXR1cmUoKTogUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0IHtcbiAgICBpZiAoIXRoaXMuc2lnbmF0dXJlUmVzdWx0KSB7XG4gICAgICB0aHJvdyBFcnJvcignRFNHIHNlc3Npb24gaGFzIG5vdCBwcm9kdWNlZCBhIHNpZ25hdHVyZSB5ZXQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2lnbmF0dXJlUmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydHMgdGhlIGN1cnJlbnQgc2Vzc2lvbiBzdGF0ZSBhcyBhIEpTT04gc3RyaW5nIGZvciBwZXJzaXN0ZW5jZS5cbiAgICogSW5jbHVkZXMgdGhlIG9wYXF1ZSByb3VuZCBzdGF0ZSBieXRlcyBwbHVzIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlLWVudGVyIHRoZVxuICAgKiBwcm90b2NvbCBhZnRlciBhIHJlc3RhcnQgKGtleXNoYXJlLCBtZXNzYWdlLCBjb3VudGVycGFydCkuXG4gICAqL1xuICBnZXRTZXNzaW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IFJlZFBhbGxhc0RzZ1N0YXRlLkNvbXBsZXRlKSB7XG4gICAgICB0aHJvdyBFcnJvcignRFNHIHNlc3Npb24gaXMgY29tcGxldGUuIEV4cG9ydGluZyB0aGUgc2Vzc2lvbiBpcyBub3QgYWxsb3dlZC4nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IFJlZFBhbGxhc0RzZ1N0YXRlLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdEU0cgc2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHNnU3RhdGUgPT09IFJlZFBhbGxhc0RzZ1N0YXRlLkluaXQpIHtcbiAgICAgIHRocm93IEVycm9yKCdEU0cgc2Vzc2lvbiBtdXN0IHByb2R1Y2UgaXRzIGZpcnN0IG1lc3NhZ2UgYmVmb3JlIGV4cG9ydGluZy4nKTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGRzZ1N0YXRlQnl0ZXM6IHRoaXMuZHNnU3RhdGVCeXRlcz8udG9TdHJpbmcoJ2Jhc2U2NCcpID8/IG51bGwsXG4gICAgICBkc2dSb3VuZDogdGhpcy5kc2dTdGF0ZSxcbiAgICAgIGtleVNoYXJlOiB0aGlzLmtleVNoYXJlPy50b1N0cmluZygnYmFzZTY0JykgPz8gbnVsbCxcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZT8udG9TdHJpbmcoJ2Jhc2U2NCcpID8/IG51bGwsXG4gICAgICBwYXJ0eUlkeDogdGhpcy5wYXJ0eUlkeCxcbiAgICAgIG90aGVyUGFydHlJZHg6IHRoaXMub3RoZXJQYXJ0eUlkeCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyBhIHByZXZpb3VzbHkgZXhwb3J0ZWQgc2Vzc2lvbi4gQWxsb3dzIHRoZSBwcm90b2NvbCB0byBjb250aW51ZSBmcm9tXG4gICAqIHdoZXJlIGl0IGxlZnQgb2ZmLCBhcyBpZiB0aGUgcm91bmQgc3RhdGUgd2FzIGxvYWRlZCBmcm9tIGEgZGF0YWJhc2UuXG4gICAqL1xuICBhc3luYyByZXN0b3JlU2Vzc2lvbihzZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRXYXNtTXBzKCk7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc2Vzc2lvbik7XG4gICAgaWYgKCFPYmplY3QudmFsdWVzKFJlZFBhbGxhc0RzZ1N0YXRlKS5pbmNsdWRlcyhkYXRhLmRzZ1JvdW5kKSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgZHNnUm91bmQgaW4gc2Vzc2lvbjogJHtkYXRhLmRzZ1JvdW5kfWApO1xuICAgIH1cbiAgICBpZiAoZGF0YS5kc2dSb3VuZCA9PT0gUmVkUGFsbGFzRHNnU3RhdGUuVW5pbml0aWFsaXplZCB8fCBkYXRhLmRzZ1JvdW5kID09PSBSZWRQYWxsYXNEc2dTdGF0ZS5Jbml0KSB7XG4gICAgICB0aHJvdyBFcnJvcihgQ2Fubm90IHJlc3RvcmUgRFNHIHNlc3Npb24gaW4gc3RhdGUgJHtkYXRhLmRzZ1JvdW5kfWApO1xuICAgIH1cbiAgICBpZiAoZGF0YS5kc2dSb3VuZCA9PT0gUmVkUGFsbGFzRHNnU3RhdGUuQ29tcGxldGUpIHtcbiAgICAgIHRocm93IEVycm9yKCdEU0cgc2Vzc2lvbiBpcyBjb21wbGV0ZS4gUmVzdG9yaW5nIHRoZSBzZXNzaW9uIGlzIG5vdCBhbGxvd2VkLicpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEucGFydHlJZHggIT09ICdudW1iZXInIHx8IGRhdGEucGFydHlJZHggPCAwIHx8IGRhdGEucGFydHlJZHggPiAyKSB7XG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBwYXJ0eUlkeCBpbiBzZXNzaW9uOiAke2RhdGEucGFydHlJZHh9YCk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBkYXRhLm90aGVyUGFydHlJZHggIT09ICdudW1iZXInIHx8XG4gICAgICBkYXRhLm90aGVyUGFydHlJZHggPCAwIHx8XG4gICAgICBkYXRhLm90aGVyUGFydHlJZHggPiAyIHx8XG4gICAgICBkYXRhLm90aGVyUGFydHlJZHggPT09IGRhdGEucGFydHlJZHhcbiAgICApIHtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIG90aGVyUGFydHlJZHggaW4gc2Vzc2lvbjogJHtkYXRhLm90aGVyUGFydHlJZHh9YCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcnR5SWR4ICE9PSBkYXRhLnBhcnR5SWR4KSB7XG4gICAgICB0aHJvdyBFcnJvcihgU2Vzc2lvbiBwYXJ0eUlkeCAke2RhdGEucGFydHlJZHh9IGRvZXMgbm90IG1hdGNoIGluc3RhbmNlICR7dGhpcy5wYXJ0eUlkeH1gKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhLmRzZ1N0YXRlQnl0ZXMgIT09ICdzdHJpbmcnIHx8IGRhdGEuZHNnU3RhdGVCeXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IEVycm9yKGBSb3VuZCAke2RhdGEuZHNnUm91bmR9IHJlcXVpcmVzIGRzZ1N0YXRlQnl0ZXNgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhLmtleVNoYXJlICE9PSAnc3RyaW5nJyB8fCBkYXRhLmtleVNoYXJlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Jlc3RvcmVkIHNlc3Npb24gbWlzc2luZyBrZXlTaGFyZScpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEubWVzc2FnZSAhPT0gJ3N0cmluZycgfHwgZGF0YS5tZXNzYWdlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Jlc3RvcmVkIHNlc3Npb24gbWlzc2luZyBtZXNzYWdlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZHNnU3RhdGVCeXRlcyA9IEJ1ZmZlci5mcm9tKGRhdGEuZHNnU3RhdGVCeXRlcywgJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGtleVNoYXJlID0gQnVmZmVyLmZyb20oZGF0YS5rZXlTaGFyZSwgJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBCdWZmZXIuZnJvbShkYXRhLm1lc3NhZ2UsICdiYXNlNjQnKTtcbiAgICBpZiAoZHNnU3RhdGVCeXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IEVycm9yKGBSb3VuZCAke2RhdGEuZHNnUm91bmR9IHJlcXVpcmVzIGRzZ1N0YXRlQnl0ZXNgKTtcbiAgICB9XG4gICAgaWYgKGtleVNoYXJlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Jlc3RvcmVkIHNlc3Npb24gbWlzc2luZyBrZXlTaGFyZScpO1xuICAgIH1cbiAgICBpZiAobWVzc2FnZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IEVycm9yKCdSZXN0b3JlZCBzZXNzaW9uIG1pc3NpbmcgbWVzc2FnZScpO1xuICAgIH1cblxuICAgIHRoaXMuZHNnU3RhdGVCeXRlcyA9IGRzZ1N0YXRlQnl0ZXM7XG4gICAgdGhpcy5kc2dTdGF0ZSA9IGRhdGEuZHNnUm91bmQ7XG4gICAgdGhpcy5rZXlTaGFyZSA9IGtleVNoYXJlO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5wYXJ0eUlkeCA9IGRhdGEucGFydHlJZHg7XG4gICAgdGhpcy5vdGhlclBhcnR5SWR4ID0gZGF0YS5vdGhlclBhcnR5SWR4O1xuICB9XG59XG4iXX0=
@@ -1,4 +1,7 @@
1
1
  export * as RedPallasMPSDkg from './dkg';
2
+ export * as RedPallasMPSDsg from './dsg';
2
3
  export * as RedPallasMPSUtil from './util';
3
4
  export * as RedPallasMPSTypes from './types';
5
+ export * as RedPallasMPSComms from './commsLayer';
6
+ export type { RedPallasSignatureResult } from './types';
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tss/redpallas-mps/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,gBAAgB,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,iBAAiB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tss/redpallas-mps/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,eAAe,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,gBAAgB,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,iBAAiB,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,iBAAiB,MAAM,cAAc,CAAC;AAClD,YAAY,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC"}
@@ -33,8 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.RedPallasMPSTypes = exports.RedPallasMPSUtil = exports.RedPallasMPSDkg = void 0;
36
+ exports.RedPallasMPSComms = exports.RedPallasMPSTypes = exports.RedPallasMPSUtil = exports.RedPallasMPSDsg = exports.RedPallasMPSDkg = void 0;
37
37
  exports.RedPallasMPSDkg = __importStar(require("./dkg"));
38
+ exports.RedPallasMPSDsg = __importStar(require("./dsg"));
38
39
  exports.RedPallasMPSUtil = __importStar(require("./util"));
39
40
  exports.RedPallasMPSTypes = __importStar(require("./types"));
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL3JlZHBhbGxhcy1tcHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseURBQXlDO0FBQ3pDLDJEQUEyQztBQUMzQyw2REFBNkMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBSZWRQYWxsYXNNUFNEa2cgZnJvbSAnLi9ka2cnO1xuZXhwb3J0ICogYXMgUmVkUGFsbGFzTVBTVXRpbCBmcm9tICcuL3V0aWwnO1xuZXhwb3J0ICogYXMgUmVkUGFsbGFzTVBTVHlwZXMgZnJvbSAnLi90eXBlcyc7XG4iXX0=
41
+ exports.RedPallasMPSComms = __importStar(require("./commsLayer"));
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL3JlZHBhbGxhcy1tcHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseURBQXlDO0FBQ3pDLHlEQUF5QztBQUN6QywyREFBMkM7QUFDM0MsNkRBQTZDO0FBQzdDLGtFQUFrRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIFJlZFBhbGxhc01QU0RrZyBmcm9tICcuL2RrZyc7XG5leHBvcnQgKiBhcyBSZWRQYWxsYXNNUFNEc2cgZnJvbSAnLi9kc2cnO1xuZXhwb3J0ICogYXMgUmVkUGFsbGFzTVBTVXRpbCBmcm9tICcuL3V0aWwnO1xuZXhwb3J0ICogYXMgUmVkUGFsbGFzTVBTVHlwZXMgZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyBSZWRQYWxsYXNNUFNDb21tcyBmcm9tICcuL2NvbW1zTGF5ZXInO1xuZXhwb3J0IHR5cGUgeyBSZWRQYWxsYXNTaWduYXR1cmVSZXN1bHQgfSBmcm9tICcuL3R5cGVzJztcbiJdfQ==
@@ -24,6 +24,51 @@ export declare enum RedPallasDkgState {
24
24
  /** DKG session has completed successfully and key shares are available */
25
25
  Complete = "Complete"
26
26
  }
27
+ /**
28
+ * Represents the state of a RedPallas DSG (Distributed Sign Generation) session.
29
+ *
30
+ * Mirrors the EdDSA MPS `DsgState`, except `redpallas_dsg_round0_process` does not take a
31
+ * derivation path: RedPallas key derivation (ask/nk/rivk/ivks) happens separately, upstream,
32
+ * as part of DKG (see `RedPallasDkgState`); the DSG round functions only ever operate on an
33
+ * already-derived (or root) `Keyshare`.
34
+ */
35
+ export declare enum RedPallasDsgState {
36
+ /** DSG session has not been initialized */
37
+ Uninitialized = "Uninitialized",
38
+ /** initDsg() has been called; ready for getFirstMessage() */
39
+ Init = "Init",
40
+ /** R0 broadcast emitted; waiting for counterpart's R0 broadcast (SignMsg1) */
41
+ WaitMsg1 = "WaitMsg1",
42
+ /** R1 broadcast emitted; waiting for counterpart's R1 broadcast (SignMsg2) */
43
+ WaitMsg2 = "WaitMsg2",
44
+ /** R2 broadcast emitted; waiting for counterpart's R2 broadcast (SignMsg3, the partial sig) */
45
+ WaitMsg3 = "WaitMsg3",
46
+ /** Final RedPallas signature (signature/rk/alpha) is available via getSignature() */
47
+ Complete = "Complete"
48
+ }
49
+ /**
50
+ * The final output of a RedPallas DSG session.
51
+ *
52
+ * - `signature` is the 64-byte raw Schnorr (RedPallas) signature.
53
+ * - `rk` is the randomized verification key that the signature must be verified against
54
+ * (i.e. `redpallas_verify(rk, signature, message)`), not the original DKG public key.
55
+ * - `alpha` is the 32-byte randomizer scalar used to re-randomize the DKG public key into
56
+ * `rk` (`rk = pk + [alpha]G`). Callers that need to independently re-derive/verify `rk`
57
+ * from the DKG public key can use `alpha` to do so.
58
+ */
59
+ export interface RedPallasSignatureResult {
60
+ signature: Buffer;
61
+ rk: Buffer;
62
+ alpha: Buffer;
63
+ }
64
+ /** A PGP detached-signed message by a party.
65
+ * `message` is the raw payload encoded as base64.
66
+ * `signature` is an armored PGP detached signature over those bytes.
67
+ */
68
+ export interface MPSSignedMessage {
69
+ message: string;
70
+ signature: string;
71
+ }
27
72
  export interface Message<T> {
28
73
  payload: T;
29
74
  from: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/redpallas-mps/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B,eAAO,MAAM,4BAA4B;;;EAGvC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAErF;;;;;;;GAOG;AACH,oBAAY,iBAAiB;IAC3B,2CAA2C;IAC3C,aAAa,kBAAkB;IAC/B,4DAA4D;IAC5D,IAAI,SAAS;IACb,wEAAwE;IACxE,QAAQ,aAAa;IACrB,yEAAyE;IACzE,QAAQ,aAAa;IACrB,0EAA0E;IAC1E,QAAQ,aAAa;CACtB;AAED,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtD,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;AAEzD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,iBAAiB,CAE5E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,mBAAmB,CAE9E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,CAEhF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,CAElF;AAED,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,UAAU,GAAG,wBAAwB,CAMxG"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/redpallas-mps/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,OAAO,CAAC;AAE3B,eAAO,MAAM,4BAA4B;;;EAGvC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAErF;;;;;;;GAOG;AACH,oBAAY,iBAAiB;IAC3B,2CAA2C;IAC3C,aAAa,kBAAkB;IAC/B,4DAA4D;IAC5D,IAAI,SAAS;IACb,wEAAwE;IACxE,QAAQ,aAAa;IACrB,yEAAyE;IACzE,QAAQ,aAAa;IACrB,0EAA0E;IAC1E,QAAQ,aAAa;CACtB;AAED;;;;;;;GAOG;AACH,oBAAY,iBAAiB;IAC3B,2CAA2C;IAC3C,aAAa,kBAAkB;IAC/B,6DAA6D;IAC7D,IAAI,SAAS;IACb,8EAA8E;IAC9E,QAAQ,aAAa;IACrB,8EAA8E;IAC9E,QAAQ,aAAa;IACrB,+FAA+F;IAC/F,QAAQ,aAAa;IACrB,qFAAqF;IACrF,QAAQ,aAAa;CACtB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtD,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;AAEzD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,iBAAiB,CAE5E;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,GAAG,mBAAmB,CAE9E;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,oBAAoB,GAAG,kBAAkB,CAEhF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB,GAAG,oBAAoB,CAElF;AAED,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,UAAU,GAAG,wBAAwB,CAMxG"}
@@ -33,7 +33,7 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.RedPallasDkgState = exports.RedPallasReducedKeyShareType = void 0;
36
+ exports.RedPallasDsgState = exports.RedPallasDkgState = exports.RedPallasReducedKeyShareType = void 0;
37
37
  exports.serializeMessage = serializeMessage;
38
38
  exports.deserializeMessage = deserializeMessage;
39
39
  exports.serializeMessages = serializeMessages;
@@ -67,6 +67,29 @@ var RedPallasDkgState;
67
67
  /** DKG session has completed successfully and key shares are available */
68
68
  RedPallasDkgState["Complete"] = "Complete";
69
69
  })(RedPallasDkgState || (exports.RedPallasDkgState = RedPallasDkgState = {}));
70
+ /**
71
+ * Represents the state of a RedPallas DSG (Distributed Sign Generation) session.
72
+ *
73
+ * Mirrors the EdDSA MPS `DsgState`, except `redpallas_dsg_round0_process` does not take a
74
+ * derivation path: RedPallas key derivation (ask/nk/rivk/ivks) happens separately, upstream,
75
+ * as part of DKG (see `RedPallasDkgState`); the DSG round functions only ever operate on an
76
+ * already-derived (or root) `Keyshare`.
77
+ */
78
+ var RedPallasDsgState;
79
+ (function (RedPallasDsgState) {
80
+ /** DSG session has not been initialized */
81
+ RedPallasDsgState["Uninitialized"] = "Uninitialized";
82
+ /** initDsg() has been called; ready for getFirstMessage() */
83
+ RedPallasDsgState["Init"] = "Init";
84
+ /** R0 broadcast emitted; waiting for counterpart's R0 broadcast (SignMsg1) */
85
+ RedPallasDsgState["WaitMsg1"] = "WaitMsg1";
86
+ /** R1 broadcast emitted; waiting for counterpart's R1 broadcast (SignMsg2) */
87
+ RedPallasDsgState["WaitMsg2"] = "WaitMsg2";
88
+ /** R2 broadcast emitted; waiting for counterpart's R2 broadcast (SignMsg3, the partial sig) */
89
+ RedPallasDsgState["WaitMsg3"] = "WaitMsg3";
90
+ /** Final RedPallas signature (signature/rk/alpha) is available via getSignature() */
91
+ RedPallasDsgState["Complete"] = "Complete";
92
+ })(RedPallasDsgState || (exports.RedPallasDsgState = RedPallasDsgState = {}));
70
93
  function serializeMessage(msg) {
71
94
  return { from: msg.from, payload: Buffer.from(msg.payload).toString('base64') };
72
95
  }
@@ -86,4 +109,4 @@ function getDecodedReducedKeyShare(reducedKeyShare) {
86
109
  }
87
110
  return decoded.right;
88
111
  }
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL3JlZHBhbGxhcy1tcHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkNBLDRDQUVDO0FBRUQsZ0RBRUM7QUFFRCw4Q0FFQztBQUVELGtEQUVDO0FBRUQsOERBTUM7QUFuRUQsbUNBQWdDO0FBQ2hDLHlDQUFzQztBQUN0Qyx5Q0FBMkI7QUFFZCxRQUFBLDRCQUE0QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakQsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0NBQ3ZCLENBQUMsQ0FBQztBQUlIOzs7Ozs7O0dBT0c7QUFDSCxJQUFZLGlCQVdYO0FBWEQsV0FBWSxpQkFBaUI7SUFDM0IsMkNBQTJDO0lBQzNDLG9EQUErQixDQUFBO0lBQy9CLDREQUE0RDtJQUM1RCxrQ0FBYSxDQUFBO0lBQ2Isd0VBQXdFO0lBQ3hFLDBDQUFxQixDQUFBO0lBQ3JCLHlFQUF5RTtJQUN6RSwwQ0FBcUIsQ0FBQTtJQUNyQiwwRUFBMEU7SUFDMUUsMENBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVhXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBVzVCO0FBZUQsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBd0I7SUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNsRixDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsR0FBc0I7SUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUN6RSxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBMEI7SUFDMUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLElBQXdCO0lBQzFELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFnQix5QkFBeUIsQ0FBQyxlQUFvQztJQUM1RSxNQUFNLE9BQU8sR0FBRyxvQ0FBNEIsQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFNLEVBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUM3RSxJQUFJLElBQUEsZUFBTSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSAnY2Jvci14JztcbmltcG9ydCB7IGlzTGVmdCB9IGZyb20gJ2ZwLXRzL0VpdGhlcic7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcblxuZXhwb3J0IGNvbnN0IFJlZFBhbGxhc1JlZHVjZWRLZXlTaGFyZVR5cGUgPSB0LnR5cGUoe1xuICBrZXlTaGFyZTogdC5hcnJheSh0Lm51bWJlciksXG4gIHB1YjogdC5hcnJheSh0Lm51bWJlciksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVkUGFsbGFzUmVkdWNlZEtleVNoYXJlID0gdC5UeXBlT2Y8dHlwZW9mIFJlZFBhbGxhc1JlZHVjZWRLZXlTaGFyZVR5cGU+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIGEgUmVkUGFsbGFzIERLRyAoRGlzdHJpYnV0ZWQgS2V5IEdlbmVyYXRpb24pIHNlc3Npb24uXG4gKlxuICogVW5saWtlIHRoZSBFZERTQSBNUFMgYERrZ1N0YXRlYCwgdGhlcmUgaXMgbm8gYFNoYXJlYCBzdGF0ZTogYHJlZHBhbGxhc19ka2dfcm91bmQyX3Byb2Nlc3NgXG4gKiByZXR1cm5zIGEgYE1zZ0Rlcml2YXRpb25Jbml0YCAobXNnL3BrL3NoYXJlL3N0YXRlKSBkaXJlY3RseSwgY29tcGxldGluZyB0aGUgREtHIHNlc3Npb24gaW5cbiAqIG9uZSBzdGVwLiBLZXkgZGVyaXZhdGlvbiAoYXNrL25rL3JpdmsvaXZrcykgaXMgYSBzZXBhcmF0ZSwgc3Vic2VxdWVudCwgcGxhdGZvcm0tc2lkZS1vbmx5XG4gKiBwcm9jZXNzIChgcmVkcGFsbGFzX2Rlcml2YXRpb25fcHJvY2Vzc2ApIG5vdCBtb2RlbGxlZCBoZXJlLlxuICovXG5leHBvcnQgZW51bSBSZWRQYWxsYXNEa2dTdGF0ZSB7XG4gIC8qKiBES0cgc2Vzc2lvbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgKi9cbiAgVW5pbml0aWFsaXplZCA9ICdVbmluaXRpYWxpemVkJyxcbiAgLyoqIERLRyBzZXNzaW9uIGhhcyBiZWVuIGluaXRpYWxpemVkIChJbml0IHN0YXRlIGluIFdBU00pICovXG4gIEluaXQgPSAnSW5pdCcsXG4gIC8qKiBES0cgc2Vzc2lvbiBpcyB3YWl0aW5nIGZvciBmaXJzdCBtZXNzYWdlIChXYWl0TXNnMSBzdGF0ZSBpbiBXQVNNKSAqL1xuICBXYWl0TXNnMSA9ICdXYWl0TXNnMScsXG4gIC8qKiBES0cgc2Vzc2lvbiBpcyB3YWl0aW5nIGZvciBzZWNvbmQgbWVzc2FnZSAoV2FpdE1zZzIgc3RhdGUgaW4gV0FTTSkgKi9cbiAgV2FpdE1zZzIgPSAnV2FpdE1zZzInLFxuICAvKiogREtHIHNlc3Npb24gaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYW5kIGtleSBzaGFyZXMgYXJlIGF2YWlsYWJsZSAqL1xuICBDb21wbGV0ZSA9ICdDb21wbGV0ZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZTxUPiB7XG4gIHBheWxvYWQ6IFQ7XG4gIGZyb206IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZE1lc3NhZ2UgPSBNZXNzYWdlPHN0cmluZz47XG5cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRNZXNzYWdlcyA9IE1lc3NhZ2U8c3RyaW5nPltdO1xuXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRNZXNzYWdlID0gTWVzc2FnZTxVaW50OEFycmF5PjtcblxuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkTWVzc2FnZXMgPSBNZXNzYWdlPFVpbnQ4QXJyYXk+W107XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVNZXNzYWdlKG1zZzogRGVzZXJpYWxpemVkTWVzc2FnZSk6IFNlcmlhbGl6ZWRNZXNzYWdlIHtcbiAgcmV0dXJuIHsgZnJvbTogbXNnLmZyb20sIHBheWxvYWQ6IEJ1ZmZlci5mcm9tKG1zZy5wYXlsb2FkKS50b1N0cmluZygnYmFzZTY0JykgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplTWVzc2FnZShtc2c6IFNlcmlhbGl6ZWRNZXNzYWdlKTogRGVzZXJpYWxpemVkTWVzc2FnZSB7XG4gIHJldHVybiB7IGZyb206IG1zZy5mcm9tLCBwYXlsb2FkOiBCdWZmZXIuZnJvbShtc2cucGF5bG9hZCwgJ2Jhc2U2NCcpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVNZXNzYWdlcyhtc2dzOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyk6IFNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gIHJldHVybiBtc2dzLm1hcChzZXJpYWxpemVNZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplTWVzc2FnZXMobXNnczogU2VyaWFsaXplZE1lc3NhZ2VzKTogRGVzZXJpYWxpemVkTWVzc2FnZXMge1xuICByZXR1cm4gbXNncy5tYXAoZGVzZXJpYWxpemVNZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29kZWRSZWR1Y2VkS2V5U2hhcmUocmVkdWNlZEtleVNoYXJlOiBCdWZmZXIgfCBVaW50OEFycmF5KTogUmVkUGFsbGFzUmVkdWNlZEtleVNoYXJlIHtcbiAgY29uc3QgZGVjb2RlZCA9IFJlZFBhbGxhc1JlZHVjZWRLZXlTaGFyZVR5cGUuZGVjb2RlKGRlY29kZShyZWR1Y2VkS2V5U2hhcmUpKTtcbiAgaWYgKGlzTGVmdChkZWNvZGVkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIHJlZHVjZWRLZXlTaGFyZTogJHtkZWNvZGVkLmxlZnR9YCk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZWQucmlnaHQ7XG59XG4iXX0=
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL3JlZHBhbGxhcy1tcHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkZBLDRDQUVDO0FBRUQsZ0RBRUM7QUFFRCw4Q0FFQztBQUVELGtEQUVDO0FBRUQsOERBTUM7QUFuSEQsbUNBQWdDO0FBQ2hDLHlDQUFzQztBQUN0Qyx5Q0FBMkI7QUFFZCxRQUFBLDRCQUE0QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakQsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0NBQ3ZCLENBQUMsQ0FBQztBQUlIOzs7Ozs7O0dBT0c7QUFDSCxJQUFZLGlCQVdYO0FBWEQsV0FBWSxpQkFBaUI7SUFDM0IsMkNBQTJDO0lBQzNDLG9EQUErQixDQUFBO0lBQy9CLDREQUE0RDtJQUM1RCxrQ0FBYSxDQUFBO0lBQ2Isd0VBQXdFO0lBQ3hFLDBDQUFxQixDQUFBO0lBQ3JCLHlFQUF5RTtJQUN6RSwwQ0FBcUIsQ0FBQTtJQUNyQiwwRUFBMEU7SUFDMUUsMENBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVhXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBVzVCO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILElBQVksaUJBYVg7QUFiRCxXQUFZLGlCQUFpQjtJQUMzQiwyQ0FBMkM7SUFDM0Msb0RBQStCLENBQUE7SUFDL0IsNkRBQTZEO0lBQzdELGtDQUFhLENBQUE7SUFDYiw4RUFBOEU7SUFDOUUsMENBQXFCLENBQUE7SUFDckIsOEVBQThFO0lBQzlFLDBDQUFxQixDQUFBO0lBQ3JCLCtGQUErRjtJQUMvRiwwQ0FBcUIsQ0FBQTtJQUNyQixxRkFBcUY7SUFDckYsMENBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQWJXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBYTVCO0FBd0NELFNBQWdCLGdCQUFnQixDQUFDLEdBQXdCO0lBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDbEYsQ0FBQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLEdBQXNCO0lBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDekUsQ0FBQztBQUVELFNBQWdCLGlCQUFpQixDQUFDLElBQTBCO0lBQzFELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxJQUF3QjtJQUMxRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN0QyxDQUFDO0FBRUQsU0FBZ0IseUJBQXlCLENBQUMsZUFBb0M7SUFDNUUsTUFBTSxPQUFPLEdBQUcsb0NBQTRCLENBQUMsTUFBTSxDQUFDLElBQUEsZUFBTSxFQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDN0UsSUFBSSxJQUFBLGVBQU0sRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlY29kZSB9IGZyb20gJ2Nib3IteCc7XG5pbXBvcnQgeyBpc0xlZnQgfSBmcm9tICdmcC10cy9FaXRoZXInO1xuaW1wb3J0ICogYXMgdCBmcm9tICdpby10cyc7XG5cbmV4cG9ydCBjb25zdCBSZWRQYWxsYXNSZWR1Y2VkS2V5U2hhcmVUeXBlID0gdC50eXBlKHtcbiAga2V5U2hhcmU6IHQuYXJyYXkodC5udW1iZXIpLFxuICBwdWI6IHQuYXJyYXkodC5udW1iZXIpLFxufSk7XG5cbmV4cG9ydCB0eXBlIFJlZFBhbGxhc1JlZHVjZWRLZXlTaGFyZSA9IHQuVHlwZU9mPHR5cGVvZiBSZWRQYWxsYXNSZWR1Y2VkS2V5U2hhcmVUeXBlPjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIFJlZFBhbGxhcyBES0cgKERpc3RyaWJ1dGVkIEtleSBHZW5lcmF0aW9uKSBzZXNzaW9uLlxuICpcbiAqIFVubGlrZSB0aGUgRWREU0EgTVBTIGBEa2dTdGF0ZWAsIHRoZXJlIGlzIG5vIGBTaGFyZWAgc3RhdGU6IGByZWRwYWxsYXNfZGtnX3JvdW5kMl9wcm9jZXNzYFxuICogcmV0dXJucyBhIGBNc2dEZXJpdmF0aW9uSW5pdGAgKG1zZy9way9zaGFyZS9zdGF0ZSkgZGlyZWN0bHksIGNvbXBsZXRpbmcgdGhlIERLRyBzZXNzaW9uIGluXG4gKiBvbmUgc3RlcC4gS2V5IGRlcml2YXRpb24gKGFzay9uay9yaXZrL2l2a3MpIGlzIGEgc2VwYXJhdGUsIHN1YnNlcXVlbnQsIHBsYXRmb3JtLXNpZGUtb25seVxuICogcHJvY2VzcyAoYHJlZHBhbGxhc19kZXJpdmF0aW9uX3Byb2Nlc3NgKSBub3QgbW9kZWxsZWQgaGVyZS5cbiAqL1xuZXhwb3J0IGVudW0gUmVkUGFsbGFzRGtnU3RhdGUge1xuICAvKiogREtHIHNlc3Npb24gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkICovXG4gIFVuaW5pdGlhbGl6ZWQgPSAnVW5pbml0aWFsaXplZCcsXG4gIC8qKiBES0cgc2Vzc2lvbiBoYXMgYmVlbiBpbml0aWFsaXplZCAoSW5pdCBzdGF0ZSBpbiBXQVNNKSAqL1xuICBJbml0ID0gJ0luaXQnLFxuICAvKiogREtHIHNlc3Npb24gaXMgd2FpdGluZyBmb3IgZmlyc3QgbWVzc2FnZSAoV2FpdE1zZzEgc3RhdGUgaW4gV0FTTSkgKi9cbiAgV2FpdE1zZzEgPSAnV2FpdE1zZzEnLFxuICAvKiogREtHIHNlc3Npb24gaXMgd2FpdGluZyBmb3Igc2Vjb25kIG1lc3NhZ2UgKFdhaXRNc2cyIHN0YXRlIGluIFdBU00pICovXG4gIFdhaXRNc2cyID0gJ1dhaXRNc2cyJyxcbiAgLyoqIERLRyBzZXNzaW9uIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IGFuZCBrZXkgc2hhcmVzIGFyZSBhdmFpbGFibGUgKi9cbiAgQ29tcGxldGUgPSAnQ29tcGxldGUnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIGEgUmVkUGFsbGFzIERTRyAoRGlzdHJpYnV0ZWQgU2lnbiBHZW5lcmF0aW9uKSBzZXNzaW9uLlxuICpcbiAqIE1pcnJvcnMgdGhlIEVkRFNBIE1QUyBgRHNnU3RhdGVgLCBleGNlcHQgYHJlZHBhbGxhc19kc2dfcm91bmQwX3Byb2Nlc3NgIGRvZXMgbm90IHRha2UgYVxuICogZGVyaXZhdGlvbiBwYXRoOiBSZWRQYWxsYXMga2V5IGRlcml2YXRpb24gKGFzay9uay9yaXZrL2l2a3MpIGhhcHBlbnMgc2VwYXJhdGVseSwgdXBzdHJlYW0sXG4gKiBhcyBwYXJ0IG9mIERLRyAoc2VlIGBSZWRQYWxsYXNEa2dTdGF0ZWApOyB0aGUgRFNHIHJvdW5kIGZ1bmN0aW9ucyBvbmx5IGV2ZXIgb3BlcmF0ZSBvbiBhblxuICogYWxyZWFkeS1kZXJpdmVkIChvciByb290KSBgS2V5c2hhcmVgLlxuICovXG5leHBvcnQgZW51bSBSZWRQYWxsYXNEc2dTdGF0ZSB7XG4gIC8qKiBEU0cgc2Vzc2lvbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgKi9cbiAgVW5pbml0aWFsaXplZCA9ICdVbmluaXRpYWxpemVkJyxcbiAgLyoqIGluaXREc2coKSBoYXMgYmVlbiBjYWxsZWQ7IHJlYWR5IGZvciBnZXRGaXJzdE1lc3NhZ2UoKSAqL1xuICBJbml0ID0gJ0luaXQnLFxuICAvKiogUjAgYnJvYWRjYXN0IGVtaXR0ZWQ7IHdhaXRpbmcgZm9yIGNvdW50ZXJwYXJ0J3MgUjAgYnJvYWRjYXN0IChTaWduTXNnMSkgKi9cbiAgV2FpdE1zZzEgPSAnV2FpdE1zZzEnLFxuICAvKiogUjEgYnJvYWRjYXN0IGVtaXR0ZWQ7IHdhaXRpbmcgZm9yIGNvdW50ZXJwYXJ0J3MgUjEgYnJvYWRjYXN0IChTaWduTXNnMikgKi9cbiAgV2FpdE1zZzIgPSAnV2FpdE1zZzInLFxuICAvKiogUjIgYnJvYWRjYXN0IGVtaXR0ZWQ7IHdhaXRpbmcgZm9yIGNvdW50ZXJwYXJ0J3MgUjIgYnJvYWRjYXN0IChTaWduTXNnMywgdGhlIHBhcnRpYWwgc2lnKSAqL1xuICBXYWl0TXNnMyA9ICdXYWl0TXNnMycsXG4gIC8qKiBGaW5hbCBSZWRQYWxsYXMgc2lnbmF0dXJlIChzaWduYXR1cmUvcmsvYWxwaGEpIGlzIGF2YWlsYWJsZSB2aWEgZ2V0U2lnbmF0dXJlKCkgKi9cbiAgQ29tcGxldGUgPSAnQ29tcGxldGUnLFxufVxuXG4vKipcbiAqIFRoZSBmaW5hbCBvdXRwdXQgb2YgYSBSZWRQYWxsYXMgRFNHIHNlc3Npb24uXG4gKlxuICogLSBgc2lnbmF0dXJlYCBpcyB0aGUgNjQtYnl0ZSByYXcgU2Nobm9yciAoUmVkUGFsbGFzKSBzaWduYXR1cmUuXG4gKiAtIGBya2AgaXMgdGhlIHJhbmRvbWl6ZWQgdmVyaWZpY2F0aW9uIGtleSB0aGF0IHRoZSBzaWduYXR1cmUgbXVzdCBiZSB2ZXJpZmllZCBhZ2FpbnN0XG4gKiAgIChpLmUuIGByZWRwYWxsYXNfdmVyaWZ5KHJrLCBzaWduYXR1cmUsIG1lc3NhZ2UpYCksIG5vdCB0aGUgb3JpZ2luYWwgREtHIHB1YmxpYyBrZXkuXG4gKiAtIGBhbHBoYWAgaXMgdGhlIDMyLWJ5dGUgcmFuZG9taXplciBzY2FsYXIgdXNlZCB0byByZS1yYW5kb21pemUgdGhlIERLRyBwdWJsaWMga2V5IGludG9cbiAqICAgYHJrYCAoYHJrID0gcGsgKyBbYWxwaGFdR2ApLiBDYWxsZXJzIHRoYXQgbmVlZCB0byBpbmRlcGVuZGVudGx5IHJlLWRlcml2ZS92ZXJpZnkgYHJrYFxuICogICBmcm9tIHRoZSBES0cgcHVibGljIGtleSBjYW4gdXNlIGBhbHBoYWAgdG8gZG8gc28uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0IHtcbiAgc2lnbmF0dXJlOiBCdWZmZXI7XG4gIHJrOiBCdWZmZXI7XG4gIGFscGhhOiBCdWZmZXI7XG59XG5cbi8qKiBBIFBHUCBkZXRhY2hlZC1zaWduZWQgbWVzc2FnZSBieSBhIHBhcnR5LlxuICogYG1lc3NhZ2VgIGlzIHRoZSByYXcgcGF5bG9hZCBlbmNvZGVkIGFzIGJhc2U2NC5cbiAqIGBzaWduYXR1cmVgIGlzIGFuIGFybW9yZWQgUEdQIGRldGFjaGVkIHNpZ25hdHVyZSBvdmVyIHRob3NlIGJ5dGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1QU1NpZ25lZE1lc3NhZ2Uge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNpZ25hdHVyZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2U8VD4ge1xuICBwYXlsb2FkOiBUO1xuICBmcm9tOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRNZXNzYWdlID0gTWVzc2FnZTxzdHJpbmc+O1xuXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkTWVzc2FnZXMgPSBNZXNzYWdlPHN0cmluZz5bXTtcblxuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkTWVzc2FnZSA9IE1lc3NhZ2U8VWludDhBcnJheT47XG5cbmV4cG9ydCB0eXBlIERlc2VyaWFsaXplZE1lc3NhZ2VzID0gTWVzc2FnZTxVaW50OEFycmF5PltdO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTWVzc2FnZShtc2c6IERlc2VyaWFsaXplZE1lc3NhZ2UpOiBTZXJpYWxpemVkTWVzc2FnZSB7XG4gIHJldHVybiB7IGZyb206IG1zZy5mcm9tLCBwYXlsb2FkOiBCdWZmZXIuZnJvbShtc2cucGF5bG9hZCkudG9TdHJpbmcoJ2Jhc2U2NCcpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZU1lc3NhZ2UobXNnOiBTZXJpYWxpemVkTWVzc2FnZSk6IERlc2VyaWFsaXplZE1lc3NhZ2Uge1xuICByZXR1cm4geyBmcm9tOiBtc2cuZnJvbSwgcGF5bG9hZDogQnVmZmVyLmZyb20obXNnLnBheWxvYWQsICdiYXNlNjQnKSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTWVzc2FnZXMobXNnczogRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBTZXJpYWxpemVkTWVzc2FnZXMge1xuICByZXR1cm4gbXNncy5tYXAoc2VyaWFsaXplTWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZU1lc3NhZ2VzKG1zZ3M6IFNlcmlhbGl6ZWRNZXNzYWdlcyk6IERlc2VyaWFsaXplZE1lc3NhZ2VzIHtcbiAgcmV0dXJuIG1zZ3MubWFwKGRlc2VyaWFsaXplTWVzc2FnZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvZGVkUmVkdWNlZEtleVNoYXJlKHJlZHVjZWRLZXlTaGFyZTogQnVmZmVyIHwgVWludDhBcnJheSk6IFJlZFBhbGxhc1JlZHVjZWRLZXlTaGFyZSB7XG4gIGNvbnN0IGRlY29kZWQgPSBSZWRQYWxsYXNSZWR1Y2VkS2V5U2hhcmVUeXBlLmRlY29kZShkZWNvZGUocmVkdWNlZEtleVNoYXJlKSk7XG4gIGlmIChpc0xlZnQoZGVjb2RlZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBwYXJzZSByZWR1Y2VkS2V5U2hhcmU6ICR7ZGVjb2RlZC5sZWZ0fWApO1xuICB9XG4gIHJldHVybiBkZWNvZGVkLnJpZ2h0O1xufVxuIl19
@@ -1,4 +1,6 @@
1
1
  import { RedPallasDKG } from './dkg';
2
+ import { RedPallasDSG } from './dsg';
3
+ import { DeserializedMessages, RedPallasSignatureResult } from './types';
2
4
  /**
3
5
  * Per-party deterministic seed material. To use the same seed for both, pass it as both fields.
4
6
  * `encKey` seeds the X25519 encryption key; `dkgSeed` seeds DKG round 0.
@@ -15,4 +17,30 @@ export interface RedPallasDKGPartySeed {
15
17
  * subsequent derivation process. Must be the same value across all three parties.
16
18
  */
17
19
  export declare function generateRedPallasDKGKeyShares(derivationSeed: Buffer, seedUser?: RedPallasDKGPartySeed, seedBackup?: RedPallasDKGPartySeed, seedBitgo?: RedPallasDKGPartySeed): Promise<[RedPallasDKG, RedPallasDKG, RedPallasDKG]>;
20
+ /**
21
+ * Initializes two RedPallas DSG parties and drives them through the protocol until the
22
+ * specified round. Mirrors `executeTillRound` in `../eddsa-mps/util.ts`, minus the
23
+ * derivation path (RedPallas DSG operates on an already-(root-or-derived) keyshare; there
24
+ * is no per-signing-session derivation path).
25
+ *
26
+ * @param round - Round to execute until (1–3). Returns intermediate message arrays for 1–2,
27
+ * or the final `RedPallasSignatureResult` (signature/rk/alpha) for 3.
28
+ * @param party1Dsg - First DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
29
+ * @param party2Dsg - Second DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
30
+ * @param keyShare1 - Key share for the first party.
31
+ * @param keyShare2 - Key share for the second party.
32
+ * @param message - Raw message bytes to sign.
33
+ */
34
+ export declare function executeTillRound(round: number, party1Dsg: RedPallasDSG, party2Dsg: RedPallasDSG, keyShare1: Buffer, keyShare2: Buffer, message: Buffer): Promise<DeserializedMessages[] | RedPallasSignatureResult>;
35
+ /**
36
+ * Verifies a `RedPallasSignatureResult` against the raw message.
37
+ *
38
+ * IMPORTANT: unlike EdDSA, RedPallas signatures must be verified against `rk` — the
39
+ * randomized verification key produced alongside the signature by DSG round3 — and NOT
40
+ * against the DKG (or derived) public key directly. `rk = pk + [alpha]G`; `alpha` is
41
+ * included in `RedPallasSignatureResult` for callers that need to independently confirm
42
+ * the relationship between `rk` and a known `pk`, but is not required to verify the
43
+ * signature itself.
44
+ */
45
+ export declare function verifyRedPallasSignature(signatureResult: RedPallasSignatureResult, message: Buffer): Promise<boolean>;
18
46
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/redpallas-mps/util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAQrC;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,cAAc,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,qBAAqB,EAChC,UAAU,CAAC,EAAE,qBAAqB,EAClC,SAAS,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAkCrD"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/redpallas-mps/util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAQzE;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,cAAc,EAAE,MAAM,EACtB,QAAQ,CAAC,EAAE,qBAAqB,EAChC,UAAU,CAAC,EAAE,qBAAqB,EAClC,SAAS,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAkCrD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,EAAE,GAAG,wBAAwB,CAAC,CA0B5D;AAED;;;;;;;;;GASG;AACH,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,wBAAwB,EACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAUlB"}