@bitgo/account-lib 2.19.0-rc.16 → 2.19.0-rc.17
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.
- package/dist/browser/bitgo-account-lib.js +1 -1
- package/dist/package.json +3 -3
- package/dist/src/mpc/curves.d.ts +28 -13
- package/dist/src/mpc/curves.d.ts.map +1 -1
- package/dist/src/mpc/curves.js +56 -59
- package/dist/src/mpc/hdTree.d.ts +24 -0
- package/dist/src/mpc/hdTree.d.ts.map +1 -0
- package/dist/src/mpc/hdTree.js +143 -0
- package/dist/src/mpc/shamir.d.ts +25 -6
- package/dist/src/mpc/shamir.d.ts.map +1 -1
- package/dist/src/mpc/shamir.js +41 -45
- package/dist/src/mpc/tss.d.ts +48 -27
- package/dist/src/mpc/tss.d.ts.map +1 -1
- package/dist/src/mpc/tss.js +242 -175
- package/dist/src/mpc/util.d.ts +7 -0
- package/dist/src/mpc/util.d.ts.map +1 -0
- package/dist/src/mpc/util.js +38 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +3 -3
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo/account-lib",
|
|
3
|
-
"version": "2.19.0-rc.
|
|
3
|
+
"version": "2.19.0-rc.17",
|
|
4
4
|
"description": "BitGo's account library functions",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"@bitgo/blake2b": "^3.0.2",
|
|
40
40
|
"@bitgo/bls": "^0.1.0",
|
|
41
41
|
"@bitgo/bls-dkg": "^1.0.2-rc.0",
|
|
42
|
-
"@bitgo/statics": "^6.17.0-rc.
|
|
42
|
+
"@bitgo/statics": "^6.17.0-rc.12",
|
|
43
43
|
"@celo/contractkit": "^1.2.4",
|
|
44
44
|
"@ethereumjs/common": "^2.4.0",
|
|
45
45
|
"@ethereumjs/tx": "^3.3.0",
|
|
@@ -126,5 +126,5 @@
|
|
|
126
126
|
"publishConfig": {
|
|
127
127
|
"access": "public"
|
|
128
128
|
},
|
|
129
|
-
"gitHead": "
|
|
129
|
+
"gitHead": "6b683f66390c1805f4733a5a7667a8c822d798e0"
|
|
130
130
|
}
|
package/dist/src/mpc/curves.d.ts
CHANGED
|
@@ -1,14 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
interface Curve {
|
|
3
|
+
scalarRandom(): bigint;
|
|
4
|
+
scalarReduce(s: bigint): bigint;
|
|
5
|
+
scalarNegate(s: bigint): bigint;
|
|
6
|
+
scalarInvert(s: bigint): bigint;
|
|
7
|
+
scalarAdd(x: bigint, y: bigint): bigint;
|
|
8
|
+
scalarSub(x: bigint, y: bigint): bigint;
|
|
9
|
+
scalarMult(x: bigint, y: bigint): bigint;
|
|
10
|
+
basePointMult(n: bigint): bigint;
|
|
11
|
+
pointAdd(p: bigint, q: bigint): bigint;
|
|
12
|
+
verify(y: bigint, signedMessage: Buffer): Buffer;
|
|
13
|
+
}
|
|
14
|
+
export default Curve;
|
|
15
|
+
export declare class Ed25519Curve {
|
|
16
|
+
static initialized: boolean;
|
|
17
|
+
static initialize(): Promise<void>;
|
|
18
|
+
scalarRandom(): bigint;
|
|
19
|
+
scalarReduce(s: bigint): bigint;
|
|
20
|
+
scalarNegate(s: bigint): bigint;
|
|
21
|
+
scalarInvert(s: bigint): bigint;
|
|
22
|
+
scalarAdd(x: bigint, y: bigint): bigint;
|
|
23
|
+
scalarSub(x: bigint, y: bigint): bigint;
|
|
24
|
+
scalarMult(x: bigint, y: bigint): bigint;
|
|
25
|
+
basePointMult(n: bigint): bigint;
|
|
26
|
+
pointAdd(p: bigint, q: bigint): bigint;
|
|
27
|
+
verify(y: bigint, signedMessage: Buffer): Buffer;
|
|
28
|
+
}
|
|
14
29
|
//# sourceMappingURL=curves.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"curves.d.ts","sourceRoot":"","sources":["../../../src/mpc/curves.ts"],"names":[],"mappings":"AAIA,
|
|
1
|
+
{"version":3,"file":"curves.d.ts","sourceRoot":"","sources":["../../../src/mpc/curves.ts"],"names":[],"mappings":";AAIA,UAAU,KAAK;IACb,YAAY,IAAI,MAAM,CAAC;IACvB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;CAClD;AAED,eAAe,KAAK,CAAC;AAErB,qBAAa,YAAY;IACvB,MAAM,CAAC,WAAW,UAAS;WAEd,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxC,YAAY,IAAI,MAAM;IAMtB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI/B,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMvC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMvC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMxC,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAIhC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAMtC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM;CAGjD"}
|
package/dist/src/mpc/curves.js
CHANGED
|
@@ -36,64 +36,61 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.Ed25519Curve = void 0;
|
|
39
40
|
var sodium = require('libsodium-wrappers-sumo');
|
|
40
41
|
var crypto_1 = require("crypto");
|
|
41
|
-
|
|
42
|
-
var Ed25519Curve =
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
});
|
|
97
|
-
}); };
|
|
98
|
-
exports.default = Ed25519Curve;
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VydmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21wYy9jdXJ2ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUNsRCxpQ0FBMEQ7QUFFMUQsNkVBQTZFO0FBQzdFLElBQU0sWUFBWSxHQUFHOzs7OztZQUNuQixxREFBcUQ7WUFDckQscUJBQU0sTUFBTSxDQUFDLEtBQUssRUFBQTs7Z0JBRGxCLHFEQUFxRDtnQkFDckQsU0FBa0IsQ0FBQztnQkFFYixZQUFZLEdBQUc7b0JBQ25CLElBQU0sYUFBYSxHQUFHLG9CQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM1QyxPQUFPLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDakUsQ0FBQyxDQUFDO2dCQUVJLFlBQVksR0FBRyxVQUFDLENBQWE7b0JBQ2pDLE9BQU8sTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDLENBQUM7Z0JBRUksWUFBWSxHQUFHLFVBQUMsQ0FBYTtvQkFDakMsT0FBTyxNQUFNLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELENBQUMsQ0FBQztnQkFFSSxZQUFZLEdBQUcsVUFBQyxDQUFhO29CQUNqQyxPQUFPLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDO2dCQUVJLFNBQVMsR0FBRyxVQUFDLENBQWEsRUFBRSxDQUFhO29CQUM3QyxPQUFPLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELENBQUMsQ0FBQztnQkFFSSxTQUFTLEdBQUcsVUFBQyxDQUFhLEVBQUUsQ0FBYTtvQkFDN0MsT0FBTyxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDLENBQUM7Z0JBRUksVUFBVSxHQUFHLFVBQUMsQ0FBYSxFQUFFLENBQWE7b0JBQzlDLE9BQU8sTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDO2dCQUVJLGFBQWEsR0FBRyxVQUFDLENBQWE7b0JBQ2xDLE9BQU8sTUFBTSxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDLENBQUM7Z0JBRUksUUFBUSxHQUFHLFVBQUMsQ0FBYSxFQUFFLENBQWE7b0JBQzVDLE9BQU8sTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxDQUFDO2dCQUVJLE1BQU0sR0FBRyxVQUFDLENBQWEsRUFBRSxhQUF5QjtvQkFDdEQsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDLENBQUM7Z0JBRUYsc0JBQU87d0JBQ0wsWUFBWSxjQUFBO3dCQUNaLFlBQVksY0FBQTt3QkFDWixZQUFZLGNBQUE7d0JBQ1osWUFBWSxjQUFBO3dCQUNaLFNBQVMsV0FBQTt3QkFDVCxTQUFTLFdBQUE7d0JBQ1QsVUFBVSxZQUFBO3dCQUNWLGFBQWEsZUFBQTt3QkFDYixRQUFRLFVBQUE7d0JBQ1IsTUFBTSxRQUFBO3FCQUNQLEVBQUM7OztLQUNILENBQUM7QUFFRixrQkFBZSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBzb2RpdW0gPSByZXF1aXJlKCdsaWJzb2RpdW0td3JhcHBlcnMtc3VtbycpO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgYXMgY3J5cHRvUmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuY29uc3QgRWQyNTUxOUN1cnZlID0gYXN5bmMgKCkgPT4ge1xuICAvLyBzb2RpdW0gcmVxdWlyZXMgYXdhaXQgZm9yIHJlYWR5IHdpdGhpbiBibG9jayBzY29wZVxuICBhd2FpdCBzb2RpdW0ucmVhZHk7XG5cbiAgY29uc3Qgc2NhbGFyUmFuZG9tID0gKCk6IFVpbnQ4QXJyYXkgPT4ge1xuICAgIGNvbnN0IHJhbmRvbV9idWZmZXIgPSBjcnlwdG9SYW5kb21CeXRlcyg2NCk7XG4gICAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9yZWR1Y2UocmFuZG9tX2J1ZmZlcik7XG4gIH07XG5cbiAgY29uc3Qgc2NhbGFyUmVkdWNlID0gKHM6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5ID0+IHtcbiAgICByZXR1cm4gc29kaXVtLmNyeXB0b19jb3JlX2VkMjU1MTlfc2NhbGFyX3JlZHVjZShzKTtcbiAgfTtcblxuICBjb25zdCBzY2FsYXJOZWdhdGUgPSAoczogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgPT4ge1xuICAgIHJldHVybiBzb2RpdW0uY3J5cHRvX2NvcmVfZWQyNTUxOV9zY2FsYXJfbmVnYXRlKHMpO1xuICB9O1xuXG4gIGNvbnN0IHNjYWxhckludmVydCA9IChzOiBVaW50OEFycmF5KTogVWludDhBcnJheSA9PiB7XG4gICAgcmV0dXJuIHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9pbnZlcnQocyk7XG4gIH07XG5cbiAgY29uc3Qgc2NhbGFyQWRkID0gKHg6IFVpbnQ4QXJyYXksIHk6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5ID0+IHtcbiAgICByZXR1cm4gc29kaXVtLmNyeXB0b19jb3JlX2VkMjU1MTlfc2NhbGFyX2FkZCh4LCB5KTtcbiAgfTtcblxuICBjb25zdCBzY2FsYXJTdWIgPSAoeDogVWludDhBcnJheSwgeTogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgPT4ge1xuICAgIHJldHVybiBzb2RpdW0uY3J5cHRvX2NvcmVfZWQyNTUxOV9zY2FsYXJfc3ViKHgsIHkpO1xuICB9O1xuXG4gIGNvbnN0IHNjYWxhck11bHQgPSAoeDogVWludDhBcnJheSwgeTogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgPT4ge1xuICAgIHJldHVybiBzb2RpdW0uY3J5cHRvX2NvcmVfZWQyNTUxOV9zY2FsYXJfbXVsKHgsIHkpO1xuICB9O1xuXG4gIGNvbnN0IGJhc2VQb2ludE11bHQgPSAobjogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgPT4ge1xuICAgIHJldHVybiBzb2RpdW0uY3J5cHRvX3NjYWxhcm11bHRfZWQyNTUxOV9iYXNlX25vY2xhbXAobik7XG4gIH07XG5cbiAgY29uc3QgcG9pbnRBZGQgPSAocDogVWludDhBcnJheSwgcTogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkgPT4ge1xuICAgIHJldHVybiBzb2RpdW0uY3J5cHRvX2NvcmVfZWQyNTUxOV9hZGQocCwgcSk7XG4gIH07XG5cbiAgY29uc3QgdmVyaWZ5ID0gKHk6IFVpbnQ4QXJyYXksIHNpZ25lZE1lc3NhZ2U6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5ID0+IHtcbiAgICByZXR1cm4gc29kaXVtLmNyeXB0b19zaWduX29wZW4oc2lnbmVkTWVzc2FnZSwgeSk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBzY2FsYXJSYW5kb20sXG4gICAgc2NhbGFyUmVkdWNlLFxuICAgIHNjYWxhck5lZ2F0ZSxcbiAgICBzY2FsYXJJbnZlcnQsXG4gICAgc2NhbGFyQWRkLFxuICAgIHNjYWxhclN1YixcbiAgICBzY2FsYXJNdWx0LFxuICAgIGJhc2VQb2ludE11bHQsXG4gICAgcG9pbnRBZGQsXG4gICAgdmVyaWZ5LFxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgRWQyNTUxOUN1cnZlO1xuIl19
|
|
42
|
+
var util_1 = require("./util");
|
|
43
|
+
var Ed25519Curve = /** @class */ (function () {
|
|
44
|
+
function Ed25519Curve() {
|
|
45
|
+
}
|
|
46
|
+
Ed25519Curve.initialize = function () {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
48
|
+
return __generator(this, function (_a) {
|
|
49
|
+
switch (_a.label) {
|
|
50
|
+
case 0:
|
|
51
|
+
if (!!Ed25519Curve.initialized) return [3 /*break*/, 2];
|
|
52
|
+
return [4 /*yield*/, sodium.ready];
|
|
53
|
+
case 1:
|
|
54
|
+
_a.sent();
|
|
55
|
+
Ed25519Curve.initialized = true;
|
|
56
|
+
_a.label = 2;
|
|
57
|
+
case 2: return [2 /*return*/];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
Ed25519Curve.prototype.scalarRandom = function () {
|
|
63
|
+
return util_1.bigIntFromBufferLE(Buffer.from(sodium.crypto_core_ed25519_scalar_reduce(util_1.bigIntFromBufferLE(crypto_1.randomBytes(64)))));
|
|
64
|
+
};
|
|
65
|
+
Ed25519Curve.prototype.scalarReduce = function (s) {
|
|
66
|
+
return util_1.bigIntFromBufferLE(Buffer.from(sodium.crypto_core_ed25519_scalar_reduce(util_1.bigIntToBufferLE(s, 64))));
|
|
67
|
+
};
|
|
68
|
+
Ed25519Curve.prototype.scalarNegate = function (s) {
|
|
69
|
+
return util_1.bigIntFromBufferLE(Buffer.from(sodium.crypto_core_ed25519_scalar_negate(util_1.bigIntToBufferLE(s, 32))));
|
|
70
|
+
};
|
|
71
|
+
Ed25519Curve.prototype.scalarInvert = function (s) {
|
|
72
|
+
return util_1.bigIntFromBufferLE(Buffer.from(sodium.crypto_core_ed25519_scalar_invert(util_1.bigIntToBufferLE(s, 32))));
|
|
73
|
+
};
|
|
74
|
+
Ed25519Curve.prototype.scalarAdd = function (x, y) {
|
|
75
|
+
return util_1.bigIntFromBufferLE(Buffer.from(sodium.crypto_core_ed25519_scalar_add(util_1.bigIntToBufferLE(x, 32), util_1.bigIntToBufferLE(y, 32))));
|
|
76
|
+
};
|
|
77
|
+
Ed25519Curve.prototype.scalarSub = function (x, y) {
|
|
78
|
+
return util_1.bigIntFromBufferLE(Buffer.from(sodium.crypto_core_ed25519_scalar_sub(util_1.bigIntToBufferLE(x, 32), util_1.bigIntToBufferLE(y, 32))));
|
|
79
|
+
};
|
|
80
|
+
Ed25519Curve.prototype.scalarMult = function (x, y) {
|
|
81
|
+
return util_1.bigIntFromBufferLE(Buffer.from(sodium.crypto_core_ed25519_scalar_mul(util_1.bigIntToBufferLE(x, 32), util_1.bigIntToBufferLE(y, 32))));
|
|
82
|
+
};
|
|
83
|
+
Ed25519Curve.prototype.basePointMult = function (n) {
|
|
84
|
+
return util_1.bigIntFromBufferLE(Buffer.from(sodium.crypto_scalarmult_ed25519_base_noclamp(util_1.bigIntToBufferLE(n, 32))));
|
|
85
|
+
};
|
|
86
|
+
Ed25519Curve.prototype.pointAdd = function (p, q) {
|
|
87
|
+
return util_1.bigIntFromBufferLE(Buffer.from(sodium.crypto_core_ed25519_add(util_1.bigIntToBufferLE(p, 32), util_1.bigIntToBufferLE(q, 32))));
|
|
88
|
+
};
|
|
89
|
+
Ed25519Curve.prototype.verify = function (y, signedMessage) {
|
|
90
|
+
return Buffer.from(sodium.crypto_sign_open(signedMessage, util_1.bigIntToBufferLE(y, 32)));
|
|
91
|
+
};
|
|
92
|
+
Ed25519Curve.initialized = false;
|
|
93
|
+
return Ed25519Curve;
|
|
94
|
+
}());
|
|
95
|
+
exports.Ed25519Curve = Ed25519Curve;
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VydmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21wYy9jdXJ2ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDbEQsaUNBQXFDO0FBQ3JDLCtCQUE4RDtBQWlCOUQ7SUFBQTtJQTJEQSxDQUFDO0lBeERjLHVCQUFVLEdBQXZCOzs7Ozs2QkFDTSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQXpCLHdCQUF5Qjt3QkFDM0IscUJBQU0sTUFBTSxDQUFDLEtBQUssRUFBQTs7d0JBQWxCLFNBQWtCLENBQUM7d0JBQ25CLFlBQVksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDOzs7Ozs7S0FFbkM7SUFFRCxtQ0FBWSxHQUFaO1FBQ0UsT0FBTyx5QkFBa0IsQ0FDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUNBQWlDLENBQUMseUJBQWtCLENBQUMsb0JBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDM0YsQ0FBQztJQUNKLENBQUM7SUFFRCxtQ0FBWSxHQUFaLFVBQWEsQ0FBUztRQUNwQixPQUFPLHlCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDO0lBRUQsbUNBQVksR0FBWixVQUFhLENBQVM7UUFDcEIsT0FBTyx5QkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQ0FBaUMsQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELG1DQUFZLEdBQVosVUFBYSxDQUFTO1FBQ3BCLE9BQU8seUJBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUNBQWlDLENBQUMsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCxnQ0FBUyxHQUFULFVBQVUsQ0FBUyxFQUFFLENBQVM7UUFDNUIsT0FBTyx5QkFBa0IsQ0FDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUMsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ3JHLENBQUM7SUFDSixDQUFDO0lBRUQsZ0NBQVMsR0FBVCxVQUFVLENBQVMsRUFBRSxDQUFTO1FBQzVCLE9BQU8seUJBQWtCLENBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLDhCQUE4QixDQUFDLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNyRyxDQUFDO0lBQ0osQ0FBQztJQUVELGlDQUFVLEdBQVYsVUFBVyxDQUFTLEVBQUUsQ0FBUztRQUM3QixPQUFPLHlCQUFrQixDQUN2QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDckcsQ0FBQztJQUNKLENBQUM7SUFFRCxvQ0FBYSxHQUFiLFVBQWMsQ0FBUztRQUNyQixPQUFPLHlCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHNDQUFzQyxDQUFDLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqSCxDQUFDO0lBRUQsK0JBQVEsR0FBUixVQUFTLENBQVMsRUFBRSxDQUFTO1FBQzNCLE9BQU8seUJBQWtCLENBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLHVCQUFnQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUM5RixDQUFDO0lBQ0osQ0FBQztJQUVELDZCQUFNLEdBQU4sVUFBTyxDQUFTLEVBQUUsYUFBcUI7UUFDckMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsdUJBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBekRNLHdCQUFXLEdBQUcsS0FBSyxDQUFDO0lBMEQ3QixtQkFBQztDQUFBLEFBM0RELElBMkRDO0FBM0RZLG9DQUFZIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc29kaXVtID0gcmVxdWlyZSgnbGlic29kaXVtLXdyYXBwZXJzLXN1bW8nKTtcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IGJpZ0ludEZyb21CdWZmZXJMRSwgYmlnSW50VG9CdWZmZXJMRSB9IGZyb20gJy4vdXRpbCc7XG5cbmludGVyZmFjZSBDdXJ2ZSB7XG4gIHNjYWxhclJhbmRvbSgpOiBiaWdpbnQ7XG4gIHNjYWxhclJlZHVjZShzOiBiaWdpbnQpOiBiaWdpbnQ7XG4gIHNjYWxhck5lZ2F0ZShzOiBiaWdpbnQpOiBiaWdpbnQ7XG4gIHNjYWxhckludmVydChzOiBiaWdpbnQpOiBiaWdpbnQ7XG4gIHNjYWxhckFkZCh4OiBiaWdpbnQsIHk6IGJpZ2ludCk6IGJpZ2ludDtcbiAgc2NhbGFyU3ViKHg6IGJpZ2ludCwgeTogYmlnaW50KTogYmlnaW50O1xuICBzY2FsYXJNdWx0KHg6IGJpZ2ludCwgeTogYmlnaW50KTogYmlnaW50O1xuICBiYXNlUG9pbnRNdWx0KG46IGJpZ2ludCk6IGJpZ2ludDtcbiAgcG9pbnRBZGQocDogYmlnaW50LCBxOiBiaWdpbnQpOiBiaWdpbnQ7XG4gIHZlcmlmeSh5OiBiaWdpbnQsIHNpZ25lZE1lc3NhZ2U6IEJ1ZmZlcik6IEJ1ZmZlcjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ3VydmU7XG5cbmV4cG9ydCBjbGFzcyBFZDI1NTE5Q3VydmUge1xuICBzdGF0aWMgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBzdGF0aWMgYXN5bmMgaW5pdGlhbGl6ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIUVkMjU1MTlDdXJ2ZS5pbml0aWFsaXplZCkge1xuICAgICAgYXdhaXQgc29kaXVtLnJlYWR5O1xuICAgICAgRWQyNTUxOUN1cnZlLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzY2FsYXJSYW5kb20oKTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKFxuICAgICAgQnVmZmVyLmZyb20oc29kaXVtLmNyeXB0b19jb3JlX2VkMjU1MTlfc2NhbGFyX3JlZHVjZShiaWdJbnRGcm9tQnVmZmVyTEUocmFuZG9tQnl0ZXMoNjQpKSkpLFxuICAgICk7XG4gIH1cblxuICBzY2FsYXJSZWR1Y2UoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9yZWR1Y2UoYmlnSW50VG9CdWZmZXJMRShzLCA2NCkpKSk7XG4gIH1cblxuICBzY2FsYXJOZWdhdGUoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9uZWdhdGUoYmlnSW50VG9CdWZmZXJMRShzLCAzMikpKSk7XG4gIH1cblxuICBzY2FsYXJJbnZlcnQoczogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fY29yZV9lZDI1NTE5X3NjYWxhcl9pbnZlcnQoYmlnSW50VG9CdWZmZXJMRShzLCAzMikpKSk7XG4gIH1cblxuICBzY2FsYXJBZGQoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoXG4gICAgICBCdWZmZXIuZnJvbShzb2RpdW0uY3J5cHRvX2NvcmVfZWQyNTUxOV9zY2FsYXJfYWRkKGJpZ0ludFRvQnVmZmVyTEUoeCwgMzIpLCBiaWdJbnRUb0J1ZmZlckxFKHksIDMyKSkpLFxuICAgICk7XG4gIH1cblxuICBzY2FsYXJTdWIoeDogYmlnaW50LCB5OiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoXG4gICAgICBCdWZmZXIuZnJvbShzb2RpdW0uY3J5cHRvX2NvcmVfZWQyNTUxOV9zY2FsYXJfc3ViKGJpZ0ludFRvQnVmZmVyTEUoeCwgMzIpLCBiaWdJbnRUb0J1ZmZlckxFKHksIDMyKSkpLFxuICAgICk7XG4gIH1cblxuICBzY2FsYXJNdWx0KHg6IGJpZ2ludCwgeTogYmlnaW50KTogYmlnaW50IHtcbiAgICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckxFKFxuICAgICAgQnVmZmVyLmZyb20oc29kaXVtLmNyeXB0b19jb3JlX2VkMjU1MTlfc2NhbGFyX211bChiaWdJbnRUb0J1ZmZlckxFKHgsIDMyKSwgYmlnSW50VG9CdWZmZXJMRSh5LCAzMikpKSxcbiAgICApO1xuICB9XG5cbiAgYmFzZVBvaW50TXVsdChuOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoQnVmZmVyLmZyb20oc29kaXVtLmNyeXB0b19zY2FsYXJtdWx0X2VkMjU1MTlfYmFzZV9ub2NsYW1wKGJpZ0ludFRvQnVmZmVyTEUobiwgMzIpKSkpO1xuICB9XG5cbiAgcG9pbnRBZGQocDogYmlnaW50LCBxOiBiaWdpbnQpOiBiaWdpbnQge1xuICAgIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyTEUoXG4gICAgICBCdWZmZXIuZnJvbShzb2RpdW0uY3J5cHRvX2NvcmVfZWQyNTUxOV9hZGQoYmlnSW50VG9CdWZmZXJMRShwLCAzMiksIGJpZ0ludFRvQnVmZmVyTEUocSwgMzIpKSksXG4gICAgKTtcbiAgfVxuXG4gIHZlcmlmeSh5OiBiaWdpbnQsIHNpZ25lZE1lc3NhZ2U6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHNvZGl1bS5jcnlwdG9fc2lnbl9vcGVuKHNpZ25lZE1lc3NhZ2UsIGJpZ0ludFRvQnVmZmVyTEUoeSwgMzIpKSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Ed25519Curve } from './curves';
|
|
2
|
+
interface PrivateKeychain {
|
|
3
|
+
pk: bigint;
|
|
4
|
+
sk: bigint;
|
|
5
|
+
prefix: bigint;
|
|
6
|
+
chaincode: bigint;
|
|
7
|
+
}
|
|
8
|
+
export interface PublicKeychain {
|
|
9
|
+
pk: bigint;
|
|
10
|
+
chaincode: bigint;
|
|
11
|
+
}
|
|
12
|
+
interface HDTree {
|
|
13
|
+
publicDerive(keychain: PublicKeychain, path: string): PublicKeychain;
|
|
14
|
+
privateDerive(keychain: PrivateKeychain, path: string): PrivateKeychain;
|
|
15
|
+
}
|
|
16
|
+
export default HDTree;
|
|
17
|
+
export declare class Ed25519BIP32 {
|
|
18
|
+
static curve: Ed25519Curve;
|
|
19
|
+
static initialized: boolean;
|
|
20
|
+
static initialize(): Promise<void>;
|
|
21
|
+
publicDerive(keychain: PublicKeychain, path: string): PublicKeychain;
|
|
22
|
+
privateDerive(keychain: PrivateKeychain, path: string): PrivateKeychain;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=hdTree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hdTree.d.ts","sourceRoot":"","sources":["../../../src/mpc/hdTree.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAMxC,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,MAAM;IACd,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAErE,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC;CACzE;AAED,eAAe,MAAM,CAAC;AAkCtB,qBAAa,YAAY;IACvB,MAAM,CAAC,KAAK,EAAE,YAAY,CAAsB;IAChD,MAAM,CAAC,WAAW,UAAS;WAEd,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxC,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc;IAkBpE,aAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe;CAwBxE"}
|
|
@@ -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=
|
package/dist/src/mpc/shamir.d.ts
CHANGED
|
@@ -1,7 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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":"
|
|
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"}
|
package/dist/src/mpc/shamir.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
var assert = require('assert');
|
|
4
|
-
var
|
|
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
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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
|
|
26
|
-
coefs.push(
|
|
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 <
|
|
31
|
-
var x =
|
|
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
|
-
|
|
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] =
|
|
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
|
-
|
|
53
|
-
var s =
|
|
54
|
-
for (var
|
|
55
|
-
var yi = shares[
|
|
56
|
-
var
|
|
57
|
-
var
|
|
58
|
-
var
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
68
|
+
num = this.curve.scalarMult(num, xj);
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
74
|
+
denum = this.curve.scalarMult(denum, this.curve.scalarSub(xj, xi));
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
|
-
|
|
78
|
-
var
|
|
79
|
-
var
|
|
80
|
-
|
|
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
|
-
|
|
87
|
-
combine: combine,
|
|
88
|
-
};
|
|
89
|
-
};
|
|
84
|
+
return Shamir;
|
|
85
|
+
}());
|
|
90
86
|
exports.default = Shamir;
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhbWlyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21wYy9zaGFtaXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRWpDLCtCQUFxRTtBQUVyRTtJQUdFLGdCQUFZLEtBQVk7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxzQkFBSyxHQUFMLFVBQU0sTUFBYyxFQUFFLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxPQUF1QjtRQUNqRixJQUFJLFVBQXlCLENBQUM7UUFDOUIsSUFBSSxPQUFPLEVBQUU7WUFDWCxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBVCxDQUFTLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0wsdUJBQXVCO1lBQ3ZCLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO2lCQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDO2lCQUNWLEdBQUcsQ0FBQyxVQUFDLENBQUMsRUFBRSxDQUFDLElBQUssT0FBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFiLENBQWEsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLElBQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUMzQixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM1QyxJQUFNLEtBQUss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QUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekM7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFDSCxhQUFDO0FBQUQsQ0FBQyxBQXJGRCxJQXFGQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xuY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG5pbXBvcnQgQ3VydmUgZnJvbSAnLi9jdXJ2ZXMnO1xuaW1wb3J0IHsgYmlnSW50RnJvbUJ1ZmZlckxFLCBiaWdJbnRUb0J1ZmZlckxFLCBjbGFtcCB9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYW1pciB7XG4gIGN1cnZlOiBDdXJ2ZTtcblxuICBjb25zdHJ1Y3RvcihjdXJ2ZTogQ3VydmUpIHtcbiAgICB0aGlzLmN1cnZlID0gY3VydmU7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBTaGFtaXIgc2hhcmluZyBvbiB0aGUgc2VjcmV0IGBzZWNyZXRgIHRvIHRoZSBkZWdyZWUgYHRocmVzaG9sZCAtIDFgIHNwbGl0IGBudW1TaGFyZXNgXG4gICAqIHdheXMuIFRoZSBzcGxpdCBzZWNyZXQgcmVxdWlyZXMgYHRocmVzaG9sZGAgc2hhcmVzIHRvIGJlIHJlY29uc3RydWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzZWNyZXQgc2VjcmV0IHRvIHNwbGl0XG4gICAqIEBwYXJhbSB0aHJlc2hvbGQgc2hhcmUgdGhyZXNob2xkIHJlcXVpcmVkIHRvIHJlY29uc3RydWN0IHNlY3JldFxuICAgKiBAcGFyYW0gbnVtU2hhcmVzIHRvdGFsIG51bWJlciBvZiBzaGFyZXMgdG8gc3BsaXQgdG8gc3BsaXQgc2VjcmV0IGludG9cbiAgICogQHBhcmFtIGluZGljZXNcbiAgICogQHJldHVybnMgRGljdGlvbmFyeSBvZiBzaGFyZXMuIEVhY2gga2V5IGlzIGFuIGludCBpbiB0aGUgcmFuZ2UgMTw9eDw9bnVtU2hhcmVzXG4gICAqIHJlcHJlc2VudGluZyB0aGF0IHNoYXJlJ3MgZnJlZSB0ZXJtLlxuICAgKi9cbiAgc3BsaXQoc2VjcmV0OiBiaWdpbnQsIHRocmVzaG9sZDogbnVtYmVyLCBudW1TaGFyZXM6IG51bWJlciwgaW5kaWNlcz86IEFycmF5PG51bWJlcj4pOiBSZWNvcmQ8bnVtYmVyLCBiaWdpbnQ+IHtcbiAgICBsZXQgYmlnSW5kaWNlczogQXJyYXk8YmlnaW50PjtcbiAgICBpZiAoaW5kaWNlcykge1xuICAgICAgYmlnSW5kaWNlcyA9IGluZGljZXMubWFwKChpKSA9PiBCaWdJbnQoaSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBtYWtlIHJhbmdlKDEsIG4gKyAxKVxuICAgICAgYmlnSW5kaWNlcyA9IEFycmF5KG51bVNoYXJlcylcbiAgICAgICAgLmZpbGwobnVsbClcbiAgICAgICAgLm1hcCgoXywgaSkgPT4gQmlnSW50KGkgKyAxKSk7XG4gICAgfVxuICAgIGFzc2VydCh0aHJlc2hvbGQgPiAxKTtcbiAgICBhc3NlcnQodGhyZXNob2xkIDw9IG51bVNoYXJlcyk7XG4gICAgY29uc3QgY29lZnM6IGJpZ2ludFtdID0gW107XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhyZXNob2xkIC0gMTsgaW5kKyspIHtcbiAgICAgIGNvbnN0IGNvZWZmID0gY2xhbXAoXG4gICAgICAgIGJpZ0ludEZyb21CdWZmZXJMRShjcnlwdG8uY3JlYXRlSG1hYygnc2hhMjU2JywgaW5kLnRvU3RyaW5nKDEwKSkudXBkYXRlKGJpZ0ludFRvQnVmZmVyTEUoc2VjcmV0LCAzMikpLmRpZ2VzdCgpKSxcbiAgICAgICk7XG4gICAgICBjb2Vmcy5wdXNoKGNvZWZmKTtcbiAgICB9XG4gICAgY29lZnMucHVzaChzZWNyZXQpO1xuXG4gICAgY29uc3Qgc2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBiaWdpbnQ+ID0ge307XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYmlnSW5kaWNlcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICBjb25zdCB4ID0gYmlnSW5kaWNlc1tpbmRdO1xuICAgICAgbGV0IHBhcnRpYWwgPSBjb2Vmc1swXTtcbiAgICAgIGZvciAobGV0IG90aGVyID0gMTsgb3RoZXIgPCBjb2Vmcy5sZW5ndGg7IG90aGVyKyspIHtcbiAgICAgICAgcGFydGlhbCA9IHRoaXMuY3VydmUuc2NhbGFyQWRkKGNvZWZzW290aGVyXSwgdGhpcy5jdXJ2ZS5zY2FsYXJNdWx0KHBhcnRpYWwsIHgpKTtcbiAgICAgIH1cbiAgICAgIHNoYXJlc1twYXJzZUludCh4LnRvU3RyaW5nKCksIDEwKV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgICByZXR1cm4gc2hhcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uc3RpdHV0ZSBhIHNlY3JldCBmcm9tIGEgZGljdGlvbmFyeSBvZiBzaGFyZXMuIFRoZSBudW1iZXIgb2Ygc2hhcmVzIG11c3RcbiAgICogYmUgZXF1YWwgdG8gYHRgIHRvIHJlY29uc3RpdHV0ZSB0aGUgb3JpZ2luYWwgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0gc2hhcmVzIGRpY3Rpb25hcnkgb2Ygc2hhcmVzLiBlYWNoIGtleSBpcyB0aGUgZnJlZSB0ZXJtIG9mIHRoZSBzaGFyZVxuICAgKiBAcmV0dXJucyBzZWNyZXRcbiAgICovXG4gIGNvbWJpbmUoc2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBiaWdpbnQ+KTogYmlnaW50IHtcbiAgICBsZXQgcyA9IEJpZ0ludCgwKTtcbiAgICBmb3IgKGNvbnN0IGkgaW4gc2hhcmVzKSB7XG4gICAgICBjb25zdCB5aSA9IHNoYXJlc1tpXTtcbiAgICAgIGNvbnN0IHhpID0gQmlnSW50KGkpO1xuICAgICAgbGV0IG51bSA9IEJpZ0ludCgxKTtcbiAgICAgIGxldCBkZW51bSA9IEJpZ0ludCgxKTtcblxuICAgICAgZm9yIChjb25zdCBqIGluIHNoYXJlcykge1xuICAgICAgICBjb25zdCB4aiA9IEJpZ0ludChqKTtcbiAgICAgICAgaWYgKHhpICE9PSB4aikge1xuICAgICAgICAgIG51bSA9IHRoaXMuY3VydmUuc2NhbGFyTXVsdChudW0sIHhqKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBqIGluIHNoYXJlcykge1xuICAgICAgICBjb25zdCB4aiA9IEJpZ0ludChqKTtcbiAgICAgICAgaWYgKHhpICE9PSB4aikge1xuICAgICAgICAgIGRlbnVtID0gdGhpcy5jdXJ2ZS5zY2FsYXJNdWx0KGRlbnVtLCB0aGlzLmN1cnZlLnNjYWxhclN1Yih4aiwgeGkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgaW52ZXJ0ZWQgPSB0aGlzLmN1cnZlLnNjYWxhckludmVydChkZW51bSk7XG4gICAgICBjb25zdCBpbm5lck11bHRpcGxpZWQgPSB0aGlzLmN1cnZlLnNjYWxhck11bHQobnVtLCBpbnZlcnRlZCk7XG4gICAgICBjb25zdCBtdWx0aXBsaWVkID0gdGhpcy5jdXJ2ZS5zY2FsYXJNdWx0KGlubmVyTXVsdGlwbGllZCwgeWkpO1xuICAgICAgcyA9IHRoaXMuY3VydmUuc2NhbGFyQWRkKG11bHRpcGxpZWQsIHMpO1xuICAgIH1cbiAgICByZXR1cm4gcztcbiAgfVxufVxuIl19
|