@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.45 → 8.2.1-alpha.450

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 (93) hide show
  1. package/dist/src/curves/ed25519.d.ts +0 -1
  2. package/dist/src/curves/ed25519.d.ts.map +1 -1
  3. package/dist/src/curves/ed25519.js +12 -12
  4. package/dist/src/curves/ed25519Bip32HdTree.js +14 -14
  5. package/dist/src/curves/index.js +6 -2
  6. package/dist/src/curves/secp256k1.d.ts +0 -1
  7. package/dist/src/curves/secp256k1.d.ts.map +1 -1
  8. package/dist/src/curves/secp256k1.js +22 -38
  9. package/dist/src/curves/secp256k1Bip32HdTree.js +10 -10
  10. package/dist/src/curves/types.d.ts +2 -3
  11. package/dist/src/curves/types.d.ts.map +1 -1
  12. package/dist/src/curves/util.d.ts +2 -0
  13. package/dist/src/curves/util.d.ts.map +1 -1
  14. package/dist/src/curves/util.js +34 -3
  15. package/dist/src/hashCommitment.d.ts +0 -1
  16. package/dist/src/hashCommitment.d.ts.map +1 -1
  17. package/dist/src/hashCommitment.js +7 -8
  18. package/dist/src/index.d.ts +1 -1
  19. package/dist/src/index.d.ts.map +1 -1
  20. package/dist/src/index.js +24 -10
  21. package/dist/src/openssl/index.js +6 -2
  22. package/dist/src/openssl/openssl.d.ts +1 -2
  23. package/dist/src/openssl/openssl.d.ts.map +1 -1
  24. package/dist/src/openssl/openssl.js +4 -12
  25. package/dist/src/safePrime.d.ts +3 -0
  26. package/dist/src/safePrime.d.ts.map +1 -0
  27. package/dist/src/safePrime.js +19 -0
  28. package/dist/src/schnorrProof.d.ts +0 -1
  29. package/dist/src/schnorrProof.d.ts.map +1 -1
  30. package/dist/src/schnorrProof.js +8 -9
  31. package/dist/src/shamir/index.js +6 -2
  32. package/dist/src/shamir/shamir.js +2 -2
  33. package/dist/src/shamir/types.d.ts +1 -1
  34. package/dist/src/shamir/types.d.ts.map +1 -1
  35. package/dist/src/tss/ecdsa/index.js +23 -9
  36. package/dist/src/tss/ecdsa/paillierproof.js +10 -10
  37. package/dist/src/tss/ecdsa/rangeproof.d.ts +1 -2
  38. package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
  39. package/dist/src/tss/ecdsa/rangeproof.js +108 -118
  40. package/dist/src/tss/ecdsa/types.d.ts +28 -17
  41. package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
  42. package/dist/src/tss/ecdsa/types.js +29 -31
  43. package/dist/src/tss/ecdsa/zkVProof.d.ts +0 -1
  44. package/dist/src/tss/ecdsa/zkVProof.d.ts.map +1 -1
  45. package/dist/src/tss/ecdsa/zkVProof.js +9 -10
  46. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts +69 -0
  47. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts.map +1 -0
  48. package/dist/src/tss/ecdsa-dkls/commsLayer.js +268 -0
  49. package/dist/src/tss/ecdsa-dkls/dkg.d.ts +62 -0
  50. package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -0
  51. package/dist/src/tss/ecdsa-dkls/dkg.js +334 -0
  52. package/dist/src/tss/ecdsa-dkls/dsg.d.ts +47 -0
  53. package/dist/src/tss/ecdsa-dkls/dsg.d.ts.map +1 -0
  54. package/dist/src/tss/ecdsa-dkls/dsg.js +271 -0
  55. package/dist/src/tss/ecdsa-dkls/index.d.ts +6 -0
  56. package/dist/src/tss/ecdsa-dkls/index.d.ts.map +1 -0
  57. package/dist/src/tss/ecdsa-dkls/index.js +42 -0
  58. package/dist/src/tss/ecdsa-dkls/types.d.ts +128 -0
  59. package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
  60. package/dist/src/tss/ecdsa-dkls/types.js +175 -0
  61. package/dist/src/tss/ecdsa-dkls/util.d.ts +26 -0
  62. package/dist/src/tss/ecdsa-dkls/util.d.ts.map +1 -0
  63. package/dist/src/tss/ecdsa-dkls/util.js +276 -0
  64. package/dist/src/tss/eddsa-mps/commsLayer.d.ts +30 -0
  65. package/dist/src/tss/eddsa-mps/commsLayer.d.ts.map +1 -0
  66. package/dist/src/tss/eddsa-mps/commsLayer.js +96 -0
  67. package/dist/src/tss/eddsa-mps/dkg.d.ts +93 -0
  68. package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -0
  69. package/dist/src/tss/eddsa-mps/dkg.js +217 -0
  70. package/dist/src/tss/eddsa-mps/index.d.ts +5 -0
  71. package/dist/src/tss/eddsa-mps/index.d.ts.map +1 -0
  72. package/dist/src/tss/eddsa-mps/index.js +41 -0
  73. package/dist/src/tss/eddsa-mps/types.d.ts +44 -0
  74. package/dist/src/tss/eddsa-mps/types.d.ts.map +1 -0
  75. package/dist/src/tss/eddsa-mps/types.js +85 -0
  76. package/dist/src/tss/eddsa-mps/util.d.ts +7 -0
  77. package/dist/src/tss/eddsa-mps/util.d.ts.map +1 -0
  78. package/dist/src/tss/eddsa-mps/util.js +13 -0
  79. package/dist/src/tss/index.d.ts +2 -0
  80. package/dist/src/tss/index.d.ts.map +1 -1
  81. package/dist/src/tss/index.js +8 -2
  82. package/dist/src/types.d.ts +0 -1
  83. package/dist/src/types.d.ts.map +1 -1
  84. package/dist/src/util.d.ts +0 -1
  85. package/dist/src/util.d.ts.map +1 -1
  86. package/dist/src/util.js +21 -22
  87. package/dist/tsconfig.tsbuildinfo +1 -1
  88. package/package.json +28 -5
  89. package/.eslintignore +0 -5
  90. package/CHANGELOG.md +0 -180
  91. package/dist/src/openssl/opensslbytes.d.ts +0 -4
  92. package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
  93. package/dist/src/openssl/opensslbytes.js +0 -20
@@ -0,0 +1,334 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Dkg = void 0;
37
+ const cbor_x_1 = require("cbor-x");
38
+ const crypto_1 = require("crypto");
39
+ const curves_1 = require("../../curves");
40
+ const util_1 = require("../../util");
41
+ const types_1 = require("./types");
42
+ class Dkg {
43
+ constructor(n, t, partyIdx, seed, retrofitData, dklsWasm) {
44
+ this.dkgState = types_1.DkgState.Uninitialized;
45
+ this.n = n;
46
+ this.t = t;
47
+ this.partyIdx = partyIdx;
48
+ this.chainCodeCommitment = undefined;
49
+ this.retrofitData = retrofitData;
50
+ this.seed = seed;
51
+ this.dklsWasm = dklsWasm ?? null;
52
+ }
53
+ async loadDklsWasm() {
54
+ if (!this.dklsWasm) {
55
+ this.dklsWasm = await Promise.resolve().then(() => __importStar(require('@silencelaboratories/dkls-wasm-ll-node')));
56
+ }
57
+ }
58
+ getDklsWasm() {
59
+ if (!this.dklsWasm) {
60
+ throw Error('DKLS wasm not loaded');
61
+ }
62
+ return this.dklsWasm;
63
+ }
64
+ _restoreSession() {
65
+ if (!this.dkgSession) {
66
+ this.dkgSession = this.getDklsWasm().KeygenSession.fromBytes(this.dkgSessionBytes);
67
+ }
68
+ }
69
+ _createDKLsRetrofitKeyShare() {
70
+ if (this.retrofitData) {
71
+ if (!this.retrofitData.xShare.y || !this.retrofitData.xShare.chaincode || !this.retrofitData.xShare.x) {
72
+ throw Error('xShare must have a public key, private share value, and a chaincode.');
73
+ }
74
+ const xiList = [];
75
+ for (let i = 0; i < this.n; i++) {
76
+ xiList.push(Array.from((0, util_1.bigIntToBufferBE)(BigInt(i + 1), 32)));
77
+ }
78
+ const secp256k1 = new curves_1.Secp256k1Curve();
79
+ const dklsKeyShare = {
80
+ total_parties: this.n,
81
+ threshold: this.t,
82
+ rank_list: new Array(this.n).fill(0),
83
+ party_id: this.partyIdx,
84
+ public_key: Array.from(Buffer.from(this.retrofitData.xShare.y, 'hex')),
85
+ root_chain_code: Array.from(Buffer.from(this.retrofitData.xShare.chaincode, 'hex')),
86
+ final_session_id: Array.from((0, crypto_1.createHash)('sha256')
87
+ .update(Buffer.from(this.retrofitData.xShare.y, 'hex'))
88
+ .update(Buffer.from(this.retrofitData.xShare.chaincode, 'hex'))
89
+ .digest()),
90
+ seed_ot_receivers: new Array(this.n - 1).fill(Array(32832).fill(0)),
91
+ seed_ot_senders: new Array(this.n - 1).fill(Array(32768).fill(0)),
92
+ sent_seed_list: [Array(32).fill(0)],
93
+ rec_seed_list: [Array(32).fill(0)],
94
+ s_i: Array.from(Buffer.from(this.retrofitData.xShare.x, 'hex')),
95
+ // big_s_list is now created internally during the protocol so isn't needed here, however a valid KeyShare object needs to have it.
96
+ // a dummy public key is used to fill big_s_list.
97
+ big_s_list: new Array(this.n).fill(Array.from((0, util_1.bigIntToBufferBE)(secp256k1.basePointMult(BigInt('0x' + this.retrofitData.xShare.x))))),
98
+ x_i_list: this.retrofitData.xiList ? this.retrofitData.xiList : xiList,
99
+ };
100
+ this.dklsKeyShareRetrofitObject = this.getDklsWasm().Keyshare.fromBytes((0, cbor_x_1.encode)(dklsKeyShare));
101
+ }
102
+ }
103
+ _deserializeState() {
104
+ if (!this.dkgSession) {
105
+ throw Error('Session not intialized');
106
+ }
107
+ const round = (0, cbor_x_1.decode)(this.dkgSession.toBytes()).round;
108
+ switch (round) {
109
+ case 'WaitMsg1':
110
+ this.dkgState = types_1.DkgState.Round1;
111
+ break;
112
+ case 'WaitMsg2':
113
+ this.dkgState = types_1.DkgState.Round2;
114
+ break;
115
+ case 'WaitMsg3':
116
+ this.dkgState = types_1.DkgState.Round3;
117
+ break;
118
+ case 'WaitMsg4':
119
+ // keyShareBuff present means keyshare() already ran and freed the session; bytes are frozen at WaitMsg4.
120
+ this.dkgState = this.keyShareBuff ? types_1.DkgState.Complete : types_1.DkgState.Round4;
121
+ break;
122
+ case 'Ended':
123
+ this.dkgState = types_1.DkgState.Complete;
124
+ break;
125
+ default:
126
+ this.dkgState = types_1.DkgState.InvalidState;
127
+ throw Error(`Invalid State: ${round}`);
128
+ }
129
+ }
130
+ async initDkg() {
131
+ if (!this.dklsWasm) {
132
+ await this.loadDklsWasm();
133
+ }
134
+ if (this.t > this.n || this.partyIdx >= this.n) {
135
+ throw Error('Invalid parameters for DKG');
136
+ }
137
+ if (this.dkgState != types_1.DkgState.Uninitialized) {
138
+ throw Error('DKG session already initialized');
139
+ }
140
+ if (typeof window !== 'undefined' &&
141
+ /* checks for electron processes */
142
+ !window.process &&
143
+ !window.process?.['type']) {
144
+ /* This is only needed for browsers/web because it uses fetch to resolve the wasm asset for the web */
145
+ const initDkls = await Promise.resolve().then(() => __importStar(require('@silencelaboratories/dkls-wasm-ll-web')));
146
+ await initDkls.default();
147
+ }
148
+ this._createDKLsRetrofitKeyShare();
149
+ if (this.seed && this.seed.length !== 32) {
150
+ throw Error(`Seed should be 32 bytes, got ${this.seed.length}.`);
151
+ }
152
+ const { KeygenSession } = this.getDklsWasm();
153
+ if (this.dklsKeyShareRetrofitObject) {
154
+ this.dkgSession = this.seed
155
+ ? KeygenSession.initKeyRotation(this.dklsKeyShareRetrofitObject, new Uint8Array(this.seed))
156
+ : KeygenSession.initKeyRotation(this.dklsKeyShareRetrofitObject);
157
+ }
158
+ else {
159
+ this.dkgSession = this.seed
160
+ ? new KeygenSession(this.n, this.t, this.partyIdx, new Uint8Array(this.seed))
161
+ : new KeygenSession(this.n, this.t, this.partyIdx);
162
+ }
163
+ try {
164
+ const payload = this.dkgSession.createFirstMessage().payload;
165
+ this.dkgSessionBytes = this.dkgSession.toBytes();
166
+ this._deserializeState();
167
+ return {
168
+ payload: payload,
169
+ from: this.partyIdx,
170
+ };
171
+ }
172
+ catch (e) {
173
+ throw Error(`Error while creating the first message from party ${this.partyIdx}: ${e}`);
174
+ }
175
+ }
176
+ getKeyShare() {
177
+ if (!this.keyShareBuff) {
178
+ throw Error('Can not get key share, DKG is not complete yet.');
179
+ }
180
+ return this.keyShareBuff;
181
+ }
182
+ /**
183
+ * Returns a CBOR-encoded ReducedKeyShare buffer containing the party's private
184
+ * scalar (s_i) in the `prv` field. This buffer is private key material.
185
+ * The caller encrypts it and stores it as `reducedEncryptedPrv` on the key card QR code.
186
+ */
187
+ getReducedKeyShare() {
188
+ if (!this.keyShareBuff) {
189
+ throw Error('Can not get key share, DKG is not complete yet.');
190
+ }
191
+ const decodedKeyshare = (0, cbor_x_1.decode)(this.keyShareBuff);
192
+ const reducedKeyShare = {
193
+ bigSList: decodedKeyshare.big_s_list,
194
+ xList: decodedKeyshare.x_i_list,
195
+ rootChainCode: decodedKeyshare.root_chain_code,
196
+ prv: decodedKeyshare.s_i,
197
+ pub: decodedKeyshare.public_key,
198
+ };
199
+ const encodedKeyShare = (0, cbor_x_1.encode)(reducedKeyShare);
200
+ return encodedKeyShare;
201
+ }
202
+ handleIncomingMessages(messagesForIthRound) {
203
+ let nextRoundMessages = [];
204
+ let nextRoundDeserializedMessages = { broadcastMessages: [], p2pMessages: [] };
205
+ this._restoreSession();
206
+ if (!this.dkgSession) {
207
+ throw Error('Session not initialized');
208
+ }
209
+ const { Message } = this.getDklsWasm();
210
+ try {
211
+ if (this.dkgState === types_1.DkgState.Round3) {
212
+ const commitmentsUnsorted = messagesForIthRound.p2pMessages
213
+ .map((m) => {
214
+ return { from: m.from, commitment: m.commitment };
215
+ })
216
+ .concat([{ from: this.partyIdx, commitment: this.chainCodeCommitment }]);
217
+ const commitmentsSorted = commitmentsUnsorted
218
+ .sort((a, b) => {
219
+ return a.from - b.from;
220
+ })
221
+ .map((c) => c.commitment);
222
+ nextRoundMessages = this.dkgSession.handleMessages(messagesForIthRound.broadcastMessages
223
+ .map((m) => new Message(m.payload, m.from, undefined))
224
+ .concat(messagesForIthRound.p2pMessages.map((m) => new Message(m.payload, m.from, m.to))), commitmentsSorted);
225
+ }
226
+ else {
227
+ nextRoundMessages = this.dkgSession.handleMessages(messagesForIthRound.broadcastMessages
228
+ .map((m) => new Message(m.payload, m.from, undefined))
229
+ .concat(messagesForIthRound.p2pMessages.map((m) => new Message(m.payload, m.from, m.to))), undefined);
230
+ }
231
+ if (this.dkgState === types_1.DkgState.Round4) {
232
+ this.dkgKeyShare = this.dkgSession.keyshare();
233
+ this.keyShareBuff = Buffer.from(this.dkgKeyShare.toBytes());
234
+ this.dkgKeyShare.free();
235
+ if (this.dklsKeyShareRetrofitObject) {
236
+ this.dklsKeyShareRetrofitObject.free();
237
+ }
238
+ this.dkgState = types_1.DkgState.Complete;
239
+ return { broadcastMessages: [], p2pMessages: [] };
240
+ }
241
+ else {
242
+ // Update round data.
243
+ this._deserializeState();
244
+ }
245
+ if (this.dkgState === types_1.DkgState.Round2) {
246
+ this.chainCodeCommitment = this.dkgSession.calculateChainCodeCommitment();
247
+ }
248
+ nextRoundDeserializedMessages = {
249
+ p2pMessages: nextRoundMessages
250
+ .filter((m) => m.to_id !== undefined)
251
+ .map((m) => {
252
+ const p2pReturn = {
253
+ payload: m.payload,
254
+ from: m.from_id,
255
+ to: m.to_id,
256
+ commitment: this.chainCodeCommitment,
257
+ };
258
+ return p2pReturn;
259
+ }),
260
+ broadcastMessages: nextRoundMessages
261
+ .filter((m) => m.to_id === undefined)
262
+ .map((m) => {
263
+ const broadcastReturn = {
264
+ payload: m.payload,
265
+ from: m.from_id,
266
+ };
267
+ return broadcastReturn;
268
+ }),
269
+ };
270
+ }
271
+ catch (e) {
272
+ throw Error(`Error while creating messages from party ${this.partyIdx}, round ${this.dkgState}: ${e}`);
273
+ }
274
+ finally {
275
+ nextRoundMessages.forEach((m) => m.free());
276
+ // Session is freed when keyshare is called.
277
+ if (this.dkgState !== types_1.DkgState.Complete) {
278
+ this.dkgSessionBytes = this.dkgSession.toBytes();
279
+ this.dkgSession = undefined;
280
+ }
281
+ }
282
+ return nextRoundDeserializedMessages;
283
+ }
284
+ /**
285
+ * Get the current session data that can be used to restore the session later
286
+ * @returns The current session data
287
+ */
288
+ getSessionData() {
289
+ const sessionData = {
290
+ dkgSessionBytes: this.dkgSessionBytes,
291
+ dkgState: this.dkgState,
292
+ };
293
+ if (this.chainCodeCommitment) {
294
+ sessionData.chainCodeCommitment = this.chainCodeCommitment;
295
+ }
296
+ if (this.keyShareBuff) {
297
+ sessionData.keyShareBuff = this.keyShareBuff;
298
+ }
299
+ return sessionData;
300
+ }
301
+ /**
302
+ * Restore a DKG session from previous session data
303
+ * Note: This should not be used for Round 1 as that's the initialization phase
304
+ * @param n Number of parties
305
+ * @param t Threshold
306
+ * @param partyIdx Party index
307
+ * @param sessionData Previous session data
308
+ * @param seed Optional seed
309
+ * @param retrofitData Optional retrofit data
310
+ * @param dklsWasm Optional DKLS wasm instance
311
+ * @returns A new DKG instance with the restored session
312
+ */
313
+ static async restoreSession(n, t, partyIdx, sessionData, seed, retrofitData, dklsWasm) {
314
+ const dkg = new Dkg(n, t, partyIdx, seed, retrofitData, dklsWasm);
315
+ if (!dkg.dklsWasm) {
316
+ await dkg.loadDklsWasm();
317
+ }
318
+ dkg.dkgSessionBytes = sessionData.dkgSessionBytes;
319
+ if (sessionData.chainCodeCommitment) {
320
+ dkg.chainCodeCommitment = sessionData.chainCodeCommitment;
321
+ }
322
+ if (sessionData.keyShareBuff) {
323
+ dkg.keyShareBuff = sessionData.keyShareBuff;
324
+ }
325
+ dkg._restoreSession();
326
+ // Re-derive state from WASM bytes rather than trusting the caller-supplied dkgState.
327
+ // This prevents a tampered or corrupted dkgState from causing handleIncomingMessages()
328
+ // to take the wrong branch (e.g. skipping chain code commitment or calling keyshare() prematurely).
329
+ dkg._deserializeState();
330
+ return dkg;
331
+ }
332
+ }
333
+ exports.Dkg = Dkg;
334
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGtnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9lY2RzYS1ka2xzL2RrZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxtQ0FBd0M7QUFDeEMsbUNBQW9DO0FBQ3BDLHlDQUE4QztBQUM5QyxxQ0FBOEM7QUFDOUMsbUNBQXNIO0FBZXRILE1BQWEsR0FBRztJQWVkLFlBQ0UsQ0FBUyxFQUNULENBQVMsRUFDVCxRQUFnQixFQUNoQixJQUFhLEVBQ2IsWUFBMkIsRUFDM0IsUUFBd0I7UUFYaEIsYUFBUSxHQUFhLGdCQUFRLENBQUMsYUFBYSxDQUFDO1FBYXBELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLElBQUksQ0FBQztJQUNuQyxDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVk7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLHdEQUFhLHdDQUF3QyxHQUFDLENBQUM7UUFDekUsQ0FBQztJQUNILENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsTUFBTSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxlQUFlO1FB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c0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBLZXlnZW5TZXNzaW9uLCBLZXlzaGFyZSwgTWVzc2FnZSB9IGZyb20gJ0BzaWxlbmNlbGFib3JhdG9yaWVzL2RrbHMtd2FzbS1sbC1ub2RlJztcbmltcG9ydCB7IGRlY29kZSwgZW5jb2RlIH0gZnJvbSAnY2Jvci14JztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgU2VjcDI1NmsxQ3VydmUgfSBmcm9tICcuLi8uLi9jdXJ2ZXMnO1xuaW1wb3J0IHsgYmlnSW50VG9CdWZmZXJCRSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSwgRGVzZXJpYWxpemVkTWVzc2FnZXMsIERrZ1N0YXRlLCBSZWR1Y2VkS2V5U2hhcmUsIFJldHJvZml0RGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG50eXBlIE5vZGVXYXNtZXIgPSB0eXBlb2YgaW1wb3J0KCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtbm9kZScpO1xudHlwZSBXZWJXYXNtZXIgPSB0eXBlb2YgaW1wb3J0KCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtd2ViJyk7XG50eXBlIEJ1bmRsZXJXYXNtZXIgPSB0eXBlb2YgaW1wb3J0KCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtYnVuZGxlcicpO1xuXG50eXBlIERrbHNXYXNtID0gTm9kZVdhc21lciB8IFdlYldhc21lciB8IEJ1bmRsZXJXYXNtZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGtnU2Vzc2lvbkRhdGEge1xuICBka2dTZXNzaW9uQnl0ZXM6IFVpbnQ4QXJyYXk7XG4gIGRrZ1N0YXRlOiBEa2dTdGF0ZTtcbiAgY2hhaW5Db2RlQ29tbWl0bWVudD86IFVpbnQ4QXJyYXk7XG4gIGtleVNoYXJlQnVmZj86IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGNsYXNzIERrZyB7XG4gIHByb3RlY3RlZCBka2dTZXNzaW9uOiBLZXlnZW5TZXNzaW9uIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgZGtnU2Vzc2lvbkJ5dGVzOiBVaW50OEFycmF5O1xuICBwcm90ZWN0ZWQgZGtnS2V5U2hhcmU6IEtleXNoYXJlO1xuICBwcm90ZWN0ZWQga2V5U2hhcmVCdWZmOiBCdWZmZXI7XG4gIHByb3RlY3RlZCBuOiBudW1iZXI7XG4gIHByb3RlY3RlZCB0OiBudW1iZXI7XG4gIHByb3RlY3RlZCBzZWVkOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBjaGFpbkNvZGVDb21taXRtZW50OiBVaW50OEFycmF5IHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQgcGFydHlJZHg6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGRrZ1N0YXRlOiBEa2dTdGF0ZSA9IERrZ1N0YXRlLlVuaW5pdGlhbGl6ZWQ7XG4gIHByb3RlY3RlZCBka2xzS2V5U2hhcmVSZXRyb2ZpdE9iamVjdDogS2V5c2hhcmUgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCByZXRyb2ZpdERhdGE6IFJldHJvZml0RGF0YSB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIGRrbHNXYXNtOiBEa2xzV2FzbSB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgbjogbnVtYmVyLFxuICAgIHQ6IG51bWJlcixcbiAgICBwYXJ0eUlkeDogbnVtYmVyLFxuICAgIHNlZWQ/OiBCdWZmZXIsXG4gICAgcmV0cm9maXREYXRhPzogUmV0cm9maXREYXRhLFxuICAgIGRrbHNXYXNtPzogQnVuZGxlcldhc21lclxuICApIHtcbiAgICB0aGlzLm4gPSBuO1xuICAgIHRoaXMudCA9IHQ7XG4gICAgdGhpcy5wYXJ0eUlkeCA9IHBhcnR5SWR4O1xuICAgIHRoaXMuY2hhaW5Db2RlQ29tbWl0bWVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnJldHJvZml0RGF0YSA9IHJldHJvZml0RGF0YTtcbiAgICB0aGlzLnNlZWQgPSBzZWVkO1xuICAgIHRoaXMuZGtsc1dhc20gPSBka2xzV2FzbSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRGtsc1dhc20oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmRrbHNXYXNtKSB7XG4gICAgICB0aGlzLmRrbHNXYXNtID0gYXdhaXQgaW1wb3J0KCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtbm9kZScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGtsc1dhc20oKSB7XG4gICAgaWYgKCF0aGlzLmRrbHNXYXNtKSB7XG4gICAgICB0aHJvdyBFcnJvcignREtMUyB3YXNtIG5vdCBsb2FkZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ka2xzV2FzbTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc3RvcmVTZXNzaW9uKCkge1xuICAgIGlmICghdGhpcy5ka2dTZXNzaW9uKSB7XG4gICAgICB0aGlzLmRrZ1Nlc3Npb24gPSB0aGlzLmdldERrbHNXYXNtKCkuS2V5Z2VuU2Vzc2lvbi5mcm9tQnl0ZXModGhpcy5ka2dTZXNzaW9uQnl0ZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZURLTHNSZXRyb2ZpdEtleVNoYXJlKCkge1xuICAgIGlmICh0aGlzLnJldHJvZml0RGF0YSkge1xuICAgICAgaWYgKCF0aGlzLnJldHJvZml0RGF0YS54U2hhcmUueSB8fCAhdGhpcy5yZXRyb2ZpdERhdGEueFNoYXJlLmNoYWluY29kZSB8fCAhdGhpcy5yZXRyb2ZpdERhdGEueFNoYXJlLngpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ3hTaGFyZSBtdXN0IGhhdmUgYSBwdWJsaWMga2V5LCBwcml2YXRlIHNoYXJlIHZhbHVlLCBhbmQgYSBjaGFpbmNvZGUuJyk7XG4gICAgICB9XG4gICAgICBjb25zdCB4aUxpc3Q6IEFycmF5PEFycmF5PG51bWJlcj4+ID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubjsgaSsrKSB7XG4gICAgICAgIHhpTGlzdC5wdXNoKEFycmF5LmZyb20oYmlnSW50VG9CdWZmZXJCRShCaWdJbnQoaSArIDEpLCAzMikpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlY3AyNTZrMSA9IG5ldyBTZWNwMjU2azFDdXJ2ZSgpO1xuICAgICAgY29uc3QgZGtsc0tleVNoYXJlID0ge1xuICAgICAgICB0b3RhbF9wYXJ0aWVzOiB0aGlzLm4sXG4gICAgICAgIHRocmVzaG9sZDogdGhpcy50LFxuICAgICAgICByYW5rX2xpc3Q6IG5ldyBBcnJheSh0aGlzLm4pLmZpbGwoMCksXG4gICAgICAgIHBhcnR5X2lkOiB0aGlzLnBhcnR5SWR4LFxuICAgICAgICBwdWJsaWNfa2V5OiBBcnJheS5mcm9tKEJ1ZmZlci5mcm9tKHRoaXMucmV0cm9maXREYXRhLnhTaGFyZS55LCAnaGV4JykpLFxuICAgICAgICByb290X2NoYWluX2NvZGU6IEFycmF5LmZyb20oQnVmZmVyLmZyb20odGhpcy5yZXRyb2ZpdERhdGEueFNoYXJlLmNoYWluY29kZSwgJ2hleCcpKSxcbiAgICAgICAgZmluYWxfc2Vzc2lvbl9pZDogQXJyYXkuZnJvbShcbiAgICAgICAgICBjcmVhdGVIYXNoKCdzaGEyNTYnKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIuZnJvbSh0aGlzLnJldHJvZml0RGF0YS54U2hhcmUueSwgJ2hleCcpKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIuZnJvbSh0aGlzLnJldHJvZml0RGF0YS54U2hhcmUuY2hhaW5jb2RlLCAnaGV4JykpXG4gICAgICAgICAgICAuZGlnZXN0KClcbiAgICAgICAgKSxcbiAgICAgICAgc2VlZF9vdF9yZWNlaXZlcnM6IG5ldyBBcnJheSh0aGlzLm4gLSAxKS5maWxsKEFycmF5KDMyODMyKS5maWxsKDApKSxcbiAgICAgICAgc2VlZF9vdF9zZW5kZXJzOiBuZXcgQXJyYXkodGhpcy5uIC0gMSkuZmlsbChBcnJheSgzMjc2OCkuZmlsbCgwKSksXG4gICAgICAgIHNlbnRfc2VlZF9saXN0OiBbQXJyYXkoMzIpLmZpbGwoMCldLFxuICAgICAgICByZWNfc2VlZF9saXN0OiBbQXJyYXkoMzIpLmZpbGwoMCldLFxuICAgICAgICBzX2k6IEFycmF5LmZyb20oQnVmZmVyLmZyb20odGhpcy5yZXRyb2ZpdERhdGEueFNoYXJlLngsICdoZXgnKSksXG4gICAgICAgIC8vIGJpZ19zX2xpc3QgaXMgbm93IGNyZWF0ZWQgaW50ZXJuYWxseSBkdXJpbmcgdGhlIHByb3RvY29sIHNvIGlzbid0IG5lZWRlZCBoZXJlLCBob3dldmVyIGEgdmFsaWQgS2V5U2hhcmUgb2JqZWN0IG5lZWRzIHRvIGhhdmUgaXQuXG4gICAgICAgIC8vIGEgZHVtbXkgcHVibGljIGtleSBpcyB1c2VkIHRvIGZpbGwgYmlnX3NfbGlzdC5cbiAgICAgICAgYmlnX3NfbGlzdDogbmV3IEFycmF5KHRoaXMubikuZmlsbChcbiAgICAgICAgICBBcnJheS5mcm9tKGJpZ0ludFRvQnVmZmVyQkUoc2VjcDI1NmsxLmJhc2VQb2ludE11bHQoQmlnSW50KCcweCcgKyB0aGlzLnJldHJvZml0RGF0YS54U2hhcmUueCkpKSlcbiAgICAgICAgKSxcbiAgICAgICAgeF9pX2xpc3Q6IHRoaXMucmV0cm9maXREYXRhLnhpTGlzdCA/IHRoaXMucmV0cm9maXREYXRhLnhpTGlzdCA6IHhpTGlzdCxcbiAgICAgIH07XG4gICAgICB0aGlzLmRrbHNLZXlTaGFyZVJldHJvZml0T2JqZWN0ID0gdGhpcy5nZXREa2xzV2FzbSgpLktleXNoYXJlLmZyb21CeXRlcyhlbmNvZGUoZGtsc0tleVNoYXJlKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVzZXJpYWxpemVTdGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuZGtnU2Vzc2lvbikge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Nlc3Npb24gbm90IGludGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgY29uc3Qgcm91bmQgPSBkZWNvZGUodGhpcy5ka2dTZXNzaW9uLnRvQnl0ZXMoKSkucm91bmQ7XG4gICAgc3dpdGNoIChyb3VuZCkge1xuICAgICAgY2FzZSAnV2FpdE1zZzEnOlxuICAgICAgICB0aGlzLmRrZ1N0YXRlID0gRGtnU3RhdGUuUm91bmQxO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1dhaXRNc2cyJzpcbiAgICAgICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLlJvdW5kMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdXYWl0TXNnMyc6XG4gICAgICAgIHRoaXMuZGtnU3RhdGUgPSBEa2dTdGF0ZS5Sb3VuZDM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnV2FpdE1zZzQnOlxuICAgICAgICAvLyBrZXlTaGFyZUJ1ZmYgcHJlc2VudCBtZWFucyBrZXlzaGFyZSgpIGFscmVhZHkgcmFuIGFuZCBmcmVlZCB0aGUgc2Vzc2lvbjsgYnl0ZXMgYXJlIGZyb3plbiBhdCBXYWl0TXNnNC5cbiAgICAgICAgdGhpcy5ka2dTdGF0ZSA9IHRoaXMua2V5U2hhcmVCdWZmID8gRGtnU3RhdGUuQ29tcGxldGUgOiBEa2dTdGF0ZS5Sb3VuZDQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW5kZWQnOlxuICAgICAgICB0aGlzLmRrZ1N0YXRlID0gRGtnU3RhdGUuQ29tcGxldGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5ka2dTdGF0ZSA9IERrZ1N0YXRlLkludmFsaWRTdGF0ZTtcbiAgICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgU3RhdGU6ICR7cm91bmR9YCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW5pdERrZygpOiBQcm9taXNlPERlc2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2U+IHtcbiAgICBpZiAoIXRoaXMuZGtsc1dhc20pIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZERrbHNXYXNtKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnQgPiB0aGlzLm4gfHwgdGhpcy5wYXJ0eUlkeCA+PSB0aGlzLm4pIHtcbiAgICAgIHRocm93IEVycm9yKCdJbnZhbGlkIHBhcmFtZXRlcnMgZm9yIERLRycpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ka2dTdGF0ZSAhPSBEa2dTdGF0ZS5VbmluaXRpYWxpemVkKSB7XG4gICAgICB0aHJvdyBFcnJvcignREtHIHNlc3Npb24gYWxyZWFkeSBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgLyogY2hlY2tzIGZvciBlbGVjdHJvbiBwcm9jZXNzZXMgKi9cbiAgICAgICF3aW5kb3cucHJvY2VzcyAmJlxuICAgICAgIXdpbmRvdy5wcm9jZXNzPy5bJ3R5cGUnXVxuICAgICkge1xuICAgICAgLyogVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgYnJvd3NlcnMvd2ViIGJlY2F1c2UgaXQgdXNlcyBmZXRjaCB0byByZXNvbHZlIHRoZSB3YXNtIGFzc2V0IGZvciB0aGUgd2ViICovXG4gICAgICBjb25zdCBpbml0RGtscyA9IGF3YWl0IGltcG9ydCgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLXdlYicpO1xuICAgICAgYXdhaXQgaW5pdERrbHMuZGVmYXVsdCgpO1xuICAgIH1cbiAgICB0aGlzLl9jcmVhdGVES0xzUmV0cm9maXRLZXlTaGFyZSgpO1xuICAgIGlmICh0aGlzLnNlZWQgJiYgdGhpcy5zZWVkLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IEVycm9yKGBTZWVkIHNob3VsZCBiZSAzMiBieXRlcywgZ290ICR7dGhpcy5zZWVkLmxlbmd0aH0uYCk7XG4gICAgfVxuICAgIGNvbnN0IHsgS2V5Z2VuU2Vzc2lvbiB9ID0gdGhpcy5nZXREa2xzV2FzbSgpO1xuICAgIGlmICh0aGlzLmRrbHNLZXlTaGFyZVJldHJvZml0T2JqZWN0KSB7XG4gICAgICB0aGlzLmRrZ1Nlc3Npb24gPSB0aGlzLnNlZWRcbiAgICAgICAgPyBLZXlnZW5TZXNzaW9uLmluaXRLZXlSb3RhdGlvbih0aGlzLmRrbHNLZXlTaGFyZVJldHJvZml0T2JqZWN0LCBuZXcgVWludDhBcnJheSh0aGlzLnNlZWQpKVxuICAgICAgICA6IEtleWdlblNlc3Npb24uaW5pdEtleVJvdGF0aW9uKHRoaXMuZGtsc0tleVNoYXJlUmV0cm9maXRPYmplY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRrZ1Nlc3Npb24gPSB0aGlzLnNlZWRcbiAgICAgICAgPyBuZXcgS2V5Z2VuU2Vzc2lvbih0aGlzLm4sIHRoaXMudCwgdGhpcy5wYXJ0eUlkeCwgbmV3IFVpbnQ4QXJyYXkodGhpcy5zZWVkKSlcbiAgICAgICAgOiBuZXcgS2V5Z2VuU2Vzc2lvbih0aGlzLm4sIHRoaXMudCwgdGhpcy5wYXJ0eUlkeCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5ka2dTZXNzaW9uLmNyZWF0ZUZpcnN0TWVzc2FnZSgpLnBheWxvYWQ7XG4gICAgICB0aGlzLmRrZ1Nlc3Npb25CeXRlcyA9IHRoaXMuZGtnU2Vzc2lvbi50b0J5dGVzKCk7XG4gICAgICB0aGlzLl9kZXNlcmlhbGl6ZVN0YXRlKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICBmcm9tOiB0aGlzLnBhcnR5SWR4LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIGZpcnN0IG1lc3NhZ2UgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9OiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0S2V5U2hhcmUoKTogQnVmZmVyIHtcbiAgICBpZiAoIXRoaXMua2V5U2hhcmVCdWZmKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCBnZXQga2V5IHNoYXJlLCBES0cgaXMgbm90IGNvbXBsZXRlIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMua2V5U2hhcmVCdWZmO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBDQk9SLWVuY29kZWQgUmVkdWNlZEtleVNoYXJlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBwYXJ0eSdzIHByaXZhdGVcbiAgICogc2NhbGFyIChzX2kpIGluIHRoZSBgcHJ2YCBmaWVsZC4gVGhpcyBidWZmZXIgaXMgcHJpdmF0ZSBrZXkgbWF0ZXJpYWwuXG4gICAqIFRoZSBjYWxsZXIgZW5jcnlwdHMgaXQgYW5kIHN0b3JlcyBpdCBhcyBgcmVkdWNlZEVuY3J5cHRlZFBydmAgb24gdGhlIGtleSBjYXJkIFFSIGNvZGUuXG4gICAqL1xuICBnZXRSZWR1Y2VkS2V5U2hhcmUoKTogQnVmZmVyIHtcbiAgICBpZiAoIXRoaXMua2V5U2hhcmVCdWZmKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCBnZXQga2V5IHNoYXJlLCBES0cgaXMgbm90IGNvbXBsZXRlIHlldC4nKTtcbiAgICB9XG4gICAgY29uc3QgZGVjb2RlZEtleXNoYXJlID0gZGVjb2RlKHRoaXMua2V5U2hhcmVCdWZmKTtcbiAgICBjb25zdCByZWR1Y2VkS2V5U2hhcmU6IFJlZHVjZWRLZXlTaGFyZSA9IHtcbiAgICAgIGJpZ1NMaXN0OiBkZWNvZGVkS2V5c2hhcmUuYmlnX3NfbGlzdCxcbiAgICAgIHhMaXN0OiBkZWNvZGVkS2V5c2hhcmUueF9pX2xpc3QsXG4gICAgICByb290Q2hhaW5Db2RlOiBkZWNvZGVkS2V5c2hhcmUucm9vdF9jaGFpbl9jb2RlLFxuICAgICAgcHJ2OiBkZWNvZGVkS2V5c2hhcmUuc19pLFxuICAgICAgcHViOiBkZWNvZGVkS2V5c2hhcmUucHVibGljX2tleSxcbiAgICB9O1xuICAgIGNvbnN0IGVuY29kZWRLZXlTaGFyZSA9IGVuY29kZShyZWR1Y2VkS2V5U2hhcmUpO1xuICAgIHJldHVybiBlbmNvZGVkS2V5U2hhcmU7XG4gIH1cblxuICBoYW5kbGVJbmNvbWluZ01lc3NhZ2VzKG1lc3NhZ2VzRm9ySXRoUm91bmQ6IERlc2VyaWFsaXplZE1lc3NhZ2VzKTogRGVzZXJpYWxpemVkTWVzc2FnZXMge1xuICAgIGxldCBuZXh0Um91bmRNZXNzYWdlczogTWVzc2FnZVtdID0gW107XG4gICAgbGV0IG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyA9IHsgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLCBwMnBNZXNzYWdlczogW10gfTtcbiAgICB0aGlzLl9yZXN0b3JlU2Vzc2lvbigpO1xuICAgIGlmICghdGhpcy5ka2dTZXNzaW9uKSB7XG4gICAgICB0aHJvdyBFcnJvcignU2Vzc2lvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBNZXNzYWdlIH0gPSB0aGlzLmdldERrbHNXYXNtKCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmRrZ1N0YXRlID09PSBEa2dTdGF0ZS5Sb3VuZDMpIHtcbiAgICAgICAgY29uc3QgY29tbWl0bWVudHNVbnNvcnRlZCA9IG1lc3NhZ2VzRm9ySXRoUm91bmQucDJwTWVzc2FnZXNcbiAgICAgICAgICAubWFwKChtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBmcm9tOiBtLmZyb20sIGNvbW1pdG1lbnQ6IG0uY29tbWl0bWVudCB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNvbmNhdChbeyBmcm9tOiB0aGlzLnBhcnR5SWR4LCBjb21taXRtZW50OiB0aGlzLmNoYWluQ29kZUNvbW1pdG1lbnQgfV0pO1xuICAgICAgICBjb25zdCBjb21taXRtZW50c1NvcnRlZCA9IGNvbW1pdG1lbnRzVW5zb3J0ZWRcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGEuZnJvbSAtIGIuZnJvbTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5tYXAoKGMpID0+IGMuY29tbWl0bWVudCk7XG4gICAgICAgIG5leHRSb3VuZE1lc3NhZ2VzID0gdGhpcy5ka2dTZXNzaW9uLmhhbmRsZU1lc3NhZ2VzKFxuICAgICAgICAgIG1lc3NhZ2VzRm9ySXRoUm91bmQuYnJvYWRjYXN0TWVzc2FnZXNcbiAgICAgICAgICAgIC5tYXAoKG0pID0+IG5ldyBNZXNzYWdlKG0ucGF5bG9hZCwgbS5mcm9tLCB1bmRlZmluZWQpKVxuICAgICAgICAgICAgLmNvbmNhdChtZXNzYWdlc0Zvckl0aFJvdW5kLnAycE1lc3NhZ2VzLm1hcCgobSkgPT4gbmV3IE1lc3NhZ2UobS5wYXlsb2FkLCBtLmZyb20sIG0udG8pKSksXG4gICAgICAgICAgY29tbWl0bWVudHNTb3J0ZWRcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRSb3VuZE1lc3NhZ2VzID0gdGhpcy5ka2dTZXNzaW9uLmhhbmRsZU1lc3NhZ2VzKFxuICAgICAgICAgIG1lc3NhZ2VzRm9ySXRoUm91bmQuYnJvYWRjYXN0TWVzc2FnZXNcbiAgICAgICAgICAgIC5tYXAoKG0pID0+IG5ldyBNZXNzYWdlKG0ucGF5bG9hZCwgbS5mcm9tLCB1bmRlZmluZWQpKVxuICAgICAgICAgICAgLmNvbmNhdChtZXNzYWdlc0Zvckl0aFJvdW5kLnAycE1lc3NhZ2VzLm1hcCgobSkgPT4gbmV3IE1lc3NhZ2UobS5wYXlsb2FkLCBtLmZyb20sIG0udG8pKSksXG4gICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ka2dTdGF0ZSA9PT0gRGtnU3RhdGUuUm91bmQ0KSB7XG4gICAgICAgIHRoaXMuZGtnS2V5U2hhcmUgPSB0aGlzLmRrZ1Nlc3Npb24ua2V5c2hhcmUoKTtcbiAgICAgICAgdGhpcy5rZXlTaGFyZUJ1ZmYgPSBCdWZmZXIuZnJvbSh0aGlzLmRrZ0tleVNoYXJlLnRvQnl0ZXMoKSk7XG4gICAgICAgIHRoaXMuZGtnS2V5U2hhcmUuZnJlZSgpO1xuICAgICAgICBpZiAodGhpcy5ka2xzS2V5U2hhcmVSZXRyb2ZpdE9iamVjdCkge1xuICAgICAgICAgIHRoaXMuZGtsc0tleVNoYXJlUmV0cm9maXRPYmplY3QuZnJlZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGtnU3RhdGUgPSBEa2dTdGF0ZS5Db21wbGV0ZTtcbiAgICAgICAgcmV0dXJuIHsgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLCBwMnBNZXNzYWdlczogW10gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFVwZGF0ZSByb3VuZCBkYXRhLlxuICAgICAgICB0aGlzLl9kZXNlcmlhbGl6ZVN0YXRlKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5ka2dTdGF0ZSA9PT0gRGtnU3RhdGUuUm91bmQyKSB7XG4gICAgICAgIHRoaXMuY2hhaW5Db2RlQ29tbWl0bWVudCA9IHRoaXMuZGtnU2Vzc2lvbi5jYWxjdWxhdGVDaGFpbkNvZGVDb21taXRtZW50KCk7XG4gICAgICB9XG4gICAgICBuZXh0Um91bmREZXNlcmlhbGl6ZWRNZXNzYWdlcyA9IHtcbiAgICAgICAgcDJwTWVzc2FnZXM6IG5leHRSb3VuZE1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcigobSkgPT4gbS50b19pZCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5tYXAoKG0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHAycFJldHVybiA9IHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogbS5wYXlsb2FkLFxuICAgICAgICAgICAgICBmcm9tOiBtLmZyb21faWQsXG4gICAgICAgICAgICAgIHRvOiBtLnRvX2lkISxcbiAgICAgICAgICAgICAgY29tbWl0bWVudDogdGhpcy5jaGFpbkNvZGVDb21taXRtZW50LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBwMnBSZXR1cm47XG4gICAgICAgICAgfSksXG4gICAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBuZXh0Um91bmRNZXNzYWdlc1xuICAgICAgICAgIC5maWx0ZXIoKG0pID0+IG0udG9faWQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAubWFwKChtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBicm9hZGNhc3RSZXR1cm4gPSB7XG4gICAgICAgICAgICAgIHBheWxvYWQ6IG0ucGF5bG9hZCxcbiAgICAgICAgICAgICAgZnJvbTogbS5mcm9tX2lkLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBicm9hZGNhc3RSZXR1cm47XG4gICAgICAgICAgfSksXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBtZXNzYWdlcyBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH0sIHJvdW5kICR7dGhpcy5ka2dTdGF0ZX06ICR7ZX1gKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbmV4dFJvdW5kTWVzc2FnZXMuZm9yRWFjaCgobSkgPT4gbS5mcmVlKCkpO1xuICAgICAgLy8gU2Vzc2lvbiBpcyBmcmVlZCB3aGVuIGtleXNoYXJlIGlzIGNhbGxlZC5cbiAgICAgIGlmICh0aGlzLmRrZ1N0YXRlICE9PSBEa2dTdGF0ZS5Db21wbGV0ZSkge1xuICAgICAgICB0aGlzLmRrZ1Nlc3Npb25CeXRlcyA9IHRoaXMuZGtnU2Vzc2lvbi50b0J5dGVzKCk7XG4gICAgICAgIHRoaXMuZGtnU2Vzc2lvbiA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBzZXNzaW9uIGRhdGEgdGhhdCBjYW4gYmUgdXNlZCB0byByZXN0b3JlIHRoZSBzZXNzaW9uIGxhdGVyXG4gICAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHNlc3Npb24gZGF0YVxuICAgKi9cbiAgZ2V0U2Vzc2lvbkRhdGEoKTogRGtnU2Vzc2lvbkRhdGEge1xuICAgIGNvbnN0IHNlc3Npb25EYXRhOiBEa2dTZXNzaW9uRGF0YSA9IHtcbiAgICAgIGRrZ1Nlc3Npb25CeXRlczogdGhpcy5ka2dTZXNzaW9uQnl0ZXMsXG4gICAgICBka2dTdGF0ZTogdGhpcy5ka2dTdGF0ZSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY2hhaW5Db2RlQ29tbWl0bWVudCkge1xuICAgICAgc2Vzc2lvbkRhdGEuY2hhaW5Db2RlQ29tbWl0bWVudCA9IHRoaXMuY2hhaW5Db2RlQ29tbWl0bWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5rZXlTaGFyZUJ1ZmYpIHtcbiAgICAgIHNlc3Npb25EYXRhLmtleVNoYXJlQnVmZiA9IHRoaXMua2V5U2hhcmVCdWZmO1xuICAgIH1cblxuICAgIHJldHVybiBzZXNzaW9uRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIGEgREtHIHNlc3Npb24gZnJvbSBwcmV2aW91cyBzZXNzaW9uIGRhdGFcbiAgICogTm90ZTogVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgZm9yIFJvdW5kIDEgYXMgdGhhdCdzIHRoZSBpbml0aWFsaXphdGlvbiBwaGFzZVxuICAgKiBAcGFyYW0gbiBOdW1iZXIgb2YgcGFydGllc1xuICAgKiBAcGFyYW0gdCBUaHJlc2hvbGRcbiAgICogQHBhcmFtIHBhcnR5SWR4IFBhcnR5IGluZGV4XG4gICAqIEBwYXJhbSBzZXNzaW9uRGF0YSBQcmV2aW91cyBzZXNzaW9uIGRhdGFcbiAgICogQHBhcmFtIHNlZWQgT3B0aW9uYWwgc2VlZFxuICAgKiBAcGFyYW0gcmV0cm9maXREYXRhIE9wdGlvbmFsIHJldHJvZml0IGRhdGFcbiAgICogQHBhcmFtIGRrbHNXYXNtIE9wdGlvbmFsIERLTFMgd2FzbSBpbnN0YW5jZVxuICAgKiBAcmV0dXJucyBBIG5ldyBES0cgaW5zdGFuY2Ugd2l0aCB0aGUgcmVzdG9yZWQgc2Vzc2lvblxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJlc3RvcmVTZXNzaW9uKFxuICAgIG46IG51bWJlcixcbiAgICB0OiBudW1iZXIsXG4gICAgcGFydHlJZHg6IG51bWJlcixcbiAgICBzZXNzaW9uRGF0YTogRGtnU2Vzc2lvbkRhdGEsXG4gICAgc2VlZD86IEJ1ZmZlcixcbiAgICByZXRyb2ZpdERhdGE/OiBSZXRyb2ZpdERhdGEsXG4gICAgZGtsc1dhc20/OiBCdW5kbGVyV2FzbWVyXG4gICk6IFByb21pc2U8RGtnPiB7XG4gICAgY29uc3QgZGtnID0gbmV3IERrZyhuLCB0LCBwYXJ0eUlkeCwgc2VlZCwgcmV0cm9maXREYXRhLCBka2xzV2FzbSk7XG5cbiAgICBpZiAoIWRrZy5ka2xzV2FzbSkge1xuICAgICAgYXdhaXQgZGtnLmxvYWREa2xzV2FzbSgpO1xuICAgIH1cblxuICAgIGRrZy5ka2dTZXNzaW9uQnl0ZXMgPSBzZXNzaW9uRGF0YS5ka2dTZXNzaW9uQnl0ZXM7XG5cbiAgICBpZiAoc2Vzc2lvbkRhdGEuY2hhaW5Db2RlQ29tbWl0bWVudCkge1xuICAgICAgZGtnLmNoYWluQ29kZUNvbW1pdG1lbnQgPSBzZXNzaW9uRGF0YS5jaGFpbkNvZGVDb21taXRtZW50O1xuICAgIH1cblxuICAgIGlmIChzZXNzaW9uRGF0YS5rZXlTaGFyZUJ1ZmYpIHtcbiAgICAgIGRrZy5rZXlTaGFyZUJ1ZmYgPSBzZXNzaW9uRGF0YS5rZXlTaGFyZUJ1ZmY7XG4gICAgfVxuXG4gICAgZGtnLl9yZXN0b3JlU2Vzc2lvbigpO1xuICAgIC8vIFJlLWRlcml2ZSBzdGF0ZSBmcm9tIFdBU00gYnl0ZXMgcmF0aGVyIHRoYW4gdHJ1c3RpbmcgdGhlIGNhbGxlci1zdXBwbGllZCBka2dTdGF0ZS5cbiAgICAvLyBUaGlzIHByZXZlbnRzIGEgdGFtcGVyZWQgb3IgY29ycnVwdGVkIGRrZ1N0YXRlIGZyb20gY2F1c2luZyBoYW5kbGVJbmNvbWluZ01lc3NhZ2VzKClcbiAgICAvLyB0byB0YWtlIHRoZSB3cm9uZyBicmFuY2ggKGUuZy4gc2tpcHBpbmcgY2hhaW4gY29kZSBjb21taXRtZW50IG9yIGNhbGxpbmcga2V5c2hhcmUoKSBwcmVtYXR1cmVseSkuXG4gICAgZGtnLl9kZXNlcmlhbGl6ZVN0YXRlKCk7XG4gICAgcmV0dXJuIGRrZztcbiAgfVxufVxuIl19
@@ -0,0 +1,47 @@
1
+ import { SignSessionOTVariant } from '@silencelaboratories/dkls-wasm-ll-node';
2
+ import { DeserializedBroadcastMessage, DeserializedDklsSignature, DeserializedMessages, DsgState } from './types';
3
+ type NodeWasmer = typeof import('@silencelaboratories/dkls-wasm-ll-node');
4
+ type WebWasmer = typeof import('@silencelaboratories/dkls-wasm-ll-web');
5
+ type BundlerWasmer = typeof import('@silencelaboratories/dkls-wasm-ll-bundler');
6
+ type DklsWasm = NodeWasmer | WebWasmer | BundlerWasmer;
7
+ export declare class Dsg {
8
+ protected dsgSession: SignSessionOTVariant | undefined;
9
+ protected dsgSessionBytes: Uint8Array;
10
+ private _signature;
11
+ protected keyShareBytes: Buffer;
12
+ protected messageHash: Buffer;
13
+ protected derivationPath: string;
14
+ protected partyIdx: number;
15
+ protected dsgState: DsgState;
16
+ protected dklsWasm: DklsWasm | null;
17
+ constructor(keyShare: Buffer, partyIdx: number, derivationPath: string, messageHash: Buffer, dklsWasm?: BundlerWasmer);
18
+ private _restoreSession;
19
+ private _deserializeState;
20
+ private loadDklsWasm;
21
+ private getDklsWasm;
22
+ /**
23
+ * Returns the current DSG session as a base64 string.
24
+ * @returns {string} - base64 string of the current DSG session
25
+ */
26
+ getSession(): string;
27
+ /**
28
+ * Sets the DSG session from a base64 string.
29
+ * @param {string} session - base64 string of the DSG session
30
+ */
31
+ setSession(session: string): Promise<void>;
32
+ init(): Promise<DeserializedBroadcastMessage>;
33
+ get signature(): DeserializedDklsSignature;
34
+ /**
35
+ * Ends the DSG session by freeing any heap allocations from wasm. Note that the session is freed if a signature is produced.
36
+ */
37
+ endSession(): void;
38
+ /**
39
+ * Proccesses incoming messages to this party in the DKLs DSG protocol and
40
+ * produces messages from this party to other parties for the next round.
41
+ * @param messagesForIthRound - messages to process the current round
42
+ * @returns {DeserializedMessages} - messages to send to other parties for the next round
43
+ */
44
+ handleIncomingMessages(messagesForIthRound: DeserializedMessages): DeserializedMessages;
45
+ }
46
+ export {};
47
+ //# sourceMappingURL=dsg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dsg.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa-dkls/dsg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AACvF,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGlH,KAAK,UAAU,GAAG,cAAc,wCAAwC,CAAC,CAAC;AAC1E,KAAK,SAAS,GAAG,cAAc,uCAAuC,CAAC,CAAC;AACxE,KAAK,aAAa,GAAG,cAAc,2CAA2C,CAAC,CAAC;AAEhF,KAAK,QAAQ,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;AAEvD,qBAAa,GAAG;IACd,SAAS,CAAC,UAAU,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACvD,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC;IACtC,OAAO,CAAC,UAAU,CAAwC;IAC1D,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC;IACjC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAA0B;IACtD,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;gBAGlC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,aAAa;IAS1B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,iBAAiB;YAqBX,YAAY;IAM1B,OAAO,CAAC,WAAW;IAQnB;;;OAGG;IACH,UAAU,IAAI,MAAM;IAIpB;;;OAGG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B1C,IAAI,IAAI,OAAO,CAAC,4BAA4B,CAAC;IAwCnD,IAAI,SAAS,IAAI,yBAAyB,CAKzC;IAED;;OAEG;IACH,UAAU,IAAI,IAAI;IAUlB;;;;;OAKG;IACH,sBAAsB,CAAC,mBAAmB,EAAE,oBAAoB,GAAG,oBAAoB;CAoFxF"}