@bitgo/account-lib 2.19.0-rc.16 → 2.19.0-rc.20

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 (37) hide show
  1. package/dist/browser/bitgo-account-lib.js +1 -1
  2. package/dist/package.json +7 -7
  3. package/dist/src/coin/near/constants.d.ts +2 -0
  4. package/dist/src/coin/near/constants.d.ts.map +1 -1
  5. package/dist/src/coin/near/constants.js +3 -1
  6. package/dist/src/coin/near/stakingActivateBuilder.d.ts +1 -1
  7. package/dist/src/coin/near/stakingActivateBuilder.d.ts.map +1 -1
  8. package/dist/src/coin/near/stakingActivateBuilder.js +2 -2
  9. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts +32 -0
  10. package/dist/src/coin/near/stakingDeactivateBuilder.d.ts.map +1 -0
  11. package/dist/src/coin/near/stakingDeactivateBuilder.js +158 -0
  12. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts +32 -0
  13. package/dist/src/coin/near/stakingWithdrawBuilder.d.ts.map +1 -0
  14. package/dist/src/coin/near/stakingWithdrawBuilder.js +158 -0
  15. package/dist/src/coin/near/transaction.d.ts +7 -0
  16. package/dist/src/coin/near/transaction.d.ts.map +1 -1
  17. package/dist/src/coin/near/transaction.js +50 -8
  18. package/dist/src/coin/near/transactionBuilderFactory.d.ts +4 -0
  19. package/dist/src/coin/near/transactionBuilderFactory.d.ts.map +1 -1
  20. package/dist/src/coin/near/transactionBuilderFactory.js +13 -1
  21. package/dist/src/mpc/curves.d.ts +28 -13
  22. package/dist/src/mpc/curves.d.ts.map +1 -1
  23. package/dist/src/mpc/curves.js +56 -59
  24. package/dist/src/mpc/hdTree.d.ts +24 -0
  25. package/dist/src/mpc/hdTree.d.ts.map +1 -0
  26. package/dist/src/mpc/hdTree.js +143 -0
  27. package/dist/src/mpc/shamir.d.ts +25 -6
  28. package/dist/src/mpc/shamir.d.ts.map +1 -1
  29. package/dist/src/mpc/shamir.js +41 -45
  30. package/dist/src/mpc/tss.d.ts +57 -28
  31. package/dist/src/mpc/tss.d.ts.map +1 -1
  32. package/dist/src/mpc/tss.js +260 -175
  33. package/dist/src/mpc/util.d.ts +7 -0
  34. package/dist/src/mpc/util.d.ts.map +1 -0
  35. package/dist/src/mpc/util.js +38 -0
  36. package/package.json +7 -7
  37. package/LICENSE +0 -191
@@ -0,0 +1,143 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.Ed25519BIP32 = void 0;
40
+ /**
41
+ * An interface for calculating a subkey in an HD key scheme.
42
+ */
43
+ var crypto_1 = require("crypto");
44
+ var curves_1 = require("./curves");
45
+ var util_1 = require("./util");
46
+ // 2^256
47
+ var base = BigInt('0x010000000000000000000000000000000000000000000000000000000000000000');
48
+ function deriveEd25519Helper(index, chaincode, pk, sk) {
49
+ if (index === void 0) { index = 0; }
50
+ var zmac = crypto_1.createHmac('sha512', util_1.bigIntToBufferBE(chaincode, 32).toString('latin1'));
51
+ var imac = crypto_1.createHmac('sha512', util_1.bigIntToBufferBE(chaincode, 32).toString('latin1'));
52
+ var seri = Buffer.alloc(4);
53
+ seri.writeUInt32LE(index, 0);
54
+ if (((index >>> 0) & 0x80000000) === 0) {
55
+ // Normal derivation:
56
+ // Z = HMAC-SHA512(Key = cpar, Data = 0x02 || serP(point(kpar)) || ser32(i)).
57
+ // I = HMAC-SHA512(Key = cpar, Data = 0x03 || serP(point(kpar)) || ser32(i)).
58
+ zmac.update('\x02');
59
+ zmac.update(util_1.bigIntToBufferLE(pk, 32));
60
+ zmac.update(seri);
61
+ imac.update('\x03');
62
+ imac.update(util_1.bigIntToBufferLE(pk, 32));
63
+ imac.update(seri);
64
+ }
65
+ else {
66
+ if (sk === undefined) {
67
+ throw new Error("Can't performed hardened derivation without private key");
68
+ }
69
+ // Hardened derivation:
70
+ // Z = HMAC-SHA512(Key = cpar, Data = 0x00 || ser256(left(kpar)) || ser32(i)).
71
+ // I = HMAC-SHA512(Key = cpar, Data = 0x01 || ser256(left(kpar)) || ser32(i)).
72
+ zmac.update('\x00');
73
+ zmac.update(util_1.bigIntToBufferLE(sk, 32));
74
+ zmac.update(seri);
75
+ imac.update('\x01');
76
+ imac.update(util_1.bigIntToBufferLE(sk, 32));
77
+ imac.update(seri);
78
+ }
79
+ return [zmac.digest(), imac.digest()];
80
+ }
81
+ var Ed25519BIP32 = /** @class */ (function () {
82
+ function Ed25519BIP32() {
83
+ }
84
+ Ed25519BIP32.initialize = function () {
85
+ return __awaiter(this, void 0, void 0, function () {
86
+ return __generator(this, function (_a) {
87
+ switch (_a.label) {
88
+ case 0:
89
+ if (!!Ed25519BIP32.initialized) return [3 /*break*/, 2];
90
+ return [4 /*yield*/, curves_1.Ed25519Curve.initialize()];
91
+ case 1:
92
+ _a.sent();
93
+ Ed25519BIP32.initialized = true;
94
+ _a.label = 2;
95
+ case 2: return [2 /*return*/];
96
+ }
97
+ });
98
+ });
99
+ };
100
+ Ed25519BIP32.prototype.publicDerive = function (keychain, path) {
101
+ var indices = path
102
+ .replace(/^m\//, '')
103
+ .split('/')
104
+ .map(function (index) { return parseInt(index, 10); });
105
+ function deriveIndex(acc, index) {
106
+ var pk = acc[0], chaincode = acc[1];
107
+ var _a = deriveEd25519Helper(index, chaincode, pk), zout = _a[0], iout = _a[1];
108
+ var zl = zout.slice(0, 32);
109
+ // left = kl + 8 * trunc28(zl)
110
+ var t = BigInt(8) * util_1.bigIntFromBufferLE(zl.slice(0, 28));
111
+ var left = Ed25519BIP32.curve.pointAdd(pk, Ed25519BIP32.curve.basePointMult(t));
112
+ return [left, util_1.bigIntFromBufferBE(iout.slice(32))];
113
+ }
114
+ var subkey = indices.reduce(deriveIndex, deriveIndex([keychain.pk, keychain.chaincode], indices.shift()));
115
+ return { pk: subkey[0], chaincode: subkey[1] };
116
+ };
117
+ Ed25519BIP32.prototype.privateDerive = function (keychain, path) {
118
+ var indices = path
119
+ .replace(/^m\//, '')
120
+ .split('/')
121
+ .map(function (index) { return parseInt(index, 10); });
122
+ function deriveIndex(acc, index) {
123
+ var pk = acc[0], sk = acc[1], prefix = acc[2], chaincode = acc[3];
124
+ var _a = deriveEd25519Helper(index, chaincode, pk, sk), zout = _a[0], iout = _a[1];
125
+ var zl = zout.slice(0, 32);
126
+ var zr = zout.slice(32);
127
+ // left = kl + 8 * trunc28(zl)
128
+ var t = BigInt(8) * util_1.bigIntFromBufferLE(zl.slice(0, 28));
129
+ var left_pk = Ed25519BIP32.curve.pointAdd(pk, Ed25519BIP32.curve.basePointMult(t));
130
+ var left_sk = Ed25519BIP32.curve.scalarAdd(sk, t);
131
+ // right = zr + kr
132
+ var right = (prefix + util_1.bigIntFromBufferBE(zr)) % base;
133
+ return [left_pk, left_sk, right, util_1.bigIntFromBufferBE(iout.slice(32))];
134
+ }
135
+ var _a = indices.reduce(deriveIndex, deriveIndex([keychain.pk, keychain.sk, keychain.prefix, keychain.chaincode], indices.shift())), pk = _a[0], sk = _a[1], prefix = _a[2], chaincode = _a[3];
136
+ return { pk: pk, sk: sk, prefix: prefix, chaincode: chaincode };
137
+ };
138
+ Ed25519BIP32.curve = new curves_1.Ed25519Curve();
139
+ Ed25519BIP32.initialized = false;
140
+ return Ed25519BIP32;
141
+ }());
142
+ exports.Ed25519BIP32 = Ed25519BIP32;
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGRUcmVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21wYy9oZFRyZWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCxpQ0FBb0M7QUFDcEMsbUNBQXdDO0FBQ3hDLCtCQUFvRztBQUVwRyxRQUFRO0FBQ1IsSUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLHNFQUFzRSxDQUFDLENBQUM7QUFzQjVGLFNBQVMsbUJBQW1CLENBQUMsS0FBNkIsRUFBRSxTQUFpQixFQUFFLEVBQVUsRUFBRSxFQUFXO0lBQXpFLHNCQUFBLEVBQUEsU0FBNkI7SUFDeEQsSUFBTSxJQUFJLEdBQUcsbUJBQVUsQ0FBQyxRQUFRLEVBQUUsdUJBQWdCLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLElBQU0sSUFBSSxHQUFHLG1CQUFVLENBQUMsUUFBUSxFQUFFLHVCQUFnQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN0RixJQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdEMscUJBQXFCO1FBQ3JCLDZFQUE2RTtRQUM3RSw2RUFBNkU7UUFDN0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FB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QUFZLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLElBQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwRCxrQkFBa0I7WUFDbEIsSUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcseUJBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDdkQsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLHlCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDSyxJQUFBLEtBQThCLE9BQU8sQ0FBQyxNQUFNLENBQ2hELFdBQVcsRUFDWCxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQzlGLEVBSE0sRUFBRSxRQUFBLEVBQUUsRUFBRSxRQUFBLEVBQUUsTUFBTSxRQUFBLEVBQUUsU0FBUyxRQUcvQixDQUFDO1FBQ0YsT0FBTyxFQUFFLEVBQUUsSUFBQSxFQUFFLEVBQUUsSUFBQSxFQUFFLE1BQU0sUUFBQSxFQUFFLFNBQVMsV0FBQSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQW5ETSxrQkFBSyxHQUFpQixJQUFJLHFCQUFZLEVBQUUsQ0FBQztJQUN6Qyx3QkFBVyxHQUFHLEtBQUssQ0FBQztJQW1EN0IsbUJBQUM7Q0FBQSxBQXJERCxJQXFEQztBQXJEWSxvQ0FBWSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQW4gaW50ZXJmYWNlIGZvciBjYWxjdWxhdGluZyBhIHN1YmtleSBpbiBhbiBIRCBrZXkgc2NoZW1lLlxuICovXG5pbXBvcnQgeyBjcmVhdGVIbWFjIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IEVkMjU1MTlDdXJ2ZSB9IGZyb20gJy4vY3VydmVzJztcbmltcG9ydCB7IGJpZ0ludEZyb21CdWZmZXJCRSwgYmlnSW50VG9CdWZmZXJCRSwgYmlnSW50RnJvbUJ1ZmZlckxFLCBiaWdJbnRUb0J1ZmZlckxFIH0gZnJvbSAnLi91dGlsJztcblxuLy8gMl4yNTZcbmNvbnN0IGJhc2UgPSBCaWdJbnQoJzB4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG5cbmludGVyZmFjZSBQcml2YXRlS2V5Y2hhaW4ge1xuICBwazogYmlnaW50O1xuICBzazogYmlnaW50O1xuICBwcmVmaXg6IGJpZ2ludDtcbiAgY2hhaW5jb2RlOiBiaWdpbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Y2hhaW4ge1xuICBwazogYmlnaW50O1xuICBjaGFpbmNvZGU6IGJpZ2ludDtcbn1cblxuaW50ZXJmYWNlIEhEVHJlZSB7XG4gIHB1YmxpY0Rlcml2ZShrZXljaGFpbjogUHVibGljS2V5Y2hhaW4sIHBhdGg6IHN0cmluZyk6IFB1YmxpY0tleWNoYWluO1xuXG4gIHByaXZhdGVEZXJpdmUoa2V5Y2hhaW46IFByaXZhdGVLZXljaGFpbiwgcGF0aDogc3RyaW5nKTogUHJpdmF0ZUtleWNoYWluO1xufVxuXG5leHBvcnQgZGVmYXVsdCBIRFRyZWU7XG5cbmZ1bmN0aW9uIGRlcml2ZUVkMjU1MTlIZWxwZXIoaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCA9IDAsIGNoYWluY29kZTogYmlnaW50LCBwazogYmlnaW50LCBzaz86IGJpZ2ludCk6IEJ1ZmZlcltdIHtcbiAgY29uc3Qgem1hYyA9IGNyZWF0ZUhtYWMoJ3NoYTUxMicsIGJpZ0ludFRvQnVmZmVyQkUoY2hhaW5jb2RlLCAzMikudG9TdHJpbmcoJ2xhdGluMScpKTtcbiAgY29uc3QgaW1hYyA9IGNyZWF0ZUhtYWMoJ3NoYTUxMicsIGJpZ0ludFRvQnVmZmVyQkUoY2hhaW5jb2RlLCAzMikudG9TdHJpbmcoJ2xhdGluMScpKTtcbiAgY29uc3Qgc2VyaSA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgc2VyaS53cml0ZVVJbnQzMkxFKGluZGV4LCAwKTtcbiAgaWYgKCgoaW5kZXggPj4+IDApICYgMHg4MDAwMDAwMCkgPT09IDApIHtcbiAgICAvLyBOb3JtYWwgZGVyaXZhdGlvbjpcbiAgICAvLyBaID0gSE1BQy1TSEE1MTIoS2V5ID0gY3BhciwgRGF0YSA9IDB4MDIgfHwgc2VyUChwb2ludChrcGFyKSkgfHwgc2VyMzIoaSkpLlxuICAgIC8vIEkgPSBITUFDLVNIQTUxMihLZXkgPSBjcGFyLCBEYXRhID0gMHgwMyB8fCBzZXJQKHBvaW50KGtwYXIpKSB8fCBzZXIzMihpKSkuXG4gICAgem1hYy51cGRhdGUoJ1xceDAyJyk7XG4gICAgem1hYy51cGRhdGUoYmlnSW50VG9CdWZmZXJMRShwaywgMzIpKTtcbiAgICB6bWFjLnVwZGF0ZShzZXJpKTtcbiAgICBpbWFjLnVwZGF0ZSgnXFx4MDMnKTtcbiAgICBpbWFjLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckxFKHBrLCAzMikpO1xuICAgIGltYWMudXBkYXRlKHNlcmkpO1xuICB9IGVsc2Uge1xuICAgIGlmIChzayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBwZXJmb3JtZWQgaGFyZGVuZWQgZGVyaXZhdGlvbiB3aXRob3V0IHByaXZhdGUga2V5XCIpO1xuICAgIH1cbiAgICAvLyBIYXJkZW5lZCBkZXJpdmF0aW9uOlxuICAgIC8vIFogPSBITUFDLVNIQTUxMihLZXkgPSBjcGFyLCBEYXRhID0gMHgwMCB8fCBzZXIyNTYobGVmdChrcGFyKSkgfHwgc2VyMzIoaSkpLlxuICAgIC8vIEkgPSBITUFDLVNIQTUxMihLZXkgPSBjcGFyLCBEYXRhID0gMHgwMSB8fCBzZXIyNTYobGVmdChrcGFyKSkgfHwgc2VyMzIoaSkpLlxuICAgIHptYWMudXBkYXRlKCdcXHgwMCcpO1xuICAgIHptYWMudXBkYXRlKGJpZ0ludFRvQnVmZmVyTEUoc2ssIDMyKSk7XG4gICAgem1hYy51cGRhdGUoc2VyaSk7XG4gICAgaW1hYy51cGRhdGUoJ1xceDAxJyk7XG4gICAgaW1hYy51cGRhdGUoYmlnSW50VG9CdWZmZXJMRShzaywgMzIpKTtcbiAgICBpbWFjLnVwZGF0ZShzZXJpKTtcbiAgfVxuICByZXR1cm4gW3ptYWMuZGlnZXN0KCksIGltYWMuZGlnZXN0KCldO1xufVxuXG5leHBvcnQgY2xhc3MgRWQyNTUxOUJJUDMyIHtcbiAgc3RhdGljIGN1cnZlOiBFZDI1NTE5Q3VydmUgPSBuZXcgRWQyNTUxOUN1cnZlKCk7XG4gIHN0YXRpYyBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHN0YXRpYyBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghRWQyNTUxOUJJUDMyLmluaXRpYWxpemVkKSB7XG4gICAgICBhd2FpdCBFZDI1NTE5Q3VydmUuaW5pdGlhbGl6ZSgpO1xuICAgICAgRWQyNTUxOUJJUDMyLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWNEZXJpdmUoa2V5Y2hhaW46IFB1YmxpY0tleWNoYWluLCBwYXRoOiBzdHJpbmcpOiBQdWJsaWNLZXljaGFpbiB7XG4gICAgY29uc3QgaW5kaWNlcyA9IHBhdGhcbiAgICAgIC5yZXBsYWNlKC9ebVxcLy8sICcnKVxuICAgICAgLnNwbGl0KCcvJylcbiAgICAgIC5tYXAoKGluZGV4KSA9PiBwYXJzZUludChpbmRleCwgMTApKTtcbiAgICBmdW5jdGlvbiBkZXJpdmVJbmRleChhY2M6IGJpZ2ludFtdLCBpbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkKTogYmlnaW50W10ge1xuICAgICAgY29uc3QgW3BrLCBjaGFpbmNvZGVdID0gYWNjO1xuICAgICAgY29uc3QgW3pvdXQsIGlvdXRdID0gZGVyaXZlRWQyNTUxOUhlbHBlcihpbmRleCwgY2hhaW5jb2RlLCBwayk7XG4gICAgICBjb25zdCB6bCA9IHpvdXQuc2xpY2UoMCwgMzIpO1xuICAgICAgLy8gbGVmdCA9IGtsICsgOCAqIHRydW5jMjgoemwpXG4gICAgICBjb25zdCB0ID0gQmlnSW50KDgpICogYmlnSW50RnJvbUJ1ZmZlckxFKHpsLnNsaWNlKDAsIDI4KSk7XG4gICAgICBjb25zdCBsZWZ0ID0gRWQyNTUxOUJJUDMyLmN1cnZlLnBvaW50QWRkKHBrLCBFZDI1NTE5QklQMzIuY3VydmUuYmFzZVBvaW50TXVsdCh0KSk7XG4gICAgICByZXR1cm4gW2xlZnQsIGJpZ0ludEZyb21CdWZmZXJCRShpb3V0LnNsaWNlKDMyKSldO1xuICAgIH1cbiAgICBjb25zdCBzdWJrZXkgPSBpbmRpY2VzLnJlZHVjZShkZXJpdmVJbmRleCwgZGVyaXZlSW5kZXgoW2tleWNoYWluLnBrLCBrZXljaGFpbi5jaGFpbmNvZGVdLCBpbmRpY2VzLnNoaWZ0KCkpKTtcbiAgICByZXR1cm4geyBwazogc3Via2V5WzBdLCBjaGFpbmNvZGU6IHN1YmtleVsxXSB9O1xuICB9XG5cbiAgcHJpdmF0ZURlcml2ZShrZXljaGFpbjogUHJpdmF0ZUtleWNoYWluLCBwYXRoOiBzdHJpbmcpOiBQcml2YXRlS2V5Y2hhaW4ge1xuICAgIGNvbnN0IGluZGljZXMgPSBwYXRoXG4gICAgICAucmVwbGFjZSgvXm1cXC8vLCAnJylcbiAgICAgIC5zcGxpdCgnLycpXG4gICAgICAubWFwKChpbmRleCkgPT4gcGFyc2VJbnQoaW5kZXgsIDEwKSk7XG4gICAgZnVuY3Rpb24gZGVyaXZlSW5kZXgoYWNjOiBiaWdpbnRbXSwgaW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJpZ2ludFtdIHtcbiAgICAgIGNvbnN0IFtwaywgc2ssIHByZWZpeCwgY2hhaW5jb2RlXSA9IGFjYztcbiAgICAgIGNvbnN0IFt6b3V0LCBpb3V0XSA9IGRlcml2ZUVkMjU1MTlIZWxwZXIoaW5kZXgsIGNoYWluY29kZSwgcGssIHNrKTtcbiAgICAgIGNvbnN0IHpsID0gem91dC5zbGljZSgwLCAzMik7XG4gICAgICBjb25zdCB6ciA9IHpvdXQuc2xpY2UoMzIpO1xuICAgICAgLy8gbGVmdCA9IGtsICsgOCAqIHRydW5jMjgoemwpXG4gICAgICBjb25zdCB0ID0gQmlnSW50KDgpICogYmlnSW50RnJvbUJ1ZmZlckxFKHpsLnNsaWNlKDAsIDI4KSk7XG4gICAgICBjb25zdCBsZWZ0X3BrID0gRWQyNTUxOUJJUDMyLmN1cnZlLnBvaW50QWRkKHBrLCBFZDI1NTE5QklQMzIuY3VydmUuYmFzZVBvaW50TXVsdCh0KSk7XG4gICAgICBjb25zdCBsZWZ0X3NrID0gRWQyNTUxOUJJUDMyLmN1cnZlLnNjYWxhckFkZChzaywgdCk7XG4gICAgICAvLyByaWdodCA9IHpyICsga3JcbiAgICAgIGNvbnN0IHJpZ2h0ID0gKHByZWZpeCArIGJpZ0ludEZyb21CdWZmZXJCRSh6cikpICUgYmFzZTtcbiAgICAgIHJldHVybiBbbGVmdF9waywgbGVmdF9zaywgcmlnaHQsIGJpZ0ludEZyb21CdWZmZXJCRShpb3V0LnNsaWNlKDMyKSldO1xuICAgIH1cbiAgICBjb25zdCBbcGssIHNrLCBwcmVmaXgsIGNoYWluY29kZV0gPSBpbmRpY2VzLnJlZHVjZShcbiAgICAgIGRlcml2ZUluZGV4LFxuICAgICAgZGVyaXZlSW5kZXgoW2tleWNoYWluLnBrLCBrZXljaGFpbi5zaywga2V5Y2hhaW4ucHJlZml4LCBrZXljaGFpbi5jaGFpbmNvZGVdLCBpbmRpY2VzLnNoaWZ0KCkpLFxuICAgICk7XG4gICAgcmV0dXJuIHsgcGssIHNrLCBwcmVmaXgsIGNoYWluY29kZSB9O1xuICB9XG59XG4iXX0=
@@ -1,7 +1,26 @@
1
- /// <reference types="node" />
2
- declare const Shamir: (curve: any) => {
3
- split: (secret: Buffer, threshold: number, numShares: number, indices?: number[] | undefined) => Record<number, Buffer>;
4
- combine: (shares: Record<number, Buffer>) => Buffer;
5
- };
6
- export default Shamir;
1
+ import Curve from './curves';
2
+ export default class Shamir {
3
+ curve: Curve;
4
+ constructor(curve: Curve);
5
+ /**
6
+ * Perform Shamir sharing on the secret `secret` to the degree `threshold - 1` split `numShares`
7
+ * ways. The split secret requires `threshold` shares to be reconstructed.
8
+ *
9
+ * @param secret secret to split
10
+ * @param threshold share threshold required to reconstruct secret
11
+ * @param numShares total number of shares to split to split secret into
12
+ * @param indices
13
+ * @returns Dictionary of shares. Each key is an int in the range 1<=x<=numShares
14
+ * representing that share's free term.
15
+ */
16
+ split(secret: bigint, threshold: number, numShares: number, indices?: Array<number>): Record<number, bigint>;
17
+ /**
18
+ * Reconstitute a secret from a dictionary of shares. The number of shares must
19
+ * be equal to `t` to reconstitute the original secret.
20
+ *
21
+ * @param shares dictionary of shares. each key is the free term of the share
22
+ * @returns secret
23
+ */
24
+ combine(shares: Record<number, bigint>): bigint;
25
+ }
7
26
  //# sourceMappingURL=shamir.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shamir.d.ts","sourceRoot":"","sources":["../../../src/mpc/shamir.ts"],"names":[],"mappings":";AAEA,QAAA,MAAM,MAAM,UAAW,GAAG;oBAad,MAAM,aACH,MAAM,aACN,MAAM,qCAEhB,OAAO,MAAM,EAAE,MAAM,CAAC;sBAsCA,OAAO,MAAM,EAAE,MAAM,CAAC,KAAG,MAAM;CAuCzD,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"shamir.d.ts","sourceRoot":"","sources":["../../../src/mpc/shamir.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,UAAU,CAAC;AAG7B,MAAM,CAAC,OAAO,OAAO,MAAM;IACzB,KAAK,EAAE,KAAK,CAAC;gBAED,KAAK,EAAE,KAAK;IAIxB;;;;;;;;;;OAUG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAiC5G;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;CA2BhD"}
@@ -1,7 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var assert = require('assert');
4
- var Shamir = function (curve) {
4
+ var crypto = require('crypto');
5
+ var util_1 = require("./util");
6
+ var Shamir = /** @class */ (function () {
7
+ function Shamir(curve) {
8
+ this.curve = curve;
9
+ }
5
10
  /**
6
11
  * Perform Shamir sharing on the secret `secret` to the degree `threshold - 1` split `numShares`
7
12
  * ways. The split secret requires `threshold` shares to be reconstructed.
@@ -13,32 +18,33 @@ var Shamir = function (curve) {
13
18
  * @returns Dictionary of shares. Each key is an int in the range 1<=x<=numShares
14
19
  * representing that share's free term.
15
20
  */
16
- var split = function (secret, threshold, numShares, indices) {
17
- if (indices === undefined) {
21
+ Shamir.prototype.split = function (secret, threshold, numShares, indices) {
22
+ var bigIndices;
23
+ if (indices) {
24
+ bigIndices = indices.map(function (i) { return BigInt(i); });
25
+ }
26
+ else {
18
27
  // make range(1, n + 1)
19
- indices = Array.from({ length: numShares }, function (_, i) { return i + 1; });
28
+ bigIndices = Array(numShares)
29
+ .fill(null)
30
+ .map(function (_, i) { return BigInt(i + 1); });
20
31
  }
21
32
  assert(threshold > 1);
22
33
  assert(threshold <= numShares);
23
34
  var coefs = [];
24
35
  for (var ind = 0; ind < threshold - 1; ind++) {
25
- var random_value = curve.scalarRandom();
26
- coefs.push(random_value);
36
+ var coeff = util_1.clamp(util_1.bigIntFromBufferLE(crypto.createHmac('sha256', ind.toString(10)).update(util_1.bigIntToBufferLE(secret, 32)).digest()));
37
+ coefs.push(coeff);
27
38
  }
28
39
  coefs.push(secret);
29
40
  var shares = {};
30
- for (var ind = 0; ind < indices.length; ind++) {
31
- var x = indices[ind];
32
- var x_buffer = Buffer.alloc(32);
33
- // TODO BG-40908 : converting internal representation to buffers
34
- x_buffer.writeUInt32LE(x, 0);
41
+ for (var ind = 0; ind < bigIndices.length; ind++) {
42
+ var x = bigIndices[ind];
35
43
  var partial = coefs[0];
36
44
  for (var other = 1; other < coefs.length; other++) {
37
- var scalarMult = curve.scalarMult(partial, x_buffer);
38
- var newAdd = curve.scalarAdd(coefs[other], scalarMult);
39
- partial = newAdd;
45
+ partial = this.curve.scalarAdd(coefs[other], this.curve.scalarMult(partial, x));
40
46
  }
41
- shares[x] = Buffer.from(partial);
47
+ shares[parseInt(x.toString(), 10)] = partial;
42
48
  }
43
49
  return shares;
44
50
  };
@@ -49,43 +55,33 @@ var Shamir = function (curve) {
49
55
  * @param shares dictionary of shares. each key is the free term of the share
50
56
  * @returns secret
51
57
  */
52
- var combine = function (shares) {
53
- var s = Buffer.alloc(32);
54
- for (var xi in shares) {
55
- var yi = shares[xi];
56
- var xi_buffer = Buffer.alloc(32);
57
- var num_buffer = Buffer.alloc(32);
58
- var denum_buffer = Buffer.alloc(32);
59
- xi_buffer.writeUInt32LE(parseInt(xi, 10), 0);
60
- num_buffer.writeUInt32LE(1, 0);
61
- denum_buffer.writeUInt32LE(1, 0);
62
- for (var xj in shares) {
63
- var xj_buffer = Buffer.alloc(32);
64
- xj_buffer.writeUInt32LE(parseInt(xj, 10), 0);
58
+ Shamir.prototype.combine = function (shares) {
59
+ var s = BigInt(0);
60
+ for (var i in shares) {
61
+ var yi = shares[i];
62
+ var xi = BigInt(i);
63
+ var num = BigInt(1);
64
+ var denum = BigInt(1);
65
+ for (var j in shares) {
66
+ var xj = BigInt(j);
65
67
  if (xi !== xj) {
66
- num_buffer = curve.scalarMult(num_buffer, xj_buffer);
68
+ num = this.curve.scalarMult(num, xj);
67
69
  }
68
70
  }
69
- num_buffer = Buffer.from(num_buffer);
70
- for (var xj in shares) {
71
- var xj_buffer = Buffer.alloc(32);
72
- xj_buffer.writeUInt32LE(parseInt(xj, 10), 0);
71
+ for (var j in shares) {
72
+ var xj = BigInt(j);
73
73
  if (xi !== xj) {
74
- denum_buffer = curve.scalarMult(denum_buffer, curve.scalarSub(xj_buffer, xi_buffer));
74
+ denum = this.curve.scalarMult(denum, this.curve.scalarSub(xj, xi));
75
75
  }
76
76
  }
77
- denum_buffer = Buffer.from(denum_buffer);
78
- var inverted = curve.scalarInvert(denum_buffer);
79
- var innerMultiplied = curve.scalarMult(num_buffer, inverted);
80
- var multiplied = curve.scalarMult(innerMultiplied, yi);
81
- s = curve.scalarAdd(multiplied, s);
77
+ var inverted = this.curve.scalarInvert(denum);
78
+ var innerMultiplied = this.curve.scalarMult(num, inverted);
79
+ var multiplied = this.curve.scalarMult(innerMultiplied, yi);
80
+ s = this.curve.scalarAdd(multiplied, s);
82
81
  }
83
82
  return s;
84
83
  };
85
- return {
86
- split: split,
87
- combine: combine,
88
- };
89
- };
84
+ return Shamir;
85
+ }());
90
86
  exports.default = Shamir;
91
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhbWlyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21wYy9zaGFtaXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFakMsSUFBTSxNQUFNLEdBQUcsVUFBQyxLQUFVO0lBQ3hCOzs7Ozs7Ozs7O09BVUc7SUFDSCxJQUFNLEtBQUssR0FBRyxVQUNaLE1BQWMsRUFDZCxTQUFpQixFQUNqQixTQUFpQixFQUNqQixPQUF1QjtRQUV2QixJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDekIsdUJBQXVCO1lBQ3ZCLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLFVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSyxPQUFBLENBQUMsR0FBRyxDQUFDLEVBQUwsQ0FBSyxDQUFDLENBQUM7U0FDOUQ7UUFDRCxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLENBQUM7UUFDL0IsSUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBQzNCLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzVDLElBQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuQixJQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO1FBQzFDLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzdD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QU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbEQsSUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0QsSUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekQsQ0FBQyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDLENBQUM7SUFFRixPQUFPO1FBQ0wsS0FBSyxPQUFBO1FBQ0wsT0FBTyxTQUFBO0tBQ1IsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGtCQUFlLE1BQU0sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xuXG5jb25zdCBTaGFtaXIgPSAoY3VydmU6IGFueSkgPT4ge1xuICAvKipcbiAgICogUGVyZm9ybSBTaGFtaXIgc2hhcmluZyBvbiB0aGUgc2VjcmV0IGBzZWNyZXRgIHRvIHRoZSBkZWdyZWUgYHRocmVzaG9sZCAtIDFgIHNwbGl0IGBudW1TaGFyZXNgXG4gICAqIHdheXMuIFRoZSBzcGxpdCBzZWNyZXQgcmVxdWlyZXMgYHRocmVzaG9sZGAgc2hhcmVzIHRvIGJlIHJlY29uc3RydWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzZWNyZXQgc2VjcmV0IHRvIHNwbGl0XG4gICAqIEBwYXJhbSB0aHJlc2hvbGQgc2hhcmUgdGhyZXNob2xkIHJlcXVpcmVkIHRvIHJlY29uc3RydWN0IHNlY3JldFxuICAgKiBAcGFyYW0gbnVtU2hhcmVzIHRvdGFsIG51bWJlciBvZiBzaGFyZXMgdG8gc3BsaXQgdG8gc3BsaXQgc2VjcmV0IGludG9cbiAgICogQHBhcmFtIGluZGljZXNcbiAgICogQHJldHVybnMgRGljdGlvbmFyeSBvZiBzaGFyZXMuIEVhY2gga2V5IGlzIGFuIGludCBpbiB0aGUgcmFuZ2UgMTw9eDw9bnVtU2hhcmVzXG4gICAqIHJlcHJlc2VudGluZyB0aGF0IHNoYXJlJ3MgZnJlZSB0ZXJtLlxuICAgKi9cbiAgY29uc3Qgc3BsaXQgPSAoXG4gICAgc2VjcmV0OiBCdWZmZXIsXG4gICAgdGhyZXNob2xkOiBudW1iZXIsXG4gICAgbnVtU2hhcmVzOiBudW1iZXIsXG4gICAgaW5kaWNlcz86IEFycmF5PG51bWJlcj4sXG4gICk6IFJlY29yZDxudW1iZXIsIEJ1ZmZlcj4gPT4ge1xuICAgIGlmIChpbmRpY2VzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIG1ha2UgcmFuZ2UoMSwgbiArIDEpXG4gICAgICBpbmRpY2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogbnVtU2hhcmVzIH0sIChfLCBpKSA9PiBpICsgMSk7XG4gICAgfVxuICAgIGFzc2VydCh0aHJlc2hvbGQgPiAxKTtcbiAgICBhc3NlcnQodGhyZXNob2xkIDw9IG51bVNoYXJlcyk7XG4gICAgY29uc3QgY29lZnM6IEJ1ZmZlcltdID0gW107XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhyZXNob2xkIC0gMTsgaW5kKyspIHtcbiAgICAgIGNvbnN0IHJhbmRvbV92YWx1ZSA9IGN1cnZlLnNjYWxhclJhbmRvbSgpO1xuICAgICAgY29lZnMucHVzaChyYW5kb21fdmFsdWUpO1xuICAgIH1cbiAgICBjb2Vmcy5wdXNoKHNlY3JldCk7XG5cbiAgICBjb25zdCBzaGFyZXM6IFJlY29yZDxudW1iZXIsIEJ1ZmZlcj4gPSB7fTtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBpbmRpY2VzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgIGNvbnN0IHggPSBpbmRpY2VzW2luZF07XG4gICAgICBjb25zdCB4X2J1ZmZlciA9IEJ1ZmZlci5hbGxvYygzMik7XG4gICAgICAvLyBUT0RPIEJHLTQwOTA4IDogY29udmVydGluZyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB0byBidWZmZXJzXG4gICAgICB4X2J1ZmZlci53cml0ZVVJbnQzMkxFKHgsIDApO1xuICAgICAgbGV0IHBhcnRpYWwgPSBjb2Vmc1swXTtcbiAgICAgIGZvciAobGV0IG90aGVyID0gMTsgb3RoZXIgPCBjb2Vmcy5sZW5ndGg7IG90aGVyKyspIHtcbiAgICAgICAgY29uc3Qgc2NhbGFyTXVsdCA9IGN1cnZlLnNjYWxhck11bHQocGFydGlhbCwgeF9idWZmZXIpO1xuICAgICAgICBjb25zdCBuZXdBZGQgPSBjdXJ2ZS5zY2FsYXJBZGQoY29lZnNbb3RoZXJdLCBzY2FsYXJNdWx0KTtcbiAgICAgICAgcGFydGlhbCA9IG5ld0FkZDtcbiAgICAgIH1cbiAgICAgIHNoYXJlc1t4XSA9IEJ1ZmZlci5mcm9tKHBhcnRpYWwpO1xuICAgIH1cbiAgICByZXR1cm4gc2hhcmVzO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZWNvbnN0aXR1dGUgYSBzZWNyZXQgZnJvbSBhIGRpY3Rpb25hcnkgb2Ygc2hhcmVzLiBUaGUgbnVtYmVyIG9mIHNoYXJlcyBtdXN0XG4gICAqIGJlIGVxdWFsIHRvIGB0YCB0byByZWNvbnN0aXR1dGUgdGhlIG9yaWdpbmFsIHNlY3JldC5cbiAgICpcbiAgICogQHBhcmFtIHNoYXJlcyBkaWN0aW9uYXJ5IG9mIHNoYXJlcy4gZWFjaCBrZXkgaXMgdGhlIGZyZWUgdGVybSBvZiB0aGUgc2hhcmVcbiAgICogQHJldHVybnMgc2VjcmV0XG4gICAqL1xuICBjb25zdCBjb21iaW5lID0gKHNoYXJlczogUmVjb3JkPG51bWJlciwgQnVmZmVyPik6IEJ1ZmZlciA9PiB7XG4gICAgbGV0IHMgPSBCdWZmZXIuYWxsb2MoMzIpO1xuICAgIGZvciAoY29uc3QgeGkgaW4gc2hhcmVzKSB7XG4gICAgICBjb25zdCB5aSA9IHNoYXJlc1t4aV07XG4gICAgICBjb25zdCB4aV9idWZmZXIgPSBCdWZmZXIuYWxsb2MoMzIpO1xuICAgICAgbGV0IG51bV9idWZmZXIgPSBCdWZmZXIuYWxsb2MoMzIpO1xuICAgICAgbGV0IGRlbnVtX2J1ZmZlciA9IEJ1ZmZlci5hbGxvYygzMik7XG4gICAgICB4aV9idWZmZXIud3JpdGVVSW50MzJMRShwYXJzZUludCh4aSwgMTApLCAwKTtcbiAgICAgIG51bV9idWZmZXIud3JpdGVVSW50MzJMRSgxLCAwKTtcbiAgICAgIGRlbnVtX2J1ZmZlci53cml0ZVVJbnQzMkxFKDEsIDApO1xuXG4gICAgICBmb3IgKGNvbnN0IHhqIGluIHNoYXJlcykge1xuICAgICAgICBjb25zdCB4al9idWZmZXIgPSBCdWZmZXIuYWxsb2MoMzIpO1xuICAgICAgICB4al9idWZmZXIud3JpdGVVSW50MzJMRShwYXJzZUludCh4aiwgMTApLCAwKTtcbiAgICAgICAgaWYgKHhpICE9PSB4aikge1xuICAgICAgICAgIG51bV9idWZmZXIgPSBjdXJ2ZS5zY2FsYXJNdWx0KG51bV9idWZmZXIsIHhqX2J1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG51bV9idWZmZXIgPSBCdWZmZXIuZnJvbShudW1fYnVmZmVyKTtcbiAgICAgIGZvciAoY29uc3QgeGogaW4gc2hhcmVzKSB7XG4gICAgICAgIGNvbnN0IHhqX2J1ZmZlciA9IEJ1ZmZlci5hbGxvYygzMik7XG4gICAgICAgIHhqX2J1ZmZlci53cml0ZVVJbnQzMkxFKHBhcnNlSW50KHhqLCAxMCksIDApO1xuICAgICAgICBpZiAoeGkgIT09IHhqKSB7XG4gICAgICAgICAgZGVudW1fYnVmZmVyID0gY3VydmUuc2NhbGFyTXVsdChkZW51bV9idWZmZXIsIGN1cnZlLnNjYWxhclN1Yih4al9idWZmZXIsIHhpX2J1ZmZlcikpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZW51bV9idWZmZXIgPSBCdWZmZXIuZnJvbShkZW51bV9idWZmZXIpO1xuICAgICAgY29uc3QgaW52ZXJ0ZWQgPSBjdXJ2ZS5zY2FsYXJJbnZlcnQoZGVudW1fYnVmZmVyKTtcbiAgICAgIGNvbnN0IGlubmVyTXVsdGlwbGllZCA9IGN1cnZlLnNjYWxhck11bHQobnVtX2J1ZmZlciwgaW52ZXJ0ZWQpO1xuICAgICAgY29uc3QgbXVsdGlwbGllZCA9IGN1cnZlLnNjYWxhck11bHQoaW5uZXJNdWx0aXBsaWVkLCB5aSk7XG4gICAgICBzID0gY3VydmUuc2NhbGFyQWRkKG11bHRpcGxpZWQsIHMpO1xuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHNwbGl0LFxuICAgIGNvbWJpbmUsXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTaGFtaXI7XG4iXX0=
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhbWlyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21wYy9zaGFtaXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRWpDLCtCQUFxRTtBQUVyRTtJQUdFLGdCQUFZLEtBQVk7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxzQkFBSyxHQUFMLFVBQU0sTUFBYyxFQUFFLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxPQUF1QjtRQUNqRixJQUFJLFVBQXlCLENBQUM7UUFDOUIsSUFBSSxPQUFPLEVBQUU7WUFDWCxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBVCxDQUFTLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0wsdUJBQXVCO1lBQ3ZCLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO2lCQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDO2lCQUNWLEdBQUcsQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDLElBQUssT0FBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFiLENBQWEsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLElBQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM1QyxJQUFNLEtBQUss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QUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDSCxhQUFDO0FBQUQsQ0FBQyxBQXJGRCxJQXFGQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5pbXBvcnQgQ3VydmUgZnJvbSAnLi9jdXJ2ZXMnO1xuaW1wb3J0IHsgYmlnSW50RnJvbUJ1ZmZlckxFLCBiaWdJbnRUb0J1ZmZlckxFLCBjbGFtcCB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYW1pciB7XG4gIGN1cnZlOiBDdXJ2ZTtcblxuICBjb25zdHJ1Y3RvcihjdXJ2ZTogQ3VydmUpIHtcbiAgICB0aGlzLmN1cnZlID0gY3VydmU7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBTaGFtaXIgc2hhcmluZyBvbiB0aGUgc2VjcmV0IGBzZWNyZXRgIHRvIHRoZSBkZWdyZWUgYHRocmVzaG9sZCAtIDFgIHNwbGl0IGBudW1TaGFyZXNgXG4gICAqIHdheXMuIFRoZSBzcGxpdCBzZWNyZXQgcmVxdWlyZXMgYHRocmVzaG9sZGAgc2hhcmVzIHRvIGJlIHJlY29uc3RydWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzZWNyZXQgc2VjcmV0IHRvIHNwbGl0XG4gICAqIEBwYXJhbSB0aHJlc2hvbGQgc2hhcmUgdGhyZXNob2xkIHJlcXVpcmVkIHRvIHJlY29uc3RydWN0IHNlY3JldFxuICAgKiBAcGFyYW0gbnVtU2hhcmVzIHRvdGFsIG51bWJlciBvZiBzaGFyZXMgdG8gc3BsaXQgdG8gc3BsaXQgc2VjcmV0IGludG9cbiAgICogQHBhcmFtIGluZGljZXNcbiAgICogQHJldHVybnMgRGljdGlvbmFyeSBvZiBzaGFyZXMuIEVhY2gga2V5IGlzIGFuIGludCBpbiB0aGUgcmFuZ2UgMTw9eDw9bnVtU2hhcmVzXG4gICAqIHJlcHJlc2VudGluZyB0aGF0IHNoYXJlJ3MgZnJlZSB0ZXJtLlxuICAgKi9cbiAgc3BsaXQoc2VjcmV0OiBiaWdpbnQsIHRocmVzaG9sZDogbnVtYmVyLCBudW1TaGFyZXM6IG51bWJlciwgaW5kaWNlcz86IEFycmF5PG51bWJlcj4pOiBSZWNvcmQ8bnVtYmVyLCBiaWdpbnQ+IHtcbiAgICBsZXQgYmlnSW5kaWNlczogQXJyYXk8YmlnaW50PjtcbiAgICBpZiAoaW5kaWNlcykge1xuICAgICAgYmlnSW5kaWNlcyA9IGluZGljZXMubWFwKChpKSA9PiBCaWdJbnQoaSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBtYWtlIHJhbmdlKDEsIG4gKyAxKVxuICAgICAgYmlnSW5kaWNlcyA9IEFycmF5KG51bVNoYXJlcylcbiAgICAgICAgLmZpbGwobnVsbClcbiAgICAgICAgLm1hcCgoXywgaSkgPT4gQmlnSW50KGkgKyAxKSk7XG4gICAgfVxuICAgIGFzc2VydCh0aHJlc2hvbGQgPiAxKTtcbiAgICBhc3NlcnQodGhyZXNob2xkIDw9IG51bVNoYXJlcyk7XG4gICAgY29uc3QgY29lZnM6IGJpZ2ludFtdID0gW107XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhyZXNob2xkIC0gMTsgaW5kKyspIHtcbiAgICAgIGNvbnN0IGNvZWZmID0gY2xhbXAoXG4gICAgICAgIGJpZ0ludEZyb21CdWZmZXJMRShjcnlwdG8uY3JlYXRlSG1hYygnc2hhMjU2JywgaW5kLnRvU3RyaW5nKDEwKSkudXBkYXRlKGJpZ0ludFRvQnVmZmVyTEUoc2VjcmV0LCAzMikpLmRpZ2VzdCgpKSxcbiAgICAgICk7XG4gICAgICBjb2Vmcy5wdXNoKGNvZWZmKTtcbiAgICB9XG4gICAgY29lZnMucHVzaChzZWNyZXQpO1xuXG4gICAgY29uc3Qgc2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBiaWdpbnQ+ID0ge307XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYmlnSW5kaWNlcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICBjb25zdCB4ID0gYmlnSW5kaWNlc1tpbmRdO1xuICAgICAgbGV0IHBhcnRpYWwgPSBjb2Vmc1swXTtcbiAgICAgIGZvciAobGV0IG90aGVyID0gMTsgb3RoZXIgPCBjb2Vmcy5sZW5ndGg7IG90aGVyKyspIHtcbiAgICAgICAgcGFydGlhbCA9IHRoaXMuY3VydmUuc2NhbGFyQWRkKGNvZWZzW290aGVyXSwgdGhpcy5jdXJ2ZS5zY2FsYXJNdWx0KHBhcnRpYWwsIHgpKTtcbiAgICAgIH1cbiAgICAgIHNoYXJlc1twYXJzZUludCh4LnRvU3RyaW5nKCksIDEwKV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgICByZXR1cm4gc2hhcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uc3RpdHV0ZSBhIHNlY3JldCBmcm9tIGEgZGljdGlvbmFyeSBvZiBzaGFyZXMuIFRoZSBudW1iZXIgb2Ygc2hhcmVzIG11c3RcbiAgICogYmUgZXF1YWwgdG8gYHRgIHRvIHJlY29uc3RpdHV0ZSB0aGUgb3JpZ2luYWwgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0gc2hhcmVzIGRpY3Rpb25hcnkgb2Ygc2hhcmVzLiBlYWNoIGtleSBpcyB0aGUgZnJlZSB0ZXJtIG9mIHRoZSBzaGFyZVxuICAgKiBAcmV0dXJucyBzZWNyZXRcbiAgICovXG4gIGNvbWJpbmUoc2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBiaWdpbnQ+KTogYmlnaW50IHtcbiAgICBsZXQgcyA9IEJpZ0ludCgwKTtcbiAgICBmb3IgKGNvbnN0IGkgaW4gc2hhcmVzKSB7XG4gICAgICBjb25zdCB5aSA9IHNoYXJlc1tpXTtcbiAgICAgIGNvbnN0IHhpID0gQmlnSW50KGkpO1xuICAgICAgbGV0IG51bSA9IEJpZ0ludCgxKTtcbiAgICAgIGxldCBkZW51bSA9IEJpZ0ludCgxKTtcblxuICAgICAgZm9yIChjb25zdCBqIGluIHNoYXJlcykge1xuICAgICAgICBjb25zdCB4aiA9IEJpZ0ludChqKTtcbiAgICAgICAgaWYgKHhpICE9PSB4aikge1xuICAgICAgICAgIG51bSA9IHRoaXMuY3VydmUuc2NhbGFyTXVsdChudW0sIHhqKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBqIGluIHNoYXJlcykge1xuICAgICAgICBjb25zdCB4aiA9IEJpZ0ludChqKTtcbiAgICAgICAgaWYgKHhpICE9PSB4aikge1xuICAgICAgICAgIGRlbnVtID0gdGhpcy5jdXJ2ZS5zY2FsYXJNdWx0KGRlbnVtLCB0aGlzLmN1cnZlLnNjYWxhclN1Yih4aiwgeGkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgaW52ZXJ0ZWQgPSB0aGlzLmN1cnZlLnNjYWxhckludmVydChkZW51bSk7XG4gICAgICBjb25zdCBpbm5lck11bHRpcGxpZWQgPSB0aGlzLmN1cnZlLnNjYWxhck11bHQobnVtLCBpbnZlcnRlZCk7XG4gICAgICBjb25zdCBtdWx0aXBsaWVkID0gdGhpcy5jdXJ2ZS5zY2FsYXJNdWx0KGlubmVyTXVsdGlwbGllZCwgeWkpO1xuICAgICAgcyA9IHRoaXMuY3VydmUuc2NhbGFyQWRkKG11bHRpcGxpZWQsIHMpO1xuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxufVxuIl19
@@ -1,53 +1,67 @@
1
1
  /// <reference types="node" />
2
- interface UShare {
3
- i: string;
2
+ import { Ed25519Curve } from './curves';
3
+ import Shamir from './shamir';
4
+ import HDTree from './hdTree';
5
+ export interface UShare {
6
+ i: number;
7
+ t: number;
8
+ n: number;
4
9
  y: string;
5
- u: string;
6
- prefix: string;
10
+ seed: string;
11
+ chaincode: string;
7
12
  }
8
- interface YShare {
9
- i: string;
10
- j: string;
13
+ export interface YShare {
14
+ i: number;
15
+ j: number;
11
16
  y: string;
12
17
  u: string;
18
+ chaincode: string;
13
19
  }
14
20
  export interface KeyShare {
15
21
  uShare: UShare;
16
- yShares: Record<string, YShare>;
22
+ yShares: Record<number, YShare>;
17
23
  }
18
24
  export interface PShare {
19
- i: string;
20
- x: string;
25
+ i: number;
26
+ t: number;
27
+ n: number;
21
28
  y: string;
29
+ u: string;
22
30
  prefix: string;
31
+ chaincode: string;
23
32
  }
24
33
  export interface JShare {
25
- i: string;
26
- j: string;
34
+ i: number;
35
+ j: number;
27
36
  }
28
37
  interface KeyCombine {
29
38
  pShare: PShare;
30
- jShares: Record<string, JShare>;
39
+ jShares: Record<number, JShare>;
40
+ }
41
+ interface SubkeyShare {
42
+ pShare: PShare;
43
+ yShares: Record<number, YShare>;
31
44
  }
32
45
  export interface XShare {
33
- i: string;
46
+ i: number;
34
47
  y: string;
35
- x: string;
48
+ u: string;
36
49
  r: string;
37
50
  R: string;
38
51
  }
39
52
  export interface RShare {
40
- i: string;
41
- j: string;
53
+ i: number;
54
+ j: number;
55
+ u: string;
42
56
  r: string;
43
57
  R: string;
44
58
  }
45
59
  export interface SignShare {
46
60
  xShare: XShare;
47
- rShares: Record<string, RShare>;
61
+ rShares: Record<number, RShare>;
48
62
  }
49
63
  export interface GShare {
50
- i: string;
64
+ i: number;
51
65
  y: string;
52
66
  gamma: string;
53
67
  R: string;
@@ -57,13 +71,28 @@ interface Signature {
57
71
  R: string;
58
72
  sigma: string;
59
73
  }
60
- declare const Eddsa: () => Promise<{
61
- keyShare: (index: number, threshold: number, numShares: number) => KeyShare;
62
- keyCombine: (uShare: UShare, distributedShares: YShare[]) => KeyCombine;
63
- signShare: (message: Buffer, pShare: PShare, jShares: JShare[]) => SignShare;
64
- sign: (message: Buffer, playerShare: XShare, distributedShares: RShare[]) => GShare;
65
- signCombine: (shares: GShare[]) => Signature;
66
- verify: (message: Buffer, signature: Signature) => Buffer;
67
- }>;
68
- export default Eddsa;
74
+ export default class Eddsa {
75
+ static curve: Ed25519Curve;
76
+ static shamir: Shamir;
77
+ static initialized: boolean;
78
+ static initialize(): Promise<void>;
79
+ hdTree?: HDTree;
80
+ constructor(hdTree?: HDTree);
81
+ keyShare(index: number, threshold: number, numShares: number): KeyShare;
82
+ keyCombine(uShare: UShare, yShares: YShare[]): KeyCombine;
83
+ /**
84
+ * Derives a child public key from common keychain
85
+ *
86
+ * @param commonKeychain - common keychain as a hex string
87
+ * @param path - bip32 path
88
+ * @return {string} public key as a hex string
89
+ */
90
+ deriveUnhardened(commonKeychain: string, path: string): string;
91
+ keyDerive(uShare: UShare, yShares: YShare[], path: string): SubkeyShare;
92
+ signShare(message: Buffer, pShare: PShare, jShares: JShare[]): SignShare;
93
+ sign(message: Buffer, playerShare: XShare, rShares: RShare[], yShares?: YShare[]): GShare;
94
+ signCombine(shares: GShare[]): Signature;
95
+ verify(message: Buffer, signature: Signature): Buffer;
96
+ }
97
+ export {};
69
98
  //# sourceMappingURL=tss.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tss.d.ts","sourceRoot":"","sources":["../../../src/mpc/tss.ts"],"names":[],"mappings":";AA8CA,UAAU,MAAM;IACd,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,MAAM;IACd,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;CACX;AAED,UAAU,SAAS;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,QAAA,MAAM,KAAK;sBAIgB,MAAM,aAAa,MAAM,aAAa,MAAM,KAAG,QAAQ;yBA8CpD,MAAM,qBAAqB,MAAM,EAAE,KAAG,UAAU;yBA6BhD,MAAM,UAAU,MAAM,WAAW,MAAM,EAAE,KAAG,SAAS;oBA4C1D,MAAM,eAAe,MAAM,qBAAqB,MAAM,EAAE,KAAG,MAAM;0BAyB3D,MAAM,EAAE,KAAG,SAAS;sBAqBxB,MAAM,aAAa,SAAS,KAAG,MAAM;EAW/D,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"tss.d.ts","sourceRoot":"","sources":["../../../src/mpc/tss.ts"],"names":[],"mappings":"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"}