@bitgo/account-lib 2.18.0-rc.1 → 2.18.0-rc.5

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 (51) hide show
  1. package/DEVELOPER.md +1 -1
  2. package/dist/browser/bitgo-account-lib.min.js +1 -1
  3. package/dist/package.json +6 -4
  4. package/dist/src/coin/baseCoin/ed25519KeyPair.d.ts +9 -1
  5. package/dist/src/coin/baseCoin/ed25519KeyPair.d.ts.map +1 -1
  6. package/dist/src/coin/baseCoin/ed25519KeyPair.js +21 -3
  7. package/dist/src/coin/baseCoin/iface.d.ts +26 -0
  8. package/dist/src/coin/baseCoin/iface.d.ts.map +1 -1
  9. package/dist/src/coin/baseCoin/iface.js +1 -1
  10. package/dist/src/coin/dot/addressInitializationBuilder.d.ts +21 -1
  11. package/dist/src/coin/dot/addressInitializationBuilder.d.ts.map +1 -1
  12. package/dist/src/coin/dot/addressInitializationBuilder.js +80 -19
  13. package/dist/src/coin/dot/iface.d.ts +12 -20
  14. package/dist/src/coin/dot/iface.d.ts.map +1 -1
  15. package/dist/src/coin/dot/iface.js +2 -1
  16. package/dist/src/coin/dot/transaction.d.ts.map +1 -1
  17. package/dist/src/coin/dot/transaction.js +14 -6
  18. package/dist/src/coin/dot/transactionBuilder.d.ts +3 -3
  19. package/dist/src/coin/dot/transactionBuilder.d.ts.map +1 -1
  20. package/dist/src/coin/dot/transactionBuilder.js +1 -1
  21. package/dist/src/coin/dot/txnSchema.d.ts +1 -0
  22. package/dist/src/coin/dot/txnSchema.d.ts.map +1 -1
  23. package/dist/src/coin/dot/txnSchema.js +12 -5
  24. package/dist/src/coin/sol/index.d.ts +3 -0
  25. package/dist/src/coin/sol/index.d.ts.map +1 -1
  26. package/dist/src/coin/sol/index.js +8 -2
  27. package/dist/src/coin/sol/keyPair.d.ts +4 -22
  28. package/dist/src/coin/sol/keyPair.d.ts.map +1 -1
  29. package/dist/src/coin/sol/keyPair.js +42 -89
  30. package/dist/src/coin/sol/transactionBuilder.d.ts.map +1 -1
  31. package/dist/src/coin/sol/transactionBuilder.js +8 -2
  32. package/dist/src/coin/sol/utils.d.ts.map +1 -1
  33. package/dist/src/coin/sol/utils.js +23 -1
  34. package/dist/src/coin/stx/sendmanyBuilder.d.ts.map +1 -1
  35. package/dist/src/coin/stx/sendmanyBuilder.js +5 -2
  36. package/dist/src/index.d.ts +2 -0
  37. package/dist/src/index.d.ts.map +1 -1
  38. package/dist/src/index.js +4 -2
  39. package/dist/src/mpc/curves.d.ts +14 -0
  40. package/dist/src/mpc/curves.d.ts.map +1 -0
  41. package/dist/src/mpc/curves.js +99 -0
  42. package/dist/src/mpc/shamir.d.ts +7 -0
  43. package/dist/src/mpc/shamir.d.ts.map +1 -0
  44. package/dist/src/mpc/shamir.js +91 -0
  45. package/dist/src/mpc/tss.d.ts +69 -0
  46. package/dist/src/mpc/tss.d.ts.map +1 -0
  47. package/dist/src/mpc/tss.js +255 -0
  48. package/dist/src/utils/ed25519KeyDeriver.d.ts +49 -0
  49. package/dist/src/utils/ed25519KeyDeriver.d.ts.map +1 -0
  50. package/dist/src/utils/ed25519KeyDeriver.js +92 -0
  51. package/package.json +6 -4
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __spreadArray = (this && this.__spreadArray) || function (to, from) {
39
+ for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
40
+ to[j] = from[i];
41
+ return to;
42
+ };
43
+ var __importDefault = (this && this.__importDefault) || function (mod) {
44
+ return (mod && mod.__esModule) ? mod : { "default": mod };
45
+ };
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ /**
48
+ * Module provides functions for MPC using threshold signature scheme (TSS). It contains
49
+ * functions for key generation and message signing with EdDSA.
50
+ *
51
+ *
52
+ * ======================
53
+ * EdDSA Key Generation
54
+ * ======================
55
+ * 1. Each signer generates their own key share, which involves a private u-share and a public y-share.
56
+ * 2. Signers distribute their y-share to other signers.
57
+ * 3. After exchanging y-shares the next phase is to combine key shares. Each signer combines their u-share
58
+ * with the y-shares received from other signers in order to generate a p-share for themselves. We
59
+ * also save j-shares for other signers.
60
+ * 4. At this point the players do not distribute any shares and the first phase of the
61
+ * signing protocol is complete.
62
+ *
63
+ * ======================
64
+ * EdDSA Signing
65
+ * ======================
66
+ * 1. The parties from key generation decide they want to sign something. They begin the signing protocol
67
+ * by generating shares of an ephemeral key.
68
+ *
69
+ * a) Each signer uses his p-share and the j-shares stored for other players to generate his signing share.
70
+ * b) This results in each signer having a private x-share and public r-shares.
71
+ *
72
+ * 2. Signers distribute their r-shares to other signers.
73
+ * 3. After exchanging r-shares, each signer signs their share of the ephemeral key using their private
74
+ * x-share with the r-shares from other signers.
75
+ * 4. This results in each signer having a public g-share which they send to the other signers.
76
+ * 5. After the signers broadcast their g-shares, the final signature can be re-constructed independently.
77
+ */
78
+ var assert = require('assert');
79
+ var curves_1 = __importDefault(require("./curves"));
80
+ var js_sha512_1 = require("js-sha512");
81
+ var shamir_1 = __importDefault(require("./shamir"));
82
+ var crypto_1 = require("crypto");
83
+ var convertObjectHexToBuffer = function (object, keys) {
84
+ var result = object;
85
+ keys.forEach(function (key) {
86
+ result[key] = Buffer.from(object[key], 'hex');
87
+ });
88
+ return result;
89
+ };
90
+ var Eddsa = function () { return __awaiter(void 0, void 0, void 0, function () {
91
+ var ed25519, shamir, keyShare, keyCombine, signShare, sign, signCombine, verify;
92
+ return __generator(this, function (_a) {
93
+ switch (_a.label) {
94
+ case 0: return [4 /*yield*/, curves_1.default()];
95
+ case 1:
96
+ ed25519 = _a.sent();
97
+ shamir = shamir_1.default(ed25519);
98
+ keyShare = function (index, threshold, numShares) {
99
+ assert(index > 0 && index <= numShares);
100
+ var sk = crypto_1.randomBytes(32);
101
+ var h = Buffer.from(js_sha512_1.sha512.digest(sk));
102
+ var zeroBuffer = Buffer.alloc(64 - h.length);
103
+ var combinedBuffer = Buffer.concat([zeroBuffer, h]);
104
+ var uBuffer = combinedBuffer.slice(0, 32);
105
+ uBuffer[0] &= 248;
106
+ uBuffer[31] &= 63;
107
+ uBuffer[31] |= 64;
108
+ var zeroBuffer32 = Buffer.alloc(32);
109
+ uBuffer = Buffer.concat([uBuffer, zeroBuffer32]);
110
+ var u = Buffer.from(ed25519.scalarReduce(uBuffer));
111
+ var y = Buffer.from(ed25519.basePointMult(u));
112
+ var split_u = shamir.split(u, threshold, numShares);
113
+ var prefixBuffer = combinedBuffer.subarray(32, combinedBuffer.length);
114
+ prefixBuffer = Buffer.concat([zeroBuffer32, prefixBuffer]);
115
+ var prefix = Buffer.from(ed25519.scalarReduce(prefixBuffer));
116
+ var P_i = {
117
+ i: index.toString(),
118
+ y: y.toString('hex'),
119
+ u: split_u[index.toString()].toString('hex'),
120
+ prefix: prefix.toString('hex'),
121
+ };
122
+ var shares = {
123
+ uShare: P_i,
124
+ yShares: {},
125
+ };
126
+ for (var ind in split_u) {
127
+ if (ind === index.toString()) {
128
+ continue;
129
+ }
130
+ shares.yShares[ind] = {
131
+ i: ind,
132
+ j: P_i['i'],
133
+ y: y.toString('hex'),
134
+ u: split_u[ind].toString('hex'),
135
+ };
136
+ }
137
+ return shares;
138
+ };
139
+ keyCombine = function (uShare, distributedShares) {
140
+ // u-shares and y-shares required buffer format for curve functions
141
+ var shares = __spreadArray([uShare], distributedShares).map(function (share) { return convertObjectHexToBuffer(share, ['y', 'u']); });
142
+ var yShares = shares.map(function (share) { return share['y']; });
143
+ var uShares = shares.map(function (share) { return share['u']; });
144
+ var y = Buffer.from(yShares.reduce(function (partial, share) { return ed25519.pointAdd(partial, share); }));
145
+ var x = Buffer.from(uShares.reduce(function (partial, share) { return ed25519.scalarAdd(partial, share); }));
146
+ var P_i = {
147
+ i: uShare['i'],
148
+ y: y.toString('hex'),
149
+ x: x.toString('hex'),
150
+ prefix: uShare['prefix'],
151
+ };
152
+ var players = {
153
+ pShare: P_i,
154
+ jShares: {},
155
+ };
156
+ for (var ind = 0; ind < distributedShares.length; ind++) {
157
+ var P_j = distributedShares[ind];
158
+ players.jShares[P_j['j']] = {
159
+ i: P_j['j'],
160
+ j: P_i['i'],
161
+ };
162
+ }
163
+ return players;
164
+ };
165
+ signShare = function (message, pShare, jShares) {
166
+ // x-shares and y-shares required buffer format for curve functions
167
+ var shares = __spreadArray([convertObjectHexToBuffer(pShare, ['x', 'y'])], jShares);
168
+ var indices = shares.map(function (share) { return share['i']; });
169
+ // use big endian for prefix
170
+ var randomBuffer = crypto_1.randomBytes(32);
171
+ var prefix_reference = Buffer.from(pShare['prefix'], 'hex');
172
+ prefix_reference.reverse();
173
+ var combinedBuffer = Buffer.concat([prefix_reference, message, randomBuffer]);
174
+ // using big endian
175
+ var digest = Buffer.from(js_sha512_1.sha512.digest(combinedBuffer));
176
+ digest.reverse();
177
+ var r = Buffer.from(ed25519.scalarReduce(digest));
178
+ var R = Buffer.from(ed25519.basePointMult(r));
179
+ var split_r = shamir.split(r, shares.length, shares.length, indices);
180
+ var P_i = {
181
+ i: pShare['i'],
182
+ y: pShare['y'],
183
+ x: pShare['x'],
184
+ r: split_r[pShare['i']].toString('hex'),
185
+ R: R.toString('hex'),
186
+ };
187
+ var resultShares = {
188
+ xShare: P_i,
189
+ rShares: {},
190
+ };
191
+ for (var ind = 0; ind < jShares.length; ind++) {
192
+ var S_j = jShares[ind];
193
+ resultShares.rShares[S_j['i']] = {
194
+ i: S_j['i'],
195
+ j: pShare['i'],
196
+ r: split_r[S_j['i']].toString('hex'),
197
+ R: R.toString('hex'),
198
+ };
199
+ }
200
+ return resultShares;
201
+ };
202
+ sign = function (message, playerShare, distributedShares) {
203
+ // x, y, r, R required buffer format for curve functions
204
+ var shares = __spreadArray([playerShare], distributedShares).map(function (share) { return convertObjectHexToBuffer(share, ['R', 'r']); });
205
+ var S_i = playerShare;
206
+ var rShares = shares.map(function (share) { return share['R']; });
207
+ var littleRShares = shares.map(function (share) { return share['r']; });
208
+ var R = Buffer.from(rShares.reduce(function (partial, share) { return ed25519.pointAdd(partial, share); }));
209
+ var r = Buffer.from(littleRShares.reduce(function (partial, share) { return ed25519.scalarAdd(partial, share); }));
210
+ var combinedBuffer = Buffer.concat([R, Buffer.from(S_i['y'], 'hex'), message]);
211
+ var digest = Buffer.from(js_sha512_1.sha512.digest(combinedBuffer));
212
+ var k = Buffer.from(ed25519.scalarReduce(digest));
213
+ var gamma = Buffer.from(ed25519.scalarAdd(r, ed25519.scalarMult(k, Buffer.from(S_i['x'], 'hex'))));
214
+ var result = {
215
+ i: playerShare['i'],
216
+ y: playerShare['y'],
217
+ gamma: gamma.toString('hex'),
218
+ R: R.toString('hex'),
219
+ };
220
+ return result;
221
+ };
222
+ signCombine = function (shares) {
223
+ shares = shares.map(function (share) { return convertObjectHexToBuffer(share, ['y', 'gamma', 'R']); });
224
+ var keys = Object.keys(shares);
225
+ var y = shares[keys[0]]['y'];
226
+ var R = shares[keys[0]]['R'];
227
+ var resultShares = {};
228
+ for (var ind in shares) {
229
+ var S_i = shares[ind];
230
+ resultShares[S_i['i']] = S_i['gamma'];
231
+ }
232
+ var sigma = shamir.combine(resultShares);
233
+ sigma = Buffer.from(sigma);
234
+ var result = {
235
+ y: y.toString('hex'),
236
+ R: R.toString('hex'),
237
+ sigma: sigma.toString('hex'),
238
+ };
239
+ return result;
240
+ };
241
+ verify = function (message, signature) {
242
+ var publicKey = Buffer.from(signature['y'], 'hex');
243
+ var signedMessage = Buffer.concat([
244
+ Buffer.from(signature['R'], 'hex'),
245
+ Buffer.from(signature['sigma'], 'hex'),
246
+ message,
247
+ ]);
248
+ return Buffer.from(ed25519.verify(publicKey, signedMessage));
249
+ };
250
+ return [2 /*return*/, { keyShare: keyShare, keyCombine: keyCombine, signShare: signShare, sign: sign, signCombine: signCombine, verify: verify }];
251
+ }
252
+ });
253
+ }); };
254
+ exports.default = Eddsa;
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21wYy90c3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsb0RBQW9DO0FBQ3BDLHVDQUFtQztBQUNuQyxvREFBOEI7QUFDOUIsaUNBQTBEO0FBRTFELElBQU0sd0JBQXdCLEdBQUcsVUFBQyxNQUEyQixFQUFFLElBQWM7SUFDM0UsSUFBTSxNQUFNLEdBQVEsTUFBTSxDQUFDO0lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBQyxHQUFHO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBdUVGLElBQU0sS0FBSyxHQUFHOzs7O29CQUNJLHFCQUFNLGdCQUFZLEVBQUUsRUFBQTs7Z0JBQTlCLE9BQU8sR0FBRyxTQUFvQjtnQkFDOUIsTUFBTSxHQUFHLGdCQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRXpCLFFBQVEsR0FBRyxVQUFDLEtBQWEsRUFBRSxTQUFpQixFQUFFLFNBQWlCO29CQUNuRSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLElBQUksU0FBUyxDQUFDLENBQUM7b0JBQ3hDLElBQU0sRUFBRSxHQUFHLG9CQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNqQyxJQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxD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TSxDQUFDO3dCQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUM7d0JBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQzt3QkFDdEMsT0FBTztxQkFDUixDQUFDLENBQUM7b0JBQ0gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQy9ELENBQUMsQ0FBQztnQkFFRixzQkFBTyxFQUFFLFFBQVEsVUFBQSxFQUFFLFVBQVUsWUFBQSxFQUFFLFNBQVMsV0FBQSxFQUFFLElBQUksTUFBQSxFQUFFLFdBQVcsYUFBQSxFQUFFLE1BQU0sUUFBQSxFQUFFLEVBQUM7OztLQUN2RSxDQUFDO0FBRUYsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2R1bGUgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBNUEMgdXNpbmcgdGhyZXNob2xkIHNpZ25hdHVyZSBzY2hlbWUgKFRTUykuIEl0IGNvbnRhaW5zXG4gKiBmdW5jdGlvbnMgZm9yIGtleSBnZW5lcmF0aW9uIGFuZCBtZXNzYWdlIHNpZ25pbmcgd2l0aCBFZERTQS5cbiAqXG4gKlxuICogPT09PT09PT09PT09PT09PT09PT09PVxuICogRWREU0EgS2V5IEdlbmVyYXRpb25cbiAqID09PT09PT09PT09PT09PT09PT09PT1cbiAqIDEuIEVhY2ggc2lnbmVyIGdlbmVyYXRlcyB0aGVpciBvd24ga2V5IHNoYXJlLCB3aGljaCBpbnZvbHZlcyBhIHByaXZhdGUgdS1zaGFyZSBhbmQgYSBwdWJsaWMgeS1zaGFyZS5cbiAqIDIuIFNpZ25lcnMgZGlzdHJpYnV0ZSB0aGVpciB5LXNoYXJlIHRvIG90aGVyIHNpZ25lcnMuXG4gKiAzLiBBZnRlciBleGNoYW5naW5nIHktc2hhcmVzIHRoZSBuZXh0IHBoYXNlIGlzIHRvIGNvbWJpbmUga2V5IHNoYXJlcy4gRWFjaCBzaWduZXIgY29tYmluZXMgdGhlaXIgdS1zaGFyZVxuICogICAgd2l0aCB0aGUgeS1zaGFyZXMgcmVjZWl2ZWQgZnJvbSBvdGhlciBzaWduZXJzIGluIG9yZGVyIHRvIGdlbmVyYXRlIGEgcC1zaGFyZSBmb3IgdGhlbXNlbHZlcy4gV2VcbiAqICAgIGFsc28gc2F2ZSBqLXNoYXJlcyBmb3Igb3RoZXIgc2lnbmVycy5cbiAqIDQuIEF0IHRoaXMgcG9pbnQgdGhlIHBsYXllcnMgZG8gbm90IGRpc3RyaWJ1dGUgYW55IHNoYXJlcyBhbmQgdGhlIGZpcnN0IHBoYXNlIG9mIHRoZVxuICogICAgc2lnbmluZyBwcm90b2NvbCBpcyBjb21wbGV0ZS5cbiAqXG4gKiA9PT09PT09PT09PT09PT09PT09PT09XG4gKiBFZERTQSBTaWduaW5nXG4gKiA9PT09PT09PT09PT09PT09PT09PT09XG4gKiAxLiBUaGUgcGFydGllcyBmcm9tIGtleSBnZW5lcmF0aW9uIGRlY2lkZSB0aGV5IHdhbnQgdG8gc2lnbiBzb21ldGhpbmcuIFRoZXkgYmVnaW4gdGhlIHNpZ25pbmcgcHJvdG9jb2xcbiAqICAgIGJ5IGdlbmVyYXRpbmcgc2hhcmVzIG9mIGFuIGVwaGVtZXJhbCBrZXkuXG4gKlxuICogICAgYSkgRWFjaCBzaWduZXIgdXNlcyBoaXMgcC1zaGFyZSBhbmQgdGhlIGotc2hhcmVzIHN0b3JlZCBmb3Igb3RoZXIgcGxheWVycyB0byBnZW5lcmF0ZSBoaXMgc2lnbmluZyBzaGFyZS5cbiAqICAgIGIpIFRoaXMgcmVzdWx0cyBpbiBlYWNoIHNpZ25lciBoYXZpbmcgYSBwcml2YXRlIHgtc2hhcmUgYW5kIHB1YmxpYyByLXNoYXJlcy5cbiAqXG4gKiAyLiBTaWduZXJzIGRpc3RyaWJ1dGUgdGhlaXIgci1zaGFyZXMgdG8gb3RoZXIgc2lnbmVycy5cbiAqIDMuIEFmdGVyIGV4Y2hhbmdpbmcgci1zaGFyZXMsIGVhY2ggc2lnbmVyIHNpZ25zIHRoZWlyIHNoYXJlIG9mIHRoZSBlcGhlbWVyYWwga2V5IHVzaW5nIHRoZWlyIHByaXZhdGVcbiAqICAgIHgtc2hhcmUgd2l0aCB0aGUgci1zaGFyZXMgZnJvbSBvdGhlciBzaWduZXJzLlxuICogNC4gVGhpcyByZXN1bHRzIGluIGVhY2ggc2lnbmVyIGhhdmluZyBhIHB1YmxpYyBnLXNoYXJlIHdoaWNoIHRoZXkgc2VuZCB0byB0aGUgb3RoZXIgc2lnbmVycy5cbiAqIDUuIEFmdGVyIHRoZSBzaWduZXJzIGJyb2FkY2FzdCB0aGVpciBnLXNoYXJlcywgdGhlIGZpbmFsIHNpZ25hdHVyZSBjYW4gYmUgcmUtY29uc3RydWN0ZWQgaW5kZXBlbmRlbnRseS5cbiAqL1xuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG5pbXBvcnQgRWQyNTUxOUN1cnZlIGZyb20gJy4vY3VydmVzJztcbmltcG9ydCB7IHNoYTUxMiB9IGZyb20gJ2pzLXNoYTUxMic7XG5pbXBvcnQgU2hhbWlyIGZyb20gJy4vc2hhbWlyJztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIGFzIGNyeXB0b1JhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuY29uc3QgY29udmVydE9iamVjdEhleFRvQnVmZmVyID0gKG9iamVjdDogUmVjb3JkPHN0cmluZywgYW55Piwga2V5czogc3RyaW5nW10pID0+IHtcbiAgY29uc3QgcmVzdWx0OiBhbnkgPSBvYmplY3Q7XG4gIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgcmVzdWx0W2tleV0gPSBCdWZmZXIuZnJvbShvYmplY3Rba2V5XSwgJ2hleCcpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmludGVyZmFjZSBVU2hhcmUge1xuICBpOiBzdHJpbmc7XG4gIHk6IHN0cmluZztcbiAgdTogc3RyaW5nO1xuICBwcmVmaXg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFlTaGFyZSB7XG4gIGk6IHN0cmluZztcbiAgajogc3RyaW5nO1xuICB5OiBzdHJpbmc7XG4gIHU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEtleVNoYXJlIHtcbiAgdVNoYXJlOiBVU2hhcmU7XG4gIHlTaGFyZXM6IFJlY29yZDxzdHJpbmcsIFlTaGFyZT47XG59XG5cbmludGVyZmFjZSBQU2hhcmUge1xuICBpOiBzdHJpbmc7XG4gIHg6IHN0cmluZztcbiAgeTogc3RyaW5nO1xuICBwcmVmaXg6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEpTaGFyZSB7XG4gIGk6IHN0cmluZztcbiAgajogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgS2V5Q29tYmluZSB7XG4gIHBTaGFyZTogUFNoYXJlO1xuICBqU2hhcmVzOiBSZWNvcmQ8c3RyaW5nLCBKU2hhcmU+O1xufVxuXG5pbnRlcmZhY2UgWFNoYXJlIHtcbiAgaTogc3RyaW5nO1xuICB5OiBzdHJpbmc7XG4gIHg6IHN0cmluZztcbiAgcjogc3RyaW5nO1xuICBSOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSU2hhcmUge1xuICBpOiBzdHJpbmc7XG4gIGo6IHN0cmluZztcbiAgcjogc3RyaW5nO1xuICBSOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTaWduU2hhcmUge1xuICB4U2hhcmU6IFhTaGFyZTtcbiAgclNoYXJlczogUmVjb3JkPHN0cmluZywgUlNoYXJlPjtcbn1cblxuaW50ZXJmYWNlIEdTaGFyZSB7XG4gIGk6IHN0cmluZztcbiAgeTogc3RyaW5nO1xuICBnYW1tYTogc3RyaW5nO1xuICBSOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTaWduYXR1cmUge1xuICB5OiBzdHJpbmc7XG4gIFI6IHN0cmluZztcbiAgc2lnbWE6IHN0cmluZztcbn1cblxuY29uc3QgRWRkc2EgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGVkMjU1MTkgPSBhd2FpdCBFZDI1NTE5Q3VydmUoKTtcbiAgY29uc3Qgc2hhbWlyID0gU2hhbWlyKGVkMjU1MTkpO1xuXG4gIGNvbnN0IGtleVNoYXJlID0gKGluZGV4OiBudW1iZXIsIHRocmVzaG9sZDogbnVtYmVyLCBudW1TaGFyZXM6IG51bWJlcik6IEtleVNoYXJlID0+IHtcbiAgICBhc3NlcnQoaW5kZXggPiAwICYmIGluZGV4IDw9IG51bVNoYXJlcyk7XG4gICAgY29uc3Qgc2sgPSBjcnlwdG9SYW5kb21CeXRlcygzMik7XG4gICAgY29uc3QgaCA9IEJ1ZmZlci5mcm9tKHNoYTUxMi5kaWdlc3Qoc2spKTtcbiAgICBjb25zdCB6ZXJvQnVmZmVyID0gQnVmZmVyLmFsbG9jKDY0IC0gaC5sZW5ndGgpO1xuICAgIGNvbnN0IGNvbWJpbmVkQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbemVyb0J1ZmZlciwgaF0pO1xuXG4gICAgbGV0IHVCdWZmZXIgPSBjb21iaW5lZEJ1ZmZlci5zbGljZSgwLCAzMik7XG4gICAgdUJ1ZmZlclswXSAmPSAyNDg7XG4gICAgdUJ1ZmZlclszMV0gJj0gNjM7XG4gICAgdUJ1ZmZlclszMV0gfD0gNjQ7XG5cbiAgICBjb25zdCB6ZXJvQnVmZmVyMzIgPSBCdWZmZXIuYWxsb2MoMzIpO1xuICAgIHVCdWZmZXIgPSBCdWZmZXIuY29uY2F0KFt1QnVmZmVyLCB6ZXJvQnVmZmVyMzJdKTtcbiAgICBjb25zdCB1ID0gQnVmZmVyLmZyb20oZWQyNTUxOS5zY2FsYXJSZWR1Y2UodUJ1ZmZlcikpO1xuICAgIGNvbnN0IHkgPSBCdWZmZXIuZnJvbShlZDI1NTE5LmJhc2VQb2ludE11bHQodSkpO1xuICAgIGNvbnN0IHNwbGl0X3UgPSBzaGFtaXIuc3BsaXQodSwgdGhyZXNob2xkLCBudW1TaGFyZXMpO1xuXG4gICAgbGV0IHByZWZpeEJ1ZmZlciA9IGNvbWJpbmVkQnVmZmVyLnN1YmFycmF5KDMyLCBjb21iaW5lZEJ1ZmZlci5sZW5ndGgpO1xuICAgIHByZWZpeEJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3plcm9CdWZmZXIzMiwgcHJlZml4QnVmZmVyXSk7XG4gICAgY29uc3QgcHJlZml4ID0gQnVmZmVyLmZyb20oZWQyNTUxOS5zY2FsYXJSZWR1Y2UocHJlZml4QnVmZmVyKSk7XG5cbiAgICBjb25zdCBQX2k6IFVTaGFyZSA9IHtcbiAgICAgIGk6IGluZGV4LnRvU3RyaW5nKCksXG4gICAgICB5OiB5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHU6IHNwbGl0X3VbaW5kZXgudG9TdHJpbmcoKV0udG9TdHJpbmcoJ2hleCcpLFxuICAgICAgcHJlZml4OiBwcmVmaXgudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gICAgY29uc3Qgc2hhcmVzOiBLZXlTaGFyZSA9IHtcbiAgICAgIHVTaGFyZTogUF9pLFxuICAgICAgeVNoYXJlczoge30sXG4gICAgfTtcblxuICAgIGZvciAoY29uc3QgaW5kIGluIHNwbGl0X3UpIHtcbiAgICAgIGlmIChpbmQgPT09IGluZGV4LnRvU3RyaW5nKCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBzaGFyZXMueVNoYXJlc1tpbmRdID0ge1xuICAgICAgICBpOiBpbmQsXG4gICAgICAgIGo6IFBfaVsnaSddLFxuICAgICAgICB5OiB5LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgICAgdTogc3BsaXRfdVtpbmRdLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBzaGFyZXM7XG4gIH07XG4gIGNvbnN0IGtleUNvbWJpbmUgPSAodVNoYXJlOiBVU2hhcmUsIGRpc3RyaWJ1dGVkU2hhcmVzOiBZU2hhcmVbXSk6IEtleUNvbWJpbmUgPT4ge1xuICAgIC8vIHUtc2hhcmVzIGFuZCB5LXNoYXJlcyByZXF1aXJlZCBidWZmZXIgZm9ybWF0IGZvciBjdXJ2ZSBmdW5jdGlvbnNcbiAgICBjb25zdCBzaGFyZXMgPSBbdVNoYXJlLCAuLi5kaXN0cmlidXRlZFNoYXJlc10ubWFwKChzaGFyZSkgPT4gY29udmVydE9iamVjdEhleFRvQnVmZmVyKHNoYXJlLCBbJ3knLCAndSddKSk7XG4gICAgY29uc3QgeVNoYXJlcyA9IHNoYXJlcy5tYXAoKHNoYXJlKSA9PiBzaGFyZVsneSddKTtcbiAgICBjb25zdCB1U2hhcmVzID0gc2hhcmVzLm1hcCgoc2hhcmUpID0+IHNoYXJlWyd1J10pO1xuICAgIGNvbnN0IHkgPSBCdWZmZXIuZnJvbSh5U2hhcmVzLnJlZHVjZSgocGFydGlhbCwgc2hhcmUpID0+IGVkMjU1MTkucG9pbnRBZGQocGFydGlhbCwgc2hhcmUpKSk7XG4gICAgY29uc3QgeCA9IEJ1ZmZlci5mcm9tKHVTaGFyZXMucmVkdWNlKChwYXJ0aWFsLCBzaGFyZSkgPT4gZWQyNTUxOS5zY2FsYXJBZGQocGFydGlhbCwgc2hhcmUpKSk7XG5cbiAgICBjb25zdCBQX2k6IFBTaGFyZSA9IHtcbiAgICAgIGk6IHVTaGFyZVsnaSddLFxuICAgICAgeTogeS50b1N0cmluZygnaGV4JyksXG4gICAgICB4OiB4LnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHByZWZpeDogdVNoYXJlWydwcmVmaXgnXSxcbiAgICB9O1xuICAgIGNvbnN0IHBsYXllcnM6IEtleUNvbWJpbmUgPSB7XG4gICAgICBwU2hhcmU6IFBfaSxcbiAgICAgIGpTaGFyZXM6IHt9LFxuICAgIH07XG5cbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBkaXN0cmlidXRlZFNoYXJlcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICBjb25zdCBQX2ogPSBkaXN0cmlidXRlZFNoYXJlc1tpbmRdO1xuICAgICAgcGxheWVycy5qU2hhcmVzW1BfalsnaiddXSA9IHtcbiAgICAgICAgaTogUF9qWydqJ10sXG4gICAgICAgIGo6IFBfaVsnaSddLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHBsYXllcnM7XG4gIH07XG5cbiAgY29uc3Qgc2lnblNoYXJlID0gKG1lc3NhZ2U6IEJ1ZmZlciwgcFNoYXJlOiBQU2hhcmUsIGpTaGFyZXM6IEpTaGFyZVtdKTogU2lnblNoYXJlID0+IHtcbiAgICAvLyB4LXNoYXJlcyBhbmQgeS1zaGFyZXMgcmVxdWlyZWQgYnVmZmVyIGZvcm1hdCBmb3IgY3VydmUgZnVuY3Rpb25zXG4gICAgY29uc3Qgc2hhcmVzID0gW2NvbnZlcnRPYmplY3RIZXhUb0J1ZmZlcihwU2hhcmUsIFsneCcsICd5J10pLCAuLi5qU2hhcmVzXTtcbiAgICBjb25zdCBpbmRpY2VzID0gc2hhcmVzLm1hcCgoc2hhcmUpID0+IHNoYXJlWydpJ10pO1xuXG4gICAgLy8gdXNlIGJpZyBlbmRpYW4gZm9yIHByZWZpeFxuICAgIGNvbnN0IHJhbmRvbUJ1ZmZlciA9IGNyeXB0b1JhbmRvbUJ5dGVzKDMyKTtcbiAgICBjb25zdCBwcmVmaXhfcmVmZXJlbmNlID0gQnVmZmVyLmZyb20ocFNoYXJlWydwcmVmaXgnXSwgJ2hleCcpO1xuICAgIHByZWZpeF9yZWZlcmVuY2UucmV2ZXJzZSgpO1xuICAgIGNvbnN0IGNvbWJpbmVkQnVmZmVyID0gQnVmZmVyLmNvbmNhdChbcHJlZml4X3JlZmVyZW5jZSwgbWVzc2FnZSwgcmFuZG9tQnVmZmVyXSk7XG5cbiAgICAvLyB1c2luZyBiaWcgZW5kaWFuXG4gICAgY29uc3QgZGlnZXN0ID0gQnVmZmVyLmZyb20oc2hhNTEyLmRpZ2VzdChjb21iaW5lZEJ1ZmZlcikpO1xuICAgIGRpZ2VzdC5yZXZlcnNlKCk7XG5cbiAgICBjb25zdCByID0gQnVmZmVyLmZyb20oZWQyNTUxOS5zY2FsYXJSZWR1Y2UoZGlnZXN0KSk7XG4gICAgY29uc3QgUiA9IEJ1ZmZlci5mcm9tKGVkMjU1MTkuYmFzZVBvaW50TXVsdChyKSk7XG4gICAgY29uc3Qgc3BsaXRfciA9IHNoYW1pci5zcGxpdChyLCBzaGFyZXMubGVuZ3RoLCBzaGFyZXMubGVuZ3RoLCBpbmRpY2VzKTtcblxuICAgIGNvbnN0IFBfaTogWFNoYXJlID0ge1xuICAgICAgaTogcFNoYXJlWydpJ10sXG4gICAgICB5OiBwU2hhcmVbJ3knXSxcbiAgICAgIHg6IHBTaGFyZVsneCddLFxuICAgICAgcjogc3BsaXRfcltwU2hhcmVbJ2knXV0udG9TdHJpbmcoJ2hleCcpLFxuICAgICAgUjogUi50b1N0cmluZygnaGV4JyksXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdFNoYXJlczogU2lnblNoYXJlID0ge1xuICAgICAgeFNoYXJlOiBQX2ksXG4gICAgICByU2hhcmVzOiB7fSxcbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgalNoYXJlcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICBjb25zdCBTX2ogPSBqU2hhcmVzW2luZF07XG4gICAgICByZXN1bHRTaGFyZXMuclNoYXJlc1tTX2pbJ2knXV0gPSB7XG4gICAgICAgIGk6IFNfalsnaSddLFxuICAgICAgICBqOiBwU2hhcmVbJ2knXSxcbiAgICAgICAgcjogc3BsaXRfcltTX2pbJ2knXV0udG9TdHJpbmcoJ2hleCcpLFxuICAgICAgICBSOiBSLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRTaGFyZXM7XG4gIH07XG5cbiAgY29uc3Qgc2lnbiA9IChtZXNzYWdlOiBCdWZmZXIsIHBsYXllclNoYXJlOiBYU2hhcmUsIGRpc3RyaWJ1dGVkU2hhcmVzOiBSU2hhcmVbXSk6IEdTaGFyZSA9PiB7XG4gICAgLy8geCwgeSwgciwgUiByZXF1aXJlZCBidWZmZXIgZm9ybWF0IGZvciBjdXJ2ZSBmdW5jdGlvbnNcbiAgICBjb25zdCBzaGFyZXMgPSBbcGxheWVyU2hhcmUsIC4uLmRpc3RyaWJ1dGVkU2hhcmVzXS5tYXAoKHNoYXJlKSA9PiBjb252ZXJ0T2JqZWN0SGV4VG9CdWZmZXIoc2hhcmUsIFsnUicsICdyJ10pKTtcbiAgICBjb25zdCBTX2kgPSBwbGF5ZXJTaGFyZTtcblxuICAgIGNvbnN0IHJTaGFyZXMgPSBzaGFyZXMubWFwKChzaGFyZSkgPT4gc2hhcmVbJ1InXSk7XG4gICAgY29uc3QgbGl0dGxlUlNoYXJlcyA9IHNoYXJlcy5tYXAoKHNoYXJlKSA9PiBzaGFyZVsnciddKTtcblxuICAgIGNvbnN0IFIgPSBCdWZmZXIuZnJvbShyU2hhcmVzLnJlZHVjZSgocGFydGlhbCwgc2hhcmUpID0+IGVkMjU1MTkucG9pbnRBZGQocGFydGlhbCwgc2hhcmUpKSk7XG4gICAgY29uc3QgciA9IEJ1ZmZlci5mcm9tKGxpdHRsZVJTaGFyZXMucmVkdWNlKChwYXJ0aWFsLCBzaGFyZSkgPT4gZWQyNTUxOS5zY2FsYXJBZGQocGFydGlhbCwgc2hhcmUpKSk7XG5cbiAgICBjb25zdCBjb21iaW5lZEJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW1IsIEJ1ZmZlci5mcm9tKFNfaVsneSddLCAnaGV4JyksIG1lc3NhZ2VdKTtcbiAgICBjb25zdCBkaWdlc3QgPSBCdWZmZXIuZnJvbShzaGE1MTIuZGlnZXN0KGNvbWJpbmVkQnVmZmVyKSk7XG4gICAgY29uc3QgayA9IEJ1ZmZlci5mcm9tKGVkMjU1MTkuc2NhbGFyUmVkdWNlKGRpZ2VzdCkpO1xuXG4gICAgY29uc3QgZ2FtbWEgPSBCdWZmZXIuZnJvbShlZDI1NTE5LnNjYWxhckFkZChyLCBlZDI1NTE5LnNjYWxhck11bHQoaywgQnVmZmVyLmZyb20oU19pWyd4J10sICdoZXgnKSkpKTtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBpOiBwbGF5ZXJTaGFyZVsnaSddLFxuICAgICAgeTogcGxheWVyU2hhcmVbJ3knXSxcbiAgICAgIGdhbW1hOiBnYW1tYS50b1N0cmluZygnaGV4JyksXG4gICAgICBSOiBSLnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgY29uc3Qgc2lnbkNvbWJpbmUgPSAoc2hhcmVzOiBHU2hhcmVbXSk6IFNpZ25hdHVyZSA9PiB7XG4gICAgc2hhcmVzID0gc2hhcmVzLm1hcCgoc2hhcmUpID0+IGNvbnZlcnRPYmplY3RIZXhUb0J1ZmZlcihzaGFyZSwgWyd5JywgJ2dhbW1hJywgJ1InXSkpO1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzaGFyZXMpO1xuICAgIGNvbnN0IHkgPSBzaGFyZXNba2V5c1swXV1bJ3knXTtcbiAgICBjb25zdCBSID0gc2hhcmVzW2tleXNbMF1dWydSJ107XG5cbiAgICBjb25zdCByZXN1bHRTaGFyZXMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGluZCBpbiBzaGFyZXMpIHtcbiAgICAgIGNvbnN0IFNfaSA9IHNoYXJlc1tpbmRdO1xuICAgICAgcmVzdWx0U2hhcmVzW1NfaVsnaSddXSA9IFNfaVsnZ2FtbWEnXTtcbiAgICB9XG4gICAgbGV0IHNpZ21hOiBCdWZmZXIgPSBzaGFtaXIuY29tYmluZShyZXN1bHRTaGFyZXMpO1xuICAgIHNpZ21hID0gQnVmZmVyLmZyb20oc2lnbWEpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHk6IHkudG9TdHJpbmcoJ2hleCcpLFxuICAgICAgUjogUi50b1N0cmluZygnaGV4JyksXG4gICAgICBzaWdtYTogc2lnbWEudG9TdHJpbmcoJ2hleCcpLFxuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBjb25zdCB2ZXJpZnkgPSAobWVzc2FnZTogQnVmZmVyLCBzaWduYXR1cmU6IFNpZ25hdHVyZSk6IEJ1ZmZlciA9PiB7XG4gICAgY29uc3QgcHVibGljS2V5ID0gQnVmZmVyLmZyb20oc2lnbmF0dXJlWyd5J10sICdoZXgnKTtcbiAgICBjb25zdCBzaWduZWRNZXNzYWdlID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICBCdWZmZXIuZnJvbShzaWduYXR1cmVbJ1InXSwgJ2hleCcpLFxuICAgICAgQnVmZmVyLmZyb20oc2lnbmF0dXJlWydzaWdtYSddLCAnaGV4JyksXG4gICAgICBtZXNzYWdlLFxuICAgIF0pO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShlZDI1NTE5LnZlcmlmeShwdWJsaWNLZXksIHNpZ25lZE1lc3NhZ2UpKTtcbiAgfTtcblxuICByZXR1cm4geyBrZXlTaGFyZSwga2V5Q29tYmluZSwgc2lnblNoYXJlLCBzaWduLCBzaWduQ29tYmluZSwgdmVyaWZ5IH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFZGRzYTtcbiJdfQ==
@@ -0,0 +1,49 @@
1
+ /// <reference types="node" />
2
+ export interface HdKeypair {
3
+ key: Buffer;
4
+ chainCode: Buffer;
5
+ }
6
+ /**
7
+ * Heirarchical determinisitic key derivation for the ed25519 elliptic curve,
8
+ * as defined in SLIP-0010.
9
+ *
10
+ * https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0005.md
11
+ * https://github.com/satoshilabs/slips/blob/master/slip-0010.md
12
+ */
13
+ export declare class Ed25519KeyDeriver {
14
+ /**
15
+ * This key derivation code was copied and adapted from:
16
+ * https://github.com/chatch/stellar-hd-wallet/blob/612c12325ca9047dce460016fb7d148f55f575ca/src/hd-key.js
17
+ *
18
+ * There have been some slight modifications to improve typescript support.
19
+ *
20
+ * The original ed25519-hd-key module is licensed under "GPL-3".
21
+ */
22
+ private static readonly ED25519_CURVE;
23
+ private static readonly HARDENED_OFFSET;
24
+ private static readonly PATH_REGEX;
25
+ /**
26
+ * Derive a SLIP-0010 key given a path and master key seed.
27
+ *
28
+ * @param path derivation path
29
+ * @param seed key seed
30
+ */
31
+ static derivePath(path: string, seed: string): HdKeypair;
32
+ /**
33
+ * Generate a SLIP-0010 master key from the entropy seed
34
+ *
35
+ * @param seed master key seed used to recreate master key
36
+ */
37
+ private static getMasterKeyFromSeed;
38
+ /**
39
+ * Calculate a child private key given the parent key, the chain code, and the child index.
40
+ *
41
+ * @param key parent key
42
+ * @param chainCode chain code for parent key
43
+ * @param index index of child to derive
44
+ */
45
+ private static CKDPriv;
46
+ private static replaceDerive;
47
+ private static isValidPath;
48
+ }
49
+ //# sourceMappingURL=ed25519KeyDeriver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ed25519KeyDeriver.d.ts","sourceRoot":"","sources":["../../../src/utils/ed25519KeyDeriver.ts"],"names":[],"mappings":";AAKA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAC5B;;;;;;;OAOG;IAEH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAkB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAc;IACrD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAkC;IAEpE;;;;;OAKG;WACW,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS;IAY/D;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAWnC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,OAAO;IAatB,OAAO,CAAC,MAAM,CAAC,aAAa,CAA+D;IAC3F,OAAO,CAAC,MAAM,CAAC,WAAW;CAM3B"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Ed25519KeyDeriver = void 0;
7
+ /**
8
+ * @prettier
9
+ */
10
+ var create_hmac_1 = __importDefault(require("create-hmac"));
11
+ /**
12
+ * Heirarchical determinisitic key derivation for the ed25519 elliptic curve,
13
+ * as defined in SLIP-0010.
14
+ *
15
+ * https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0005.md
16
+ * https://github.com/satoshilabs/slips/blob/master/slip-0010.md
17
+ */
18
+ var Ed25519KeyDeriver = /** @class */ (function () {
19
+ function Ed25519KeyDeriver() {
20
+ }
21
+ /**
22
+ * Derive a SLIP-0010 key given a path and master key seed.
23
+ *
24
+ * @param path derivation path
25
+ * @param seed key seed
26
+ */
27
+ Ed25519KeyDeriver.derivePath = function (path, seed) {
28
+ var _this = this;
29
+ if (!this.isValidPath(path)) {
30
+ throw new Error('Invalid derivation path');
31
+ }
32
+ var _a = this.getMasterKeyFromSeed(seed), key = _a.key, chainCode = _a.chainCode;
33
+ var segments = path.split('/').slice(1).map(this.replaceDerive);
34
+ return segments.reduce(function (parentKeys, segment) { return _this.CKDPriv(parentKeys, segment + Ed25519KeyDeriver.HARDENED_OFFSET); }, { key: key, chainCode: chainCode });
35
+ };
36
+ /**
37
+ * Generate a SLIP-0010 master key from the entropy seed
38
+ *
39
+ * @param seed master key seed used to recreate master key
40
+ */
41
+ Ed25519KeyDeriver.getMasterKeyFromSeed = function (seed) {
42
+ var hmac = create_hmac_1.default('sha512', Ed25519KeyDeriver.ED25519_CURVE);
43
+ var I = hmac.update(Buffer.from(seed, 'hex')).digest();
44
+ var IL = I.slice(0, 32);
45
+ var IR = I.slice(32);
46
+ return {
47
+ key: IL,
48
+ chainCode: IR,
49
+ };
50
+ };
51
+ /**
52
+ * Calculate a child private key given the parent key, the chain code, and the child index.
53
+ *
54
+ * @param key parent key
55
+ * @param chainCode chain code for parent key
56
+ * @param index index of child to derive
57
+ */
58
+ Ed25519KeyDeriver.CKDPriv = function (_a, index) {
59
+ var key = _a.key, chainCode = _a.chainCode;
60
+ var indexBuffer = Buffer.allocUnsafe(4);
61
+ indexBuffer.writeUInt32BE(index, 0);
62
+ var data = Buffer.concat([Buffer.alloc(1, 0), key, indexBuffer]);
63
+ var I = create_hmac_1.default('sha512', chainCode).update(data).digest();
64
+ var IL = I.slice(0, 32);
65
+ var IR = I.slice(32);
66
+ return {
67
+ key: IL,
68
+ chainCode: IR,
69
+ };
70
+ };
71
+ Ed25519KeyDeriver.isValidPath = function (path) {
72
+ if (!Ed25519KeyDeriver.PATH_REGEX.test(path)) {
73
+ return false;
74
+ }
75
+ return !path.split('/').slice(1).map(this.replaceDerive).some(isNaN);
76
+ };
77
+ /**
78
+ * This key derivation code was copied and adapted from:
79
+ * https://github.com/chatch/stellar-hd-wallet/blob/612c12325ca9047dce460016fb7d148f55f575ca/src/hd-key.js
80
+ *
81
+ * There have been some slight modifications to improve typescript support.
82
+ *
83
+ * The original ed25519-hd-key module is licensed under "GPL-3".
84
+ */
85
+ Ed25519KeyDeriver.ED25519_CURVE = 'ed25519 seed';
86
+ Ed25519KeyDeriver.HARDENED_OFFSET = 0x80000000;
87
+ Ed25519KeyDeriver.PATH_REGEX = new RegExp("^m(\\/[0-9]+')+$");
88
+ Ed25519KeyDeriver.replaceDerive = function (val) { return parseInt(val.replace("'", ''), 10); };
89
+ return Ed25519KeyDeriver;
90
+ }());
91
+ exports.Ed25519KeyDeriver = Ed25519KeyDeriver;
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWQyNTUxOUtleURlcml2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvZWQyNTUxOUtleURlcml2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0dBRUc7QUFDSCw0REFBcUM7QUFPckM7Ozs7OztHQU1HO0FBQ0g7SUFBQTtJQTJFQSxDQUFDO0lBN0RDOzs7OztPQUtHO0lBQ1csNEJBQVUsR0FBeEIsVUFBeUIsSUFBWSxFQUFFLElBQVk7UUFBbkQsaUJBVUM7UUFUQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUM7UUFDSyxJQUFBLEtBQXFCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsRUFBbEQsR0FBRyxTQUFBLEVBQUUsU0FBUyxlQUFvQyxDQUFDO1FBQzNELElBQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbEUsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUNwQixVQUFDLFVBQVUsRUFBRSxPQUFPLElBQUssT0FBQSxLQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxDQUFDLEVBQXJFLENBQXFFLEVBQzlGLEVBQUUsR0FBRyxLQUFBLEVBQUUsU0FBUyxXQUFBLEVBQUUsQ0FDbkIsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ1ksc0NBQW9CLEdBQW5DLFVBQW9DLElBQVk7UUFDOUMsSUFBTSxJQUFJLEdBQUcscUJBQVUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkUsSUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3pELElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsT0FBTztZQUNMLEdBQUcsRUFBRSxFQUFFO1lBQ1AsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNZLHlCQUFPLEdBQXRCLFVBQXVCLEVBQTZCLEVBQUUsS0FBYTtZQUExQyxHQUFHLFNBQUEsRUFBRSxTQUFTLGVBQUE7UUFDckMsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQyxJQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBTSxDQUFDLEdBQUcscUJBQVUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hFLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFCLElBQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsT0FBTztZQUNMLEdBQUcsRUFBRSxFQUFFO1lBQ1AsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUdjLDZCQUFXLEdBQTFCLFVBQTJCLElBQVk7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBekVEOzs7Ozs7O09BT0c7SUFFcUIsK0JBQWEsR0FBRyxjQUFjLENBQUM7SUFDL0IsaUNBQWUsR0FBRyxVQUFVLENBQUM7SUFDN0IsNEJBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBd0RyRCwrQkFBYSxHQUFHLFVBQUMsR0FBVyxJQUFhLE9BQUEsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFsQyxDQUFrQyxDQUFDO0lBTzdGLHdCQUFDO0NBQUEsQUEzRUQsSUEyRUM7QUEzRVksOENBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IGNyZWF0ZUhtYWMgZnJvbSAnY3JlYXRlLWhtYWMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhkS2V5cGFpciB7XG4gIGtleTogQnVmZmVyO1xuICBjaGFpbkNvZGU6IEJ1ZmZlcjtcbn1cblxuLyoqXG4gKiBIZWlyYXJjaGljYWwgZGV0ZXJtaW5pc2l0aWMga2V5IGRlcml2YXRpb24gZm9yIHRoZSBlZDI1NTE5IGVsbGlwdGljIGN1cnZlLFxuICogYXMgZGVmaW5lZCBpbiBTTElQLTAwMTAuXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL3N0ZWxsYXIvc3RlbGxhci1wcm90b2NvbC9ibG9iL21hc3Rlci9lY29zeXN0ZW0vc2VwLTAwMDUubWRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zYXRvc2hpbGFicy9zbGlwcy9ibG9iL21hc3Rlci9zbGlwLTAwMTAubWRcbiAqL1xuZXhwb3J0IGNsYXNzIEVkMjU1MTlLZXlEZXJpdmVyIHtcbiAgLyoqXG4gICAqIFRoaXMga2V5IGRlcml2YXRpb24gY29kZSB3YXMgY29waWVkIGFuZCBhZGFwdGVkIGZyb206XG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9jaGF0Y2gvc3RlbGxhci1oZC13YWxsZXQvYmxvYi82MTJjMTIzMjVjYTkwNDdkY2U0NjAwMTZmYjdkMTQ4ZjU1ZjU3NWNhL3NyYy9oZC1rZXkuanNcbiAgICpcbiAgICogVGhlcmUgaGF2ZSBiZWVuIHNvbWUgc2xpZ2h0IG1vZGlmaWNhdGlvbnMgdG8gaW1wcm92ZSB0eXBlc2NyaXB0IHN1cHBvcnQuXG4gICAqXG4gICAqIFRoZSBvcmlnaW5hbCBlZDI1NTE5LWhkLWtleSBtb2R1bGUgaXMgbGljZW5zZWQgdW5kZXIgXCJHUEwtM1wiLlxuICAgKi9cblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFRDI1NTE5X0NVUlZFID0gJ2VkMjU1MTkgc2VlZCc7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEhBUkRFTkVEX09GRlNFVCA9IDB4ODAwMDAwMDA7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFBBVEhfUkVHRVggPSBuZXcgUmVnRXhwKFwiXm0oXFxcXC9bMC05XSsnKSskXCIpO1xuXG4gIC8qKlxuICAgKiBEZXJpdmUgYSBTTElQLTAwMTAga2V5IGdpdmVuIGEgcGF0aCBhbmQgbWFzdGVyIGtleSBzZWVkLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBkZXJpdmF0aW9uIHBhdGhcbiAgICogQHBhcmFtIHNlZWQga2V5IHNlZWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZGVyaXZlUGF0aChwYXRoOiBzdHJpbmcsIHNlZWQ6IHN0cmluZyk6IEhkS2V5cGFpciB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRQYXRoKHBhdGgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGVyaXZhdGlvbiBwYXRoJyk7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5LCBjaGFpbkNvZGUgfSA9IHRoaXMuZ2V0TWFzdGVyS2V5RnJvbVNlZWQoc2VlZCk7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJykuc2xpY2UoMSkubWFwKHRoaXMucmVwbGFjZURlcml2ZSk7XG4gICAgcmV0dXJuIHNlZ21lbnRzLnJlZHVjZShcbiAgICAgIChwYXJlbnRLZXlzLCBzZWdtZW50KSA9PiB0aGlzLkNLRFByaXYocGFyZW50S2V5cywgc2VnbWVudCArIEVkMjU1MTlLZXlEZXJpdmVyLkhBUkRFTkVEX09GRlNFVCksXG4gICAgICB7IGtleSwgY2hhaW5Db2RlIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIFNMSVAtMDAxMCBtYXN0ZXIga2V5IGZyb20gdGhlIGVudHJvcHkgc2VlZFxuICAgKlxuICAgKiBAcGFyYW0gc2VlZCBtYXN0ZXIga2V5IHNlZWQgdXNlZCB0byByZWNyZWF0ZSBtYXN0ZXIga2V5XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRNYXN0ZXJLZXlGcm9tU2VlZChzZWVkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBobWFjID0gY3JlYXRlSG1hYygnc2hhNTEyJywgRWQyNTUxOUtleURlcml2ZXIuRUQyNTUxOV9DVVJWRSk7XG4gICAgY29uc3QgSSA9IGhtYWMudXBkYXRlKEJ1ZmZlci5mcm9tKHNlZWQsICdoZXgnKSkuZGlnZXN0KCk7XG4gICAgY29uc3QgSUwgPSBJLnNsaWNlKDAsIDMyKTtcbiAgICBjb25zdCBJUiA9IEkuc2xpY2UoMzIpO1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6IElMLFxuICAgICAgY2hhaW5Db2RlOiBJUixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhIGNoaWxkIHByaXZhdGUga2V5IGdpdmVuIHRoZSBwYXJlbnQga2V5LCB0aGUgY2hhaW4gY29kZSwgYW5kIHRoZSBjaGlsZCBpbmRleC5cbiAgICpcbiAgICogQHBhcmFtIGtleSBwYXJlbnQga2V5XG4gICAqIEBwYXJhbSBjaGFpbkNvZGUgY2hhaW4gY29kZSBmb3IgcGFyZW50IGtleVxuICAgKiBAcGFyYW0gaW5kZXggaW5kZXggb2YgY2hpbGQgdG8gZGVyaXZlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBDS0RQcml2KHsga2V5LCBjaGFpbkNvZGUgfTogSGRLZXlwYWlyLCBpbmRleDogbnVtYmVyKTogSGRLZXlwYWlyIHtcbiAgICBjb25zdCBpbmRleEJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSg0KTtcbiAgICBpbmRleEJ1ZmZlci53cml0ZVVJbnQzMkJFKGluZGV4LCAwKTtcbiAgICBjb25zdCBkYXRhID0gQnVmZmVyLmNvbmNhdChbQnVmZmVyLmFsbG9jKDEsIDApLCBrZXksIGluZGV4QnVmZmVyXSk7XG4gICAgY29uc3QgSSA9IGNyZWF0ZUhtYWMoJ3NoYTUxMicsIGNoYWluQ29kZSkudXBkYXRlKGRhdGEpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IElMID0gSS5zbGljZSgwLCAzMik7XG4gICAgY29uc3QgSVIgPSBJLnNsaWNlKDMyKTtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiBJTCxcbiAgICAgIGNoYWluQ29kZTogSVIsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlcGxhY2VEZXJpdmUgPSAodmFsOiBzdHJpbmcpOiBudW1iZXIgPT4gcGFyc2VJbnQodmFsLnJlcGxhY2UoXCInXCIsICcnKSwgMTApO1xuICBwcml2YXRlIHN0YXRpYyBpc1ZhbGlkUGF0aChwYXRoOiBzdHJpbmcpIHtcbiAgICBpZiAoIUVkMjU1MTlLZXlEZXJpdmVyLlBBVEhfUkVHRVgudGVzdChwYXRoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gIXBhdGguc3BsaXQoJy8nKS5zbGljZSgxKS5tYXAodGhpcy5yZXBsYWNlRGVyaXZlKS5zb21lKGlzTmFOKTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo/account-lib",
3
- "version": "2.18.0-rc.1",
3
+ "version": "2.18.0-rc.5",
4
4
  "description": "BitGo's account library functions",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -37,9 +37,9 @@
37
37
  "node": ">=14 <17"
38
38
  },
39
39
  "dependencies": {
40
- "@bitgo/blake2b": "^3.0.1",
40
+ "@bitgo/blake2b": "^3.0.2-rc.0",
41
41
  "@bitgo/bls": "^0.1.0",
42
- "@bitgo/statics": "^6.16.0-rc.0",
42
+ "@bitgo/statics": "^6.16.0-rc.4",
43
43
  "@celo/contractkit": "^1.2.4",
44
44
  "@ethereumjs/common": "^2.4.0",
45
45
  "@ethereumjs/tx": "^3.3.0",
@@ -62,6 +62,7 @@
62
62
  "bs58": "^4.0.1",
63
63
  "bs58check": "^2.1.2",
64
64
  "casper-client-sdk": "1.0.39",
65
+ "create-hmac": "^1.1.7",
65
66
  "elliptic": "^6.5.2",
66
67
  "ethereumjs-abi": "^0.6.5",
67
68
  "ethereumjs-util": "6.2.1",
@@ -70,6 +71,7 @@
70
71
  "hi-base32": "^0.5.1",
71
72
  "joi": "^17.4.0",
72
73
  "libsodium-wrappers": "^0.7.6",
74
+ "libsodium-wrappers-sumo": "^0.7.9",
73
75
  "lodash": "^4.17.15",
74
76
  "long": "^4.0.0",
75
77
  "protobufjs": "^6.8.9",
@@ -119,5 +121,5 @@
119
121
  "git add"
120
122
  ]
121
123
  },
122
- "gitHead": "dae6887f23d9785f6a503037aa2cb616af9209bb"
124
+ "gitHead": "2bb1fd0b94708d3fbcb373a842420934f6ae0ee1"
123
125
  }