@bitgo-beta/sdk-lib-mpc 8.2.0-beta.203 → 8.2.0-beta.2030

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 (126) 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/dkls-vrf/dkg.d.ts +91 -0
  36. package/dist/src/tss/dkls-vrf/dkg.d.ts.map +1 -0
  37. package/dist/src/tss/dkls-vrf/dkg.js +278 -0
  38. package/dist/src/tss/dkls-vrf/index.d.ts +4 -0
  39. package/dist/src/tss/dkls-vrf/index.d.ts.map +1 -0
  40. package/dist/src/tss/dkls-vrf/index.js +40 -0
  41. package/dist/src/tss/dkls-vrf/types.d.ts +28 -0
  42. package/dist/src/tss/dkls-vrf/types.d.ts.map +1 -0
  43. package/dist/src/tss/dkls-vrf/types.js +23 -0
  44. package/dist/src/tss/dkls-vrf/util.d.ts +9 -0
  45. package/dist/src/tss/dkls-vrf/util.d.ts.map +1 -0
  46. package/dist/src/tss/dkls-vrf/util.js +52 -0
  47. package/dist/src/tss/ecdsa/index.js +23 -9
  48. package/dist/src/tss/ecdsa/paillierproof.js +10 -10
  49. package/dist/src/tss/ecdsa/rangeproof.d.ts +1 -2
  50. package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
  51. package/dist/src/tss/ecdsa/rangeproof.js +108 -118
  52. package/dist/src/tss/ecdsa/types.d.ts +28 -17
  53. package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
  54. package/dist/src/tss/ecdsa/types.js +29 -31
  55. package/dist/src/tss/ecdsa/zkVProof.d.ts +0 -1
  56. package/dist/src/tss/ecdsa/zkVProof.d.ts.map +1 -1
  57. package/dist/src/tss/ecdsa/zkVProof.js +9 -10
  58. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts +69 -0
  59. package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts.map +1 -0
  60. package/dist/src/tss/ecdsa-dkls/commsLayer.js +268 -0
  61. package/dist/src/tss/ecdsa-dkls/dkg.d.ts +64 -0
  62. package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -0
  63. package/dist/src/tss/ecdsa-dkls/dkg.js +334 -0
  64. package/dist/src/tss/ecdsa-dkls/dsg.d.ts +47 -0
  65. package/dist/src/tss/ecdsa-dkls/dsg.d.ts.map +1 -0
  66. package/dist/src/tss/ecdsa-dkls/dsg.js +271 -0
  67. package/dist/src/tss/ecdsa-dkls/index.d.ts +6 -0
  68. package/dist/src/tss/ecdsa-dkls/index.d.ts.map +1 -0
  69. package/dist/src/tss/ecdsa-dkls/index.js +42 -0
  70. package/dist/src/tss/ecdsa-dkls/types.d.ts +128 -0
  71. package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
  72. package/dist/src/tss/ecdsa-dkls/types.js +175 -0
  73. package/dist/src/tss/ecdsa-dkls/util.d.ts +26 -0
  74. package/dist/src/tss/ecdsa-dkls/util.d.ts.map +1 -0
  75. package/dist/src/tss/ecdsa-dkls/util.js +276 -0
  76. package/dist/src/tss/eddsa-mps/commsLayer.d.ts +30 -0
  77. package/dist/src/tss/eddsa-mps/commsLayer.d.ts.map +1 -0
  78. package/dist/src/tss/eddsa-mps/commsLayer.js +96 -0
  79. package/dist/src/tss/eddsa-mps/dkg.d.ts +109 -0
  80. package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -0
  81. package/dist/src/tss/eddsa-mps/dkg.js +303 -0
  82. package/dist/src/tss/eddsa-mps/dsg.d.ts +96 -0
  83. package/dist/src/tss/eddsa-mps/dsg.d.ts.map +1 -0
  84. package/dist/src/tss/eddsa-mps/dsg.js +346 -0
  85. package/dist/src/tss/eddsa-mps/index.d.ts +7 -0
  86. package/dist/src/tss/eddsa-mps/index.d.ts.map +1 -0
  87. package/dist/src/tss/eddsa-mps/index.js +42 -0
  88. package/dist/src/tss/eddsa-mps/types.d.ts +76 -0
  89. package/dist/src/tss/eddsa-mps/types.d.ts.map +1 -0
  90. package/dist/src/tss/eddsa-mps/types.js +105 -0
  91. package/dist/src/tss/eddsa-mps/util.d.ts +33 -0
  92. package/dist/src/tss/eddsa-mps/util.d.ts.map +1 -0
  93. package/dist/src/tss/eddsa-mps/util.js +94 -0
  94. package/dist/src/tss/index.d.ts +4 -0
  95. package/dist/src/tss/index.d.ts.map +1 -1
  96. package/dist/src/tss/index.js +10 -2
  97. package/dist/src/tss/redpallas-mps/commsLayer.d.ts +34 -0
  98. package/dist/src/tss/redpallas-mps/commsLayer.d.ts.map +1 -0
  99. package/dist/src/tss/redpallas-mps/commsLayer.js +100 -0
  100. package/dist/src/tss/redpallas-mps/dkg.d.ts +105 -0
  101. package/dist/src/tss/redpallas-mps/dkg.d.ts.map +1 -0
  102. package/dist/src/tss/redpallas-mps/dkg.js +290 -0
  103. package/dist/src/tss/redpallas-mps/dsg.d.ts +108 -0
  104. package/dist/src/tss/redpallas-mps/dsg.d.ts.map +1 -0
  105. package/dist/src/tss/redpallas-mps/dsg.js +355 -0
  106. package/dist/src/tss/redpallas-mps/index.d.ts +7 -0
  107. package/dist/src/tss/redpallas-mps/index.d.ts.map +1 -0
  108. package/dist/src/tss/redpallas-mps/index.js +42 -0
  109. package/dist/src/tss/redpallas-mps/types.d.ts +85 -0
  110. package/dist/src/tss/redpallas-mps/types.d.ts.map +1 -0
  111. package/dist/src/tss/redpallas-mps/types.js +112 -0
  112. package/dist/src/tss/redpallas-mps/util.d.ts +46 -0
  113. package/dist/src/tss/redpallas-mps/util.d.ts.map +1 -0
  114. package/dist/src/tss/redpallas-mps/util.js +150 -0
  115. package/dist/src/types.d.ts +0 -1
  116. package/dist/src/types.d.ts.map +1 -1
  117. package/dist/src/util.d.ts +0 -1
  118. package/dist/src/util.d.ts.map +1 -1
  119. package/dist/src/util.js +21 -22
  120. package/dist/tsconfig.tsbuildinfo +1 -1
  121. package/package.json +42 -5
  122. package/.eslintignore +0 -5
  123. package/CHANGELOG.md +0 -340
  124. package/dist/src/openssl/opensslbytes.d.ts +0 -4
  125. package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
  126. package/dist/src/openssl/opensslbytes.js +0 -20
@@ -0,0 +1,278 @@
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.VrfDkg = void 0;
37
+ const cbor_x_1 = require("cbor-x");
38
+ const buffer_1 = require("buffer");
39
+ const types_1 = require("./types");
40
+ /**
41
+ * Round driver for the DKLS VRF DKG, which produces a Ristretto VRF keyshare.
42
+ *
43
+ * Two rounds, all broadcast: round 1 exchanges commitments (VrfKeygenMsg1), round 2
44
+ * exchanges openings (VrfKeygenMsg2, emitted per recipient) and the DKG finalizes
45
+ * locally. There is no chain-code commitment step, unlike the signing DKG.
46
+ *
47
+ * Callers pass every message they hold; this class routes them internally. Round 1
48
+ * must exclude the party's own commitment (the wasm rejects a sender set containing
49
+ * it) and round 2 consumes the openings addressed to this party, own included.
50
+ *
51
+ * Party indices follow the MPCv2 convention: 0 = user, 1 = backup, 2 = bitgo.
52
+ */
53
+ class VrfDkg {
54
+ constructor(n, t, partyIdx, seed, vrfWasm) {
55
+ this.vrfState = types_1.VrfDkgState.Uninitialized;
56
+ this.n = n;
57
+ this.t = t;
58
+ this.partyIdx = partyIdx;
59
+ this.seed = seed;
60
+ this.vrfWasm = vrfWasm ?? null;
61
+ }
62
+ async loadVrfWasm() {
63
+ if (!this.vrfWasm) {
64
+ this.vrfWasm = await Promise.resolve().then(() => __importStar(require('@silencelaboratories/dkls-wasm-ll-vrf-node')));
65
+ }
66
+ }
67
+ getVrfWasm() {
68
+ if (!this.vrfWasm) {
69
+ throw Error('VRF wasm not loaded');
70
+ }
71
+ return this.vrfWasm;
72
+ }
73
+ _restoreSession() {
74
+ if (!this.vrfSession) {
75
+ this.vrfSession = this.getVrfWasm().VrfKeygenSession.fromBytes(this.vrfSessionBytes);
76
+ }
77
+ }
78
+ /**
79
+ * Re-derive the round state from the wasm session bytes instead of trusting a
80
+ * caller-supplied enum. The wasm embeds a round tag for exactly this reason; this
81
+ * is what lets a stateless server resume mid-protocol.
82
+ */
83
+ _deserializeState() {
84
+ if (!this.vrfSession) {
85
+ throw Error('Session not initialized');
86
+ }
87
+ const round = (0, cbor_x_1.decode)(this.vrfSession.toBytes()).round;
88
+ if (round === 'Init') {
89
+ this.vrfState = types_1.VrfDkgState.Uninitialized;
90
+ }
91
+ else if (round === 'WaitMsg1') {
92
+ this.vrfState = types_1.VrfDkgState.Round1;
93
+ }
94
+ else if (round === 'WaitMsg2') {
95
+ this.vrfState = types_1.VrfDkgState.Round2;
96
+ }
97
+ else if (typeof round === 'object' && round !== null && 'Share' in round) {
98
+ this.vrfState = types_1.VrfDkgState.Complete;
99
+ }
100
+ else {
101
+ this.vrfState = types_1.VrfDkgState.InvalidState;
102
+ throw Error(`Invalid State: ${JSON.stringify(round)}`);
103
+ }
104
+ }
105
+ /**
106
+ * Create this party's VRF DKG commitment (VrfKeygenMsg1, broadcast).
107
+ */
108
+ async initDkg() {
109
+ if (!this.vrfWasm) {
110
+ await this.loadVrfWasm();
111
+ }
112
+ if (this.t > this.n || this.partyIdx >= this.n) {
113
+ throw Error('Invalid parameters for VRF DKG');
114
+ }
115
+ if (this.vrfState != types_1.VrfDkgState.Uninitialized) {
116
+ throw Error('VRF DKG session already initialized');
117
+ }
118
+ if (typeof window !== 'undefined' &&
119
+ /* checks for electron processes */
120
+ !window.process &&
121
+ !window.process?.['type']) {
122
+ /* This is only needed for browsers/web because it uses fetch to resolve the wasm asset for the web */
123
+ const initVrf = await Promise.resolve().then(() => __importStar(require('@silencelaboratories/dkls-wasm-ll-vrf-web')));
124
+ await initVrf.default();
125
+ }
126
+ if (this.seed && this.seed.length !== 32) {
127
+ throw Error(`Seed should be 32 bytes, got ${this.seed.length}.`);
128
+ }
129
+ const { VrfKeygenSession } = this.getVrfWasm();
130
+ this.vrfSession = this.seed
131
+ ? new VrfKeygenSession(this.n, this.t, this.partyIdx, new Uint8Array(this.seed))
132
+ : new VrfKeygenSession(this.n, this.t, this.partyIdx);
133
+ try {
134
+ const message = this.vrfSession.createFirstMessage();
135
+ // Copy the payload out before freeing the wasm message object.
136
+ const payload = new Uint8Array(message.payload);
137
+ message.free();
138
+ this.vrfSessionBytes = this.vrfSession.toBytes();
139
+ this._deserializeState();
140
+ return { broadcastMessages: [{ payload, from: this.partyIdx }], p2pMessages: [] };
141
+ }
142
+ catch (e) {
143
+ throw Error(`Error while creating the first VRF message from party ${this.partyIdx}: ${e}`);
144
+ }
145
+ }
146
+ /**
147
+ * Process the messages this party holds for the current round and return this
148
+ * party's messages for the next round. Callers pass everything they hold; the
149
+ * round routing happens here:
150
+ *
151
+ * - Round 1 (WaitMsg1): consumes the other parties' commitments (own excluded —
152
+ * the wasm rejects a sender set containing the party's own Msg1) and emits this
153
+ * party's openings (VrfKeygenMsg2), one broadcast message per recipient.
154
+ * - Round 2 (WaitMsg2): consumes the openings addressed to this party (own
155
+ * self-addressed opening included) and finalizes the DKG, returning no messages.
156
+ */
157
+ async handleIncomingMessages(messagesForIthRound) {
158
+ this._restoreSession();
159
+ if (!this.vrfSession) {
160
+ throw Error('Session not initialized');
161
+ }
162
+ const { Message: VrfMessage } = this.getVrfWasm();
163
+ let nextRoundMessages = [];
164
+ const nextRoundDeserializedMessages = { broadcastMessages: [], p2pMessages: [] };
165
+ try {
166
+ switch (this.vrfState) {
167
+ case types_1.VrfDkgState.Round1: {
168
+ const othersCommitments = messagesForIthRound.broadcastMessages.filter((m) => m.from !== this.partyIdx);
169
+ nextRoundMessages = this.vrfSession.handleMessages(othersCommitments.map((m) => new VrfMessage(m.payload, m.from)));
170
+ this._deserializeState();
171
+ break;
172
+ }
173
+ case types_1.VrfDkgState.Round2: {
174
+ const openingsForMe = messagesForIthRound.p2pMessages.filter((m) => m.to === this.partyIdx);
175
+ nextRoundMessages = this.vrfSession.handleMessages(openingsForMe.map((m) => new VrfMessage(m.payload, m.from, m.to)));
176
+ // vrfKeyshare() consumes (and deallocates) the session in all cases.
177
+ const vrfKeyShare = this.vrfSession.vrfKeyshare();
178
+ this.vrfKeyShare = vrfKeyShare;
179
+ this.keyShareBuff = buffer_1.Buffer.from(vrfKeyShare.toBytes());
180
+ this.publicKey = buffer_1.Buffer.from(vrfKeyShare.publicKey);
181
+ this.keyId = buffer_1.Buffer.from(vrfKeyShare.keyId);
182
+ this.rootChainCode = buffer_1.Buffer.from(vrfKeyShare.rootChainCode);
183
+ vrfKeyShare.free();
184
+ this.vrfState = types_1.VrfDkgState.Complete;
185
+ return nextRoundDeserializedMessages;
186
+ }
187
+ default:
188
+ throw Error(`Invalid VRF DKG state: ${this.vrfState}`);
189
+ }
190
+ nextRoundDeserializedMessages.broadcastMessages = nextRoundMessages
191
+ .filter((m) => m.to_id === undefined)
192
+ .map((m) => ({ payload: new Uint8Array(m.payload), from: m.from_id }));
193
+ nextRoundDeserializedMessages.p2pMessages = nextRoundMessages
194
+ .filter((m) => m.to_id !== undefined)
195
+ .map((m) => ({ payload: new Uint8Array(m.payload), from: m.from_id, to: m.to_id }));
196
+ return nextRoundDeserializedMessages;
197
+ }
198
+ catch (e) {
199
+ throw Error(`Error while creating VRF messages from party ${this.partyIdx}, state ${this.vrfState}: ${e}`);
200
+ }
201
+ finally {
202
+ nextRoundMessages.forEach((m) => m.free());
203
+ if (this.vrfState !== types_1.VrfDkgState.Complete) {
204
+ this.vrfSessionBytes = this.vrfSession.toBytes();
205
+ this.vrfSession = undefined;
206
+ }
207
+ }
208
+ }
209
+ /**
210
+ * Get the VRF keyshare bytes (CBOR VrfKeyshare) once the DKG is complete.
211
+ * This buffer is private key material.
212
+ */
213
+ getKeyShare() {
214
+ if (!this.keyShareBuff) {
215
+ throw Error('Can not get key share, VRF DKG is not complete yet.');
216
+ }
217
+ return this.keyShareBuff;
218
+ }
219
+ /** 32-byte compressed Ristretto VRF public key, available once the DKG is complete. */
220
+ getPublicKey() {
221
+ if (!this.publicKey) {
222
+ throw Error('Can not get public key, VRF DKG is not complete yet.');
223
+ }
224
+ return this.publicKey;
225
+ }
226
+ /** 32-byte VRF key identifier, available once the DKG is complete. */
227
+ getKeyId() {
228
+ if (!this.keyId) {
229
+ throw Error('Can not get key id, VRF DKG is not complete yet.');
230
+ }
231
+ return this.keyId;
232
+ }
233
+ /** 32-byte VRF root chain code, available once the DKG is complete. */
234
+ getRootChainCode() {
235
+ if (!this.rootChainCode) {
236
+ throw Error('Can not get root chain code, VRF DKG is not complete yet.');
237
+ }
238
+ return this.rootChainCode;
239
+ }
240
+ /**
241
+ * Get the current session data that can be used to restore the session later.
242
+ *
243
+ * The returned session bytes are secret key material — they carry this party's
244
+ * secret polynomial share. They must never be logged or persisted in the clear;
245
+ * the caller encrypts them exactly like the key share itself.
246
+ */
247
+ getSessionData() {
248
+ const sessionData = {
249
+ vrfSessionBytes: this.vrfSessionBytes,
250
+ vrfState: this.vrfState,
251
+ };
252
+ if (this.keyShareBuff) {
253
+ sessionData.keyShareBuff = this.keyShareBuff;
254
+ }
255
+ return sessionData;
256
+ }
257
+ /**
258
+ * Restore a VRF DKG session from previous session data.
259
+ * Note: This should not be used for Round 1 as that's the initialization phase.
260
+ * The round state is re-derived from the wasm session bytes, not trusted from the
261
+ * caller-supplied enum, so a tampered `vrfState` cannot steer the protocol.
262
+ */
263
+ static async restoreSession(n, t, partyIdx, sessionData, seed, vrfWasm) {
264
+ const vrfDkg = new VrfDkg(n, t, partyIdx, seed, vrfWasm);
265
+ if (!vrfDkg.vrfWasm) {
266
+ await vrfDkg.loadVrfWasm();
267
+ }
268
+ vrfDkg.vrfSessionBytes = sessionData.vrfSessionBytes;
269
+ vrfDkg._restoreSession();
270
+ vrfDkg._deserializeState();
271
+ if (sessionData.keyShareBuff) {
272
+ vrfDkg.keyShareBuff = sessionData.keyShareBuff;
273
+ }
274
+ return vrfDkg;
275
+ }
276
+ }
277
+ exports.VrfDkg = VrfDkg;
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGtnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rzcy9ka2xzLXZyZi9ka2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsbUNBQWdDO0FBQ2hDLG1DQUFnQztBQUVoQyxtQ0FBeUQ7QUFZekQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxNQUFNO0lBZWpCLFlBQVksQ0FBUyxFQUFFLENBQVMsRUFBRSxRQUFnQixFQUFFLElBQWEsRUFBRSxPQUEwQjtRQUhuRixhQUFRLEdBQWdCLG1CQUFXLENBQUMsYUFBYSxDQUFDO1FBSTFELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyx3REFBYSw0Q0FBNEMsR0FBQyxDQUFDO1FBQzVFLENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLGdC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QUcsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUNyRCxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDN0IsTUFBTSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0Y7QUEvUEQsd0JBK1BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBNZXNzYWdlIGFzIFZyZldhc21NZXNzYWdlLFxuICBWcmZLZXlnZW5TZXNzaW9uLFxuICBWcmZLZXlzaGFyZSBhcyBEa2xzVnJmS2V5c2hhcmUsXG59IGZyb20gJ0BzaWxlbmNlbGFib3JhdG9yaWVzL2RrbHMtd2FzbS1sbC12cmYtbm9kZSc7XG5pbXBvcnQgdHlwZSB7IFZyZktleWdlblNlc3Npb24gYXMgVnJmV2ViS2V5Z2VuU2Vzc2lvbiB9IGZyb20gJ0BzaWxlbmNlbGFib3JhdG9yaWVzL2RrbHMtd2FzbS1sbC12cmYtd2ViJztcbmltcG9ydCB7IGRlY29kZSB9IGZyb20gJ2Nib3IteCc7XG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkTWVzc2FnZXMgfSBmcm9tICcuLi9lY2RzYS1ka2xzL3R5cGVzJztcbmltcG9ydCB7IFZyZkRrZ1Nlc3Npb25EYXRhLCBWcmZEa2dTdGF0ZSB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBQbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVzIHRoYXQgZG8gbm90IGV4aXN0IGV2ZXJ5d2hlcmU6IHRoZSBub2RlL3dlYi9idW5kbGVyIHdhc21cbi8vIHZhcmlhbnRzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUgYW5kIHNlbGVjdGVkIGF0IHJ1bnRpbWUgKG5vZGUgcHJvY2VzcyB2cyBicm93c2VyIHZzXG4vLyBidW5kbGVyKS4gU3RhdGljIGltcG9ydHMgd291bGQgbG9hZCB0aGUgd3JvbmcgcGxhdGZvcm0ncyB3YXNtIGJpbmRpbmcsIHNvIGJvdGggdGhlXG4vLyB0eXBlIGFsaWFzZXMgYmVsb3cgYW5kIHRoZSBsYXp5IGBhd2FpdCBpbXBvcnQoKWAgY2FsbHMgYXJlIGRlbGliZXJhdGUuXG50eXBlIE5vZGVWcmZXYXNtZXIgPSB0eXBlb2YgaW1wb3J0KCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtdnJmLW5vZGUnKTtcbnR5cGUgV2ViVnJmV2FzbWVyID0gdHlwZW9mIGltcG9ydCgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLXZyZi13ZWInKTtcbnR5cGUgQnVuZGxlclZyZldhc21lciA9IHR5cGVvZiBpbXBvcnQoJ0BzaWxlbmNlbGFib3JhdG9yaWVzL2RrbHMtd2FzbS1sbC12cmYtYnVuZGxlcicpO1xuXG50eXBlIFZyZldhc20gPSBOb2RlVnJmV2FzbWVyIHwgV2ViVnJmV2FzbWVyIHwgQnVuZGxlclZyZldhc21lcjtcblxuLyoqXG4gKiBSb3VuZCBkcml2ZXIgZm9yIHRoZSBES0xTIFZSRiBES0csIHdoaWNoIHByb2R1Y2VzIGEgUmlzdHJldHRvIFZSRiBrZXlzaGFyZS5cbiAqXG4gKiBUd28gcm91bmRzLCBhbGwgYnJvYWRjYXN0OiByb3VuZCAxIGV4Y2hhbmdlcyBjb21taXRtZW50cyAoVnJmS2V5Z2VuTXNnMSksIHJvdW5kIDJcbiAqIGV4Y2hhbmdlcyBvcGVuaW5ncyAoVnJmS2V5Z2VuTXNnMiwgZW1pdHRlZCBwZXIgcmVjaXBpZW50KSBhbmQgdGhlIERLRyBmaW5hbGl6ZXNcbiAqIGxvY2FsbHkuIFRoZXJlIGlzIG5vIGNoYWluLWNvZGUgY29tbWl0bWVudCBzdGVwLCB1bmxpa2UgdGhlIHNpZ25pbmcgREtHLlxuICpcbiAqIENhbGxlcnMgcGFzcyBldmVyeSBtZXNzYWdlIHRoZXkgaG9sZDsgdGhpcyBjbGFzcyByb3V0ZXMgdGhlbSBpbnRlcm5hbGx5LiBSb3VuZCAxXG4gKiBtdXN0IGV4Y2x1ZGUgdGhlIHBhcnR5J3Mgb3duIGNvbW1pdG1lbnQgKHRoZSB3YXNtIHJlamVjdHMgYSBzZW5kZXIgc2V0IGNvbnRhaW5pbmdcbiAqIGl0KSBhbmQgcm91bmQgMiBjb25zdW1lcyB0aGUgb3BlbmluZ3MgYWRkcmVzc2VkIHRvIHRoaXMgcGFydHksIG93biBpbmNsdWRlZC5cbiAqXG4gKiBQYXJ0eSBpbmRpY2VzIGZvbGxvdyB0aGUgTVBDdjIgY29udmVudGlvbjogMCA9IHVzZXIsIDEgPSBiYWNrdXAsIDIgPSBiaXRnby5cbiAqL1xuZXhwb3J0IGNsYXNzIFZyZkRrZyB7XG4gIHByb3RlY3RlZCB2cmZTZXNzaW9uOiBWcmZLZXlnZW5TZXNzaW9uIHwgVnJmV2ViS2V5Z2VuU2Vzc2lvbiB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHZyZlNlc3Npb25CeXRlczogVWludDhBcnJheTtcbiAgcHJvdGVjdGVkIHZyZktleVNoYXJlOiBEa2xzVnJmS2V5c2hhcmUgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBrZXlTaGFyZUJ1ZmY6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHB1YmxpY0tleTogQnVmZmVyIHwgdW5kZWZpbmVkO1xuICBwcm90ZWN0ZWQga2V5SWQ6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIHJvb3RDaGFpbkNvZGU6IEJ1ZmZlciB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIG46IG51bWJlcjtcbiAgcHJvdGVjdGVkIHQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIHBhcnR5SWR4OiBudW1iZXI7XG4gIHByb3RlY3RlZCBzZWVkOiBCdWZmZXIgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCB2cmZTdGF0ZTogVnJmRGtnU3RhdGUgPSBWcmZEa2dTdGF0ZS5VbmluaXRpYWxpemVkO1xuICBwcm90ZWN0ZWQgdnJmV2FzbTogVnJmV2FzbSB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IobjogbnVtYmVyLCB0OiBudW1iZXIsIHBhcnR5SWR4OiBudW1iZXIsIHNlZWQ/OiBCdWZmZXIsIHZyZldhc20/OiBCdW5kbGVyVnJmV2FzbWVyKSB7XG4gICAgdGhpcy5uID0gbjtcbiAgICB0aGlzLnQgPSB0O1xuICAgIHRoaXMucGFydHlJZHggPSBwYXJ0eUlkeDtcbiAgICB0aGlzLnNlZWQgPSBzZWVkO1xuICAgIHRoaXMudnJmV2FzbSA9IHZyZldhc20gPz8gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFZyZldhc20oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnZyZldhc20pIHtcbiAgICAgIHRoaXMudnJmV2FzbSA9IGF3YWl0IGltcG9ydCgnQHNpbGVuY2VsYWJvcmF0b3JpZXMvZGtscy13YXNtLWxsLXZyZi1ub2RlJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRWcmZXYXNtKCkge1xuICAgIGlmICghdGhpcy52cmZXYXNtKSB7XG4gICAgICB0aHJvdyBFcnJvcignVlJGIHdhc20gbm90IGxvYWRlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52cmZXYXNtO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzdG9yZVNlc3Npb24oKSB7XG4gICAgaWYgKCF0aGlzLnZyZlNlc3Npb24pIHtcbiAgICAgIHRoaXMudnJmU2Vzc2lvbiA9IHRoaXMuZ2V0VnJmV2FzbSgpLlZyZktleWdlblNlc3Npb24uZnJvbUJ5dGVzKHRoaXMudnJmU2Vzc2lvbkJ5dGVzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmUtZGVyaXZlIHRoZSByb3VuZCBzdGF0ZSBmcm9tIHRoZSB3YXNtIHNlc3Npb24gYnl0ZXMgaW5zdGVhZCBvZiB0cnVzdGluZyBhXG4gICAqIGNhbGxlci1zdXBwbGllZCBlbnVtLiBUaGUgd2FzbSBlbWJlZHMgYSByb3VuZCB0YWcgZm9yIGV4YWN0bHkgdGhpcyByZWFzb247IHRoaXNcbiAgICogaXMgd2hhdCBsZXRzIGEgc3RhdGVsZXNzIHNlcnZlciByZXN1bWUgbWlkLXByb3RvY29sLlxuICAgKi9cbiAgcHJpdmF0ZSBfZGVzZXJpYWxpemVTdGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMudnJmU2Vzc2lvbikge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Nlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHJvdW5kID0gZGVjb2RlKHRoaXMudnJmU2Vzc2lvbi50b0J5dGVzKCkpLnJvdW5kO1xuICAgIGlmIChyb3VuZCA9PT0gJ0luaXQnKSB7XG4gICAgICB0aGlzLnZyZlN0YXRlID0gVnJmRGtnU3RhdGUuVW5pbml0aWFsaXplZDtcbiAgICB9IGVsc2UgaWYgKHJvdW5kID09PSAnV2FpdE1zZzEnKSB7XG4gICAgICB0aGlzLnZyZlN0YXRlID0gVnJmRGtnU3RhdGUuUm91bmQxO1xuICAgIH0gZWxzZSBpZiAocm91bmQgPT09ICdXYWl0TXNnMicpIHtcbiAgICAgIHRoaXMudnJmU3RhdGUgPSBWcmZEa2dTdGF0ZS5Sb3VuZDI7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygcm91bmQgPT09ICdvYmplY3QnICYmIHJvdW5kICE9PSBudWxsICYmICdTaGFyZScgaW4gcm91bmQpIHtcbiAgICAgIHRoaXMudnJmU3RhdGUgPSBWcmZEa2dTdGF0ZS5Db21wbGV0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52cmZTdGF0ZSA9IFZyZkRrZ1N0YXRlLkludmFsaWRTdGF0ZTtcbiAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIFN0YXRlOiAke0pTT04uc3RyaW5naWZ5KHJvdW5kKX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHRoaXMgcGFydHkncyBWUkYgREtHIGNvbW1pdG1lbnQgKFZyZktleWdlbk1zZzEsIGJyb2FkY2FzdCkuXG4gICAqL1xuICBhc3luYyBpbml0RGtnKCk6IFByb21pc2U8RGVzZXJpYWxpemVkTWVzc2FnZXM+IHtcbiAgICBpZiAoIXRoaXMudnJmV2FzbSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkVnJmV2FzbSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ID4gdGhpcy5uIHx8IHRoaXMucGFydHlJZHggPj0gdGhpcy5uKSB7XG4gICAgICB0aHJvdyBFcnJvcignSW52YWxpZCBwYXJhbWV0ZXJzIGZvciBWUkYgREtHJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZyZlN0YXRlICE9IFZyZkRrZ1N0YXRlLlVuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdWUkYgREtHIHNlc3Npb24gYWxyZWFkeSBpbml0aWFsaXplZCcpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgLyogY2hlY2tzIGZvciBlbGVjdHJvbiBwcm9jZXNzZXMgKi9cbiAgICAgICF3aW5kb3cucHJvY2VzcyAmJlxuICAgICAgIXdpbmRvdy5wcm9jZXNzPy5bJ3R5cGUnXVxuICAgICkge1xuICAgICAgLyogVGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgYnJvd3NlcnMvd2ViIGJlY2F1c2UgaXQgdXNlcyBmZXRjaCB0byByZXNvbHZlIHRoZSB3YXNtIGFzc2V0IGZvciB0aGUgd2ViICovXG4gICAgICBjb25zdCBpbml0VnJmID0gYXdhaXQgaW1wb3J0KCdAc2lsZW5jZWxhYm9yYXRvcmllcy9ka2xzLXdhc20tbGwtdnJmLXdlYicpO1xuICAgICAgYXdhaXQgaW5pdFZyZi5kZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlZWQgJiYgdGhpcy5zZWVkLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IEVycm9yKGBTZWVkIHNob3VsZCBiZSAzMiBieXRlcywgZ290ICR7dGhpcy5zZWVkLmxlbmd0aH0uYCk7XG4gICAgfVxuICAgIGNvbnN0IHsgVnJmS2V5Z2VuU2Vzc2lvbiB9ID0gdGhpcy5nZXRWcmZXYXNtKCk7XG4gICAgdGhpcy52cmZTZXNzaW9uID0gdGhpcy5zZWVkXG4gICAgICA/IG5ldyBWcmZLZXlnZW5TZXNzaW9uKHRoaXMubiwgdGhpcy50LCB0aGlzLnBhcnR5SWR4LCBuZXcgVWludDhBcnJheSh0aGlzLnNlZWQpKVxuICAgICAgOiBuZXcgVnJmS2V5Z2VuU2Vzc2lvbih0aGlzLm4sIHRoaXMudCwgdGhpcy5wYXJ0eUlkeCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnZyZlNlc3Npb24uY3JlYXRlRmlyc3RNZXNzYWdlKCk7XG4gICAgICAvLyBDb3B5IHRoZSBwYXlsb2FkIG91dCBiZWZvcmUgZnJlZWluZyB0aGUgd2FzbSBtZXNzYWdlIG9iamVjdC5cbiAgICAgIGNvbnN0IHBheWxvYWQgPSBuZXcgVWludDhBcnJheShtZXNzYWdlLnBheWxvYWQpO1xuICAgICAgbWVzc2FnZS5mcmVlKCk7XG4gICAgICB0aGlzLnZyZlNlc3Npb25CeXRlcyA9IHRoaXMudnJmU2Vzc2lvbi50b0J5dGVzKCk7XG4gICAgICB0aGlzLl9kZXNlcmlhbGl6ZVN0YXRlKCk7XG4gICAgICByZXR1cm4geyBicm9hZGNhc3RNZXNzYWdlczogW3sgcGF5bG9hZCwgZnJvbTogdGhpcy5wYXJ0eUlkeCB9XSwgcDJwTWVzc2FnZXM6IFtdIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIHRoZSBmaXJzdCBWUkYgbWVzc2FnZSBmcm9tIHBhcnR5ICR7dGhpcy5wYXJ0eUlkeH06ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0aGUgbWVzc2FnZXMgdGhpcyBwYXJ0eSBob2xkcyBmb3IgdGhlIGN1cnJlbnQgcm91bmQgYW5kIHJldHVybiB0aGlzXG4gICAqIHBhcnR5J3MgbWVzc2FnZXMgZm9yIHRoZSBuZXh0IHJvdW5kLiBDYWxsZXJzIHBhc3MgZXZlcnl0aGluZyB0aGV5IGhvbGQ7IHRoZVxuICAgKiByb3VuZCByb3V0aW5nIGhhcHBlbnMgaGVyZTpcbiAgICpcbiAgICogLSBSb3VuZCAxIChXYWl0TXNnMSk6IGNvbnN1bWVzIHRoZSBvdGhlciBwYXJ0aWVzJyBjb21taXRtZW50cyAob3duIGV4Y2x1ZGVkIOKAlFxuICAgKiAgIHRoZSB3YXNtIHJlamVjdHMgYSBzZW5kZXIgc2V0IGNvbnRhaW5pbmcgdGhlIHBhcnR5J3Mgb3duIE1zZzEpIGFuZCBlbWl0cyB0aGlzXG4gICAqICAgcGFydHkncyBvcGVuaW5ncyAoVnJmS2V5Z2VuTXNnMiksIG9uZSBicm9hZGNhc3QgbWVzc2FnZSBwZXIgcmVjaXBpZW50LlxuICAgKiAtIFJvdW5kIDIgKFdhaXRNc2cyKTogY29uc3VtZXMgdGhlIG9wZW5pbmdzIGFkZHJlc3NlZCB0byB0aGlzIHBhcnR5IChvd25cbiAgICogICBzZWxmLWFkZHJlc3NlZCBvcGVuaW5nIGluY2x1ZGVkKSBhbmQgZmluYWxpemVzIHRoZSBES0csIHJldHVybmluZyBubyBtZXNzYWdlcy5cbiAgICovXG4gIGFzeW5jIGhhbmRsZUluY29taW5nTWVzc2FnZXMobWVzc2FnZXNGb3JJdGhSb3VuZDogRGVzZXJpYWxpemVkTWVzc2FnZXMpOiBQcm9taXNlPERlc2VyaWFsaXplZE1lc3NhZ2VzPiB7XG4gICAgdGhpcy5fcmVzdG9yZVNlc3Npb24oKTtcbiAgICBpZiAoIXRoaXMudnJmU2Vzc2lvbikge1xuICAgICAgdGhyb3cgRXJyb3IoJ1Nlc3Npb24gbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuICAgIGNvbnN0IHsgTWVzc2FnZTogVnJmTWVzc2FnZSB9ID0gdGhpcy5nZXRWcmZXYXNtKCk7XG4gICAgbGV0IG5leHRSb3VuZE1lc3NhZ2VzOiBWcmZXYXNtTWVzc2FnZVtdID0gW107XG4gICAgY29uc3QgbmV4dFJvdW5kRGVzZXJpYWxpemVkTWVzc2FnZXM6IERlc2VyaWFsaXplZE1lc3NhZ2VzID0geyBicm9hZGNhc3RNZXNzYWdlczogW10sIHAycE1lc3NhZ2VzOiBbXSB9O1xuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKHRoaXMudnJmU3RhdGUpIHtcbiAgICAgICAgY2FzZSBWcmZEa2dTdGF0ZS5Sb3VuZDE6IHtcbiAgICAgICAgICBjb25zdCBvdGhlcnNDb21taXRtZW50cyA9IG1lc3NhZ2VzRm9ySXRoUm91bmQuYnJvYWRjYXN0TWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLmZyb20gIT09IHRoaXMucGFydHlJZHgpO1xuICAgICAgICAgIG5leHRSb3VuZE1lc3NhZ2VzID0gdGhpcy52cmZTZXNzaW9uLmhhbmRsZU1lc3NhZ2VzKFxuICAgICAgICAgICAgb3RoZXJzQ29tbWl0bWVudHMubWFwKChtKSA9PiBuZXcgVnJmTWVzc2FnZShtLnBheWxvYWQsIG0uZnJvbSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLl9kZXNlcmlhbGl6ZVN0YXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBWcmZEa2dTdGF0ZS5Sb3VuZDI6IHtcbiAgICAgICAgICBjb25zdCBvcGVuaW5nc0Zvck1lID0gbWVzc2FnZXNGb3JJdGhSb3VuZC5wMnBNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0udG8gPT09IHRoaXMucGFydHlJZHgpO1xuICAgICAgICAgIG5leHRSb3VuZE1lc3NhZ2VzID0gdGhpcy52cmZTZXNzaW9uLmhhbmRsZU1lc3NhZ2VzKFxuICAgICAgICAgICAgb3BlbmluZ3NGb3JNZS5tYXAoKG0pID0+IG5ldyBWcmZNZXNzYWdlKG0ucGF5bG9hZCwgbS5mcm9tLCBtLnRvKSlcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIHZyZktleXNoYXJlKCkgY29uc3VtZXMgKGFuZCBkZWFsbG9jYXRlcykgdGhlIHNlc3Npb24gaW4gYWxsIGNhc2VzLlxuICAgICAgICAgIGNvbnN0IHZyZktleVNoYXJlID0gdGhpcy52cmZTZXNzaW9uLnZyZktleXNoYXJlKCk7XG4gICAgICAgICAgdGhpcy52cmZLZXlTaGFyZSA9IHZyZktleVNoYXJlO1xuICAgICAgICAgIHRoaXMua2V5U2hhcmVCdWZmID0gQnVmZmVyLmZyb20odnJmS2V5U2hhcmUudG9CeXRlcygpKTtcbiAgICAgICAgICB0aGlzLnB1YmxpY0tleSA9IEJ1ZmZlci5mcm9tKHZyZktleVNoYXJlLnB1YmxpY0tleSk7XG4gICAgICAgICAgdGhpcy5rZXlJZCA9IEJ1ZmZlci5mcm9tKHZyZktleVNoYXJlLmtleUlkKTtcbiAgICAgICAgICB0aGlzLnJvb3RDaGFpbkNvZGUgPSBCdWZmZXIuZnJvbSh2cmZLZXlTaGFyZS5yb290Q2hhaW5Db2RlKTtcbiAgICAgICAgICB2cmZLZXlTaGFyZS5mcmVlKCk7XG4gICAgICAgICAgdGhpcy52cmZTdGF0ZSA9IFZyZkRrZ1N0YXRlLkNvbXBsZXRlO1xuICAgICAgICAgIHJldHVybiBuZXh0Um91bmREZXNlcmlhbGl6ZWRNZXNzYWdlcztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IEVycm9yKGBJbnZhbGlkIFZSRiBES0cgc3RhdGU6ICR7dGhpcy52cmZTdGF0ZX1gKTtcbiAgICAgIH1cblxuICAgICAgbmV4dFJvdW5kRGVzZXJpYWxpemVkTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMgPSBuZXh0Um91bmRNZXNzYWdlc1xuICAgICAgICAuZmlsdGVyKChtKSA9PiBtLnRvX2lkID09PSB1bmRlZmluZWQpXG4gICAgICAgIC5tYXAoKG0pID0+ICh7IHBheWxvYWQ6IG5ldyBVaW50OEFycmF5KG0ucGF5bG9hZCksIGZyb206IG0uZnJvbV9pZCB9KSk7XG4gICAgICBuZXh0Um91bmREZXNlcmlhbGl6ZWRNZXNzYWdlcy5wMnBNZXNzYWdlcyA9IG5leHRSb3VuZE1lc3NhZ2VzXG4gICAgICAgIC5maWx0ZXIoKG0pID0+IG0udG9faWQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgLm1hcCgobSkgPT4gKHsgcGF5bG9hZDogbmV3IFVpbnQ4QXJyYXkobS5wYXlsb2FkKSwgZnJvbTogbS5mcm9tX2lkLCB0bzogbS50b19pZCEgfSkpO1xuICAgICAgcmV0dXJuIG5leHRSb3VuZERlc2VyaWFsaXplZE1lc3NhZ2VzO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyBWUkYgbWVzc2FnZXMgZnJvbSBwYXJ0eSAke3RoaXMucGFydHlJZHh9LCBzdGF0ZSAke3RoaXMudnJmU3RhdGV9OiAke2V9YCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG5leHRSb3VuZE1lc3NhZ2VzLmZvckVhY2goKG0pID0+IG0uZnJlZSgpKTtcbiAgICAgIGlmICh0aGlzLnZyZlN0YXRlICE9PSBWcmZEa2dTdGF0ZS5Db21wbGV0ZSkge1xuICAgICAgICB0aGlzLnZyZlNlc3Npb25CeXRlcyA9IHRoaXMudnJmU2Vzc2lvbi50b0J5dGVzKCk7XG4gICAgICAgIHRoaXMudnJmU2Vzc2lvbiA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBWUkYga2V5c2hhcmUgYnl0ZXMgKENCT1IgVnJmS2V5c2hhcmUpIG9uY2UgdGhlIERLRyBpcyBjb21wbGV0ZS5cbiAgICogVGhpcyBidWZmZXIgaXMgcHJpdmF0ZSBrZXkgbWF0ZXJpYWwuXG4gICAqL1xuICBnZXRLZXlTaGFyZSgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5rZXlTaGFyZUJ1ZmYpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IGdldCBrZXkgc2hhcmUsIFZSRiBES0cgaXMgbm90IGNvbXBsZXRlIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMua2V5U2hhcmVCdWZmO1xuICB9XG5cbiAgLyoqIDMyLWJ5dGUgY29tcHJlc3NlZCBSaXN0cmV0dG8gVlJGIHB1YmxpYyBrZXksIGF2YWlsYWJsZSBvbmNlIHRoZSBES0cgaXMgY29tcGxldGUuICovXG4gIGdldFB1YmxpY0tleSgpOiBCdWZmZXIge1xuICAgIGlmICghdGhpcy5wdWJsaWNLZXkpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IGdldCBwdWJsaWMga2V5LCBWUkYgREtHIGlzIG5vdCBjb21wbGV0ZSB5ZXQuJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnB1YmxpY0tleTtcbiAgfVxuXG4gIC8qKiAzMi1ieXRlIFZSRiBrZXkgaWRlbnRpZmllciwgYXZhaWxhYmxlIG9uY2UgdGhlIERLRyBpcyBjb21wbGV0ZS4gKi9cbiAgZ2V0S2V5SWQoKTogQnVmZmVyIHtcbiAgICBpZiAoIXRoaXMua2V5SWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IGdldCBrZXkgaWQsIFZSRiBES0cgaXMgbm90IGNvbXBsZXRlIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMua2V5SWQ7XG4gIH1cblxuICAvKiogMzItYnl0ZSBWUkYgcm9vdCBjaGFpbiBjb2RlLCBhdmFpbGFibGUgb25jZSB0aGUgREtHIGlzIGNvbXBsZXRlLiAqL1xuICBnZXRSb290Q2hhaW5Db2RlKCk6IEJ1ZmZlciB7XG4gICAgaWYgKCF0aGlzLnJvb3RDaGFpbkNvZGUpIHtcbiAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IGdldCByb290IGNoYWluIGNvZGUsIFZSRiBES0cgaXMgbm90IGNvbXBsZXRlIHlldC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucm9vdENoYWluQ29kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgc2Vzc2lvbiBkYXRhIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVzdG9yZSB0aGUgc2Vzc2lvbiBsYXRlci5cbiAgICpcbiAgICogVGhlIHJldHVybmVkIHNlc3Npb24gYnl0ZXMgYXJlIHNlY3JldCBrZXkgbWF0ZXJpYWwg4oCUIHRoZXkgY2FycnkgdGhpcyBwYXJ0eSdzXG4gICAqIHNlY3JldCBwb2x5bm9taWFsIHNoYXJlLiBUaGV5IG11c3QgbmV2ZXIgYmUgbG9nZ2VkIG9yIHBlcnNpc3RlZCBpbiB0aGUgY2xlYXI7XG4gICAqIHRoZSBjYWxsZXIgZW5jcnlwdHMgdGhlbSBleGFjdGx5IGxpa2UgdGhlIGtleSBzaGFyZSBpdHNlbGYuXG4gICAqL1xuICBnZXRTZXNzaW9uRGF0YSgpOiBWcmZEa2dTZXNzaW9uRGF0YSB7XG4gICAgY29uc3Qgc2Vzc2lvbkRhdGE6IFZyZkRrZ1Nlc3Npb25EYXRhID0ge1xuICAgICAgdnJmU2Vzc2lvbkJ5dGVzOiB0aGlzLnZyZlNlc3Npb25CeXRlcyxcbiAgICAgIHZyZlN0YXRlOiB0aGlzLnZyZlN0YXRlLFxuICAgIH07XG4gICAgaWYgKHRoaXMua2V5U2hhcmVCdWZmKSB7XG4gICAgICBzZXNzaW9uRGF0YS5rZXlTaGFyZUJ1ZmYgPSB0aGlzLmtleVNoYXJlQnVmZjtcbiAgICB9XG4gICAgcmV0dXJuIHNlc3Npb25EYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgYSBWUkYgREtHIHNlc3Npb24gZnJvbSBwcmV2aW91cyBzZXNzaW9uIGRhdGEuXG4gICAqIE5vdGU6IFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBSb3VuZCAxIGFzIHRoYXQncyB0aGUgaW5pdGlhbGl6YXRpb24gcGhhc2UuXG4gICAqIFRoZSByb3VuZCBzdGF0ZSBpcyByZS1kZXJpdmVkIGZyb20gdGhlIHdhc20gc2Vzc2lvbiBieXRlcywgbm90IHRydXN0ZWQgZnJvbSB0aGVcbiAgICogY2FsbGVyLXN1cHBsaWVkIGVudW0sIHNvIGEgdGFtcGVyZWQgYHZyZlN0YXRlYCBjYW5ub3Qgc3RlZXIgdGhlIHByb3RvY29sLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJlc3RvcmVTZXNzaW9uKFxuICAgIG46IG51bWJlcixcbiAgICB0OiBudW1iZXIsXG4gICAgcGFydHlJZHg6IG51bWJlcixcbiAgICBzZXNzaW9uRGF0YTogVnJmRGtnU2Vzc2lvbkRhdGEsXG4gICAgc2VlZD86IEJ1ZmZlcixcbiAgICB2cmZXYXNtPzogQnVuZGxlclZyZldhc21lclxuICApOiBQcm9taXNlPFZyZkRrZz4ge1xuICAgIGNvbnN0IHZyZkRrZyA9IG5ldyBWcmZEa2cobiwgdCwgcGFydHlJZHgsIHNlZWQsIHZyZldhc20pO1xuICAgIGlmICghdnJmRGtnLnZyZldhc20pIHtcbiAgICAgIGF3YWl0IHZyZkRrZy5sb2FkVnJmV2FzbSgpO1xuICAgIH1cbiAgICB2cmZEa2cudnJmU2Vzc2lvbkJ5dGVzID0gc2Vzc2lvbkRhdGEudnJmU2Vzc2lvbkJ5dGVzO1xuICAgIHZyZkRrZy5fcmVzdG9yZVNlc3Npb24oKTtcbiAgICB2cmZEa2cuX2Rlc2VyaWFsaXplU3RhdGUoKTtcbiAgICBpZiAoc2Vzc2lvbkRhdGEua2V5U2hhcmVCdWZmKSB7XG4gICAgICB2cmZEa2cua2V5U2hhcmVCdWZmID0gc2Vzc2lvbkRhdGEua2V5U2hhcmVCdWZmO1xuICAgIH1cbiAgICByZXR1cm4gdnJmRGtnO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * as DklsVrf from './dkg';
2
+ export * as DklsVrfTypes from './types';
3
+ export * as DklsVrfUtils from './util';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tss/dkls-vrf/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,OAAO,CAAC;AACjC,OAAO,KAAK,YAAY,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,40 @@
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.DklsVrfUtils = exports.DklsVrfTypes = exports.DklsVrf = void 0;
37
+ exports.DklsVrf = __importStar(require("./dkg"));
38
+ exports.DklsVrfTypes = __importStar(require("./types"));
39
+ exports.DklsVrfUtils = __importStar(require("./util"));
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2RrbHMtdnJmL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFpQztBQUNqQyx3REFBd0M7QUFDeEMsdURBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogYXMgRGtsc1ZyZiBmcm9tICcuL2RrZyc7XG5leHBvcnQgKiBhcyBEa2xzVnJmVHlwZXMgZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyBEa2xzVnJmVXRpbHMgZnJvbSAnLi91dGlsJztcbiJdfQ==
@@ -0,0 +1,28 @@
1
+ /**
2
+ * States of the VRF DKG state machine: a two-round, commit-then-open distributed
3
+ * key generation. Kept separate from `ecdsa-dkls`'s `DkgState` because the round
4
+ * counts differ (2 vs 4).
5
+ *
6
+ * The wasm session bytes embed a round tag (`Init` / `WaitMsg1` / `WaitMsg2` /
7
+ * `{Share: …}`); `VrfDkg` re-derives this state from the bytes rather than
8
+ * trusting a caller-supplied value.
9
+ */
10
+ export declare enum VrfDkgState {
11
+ Uninitialized = 0,
12
+ /** Commitment created and broadcast; waiting for the other parties' VrfKeygenMsg1. */
13
+ Round1 = 1,
14
+ /** Openings created and broadcast; waiting for the other parties' VrfKeygenMsg2. */
15
+ Round2 = 2,
16
+ Complete = 3,
17
+ InvalidState = 4
18
+ }
19
+ export interface VrfDkgSessionData {
20
+ /**
21
+ * Serialized wasm session. Secret key material — it carries the party's
22
+ * secret polynomial share. Never log it or persist it in the clear.
23
+ */
24
+ vrfSessionBytes: Uint8Array;
25
+ vrfState: VrfDkgState;
26
+ keyShareBuff?: Buffer;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/dkls-vrf/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,oBAAY,WAAW;IACrB,aAAa,IAAI;IACjB,sFAAsF;IACtF,MAAM,IAAA;IACN,oFAAoF;IACpF,MAAM,IAAA;IACN,QAAQ,IAAA;IACR,YAAY,IAAA;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,eAAe,EAAE,UAAU,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VrfDkgState = void 0;
4
+ /**
5
+ * States of the VRF DKG state machine: a two-round, commit-then-open distributed
6
+ * key generation. Kept separate from `ecdsa-dkls`'s `DkgState` because the round
7
+ * counts differ (2 vs 4).
8
+ *
9
+ * The wasm session bytes embed a round tag (`Init` / `WaitMsg1` / `WaitMsg2` /
10
+ * `{Share: …}`); `VrfDkg` re-derives this state from the bytes rather than
11
+ * trusting a caller-supplied value.
12
+ */
13
+ var VrfDkgState;
14
+ (function (VrfDkgState) {
15
+ VrfDkgState[VrfDkgState["Uninitialized"] = 0] = "Uninitialized";
16
+ /** Commitment created and broadcast; waiting for the other parties' VrfKeygenMsg1. */
17
+ VrfDkgState[VrfDkgState["Round1"] = 1] = "Round1";
18
+ /** Openings created and broadcast; waiting for the other parties' VrfKeygenMsg2. */
19
+ VrfDkgState[VrfDkgState["Round2"] = 2] = "Round2";
20
+ VrfDkgState[VrfDkgState["Complete"] = 3] = "Complete";
21
+ VrfDkgState[VrfDkgState["InvalidState"] = 4] = "InvalidState";
22
+ })(VrfDkgState || (exports.VrfDkgState = VrfDkgState = {}));
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2RrbHMtdnJmL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsSUFBWSxXQVFYO0FBUkQsV0FBWSxXQUFXO0lBQ3JCLCtEQUFpQixDQUFBO0lBQ2pCLHNGQUFzRjtJQUN0RixpREFBTSxDQUFBO0lBQ04sb0ZBQW9GO0lBQ3BGLGlEQUFNLENBQUE7SUFDTixxREFBUSxDQUFBO0lBQ1IsNkRBQVksQ0FBQTtBQUNkLENBQUMsRUFSVyxXQUFXLDJCQUFYLFdBQVcsUUFRdEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0YXRlcyBvZiB0aGUgVlJGIERLRyBzdGF0ZSBtYWNoaW5lOiBhIHR3by1yb3VuZCwgY29tbWl0LXRoZW4tb3BlbiBkaXN0cmlidXRlZFxuICoga2V5IGdlbmVyYXRpb24uIEtlcHQgc2VwYXJhdGUgZnJvbSBgZWNkc2EtZGtsc2AncyBgRGtnU3RhdGVgIGJlY2F1c2UgdGhlIHJvdW5kXG4gKiBjb3VudHMgZGlmZmVyICgyIHZzIDQpLlxuICpcbiAqIFRoZSB3YXNtIHNlc3Npb24gYnl0ZXMgZW1iZWQgYSByb3VuZCB0YWcgKGBJbml0YCAvIGBXYWl0TXNnMWAgLyBgV2FpdE1zZzJgIC9cbiAqIGB7U2hhcmU6IOKApn1gKTsgYFZyZkRrZ2AgcmUtZGVyaXZlcyB0aGlzIHN0YXRlIGZyb20gdGhlIGJ5dGVzIHJhdGhlciB0aGFuXG4gKiB0cnVzdGluZyBhIGNhbGxlci1zdXBwbGllZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGVudW0gVnJmRGtnU3RhdGUge1xuICBVbmluaXRpYWxpemVkID0gMCxcbiAgLyoqIENvbW1pdG1lbnQgY3JlYXRlZCBhbmQgYnJvYWRjYXN0OyB3YWl0aW5nIGZvciB0aGUgb3RoZXIgcGFydGllcycgVnJmS2V5Z2VuTXNnMS4gKi9cbiAgUm91bmQxLFxuICAvKiogT3BlbmluZ3MgY3JlYXRlZCBhbmQgYnJvYWRjYXN0OyB3YWl0aW5nIGZvciB0aGUgb3RoZXIgcGFydGllcycgVnJmS2V5Z2VuTXNnMi4gKi9cbiAgUm91bmQyLFxuICBDb21wbGV0ZSxcbiAgSW52YWxpZFN0YXRlLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZyZkRrZ1Nlc3Npb25EYXRhIHtcbiAgLyoqXG4gICAqIFNlcmlhbGl6ZWQgd2FzbSBzZXNzaW9uLiBTZWNyZXQga2V5IG1hdGVyaWFsIOKAlCBpdCBjYXJyaWVzIHRoZSBwYXJ0eSdzXG4gICAqIHNlY3JldCBwb2x5bm9taWFsIHNoYXJlLiBOZXZlciBsb2cgaXQgb3IgcGVyc2lzdCBpdCBpbiB0aGUgY2xlYXIuXG4gICAqL1xuICB2cmZTZXNzaW9uQnl0ZXM6IFVpbnQ4QXJyYXk7XG4gIHZyZlN0YXRlOiBWcmZEa2dTdGF0ZTtcbiAga2V5U2hhcmVCdWZmPzogQnVmZmVyO1xufVxuIl19
@@ -0,0 +1,9 @@
1
+ import { Buffer } from 'buffer';
2
+ import { VrfDkg } from './dkg';
3
+ /**
4
+ * Runs a local 2-of-3 VRF DKG across user (0), backup (1) and bitgo (2) parties and
5
+ * returns the three completed VrfDkg sessions, mirroring `generateDKGKeyShares` from
6
+ * `ecdsa-dkls/util.ts` so VRF tests read like the existing DKLS ones.
7
+ */
8
+ export declare function generateVrfDKGKeyShares(seedUser?: Buffer, seedBackup?: Buffer, seedBitgo?: Buffer): Promise<[VrfDkg, VrfDkg, VrfDkg]>;
9
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/dkls-vrf/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CA0CnC"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateVrfDKGKeyShares = generateVrfDKGKeyShares;
4
+ const dkg_1 = require("./dkg");
5
+ /**
6
+ * Runs a local 2-of-3 VRF DKG across user (0), backup (1) and bitgo (2) parties and
7
+ * returns the three completed VrfDkg sessions, mirroring `generateDKGKeyShares` from
8
+ * `ecdsa-dkls/util.ts` so VRF tests read like the existing DKLS ones.
9
+ */
10
+ async function generateVrfDKGKeyShares(seedUser, seedBackup, seedBitgo) {
11
+ const user = new dkg_1.VrfDkg(3, 2, 0, seedUser);
12
+ const backup = new dkg_1.VrfDkg(3, 2, 1, seedBackup);
13
+ const bitgo = new dkg_1.VrfDkg(3, 2, 2, seedBitgo);
14
+ // #region round 1
15
+ const userRound1Messages = await user.initDkg();
16
+ const backupRound1Messages = await backup.initDkg();
17
+ const bitgoRound1Messages = await bitgo.initDkg();
18
+ const bitgoRound2Messages = await bitgo.handleIncomingMessages({
19
+ p2pMessages: [],
20
+ broadcastMessages: [...userRound1Messages.broadcastMessages, ...backupRound1Messages.broadcastMessages],
21
+ });
22
+ // #endregion
23
+ // #region round 2
24
+ const userRound2Messages = await user.handleIncomingMessages({
25
+ p2pMessages: [],
26
+ broadcastMessages: [...bitgoRound1Messages.broadcastMessages, ...backupRound1Messages.broadcastMessages],
27
+ });
28
+ const backupRound2Messages = await backup.handleIncomingMessages({
29
+ p2pMessages: [],
30
+ broadcastMessages: [...userRound1Messages.broadcastMessages, ...bitgoRound1Messages.broadcastMessages],
31
+ });
32
+ await bitgo.handleIncomingMessages({
33
+ p2pMessages: [bitgoRound2Messages, userRound2Messages, backupRound2Messages]
34
+ .flatMap((m) => m.p2pMessages)
35
+ .filter((m) => m.to === 2),
36
+ broadcastMessages: [],
37
+ });
38
+ await user.handleIncomingMessages({
39
+ p2pMessages: [bitgoRound2Messages, userRound2Messages, backupRound2Messages]
40
+ .flatMap((m) => m.p2pMessages)
41
+ .filter((m) => m.to === 0),
42
+ broadcastMessages: [],
43
+ });
44
+ await backup.handleIncomingMessages({
45
+ p2pMessages: [bitgoRound2Messages, userRound2Messages, backupRound2Messages]
46
+ .flatMap((m) => m.p2pMessages)
47
+ .filter((m) => m.to === 1),
48
+ broadcastMessages: [],
49
+ });
50
+ return [user, backup, bitgo];
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZGtscy12cmYvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLDBEQThDQztBQXJERCwrQkFBK0I7QUFFL0I7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsUUFBaUIsRUFDakIsVUFBbUIsRUFDbkIsU0FBa0I7SUFFbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxZQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0Msa0JBQWtCO0lBQ2xCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDaEQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFDN0QsV0FBVyxFQUFFLEVBQUU7UUFDZixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQztLQUN4RyxDQUFDLENBQUM7SUFDSCxhQUFhO0lBRWIsa0JBQWtCO0lBQ2xCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDM0QsV0FBVyxFQUFFLEVBQUU7UUFDZixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQztLQUN6RyxDQUFDLENBQUM7SUFDSCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sTUFBTSxDQUFDLHNCQUFzQixDQUFDO1FBQy9ELFdBQVcsRUFBRSxFQUFFO1FBQ2YsaUJBQWlCLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLEdBQUcsbUJBQW1CLENBQUMsaUJBQWlCLENBQUM7S0FDdkcsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFDakMsV0FBVyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUM7YUFDekUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO2FBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUIsaUJBQWlCLEVBQUUsRUFBRTtLQUN0QixDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUNoQyxXQUFXLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQzthQUN6RSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7YUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QixpQkFBaUIsRUFBRSxFQUFFO0tBQ3RCLENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxDQUFDLHNCQUFzQixDQUFDO1FBQ2xDLFdBQVcsRUFBRSxDQUFDLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixDQUFDO2FBQ3pFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQzthQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLGlCQUFpQixFQUFFLEVBQUU7S0FDdEIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ2J1ZmZlcic7XG5pbXBvcnQgeyBWcmZEa2cgfSBmcm9tICcuL2RrZyc7XG5cbi8qKlxuICogUnVucyBhIGxvY2FsIDItb2YtMyBWUkYgREtHIGFjcm9zcyB1c2VyICgwKSwgYmFja3VwICgxKSBhbmQgYml0Z28gKDIpIHBhcnRpZXMgYW5kXG4gKiByZXR1cm5zIHRoZSB0aHJlZSBjb21wbGV0ZWQgVnJmRGtnIHNlc3Npb25zLCBtaXJyb3JpbmcgYGdlbmVyYXRlREtHS2V5U2hhcmVzYCBmcm9tXG4gKiBgZWNkc2EtZGtscy91dGlsLnRzYCBzbyBWUkYgdGVzdHMgcmVhZCBsaWtlIHRoZSBleGlzdGluZyBES0xTIG9uZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVZyZkRLR0tleVNoYXJlcyhcbiAgc2VlZFVzZXI/OiBCdWZmZXIsXG4gIHNlZWRCYWNrdXA/OiBCdWZmZXIsXG4gIHNlZWRCaXRnbz86IEJ1ZmZlclxuKTogUHJvbWlzZTxbVnJmRGtnLCBWcmZEa2csIFZyZkRrZ10+IHtcbiAgY29uc3QgdXNlciA9IG5ldyBWcmZEa2coMywgMiwgMCwgc2VlZFVzZXIpO1xuICBjb25zdCBiYWNrdXAgPSBuZXcgVnJmRGtnKDMsIDIsIDEsIHNlZWRCYWNrdXApO1xuICBjb25zdCBiaXRnbyA9IG5ldyBWcmZEa2coMywgMiwgMiwgc2VlZEJpdGdvKTtcbiAgLy8gI3JlZ2lvbiByb3VuZCAxXG4gIGNvbnN0IHVzZXJSb3VuZDFNZXNzYWdlcyA9IGF3YWl0IHVzZXIuaW5pdERrZygpO1xuICBjb25zdCBiYWNrdXBSb3VuZDFNZXNzYWdlcyA9IGF3YWl0IGJhY2t1cC5pbml0RGtnKCk7XG4gIGNvbnN0IGJpdGdvUm91bmQxTWVzc2FnZXMgPSBhd2FpdCBiaXRnby5pbml0RGtnKCk7XG4gIGNvbnN0IGJpdGdvUm91bmQyTWVzc2FnZXMgPSBhd2FpdCBiaXRnby5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFsuLi51c2VyUm91bmQxTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMsIC4uLmJhY2t1cFJvdW5kMU1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzXSxcbiAgfSk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIHJvdW5kIDJcbiAgY29uc3QgdXNlclJvdW5kMk1lc3NhZ2VzID0gYXdhaXQgdXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFsuLi5iaXRnb1JvdW5kMU1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzLCAuLi5iYWNrdXBSb3VuZDFNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlc10sXG4gIH0pO1xuICBjb25zdCBiYWNrdXBSb3VuZDJNZXNzYWdlcyA9IGF3YWl0IGJhY2t1cC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFsuLi51c2VyUm91bmQxTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMsIC4uLmJpdGdvUm91bmQxTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXNdLFxuICB9KTtcbiAgYXdhaXQgYml0Z28uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IFtiaXRnb1JvdW5kMk1lc3NhZ2VzLCB1c2VyUm91bmQyTWVzc2FnZXMsIGJhY2t1cFJvdW5kMk1lc3NhZ2VzXVxuICAgICAgLmZsYXRNYXAoKG0pID0+IG0ucDJwTWVzc2FnZXMpXG4gICAgICAuZmlsdGVyKChtKSA9PiBtLnRvID09PSAyKSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gIH0pO1xuICBhd2FpdCB1c2VyLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbYml0Z29Sb3VuZDJNZXNzYWdlcywgdXNlclJvdW5kMk1lc3NhZ2VzLCBiYWNrdXBSb3VuZDJNZXNzYWdlc11cbiAgICAgIC5mbGF0TWFwKChtKSA9PiBtLnAycE1lc3NhZ2VzKVxuICAgICAgLmZpbHRlcigobSkgPT4gbS50byA9PT0gMCksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgYXdhaXQgYmFja3VwLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbYml0Z29Sb3VuZDJNZXNzYWdlcywgdXNlclJvdW5kMk1lc3NhZ2VzLCBiYWNrdXBSb3VuZDJNZXNzYWdlc11cbiAgICAgIC5mbGF0TWFwKChtKSA9PiBtLnAycE1lc3NhZ2VzKVxuICAgICAgLmZpbHRlcigobSkgPT4gbS50byA9PT0gMSksXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcbiAgcmV0dXJuIFt1c2VyLCBiYWNrdXAsIGJpdGdvXTtcbn1cbiJdfQ==
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[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);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -11,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
11
15
  }) : function(o, v) {
12
16
  o["default"] = v;
13
17
  });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
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
+ })();
21
35
  Object.defineProperty(exports, "__esModule", { value: true });
22
36
  exports.minModulusBitLength = exports.EcdsaZkVProof = exports.EcdsaPaillierProof = exports.EcdsaRangeProof = exports.EcdsaTypes = void 0;
23
37
  exports.EcdsaTypes = __importStar(require("./types"));
@@ -25,4 +39,4 @@ exports.EcdsaRangeProof = __importStar(require("./rangeproof"));
25
39
  exports.EcdsaPaillierProof = __importStar(require("./paillierproof"));
26
40
  exports.EcdsaZkVProof = __importStar(require("./zkVProof"));
27
41
  exports.minModulusBitLength = 3072;
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBc0M7QUFDdEMsZ0VBQWdEO0FBQ2hELHNFQUFzRDtBQUN0RCw0REFBNEM7QUFFL0IsUUFBQSxtQkFBbUIsR0FBRyxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBFY2RzYVR5cGVzIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogYXMgRWNkc2FSYW5nZVByb29mIGZyb20gJy4vcmFuZ2Vwcm9vZic7XG5leHBvcnQgKiBhcyBFY2RzYVBhaWxsaWVyUHJvb2YgZnJvbSAnLi9wYWlsbGllcnByb29mJztcbmV4cG9ydCAqIGFzIEVjZHNhWmtWUHJvb2YgZnJvbSAnLi96a1ZQcm9vZic7XG5cbmV4cG9ydCBjb25zdCBtaW5Nb2R1bHVzQml0TGVuZ3RoID0gMzA3MjtcbiJdfQ==
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHNEQUFzQztBQUN0QyxnRUFBZ0Q7QUFDaEQsc0VBQXNEO0FBQ3RELDREQUE0QztBQUUvQixRQUFBLG1CQUFtQixHQUFHLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIEVjZHNhVHlwZXMgZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyBFY2RzYVJhbmdlUHJvb2YgZnJvbSAnLi9yYW5nZXByb29mJztcbmV4cG9ydCAqIGFzIEVjZHNhUGFpbGxpZXJQcm9vZiBmcm9tICcuL3BhaWxsaWVycHJvb2YnO1xuZXhwb3J0ICogYXMgRWNkc2Faa1ZQcm9vZiBmcm9tICcuL3prVlByb29mJztcblxuZXhwb3J0IGNvbnN0IG1pbk1vZHVsdXNCaXRMZW5ndGggPSAzMDcyO1xuIl19