@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,322 @@
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
+ require("should");
43
+ const assert_1 = __importDefault(require("assert"));
44
+ const bs58 = __importStar(require("bs58"));
45
+ const crypto_1 = require("crypto");
46
+ const sol = __importStar(require("@solana/web3.js"));
47
+ const src_1 = require("../../../../../src");
48
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
49
+ describe('TSS EDDSA key generation and signing', function () {
50
+ let MPC;
51
+ let hdTree;
52
+ before('initialize modules', async function () {
53
+ hdTree = await sdk_core_1.Ed25519BIP32.initialize();
54
+ MPC = await sdk_core_1.Eddsa.initialize(hdTree);
55
+ });
56
+ it('should fail to generate keys with invalid config', function () {
57
+ assert_1.default.throws(() => MPC.keyShare(0, 2, 3), /Invalid KeyShare config/);
58
+ assert_1.default.throws(() => MPC.keyShare(5, 2, 3), /Invalid KeyShare config/);
59
+ });
60
+ it('should sign and verify signature for low number public key', function () {
61
+ // We use little endian encoding. This means that the following value is a number that is shorter than 32 Bytes when
62
+ // leading zeroes are cut off. This is exactly what happened when we passed it to the sodium library for verifying
63
+ // the signature against the public key.
64
+ const y = '991b12a1b41b966a3382db32fe9b7fa9f80433940d0b17a1759f1e45ada83f00';
65
+ const R = 'b14386bb518b675357a4c79d2439166a5fc5a3a0e1c579c7b829eff1e7a7d967';
66
+ const signableHex = '01000307991b12a1b41b966a3382db32fe9b7fa9f80433940d0b17a1759f1e45ada83f0041536a20902b6d253b111fe5abe87757c123c28cc5fe4eb0da11b5857f3f38e65290384154058de76870e94672fc02e5f96f23e99307f08c56073ebea94cbc57d4d6429b650666264cbcdfe6070749d586d32781608958931e9b8d01636c4f320000000000000000000000000000000000000000000000000000000000000000b43af3bab20c3f39ef3c148c85640614a41043eeb306de5996380f10ec105a8e06ddf6e1d765a193d9cbe146ceeb79ac1cb485ed5f5b37913a8cf5857eff00a91073eab4660e8e3a957c7820d52df6338a8c7b60103bf903cb5f82118430922b02040200030c020000005819b217000000000604010502000a0cf40100000000000009';
67
+ const userToBitgoGShare = {
68
+ i: 1,
69
+ y,
70
+ R,
71
+ gamma: 'fcfd96d4ee4f3399b728b3c820a8eed4a6fa496828e84af2756197993b5df30b',
72
+ };
73
+ const bitgoToUserGShare = {
74
+ i: 3,
75
+ y,
76
+ R,
77
+ gamma: '89d5e45641dc93539a32a6651eaae2448db4d44f6d3040a1390beb14d0225c00',
78
+ };
79
+ const signature = MPC.signCombine([userToBitgoGShare, bitgoToUserGShare]);
80
+ const signablePayloadBuffer = Buffer.from(signableHex, 'hex');
81
+ const verificationResult = MPC.verify(signablePayloadBuffer, signature);
82
+ verificationResult.should.be.true();
83
+ });
84
+ it('should generate keys and sign message', function () {
85
+ const A = MPC.keyShare(1, 2, 3);
86
+ const B = MPC.keyShare(2, 2, 3);
87
+ const C = MPC.keyShare(3, 2, 3);
88
+ const A_combine = MPC.keyCombine(A.uShare, [B.yShares[1], C.yShares[1]]);
89
+ const B_combine = MPC.keyCombine(B.uShare, [A.yShares[2], C.yShares[2]]);
90
+ const C_combine = MPC.keyCombine(C.uShare, [A.yShares[3], B.yShares[3]]);
91
+ const message = 'MPC on a Friday night';
92
+ const message_buffer = Buffer.from(message);
93
+ const incorrect_message = 'MPC on a Monday night';
94
+ const incorrect_message_buffer = Buffer.from(incorrect_message);
95
+ // signing with A and B
96
+ let A_sign_share = MPC.signShare(message_buffer, A_combine.pShare, [A_combine.jShares[2]]);
97
+ let B_sign_share = MPC.signShare(message_buffer, B_combine.pShare, [B_combine.jShares[1]]);
98
+ let A_sign = MPC.sign(message_buffer, A_sign_share.xShare, [B_sign_share.rShares[1]], [C.yShares[1]]);
99
+ let B_sign = MPC.sign(message_buffer, B_sign_share.xShare, [A_sign_share.rShares[2]], [C.yShares[2]]);
100
+ let signature = MPC.signCombine([A_sign, B_sign]);
101
+ let result = MPC.verify(message_buffer, signature);
102
+ result.should.equal(true);
103
+ let resultTwo = MPC.verify(incorrect_message_buffer, signature);
104
+ resultTwo.should.equal(false);
105
+ // signing with A and C
106
+ A_sign_share = MPC.signShare(message_buffer, A_combine.pShare, [A_combine.jShares[3]]);
107
+ let C_sign_share = MPC.signShare(message_buffer, C_combine.pShare, [C_combine.jShares[1]]);
108
+ A_sign = MPC.sign(message_buffer, A_sign_share.xShare, [C_sign_share.rShares[1]], [B.yShares[1]]);
109
+ let C_sign = MPC.sign(message_buffer, C_sign_share.xShare, [A_sign_share.rShares[3]], [B.yShares[3]]);
110
+ signature = MPC.signCombine([A_sign, C_sign]);
111
+ result = MPC.verify(message_buffer, signature);
112
+ result.should.equal(true);
113
+ resultTwo = MPC.verify(incorrect_message_buffer, signature);
114
+ resultTwo.should.equal(false);
115
+ // signing with B and C
116
+ B_sign_share = MPC.signShare(message_buffer, B_combine.pShare, [B_combine.jShares[3]]);
117
+ C_sign_share = MPC.signShare(message_buffer, C_combine.pShare, [C_combine.jShares[2]]);
118
+ B_sign = MPC.sign(message_buffer, B_sign_share.xShare, [C_sign_share.rShares[2]], [A.yShares[2]]);
119
+ C_sign = MPC.sign(message_buffer, C_sign_share.xShare, [B_sign_share.rShares[3]], [A.yShares[3]]);
120
+ signature = MPC.signCombine([B_sign, C_sign]);
121
+ result = MPC.verify(message_buffer, signature);
122
+ result.should.equal(true);
123
+ resultTwo = MPC.verify(incorrect_message_buffer, signature);
124
+ resultTwo.should.equal(false);
125
+ });
126
+ it('should verify BIP32 subkey signature', function () {
127
+ const path = 'm/0/1/2';
128
+ const A = MPC.keyShare(1, 2, 3);
129
+ const B = MPC.keyShare(2, 2, 3);
130
+ const C = MPC.keyShare(3, 2, 3);
131
+ // Combine shares to common base address.
132
+ const A_combine = MPC.keyCombine(A.uShare, [B.yShares[1], C.yShares[1]]);
133
+ const B_combine = MPC.keyCombine(B.uShare, [A.yShares[2], C.yShares[2]]);
134
+ // Party A derives subkey P share and new Y shares.
135
+ const A_subkey = MPC.keyDerive(A.uShare, [B.yShares[1], C.yShares[1]], path);
136
+ // Party B calculates new P share using party A's subkey Y shares.
137
+ const B_subkey = MPC.keyCombine(B.uShare, [A_subkey.yShares[2], C.yShares[2]]);
138
+ // Derive the public subkeychain separately using the common keychain.
139
+ const subkey = hdTree.publicDerive({
140
+ pk: (0, sdk_core_1.bigIntFromBufferLE)(Buffer.from(A_combine.pShare.y, 'hex')),
141
+ chaincode: (0, sdk_core_1.bigIntFromBufferBE)(Buffer.from(A_combine.pShare.chaincode, 'hex')),
142
+ }, path);
143
+ const y = (0, sdk_core_1.bigIntToBufferLE)(subkey.pk, 32).toString('hex');
144
+ const chaincode = (0, sdk_core_1.bigIntToBufferBE)(subkey.chaincode, 32).toString('hex');
145
+ // Verify the keychain in the subkey P shares equals the separately derived public subkeychain.
146
+ A_subkey.pShare.y.should.equal(y);
147
+ A_subkey.pShare.chaincode.should.equal(chaincode);
148
+ B_subkey.pShare.y.should.equal(y);
149
+ B_subkey.pShare.chaincode.should.equal(chaincode);
150
+ const message = 'MPC on a Friday night';
151
+ const message_buffer = Buffer.from(message);
152
+ // Signing with A and B using subkey P shares.
153
+ const A_sign_share = MPC.signShare(message_buffer, A_subkey.pShare, [A_combine.jShares[2]]);
154
+ const B_sign_share = MPC.signShare(message_buffer, B_subkey.pShare, [B_combine.jShares[1]]);
155
+ const A_sign = MPC.sign(message_buffer, A_sign_share.xShare, [B_sign_share.rShares[1]], [C.yShares[1]]);
156
+ const B_sign = MPC.sign(message_buffer, B_sign_share.xShare, [A_sign_share.rShares[2]], [C.yShares[2]]);
157
+ const signature = MPC.signCombine([A_sign, B_sign]);
158
+ const result = MPC.verify(message_buffer, signature);
159
+ result.should.equal(true);
160
+ // Verify the public key in the signature equals the separately derived public subkey.
161
+ signature.y.should.equal(y);
162
+ });
163
+ it('should derive unhardened child keys', function () {
164
+ const A = MPC.keyShare(1, 2, 3);
165
+ const B = MPC.keyShare(2, 2, 3);
166
+ const C = MPC.keyShare(3, 2, 3);
167
+ const A_combine = MPC.keyCombine(A.uShare, [B.yShares[1], C.yShares[1]]);
168
+ const commonKeychain = A_combine.pShare.y + A_combine.pShare.chaincode;
169
+ for (let index = 0; index < 10; index++) {
170
+ const path = `m/0/0/${index}`;
171
+ const derive1 = MPC.deriveUnhardened(commonKeychain, path);
172
+ const subkey = MPC.keyDerive(A.uShare, [B.yShares[1], C.yShares[1]], path);
173
+ const derive2 = MPC.deriveUnhardened(commonKeychain, path);
174
+ const derivedPk = derive1.slice(0, 64);
175
+ (subkey.pShare.y + subkey.pShare.chaincode).should.equal(derive1);
176
+ derive1.should.equal(derive2, 'derivation should be deterministic');
177
+ const solAddress = bs58.encode(Buffer.from(derivedPk, 'hex'));
178
+ src_1.Sol.Utils.isValidPublicKey(solAddress).should.be.true();
179
+ const solPk = new sol.PublicKey(solAddress);
180
+ solPk.toBuffer().toString('hex').should.equal(derivedPk);
181
+ }
182
+ const rootPath = 'm/0';
183
+ const rootKeychain = MPC.deriveUnhardened(commonKeychain, rootPath);
184
+ const rootPublicKey = Buffer.from(rootKeychain, 'hex').slice(0, 32).toString('hex');
185
+ const solPk = new sol.PublicKey(bs58.encode(Buffer.from(rootPublicKey, 'hex')));
186
+ solPk.toBuffer().toString('hex').should.equal(rootPublicKey);
187
+ });
188
+ it('should derive unhardened valid dot child keys', function () {
189
+ const A = MPC.keyShare(1, 2, 3);
190
+ const B = MPC.keyShare(2, 2, 3);
191
+ const C = MPC.keyShare(3, 2, 3);
192
+ const A_combine = MPC.keyCombine(A.uShare, [B.yShares[1], C.yShares[1]]);
193
+ const commonKeychain = A_combine.pShare.y + A_combine.pShare.chaincode;
194
+ for (let index = 0; index < 10; index++) {
195
+ const path = `m/0/0/${index}`;
196
+ const derive1 = MPC.deriveUnhardened(commonKeychain, path);
197
+ const derive2 = MPC.deriveUnhardened(commonKeychain, path);
198
+ const derivedPk = Buffer.from(derive1, 'hex').slice(0, 32).toString('hex');
199
+ derive1.should.equal(derive2, 'derivation should be deterministic');
200
+ const pubKeyPair = new src_1.Dot.KeyPair({ pub: derivedPk });
201
+ pubKeyPair.getKeys().pub.should.equal(derivedPk);
202
+ }
203
+ const rootPath = 'm/';
204
+ const rootKeychain = MPC.deriveUnhardened(commonKeychain, rootPath);
205
+ const rootPublicKey = Buffer.from(rootKeychain, 'hex').slice(0, 32).toString('hex');
206
+ const pubKeyPair = new src_1.Dot.KeyPair({ pub: rootPublicKey });
207
+ pubKeyPair.getKeys().pub.should.equal(rootPublicKey);
208
+ });
209
+ it('should fail signing without meeting threshold', function () {
210
+ const A = MPC.keyShare(1, 2, 3);
211
+ const B = MPC.keyShare(2, 2, 3);
212
+ const C = MPC.keyShare(3, 2, 3);
213
+ const A_combine = MPC.keyCombine(A.uShare, [B.yShares[1], C.yShares[1]]);
214
+ const B_combine = MPC.keyCombine(B.uShare, [A.yShares[2], C.yShares[2]]);
215
+ const message = 'MPC on a Friday night';
216
+ const message_buffer = Buffer.from(message, 'utf-8');
217
+ const A_sign_share = MPC.signShare(message_buffer, A_combine.pShare, [A_combine.jShares[2]]);
218
+ const B_sign_share = MPC.signShare(message_buffer, B_combine.pShare, [B_combine.jShares[1]]);
219
+ const A_sign = MPC.sign(message_buffer, A_sign_share.xShare, [B_sign_share.rShares[1]]);
220
+ const signature = MPC.signCombine([A_sign]);
221
+ MPC.verify(message_buffer, signature).should.equal(false);
222
+ });
223
+ describe('with specific seed', function () {
224
+ it('should generate keys and sign message', function () {
225
+ const seed = (0, crypto_1.randomBytes)(64);
226
+ const A = MPC.keyShare(1, 2, 3, seed);
227
+ const B = MPC.keyShare(2, 2, 3, seed);
228
+ const C = MPC.keyShare(3, 2, 3, seed);
229
+ // Keys should be deterministic when using seed
230
+ MPC.keyShare(1, 2, 3, seed).should.deepEqual(A);
231
+ MPC.keyShare(2, 2, 3, seed).should.deepEqual(B);
232
+ MPC.keyShare(3, 2, 3, seed).should.deepEqual(C);
233
+ const A_combine = MPC.keyCombine(A.uShare, [B.yShares[1], C.yShares[1]]);
234
+ const B_combine = MPC.keyCombine(B.uShare, [A.yShares[2], C.yShares[2]]);
235
+ const C_combine = MPC.keyCombine(C.uShare, [A.yShares[3], B.yShares[3]]);
236
+ const message = 'MPC on a Friday night';
237
+ const message_buffer = Buffer.from(message);
238
+ // signing with A and B
239
+ let A_sign_share = MPC.signShare(message_buffer, A_combine.pShare, [A_combine.jShares[2]], seed);
240
+ let B_sign_share = MPC.signShare(message_buffer, B_combine.pShare, [B_combine.jShares[1]], seed);
241
+ let A_sign = MPC.sign(message_buffer, A_sign_share.xShare, [B_sign_share.rShares[1]], [C.yShares[1]]);
242
+ let B_sign = MPC.sign(message_buffer, B_sign_share.xShare, [A_sign_share.rShares[2]], [C.yShares[2]]);
243
+ let signature = MPC.signCombine([A_sign, B_sign]);
244
+ let result = MPC.verify(message_buffer, signature);
245
+ result.should.equal(true);
246
+ // signing with A and C
247
+ A_sign_share = MPC.signShare(message_buffer, A_combine.pShare, [A_combine.jShares[3]], seed);
248
+ let C_sign_share = MPC.signShare(message_buffer, C_combine.pShare, [C_combine.jShares[1]], seed);
249
+ A_sign = MPC.sign(message_buffer, A_sign_share.xShare, [C_sign_share.rShares[1]], [B.yShares[1]]);
250
+ let C_sign = MPC.sign(message_buffer, C_sign_share.xShare, [A_sign_share.rShares[3]], [B.yShares[3]]);
251
+ signature = MPC.signCombine([A_sign, C_sign]);
252
+ result = MPC.verify(message_buffer, signature);
253
+ result.should.equal(true);
254
+ // signing with B and C
255
+ B_sign_share = MPC.signShare(message_buffer, B_combine.pShare, [B_combine.jShares[3]], seed);
256
+ C_sign_share = MPC.signShare(message_buffer, C_combine.pShare, [C_combine.jShares[2]], seed);
257
+ B_sign = MPC.sign(message_buffer, B_sign_share.xShare, [C_sign_share.rShares[2]], [A.yShares[2]]);
258
+ C_sign = MPC.sign(message_buffer, C_sign_share.xShare, [B_sign_share.rShares[3]], [A.yShares[3]]);
259
+ signature = MPC.signCombine([B_sign, C_sign]);
260
+ result = MPC.verify(message_buffer, signature);
261
+ result.should.equal(true);
262
+ });
263
+ it('should verify BIP32 subkey signature', function () {
264
+ const seed = (0, crypto_1.randomBytes)(64);
265
+ const path = 'm/0/1/2';
266
+ const A = MPC.keyShare(1, 2, 3, seed);
267
+ const B = MPC.keyShare(2, 2, 3, seed);
268
+ const C = MPC.keyShare(3, 2, 3, seed);
269
+ // Keys should be deterministic when using seed
270
+ MPC.keyShare(1, 2, 3, seed).should.deepEqual(A);
271
+ MPC.keyShare(2, 2, 3, seed).should.deepEqual(B);
272
+ MPC.keyShare(3, 2, 3, seed).should.deepEqual(C);
273
+ // Combine shares to common base address.
274
+ const A_combine = MPC.keyCombine(A.uShare, [B.yShares[1], C.yShares[1]]);
275
+ const B_combine = MPC.keyCombine(B.uShare, [A.yShares[2], C.yShares[2]]);
276
+ // Party A derives subkey P share and new Y shares.
277
+ const A_subkey = MPC.keyDerive(A.uShare, [B.yShares[1], C.yShares[1]], path);
278
+ // Party B calculates new P share using party A's subkey Y shares.
279
+ const B_subkey = MPC.keyCombine(B.uShare, [A_subkey.yShares[2], C.yShares[2]]);
280
+ // Derive the public subkeychain separately using the common keychain.
281
+ const subkey = hdTree.publicDerive({
282
+ pk: (0, sdk_core_1.bigIntFromBufferLE)(Buffer.from(A_combine.pShare.y, 'hex')),
283
+ chaincode: (0, sdk_core_1.bigIntFromBufferBE)(Buffer.from(A_combine.pShare.chaincode, 'hex')),
284
+ }, path);
285
+ const y = (0, sdk_core_1.bigIntToBufferLE)(subkey.pk, 32).toString('hex');
286
+ const chaincode = (0, sdk_core_1.bigIntToBufferBE)(subkey.chaincode, 32).toString('hex');
287
+ // Verify the keychain in the subkey P shares equals the separately derived public subkeychain.
288
+ A_subkey.pShare.y.should.equal(y);
289
+ A_subkey.pShare.chaincode.should.equal(chaincode);
290
+ B_subkey.pShare.y.should.equal(y);
291
+ B_subkey.pShare.chaincode.should.equal(chaincode);
292
+ const message = 'MPC on a Friday night';
293
+ const message_buffer = Buffer.from(message);
294
+ // Signing with A and B using subkey P shares.
295
+ const A_sign_share = MPC.signShare(message_buffer, A_subkey.pShare, [A_combine.jShares[2]]);
296
+ const B_sign_share = MPC.signShare(message_buffer, B_subkey.pShare, [B_combine.jShares[1]]);
297
+ const A_sign = MPC.sign(message_buffer, A_sign_share.xShare, [B_sign_share.rShares[1]], [C.yShares[1]]);
298
+ const B_sign = MPC.sign(message_buffer, B_sign_share.xShare, [A_sign_share.rShares[2]], [C.yShares[2]]);
299
+ const signature = MPC.signCombine([A_sign, B_sign]);
300
+ const result = MPC.verify(message_buffer, signature);
301
+ result.should.equal(true);
302
+ // Verify the public key in the signature equals the separately derived public subkey.
303
+ signature.y.should.equal(y);
304
+ });
305
+ it('should fail if seed is not length 64', function () {
306
+ assert_1.default.throws(() => MPC.keyShare(1, 2, 3, (0, crypto_1.randomBytes)(33)), /Seed must have length 64/);
307
+ assert_1.default.throws(() => MPC.keyShare(1, 2, 3, (0, crypto_1.randomBytes)(66)), /Seed must have length 64/);
308
+ const fakePShare = {
309
+ i: 1,
310
+ t: 3,
311
+ n: 2,
312
+ y: 'yString',
313
+ u: 'uString',
314
+ prefix: 'prefix',
315
+ chaincode: 'chaincode',
316
+ };
317
+ assert_1.default.throws(() => MPC.signShare(Buffer.from('abcd', 'hex'), fakePShare, [], (0, crypto_1.randomBytes)(33)), /Seed must have length 64/);
318
+ assert_1.default.throws(() => MPC.signShare(Buffer.from('abcd', 'hex'), fakePShare, [], (0, crypto_1.randomBytes)(66)), /Seed must have length 64/);
319
+ });
320
+ });
321
+ });
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRkc2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvbXBjL3Rzcy9lZGRzYS9lZGRzYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsa0JBQWdCO0FBQ2hCLG9EQUE0QjtBQUM1QiwyQ0FBNkI7QUFDN0IsbUNBQXFDO0FBQ3JDLHFEQUF1QztBQUV2Qyw0Q0FBOEM7QUFFOUMsbURBUThCO0FBRTlCLFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRTtJQUMvQyxJQUFJLEdBQVUsQ0FBQztJQUNmLElBQUksTUFBYyxDQUFDO0lBRW5CLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxLQUFLO1FBQ2hDLE1BQU0sR0FBRyxNQUFNLHVCQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDekMsR0FBRyxHQUFHLE1BQU0sZ0JBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0RBQWtELEVBQUU7UUFDckQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDdEUsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLENBQUM7SUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNERBQTRELEVBQUU7UUFDL0Qsb0hBQW9IO1FBQ3BILGtIQUFrSDtRQUNsSCx3Q0FBd0M7UUFDeEMsTUFBTSxDQUFDLEdBQUcsa0VBQWtFLENBQUM7UUFDN0UsTUFBTSxDQUFDLEdBQUcsa0VB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Iiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0ICdzaG91bGQnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgYnM1OCBmcm9tICdiczU4JztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIHNvbCBmcm9tICdAc29sYW5hL3dlYjMuanMnO1xuXG5pbXBvcnQgeyBEb3QsIFNvbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NyYyc7XG5cbmltcG9ydCB7XG4gIGJpZ0ludEZyb21CdWZmZXJMRSxcbiAgYmlnSW50VG9CdWZmZXJMRSxcbiAgYmlnSW50RnJvbUJ1ZmZlckJFLFxuICBiaWdJbnRUb0J1ZmZlckJFLFxuICBFZDI1NTE5QklQMzIsXG4gIEVkZHNhLFxuICBIRFRyZWUsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuZGVzY3JpYmUoJ1RTUyBFRERTQSBrZXkgZ2VuZXJhdGlvbiBhbmQgc2lnbmluZycsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IE1QQzogRWRkc2E7XG4gIGxldCBoZFRyZWU6IEhEVHJlZTtcblxuICBiZWZvcmUoJ2luaXRpYWxpemUgbW9kdWxlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBoZFRyZWUgPSBhd2FpdCBFZDI1NTE5QklQMzIuaW5pdGlhbGl6ZSgpO1xuICAgIE1QQyA9IGF3YWl0IEVkZHNhLmluaXRpYWxpemUoaGRUcmVlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIGdlbmVyYXRlIGtleXMgd2l0aCBpbnZhbGlkIGNvbmZpZycsIGZ1bmN0aW9uICgpIHtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IE1QQy5rZXlTaGFyZSgwLCAyLCAzKSwgL0ludmFsaWQgS2V5U2hhcmUgY29uZmlnLyk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBNUEMua2V5U2hhcmUoNSwgMiwgMyksIC9JbnZhbGlkIEtleVNoYXJlIGNvbmZpZy8pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHNpZ24gYW5kIHZlcmlmeSBzaWduYXR1cmUgZm9yIGxvdyBudW1iZXIgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXZSB1c2UgbGl0dGxlIGVuZGlhbiBlbmNvZGluZy4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgdmFsdWUgaXMgYSBudW1iZXIgdGhhdCBpcyBzaG9ydGVyIHRoYW4gMzIgQnl0ZXMgd2hlblxuICAgIC8vIGxlYWRpbmcgemVyb2VzIGFyZSBjdXQgb2ZmLiBUaGlzIGlzIGV4YWN0bHkgd2hhdCBoYXBwZW5lZCB3aGVuIHdlIHBhc3NlZCBpdCB0byB0aGUgc29kaXVtIGxpYnJhcnkgZm9yIHZlcmlmeWluZ1xuICAgIC8vIHRoZSBzaWduYXR1cmUgYWdhaW5zdCB0aGUgcHVibGljIGtleS5cbiAgICBjb25zdCB5ID0gJzk5MWIxMmExYjQxYjk2NmEzMzgyZGIzMmZlOWI3ZmE5ZjgwNDMzOTQwZDBiMTdhMTc1OWYxZTQ1YWRhODNmMDAnO1xuICAgIGNvbnN0IFIgPSAnYjE0Mzg2YmI1MThiNjc1MzU3YTRjNzlkMjQzOTE2NmE1ZmM1YTNhMGUxYzU3OWM3YjgyOWVmZjFlN2E3ZDk2Nyc7XG4gICAgY29uc3Qgc2lnbmFibGVIZXggPVxuICAgICAgJzAxMDAwMzA3OTkxYjEyYTFiNDFiOTY2YTMzODJkYjMyZmU5YjdmYTlmODA0MzM5NDBkMGIxN2ExNzU5ZjFlNDVhZGE4M2YwMDQxNTM2YTIwOTAyYjZkMjUzYjExMWZlNWFiZTg3NzU3YzEyM2MyOGNjNWZlNGViMGRhMTFiNTg1N2YzZjM4ZTY1MjkwMzg0MTU0MDU4ZGU3Njg3MGU5NDY3MmZjMDJlNWY5NmYyM2U5OTMwN2YwOGM1NjA3M2ViZWE5NGNiYzU3ZDRkNjQyOWI2NTA2NjYyNjRjYmNkZmU2MDcwNzQ5ZDU4NmQzMjc4MTYwODk1ODkzMWU5YjhkMDE2MzZjNGYzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBiNDNhZjNiYWIyMGMzZjM5ZWYzYzE0OGM4NTY0MDYxNGE0MTA0M2VlYjMwNmRlNTk5NjM4MGYxMGVjMTA1YThlMDZkZGY2ZTFkNzY1YTE5M2Q5Y2JlMTQ2Y2VlYjc5YWMxY2I0ODVlZDVmNWIzNzkxM2E4Y2Y1ODU3ZWZmMDBhOTEwNzNlYWI0NjYwZThlM2E5NTdjNzgyMGQ1MmRmNjMzOGE4YzdiNjAxMDNiZjkwM2NiNWY4MjExODQzMDkyMmIwMjA0MDIwMDAzMGMwMjAwMDAwMDU4MTliMjE3MDAwMDAwMDAwNjA0MDEwNTAyMDAwYTBjZjQwMTAwMDAwMDAwMDAwMDA5JztcbiAgICBjb25zdCB1c2VyVG9CaXRnb0dTaGFyZSA9IHtcbiAgICAgIGk6IDEsXG4gICAgICB5LFxuICAgICAgUixcbiAgICAgIGdhbW1hOiAnZmNmZDk2ZDRlZTRmMzM5OWI3MjhiM2M4MjBhOGVlZDRhNmZhNDk2ODI4ZTg0YWYyNzU2MTk3OTkzYjVkZjMwYicsXG4gICAgfTtcbiAgICBjb25zdCBiaXRnb1RvVXNlckdTaGFyZSA9IHtcbiAgICAgIGk6IDMsXG4gICAgICB5LFxuICAgICAgUixcbiAgICAgIGdhbW1hOiAnODlkNWU0NTY0MWRjOTM1MzlhMzJhNjY1MWVhYWUyNDQ4ZGI0ZDQ0ZjZkMzA0MGExMzkwYmViMTRkMDIyNWMwMCcsXG4gICAgfTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IE1QQy5zaWduQ29tYmluZShbdXNlclRvQml0Z29HU2hhcmUsIGJpdGdvVG9Vc2VyR1NoYXJlXSk7XG4gICAgY29uc3Qgc2lnbmFibGVQYXlsb2FkQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBjb25zdCB2ZXJpZmljYXRpb25SZXN1bHQgPSBNUEMudmVyaWZ5KHNpZ25hYmxlUGF5bG9hZEJ1ZmZlciwgc2lnbmF0dXJlKTtcbiAgICB2ZXJpZmljYXRpb25SZXN1bHQuc2hvdWxkLmJlLnRydWUoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBrZXlzIGFuZCBzaWduIG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgQSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICBjb25zdCBCID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuICAgIGNvbnN0IEMgPSBNUEMua2V5U2hhcmUoMywgMiwgMyk7XG5cbiAgICBjb25zdCBBX2NvbWJpbmUgPSBNUEMua2V5Q29tYmluZShBLnVTaGFyZSwgW0IueVNoYXJlc1sxXSwgQy55U2hhcmVzWzFdXSk7XG4gICAgY29uc3QgQl9jb21iaW5lID0gTVBDLmtleUNvbWJpbmUoQi51U2hhcmUsIFtBLnlTaGFyZXNbMl0sIEMueVNoYXJlc1syXV0pO1xuICAgIGNvbnN0IENfY29tYmluZSA9IE1QQy5rZXlDb21iaW5lKEMudVNoYXJlLCBbQS55U2hhcmVzWzNdLCBCLnlTaGFyZXNbM11dKTtcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSAnTVBDIG9uIGEgRnJpZGF5IG5pZ2h0JztcbiAgICBjb25zdCBtZXNzYWdlX2J1ZmZlciA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2UpO1xuXG4gICAgY29uc3QgaW5jb3JyZWN0X21lc3NhZ2UgPSAnTVBDIG9uIGEgTW9uZGF5IG5pZ2h0JztcbiAgICBjb25zdCBpbmNvcnJlY3RfbWVzc2FnZV9idWZmZXIgPSBCdWZmZXIuZnJvbShpbmNvcnJlY3RfbWVzc2FnZSk7XG5cbiAgICAvLyBzaWduaW5nIHdpdGggQSBhbmQgQlxuICAgIGxldCBBX3NpZ25fc2hhcmUgPSBNUEMuc2lnblNoYXJlKG1lc3NhZ2VfYnVmZmVyLCBBX2NvbWJpbmUucFNoYXJlLCBbQV9jb21iaW5lLmpTaGFyZXNbMl1dKTtcbiAgICBsZXQgQl9zaWduX3NoYXJlID0gTVBDLnNpZ25TaGFyZShtZXNzYWdlX2J1ZmZlciwgQl9jb21iaW5lLnBTaGFyZSwgW0JfY29tYmluZS5qU2hhcmVzWzFdXSk7XG4gICAgbGV0IEFfc2lnbiA9IE1QQy5zaWduKG1lc3NhZ2VfYnVmZmVyLCBBX3NpZ25fc2hhcmUueFNoYXJlLCBbQl9zaWduX3NoYXJlLnJTaGFyZXNbMV1dLCBbQy55U2hhcmVzWzFdXSk7XG4gICAgbGV0IEJfc2lnbiA9IE1QQy5zaWduKG1lc3NhZ2VfYnVmZmVyLCBCX3NpZ25fc2hhcmUueFNoYXJlLCBbQV9zaWduX3NoYXJlLnJTaGFyZXNbMl1dLCBbQy55U2hhcmVzWzJdXSk7XG4gICAgbGV0IHNpZ25hdHVyZSA9IE1QQy5zaWduQ29tYmluZShbQV9zaWduLCBCX3NpZ25dKTtcbiAgICBsZXQgcmVzdWx0ID0gTVBDLnZlcmlmeShtZXNzYWdlX2J1ZmZlciwgc2lnbmF0dXJlKTtcbiAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIGxldCByZXN1bHRUd28gPSBNUEMudmVyaWZ5KGluY29ycmVjdF9tZXNzYWdlX2J1ZmZlciwgc2lnbmF0dXJlKTtcbiAgICByZXN1bHRUd28uc2hvdWxkLmVxdWFsKGZhbHNlKTtcblxuICAgIC8vIHNpZ25pbmcgd2l0aCBBIGFuZCBDXG4gICAgQV9zaWduX3NoYXJlID0gTVBDLnNpZ25TaGFyZShtZXNzYWdlX2J1ZmZlciwgQV9jb21iaW5lLnBTaGFyZSwgW0FfY29tYmluZS5qU2hhcmVzWzNdXSk7XG4gICAgbGV0IENfc2lnbl9zaGFyZSA9IE1QQy5zaWduU2hhcmUobWVzc2FnZV9idWZmZXIsIENfY29tYmluZS5wU2hhcmUsIFtDX2NvbWJpbmUualNoYXJlc1sxXV0pO1xuICAgIEFfc2lnbiA9IE1QQy5zaWduKG1lc3NhZ2VfYnVmZmVyLCBBX3NpZ25fc2hhcmUueFNoYXJlLCBbQ19zaWduX3NoYXJlLnJTaGFyZXNbMV1dLCBbQi55U2hhcmVzWzFdXSk7XG4gICAgbGV0IENfc2lnbiA9IE1QQy5zaWduKG1lc3NhZ2VfYnVmZmVyLCBDX3NpZ25fc2hhcmUueFNoYXJlLCBbQV9zaWduX3NoYXJlLnJTaGFyZXNbM11dLCBbQi55U2hhcmVzWzNdXSk7XG4gICAgc2lnbmF0dXJlID0gTVBDLnNpZ25Db21iaW5lKFtBX3NpZ24sIENfc2lnbl0pO1xuICAgIHJlc3VsdCA9IE1QQy52ZXJpZnkobWVzc2FnZV9idWZmZXIsIHNpZ25hdHVyZSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICByZXN1bHRUd28gPSBNUEMudmVyaWZ5KGluY29ycmVjdF9tZXNzYWdlX2J1ZmZlciwgc2lnbmF0dXJlKTtcbiAgICByZXN1bHRUd28uc2hvdWxkLmVxdWFsKGZhbHNlKTtcblxuICAgIC8vIHNpZ25pbmcgd2l0aCBCIGFuZCBDXG4gICAgQl9zaWduX3NoYXJlID0gTVBDLnNpZ25TaGFyZShtZXNzYWdlX2J1ZmZlciwgQl9jb21iaW5lLnBTaGFyZSwgW0JfY29tYmluZS5qU2hhcmVzWzNdXSk7XG4gICAgQ19zaWduX3NoYXJlID0gTVBDLnNpZ25TaGFyZShtZXNzYWdlX2J1ZmZlciwgQ19jb21iaW5lLnBTaGFyZSwgW0NfY29tYmluZS5qU2hhcmVzWzJdXSk7XG4gICAgQl9zaWduID0gTVBDLnNpZ24obWVzc2FnZV9idWZmZXIsIEJfc2lnbl9zaGFyZS54U2hhcmUsIFtDX3NpZ25fc2hhcmUuclNoYXJlc1syXV0sIFtBLnlTaGFyZXNbMl1dKTtcbiAgICBDX3NpZ24gPSBNUEMuc2lnbihtZXNzYWdlX2J1ZmZlciwgQ19zaWduX3NoYXJlLnhTaGFyZSwgW0Jfc2lnbl9zaGFyZS5yU2hhcmVzWzNdXSwgW0EueVNoYXJlc1szXV0pO1xuICAgIHNpZ25hdHVyZSA9IE1QQy5zaWduQ29tYmluZShbQl9zaWduLCBDX3NpZ25dKTtcbiAgICByZXN1bHQgPSBNUEMudmVyaWZ5KG1lc3NhZ2VfYnVmZmVyLCBzaWduYXR1cmUpO1xuICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgcmVzdWx0VHdvID0gTVBDLnZlcmlmeShpbmNvcnJlY3RfbWVzc2FnZV9idWZmZXIsIHNpZ25hdHVyZSk7XG4gICAgcmVzdWx0VHdvLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmVyaWZ5IEJJUDMyIHN1YmtleSBzaWduYXR1cmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGF0aCA9ICdtLzAvMS8yJztcbiAgICBjb25zdCBBID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgIGNvbnN0IEIgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG4gICAgY29uc3QgQyA9IE1QQy5rZXlTaGFyZSgzLCAyLCAzKTtcblxuICAgIC8vIENvbWJpbmUgc2hhcmVzIHRvIGNvbW1vbiBiYXNlIGFkZHJlc3MuXG4gICAgY29uc3QgQV9jb21iaW5lID0gTVBDLmtleUNvbWJpbmUoQS51U2hhcmUsIFtCLnlTaGFyZXNbMV0sIEMueVNoYXJlc1sxXV0pO1xuICAgIGNvbnN0IEJfY29tYmluZSA9IE1QQy5rZXlDb21iaW5lKEIudVNoYXJlLCBbQS55U2hhcmVzWzJdLCBDLnlTaGFyZXNbMl1dKTtcblxuICAgIC8vIFBhcnR5IEEgZGVyaXZlcyBzdWJrZXkgUCBzaGFyZSBhbmQgbmV3IFkgc2hhcmVzLlxuICAgIGNvbnN0IEFfc3Via2V5ID0gTVBDLmtleURlcml2ZShBLnVTaGFyZSwgW0IueVNoYXJlc1sxXSwgQy55U2hhcmVzWzFdXSwgcGF0aCk7XG5cbiAgICAvLyBQYXJ0eSBCIGNhbGN1bGF0ZXMgbmV3IFAgc2hhcmUgdXNpbmcgcGFydHkgQSdzIHN1YmtleSBZIHNoYXJlcy5cbiAgICBjb25zdCBCX3N1YmtleSA9IE1QQy5rZXlDb21iaW5lKEIudVNoYXJlLCBbQV9zdWJrZXkueVNoYXJlc1syXSwgQy55U2hhcmVzWzJdXSk7XG5cbiAgICAvLyBEZXJpdmUgdGhlIHB1YmxpYyBzdWJrZXljaGFpbiBzZXBhcmF0ZWx5IHVzaW5nIHRoZSBjb21tb24ga2V5Y2hhaW4uXG4gICAgY29uc3Qgc3Via2V5ID0gaGRUcmVlLnB1YmxpY0Rlcml2ZShcbiAgICAgIHtcbiAgICAgICAgcGs6IGJpZ0ludEZyb21CdWZmZXJMRShCdWZmZXIuZnJvbShBX2NvbWJpbmUucFNoYXJlLnksICdoZXgnKSksXG4gICAgICAgIGNoYWluY29kZTogYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKEFfY29tYmluZS5wU2hhcmUuY2hhaW5jb2RlLCAnaGV4JykpLFxuICAgICAgfSxcbiAgICAgIHBhdGgsXG4gICAgKTtcbiAgICBjb25zdCB5ID0gYmlnSW50VG9CdWZmZXJMRShzdWJrZXkucGssIDMyKS50b1N0cmluZygnaGV4Jyk7XG4gICAgY29uc3QgY2hhaW5jb2RlID0gYmlnSW50VG9CdWZmZXJCRShzdWJrZXkuY2hhaW5jb2RlLCAzMikudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgLy8gVmVyaWZ5IHRoZSBrZXljaGFpbiBpbiB0aGUgc3Via2V5IFAgc2hhcmVzIGVxdWFscyB0aGUgc2VwYXJhdGVseSBkZXJpdmVkIHB1YmxpYyBzdWJrZXljaGFpbi5cbiAgICBBX3N1YmtleS5wU2hhcmUueS5zaG91bGQuZXF1YWwoeSk7XG4gICAgQV9zdWJrZXkucFNoYXJlLmNoYWluY29kZS5zaG91bGQuZXF1YWwoY2hhaW5jb2RlKTtcbiAgICBCX3N1YmtleS5wU2hhcmUueS5zaG91bGQuZXF1YWwoeSk7XG4gICAgQl9zdWJrZXkucFNoYXJlLmNoYWluY29kZS5zaG91bGQuZXF1YWwoY2hhaW5jb2RlKTtcblxuICAgIGNvbnN0IG1lc3NhZ2UgPSAnTVBDIG9uIGEgRnJpZGF5IG5pZ2h0JztcbiAgICBjb25zdCBtZXNzYWdlX2J1ZmZlciA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2UpO1xuXG4gICAgLy8gU2lnbmluZyB3aXRoIEEgYW5kIEIgdXNpbmcgc3Via2V5IFAgc2hhcmVzLlxuICAgIGNvbnN0IEFfc2lnbl9zaGFyZSA9IE1QQy5zaWduU2hhcmUobWVzc2FnZV9idWZmZXIsIEFfc3Via2V5LnBTaGFyZSwgW0FfY29tYmluZS5qU2hhcmVzWzJdXSk7XG4gICAgY29uc3QgQl9zaWduX3NoYXJlID0gTVBDLnNpZ25TaGFyZShtZXNzYWdlX2J1ZmZlciwgQl9zdWJrZXkucFNoYXJlLCBbQl9jb21iaW5lLmpTaGFyZXNbMV1dKTtcbiAgICBjb25zdCBBX3NpZ24gPSBNUEMuc2lnbihtZXNzYWdlX2J1ZmZlciwgQV9zaWduX3NoYXJlLnhTaGFyZSwgW0Jfc2lnbl9zaGFyZS5yU2hhcmVzWzFdXSwgW0MueVNoYXJlc1sxXV0pO1xuICAgIGNvbnN0IEJfc2lnbiA9IE1QQy5zaWduKG1lc3NhZ2VfYnVmZmVyLCBCX3NpZ25fc2hhcmUueFNoYXJlLCBbQV9zaWduX3NoYXJlLnJTaGFyZXNbMl1dLCBbQy55U2hhcmVzWzJdXSk7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gTVBDLnNpZ25Db21iaW5lKFtBX3NpZ24sIEJfc2lnbl0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IE1QQy52ZXJpZnkobWVzc2FnZV9idWZmZXIsIHNpZ25hdHVyZSk7XG4gICAgcmVzdWx0LnNob3VsZC5lcXVhbCh0cnVlKTtcblxuICAgIC8vIFZlcmlmeSB0aGUgcHVibGljIGtleSBpbiB0aGUgc2lnbmF0dXJlIGVxdWFscyB0aGUgc2VwYXJhdGVseSBkZXJpdmVkIHB1YmxpYyBzdWJrZXkuXG4gICAgc2lnbmF0dXJlLnkuc2hvdWxkLmVxdWFsKHkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGRlcml2ZSB1bmhhcmRlbmVkIGNoaWxkIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgQSA9IE1QQy5rZXlTaGFyZSgxLCAyLCAzKTtcbiAgICBjb25zdCBCID0gTVBDLmtleVNoYXJlKDIsIDIsIDMpO1xuICAgIGNvbnN0IEMgPSBNUEMua2V5U2hhcmUoMywgMiwgMyk7XG5cbiAgICBjb25zdCBBX2NvbWJpbmUgPSBNUEMua2V5Q29tYmluZShBLnVTaGFyZSwgW0IueVNoYXJlc1sxXSwgQy55U2hhcmVzWzFdXSk7XG5cbiAgICBjb25zdCBjb21tb25LZXljaGFpbiA9IEFfY29tYmluZS5wU2hhcmUueSArIEFfY29tYmluZS5wU2hhcmUuY2hhaW5jb2RlO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IDEwOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBwYXRoID0gYG0vMC8wLyR7aW5kZXh9YDtcbiAgICAgIGNvbnN0IGRlcml2ZTEgPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChjb21tb25LZXljaGFpbiwgcGF0aCk7XG4gICAgICBjb25zdCBzdWJrZXkgPSBNUEMua2V5RGVyaXZlKEEudVNoYXJlLCBbQi55U2hhcmVzWzFdLCBDLnlTaGFyZXNbMV1dLCBwYXRoKTtcbiAgICAgIGNvbnN0IGRlcml2ZTIgPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChjb21tb25LZXljaGFpbiwgcGF0aCk7XG4gICAgICBjb25zdCBkZXJpdmVkUGsgPSBkZXJpdmUxLnNsaWNlKDAsIDY0KTtcblxuICAgICAgKHN1YmtleS5wU2hhcmUueSArIHN1YmtleS5wU2hhcmUuY2hhaW5jb2RlKS5zaG91bGQuZXF1YWwoZGVyaXZlMSk7XG4gICAgICBkZXJpdmUxLnNob3VsZC5lcXVhbChkZXJpdmUyLCAnZGVyaXZhdGlvbiBzaG91bGQgYmUgZGV0ZXJtaW5pc3RpYycpO1xuXG4gICAgICBjb25zdCBzb2xBZGRyZXNzID0gYnM1OC5lbmNvZGUoQnVmZmVyLmZyb20oZGVyaXZlZFBrLCAnaGV4JykpO1xuICAgICAgU29sLlV0aWxzLmlzVmFsaWRQdWJsaWNLZXkoc29sQWRkcmVzcykuc2hvdWxkLmJlLnRydWUoKTtcblxuICAgICAgY29uc3Qgc29sUGsgPSBuZXcgc29sLlB1YmxpY0tleShzb2xBZGRyZXNzKTtcbiAgICAgIHNvbFBrLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChkZXJpdmVkUGspO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3RQYXRoID0gJ20vMCc7XG4gICAgY29uc3Qgcm9vdEtleWNoYWluID0gTVBDLmRlcml2ZVVuaGFyZGVuZWQoY29tbW9uS2V5Y2hhaW4sIHJvb3RQYXRoKTtcbiAgICBjb25zdCByb290UHVibGljS2V5ID0gQnVmZmVyLmZyb20ocm9vdEtleWNoYWluLCAnaGV4Jykuc2xpY2UoMCwgMzIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBjb25zdCBzb2xQayA9IG5ldyBzb2wuUHVibGljS2V5KGJzNTguZW5jb2RlKEJ1ZmZlci5mcm9tKHJvb3RQdWJsaWNLZXksICdoZXgnKSkpO1xuICAgIHNvbFBrLnRvQnVmZmVyKCkudG9TdHJpbmcoJ2hleCcpLnNob3VsZC5lcXVhbChyb290UHVibGljS2V5KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBkZXJpdmUgdW5oYXJkZW5lZCB2YWxpZCBkb3QgY2hpbGQga2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBBID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgIGNvbnN0IEIgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG4gICAgY29uc3QgQyA9IE1QQy5rZXlTaGFyZSgzLCAyLCAzKTtcblxuICAgIGNvbnN0IEFfY29tYmluZSA9IE1QQy5rZXlDb21iaW5lKEEudVNoYXJlLCBbQi55U2hhcmVzWzFdLCBDLnlTaGFyZXNbMV1dKTtcblxuICAgIGNvbnN0IGNvbW1vbktleWNoYWluID0gQV9jb21iaW5lLnBTaGFyZS55ICsgQV9jb21iaW5lLnBTaGFyZS5jaGFpbmNvZGU7XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgMTA7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHBhdGggPSBgbS8wLzAvJHtpbmRleH1gO1xuICAgICAgY29uc3QgZGVyaXZlMSA9IE1QQy5kZXJpdmVVbmhhcmRlbmVkKGNvbW1vbktleWNoYWluLCBwYXRoKTtcbiAgICAgIGNvbnN0IGRlcml2ZTIgPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChjb21tb25LZXljaGFpbiwgcGF0aCk7XG4gICAgICBjb25zdCBkZXJpdmVkUGsgPSBCdWZmZXIuZnJvbShkZXJpdmUxLCAnaGV4Jykuc2xpY2UoMCwgMzIpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgICAgZGVyaXZlMS5zaG91bGQuZXF1YWwoZGVyaXZlMiwgJ2Rlcml2YXRpb24gc2hvdWxkIGJlIGRldGVybWluaXN0aWMnKTtcblxuICAgICAgY29uc3QgcHViS2V5UGFpciA9IG5ldyBEb3QuS2V5UGFpcih7IHB1YjogZGVyaXZlZFBrIH0pO1xuICAgICAgcHViS2V5UGFpci5nZXRLZXlzKCkucHViLnNob3VsZC5lcXVhbChkZXJpdmVkUGspO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3RQYXRoID0gJ20vJztcbiAgICBjb25zdCByb290S2V5Y2hhaW4gPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChjb21tb25LZXljaGFpbiwgcm9vdFBhdGgpO1xuICAgIGNvbnN0IHJvb3RQdWJsaWNLZXkgPSBCdWZmZXIuZnJvbShyb290S2V5Y2hhaW4sICdoZXgnKS5zbGljZSgwLCAzMikudG9TdHJpbmcoJ2hleCcpO1xuICAgIGNvbnN0IHB1YktleVBhaXIgPSBuZXcgRG90LktleVBhaXIoeyBwdWI6IHJvb3RQdWJsaWNLZXkgfSk7XG4gICAgcHViS2V5UGFpci5nZXRLZXlzKCkucHViLnNob3VsZC5lcXVhbChyb290UHVibGljS2V5KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHNpZ25pbmcgd2l0aG91dCBtZWV0aW5nIHRocmVzaG9sZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBBID0gTVBDLmtleVNoYXJlKDEsIDIsIDMpO1xuICAgIGNvbnN0IEIgPSBNUEMua2V5U2hhcmUoMiwgMiwgMyk7XG4gICAgY29uc3QgQyA9IE1QQy5rZXlTaGFyZSgzLCAyLCAzKTtcblxuICAgIGNvbnN0IEFfY29tYmluZSA9IE1QQy5rZXlDb21iaW5lKEEudVNoYXJlLCBbQi55U2hhcmVzWzFdLCBDLnlTaGFyZXNbMV1dKTtcbiAgICBjb25zdCBCX2NvbWJpbmUgPSBNUEMua2V5Q29tYmluZShCLnVTaGFyZSwgW0EueVNoYXJlc1syXSwgQy55U2hhcmVzWzJdXSk7XG5cbiAgICBjb25zdCBtZXNzYWdlID0gJ01QQyBvbiBhIEZyaWRheSBuaWdodCc7XG4gICAgY29uc3QgbWVzc2FnZV9idWZmZXIgPSBCdWZmZXIuZnJvbShtZXNzYWdlLCAndXRmLTgnKTtcbiAgICBjb25zdCBBX3NpZ25fc2hhcmUgPSBNUEMuc2lnblNoYXJlKG1lc3NhZ2VfYnVmZmVyLCBBX2NvbWJpbmUucFNoYXJlLCBbQV9jb21iaW5lLmpTaGFyZXNbMl1dKTtcbiAgICBjb25zdCBCX3NpZ25fc2hhcmUgPSBNUEMuc2lnblNoYXJlKG1lc3NhZ2VfYnVmZmVyLCBCX2NvbWJpbmUucFNoYXJlLCBbQl9jb21iaW5lLmpTaGFyZXNbMV1dKTtcblxuICAgIGNvbnN0IEFfc2lnbiA9IE1QQy5zaWduKG1lc3NhZ2VfYnVmZmVyLCBBX3NpZ25fc2hhcmUueFNoYXJlLCBbQl9zaWduX3NoYXJlLnJTaGFyZXNbMV1dKTtcbiAgICBjb25zdCBzaWduYXR1cmUgPSBNUEMuc2lnbkNvbWJpbmUoW0Ffc2lnbl0pO1xuICAgIE1QQy52ZXJpZnkobWVzc2FnZV9idWZmZXIsIHNpZ25hdHVyZSkuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dpdGggc3BlY2lmaWMgc2VlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGtleXMgYW5kIHNpZ24gbWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNlZWQgPSByYW5kb21CeXRlcyg2NCk7XG5cbiAgICAgIGNvbnN0IEEgPSBNUEMua2V5U2hhcmUoMSwgMiwgMywgc2VlZCk7XG4gICAgICBjb25zdCBCID0gTVBDLmtleVNoYXJlKDIsIDIsIDMsIHNlZWQpO1xuICAgICAgY29uc3QgQyA9IE1QQy5rZXlTaGFyZSgzLCAyLCAzLCBzZWVkKTtcblxuICAgICAgLy8gS2V5cyBzaG91bGQgYmUgZGV0ZXJtaW5pc3RpYyB3aGVuIHVzaW5nIHNlZWRcbiAgICAgIE1QQy5rZXlTaGFyZSgxLCAyLCAzLCBzZWVkKS5zaG91bGQuZGVlcEVxdWFsKEEpO1xuICAgICAgTVBDLmtleVNoYXJlKDIsIDIsIDMsIHNlZWQpLnNob3VsZC5kZWVwRXF1YWwoQik7XG4gICAgICBNUEMua2V5U2hhcmUoMywgMiwgMywgc2VlZCkuc2hvdWxkLmRlZXBFcXVhbChDKTtcblxuICAgICAgY29uc3QgQV9jb21iaW5lID0gTVBDLmtleUNvbWJpbmUoQS51U2hhcmUsIFtCLnlTaGFyZXNbMV0sIEMueVNoYXJlc1sxXV0pO1xuICAgICAgY29uc3QgQl9jb21iaW5lID0gTVBDLmtleUNvbWJpbmUoQi51U2hhcmUsIFtBLnlTaGFyZXNbMl0sIEMueVNoYXJlc1syXV0pO1xuICAgICAgY29uc3QgQ19jb21iaW5lID0gTVBDLmtleUNvbWJpbmUoQy51U2hhcmUsIFtBLnlTaGFyZXNbM10sIEIueVNoYXJlc1szXV0pO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gJ01QQyBvbiBhIEZyaWRheSBuaWdodCc7XG4gICAgICBjb25zdCBtZXNzYWdlX2J1ZmZlciA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2UpO1xuXG4gICAgICAvLyBzaWduaW5nIHdpdGggQSBhbmQgQlxuICAgICAgbGV0IEFfc2lnbl9zaGFyZSA9IE1QQy5zaWduU2hhcmUobWVzc2FnZV9idWZmZXIsIEFfY29tYmluZS5wU2hhcmUsIFtBX2NvbWJpbmUualNoYXJlc1syXV0sIHNlZWQpO1xuICAgICAgbGV0IEJfc2lnbl9zaGFyZSA9IE1QQy5zaWduU2hhcmUobWVzc2FnZV9idWZmZXIsIEJfY29tYmluZS5wU2hhcmUsIFtCX2NvbWJpbmUualNoYXJlc1sxXV0sIHNlZWQpO1xuICAgICAgbGV0IEFfc2lnbiA9IE1QQy5zaWduKG1lc3NhZ2VfYnVmZmVyLCBBX3NpZ25fc2hhcmUueFNoYXJlLCBbQl9zaWduX3NoYXJlLnJTaGFyZXNbMV1dLCBbQy55U2hhcmVzWzFdXSk7XG4gICAgICBsZXQgQl9zaWduID0gTVBDLnNpZ24obWVzc2FnZV9idWZmZXIsIEJfc2lnbl9zaGFyZS54U2hhcmUsIFtBX3NpZ25fc2hhcmUuclNoYXJlc1syXV0sIFtDLnlTaGFyZXNbMl1dKTtcbiAgICAgIGxldCBzaWduYXR1cmUgPSBNUEMuc2lnbkNvbWJpbmUoW0Ffc2lnbiwgQl9zaWduXSk7XG4gICAgICBsZXQgcmVzdWx0ID0gTVBDLnZlcmlmeShtZXNzYWdlX2J1ZmZlciwgc2lnbmF0dXJlKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG5cbiAgICAgIC8vIHNpZ25pbmcgd2l0aCBBIGFuZCBDXG4gICAgICBBX3NpZ25fc2hhcmUgPSBNUEMuc2lnblNoYXJlKG1lc3NhZ2VfYnVmZmVyLCBBX2NvbWJpbmUucFNoYXJlLCBbQV9jb21iaW5lLmpTaGFyZXNbM11dLCBzZWVkKTtcbiAgICAgIGxldCBDX3NpZ25fc2hhcmUgPSBNUEMuc2lnblNoYXJlKG1lc3NhZ2VfYnVmZmVyLCBDX2NvbWJpbmUucFNoYXJlLCBbQ19jb21iaW5lLmpTaGFyZXNbMV1dLCBzZWVkKTtcbiAgICAgIEFfc2lnbiA9IE1QQy5zaWduKG1lc3NhZ2VfYnVmZmVyLCBBX3NpZ25fc2hhcmUueFNoYXJlLCBbQ19zaWduX3NoYXJlLnJTaGFyZXNbMV1dLCBbQi55U2hhcmVzWzFdXSk7XG4gICAgICBsZXQgQ19zaWduID0gTVBDLnNpZ24obWVzc2FnZV9idWZmZXIsIENfc2lnbl9zaGFyZS54U2hhcmUsIFtBX3NpZ25fc2hhcmUuclNoYXJlc1szXV0sIFtCLnlTaGFyZXNbM11dKTtcbiAgICAgIHNpZ25hdHVyZSA9IE1QQy5zaWduQ29tYmluZShbQV9zaWduLCBDX3NpZ25dKTtcbiAgICAgIHJlc3VsdCA9IE1QQy52ZXJpZnkobWVzc2FnZV9idWZmZXIsIHNpZ25hdHVyZSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmVxdWFsKHRydWUpO1xuXG4gICAgICAvLyBzaWduaW5nIHdpdGggQiBhbmQgQ1xuICAgICAgQl9zaWduX3NoYXJlID0gTVBDLnNpZ25TaGFyZShtZXNzYWdlX2J1ZmZlciwgQl9jb21iaW5lLnBTaGFyZSwgW0JfY29tYmluZS5qU2hhcmVzWzNdXSwgc2VlZCk7XG4gICAgICBDX3NpZ25fc2hhcmUgPSBNUEMuc2lnblNoYXJlKG1lc3NhZ2VfYnVmZmVyLCBDX2NvbWJpbmUucFNoYXJlLCBbQ19jb21iaW5lLmpTaGFyZXNbMl1dLCBzZWVkKTtcbiAgICAgIEJfc2lnbiA9IE1QQy5zaWduKG1lc3NhZ2VfYnVmZmVyLCBCX3NpZ25fc2hhcmUueFNoYXJlLCBbQ19zaWduX3NoYXJlLnJTaGFyZXNbMl1dLCBbQS55U2hhcmVzWzJdXSk7XG4gICAgICBDX3NpZ24gPSBNUEMuc2lnbihtZXNzYWdlX2J1ZmZlciwgQ19zaWduX3NoYXJlLnhTaGFyZSwgW0Jfc2lnbl9zaGFyZS5yU2hhcmVzWzNdXSwgW0EueVNoYXJlc1szXV0pO1xuICAgICAgc2lnbmF0dXJlID0gTVBDLnNpZ25Db21iaW5lKFtCX3NpZ24sIENfc2lnbl0pO1xuICAgICAgcmVzdWx0ID0gTVBDLnZlcmlmeShtZXNzYWdlX2J1ZmZlciwgc2lnbmF0dXJlKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBCSVAzMiBzdWJrZXkgc2lnbmF0dXJlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZCA9IHJhbmRvbUJ5dGVzKDY0KTtcbiAgICAgIGNvbnN0IHBhdGggPSAnbS8wLzEvMic7XG5cbiAgICAgIGNvbnN0IEEgPSBNUEMua2V5U2hhcmUoMSwgMiwgMywgc2VlZCk7XG4gICAgICBjb25zdCBCID0gTVBDLmtleVNoYXJlKDIsIDIsIDMsIHNlZWQpO1xuICAgICAgY29uc3QgQyA9IE1QQy5rZXlTaGFyZSgzLCAyLCAzLCBzZWVkKTtcblxuICAgICAgLy8gS2V5cyBzaG91bGQgYmUgZGV0ZXJtaW5pc3RpYyB3aGVuIHVzaW5nIHNlZWRcbiAgICAgIE1QQy5rZXlTaGFyZSgxLCAyLCAzLCBzZWVkKS5zaG91bGQuZGVlcEVxdWFsKEEpO1xuICAgICAgTVBDLmtleVNoYXJlKDIsIDIsIDMsIHNlZWQpLnNob3VsZC5kZWVwRXF1YWwoQik7XG4gICAgICBNUEMua2V5U2hhcmUoMywgMiwgMywgc2VlZCkuc2hvdWxkLmRlZXBFcXVhbChDKTtcblxuICAgICAgLy8gQ29tYmluZSBzaGFyZXMgdG8gY29tbW9uIGJhc2UgYWRkcmVzcy5cbiAgICAgIGNvbnN0IEFfY29tYmluZSA9IE1QQy5rZXlDb21iaW5lKEEudVNoYXJlLCBbQi55U2hhcmVzWzFdLCBDLnlTaGFyZXNbMV1dKTtcbiAgICAgIGNvbnN0IEJfY29tYmluZSA9IE1QQy5rZXlDb21iaW5lKEIudVNoYXJlLCBbQS55U2hhcmVzWzJdLCBDLnlTaGFyZXNbMl1dKTtcblxuICAgICAgLy8gUGFydHkgQSBkZXJpdmVzIHN1YmtleSBQIHNoYXJlIGFuZCBuZXcgWSBzaGFyZXMuXG4gICAgICBjb25zdCBBX3N1YmtleSA9IE1QQy5rZXlEZXJpdmUoQS51U2hhcmUsIFtCLnlTaGFyZXNbMV0sIEMueVNoYXJlc1sxXV0sIHBhdGgpO1xuXG4gICAgICAvLyBQYXJ0eSBCIGNhbGN1bGF0ZXMgbmV3IFAgc2hhcmUgdXNpbmcgcGFydHkgQSdzIHN1YmtleSBZIHNoYXJlcy5cbiAgICAgIGNvbnN0IEJfc3Via2V5ID0gTVBDLmtleUNvbWJpbmUoQi51U2hhcmUsIFtBX3N1YmtleS55U2hhcmVzWzJdLCBDLnlTaGFyZXNbMl1dKTtcblxuICAgICAgLy8gRGVyaXZlIHRoZSBwdWJsaWMgc3Via2V5Y2hhaW4gc2VwYXJhdGVseSB1c2luZyB0aGUgY29tbW9uIGtleWNoYWluLlxuICAgICAgY29uc3Qgc3Via2V5ID0gaGRUcmVlLnB1YmxpY0Rlcml2ZShcbiAgICAgICAge1xuICAgICAgICAgIHBrOiBiaWdJbnRGcm9tQnVmZmVyTEUoQnVmZmVyLmZyb20oQV9jb21iaW5lLnBTaGFyZS55LCAnaGV4JykpLFxuICAgICAgICAgIGNoYWluY29kZTogYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKEFfY29tYmluZS5wU2hhcmUuY2hhaW5jb2RlLCAnaGV4JykpLFxuICAgICAgICB9LFxuICAgICAgICBwYXRoLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHkgPSBiaWdJbnRUb0J1ZmZlckxFKHN1YmtleS5waywgMzIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IGNoYWluY29kZSA9IGJpZ0ludFRvQnVmZmVyQkUoc3Via2V5LmNoYWluY29kZSwgMzIpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgICAgLy8gVmVyaWZ5IHRoZSBrZXljaGFpbiBpbiB0aGUgc3Via2V5IFAgc2hhcmVzIGVxdWFscyB0aGUgc2VwYXJhdGVseSBkZXJpdmVkIHB1YmxpYyBzdWJrZXljaGFpbi5cbiAgICAgIEFfc3Via2V5LnBTaGFyZS55LnNob3VsZC5lcXVhbCh5KTtcbiAgICAgIEFfc3Via2V5LnBTaGFyZS5jaGFpbmNvZGUuc2hvdWxkLmVxdWFsKGNoYWluY29kZSk7XG4gICAgICBCX3N1YmtleS5wU2hhcmUueS5zaG91bGQuZXF1YWwoeSk7XG4gICAgICBCX3N1YmtleS5wU2hhcmUuY2hhaW5jb2RlLnNob3VsZC5lcXVhbChjaGFpbmNvZGUpO1xuXG4gICAgICBjb25zdCBtZXNzYWdlID0gJ01QQyBvbiBhIEZyaWRheSBuaWdodCc7XG4gICAgICBjb25zdCBtZXNzYWdlX2J1ZmZlciA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2UpO1xuXG4gICAgICAvLyBTaWduaW5nIHdpdGggQSBhbmQgQiB1c2luZyBzdWJrZXkgUCBzaGFyZXMuXG4gICAgICBjb25zdCBBX3NpZ25fc2hhcmUgPSBNUEMuc2lnblNoYXJlKG1lc3NhZ2VfYnVmZmVyLCBBX3N1YmtleS5wU2hhcmUsIFtBX2NvbWJpbmUualNoYXJlc1syXV0pO1xuICAgICAgY29uc3QgQl9zaWduX3NoYXJlID0gTVBDLnNpZ25TaGFyZShtZXNzYWdlX2J1ZmZlciwgQl9zdWJrZXkucFNoYXJlLCBbQl9jb21iaW5lLmpTaGFyZXNbMV1dKTtcbiAgICAgIGNvbnN0IEFfc2lnbiA9IE1QQy5zaWduKG1lc3NhZ2VfYnVmZmVyLCBBX3NpZ25fc2hhcmUueFNoYXJlLCBbQl9zaWduX3NoYXJlLnJTaGFyZXNbMV1dLCBbQy55U2hhcmVzWzFdXSk7XG4gICAgICBjb25zdCBCX3NpZ24gPSBNUEMuc2lnbihtZXNzYWdlX2J1ZmZlciwgQl9zaWduX3NoYXJlLnhTaGFyZSwgW0Ffc2lnbl9zaGFyZS5yU2hhcmVzWzJdXSwgW0MueVNoYXJlc1syXV0pO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gTVBDLnNpZ25Db21iaW5lKFtBX3NpZ24sIEJfc2lnbl0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gTVBDLnZlcmlmeShtZXNzYWdlX2J1ZmZlciwgc2lnbmF0dXJlKTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZXF1YWwodHJ1ZSk7XG5cbiAgICAgIC8vIFZlcmlmeSB0aGUgcHVibGljIGtleSBpbiB0aGUgc2lnbmF0dXJlIGVxdWFscyB0aGUgc2VwYXJhdGVseSBkZXJpdmVkIHB1YmxpYyBzdWJrZXkuXG4gICAgICBzaWduYXR1cmUueS5zaG91bGQuZXF1YWwoeSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgaWYgc2VlZCBpcyBub3QgbGVuZ3RoIDY0JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBNUEMua2V5U2hhcmUoMSwgMiwgMywgcmFuZG9tQnl0ZXMoMzMpKSwgL1NlZWQgbXVzdCBoYXZlIGxlbmd0aCA2NC8pO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBNUEMua2V5U2hhcmUoMSwgMiwgMywgcmFuZG9tQnl0ZXMoNjYpKSwgL1NlZWQgbXVzdCBoYXZlIGxlbmd0aCA2NC8pO1xuXG4gICAgICBjb25zdCBmYWtlUFNoYXJlID0ge1xuICAgICAgICBpOiAxLFxuICAgICAgICB0OiAzLFxuICAgICAgICBuOiAyLFxuICAgICAgICB5OiAneVN0cmluZycsXG4gICAgICAgIHU6ICd1U3RyaW5nJyxcbiAgICAgICAgcHJlZml4OiAncHJlZml4JyxcbiAgICAgICAgY2hhaW5jb2RlOiAnY2hhaW5jb2RlJyxcbiAgICAgIH07XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBNUEMuc2lnblNoYXJlKEJ1ZmZlci5mcm9tKCdhYmNkJywgJ2hleCcpLCBmYWtlUFNoYXJlLCBbXSwgcmFuZG9tQnl0ZXMoMzMpKSxcbiAgICAgICAgL1NlZWQgbXVzdCBoYXZlIGxlbmd0aCA2NC8sXG4gICAgICApO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gTVBDLnNpZ25TaGFyZShCdWZmZXIuZnJvbSgnYWJjZCcsICdoZXgnKSwgZmFrZVBTaGFyZSwgW10sIHJhbmRvbUJ5dGVzKDY2KSksXG4gICAgICAgIC9TZWVkIG11c3QgaGF2ZSBsZW5ndGggNjQvLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,130 @@
1
+ export declare const ntildes: {
2
+ ntilde: bigint;
3
+ h1: bigint;
4
+ h2: bigint;
5
+ }[];
6
+ export declare const paillerKeys: {
7
+ publicKey: {
8
+ n: bigint;
9
+ _n2: bigint;
10
+ g: bigint;
11
+ };
12
+ privateKey: {
13
+ lambda: bigint;
14
+ mu: bigint;
15
+ _p: bigint;
16
+ _q: bigint;
17
+ publicKey: {
18
+ n: bigint;
19
+ _n2: bigint;
20
+ g: bigint;
21
+ };
22
+ };
23
+ }[];
24
+ export declare const schnorrProofs: {
25
+ vPoint: bigint;
26
+ r: bigint;
27
+ }[];
28
+ export declare const mockPShare: {
29
+ i: number;
30
+ t: number;
31
+ c: number;
32
+ l: string;
33
+ m: string;
34
+ n: string;
35
+ y: string;
36
+ u: string;
37
+ uu: string;
38
+ chaincode: string;
39
+ };
40
+ export declare const mockNShares: {
41
+ i: number;
42
+ j: number;
43
+ n: string;
44
+ y: string;
45
+ v: string;
46
+ u: string;
47
+ chaincode: string;
48
+ }[];
49
+ export declare const mockDKeyShare: {
50
+ xShare: {
51
+ i: number;
52
+ l: string;
53
+ m: string;
54
+ n: string;
55
+ y: string;
56
+ x: string;
57
+ chaincode: string;
58
+ schnorrProofX: {
59
+ vPoint: bigint;
60
+ r: bigint;
61
+ };
62
+ };
63
+ yShares: {
64
+ 2: {
65
+ i: number;
66
+ j: number;
67
+ n: string;
68
+ };
69
+ 3: {
70
+ i: number;
71
+ j: number;
72
+ n: string;
73
+ };
74
+ };
75
+ };
76
+ export declare const mockEKeyShare: {
77
+ xShare: {
78
+ i: number;
79
+ l: string;
80
+ m: string;
81
+ n: string;
82
+ y: string;
83
+ x: string;
84
+ chaincode: string;
85
+ schnorrProofX: {
86
+ vPoint: bigint;
87
+ r: bigint;
88
+ };
89
+ };
90
+ yShares: {
91
+ 1: {
92
+ i: number;
93
+ j: number;
94
+ n: string;
95
+ };
96
+ 3: {
97
+ i: number;
98
+ j: number;
99
+ n: string;
100
+ };
101
+ };
102
+ };
103
+ export declare const mockFKeyShare: {
104
+ xShare: {
105
+ i: number;
106
+ l: string;
107
+ m: string;
108
+ n: string;
109
+ y: string;
110
+ x: string;
111
+ chaincode: string;
112
+ schnorrProofX: {
113
+ vPoint: bigint;
114
+ r: bigint;
115
+ };
116
+ };
117
+ yShares: {
118
+ 1: {
119
+ i: number;
120
+ j: number;
121
+ n: string;
122
+ };
123
+ 2: {
124
+ i: number;
125
+ j: number;
126
+ n: string;
127
+ };
128
+ };
129
+ };
130
+ //# sourceMappingURL=ecdsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecdsa.d.ts","sourceRoot":"","sources":["../../../../../../test/unit/mpc/tss/fixtures/ecdsa.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO;;;;GAuMnB,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;GAmHvB,CAAC;AAEF,eAAO,MAAM,aAAa;;;GAyBzB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;CAWtB,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;;GAmBvB,CAAC;AAGF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;CAuBzB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;CAuBzB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;CAuBzB,CAAC"}