@bitgo/sdk-lib-mpc 8.7.0 → 8.9.0
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/CHANGELOG.md +30 -0
- package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/rangeproof.js +4 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -4
- package/dist/src/curves/baseCurve.d.ts +0 -19
- package/dist/src/curves/baseCurve.d.ts.map +0 -1
- package/dist/src/curves/baseCurve.js +0 -6
- package/dist/src/curves/bip32.d.ts +0 -8
- package/dist/src/curves/bip32.d.ts.map +0 -1
- package/dist/src/curves/bip32.js +0 -54
- package/dist/src/curves/bip32HdTree.d.ts +0 -8
- package/dist/src/curves/bip32HdTree.d.ts.map +0 -1
- package/dist/src/curves/bip32HdTree.js +0 -54
- package/dist/src/curves/hdTree.d.ts +0 -2
- package/dist/src/curves/hdTree.d.ts.map +0 -1
- package/dist/src/curves/hdTree.js +0 -11
- package/dist/src/curves/nobleEcc.d.ts +0 -10
- package/dist/src/curves/nobleEcc.d.ts.map +0 -1
- package/dist/src/curves/nobleEcc.js +0 -194
- package/dist/src/curves/shamir.d.ts +0 -37
- package/dist/src/curves/shamir.d.ts.map +0 -1
- package/dist/src/curves/shamir.js +0 -136
- package/dist/src/tss/ecdsa/generatePaillierKey.d.ts +0 -6
- package/dist/src/tss/ecdsa/generatePaillierKey.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/generatePaillierKey.js +0 -52
- package/dist/src/tss/ecdsa/mpc.d.ts +0 -129
- package/dist/src/tss/ecdsa/mpc.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/mpc.js +0 -1095
- package/dist/src/tss/ecdsa/paillierBlumProof.d.ts +0 -16
- package/dist/src/tss/ecdsa/paillierBlumProof.d.ts.map +0 -1
- package/dist/src/tss/ecdsa/paillierBlumProof.js +0 -135
|
@@ -1,136 +0,0 @@
|
|
|
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.Shamir = void 0;
|
|
7
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
-
const util_1 = require("../util");
|
|
9
|
-
class Shamir {
|
|
10
|
-
constructor(curve) {
|
|
11
|
-
this.curve = curve;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Perform Shamir sharing on the secret `secret` to the degree `threshold - 1` split `numShares`
|
|
15
|
-
* ways. The split secret requires `threshold` shares to be reconstructed.
|
|
16
|
-
*
|
|
17
|
-
* @param secret secret to split
|
|
18
|
-
* @param threshold share threshold required to reconstruct secret
|
|
19
|
-
* @param numShares total number of shares to split secret into
|
|
20
|
-
* @param indices optional indices which can be used while generating the shares
|
|
21
|
-
* @param salt optional salt which could be used while generating the shares
|
|
22
|
-
* @returns Dictionary containing `shares`, a dictionary where each key is an int
|
|
23
|
-
* in the range 1<=x<=numShares representing that share's free term, and `v`, an
|
|
24
|
-
* array of proofs to be shared with all participants.
|
|
25
|
-
*/
|
|
26
|
-
split(secret, threshold, numShares, indices, salt = BigInt(0)) {
|
|
27
|
-
let bigIndices;
|
|
28
|
-
if (indices) {
|
|
29
|
-
bigIndices = indices.map((i) => {
|
|
30
|
-
if (i < 1) {
|
|
31
|
-
throw new Error('Invalid value supplied for indices');
|
|
32
|
-
}
|
|
33
|
-
return BigInt(i);
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
// make range(1, n + 1)
|
|
38
|
-
bigIndices = Array(numShares)
|
|
39
|
-
.fill(null)
|
|
40
|
-
.map((_, i) => BigInt(i + 1));
|
|
41
|
-
}
|
|
42
|
-
if (threshold < 2) {
|
|
43
|
-
throw new Error('Threshold cannot be less than two');
|
|
44
|
-
}
|
|
45
|
-
if (threshold > numShares) {
|
|
46
|
-
throw new Error('Threshold cannot be greater than the total number of shares');
|
|
47
|
-
}
|
|
48
|
-
const coefs = [];
|
|
49
|
-
const v = [];
|
|
50
|
-
for (let ind = 0; ind < threshold - 1; ind++) {
|
|
51
|
-
const coeff = util_1.clamp(util_1.bigIntFromBufferLE(crypto_1.default.createHmac('sha256', ind.toString(10)).update(util_1.bigIntToBufferLE(secret, 32)).digest()));
|
|
52
|
-
coefs.push(coeff);
|
|
53
|
-
v.unshift(this.curve.basePointMult(coeff));
|
|
54
|
-
}
|
|
55
|
-
coefs.push(secret);
|
|
56
|
-
const shares = {};
|
|
57
|
-
for (let ind = 0; ind < bigIndices.length; ind++) {
|
|
58
|
-
const x = bigIndices[ind];
|
|
59
|
-
let partial = coefs[0];
|
|
60
|
-
for (let other = 1; other < coefs.length; other++) {
|
|
61
|
-
partial = this.curve.scalarAdd(coefs[other], this.curve.scalarMult(partial, x));
|
|
62
|
-
}
|
|
63
|
-
shares[parseInt(x.toString(), 10)] = partial;
|
|
64
|
-
}
|
|
65
|
-
return { shares, v };
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Verify a VSS share.
|
|
69
|
-
*
|
|
70
|
-
* @param u Secret share received from other party.
|
|
71
|
-
* @param v Verification values received from other party.
|
|
72
|
-
* @param index Verifier's index.
|
|
73
|
-
* @returns True on success; otherwise throws Error.
|
|
74
|
-
*/
|
|
75
|
-
verify(u, v, index) {
|
|
76
|
-
if (v.length < 2) {
|
|
77
|
-
throw new Error('Threshold cannot be less than two');
|
|
78
|
-
}
|
|
79
|
-
if (index < 1) {
|
|
80
|
-
throw new Error('Invalid value supplied for index');
|
|
81
|
-
}
|
|
82
|
-
const i = BigInt(index);
|
|
83
|
-
let x = v[0];
|
|
84
|
-
let t = BigInt(1);
|
|
85
|
-
for (const vsj of v.slice(1)) {
|
|
86
|
-
t = this.curve.scalarMult(t, i);
|
|
87
|
-
const vjt = this.curve.pointMultiply(vsj, t);
|
|
88
|
-
x = this.curve.pointAdd(x, vjt);
|
|
89
|
-
}
|
|
90
|
-
const sigmaG = this.curve.basePointMult(u);
|
|
91
|
-
if (x !== sigmaG) {
|
|
92
|
-
throw new Error('Could not verify share');
|
|
93
|
-
}
|
|
94
|
-
return true;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Reconstitute a secret from a dictionary of shares. The number of shares must
|
|
98
|
-
* be equal to `t` to reconstitute the original secret.
|
|
99
|
-
*
|
|
100
|
-
* @param shares dictionary of shares. each key is the free term of the share
|
|
101
|
-
* @returns secret
|
|
102
|
-
*/
|
|
103
|
-
combine(shares) {
|
|
104
|
-
try {
|
|
105
|
-
let s = BigInt(0);
|
|
106
|
-
for (const i in shares) {
|
|
107
|
-
const yi = shares[i];
|
|
108
|
-
const xi = BigInt(i);
|
|
109
|
-
let num = BigInt(1);
|
|
110
|
-
let denum = BigInt(1);
|
|
111
|
-
for (const j in shares) {
|
|
112
|
-
const xj = BigInt(j);
|
|
113
|
-
if (xi !== xj) {
|
|
114
|
-
num = this.curve.scalarMult(num, xj);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
for (const j in shares) {
|
|
118
|
-
const xj = BigInt(j);
|
|
119
|
-
if (xi !== xj) {
|
|
120
|
-
denum = this.curve.scalarMult(denum, this.curve.scalarSub(xj, xi));
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
const inverted = this.curve.scalarInvert(denum);
|
|
124
|
-
const innerMultiplied = this.curve.scalarMult(num, inverted);
|
|
125
|
-
const multiplied = this.curve.scalarMult(innerMultiplied, yi);
|
|
126
|
-
s = this.curve.scalarAdd(multiplied, s);
|
|
127
|
-
}
|
|
128
|
-
return s;
|
|
129
|
-
}
|
|
130
|
-
catch (error) {
|
|
131
|
-
throw new Error('Failed to combine Shamir shares , ' + error);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
exports.Shamir = Shamir;
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhbWlyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2N1cnZlcy9zaGFtaXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsb0RBQTRCO0FBRTVCLGtDQUFzRTtBQUd0RSxNQUFhLE1BQU07SUFHakIsWUFBWSxLQUFnQjtRQUMxQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsS0FBSyxDQUFDLE1BQWMsRUFBRSxTQUFpQixFQUFFLFNBQWlCLEVBQUUsT0FBdUIsRUFBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNuRyxJQUFJLFVBQXlCLENBQUM7UUFDOUIsSUFBSSxPQUFPLEVBQUU7WUFDWCxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO2lCQUN2RDtnQkFDRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCx1QkFBdUI7WUFDdkIsVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7aUJBQzFCLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQztTQUN0RDtRQUVELElBQUksU0FBUyxHQUFHLFNBQVMsRUFBRTtZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7U0FDaEY7UUFFRCxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsTUFBTSxDQUFDLEdBQWtCLEVBQUUsQ0FBQztRQUM1QixLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUM1QyxNQUFNLEtBQUssR0FBRyxZQUFLLENBQ2pCLHlCQUFrQixDQUFDLGdCQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLHVCQUFnQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQ2hILENBQUM7WUFDRixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM1QztRQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFbkIsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztRQUMxQyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNoRCxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNqRCxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pGO1lBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7U0FDOUM7UUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLENBQVMsRUFBRSxDQUFnQixFQUFFLEtBQWE7UUFDL0MsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7U0FDdEQ7UUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7U0FDckQ7UUFDRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM1QixDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3QyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssTUFBTSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUMzQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE9BQU8sQ0FBQyxNQUE4QjtRQUNwQyxJQUFJO1lBQ0YsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFO2dCQUN0QixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JCLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckIsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXRCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFO29CQUN0QixNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3JCLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFDYixHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3FCQUN0QztpQkFDRjtnQkFDRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRTtvQkFDdEIsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNyQixJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7d0JBQ2IsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDcEU7aUJBQ0Y7Z0JBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3pDO1lBQ0QsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsR0FBRyxLQUFLLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7Q0FDRjtBQXRJRCx3QkFzSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCB7IGJpZ0ludEZyb21CdWZmZXJMRSwgYmlnSW50VG9CdWZmZXJMRSwgY2xhbXAgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IEJhc2VDdXJ2ZSwgU3BsaXRTZWNyZXQgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNsYXNzIFNoYW1pciB7XG4gIGN1cnZlOiBCYXNlQ3VydmU7XG5cbiAgY29uc3RydWN0b3IoY3VydmU6IEJhc2VDdXJ2ZSkge1xuICAgIHRoaXMuY3VydmUgPSBjdXJ2ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIFNoYW1pciBzaGFyaW5nIG9uIHRoZSBzZWNyZXQgYHNlY3JldGAgdG8gdGhlIGRlZ3JlZSBgdGhyZXNob2xkIC0gMWAgc3BsaXQgYG51bVNoYXJlc2BcbiAgICogd2F5cy4gVGhlIHNwbGl0IHNlY3JldCByZXF1aXJlcyBgdGhyZXNob2xkYCBzaGFyZXMgdG8gYmUgcmVjb25zdHJ1Y3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHNlY3JldCBzZWNyZXQgdG8gc3BsaXRcbiAgICogQHBhcmFtIHRocmVzaG9sZCBzaGFyZSB0aHJlc2hvbGQgcmVxdWlyZWQgdG8gcmVjb25zdHJ1Y3Qgc2VjcmV0XG4gICAqIEBwYXJhbSBudW1TaGFyZXMgdG90YWwgbnVtYmVyIG9mIHNoYXJlcyB0byBzcGxpdCBzZWNyZXQgaW50b1xuICAgKiBAcGFyYW0gaW5kaWNlcyBvcHRpb25hbCBpbmRpY2VzIHdoaWNoIGNhbiBiZSB1c2VkIHdoaWxlIGdlbmVyYXRpbmcgdGhlIHNoYXJlc1xuICAgKiBAcGFyYW0gc2FsdCBvcHRpb25hbCBzYWx0IHdoaWNoIGNvdWxkIGJlIHVzZWQgd2hpbGUgZ2VuZXJhdGluZyB0aGUgc2hhcmVzXG4gICAqIEByZXR1cm5zIERpY3Rpb25hcnkgY29udGFpbmluZyBgc2hhcmVzYCwgYSBkaWN0aW9uYXJ5IHdoZXJlIGVhY2gga2V5IGlzIGFuIGludFxuICAgKiBpbiB0aGUgcmFuZ2UgMTw9eDw9bnVtU2hhcmVzIHJlcHJlc2VudGluZyB0aGF0IHNoYXJlJ3MgZnJlZSB0ZXJtLCBhbmQgYHZgLCBhblxuICAgKiBhcnJheSBvZiBwcm9vZnMgdG8gYmUgc2hhcmVkIHdpdGggYWxsIHBhcnRpY2lwYW50cy5cbiAgICovXG4gIHNwbGl0KHNlY3JldDogYmlnaW50LCB0aHJlc2hvbGQ6IG51bWJlciwgbnVtU2hhcmVzOiBudW1iZXIsIGluZGljZXM/OiBBcnJheTxudW1iZXI+LCBzYWx0ID0gQmlnSW50KDApKTogU3BsaXRTZWNyZXQge1xuICAgIGxldCBiaWdJbmRpY2VzOiBBcnJheTxiaWdpbnQ+O1xuICAgIGlmIChpbmRpY2VzKSB7XG4gICAgICBiaWdJbmRpY2VzID0gaW5kaWNlcy5tYXAoKGkpID0+IHtcbiAgICAgICAgaWYgKGkgPCAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIHN1cHBsaWVkIGZvciBpbmRpY2VzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJpZ0ludChpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBtYWtlIHJhbmdlKDEsIG4gKyAxKVxuICAgICAgYmlnSW5kaWNlcyA9IEFycmF5KG51bVNoYXJlcylcbiAgICAgICAgLmZpbGwobnVsbClcbiAgICAgICAgLm1hcCgoXywgaSkgPT4gQmlnSW50KGkgKyAxKSk7XG4gICAgfVxuICAgIGlmICh0aHJlc2hvbGQgPCAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RocmVzaG9sZCBjYW5ub3QgYmUgbGVzcyB0aGFuIHR3bycpO1xuICAgIH1cblxuICAgIGlmICh0aHJlc2hvbGQgPiBudW1TaGFyZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhyZXNob2xkIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBzaGFyZXMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb2VmczogYmlnaW50W10gPSBbXTtcbiAgICBjb25zdCB2OiBBcnJheTxiaWdpbnQ+ID0gW107XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhyZXNob2xkIC0gMTsgaW5kKyspIHtcbiAgICAgIGNvbnN0IGNvZWZmID0gY2xhbXAoXG4gICAgICAgIGJpZ0ludEZyb21CdWZmZXJMRShjcnlwdG8uY3JlYXRlSG1hYygnc2hhMjU2JywgaW5kLnRvU3RyaW5nKDEwKSkudXBkYXRlKGJpZ0ludFRvQnVmZmVyTEUoc2VjcmV0LCAzMikpLmRpZ2VzdCgpKVxuICAgICAgKTtcbiAgICAgIGNvZWZzLnB1c2goY29lZmYpO1xuICAgICAgdi51bnNoaWZ0KHRoaXMuY3VydmUuYmFzZVBvaW50TXVsdChjb2VmZikpO1xuICAgIH1cbiAgICBjb2Vmcy5wdXNoKHNlY3JldCk7XG5cbiAgICBjb25zdCBzaGFyZXM6IFJlY29yZDxudW1iZXIsIGJpZ2ludD4gPSB7fTtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBiaWdJbmRpY2VzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgIGNvbnN0IHggPSBiaWdJbmRpY2VzW2luZF07XG4gICAgICBsZXQgcGFydGlhbCA9IGNvZWZzWzBdO1xuICAgICAgZm9yIChsZXQgb3RoZXIgPSAxOyBvdGhlciA8IGNvZWZzLmxlbmd0aDsgb3RoZXIrKykge1xuICAgICAgICBwYXJ0aWFsID0gdGhpcy5jdXJ2ZS5zY2FsYXJBZGQoY29lZnNbb3RoZXJdLCB0aGlzLmN1cnZlLnNjYWxhck11bHQocGFydGlhbCwgeCkpO1xuICAgICAgfVxuICAgICAgc2hhcmVzW3BhcnNlSW50KHgudG9TdHJpbmcoKSwgMTApXSA9IHBhcnRpYWw7XG4gICAgfVxuICAgIHJldHVybiB7IHNoYXJlcywgdiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSBhIFZTUyBzaGFyZS5cbiAgICpcbiAgICogQHBhcmFtIHUgU2VjcmV0IHNoYXJlIHJlY2VpdmVkIGZyb20gb3RoZXIgcGFydHkuXG4gICAqIEBwYXJhbSB2IFZlcmlmaWNhdGlvbiB2YWx1ZXMgcmVjZWl2ZWQgZnJvbSBvdGhlciBwYXJ0eS5cbiAgICogQHBhcmFtIGluZGV4IFZlcmlmaWVyJ3MgaW5kZXguXG4gICAqIEByZXR1cm5zIFRydWUgb24gc3VjY2Vzczsgb3RoZXJ3aXNlIHRocm93cyBFcnJvci5cbiAgICovXG4gIHZlcmlmeSh1OiBiaWdpbnQsIHY6IEFycmF5PGJpZ2ludD4sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAodi5sZW5ndGggPCAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RocmVzaG9sZCBjYW5ub3QgYmUgbGVzcyB0aGFuIHR3bycpO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgc3VwcGxpZWQgZm9yIGluZGV4Jyk7XG4gICAgfVxuICAgIGNvbnN0IGkgPSBCaWdJbnQoaW5kZXgpO1xuICAgIGxldCB4ID0gdlswXTtcbiAgICBsZXQgdCA9IEJpZ0ludCgxKTtcbiAgICBmb3IgKGNvbnN0IHZzaiBvZiB2LnNsaWNlKDEpKSB7XG4gICAgICB0ID0gdGhpcy5jdXJ2ZS5zY2FsYXJNdWx0KHQsIGkpO1xuICAgICAgY29uc3Qgdmp0ID0gdGhpcy5jdXJ2ZS5wb2ludE11bHRpcGx5KHZzaiwgdCk7XG4gICAgICB4ID0gdGhpcy5jdXJ2ZS5wb2ludEFkZCh4LCB2anQpO1xuICAgIH1cbiAgICBjb25zdCBzaWdtYUcgPSB0aGlzLmN1cnZlLmJhc2VQb2ludE11bHQodSk7XG4gICAgaWYgKHggIT09IHNpZ21hRykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgdmVyaWZ5IHNoYXJlJyk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uc3RpdHV0ZSBhIHNlY3JldCBmcm9tIGEgZGljdGlvbmFyeSBvZiBzaGFyZXMuIFRoZSBudW1iZXIgb2Ygc2hhcmVzIG11c3RcbiAgICogYmUgZXF1YWwgdG8gYHRgIHRvIHJlY29uc3RpdHV0ZSB0aGUgb3JpZ2luYWwgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0gc2hhcmVzIGRpY3Rpb25hcnkgb2Ygc2hhcmVzLiBlYWNoIGtleSBpcyB0aGUgZnJlZSB0ZXJtIG9mIHRoZSBzaGFyZVxuICAgKiBAcmV0dXJucyBzZWNyZXRcbiAgICovXG4gIGNvbWJpbmUoc2hhcmVzOiBSZWNvcmQ8bnVtYmVyLCBiaWdpbnQ+KTogYmlnaW50IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHMgPSBCaWdJbnQoMCk7XG4gICAgICBmb3IgKGNvbnN0IGkgaW4gc2hhcmVzKSB7XG4gICAgICAgIGNvbnN0IHlpID0gc2hhcmVzW2ldO1xuICAgICAgICBjb25zdCB4aSA9IEJpZ0ludChpKTtcbiAgICAgICAgbGV0IG51bSA9IEJpZ0ludCgxKTtcbiAgICAgICAgbGV0IGRlbnVtID0gQmlnSW50KDEpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaiBpbiBzaGFyZXMpIHtcbiAgICAgICAgICBjb25zdCB4aiA9IEJpZ0ludChqKTtcbiAgICAgICAgICBpZiAoeGkgIT09IHhqKSB7XG4gICAgICAgICAgICBudW0gPSB0aGlzLmN1cnZlLnNjYWxhck11bHQobnVtLCB4aik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaiBpbiBzaGFyZXMpIHtcbiAgICAgICAgICBjb25zdCB4aiA9IEJpZ0ludChqKTtcbiAgICAgICAgICBpZiAoeGkgIT09IHhqKSB7XG4gICAgICAgICAgICBkZW51bSA9IHRoaXMuY3VydmUuc2NhbGFyTXVsdChkZW51bSwgdGhpcy5jdXJ2ZS5zY2FsYXJTdWIoeGosIHhpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGludmVydGVkID0gdGhpcy5jdXJ2ZS5zY2FsYXJJbnZlcnQoZGVudW0pO1xuICAgICAgICBjb25zdCBpbm5lck11bHRpcGxpZWQgPSB0aGlzLmN1cnZlLnNjYWxhck11bHQobnVtLCBpbnZlcnRlZCk7XG4gICAgICAgIGNvbnN0IG11bHRpcGxpZWQgPSB0aGlzLmN1cnZlLnNjYWxhck11bHQoaW5uZXJNdWx0aXBsaWVkLCB5aSk7XG4gICAgICAgIHMgPSB0aGlzLmN1cnZlLnNjYWxhckFkZChtdWx0aXBsaWVkLCBzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjb21iaW5lIFNoYW1pciBzaGFyZXMgLCAnICsgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { KeyPair } from 'paillier-bigint';
|
|
2
|
-
import { DeserializedKeyPairWithPaillierBlumProof, RawPaillierKey } from './types';
|
|
3
|
-
export declare function generatePaillierKey(bitlength?: number): Promise<RawPaillierKey>;
|
|
4
|
-
export declare function generatePaillierKeyWithProof(bitlength?: number): Promise<DeserializedKeyPairWithPaillierBlumProof>;
|
|
5
|
-
export declare function rawPaillierKeyToPaillierKey(n: bigint, lambda: bigint, mu: bigint, p: bigint, q: bigint): KeyPair;
|
|
6
|
-
//# sourceMappingURL=generatePaillierKey.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generatePaillierKey.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/generatePaillierKey.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,EAAE,wCAAwC,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGnF,wBAAsB,mBAAmB,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAUnF;AAED,wBAAsB,4BAA4B,CAChD,SAAS,SAAO,GACf,OAAO,CAAC,wCAAwC,CAAC,CAInD;AAED,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAKhH"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.rawPaillierKeyToPaillierKey = exports.generatePaillierKeyWithProof = exports.generatePaillierKey = void 0;
|
|
23
|
-
const bcu = __importStar(require("bigint-crypto-utils"));
|
|
24
|
-
const paillier_bigint_1 = require("paillier-bigint");
|
|
25
|
-
const paillierBlumProof_1 = require("./paillierBlumProof");
|
|
26
|
-
// Implementation based on paillier-bigint's generateRandomKeys
|
|
27
|
-
async function generatePaillierKey(bitlength = 3072) {
|
|
28
|
-
let [p, q, n] = [BigInt(0), BigInt(0), BigInt(0)];
|
|
29
|
-
do {
|
|
30
|
-
p = await bcu.prime(Math.floor(bitlength / 2) + 1);
|
|
31
|
-
q = await bcu.prime(Math.floor(bitlength / 2));
|
|
32
|
-
n = p * q;
|
|
33
|
-
} while (q === p || q % BigInt(4) !== BigInt(3) || p % BigInt(4) !== BigInt(3) || bcu.bitLength(n) !== bitlength);
|
|
34
|
-
const lambda = (p - BigInt(1)) * (q - BigInt(1));
|
|
35
|
-
const mu = bcu.modInv(lambda, n);
|
|
36
|
-
return { n, lambda, mu, p, q };
|
|
37
|
-
}
|
|
38
|
-
exports.generatePaillierKey = generatePaillierKey;
|
|
39
|
-
async function generatePaillierKeyWithProof(bitlength = 3072) {
|
|
40
|
-
const key = await generatePaillierKey(bitlength);
|
|
41
|
-
const proof = await paillierBlumProof_1.prove(key.p, key.q);
|
|
42
|
-
return { ...key, ...proof };
|
|
43
|
-
}
|
|
44
|
-
exports.generatePaillierKeyWithProof = generatePaillierKeyWithProof;
|
|
45
|
-
function rawPaillierKeyToPaillierKey(n, lambda, mu, p, q) {
|
|
46
|
-
const g = n + BigInt(1);
|
|
47
|
-
const publicKey = new paillier_bigint_1.PublicKey(n, g);
|
|
48
|
-
const privateKey = new paillier_bigint_1.PrivateKey(lambda, mu, publicKey, p, q);
|
|
49
|
-
return { publicKey, privateKey };
|
|
50
|
-
}
|
|
51
|
-
exports.rawPaillierKeyToPaillierKey = rawPaillierKeyToPaillierKey;
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVQYWlsbGllcktleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWNkc2EvZ2VuZXJhdGVQYWlsbGllcktleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEseURBQTJDO0FBQzNDLHFEQUFpRTtBQUNqRSwyREFBNEM7QUFHNUMsK0RBQStEO0FBQ3hELEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsSUFBSTtJQUN4RCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsR0FBRztRQUNELENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1gsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFO0lBQ2xILE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakMsQ0FBQztBQVZELGtEQVVDO0FBRU0sS0FBSyxVQUFVLDRCQUE0QixDQUNoRCxTQUFTLEdBQUcsSUFBSTtJQUVoQixNQUFNLEdBQUcsR0FBRyxNQUFNLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0seUJBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLEVBQUUsR0FBRyxHQUFHLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUM5QixDQUFDO0FBTkQsb0VBTUM7QUFFRCxTQUFnQiwyQkFBMkIsQ0FBQyxDQUFTLEVBQUUsTUFBYyxFQUFFLEVBQVUsRUFBRSxDQUFTLEVBQUUsQ0FBUztJQUNyRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sU0FBUyxHQUFHLElBQUksMkJBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsTUFBTSxVQUFVLEdBQUcsSUFBSSw0QkFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ25DLENBQUM7QUFMRCxrRUFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGJjdSBmcm9tICdiaWdpbnQtY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IFB1YmxpY0tleSwgUHJpdmF0ZUtleSwgS2V5UGFpciB9IGZyb20gJ3BhaWxsaWVyLWJpZ2ludCc7XG5pbXBvcnQgeyBwcm92ZSB9IGZyb20gJy4vcGFpbGxpZXJCbHVtUHJvb2YnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkS2V5UGFpcldpdGhQYWlsbGllckJsdW1Qcm9vZiwgUmF3UGFpbGxpZXJLZXkgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gSW1wbGVtZW50YXRpb24gYmFzZWQgb24gcGFpbGxpZXItYmlnaW50J3MgZ2VuZXJhdGVSYW5kb21LZXlzXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVQYWlsbGllcktleShiaXRsZW5ndGggPSAzMDcyKTogUHJvbWlzZTxSYXdQYWlsbGllcktleT4ge1xuICBsZXQgW3AsIHEsIG5dID0gW0JpZ0ludCgwKSwgQmlnSW50KDApLCBCaWdJbnQoMCldO1xuICBkbyB7XG4gICAgcCA9IGF3YWl0IGJjdS5wcmltZShNYXRoLmZsb29yKGJpdGxlbmd0aCAvIDIpICsgMSk7XG4gICAgcSA9IGF3YWl0IGJjdS5wcmltZShNYXRoLmZsb29yKGJpdGxlbmd0aCAvIDIpKTtcbiAgICBuID0gcCAqIHE7XG4gIH0gd2hpbGUgKHEgPT09IHAgfHwgcSAlIEJpZ0ludCg0KSAhPT0gQmlnSW50KDMpIHx8IHAgJSBCaWdJbnQoNCkgIT09IEJpZ0ludCgzKSB8fCBiY3UuYml0TGVuZ3RoKG4pICE9PSBiaXRsZW5ndGgpO1xuICBjb25zdCBsYW1iZGEgPSAocCAtIEJpZ0ludCgxKSkgKiAocSAtIEJpZ0ludCgxKSk7XG4gIGNvbnN0IG11ID0gYmN1Lm1vZEludihsYW1iZGEsIG4pO1xuICByZXR1cm4geyBuLCBsYW1iZGEsIG11LCBwLCBxIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVBhaWxsaWVyS2V5V2l0aFByb29mKFxuICBiaXRsZW5ndGggPSAzMDcyXG4pOiBQcm9taXNlPERlc2VyaWFsaXplZEtleVBhaXJXaXRoUGFpbGxpZXJCbHVtUHJvb2Y+IHtcbiAgY29uc3Qga2V5ID0gYXdhaXQgZ2VuZXJhdGVQYWlsbGllcktleShiaXRsZW5ndGgpO1xuICBjb25zdCBwcm9vZiA9IGF3YWl0IHByb3ZlKGtleS5wLCBrZXkucSk7XG4gIHJldHVybiB7IC4uLmtleSwgLi4ucHJvb2YgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhd1BhaWxsaWVyS2V5VG9QYWlsbGllcktleShuOiBiaWdpbnQsIGxhbWJkYTogYmlnaW50LCBtdTogYmlnaW50LCBwOiBiaWdpbnQsIHE6IGJpZ2ludCk6IEtleVBhaXIge1xuICBjb25zdCBnID0gbiArIEJpZ0ludCgxKTtcbiAgY29uc3QgcHVibGljS2V5ID0gbmV3IFB1YmxpY0tleShuLCBnKTtcbiAgY29uc3QgcHJpdmF0ZUtleSA9IG5ldyBQcml2YXRlS2V5KGxhbWJkYSwgbXUsIHB1YmxpY0tleSwgcCwgcSk7XG4gIHJldHVybiB7IHB1YmxpY0tleSwgcHJpdmF0ZUtleSB9O1xufVxuIl19
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { Hash } from 'crypto';
|
|
3
|
-
import { HDTree, Secp256k1Curve, Shamir } from '../../curves';
|
|
4
|
-
import { DShare, KeyCombined, KeyShare, NShare, OShare, PShare, SerializedEcdsaChallenges, SerializedNtilde, SerializedPaillierChallenge, Signature, SignCombine, SignCombineRT, SignConvert, SignConvertRT, SignConvertStep1, SignConvertStep1Response, SignConvertStep2, SignConvertStep2Response, SignConvertStep3, SignConvertStep3Response, SignShareRT, SShare, SubkeyShare, XShareWithChallenges, YShareWithChallenges } from './types';
|
|
5
|
-
/**
|
|
6
|
-
* ECDSA TSS implementation supporting 2:n Threshold
|
|
7
|
-
*/
|
|
8
|
-
export declare class Ecdsa {
|
|
9
|
-
static curve: Secp256k1Curve;
|
|
10
|
-
static hdTree: HDTree;
|
|
11
|
-
static shamir: Shamir;
|
|
12
|
-
/**
|
|
13
|
-
* Generate shares for participant at index and split keys `(threshold,numShares)` ways.
|
|
14
|
-
* @param {number} index participant index
|
|
15
|
-
* @param {number} threshold Signing threshold
|
|
16
|
-
* @param {number} numShares Number of shares
|
|
17
|
-
* @param {Buffer} seed optional 64 byte seed to use for key generation
|
|
18
|
-
* @param {Boolean} sync optional sync flag, if true then a synchronous version of Paillier key generation is used that does not spawn Worker threads.
|
|
19
|
-
* @returns {Promise<KeyShare>} Returns the private p-share
|
|
20
|
-
* and n-shares to be distributed to participants at their corresponding index.
|
|
21
|
-
*/
|
|
22
|
-
keyShare(index: number, threshold: number, numShares: number, seed?: Buffer, sync?: boolean): Promise<KeyShare>;
|
|
23
|
-
/**
|
|
24
|
-
* Combine data shared during the key generation protocol.
|
|
25
|
-
* @param {KeyShare} participantShares private p-share and
|
|
26
|
-
* n-shares received from all other participants.
|
|
27
|
-
* @returns {KeyCombined} Returns the participant private x-share
|
|
28
|
-
* and y-shares to be used when generating signing shares.
|
|
29
|
-
*/
|
|
30
|
-
keyCombine(pShare: PShare, nShares: NShare[]): KeyCombined;
|
|
31
|
-
/**
|
|
32
|
-
* Derive shares for a BIP-32 subkey.
|
|
33
|
-
* @param {PShare} The user's p-share.
|
|
34
|
-
* @param {NShare[]} The n-shares received from the other participants.
|
|
35
|
-
* @param {string} The BIP-32 path to derive.
|
|
36
|
-
* @returns {SubkeyShare} Returns the private x-share and n-shares to
|
|
37
|
-
* be distributed to participants at their corresponding index.
|
|
38
|
-
*/
|
|
39
|
-
keyDerive(pShare: PShare, nShares: NShare[], path: string): SubkeyShare;
|
|
40
|
-
/**
|
|
41
|
-
* Derives a child common keychain from common keychain
|
|
42
|
-
*
|
|
43
|
-
* @param {commonKeychain} The common keychain as a hex string.
|
|
44
|
-
* @param {path} The BIP-32 path to derive.
|
|
45
|
-
* @return {string} The derived common keychain as a hex string.
|
|
46
|
-
*/
|
|
47
|
-
deriveUnhardened(commonKeychain: string, path: string): string;
|
|
48
|
-
/**
|
|
49
|
-
* Appends a given range proof challenge to the shares previously created
|
|
50
|
-
* by #keyCombine. Generates a new challenge if not provided.
|
|
51
|
-
* @param {XShare | YShare} share Private xShare or yShare of the signing operation
|
|
52
|
-
* @param rangeProofChallenge - challenge generated via generateNtilde
|
|
53
|
-
* @param paillierProofChallenge
|
|
54
|
-
* @returns {KeyCombined} The share with amended challenge values
|
|
55
|
-
*/
|
|
56
|
-
appendChallenge<T>(share: T, rangeProofChallenge: SerializedNtilde, paillierProofChallenge: SerializedPaillierChallenge): T & SerializedEcdsaChallenges;
|
|
57
|
-
/**
|
|
58
|
-
* Create signing shares.
|
|
59
|
-
* @param {xShare} xShare Private xShare of current participant signer
|
|
60
|
-
* @param {YShare} yShare yShare corresponding to the other participant signer
|
|
61
|
-
* @returns {SignShareRT} Returns the participant private w-share
|
|
62
|
-
* and k-share to be distributed to other participant signer
|
|
63
|
-
*/
|
|
64
|
-
signShare(xShare: XShareWithChallenges, yShare: YShareWithChallenges): Promise<SignShareRT>;
|
|
65
|
-
/**
|
|
66
|
-
* Perform multiplicitive-to-additive (MtA) share conversion with another signer.
|
|
67
|
-
* Connection 1.2 in https://lucid.app/lucidchart/7061785b-bc5c-4002-b546-3f4a3612fc62/edit?page=IAVmvYO4FvKc#
|
|
68
|
-
* If signer A completed signShare initially (input to this fn), then this step is completed by signer B.
|
|
69
|
-
* @param {SignConvert} shares
|
|
70
|
-
* @returns {SignConvertRT}
|
|
71
|
-
*/
|
|
72
|
-
signConvertStep1(shares: SignConvertStep1): Promise<SignConvertStep1Response>;
|
|
73
|
-
/**
|
|
74
|
-
* Perform multiplicitive-to-additive (MtA) share conversion with another
|
|
75
|
-
* signer.
|
|
76
|
-
* Connection 2.1 in https://lucid.app/lucidchart/7061785b-bc5c-4002-b546-3f4a3612fc62/edit?page=IAVmvYO4FvKc#
|
|
77
|
-
* If signer B completed signConvertStep1, then this step is completed by signer A.
|
|
78
|
-
* @param {SignConvert} shares
|
|
79
|
-
* @returns {SignConvertRT}
|
|
80
|
-
*/
|
|
81
|
-
signConvertStep2(shares: SignConvertStep2): Promise<SignConvertStep2Response>;
|
|
82
|
-
/**
|
|
83
|
-
* Perform multiplicitive-to-additive (MtA) share conversion with another signer.
|
|
84
|
-
* Connection 2.2 in https://lucid.app/lucidchart/7061785b-bc5c-4002-b546-3f4a3612fc62/edit?page=IAVmvYO4FvKc#
|
|
85
|
-
* If signer A completed signConvertStep2, then this step is completed by signer B.
|
|
86
|
-
* @param {SignConvert} shares
|
|
87
|
-
* @returns {SignConvertRT}
|
|
88
|
-
*/
|
|
89
|
-
signConvertStep3(shares: SignConvertStep3): Promise<SignConvertStep3Response>;
|
|
90
|
-
/**
|
|
91
|
-
* Perform multiplicitive-to-additive (MtA) share conversion with another signer.
|
|
92
|
-
* @deprecated - use one of [signConvertStep1, signConvertStep2, signConvertStep3] instead
|
|
93
|
-
* @param {SignConvert} shares
|
|
94
|
-
* @returns {SignConvertRT}
|
|
95
|
-
*/
|
|
96
|
-
signConvert(shares: SignConvert): Promise<SignConvertRT>;
|
|
97
|
-
/**
|
|
98
|
-
* Combine gamma shares to get the private omicron / delta shares
|
|
99
|
-
* @param {SignCombine} shares
|
|
100
|
-
* @returns {SignCombineRT}
|
|
101
|
-
*/
|
|
102
|
-
signCombine(shares: SignCombine): SignCombineRT;
|
|
103
|
-
/**
|
|
104
|
-
* Sign a message.
|
|
105
|
-
* @param {Buffer} M Message to be signed
|
|
106
|
-
* @param {OShare} oShare private omicron share of current participant
|
|
107
|
-
* @param {DShare} dShare delta share received from the other participant
|
|
108
|
-
* @param {Hash} hash hashing algorithm implementing Node`s standard crypto hash interface
|
|
109
|
-
* @param {boolean} shouldHash if true, we hash the provided buffer before signing
|
|
110
|
-
* @returns {SShare}
|
|
111
|
-
*/
|
|
112
|
-
sign(M: Buffer, oShare: OShare, dShare: DShare, hash?: Hash, shouldHash?: boolean): SShare;
|
|
113
|
-
/**
|
|
114
|
-
* Construct full signature by combining Sign Shares
|
|
115
|
-
* @param {SShare[]} shares
|
|
116
|
-
* @returns {Signature}
|
|
117
|
-
*/
|
|
118
|
-
constructSignature(shares: SShare[]): Signature;
|
|
119
|
-
/**
|
|
120
|
-
* Verify ecdsa signatures
|
|
121
|
-
* @param {Buffer} message
|
|
122
|
-
* @param {Signature } signature
|
|
123
|
-
* @param {Hash} hash hashing algorithm implementing Node`s standard crypto hash interface
|
|
124
|
-
* @param {boolean} shouldHash if true, we hash the provided buffer before verifying
|
|
125
|
-
* @returns {boolean} True if signature is valid; False otherwise
|
|
126
|
-
*/
|
|
127
|
-
verify(message: Buffer, signature: Signature, hash?: Hash, shouldHash?: boolean): boolean;
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=mpc.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mpc.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/mpc.ts"],"names":[],"mappings":";AAGA,OAAO,EAAc,IAAI,EAAe,MAAM,QAAQ,CAAC;AAUvD,OAAO,EAA8B,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAKL,MAAM,EAEN,WAAW,EACX,QAAQ,EAGR,MAAM,EACN,MAAM,EACN,MAAM,EAEN,yBAAyB,EACzB,gBAAgB,EAChB,2BAA2B,EAE3B,SAAS,EACT,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,wBAAwB,EACxB,WAAW,EACX,MAAM,EACN,WAAW,EAGX,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAMjB;;GAEG;AACH,qBAAa,KAAK;IAChB,MAAM,CAAC,KAAK,EAAE,cAAc,CAAwB;IACpD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAqB;IAC1C,MAAM,CAAC,MAAM,EAAE,MAAM,CAA2B;IAChD;;;;;;;;;OASG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,UAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkEnH;;;;;;OAMG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,WAAW;IAiD1D;;;;;;;OAOG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW;IAkEvE;;;;;;OAMG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAqB9D;;;;;;;OAOG;IACH,eAAe,CAAC,CAAC,EACf,KAAK,EAAE,CAAC,EACR,mBAAmB,EAAE,gBAAgB,EACrC,sBAAsB,EAAE,2BAA2B,GAClD,CAAC,GAAG,yBAAyB;IAWhC;;;;;;OAMG;IACG,SAAS,CAAC,MAAM,EAAE,oBAAoB,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC;IAwFjG;;;;;;OAMG;IACG,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAwLnF;;;;;;;OAOG;IACG,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA4OnF;;;;;;OAMG;IACG,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAsGnF;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IA2S9D;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa;IAiC/C;;;;;;;;OAQG;IACH,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,UAAO,GAAG,MAAM;IAwBvF;;;;OAIG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS;IAqB/C;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,UAAO,GAAG,OAAO;CAYvF"}
|