@bitgo-beta/account-lib 2.24.1-alpha.49 → 2.24.1-alpha.490

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 (74) hide show
  1. package/README.md +1 -1
  2. package/dist/resources/dot/index.js +6 -2
  3. package/dist/resources/dot/westend.d.ts +1 -1
  4. package/dist/resources/dot/westend.d.ts.map +1 -1
  5. package/dist/resources/dot/westend.js +2 -2
  6. package/dist/resources/dot/westend.ts +1 -1
  7. package/dist/src/index.d.ts +112 -4
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +263 -17
  10. package/dist/src/keyPair/index.js +24 -11
  11. package/dist/src/utils/index.d.ts +1 -0
  12. package/dist/src/utils/index.d.ts.map +1 -1
  13. package/dist/src/utils/index.js +27 -10
  14. package/dist/src/utils/messages/index.d.ts +10 -0
  15. package/dist/src/utils/messages/index.d.ts.map +1 -0
  16. package/dist/src/utils/messages/index.js +30 -0
  17. package/dist/test/resources/ed25519Deriver.d.ts +15 -0
  18. package/dist/test/resources/ed25519Deriver.d.ts.map +1 -0
  19. package/dist/test/resources/ed25519Deriver.js +18 -0
  20. package/dist/test/resources/testTransaction.d.ts +11 -0
  21. package/dist/test/resources/testTransaction.d.ts.map +1 -0
  22. package/dist/test/resources/testTransaction.js +19 -0
  23. package/dist/test/resources/testTransactionBuilder.d.ts +26 -0
  24. package/dist/test/resources/testTransactionBuilder.d.ts.map +1 -0
  25. package/dist/test/resources/testTransactionBuilder.js +47 -0
  26. package/dist/test/unit/coin/baseCoin/transactionBuilder.d.ts +2 -0
  27. package/dist/test/unit/coin/baseCoin/transactionBuilder.d.ts.map +1 -0
  28. package/dist/test/unit/coin/baseCoin/transactionBuilder.js +135 -0
  29. package/dist/test/unit/fixtures.d.ts +16 -0
  30. package/dist/test/unit/fixtures.d.ts.map +1 -0
  31. package/dist/test/unit/fixtures.js +43 -0
  32. package/dist/test/unit/index.d.ts +2 -0
  33. package/dist/test/unit/index.d.ts.map +1 -0
  34. package/dist/test/unit/index.js +13 -0
  35. package/dist/test/unit/keyPair/index.d.ts +2 -0
  36. package/dist/test/unit/keyPair/index.d.ts.map +1 -0
  37. package/dist/test/unit/keyPair/index.js +132 -0
  38. package/dist/test/unit/messageFactory.d.ts +2 -0
  39. package/dist/test/unit/messageFactory.d.ts.map +1 -0
  40. package/dist/test/unit/messageFactory.js +78 -0
  41. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.d.ts +2 -0
  42. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.d.ts.map +1 -0
  43. package/dist/test/unit/mpc/tss/ecdsa/ecdsa.js +333 -0
  44. package/dist/test/unit/mpc/tss/eddsa/eddsa.d.ts +5 -0
  45. package/dist/test/unit/mpc/tss/eddsa/eddsa.d.ts.map +1 -0
  46. package/dist/test/unit/mpc/tss/eddsa/eddsa.js +322 -0
  47. package/dist/test/unit/mpc/tss/fixtures/ecdsa.d.ts +130 -0
  48. package/dist/test/unit/mpc/tss/fixtures/ecdsa.d.ts.map +1 -0
  49. package/dist/test/unit/mpc/tss/fixtures/ecdsa.js +283 -0
  50. package/dist/test/unit/utils/crypto.d.ts +2 -0
  51. package/dist/test/unit/utils/crypto.d.ts.map +1 -0
  52. package/dist/test/unit/utils/crypto.js +60 -0
  53. package/dist/test/unit/utils/ed25519KeyDeriver.d.ts +2 -0
  54. package/dist/test/unit/utils/ed25519KeyDeriver.d.ts.map +1 -0
  55. package/dist/test/unit/utils/ed25519KeyDeriver.js +23 -0
  56. package/dist/test/unit/utils/index.d.ts +2 -0
  57. package/dist/test/unit/utils/index.d.ts.map +1 -0
  58. package/dist/test/unit/utils/index.js +61 -0
  59. package/dist/test/unit/utils/messages/index.d.ts +2 -0
  60. package/dist/test/unit/utils/messages/index.d.ts.map +1 -0
  61. package/dist/test/unit/utils/messages/index.js +51 -0
  62. package/dist/test/unit/verifyMessage.d.ts +2 -0
  63. package/dist/test/unit/verifyMessage.d.ts.map +1 -0
  64. package/dist/test/unit/verifyMessage.js +96 -0
  65. package/dist/tsconfig.tsbuildinfo +1 -43553
  66. package/package.json +78 -32
  67. package/.mocharc.js +0 -10
  68. package/CHANGELOG.md +0 -389
  69. package/DEVELOPER.md +0 -93
  70. package/resources/README.md +0 -17
  71. package/resources/cspr/contract/keys-manager.wasm +0 -0
  72. package/resources/dot/index.ts +0 -2
  73. package/resources/dot/mainnet.ts +0 -2
  74. package/resources/dot/westend.ts +0 -2
@@ -0,0 +1,333 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ /**
40
+ * @prettier
41
+ */
42
+ const assert_1 = __importDefault(require("assert"));
43
+ const crypto_1 = require("crypto");
44
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
45
+ const sdk_lib_mpc_1 = require("@bitgo-beta/sdk-lib-mpc");
46
+ const sinon = __importStar(require("sinon"));
47
+ const keccak_1 = __importDefault(require("keccak"));
48
+ const ecdsa_1 = require("../fixtures/ecdsa");
49
+ // Need to import and then monkey-patch to make stubbing work with ESM
50
+ const paillierBigintModule = require('paillier-bigint');
51
+ const paillierBigint = paillierBigintModule;
52
+ const schnorrModule = require('@bitgo-beta/sdk-lib-mpc');
53
+ const Schnorr = schnorrModule.Schnorr;
54
+ describe('TSS ECDSA TESTS', function () {
55
+ const MPC = new sdk_core_1.Ecdsa();
56
+ const base = BigInt('0x010000000000000000000000000000000000000000000000000000000000000000'); // 2^256
57
+ let keyShares;
58
+ let commonPublicKey;
59
+ const seed = Buffer.from('c4d1583a0b7b88626b56f0c83ee6df4d95d99cca73893ffb57c5e4411fa1b2b9c87456080e8d3f03462f065688abc28be2d4af3164d593c50b55269b435ea48d', 'hex');
60
+ let A, B, C;
61
+ before(async () => {
62
+ // Direct monkey patching of the module for ESM compatibility
63
+ const originalGenerateRandomKeys = paillierBigint.generateRandomKeys;
64
+ const paillierMock = sinon.stub();
65
+ paillierMock
66
+ .onCall(0)
67
+ .resolves(ecdsa_1.paillerKeys[0])
68
+ .onCall(1)
69
+ .resolves(ecdsa_1.paillerKeys[1])
70
+ .onCall(2)
71
+ .resolves(ecdsa_1.paillerKeys[2])
72
+ .onCall(3)
73
+ .resolves(ecdsa_1.paillerKeys[0])
74
+ .onCall(4)
75
+ .resolves(ecdsa_1.paillerKeys[1])
76
+ .onCall(5)
77
+ .resolves(ecdsa_1.paillerKeys[2]);
78
+ // Replace the function directly on the module
79
+ paillierBigint.generateRandomKeys = paillierMock;
80
+ // Save references to restore later
81
+ paillierMock.originalFn = originalGenerateRandomKeys;
82
+ // Apply the same monkey-patching approach for Schnorr
83
+ const originalCreateSchnorrProof = Schnorr.createSchnorrProof;
84
+ const schnorrProofMock = sinon.stub();
85
+ schnorrProofMock
86
+ .onCall(0)
87
+ .returns(ecdsa_1.schnorrProofs[0])
88
+ .onCall(1)
89
+ .returns(ecdsa_1.schnorrProofs[1])
90
+ .onCall(2)
91
+ .returns(ecdsa_1.schnorrProofs[2])
92
+ .onCall(3)
93
+ .returns(ecdsa_1.schnorrProofs[3])
94
+ .onCall(4)
95
+ .returns(ecdsa_1.schnorrProofs[4])
96
+ .onCall(5)
97
+ .returns(ecdsa_1.schnorrProofs[5]);
98
+ // Replace the function directly on the module
99
+ Schnorr.createSchnorrProof = schnorrProofMock;
100
+ // Save references to restore later
101
+ schnorrProofMock.originalFn = originalCreateSchnorrProof;
102
+ [A, B, C] = await Promise.all([MPC.keyShare(1, 2, 3), MPC.keyShare(2, 2, 3), MPC.keyShare(3, 2, 3)]);
103
+ // Needs to run this serially for testing deterministic key generation
104
+ // to get specific paillier keys to be assigned
105
+ const D = await MPC.keyShare(1, 2, 3, seed);
106
+ const E = await MPC.keyShare(2, 2, 3, seed);
107
+ const F = await MPC.keyShare(3, 2, 3, seed);
108
+ const aKeyCombine = MPC.keyCombine(A.pShare, [B.nShares[1], C.nShares[1]]);
109
+ const bKeyCombine = MPC.keyCombine(B.pShare, [A.nShares[2], C.nShares[2]]);
110
+ const cKeyCombine = MPC.keyCombine(C.pShare, [A.nShares[3], B.nShares[3]]);
111
+ // Shares with specific seeds
112
+ const dKeyCombine = MPC.keyCombine(D.pShare, [E.nShares[1], F.nShares[1]]);
113
+ const eKeyCombine = MPC.keyCombine(E.pShare, [D.nShares[2], F.nShares[2]]);
114
+ const fKeyCombine = MPC.keyCombine(F.pShare, [D.nShares[3], E.nShares[3]]);
115
+ // Shares for derived keys.
116
+ const path = 'm/0/1';
117
+ const aKeyDerive = MPC.keyDerive(A.pShare, [B.nShares[1], C.nShares[1]], path);
118
+ const gKeyCombine = {
119
+ xShare: aKeyDerive.xShare,
120
+ yShares: aKeyCombine.yShares,
121
+ };
122
+ const hKeyCombine = MPC.keyCombine(B.pShare, [aKeyDerive.nShares[2], C.nShares[2]]);
123
+ keyShares = [
124
+ aKeyCombine,
125
+ bKeyCombine,
126
+ cKeyCombine,
127
+ dKeyCombine,
128
+ eKeyCombine,
129
+ fKeyCombine,
130
+ gKeyCombine,
131
+ hKeyCombine,
132
+ ];
133
+ commonPublicKey = aKeyCombine.xShare.y;
134
+ // Adding an explicit assertion to check if the stub was used
135
+ paillierMock.callCount.should.equal(6, 'paillierMock should be called 6 times');
136
+ schnorrProofMock.callCount.should.equal(8, 'schnorrProofMock should be called 6 times');
137
+ // Restore original functions
138
+ paillierBigint.generateRandomKeys = paillierMock.originalFn;
139
+ Schnorr.createSchnorrProof = schnorrProofMock.originalFn;
140
+ });
141
+ describe('Ecdsa Key Generation Test', function () {
142
+ it('should generate keys with correct threshold and share number', async function () {
143
+ for (let index = 0; index < 3; index++) {
144
+ const participantOne = (index % 3) + 1;
145
+ const participantTwo = ((index + 1) % 3) + 1;
146
+ const participantThree = ((index + 2) % 3) + 1;
147
+ keyShares[index].xShare.i.should.equal(participantOne);
148
+ keyShares[index].xShare.y.should.equal(commonPublicKey);
149
+ keyShares[index].xShare.m.should.not.be.Null;
150
+ keyShares[index].xShare.l.should.not.be.Null;
151
+ keyShares[index].xShare.n.should.not.be.Null;
152
+ const chaincode = BigInt('0x' + keyShares[index].xShare.chaincode);
153
+ const isChainCodeValid = chaincode > BigInt(0) && chaincode <= base;
154
+ isChainCodeValid.should.equal(true);
155
+ keyShares[index].yShares[participantTwo].i.should.equal(participantOne);
156
+ keyShares[index].yShares[participantThree].i.should.equal(participantOne);
157
+ keyShares[index].yShares[participantTwo].j.should.equal(participantTwo);
158
+ keyShares[index].yShares[participantThree].j.should.equal(participantThree);
159
+ keyShares[index].yShares[participantTwo].n.should.not.be.Null;
160
+ keyShares[index].yShares[participantThree].n.should.not.be.Null;
161
+ const publicKeyPrefix = keyShares[index].xShare.y.slice(0, 2);
162
+ const isRightPrefix = publicKeyPrefix === '03' || publicKeyPrefix === '02';
163
+ isRightPrefix.should.equal(true);
164
+ }
165
+ });
166
+ it('should generate keyshares with specific seed', async function () {
167
+ // Keys should be deterministic when using seed
168
+ const [, , , D, E, F] = keyShares;
169
+ assert_1.default.deepEqual(D, ecdsa_1.mockDKeyShare);
170
+ assert_1.default.deepEqual(E, ecdsa_1.mockEKeyShare);
171
+ assert_1.default.deepEqual(F, ecdsa_1.mockFKeyShare);
172
+ });
173
+ it('should fail if seed is length less than 64 bytes', async function () {
174
+ await MPC.keyShare(1, 2, 3, (0, crypto_1.randomBytes)(16)).should.be.rejectedWith('Seed must have a length of at least 64 bytes');
175
+ await MPC.keyShare(1, 2, 3, (0, crypto_1.randomBytes)(32)).should.be.rejectedWith('Seed must have a length of at least 64 bytes');
176
+ });
177
+ it('should pass if seed length is greater than 64', async function () {
178
+ const paillierMock = sinon.stub(paillierBigint, 'generateRandomKeys').onCall(0).resolves(ecdsa_1.paillerKeys[0]);
179
+ const seed72Bytes = Buffer.from('4f7e914dc9ec696398675d1544aab61cb7a67662ffcbdb4079ec5d682be565d87c1b2de75c943dec14c96586984860268779498e6732473aed9ed9c2538f50bea0af926bdccc0134', 'hex');
180
+ (await MPC.keyShare(1, 2, 3, seed72Bytes)).pShare.u.length.should.equal(64);
181
+ paillierMock.restore();
182
+ });
183
+ it('should calculate correct chaincode while combining', async function () {
184
+ const keyCombine = MPC.keyCombine(ecdsa_1.mockPShare, ecdsa_1.mockNShares);
185
+ keyCombine.xShare.chaincode.should.equal('fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc32');
186
+ });
187
+ it('should fail to generate keys with invalid threshold and share number', async function () {
188
+ const invalidConfigs = [
189
+ { index: 1, threshold: 5, numShares: 3 },
190
+ { index: -1, threshold: 2, numShares: 3 },
191
+ { index: 1, threshold: 2, numShares: 1 },
192
+ ];
193
+ for (let index = 0; index < invalidConfigs.length; index++) {
194
+ try {
195
+ await MPC.keyShare(invalidConfigs[index].index, invalidConfigs[index].threshold, invalidConfigs[index].numShares);
196
+ }
197
+ catch (e) {
198
+ e.should.equal('Invalid KeyShare Config');
199
+ }
200
+ }
201
+ });
202
+ it('should derive unhardened child keys', async function () {
203
+ // parent key
204
+ const aKeyCombine = keyShares[0];
205
+ const commonKeychain = aKeyCombine.xShare.y + aKeyCombine.xShare.chaincode;
206
+ for (let index = 0; index < 10; index++) {
207
+ const path = `m/0/0/${index}`;
208
+ const subkey = MPC.keyDerive(A.pShare, [B.nShares[1], C.nShares[1]], path);
209
+ const derive1 = MPC.deriveUnhardened(commonKeychain, path);
210
+ const derive2 = MPC.deriveUnhardened(commonKeychain, path);
211
+ derive1.should.equal(derive2, 'derivation should be deterministic');
212
+ (subkey.xShare.y + subkey.xShare.chaincode).should.equal(derive1, 'subkey common keychain should match derived keychain');
213
+ }
214
+ });
215
+ });
216
+ describe('ECDSA Signing', async function () {
217
+ let config;
218
+ before(() => {
219
+ const [A, B, C, D, E, F, G, H] = keyShares;
220
+ config = [
221
+ { signerOne: A, signerTwo: B },
222
+ { signerOne: A, signerTwo: C },
223
+ { signerOne: B, signerTwo: A },
224
+ { signerOne: B, signerTwo: C },
225
+ { signerOne: C, signerTwo: A },
226
+ { signerOne: C, signerTwo: B },
227
+ // Checks signing with specific seed
228
+ { signerOne: D, signerTwo: E },
229
+ { signerOne: E, signerTwo: F },
230
+ { signerOne: F, signerTwo: D },
231
+ // Checks with specific hashing algorithm
232
+ { signerOne: A, signerTwo: B, hash: 'keccak256' },
233
+ // checks with no hashing
234
+ { signerOne: A, signerTwo: B, shouldHash: false },
235
+ // Checks with derived subkey
236
+ { signerOne: G, signerTwo: H },
237
+ ];
238
+ });
239
+ for (let index = 0; index < 9; index++) {
240
+ it(`should properly sign the message case ${index}`, async function () {
241
+ // Step One
242
+ // signerOne, signerTwo have decided to sign the message
243
+ const signerOne = config[index].signerOne;
244
+ const signerOneIndex = signerOne.xShare.i;
245
+ const signerTwo = config[index].signerTwo;
246
+ const signerTwoIndex = signerTwo.xShare.i;
247
+ const [signerOneToTwoPaillierChallenge, signerTwoToOnePaillierChallenge] = await Promise.all([
248
+ sdk_lib_mpc_1.EcdsaPaillierProof.generateP((0, sdk_core_1.hexToBigInt)(signerOne.yShares[signerTwoIndex].n)),
249
+ sdk_lib_mpc_1.EcdsaPaillierProof.generateP((0, sdk_core_1.hexToBigInt)(signerTwo.yShares[signerOneIndex].n)),
250
+ ]);
251
+ // Step Two
252
+ // First signer generates their range proof challenge.
253
+ const signerOneXShare = MPC.appendChallenge(signerOne.xShare, sdk_lib_mpc_1.EcdsaTypes.serializeNtilde(ecdsa_1.ntildes[index]), sdk_lib_mpc_1.EcdsaTypes.serializePaillierChallenge({ p: signerOneToTwoPaillierChallenge }));
254
+ // Step Three
255
+ // Second signer generates their range proof challenge.
256
+ const signerTwoXShare = MPC.appendChallenge(signerTwo.xShare, sdk_lib_mpc_1.EcdsaTypes.serializeNtilde(ecdsa_1.ntildes[index + 1]), sdk_lib_mpc_1.EcdsaTypes.serializePaillierChallenge({ p: signerTwoToOnePaillierChallenge }));
257
+ const signerTwoChallenge = { ntilde: signerTwoXShare.ntilde, h1: signerTwoXShare.h1, h2: signerTwoXShare.h2 };
258
+ // Step Four
259
+ // First signer receives the challenge from the second signer and appends it to their YShare
260
+ const signerTwoYShare = MPC.appendChallenge(signerOne.yShares[signerTwoIndex], signerTwoChallenge, sdk_lib_mpc_1.EcdsaTypes.serializePaillierChallenge({ p: signerTwoToOnePaillierChallenge }));
261
+ // Step Five
262
+ // Sign Shares are created by one of the participants (signerOne)
263
+ // with its private XShare and YShare corresponding to the other participant (signerTwo)
264
+ // This step produces a private WShare which signerOne saves and KShare which signerOne sends to signerTwo
265
+ const signShares = await MPC.signShare(signerOneXShare, signerTwoYShare);
266
+ // Step Six
267
+ // signerTwo receives the KShare from signerOne and uses it produce private
268
+ // BShare (Beta Share) which signerTwo saves and AShare (Alpha Share)
269
+ // which is sent to signerOne
270
+ const signConvertS21 = await MPC.signConvertStep1({
271
+ xShare: signerTwoXShare,
272
+ yShare: signerTwo.yShares[signerOneIndex], // YShare corresponding to the other participant signerOne
273
+ kShare: signShares.kShare,
274
+ });
275
+ // Step Seven
276
+ // signerOne receives the AShare from signerTwo and signerOne using the private WShare from step two
277
+ // uses it produce private GShare (Gamma Share) and MUShare (Mu Share) which
278
+ // is sent to signerTwo to produce its Gamma Share
279
+ const signConvertS12 = await MPC.signConvertStep2({
280
+ aShare: signConvertS21.aShare,
281
+ wShare: signShares.wShare,
282
+ });
283
+ // Step Eight
284
+ // signerTwo receives the MUShare from signerOne and signerOne using the private BShare from step three
285
+ // uses it produce private GShare (Gamma Share)
286
+ const signConvertS21_2 = await MPC.signConvertStep3({
287
+ muShare: signConvertS12.muShare,
288
+ bShare: signConvertS21.bShare,
289
+ });
290
+ // Step Nine
291
+ // signerOne and signerTwo both have successfully generated GShares and they use
292
+ // the sign combine function to generate their private omicron shares and
293
+ // delta shares which they share to each other
294
+ const [signCombineOne, signCombineTwo] = [
295
+ MPC.signCombine({
296
+ gShare: signConvertS12.gShare,
297
+ signIndex: {
298
+ i: signConvertS12.muShare.i,
299
+ j: signConvertS12.muShare.j,
300
+ },
301
+ }),
302
+ MPC.signCombine({
303
+ gShare: signConvertS21_2.gShare,
304
+ signIndex: {
305
+ i: signConvertS21_2.signIndex.i,
306
+ j: signConvertS21_2.signIndex.j,
307
+ },
308
+ }),
309
+ ];
310
+ const MESSAGE = Buffer.from('TOO MANY SECRETS');
311
+ // Step Ten
312
+ // signerOne and signerTwo shares the delta share from each other
313
+ // and finally signs the message using their private OShare
314
+ // and delta share received from the other signer
315
+ const hashGenerator = (hashType) => {
316
+ return hashType === 'keccak256' ? (0, keccak_1.default)('keccak256') : undefined;
317
+ };
318
+ const [signA, signB] = [
319
+ MPC.sign(MESSAGE, signCombineOne.oShare, signCombineTwo.dShare, hashGenerator(config[index].hash), config[index].shouldHash),
320
+ MPC.sign(MESSAGE, signCombineTwo.oShare, signCombineOne.dShare, hashGenerator(config[index].hash), config[index].shouldHash),
321
+ ];
322
+ // Step Eleven
323
+ // Construct the final signature
324
+ const signature = MPC.constructSignature([signA, signB]);
325
+ // Step Twelve
326
+ // Verify signature
327
+ const isValid = MPC.verify(MESSAGE, signature, hashGenerator(config[index].hash), config[index].shouldHash);
328
+ isValid.should.equal(true);
329
+ });
330
+ }
331
+ });
332
+ });
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvbXBjL3Rzcy9lY2RzYS9lY2RzYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsb0RBQTRCO0FBQzVCLG1DQUEyQztBQUMzQyxtREFBaUU7QUFDakUseURBQXVGO0FBQ3ZGLDZDQUErQjtBQUMvQixvREFBc0M7QUFDdEMsNkNBUzJCO0FBRTNCLHNFQUFzRTtBQUN0RSxNQUFNLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3hELE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDO0FBQzVDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7QUFFdEMsUUFBUSxDQUFDLGlCQUFpQixFQUFFO0lBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksZ0JBQUssRUFBRSxDQUFDO0lBQ3hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDLENBQUMsUUFBUTtJQUNyRyxJQUFJLFNBQThCLENBQUM7SUFDbkMsSUFBSSxlQUF1QixDQUFDO0lBQzVCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ3RCLGtJQUFrSSxFQUNsSSxLQUFLLENBQ04sQ0FBQztJQUNGLElBQUksQ0FBaUIsRUFBRSxDQUFpQixFQUFFLENBQWlCLENBQUM7SUFDNUQsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2hCLDZEQUE2RDtRQUM3RCxNQUFNLDBCQUEwQixHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztRQUVyRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEMsWUFBWTthQUNULE1BQU0s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TyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFM0UsNkJBQTZCO1FBQzdCLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0UsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNFLDJCQUEyQjtRQUMzQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUM7UUFDckIsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8s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QUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgRWNkc2EsIEVDRFNBLCBoZXhUb0JpZ0ludCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEVjZHNhUGFpbGxpZXJQcm9vZiwgRWNkc2FUeXBlcywgU2Nobm9yclByb29mIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1tcGMnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IGNyZWF0ZUtlY2Nha0hhc2ggZnJvbSAna2VjY2FrJztcbmltcG9ydCB7XG4gIHNjaG5vcnJQcm9vZnMsXG4gIG50aWxkZXMsXG4gIHBhaWxsZXJLZXlzLFxuICBtb2NrTlNoYXJlcyxcbiAgbW9ja1BTaGFyZSxcbiAgbW9ja0RLZXlTaGFyZSxcbiAgbW9ja0VLZXlTaGFyZSxcbiAgbW9ja0ZLZXlTaGFyZSxcbn0gZnJvbSAnLi4vZml4dHVyZXMvZWNkc2EnO1xuXG4vLyBOZWVkIHRvIGltcG9ydCBhbmQgdGhlbiBtb25rZXktcGF0Y2ggdG8gbWFrZSBzdHViYmluZyB3b3JrIHdpdGggRVNNXG5jb25zdCBwYWlsbGllckJpZ2ludE1vZHVsZSA9IHJlcXVpcmUoJ3BhaWxsaWVyLWJpZ2ludCcpO1xuY29uc3QgcGFpbGxpZXJCaWdpbnQgPSBwYWlsbGllckJpZ2ludE1vZHVsZTtcbmNvbnN0IHNjaG5vcnJNb2R1bGUgPSByZXF1aXJlKCdAYml0Z28tYmV0YS9zZGstbGliLW1wYycpO1xuY29uc3QgU2Nobm9yciA9IHNjaG5vcnJNb2R1bGUuU2Nobm9ycjtcblxuZGVzY3JpYmUoJ1RTUyBFQ0RTQSBURVNUUycsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG4gIGNvbnN0IGJhc2UgPSBCaWdJbnQoJzB4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7IC8vIDJeMjU2XG4gIGxldCBrZXlTaGFyZXM6IEVDRFNBLktleUNvbWJpbmVkW107XG4gIGxldCBjb21tb25QdWJsaWNLZXk6IHN0cmluZztcbiAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5mcm9tKFxuICAgICdjNGQxNTgzYTBiN2I4ODYyNmI1NmYwYzgzZWU2ZGY0ZDk1ZDk5Y2NhNzM4OTNmZmI1N2M1ZTQ0MTFmYTFiMmI5Yzg3NDU2MDgwZThkM2YwMzQ2MmYwNjU2ODhhYmMyOGJlMmQ0YWYzMTY0ZDU5M2M1MGI1NTI2OWI0MzVlYTQ4ZCcsXG4gICAgJ2hleCcsXG4gICk7XG4gIGxldCBBOiBFQ0RTQS5LZXlTaGFyZSwgQjogRUNEU0EuS2V5U2hhcmUsIEM6IEVDRFNBLktleVNoYXJlO1xuICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xuICAgIC8vIERpcmVjdCBtb25rZXkgcGF0Y2hpbmcgb2YgdGhlIG1vZHVsZSBmb3IgRVNNIGNvbXBhdGliaWxpdHlcbiAgICBjb25zdCBvcmlnaW5hbEdlbmVyYXRlUmFuZG9tS2V5cyA9IHBhaWxsaWVyQmlnaW50LmdlbmVyYXRlUmFuZG9tS2V5cztcblxuICAgIGNvbnN0IHBhaWxsaWVyTW9jayA9IHNpbm9uLnN0dWIoKTtcbiAgICBwYWlsbGllck1vY2tcbiAgICAgIC5vbkNhbGwoMClcbiAgICAgIC5yZXNvbHZlcyhwYWlsbGVyS2V5c1swXSlcbiAgICAgIC5vbkNhbGwoMSlcbiAgICAgIC5yZXNvbHZlcyhwYWlsbGVyS2V5c1sxXSlcbiAgICAgIC5vbkNhbGwoMilcbiAgICAgIC5yZXNvbHZlcyhwYWlsbGVyS2V5c1syXSlcbiAgICAgIC5vbkNhbGwoMylcbiAgICAgIC5yZXNvbHZlcyhwYWlsbGVyS2V5c1swXSlcbiAgICAgIC5vbkNhbGwoNClcbiAgICAgIC5yZXNvbHZlcyhwYWlsbGVyS2V5c1sxXSlcbiAgICAgIC5vbkNhbGwoNSlcbiAgICAgIC5yZXNvbHZlcyhwYWlsbGVyS2V5c1syXSk7XG5cbiAgICAvLyBSZXBsYWNlIHRoZSBmdW5jdGlvbiBkaXJlY3RseSBvbiB0aGUgbW9kdWxlXG4gICAgcGFpbGxpZXJCaWdpbnQuZ2VuZXJhdGVSYW5kb21LZXlzID0gcGFpbGxpZXJNb2NrO1xuXG4gICAgLy8gU2F2ZSByZWZlcmVuY2VzIHRvIHJlc3RvcmUgbGF0ZXJcbiAgICAocGFpbGxpZXJNb2NrIGFzIGFueSkub3JpZ2luYWxGbiA9IG9yaWdpbmFsR2VuZXJhdGVSYW5kb21LZXlzO1xuXG4gICAgLy8gQXBwbHkgdGhlIHNhbWUgbW9ua2V5LXBhdGNoaW5nIGFwcHJvYWNoIGZvciBTY2hub3JyXG4gICAgY29uc3Qgb3JpZ2luYWxDcmVhdGVTY2hub3JyUHJvb2YgPSBTY2hub3JyLmNyZWF0ZVNjaG5vcnJQcm9vZjtcblxuICAgIGNvbnN0IHNjaG5vcnJQcm9vZk1vY2sgPSBzaW5vbi5zdHViKCk7XG4gICAgc2Nobm9yclByb29mTW9ja1xuICAgICAgLm9uQ2FsbCgwKVxuICAgICAgLnJldHVybnMoc2Nobm9yclByb29mc1swXSBhcyB1bmtub3duIGFzIFNjaG5vcnJQcm9vZilcbiAgICAgIC5vbkNhbGwoMSlcbiAgICAgIC5yZXR1cm5zKHNjaG5vcnJQcm9vZnNbMV0gYXMgdW5rbm93biBhcyBTY2hub3JyUHJvb2YpXG4gICAgICAub25DYWxsKDIpXG4gICAgICAucmV0dXJucyhzY2hub3JyUHJvb2ZzWzJdIGFzIHVua25vd24gYXMgU2Nobm9yclByb29mKVxuICAgICAgLm9uQ2FsbCgzKVxuICAgICAgLnJldHVybnMoc2Nobm9yclByb29mc1szXSBhcyB1bmtub3duIGFzIFNjaG5vcnJQcm9vZilcbiAgICAgIC5vbkNhbGwoNClcbiAgICAgIC5yZXR1cm5zKHNjaG5vcnJQcm9vZnNbNF0gYXMgdW5rbm93biBhcyBTY2hub3JyUHJvb2YpXG4gICAgICAub25DYWxsKDUpXG4gICAgICAucmV0dXJucyhzY2hub3JyUHJvb2ZzWzVdIGFzIHVua25vd24gYXMgU2Nobm9yclByb29mKTtcblxuICAgIC8vIFJlcGxhY2UgdGhlIGZ1bmN0aW9uIGRpcmVjdGx5IG9uIHRoZSBtb2R1bGVcbiAgICBTY2hub3JyLmNyZWF0ZVNjaG5vcnJQcm9vZiA9IHNjaG5vcnJQcm9vZk1vY2s7XG5cbiAgICAvLyBTYXZlIHJlZmVyZW5jZXMgdG8gcmVzdG9yZSBsYXRlclxuICAgIChzY2hub3JyUHJvb2ZNb2NrIGFzIGFueSkub3JpZ2luYWxGbiA9IG9yaWdpbmFsQ3JlYXRlU2Nobm9yclByb29mO1xuXG4gICAgW0EsIEIsIENdID0gYXdhaXQgUHJvbWlzZS5hbGwoW01QQy5rZXlTaGFyZSgxLCAyLCAzKSwgTVBDLmtleVNoYXJlKDIsIDIsIDMpLCBNUEMua2V5U2hhcmUoMywgMiwgMyldKTtcblxuICAgIC8vIE5lZWRzIHRvIHJ1biB0aGlzIHNlcmlhbGx5IGZvciB0ZXN0aW5nIGRldGVybWluaXN0aWMga2V5IGdlbmVyYXRpb25cbiAgICAvLyB0byBnZXQgc3BlY2lmaWMgcGFpbGxpZXIga2V5cyB0byBiZSBhc3NpZ25lZFxuICAgIGNvbnN0IEQgPSBhd2FpdCBNUEMua2V5U2hhcmUoMSwgMiwgMywgc2VlZCk7XG4gICAgY29uc3QgRSA9IGF3YWl0IE1QQy5rZXlTaGFyZSgyLCAyLCAzLCBzZWVkKTtcbiAgICBjb25zdCBGID0gYXdhaXQgTVBDLmtleVNoYXJlKDMsIDIsIDMsIHNlZWQpO1xuXG4gICAgY29uc3QgYUtleUNvbWJpbmUgPSBNUEMua2V5Q29tYmluZShBLnBTaGFyZSwgW0IublNoYXJlc1sxXSwgQy5uU2hhcmVzWzFdXSk7XG4gICAgY29uc3QgYktleUNvbWJpbmUgPSBNUEMua2V5Q29tYmluZShCLnBTaGFyZSwgW0EublNoYXJlc1syXSwgQy5uU2hhcmVzWzJdXSk7XG4gICAgY29uc3QgY0tleUNvbWJpbmUgPSBNUEMua2V5Q29tYmluZShDLnBTaGFyZSwgW0EublNoYXJlc1szXSwgQi5uU2hhcmVzWzNdXSk7XG5cbiAgICAvLyBTaGFyZXMgd2l0aCBzcGVjaWZpYyBzZWVkc1xuICAgIGNvbnN0IGRLZXlDb21iaW5lID0gTVBDLmtleUNvbWJpbmUoRC5wU2hhcmUsIFtFLm5TaGFyZXNbMV0sIEYublNoYXJlc1sxXV0pO1xuICAgIGNvbnN0IGVLZXlDb21iaW5lID0gTVBDLmtleUNvbWJpbmUoRS5wU2hhcmUsIFtELm5TaGFyZXNbMl0sIEYublNoYXJlc1syXV0pO1xuICAgIGNvbnN0IGZLZXlDb21iaW5lID0gTVBDLmtleUNvbWJpbmUoRi5wU2hhcmUsIFtELm5TaGFyZXNbM10sIEUublNoYXJlc1szXV0pO1xuXG4gICAgLy8gU2hhcmVzIGZvciBkZXJpdmVkIGtleXMuXG4gICAgY29uc3QgcGF0aCA9ICdtLzAvMSc7XG4gICAgY29uc3QgYUtleURlcml2ZSA9IE1QQy5rZXlEZXJpdmUoQS5wU2hhcmUsIFtCLm5TaGFyZXNbMV0sIEMublNoYXJlc1sxXV0sIHBhdGgpO1xuICAgIGNvbnN0IGdLZXlDb21iaW5lOiBFQ0RTQS5LZXlDb21iaW5lZCA9IHtcbiAgICAgIHhTaGFyZTogYUtleURlcml2ZS54U2hhcmUsXG4gICAgICB5U2hhcmVzOiBhS2V5Q29tYmluZS55U2hhcmVzLFxuICAgIH07XG4gICAgY29uc3QgaEtleUNvbWJpbmUgPSBNUEMua2V5Q29tYmluZShCLnBTaGFyZSwgW2FLZXlEZXJpdmUublNoYXJlc1syXSwgQy5uU2hhcmVzWzJdXSk7XG4gICAga2V5U2hhcmVzID0gW1xuICAgICAgYUtleUNvbWJpbmUsXG4gICAgICBiS2V5Q29tYmluZSxcbiAgICAgIGNLZXlDb21iaW5lLFxuICAgICAgZEtleUNvbWJpbmUsXG4gICAgICBlS2V5Q29tYmluZSxcbiAgICAgIGZLZXlDb21iaW5lLFxuICAgICAgZ0tleUNvbWJpbmUsXG4gICAgICBoS2V5Q29tYmluZSxcbiAgICBdO1xuICAgIGNvbW1vblB1YmxpY0tleSA9IGFLZXlDb21iaW5lLnhTaGFyZS55O1xuICAgIC8vIEFkZGluZyBhbiBleHBsaWNpdCBhc3NlcnRpb24gdG8gY2hlY2sgaWYgdGhlIHN0dWIgd2FzIHVzZWRcbiAgICBwYWlsbGllck1vY2suY2FsbENvdW50LnNob3VsZC5lcXVhbCg2LCAncGFpbGxpZXJNb2NrIHNob3VsZCBiZSBjYWxsZWQgNiB0aW1lcycpO1xuICAgIHNjaG5vcnJQcm9vZk1vY2suY2FsbENvdW50LnNob3VsZC5lcXVhbCg4LCAnc2Nobm9yclByb29mTW9jayBzaG91bGQgYmUgY2FsbGVkIDYgdGltZXMnKTtcblxuICAgIC8vIFJlc3RvcmUgb3JpZ2luYWwgZnVuY3Rpb25zXG4gICAgcGFpbGxpZXJCaWdpbnQuZ2VuZXJhdGVSYW5kb21LZXlzID0gKHBhaWxsaWVyTW9jayBhcyBhbnkpLm9yaWdpbmFsRm47XG4gICAgU2Nobm9yci5jcmVhdGVTY2hub3JyUHJvb2YgPSAoc2Nobm9yclByb29mTW9jayBhcyBhbnkpLm9yaWdpbmFsRm47XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFY2RzYSBLZXkgR2VuZXJhdGlvbiBUZXN0JywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUga2V5cyB3aXRoIGNvcnJlY3QgdGhyZXNob2xkIGFuZCBzaGFyZSBudW1iZXInLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMzsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBwYXJ0aWNpcGFudE9uZSA9IChpbmRleCAlIDMpICsgMTtcbiAgICAgICAgY29uc3QgcGFydGljaXBhbnRUd28gPSAoKGluZGV4ICsgMSkgJSAzKSArIDE7XG4gICAgICAgIGNvbnN0IHBhcnRpY2lwYW50VGhyZWUgPSAoKGluZGV4ICsgMikgJSAzKSArIDE7XG4gICAgICAgIGtleVNoYXJlc1tpbmRleF0ueFNoYXJlLmkuc2hvdWxkLmVxdWFsKHBhcnRpY2lwYW50T25lKTtcbiAgICAgICAga2V5U2hhcmVzW2luZGV4XS54U2hhcmUueS5zaG91bGQuZXF1YWwoY29tbW9uUHVibGljS2V5KTtcbiAgICAgICAga2V5U2hhcmVzW2luZGV4XS54U2hhcmUubS5zaG91bGQubm90LmJlLk51bGw7XG4gICAgICAgIGtleVNoYXJlc1tpbmRleF0ueFNoYXJlLmwuc2hvdWxkLm5vdC5iZS5OdWxsO1xuICAgICAgICBrZXlTaGFyZXNbaW5kZXhdLnhTaGFyZS5uLnNob3VsZC5ub3QuYmUuTnVsbDtcblxuICAgICAgICBjb25zdCBjaGFpbmNvZGUgPSBCaWdJbnQoJzB4JyArIGtleVNoYXJlc1tpbmRleF0ueFNoYXJlLmNoYWluY29kZSk7XG4gICAgICAgIGNvbnN0IGlzQ2hhaW5Db2RlVmFsaWQgPSBjaGFpbmNvZGUgPiBCaWdJbnQoMCkgJiYgY2hhaW5jb2RlIDw9IGJhc2U7XG4gICAgICAgIGlzQ2hhaW5Db2RlVmFsaWQuc2hvdWxkLmVxdWFsKHRydWUpO1xuXG4gICAgICAgIGtleVNoYXJlc1tpbmRleF0ueVNoYXJlc1twYXJ0aWNpcGFudFR3b10uaS5zaG91bGQuZXF1YWwocGFydGljaXBhbnRPbmUpO1xuICAgICAgICBrZXlTaGFyZXNbaW5kZXhdLnlTaGFyZXNbcGFydGljaXBhbnRUaHJlZV0uaS5zaG91bGQuZXF1YWwocGFydGljaXBhbnRPbmUpO1xuICAgICAgICBrZXlTaGFyZXNbaW5kZXhdLnlTaGFyZXNbcGFydGljaXBhbnRUd29dLmouc2hvdWxkLmVxdWFsKHBhcnRpY2lwYW50VHdvKTtcbiAgICAgICAga2V5U2hhcmVzW2luZGV4XS55U2hhcmVzW3BhcnRpY2lwYW50VGhyZWVdLmouc2hvdWxkLmVxdWFsKHBhcnRpY2lwYW50VGhyZWUpO1xuICAgICAgICBrZXlTaGFyZXNbaW5kZXhdLnlTaGFyZXNbcGFydGljaXBhbnRUd29dLm4uc2hvdWxkLm5vdC5iZS5OdWxsO1xuICAgICAgICBrZXlTaGFyZXNbaW5kZXhdLnlTaGFyZXNbcGFydGljaXBhbnRUaHJlZV0ubi5zaG91bGQubm90LmJlLk51bGw7XG5cbiAgICAgICAgY29uc3QgcHVibGljS2V5UHJlZml4ID0ga2V5U2hhcmVzW2luZGV4XS54U2hhcmUueS5zbGljZSgwLCAyKTtcbiAgICAgICAgY29uc3QgaXNSaWdodFByZWZpeCA9IHB1YmxpY0tleVByZWZpeCA9PT0gJzAzJyB8fCBwdWJsaWNLZXlQcmVmaXggPT09ICcwMic7XG4gICAgICAgIGlzUmlnaHRQcmVmaXguc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBrZXlzaGFyZXMgd2l0aCBzcGVjaWZpYyBzZWVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gS2V5cyBzaG91bGQgYmUgZGV0ZXJtaW5pc3RpYyB3aGVuIHVzaW5nIHNlZWRcbiAgICAgIGNvbnN0IFssICwgLCBELCBFLCBGXSA9IGtleVNoYXJlcztcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwoRCwgbW9ja0RLZXlTaGFyZSk7XG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKEUsIG1vY2tFS2V5U2hhcmUpO1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbChGLCBtb2NrRktleVNoYXJlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCBpZiBzZWVkIGlzIGxlbmd0aCBsZXNzIHRoYW4gNjQgYnl0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBNUEMua2V5U2hhcmUoMSwgMiwgMywgcmFuZG9tQnl0ZXMoMTYpKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFxuICAgICAgICAnU2VlZCBtdXN0IGhhdmUgYSBsZW5ndGggb2YgYXQgbGVhc3QgNjQgYnl0ZXMnLFxuICAgICAgKTtcbiAgICAgIGF3YWl0IE1QQy5rZXlTaGFyZSgxLCAyLCAzLCByYW5kb21CeXRlcygzMikpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoXG4gICAgICAgICdTZWVkIG11c3QgaGF2ZSBhIGxlbmd0aCBvZiBhdCBsZWFzdCA2NCBieXRlcycsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIGlmIHNlZWQgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiA2NCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhaWxsaWVyTW9jayA9IHNpbm9uLnN0dWIocGFpbGxpZXJCaWdpbnQsICdnZW5lcmF0ZVJhbmRvbUtleXMnKS5vbkNhbGwoMCkucmVzb2x2ZXMocGFpbGxlcktleXNbMF0pO1xuICAgICAgY29uc3Qgc2VlZDcyQnl0ZXMgPSBCdWZmZXIuZnJvbShcbiAgICAgICAgJzRmN2U5MTRkYzllYzY5NjM5ODY3NWQxNTQ0YWFiNjFjYjdhNjc2NjJmZmNiZGI0MDc5ZWM1ZDY4MmJlNTY1ZDg3YzFiMmRlNzVjOTQzZGVjMTRjOTY1ODY5ODQ4NjAyNjg3Nzk0OThlNjczMjQ3M2FlZDllZDljMjUzOGY1MGJlYTBhZjkyNmJkY2NjMDEzNCcsXG4gICAgICAgICdoZXgnLFxuICAgICAgKTtcbiAgICAgIChhd2FpdCBNUEMua2V5U2hhcmUoMSwgMiwgMywgc2VlZDcyQnl0ZXMpKS5wU2hhcmUudS5sZW5ndGguc2hvdWxkLmVxdWFsKDY0KTtcbiAgICAgIHBhaWxsaWVyTW9jay5yZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNhbGN1bGF0ZSBjb3JyZWN0IGNoYWluY29kZSB3aGlsZSBjb21iaW5pbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrZXlDb21iaW5lID0gTVBDLmtleUNvbWJpbmUobW9ja1BTaGFyZSwgbW9ja05TaGFyZXMpO1xuICAgICAga2V5Q29tYmluZS54U2hhcmUuY2hhaW5jb2RlLnNob3VsZC5lcXVhbCgnZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmVmZmZmZmMzMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIGdlbmVyYXRlIGtleXMgd2l0aCBpbnZhbGlkIHRocmVzaG9sZCBhbmQgc2hhcmUgbnVtYmVyJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZENvbmZpZ3MgPSBbXG4gICAgICAgIHsgaW5kZXg6IDEsIHRocmVzaG9sZDogNSwgbnVtU2hhcmVzOiAzIH0sXG4gICAgICAgIHsgaW5kZXg6IC0xLCB0aHJlc2hvbGQ6IDIsIG51bVNoYXJlczogMyB9LFxuICAgICAgICB7IGluZGV4OiAxLCB0aHJlc2hvbGQ6IDIsIG51bVNoYXJlczogMSB9LFxuICAgICAgXTtcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpbnZhbGlkQ29uZmlncy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBNUEMua2V5U2hhcmUoXG4gICAgICAgICAgICBpbnZhbGlkQ29uZmlnc1tpbmRleF0uaW5kZXgsXG4gICAgICAgICAgICBpbnZhbGlkQ29uZmlnc1tpbmRleF0udGhyZXNob2xkLFxuICAgICAgICAgICAgaW52YWxpZENvbmZpZ3NbaW5kZXhdLm51bVNoYXJlcyxcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgZS5zaG91bGQuZXF1YWwoJ0ludmFsaWQgS2V5U2hhcmUgQ29uZmlnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIHVuaGFyZGVuZWQgY2hpbGQga2V5cycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHBhcmVudCBrZXlcbiAgICAgIGNvbnN0IGFLZXlDb21iaW5lID0ga2V5U2hhcmVzWzBdO1xuICAgICAgY29uc3QgY29tbW9uS2V5Y2hhaW4gPSBhS2V5Q29tYmluZS54U2hhcmUueSArIGFLZXlDb21iaW5lLnhTaGFyZS5jaGFpbmNvZGU7XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAxMDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBwYXRoID0gYG0vMC8wLyR7aW5kZXh9YDtcblxuICAgICAgICBjb25zdCBzdWJrZXkgPSBNUEMua2V5RGVyaXZlKEEucFNoYXJlLCBbQi5uU2hhcmVzWzFdLCBDLm5TaGFyZXNbMV1dLCBwYXRoKTtcblxuICAgICAgICBjb25zdCBkZXJpdmUxOiBzdHJpbmcgPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChjb21tb25LZXljaGFpbiwgcGF0aCk7XG4gICAgICAgIGNvbnN0IGRlcml2ZTI6IHN0cmluZyA9IE1QQy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleWNoYWluLCBwYXRoKTtcblxuICAgICAgICBkZXJpdmUxLnNob3VsZC5lcXVhbChkZXJpdmUyLCAnZGVyaXZhdGlvbiBzaG91bGQgYmUgZGV0ZXJtaW5pc3RpYycpO1xuXG4gICAgICAgIChzdWJrZXkueFNoYXJlLnkgKyBzdWJrZXkueFNoYXJlLmNoYWluY29kZSkuc2hvdWxkLmVxdWFsKFxuICAgICAgICAgIGRlcml2ZTEsXG4gICAgICAgICAgJ3N1YmtleSBjb21tb24ga2V5Y2hhaW4gc2hvdWxkIG1hdGNoIGRlcml2ZWQga2V5Y2hhaW4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRUNEU0EgU2lnbmluZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgY29uZmlnOiB7IHNpZ25lck9uZTogRUNEU0EuS2V5Q29tYmluZWQ7IHNpZ25lclR3bzogRUNEU0EuS2V5Q29tYmluZWQ7IGhhc2g/OiBzdHJpbmc7IHNob3VsZEhhc2g/OiBib29sZWFuIH1bXTtcblxuICAgIGJlZm9yZSgoKSA9PiB7XG4gICAgICBjb25zdCBbQSwgQiwgQywgRCwgRSwgRiwgRywgSF0gPSBrZXlTaGFyZXM7XG5cbiAgICAgIGNvbmZpZyA9IFtcbiAgICAgICAgeyBzaWduZXJPbmU6IEEsIHNpZ25lclR3bzogQiB9LFxuICAgICAgICB7IHNpZ25lck9uZTogQSwgc2lnbmVyVHdvOiBDIH0sXG4gICAgICAgIHsgc2lnbmVyT25lOiBCLCBzaWduZXJUd286IEEgfSxcbiAgICAgICAgeyBzaWduZXJPbmU6IEIsIHNpZ25lclR3bzogQyB9LFxuICAgICAgICB7IHNpZ25lck9uZTogQywgc2lnbmVyVHdvOiBBIH0sXG4gICAgICAgIHsgc2lnbmVyT25lOiBDLCBzaWduZXJUd286IEIgfSxcblxuICAgICAgICAvLyBDaGVja3Mgc2lnbmluZyB3aXRoIHNwZWNpZmljIHNlZWRcbiAgICAgICAgeyBzaWduZXJPbmU6IEQsIHNpZ25lclR3bzogRSB9LFxuICAgICAgICB7IHNpZ25lck9uZTogRSwgc2lnbmVyVHdvOiBGIH0sXG4gICAgICAgIHsgc2lnbmVyT25lOiBGLCBzaWduZXJUd286IEQgfSxcblxuICAgICAgICAvLyBDaGVja3Mgd2l0aCBzcGVjaWZpYyBoYXNoaW5nIGFsZ29yaXRobVxuICAgICAgICB7IHNpZ25lck9uZTogQSwgc2lnbmVyVHdvOiBCLCBoYXNoOiAna2VjY2FrMjU2JyB9LFxuXG4gICAgICAgIC8vIGNoZWNrcyB3aXRoIG5vIGhhc2hpbmdcbiAgICAgICAgeyBzaWduZXJPbmU6IEEsIHNpZ25lclR3bzogQiwgc2hvdWxkSGFzaDogZmFsc2UgfSxcblxuICAgICAgICAvLyBDaGVja3Mgd2l0aCBkZXJpdmVkIHN1YmtleVxuICAgICAgICB7IHNpZ25lck9uZTogRywgc2lnbmVyVHdvOiBIIH0sXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDk7IGluZGV4KyspIHtcbiAgICAgIGl0KGBzaG91bGQgcHJvcGVybHkgc2lnbiB0aGUgbWVzc2FnZSBjYXNlICR7aW5kZXh9YCwgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBTdGVwIE9uZVxuICAgICAgICAvLyBzaWduZXJPbmUsIHNpZ25lclR3byBoYXZlIGRlY2lkZWQgdG8gc2lnbiB0aGUgbWVzc2FnZVxuICAgICAgICBjb25zdCBzaWduZXJPbmUgPSBjb25maWdbaW5kZXhdLnNpZ25lck9uZTtcbiAgICAgICAgY29uc3Qgc2lnbmVyT25lSW5kZXggPSBzaWduZXJPbmUueFNoYXJlLmk7XG4gICAgICAgIGNvbnN0IHNpZ25lclR3byA9IGNvbmZpZ1tpbmRleF0uc2lnbmVyVHdvO1xuICAgICAgICBjb25zdCBzaWduZXJUd29JbmRleCA9IHNpZ25lclR3by54U2hhcmUuaTtcblxuICAgICAgICBjb25zdCBbc2lnbmVyT25lVG9Ud29QYWlsbGllckNoYWxsZW5nZSwgc2lnbmVyVHdvVG9PbmVQYWlsbGllckNoYWxsZW5nZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgRWNkc2FQYWlsbGllclByb29mLmdlbmVyYXRlUChoZXhUb0JpZ0ludChzaWduZXJPbmUueVNoYXJlc1tzaWduZXJUd29JbmRleF0ubikpLFxuICAgICAgICAgIEVjZHNhUGFpbGxpZXJQcm9vZi5nZW5lcmF0ZVAoaGV4VG9CaWdJbnQoc2lnbmVyVHdvLnlTaGFyZXNbc2lnbmVyT25lSW5kZXhdLm4pKSxcbiAgICAgICAgXSk7XG4gICAgICAgIC8vIFN0ZXAgVHdvXG4gICAgICAgIC8vIEZpcnN0IHNpZ25lciBnZW5lcmF0ZXMgdGhlaXIgcmFuZ2UgcHJvb2YgY2hhbGxlbmdlLlxuICAgICAgICBjb25zdCBzaWduZXJPbmVYU2hhcmU6IEVDRFNBLlhTaGFyZVdpdGhDaGFsbGVuZ2VzID0gTVBDLmFwcGVuZENoYWxsZW5nZShcbiAgICAgICAgICBzaWduZXJPbmUueFNoYXJlLFxuICAgICAgICAgIEVjZHNhVHlwZXMuc2VyaWFsaXplTnRpbGRlKG50aWxkZXNbaW5kZXhdKSxcbiAgICAgICAgICBFY2RzYVR5cGVzLnNlcmlhbGl6ZVBhaWxsaWVyQ2hhbGxlbmdlKHsgcDogc2lnbmVyT25lVG9Ud29QYWlsbGllckNoYWxsZW5nZSB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBTdGVwIFRocmVlXG4gICAgICAgIC8vICBTZWNvbmQgc2lnbmVyIGdlbmVyYXRlcyB0aGVpciByYW5nZSBwcm9vZiBjaGFsbGVuZ2UuXG4gICAgICAgIGNvbnN0IHNpZ25lclR3b1hTaGFyZTogRUNEU0EuWFNoYXJlV2l0aENoYWxsZW5nZXMgPSBNUEMuYXBwZW5kQ2hhbGxlbmdlKFxuICAgICAgICAgIHNpZ25lclR3by54U2hhcmUsXG4gICAgICAgICAgRWNkc2FUeXBlcy5zZXJpYWxpemVOdGlsZGUobnRpbGRlc1tpbmRleCArIDFdKSxcbiAgICAgICAgICBFY2RzYVR5cGVzLnNlcmlhbGl6ZVBhaWxsaWVyQ2hhbGxlbmdlKHsgcDogc2lnbmVyVHdvVG9PbmVQYWlsbGllckNoYWxsZW5nZSB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc2lnbmVyVHdvQ2hhbGxlbmdlID0geyBudGlsZGU6IHNpZ25lclR3b1hTaGFyZS5udGlsZGUsIGgxOiBzaWduZXJUd29YU2hhcmUuaDEsIGgyOiBzaWduZXJUd29YU2hhcmUuaDIgfTtcblxuICAgICAgICAvLyBTdGVwIEZvdXJcbiAgICAgICAgLy8gRmlyc3Qgc2lnbmVyIHJlY2VpdmVzIHRoZSBjaGFsbGVuZ2UgZnJvbSB0aGUgc2Vjb25kIHNpZ25lciBhbmQgYXBwZW5kcyBpdCB0byB0aGVpciBZU2hhcmVcbiAgICAgICAgY29uc3Qgc2lnbmVyVHdvWVNoYXJlOiBFQ0RTQS5ZU2hhcmVXaXRoQ2hhbGxlbmdlcyA9IE1QQy5hcHBlbmRDaGFsbGVuZ2UoXG4gICAgICAgICAgc2lnbmVyT25lLnlTaGFyZXNbc2lnbmVyVHdvSW5kZXhdLFxuICAgICAgICAgIHNpZ25lclR3b0NoYWxsZW5nZSxcbiAgICAgICAgICBFY2RzYVR5cGVzLnNlcmlhbGl6ZVBhaWxsaWVyQ2hhbGxlbmdlKHsgcDogc2lnbmVyVHdvVG9PbmVQYWlsbGllckNoYWxsZW5nZSB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBTdGVwIEZpdmVcbiAgICAgICAgLy8gU2lnbiBTaGFyZXMgYXJlIGNyZWF0ZWQgYnkgb25lIG9mIHRoZSBwYXJ0aWNpcGFudHMgKHNpZ25lck9uZSlcbiAgICAgICAgLy8gd2l0aCBpdHMgcHJpdmF0ZSBYU2hhcmUgYW5kIFlTaGFyZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudCAoc2lnbmVyVHdvKVxuICAgICAgICAvLyBUaGlzIHN0ZXAgcHJvZHVjZXMgYSBwcml2YXRlIFdTaGFyZSB3aGljaCBzaWduZXJPbmUgc2F2ZXMgYW5kIEtTaGFyZSB3aGljaCBzaWduZXJPbmUgc2VuZHMgdG8gc2lnbmVyVHdvXG4gICAgICAgIGNvbnN0IHNpZ25TaGFyZXMgPSBhd2FpdCBNUEMuc2lnblNoYXJlKHNpZ25lck9uZVhTaGFyZSwgc2lnbmVyVHdvWVNoYXJlKTtcblxuICAgICAgICAvLyBTdGVwIFNpeFxuICAgICAgICAvLyBzaWduZXJUd28gcmVjZWl2ZXMgdGhlIEtTaGFyZSBmcm9tIHNpZ25lck9uZSBhbmQgdXNlcyBpdCBwcm9kdWNlIHByaXZhdGVcbiAgICAgICAgLy8gQlNoYXJlIChCZXRhIFNoYXJlKSB3aGljaCBzaWduZXJUd28gc2F2ZXMgYW5kIEFTaGFyZSAoQWxwaGEgU2hhcmUpXG4gICAgICAgIC8vIHdoaWNoIGlzIHNlbnQgdG8gc2lnbmVyT25lXG5cbiAgICAgICAgY29uc3Qgc2lnbkNvbnZlcnRTMjEgPSBhd2FpdCBNUEMuc2lnbkNvbnZlcnRTdGVwMSh7XG4gICAgICAgICAgeFNoYXJlOiBzaWduZXJUd29YU2hhcmUsXG4gICAgICAgICAgeVNoYXJlOiBzaWduZXJUd28ueVNoYXJlc1tzaWduZXJPbmVJbmRleF0sIC8vIFlTaGFyZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudCBzaWduZXJPbmVcbiAgICAgICAgICBrU2hhcmU6IHNpZ25TaGFyZXMua1NoYXJlLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTdGVwIFNldmVuXG4gICAgICAgIC8vIHNpZ25lck9uZSByZWNlaXZlcyB0aGUgQVNoYXJlIGZyb20gc2lnbmVyVHdvIGFuZCBzaWduZXJPbmUgdXNpbmcgdGhlIHByaXZhdGUgV1NoYXJlIGZyb20gc3RlcCB0d29cbiAgICAgICAgLy8gdXNlcyBpdCBwcm9kdWNlIHByaXZhdGUgR1NoYXJlIChHYW1tYSBTaGFyZSkgYW5kIE1VU2hhcmUgKE11IFNoYXJlKSB3aGljaFxuICAgICAgICAvLyBpcyBzZW50IHRvIHNpZ25lclR3byB0byBwcm9kdWNlIGl0cyBHYW1tYSBTaGFyZVxuICAgICAgICBjb25zdCBzaWduQ29udmVydFMxMiA9IGF3YWl0IE1QQy5zaWduQ29udmVydFN0ZXAyKHtcbiAgICAgICAgICBhU2hhcmU6IHNpZ25Db252ZXJ0UzIxLmFTaGFyZSxcbiAgICAgICAgICB3U2hhcmU6IHNpZ25TaGFyZXMud1NoYXJlLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTdGVwIEVpZ2h0XG4gICAgICAgIC8vIHNpZ25lclR3byByZWNlaXZlcyB0aGUgTVVTaGFyZSBmcm9tIHNpZ25lck9uZSBhbmQgc2lnbmVyT25lIHVzaW5nIHRoZSBwcml2YXRlIEJTaGFyZSBmcm9tIHN0ZXAgdGhyZWVcbiAgICAgICAgLy8gdXNlcyBpdCBwcm9kdWNlIHByaXZhdGUgR1NoYXJlIChHYW1tYSBTaGFyZSlcbiAgICAgICAgY29uc3Qgc2lnbkNvbnZlcnRTMjFfMiA9IGF3YWl0IE1QQy5zaWduQ29udmVydFN0ZXAzKHtcbiAgICAgICAgICBtdVNoYXJlOiBzaWduQ29udmVydFMxMi5tdVNoYXJlLFxuICAgICAgICAgIGJTaGFyZTogc2lnbkNvbnZlcnRTMjEuYlNoYXJlLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTdGVwIE5pbmVcbiAgICAgICAgLy8gc2lnbmVyT25lIGFuZCBzaWduZXJUd28gYm90aCBoYXZlIHN1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQgR1NoYXJlcyBhbmQgdGhleSB1c2VcbiAgICAgICAgLy8gdGhlIHNpZ24gY29tYmluZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSB0aGVpciBwcml2YXRlIG9taWNyb24gc2hhcmVzIGFuZFxuICAgICAgICAvLyBkZWx0YSBzaGFyZXMgd2hpY2ggdGhleSBzaGFyZSB0byBlYWNoIG90aGVyXG5cbiAgICAgICAgY29uc3QgW3NpZ25Db21iaW5lT25lLCBzaWduQ29tYmluZVR3b10gPSBbXG4gICAgICAgICAgTVBDLnNpZ25Db21iaW5lKHtcbiAgICAgICAgICAgIGdTaGFyZTogc2lnbkNvbnZlcnRTMTIuZ1NoYXJlLFxuICAgICAgICAgICAgc2lnbkluZGV4OiB7XG4gICAgICAgICAgICAgIGk6IHNpZ25Db252ZXJ0UzEyLm11U2hhcmUuaSxcbiAgICAgICAgICAgICAgajogc2lnbkNvbnZlcnRTMTIubXVTaGFyZS5qLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBNUEMuc2lnbkNvbWJpbmUoe1xuICAgICAgICAgICAgZ1NoYXJlOiBzaWduQ29udmVydFMyMV8yLmdTaGFyZSxcbiAgICAgICAgICAgIHNpZ25JbmRleDoge1xuICAgICAgICAgICAgICBpOiBzaWduQ29udmVydFMyMV8yLnNpZ25JbmRleC5pLFxuICAgICAgICAgICAgICBqOiBzaWduQ29udmVydFMyMV8yLnNpZ25JbmRleC5qLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCBNRVNTQUdFID0gQnVmZmVyLmZyb20oJ1RPTyBNQU5ZIFNFQ1JFVFMnKTtcblxuICAgICAgICAvLyBTdGVwIFRlblxuICAgICAgICAvLyBzaWduZXJPbmUgYW5kIHNpZ25lclR3byBzaGFyZXMgdGhlIGRlbHRhIHNoYXJlIGZyb20gZWFjaCBvdGhlclxuICAgICAgICAvLyBhbmQgZmluYWxseSBzaWducyB0aGUgbWVzc2FnZSB1c2luZyB0aGVpciBwcml2YXRlIE9TaGFyZVxuICAgICAgICAvLyBhbmQgZGVsdGEgc2hhcmUgcmVjZWl2ZWQgZnJvbSB0aGUgb3RoZXIgc2lnbmVyXG5cbiAgICAgICAgY29uc3QgaGFzaEdlbmVyYXRvciA9IChoYXNoVHlwZT86IHN0cmluZyk6IEhhc2ggfCB1bmRlZmluZWQgPT4ge1xuICAgICAgICAgIHJldHVybiBoYXNoVHlwZSA9PT0gJ2tlY2NhazI1NicgPyAoY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2JykgYXMgSGFzaCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IFtzaWduQSwgc2lnbkJdID0gW1xuICAgICAgICAgIE1QQy5zaWduKFxuICAgICAgICAgICAgTUVTU0FHRSxcbiAgICAgICAgICAgIHNpZ25Db21iaW5lT25lLm9TaGFyZSxcbiAgICAgICAgICAgIHNpZ25Db21iaW5lVHdvLmRTaGFyZSxcbiAgICAgICAgICAgIGhhc2hHZW5lcmF0b3IoY29uZmlnW2luZGV4XS5oYXNoKSxcbiAgICAgICAgICAgIGNvbmZpZ1tpbmRleF0uc2hvdWxkSGFzaCxcbiAgICAgICAgICApLFxuICAgICAgICAgIE1QQy5zaWduKFxuICAgICAgICAgICAgTUVTU0FHRSxcbiAgICAgICAgICAgIHNpZ25Db21iaW5lVHdvLm9TaGFyZSxcbiAgICAgICAgICAgIHNpZ25Db21iaW5lT25lLmRTaGFyZSxcbiAgICAgICAgICAgIGhhc2hHZW5lcmF0b3IoY29uZmlnW2luZGV4XS5oYXNoKSxcbiAgICAgICAgICAgIGNvbmZpZ1tpbmRleF0uc2hvdWxkSGFzaCxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8vIFN0ZXAgRWxldmVuXG4gICAgICAgIC8vIENvbnN0cnVjdCB0aGUgZmluYWwgc2lnbmF0dXJlXG5cbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gTVBDLmNvbnN0cnVjdFNpZ25hdHVyZShbc2lnbkEsIHNpZ25CXSk7XG5cbiAgICAgICAgLy8gU3RlcCBUd2VsdmVcbiAgICAgICAgLy8gVmVyaWZ5IHNpZ25hdHVyZVxuXG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBNUEMudmVyaWZ5KE1FU1NBR0UsIHNpZ25hdHVyZSwgaGFzaEdlbmVyYXRvcihjb25maWdbaW5kZXhdLmhhc2gpLCBjb25maWdbaW5kZXhdLnNob3VsZEhhc2gpO1xuICAgICAgICBpc1ZhbGlkLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @prettier
3
+ */
4
+ import 'should';
5
+ //# sourceMappingURL=eddsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eddsa.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/mpc/tss/eddsa/eddsa.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,QAAQ,CAAC"}