@bitgo/sdk-lib-mpc 8.6.0 → 8.8.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 +25 -0
- package/dist/src/tss/ecdsa/generatePaillierKey.d.ts +6 -0
- package/dist/src/tss/ecdsa/generatePaillierKey.d.ts.map +1 -0
- package/dist/src/tss/ecdsa/generatePaillierKey.js +52 -0
- package/dist/src/tss/ecdsa/paillierBlumProof.d.ts +16 -0
- package/dist/src/tss/ecdsa/paillierBlumProof.d.ts.map +1 -0
- package/dist/src/tss/ecdsa/paillierBlumProof.js +148 -0
- package/dist/src/tss/ecdsa/{rangeproof.d.ts.map → rangeProof.d.ts.map} +1 -1
- package/dist/src/tss/ecdsa/rangeProof.js +404 -0
- package/dist/src/util.d.ts +6 -0
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +24 -2
- 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/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/rangeproof.js +0 -401
- /package/dist/src/tss/ecdsa/{paillierproof.d.ts → paillierProof.d.ts} +0 -0
- /package/dist/src/tss/ecdsa/{paillierproof.d.ts.map → paillierProof.d.ts.map} +0 -0
- /package/dist/src/tss/ecdsa/{paillierproof.js → paillierProof.js} +0 -0
- /package/dist/src/tss/ecdsa/{rangeproof.d.ts → rangeProof.d.ts} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,31 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [8.8.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@8.5.0...@bitgo/sdk-lib-mpc@8.8.0) (2023-09-01)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **root:** update @types/node ([cedc1a0](https://github.com/BitGo/BitGoJS/commit/cedc1a0035e79bb42fda57bf6ac29d606242f50b))
|
|
11
|
+
- **sdk-lib-mpc:** fix 0 values attack on range proof ([4a689dc](https://github.com/BitGo/BitGoJS/commit/4a689dcfcf0345132e54ddfd3e8a10e2452b0997))
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
- **sdk-core:** add getDerivationPath method for smc wallets ([e0be65f](https://github.com/BitGo/BitGoJS/commit/e0be65f4c8904be313b4f453996f86326d2005e8))
|
|
16
|
+
- **sdk-lib-mpc:** convert interface to type ([e1c1065](https://github.com/BitGo/BitGoJS/commit/e1c1065928691a1f9d43522aeafa8751c2424d3e))
|
|
17
|
+
- **sdk-lib-mpc:** move ecdsa hdtree from core ([f0311a8](https://github.com/BitGo/BitGoJS/commit/f0311a8606b1a6aa82309ef7bb9a349782819c28))
|
|
18
|
+
- **sdk-lib-mpc:** move shamir ([42fc946](https://github.com/BitGo/BitGoJS/commit/42fc946c8a5c4a1f7a09e5a9cb6c64a0b266a2a7))
|
|
19
|
+
- **sdk-lib-mpc:** move types to types.ts ([cf2f482](https://github.com/BitGo/BitGoJS/commit/cf2f4821792172b1657fbcecd8886df5bacd817a))
|
|
20
|
+
|
|
21
|
+
# [8.7.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@8.5.0...@bitgo/sdk-lib-mpc@8.7.0) (2023-08-29)
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
- **sdk-core:** add getDerivationPath method for smc wallets ([e0be65f](https://github.com/BitGo/BitGoJS/commit/e0be65f4c8904be313b4f453996f86326d2005e8))
|
|
26
|
+
- **sdk-lib-mpc:** convert interface to type ([e1c1065](https://github.com/BitGo/BitGoJS/commit/e1c1065928691a1f9d43522aeafa8751c2424d3e))
|
|
27
|
+
- **sdk-lib-mpc:** move ecdsa hdtree from core ([f0311a8](https://github.com/BitGo/BitGoJS/commit/f0311a8606b1a6aa82309ef7bb9a349782819c28))
|
|
28
|
+
- **sdk-lib-mpc:** move shamir ([42fc946](https://github.com/BitGo/BitGoJS/commit/42fc946c8a5c4a1f7a09e5a9cb6c64a0b266a2a7))
|
|
29
|
+
- **sdk-lib-mpc:** move types to types.ts ([cf2f482](https://github.com/BitGo/BitGoJS/commit/cf2f4821792172b1657fbcecd8886df5bacd817a))
|
|
30
|
+
|
|
6
31
|
# [8.6.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-lib-mpc@8.5.0...@bitgo/sdk-lib-mpc@8.6.0) (2023-08-25)
|
|
7
32
|
|
|
8
33
|
### Features
|
|
@@ -0,0 +1,6 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DeserializedPaillierBlumProof } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Prove that a modulus (p*q) is the product of two large safe primes (p and q).
|
|
4
|
+
* @param {bigint} p The larger prime factor of the modulus
|
|
5
|
+
* @param {bigint} q The smaller prime factor of the modulus.
|
|
6
|
+
* @returns {DeserializedPaillierBlumProof} The proof that the modulus is the product of two large primes.
|
|
7
|
+
*/
|
|
8
|
+
export declare function prove(p: bigint, q: bigint): Promise<DeserializedPaillierBlumProof>;
|
|
9
|
+
/**
|
|
10
|
+
* Verify that N is the product of two large primes.
|
|
11
|
+
* @param {bigint} N The prime number being verified.
|
|
12
|
+
* @param {DeserializedPaillierBlumProof} The proof to verify N is a product of two large primes.
|
|
13
|
+
* @returns {boolean} True if N is a product of two large primes, and false otherwise.
|
|
14
|
+
*/
|
|
15
|
+
export declare function verify(N: bigint, { w, x, z }: DeserializedPaillierBlumProof): Promise<boolean>;
|
|
16
|
+
//# sourceMappingURL=paillierBlumProof.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paillierBlumProof.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/paillierBlumProof.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AA6ExD;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAuBxF;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,6BAA6B,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BpG"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verify = exports.prove = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
const bigint_crypto_utils_1 = require("bigint-crypto-utils");
|
|
6
|
+
const bigint_mod_arith_1 = require("bigint-mod-arith");
|
|
7
|
+
const util_1 = require("../../util");
|
|
8
|
+
// Security parameter.
|
|
9
|
+
const m = 80;
|
|
10
|
+
/**
|
|
11
|
+
* Generate psuedo-random quadratic residue for (N, w, i).
|
|
12
|
+
* @param N - the prime number to verify is a product of two large primes.
|
|
13
|
+
* @param w - a random number with the same bitLength as N, that satisfies the Jacobi of w is -1 wrt N.
|
|
14
|
+
* @returns {bigint[]} - set of challenges for N
|
|
15
|
+
*/
|
|
16
|
+
function generateY(N, w) {
|
|
17
|
+
const NBuf = util_1.bigIntToBufferBE(N);
|
|
18
|
+
const wBuf = util_1.bigIntToBufferBE(w, NBuf.length);
|
|
19
|
+
let counter = 0;
|
|
20
|
+
return Array(m)
|
|
21
|
+
.fill(null)
|
|
22
|
+
.map((_) => {
|
|
23
|
+
while (true) {
|
|
24
|
+
let h = util_1.bigIntFromBufferBE(
|
|
25
|
+
// TypeScript doesn't like us using `outputLength` in the transform options,
|
|
26
|
+
// but it is required for shake256.
|
|
27
|
+
crypto_1.createHash('shake256', { outputLength: Math.floor((bigint_crypto_utils_1.bitLength(N) + 7) / 8) })
|
|
28
|
+
.update(Buffer.from([counter++]))
|
|
29
|
+
.update('$')
|
|
30
|
+
.update(NBuf)
|
|
31
|
+
.update('$')
|
|
32
|
+
.update(wBuf)
|
|
33
|
+
.update('$')
|
|
34
|
+
.digest());
|
|
35
|
+
h = (h * h) % N;
|
|
36
|
+
if (bigint_mod_arith_1.gcd(h, N) === BigInt(1)) {
|
|
37
|
+
return h;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
// https://en.wikipedia.org/wiki/Jacobi_symbol#Implementation_in_C++
|
|
43
|
+
function jacobi(a, n) {
|
|
44
|
+
// a/n is represented as (a,n)
|
|
45
|
+
if (n <= BigInt(0)) {
|
|
46
|
+
throw new Error('n must greater than 0');
|
|
47
|
+
}
|
|
48
|
+
if (n % BigInt(2) !== BigInt(1)) {
|
|
49
|
+
throw new Error('n must be odd');
|
|
50
|
+
}
|
|
51
|
+
// step 1
|
|
52
|
+
a = a % n;
|
|
53
|
+
let t = BigInt(1);
|
|
54
|
+
let r;
|
|
55
|
+
// step 3
|
|
56
|
+
while (a !== BigInt(0)) {
|
|
57
|
+
// step 2
|
|
58
|
+
while (a % BigInt(2) === BigInt(0)) {
|
|
59
|
+
a /= BigInt(2);
|
|
60
|
+
r = n % BigInt(8);
|
|
61
|
+
if (r === BigInt(3) || r === BigInt(5)) {
|
|
62
|
+
t = -t;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// step 4
|
|
66
|
+
r = n;
|
|
67
|
+
n = a;
|
|
68
|
+
a = r;
|
|
69
|
+
if (a % BigInt(4) === BigInt(3) && n % BigInt(4) === BigInt(3)) {
|
|
70
|
+
t = -t;
|
|
71
|
+
}
|
|
72
|
+
a = a % n;
|
|
73
|
+
}
|
|
74
|
+
if (n === BigInt(1)) {
|
|
75
|
+
return t;
|
|
76
|
+
}
|
|
77
|
+
return BigInt(0);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Prove that a modulus (p*q) is the product of two large safe primes (p and q).
|
|
81
|
+
* @param {bigint} p The larger prime factor of the modulus
|
|
82
|
+
* @param {bigint} q The smaller prime factor of the modulus.
|
|
83
|
+
* @returns {DeserializedPaillierBlumProof} The proof that the modulus is the product of two large primes.
|
|
84
|
+
*/
|
|
85
|
+
async function prove(p, q) {
|
|
86
|
+
// Prover selects random w with Jacobi symbol 1 wrt N.
|
|
87
|
+
const N = p * q;
|
|
88
|
+
const l = (p - BigInt(1)) * (q - BigInt(1));
|
|
89
|
+
const d = bigint_mod_arith_1.modInv(N, l);
|
|
90
|
+
let w;
|
|
91
|
+
while (true) {
|
|
92
|
+
w = util_1.bigIntFromBufferBE(Buffer.from(await bigint_crypto_utils_1.randBits(bigint_crypto_utils_1.bitLength(N))));
|
|
93
|
+
if (jacobi(w, N) === BigInt(-1)) {
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// This is calculating the inverse of the function y^4 mod N,
|
|
98
|
+
// i.e.y ^ (1 / 4), where N = pq is a blum integer using HOC - Fact 2.160
|
|
99
|
+
// from cacr.uwaterloo.ca / hac / about / chap2.pdf
|
|
100
|
+
// Prover generates y_i.
|
|
101
|
+
const y = generateY(N, w);
|
|
102
|
+
// Prover calculates z_i = y_i ^ d mod N
|
|
103
|
+
const z = y.map((y_i) => bigint_mod_arith_1.modPow(y_i, d, N));
|
|
104
|
+
// Prover calculates x_i = y_i ^ 1/4 mod N using [HOC - Fact 2.160]
|
|
105
|
+
const e = ((l + BigInt(4)) / BigInt(8)) ** BigInt(2);
|
|
106
|
+
const x = y.map((y_i) => bigint_mod_arith_1.modPow(y_i, e, N));
|
|
107
|
+
return { w, x, z };
|
|
108
|
+
}
|
|
109
|
+
exports.prove = prove;
|
|
110
|
+
/**
|
|
111
|
+
* Verify that N is the product of two large primes.
|
|
112
|
+
* @param {bigint} N The prime number being verified.
|
|
113
|
+
* @param {DeserializedPaillierBlumProof} The proof to verify N is a product of two large primes.
|
|
114
|
+
* @returns {boolean} True if N is a product of two large primes, and false otherwise.
|
|
115
|
+
*/
|
|
116
|
+
async function verify(N, { w, x, z }) {
|
|
117
|
+
// Verifier checks N > 1.
|
|
118
|
+
if (N <= 1) {
|
|
119
|
+
throw new Error('N must be greater than 1');
|
|
120
|
+
}
|
|
121
|
+
// Verifier checks N is odd.
|
|
122
|
+
if (N % BigInt(2) !== BigInt(1)) {
|
|
123
|
+
throw new Error('N must be an odd number');
|
|
124
|
+
}
|
|
125
|
+
// Verifier checks N is not prime.
|
|
126
|
+
if (await bigint_crypto_utils_1.isProbablyPrime(N, 24)) {
|
|
127
|
+
throw new Error('N must be a composite number');
|
|
128
|
+
}
|
|
129
|
+
// Verifier checks that the Jacobi symbol for w is 1 wrt N.
|
|
130
|
+
if (jacobi(w, N) !== BigInt(-1)) {
|
|
131
|
+
throw new Error('Jacobi symbol of w must be -1 wrt to N');
|
|
132
|
+
}
|
|
133
|
+
// Verifier generates y_i.
|
|
134
|
+
const y = generateY(N, w);
|
|
135
|
+
for (let i = 0; i < m; i++) {
|
|
136
|
+
// Verifier checks z_i ^ N mod N == y_i.
|
|
137
|
+
if (bigint_mod_arith_1.modPow(z[i], N, N) !== y[i]) {
|
|
138
|
+
throw new Error(`Paillier verification of z[${i}] failed`);
|
|
139
|
+
}
|
|
140
|
+
// Verifier checks x_i ^ 4 mod N == y_i.
|
|
141
|
+
if (bigint_mod_arith_1.modPow(x[i], 4, N) !== y[i]) {
|
|
142
|
+
throw new Error(`Paillier verification of x[${i}] failed`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
exports.verify = verify;
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbGxpZXJCbHVtUHJvb2YuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhL3BhaWxsaWVyQmx1bVByb29mLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUNwQyw2REFBMkU7QUFDM0UsdURBQXVEO0FBQ3ZELHFDQUFrRTtBQUdsRSxzQkFBc0I7QUFDdEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRWI7Ozs7O0dBS0c7QUFDSCxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyQixNQUFNLElBQUksR0FBRyx1QkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLElBQUksR0FBRyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDWixJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDVCxPQUFPLElBQUksRUFBRTtZQUNYLElBQUksQ0FBQyxHQUFHLHlCQUFrQjtZQUN4Qiw0RUFBNEU7WUFDNUUsbUNBQW1DO1lBQ25DLG1CQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQywrQkFBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQ3pFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNoQyxNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUM7aUJBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQztpQkFDWCxNQUFNLENBQUMsSUFBSSxDQUFD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J2NyeXB0byc7XG5pbXBvcnQgeyBiaXRMZW5ndGgsIHJhbmRCaXRzLCBpc1Byb2JhYmx5UHJpbWUgfSBmcm9tICdiaWdpbnQtY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IGdjZCwgbW9kSW52LCBtb2RQb3cgfSBmcm9tICdiaWdpbnQtbW9kLWFyaXRoJztcbmltcG9ydCB7IGJpZ0ludEZyb21CdWZmZXJCRSwgYmlnSW50VG9CdWZmZXJCRSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkUGFpbGxpZXJCbHVtUHJvb2YgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gU2VjdXJpdHkgcGFyYW1ldGVyLlxuY29uc3QgbSA9IDgwO1xuXG4vKipcbiAqIEdlbmVyYXRlIHBzdWVkby1yYW5kb20gcXVhZHJhdGljIHJlc2lkdWUgZm9yIChOLCB3LCBpKS5cbiAqIEBwYXJhbSBOIC0gdGhlIHByaW1lIG51bWJlciB0byB2ZXJpZnkgaXMgYSBwcm9kdWN0IG9mIHR3byBsYXJnZSBwcmltZXMuXG4gKiBAcGFyYW0gdyAtIGEgcmFuZG9tIG51bWJlciB3aXRoIHRoZSBzYW1lIGJpdExlbmd0aCBhcyBOLCB0aGF0IHNhdGlzZmllcyB0aGUgSmFjb2JpIG9mIHcgaXMgLTEgd3J0IE4uXG4gKiBAcmV0dXJucyB7YmlnaW50W119IC0gc2V0IG9mIGNoYWxsZW5nZXMgZm9yIE5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVZKE4sIHcpOiBiaWdpbnRbXSB7XG4gIGNvbnN0IE5CdWYgPSBiaWdJbnRUb0J1ZmZlckJFKE4pO1xuICBjb25zdCB3QnVmID0gYmlnSW50VG9CdWZmZXJCRSh3LCBOQnVmLmxlbmd0aCk7XG4gIGxldCBjb3VudGVyID0gMDtcbiAgcmV0dXJuIEFycmF5KG0pXG4gICAgLmZpbGwobnVsbClcbiAgICAubWFwKChfKSA9PiB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBsZXQgaCA9IGJpZ0ludEZyb21CdWZmZXJCRShcbiAgICAgICAgICAvLyBUeXBlU2NyaXB0IGRvZXNuJ3QgbGlrZSB1cyB1c2luZyBgb3V0cHV0TGVuZ3RoYCBpbiB0aGUgdHJhbnNmb3JtIG9wdGlvbnMsXG4gICAgICAgICAgLy8gYnV0IGl0IGlzIHJlcXVpcmVkIGZvciBzaGFrZTI1Ni5cbiAgICAgICAgICBjcmVhdGVIYXNoKCdzaGFrZTI1NicsIHsgb3V0cHV0TGVuZ3RoOiBNYXRoLmZsb29yKChiaXRMZW5ndGgoTikgKyA3KSAvIDgpIH0pXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlci5mcm9tKFtjb3VudGVyKytdKSlcbiAgICAgICAgICAgIC51cGRhdGUoJyQnKVxuICAgICAgICAgICAgLnVwZGF0ZShOQnVmKVxuICAgICAgICAgICAgLnVwZGF0ZSgnJCcpXG4gICAgICAgICAgICAudXBkYXRlKHdCdWYpXG4gICAgICAgICAgICAudXBkYXRlKCckJylcbiAgICAgICAgICAgIC5kaWdlc3QoKVxuICAgICAgICApO1xuICAgICAgICBoID0gKGggKiBoKSAlIE47XG4gICAgICAgIGlmIChnY2QoaCwgTikgPT09IEJpZ0ludCgxKSkge1xuICAgICAgICAgIHJldHVybiBoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG59XG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0phY29iaV9zeW1ib2wjSW1wbGVtZW50YXRpb25faW5fQysrXG5mdW5jdGlvbiBqYWNvYmkoYSwgbik6IGJpZ2ludCB7XG4gIC8vIGEvbiBpcyByZXByZXNlbnRlZCBhcyAoYSxuKVxuICBpZiAobiA8PSBCaWdJbnQoMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ24gbXVzdCBncmVhdGVyIHRoYW4gMCcpO1xuICB9XG4gIGlmIChuICUgQmlnSW50KDIpICE9PSBCaWdJbnQoMSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ24gbXVzdCBiZSBvZGQnKTtcbiAgfVxuICAvLyBzdGVwIDFcbiAgYSA9IGEgJSBuO1xuICBsZXQgdCA9IEJpZ0ludCgxKTtcbiAgbGV0IHI7XG4gIC8vIHN0ZXAgM1xuICB3aGlsZSAoYSAhPT0gQmlnSW50KDApKSB7XG4gICAgLy8gc3RlcCAyXG4gICAgd2hpbGUgKGEgJSBCaWdJbnQoMikgPT09IEJpZ0ludCgwKSkge1xuICAgICAgYSAvPSBCaWdJbnQoMik7XG4gICAgICByID0gbiAlIEJpZ0ludCg4KTtcbiAgICAgIGlmIChyID09PSBCaWdJbnQoMykgfHwgciA9PT0gQmlnSW50KDUpKSB7XG4gICAgICAgIHQgPSAtdDtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gc3RlcCA0XG4gICAgciA9IG47XG4gICAgbiA9IGE7XG4gICAgYSA9IHI7XG4gICAgaWYgKGEgJSBCaWdJbnQoNCkgPT09IEJpZ0ludCgzKSAmJiBuICUgQmlnSW50KDQpID09PSBCaWdJbnQoMykpIHtcbiAgICAgIHQgPSAtdDtcbiAgICB9XG4gICAgYSA9IGEgJSBuO1xuICB9XG4gIGlmIChuID09PSBCaWdJbnQoMSkpIHtcbiAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gQmlnSW50KDApO1xufVxuXG4vKipcbiAqIFByb3ZlIHRoYXQgYSBtb2R1bHVzIChwKnEpIGlzIHRoZSBwcm9kdWN0IG9mIHR3byBsYXJnZSBzYWZlIHByaW1lcyAocCBhbmQgcSkuXG4gKiBAcGFyYW0ge2JpZ2ludH0gcCBUaGUgbGFyZ2VyIHByaW1lIGZhY3RvciBvZiB0aGUgbW9kdWx1c1xuICogQHBhcmFtIHtiaWdpbnR9IHEgVGhlIHNtYWxsZXIgcHJpbWUgZmFjdG9yIG9mIHRoZSBtb2R1bHVzLlxuICogQHJldHVybnMge0Rlc2VyaWFsaXplZFBhaWxsaWVyQmx1bVByb29mfSBUaGUgcHJvb2YgdGhhdCB0aGUgbW9kdWx1cyBpcyB0aGUgcHJvZHVjdCBvZiB0d28gbGFyZ2UgcHJpbWVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvdmUocDogYmlnaW50LCBxOiBiaWdpbnQpOiBQcm9taXNlPERlc2VyaWFsaXplZFBhaWxsaWVyQmx1bVByb29mPiB7XG4gIC8vIFByb3ZlciBzZWxlY3RzIHJhbmRvbSB3IHdpdGggSmFjb2JpIHN5bWJvbCAxIHdydCBOLlxuICBjb25zdCBOID0gcCAqIHE7XG4gIGNvbnN0IGwgPSAocCAtIEJpZ0ludCgxKSkgKiAocSAtIEJpZ0ludCgxKSk7XG4gIGNvbnN0IGQgPSBtb2RJbnYoTiwgbCk7XG4gIGxldCB3O1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHcgPSBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYXdhaXQgcmFuZEJpdHMoYml0TGVuZ3RoKE4pKSkpO1xuICAgIGlmIChqYWNvYmkodywgTikgPT09IEJpZ0ludCgtMSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICAvLyBUaGlzIGlzIGNhbGN1bGF0aW5nIHRoZSBpbnZlcnNlIG9mIHRoZSBmdW5jdGlvbiB5XjQgbW9kIE4sXG4gIC8vIGkuZS55IF4gKDEgLyA0KSwgd2hlcmUgTiA9IHBxIGlzIGEgYmx1bSBpbnRlZ2VyIHVzaW5nIEhPQyAtIEZhY3QgMi4xNjBcbiAgLy8gZnJvbSBjYWNyLnV3YXRlcmxvby5jYSAvIGhhYyAvIGFib3V0IC8gY2hhcDIucGRmXG4gIC8vIFByb3ZlciBnZW5lcmF0ZXMgeV9pLlxuICBjb25zdCB5ID0gZ2VuZXJhdGVZKE4sIHcpO1xuICAvLyBQcm92ZXIgY2FsY3VsYXRlcyB6X2kgPSB5X2kgXiBkIG1vZCBOXG4gIGNvbnN0IHogPSB5Lm1hcCgoeV9pKSA9PiBtb2RQb3coeV9pLCBkLCBOKSk7XG4gIC8vIFByb3ZlciBjYWxjdWxhdGVzIHhfaSA9IHlfaSBeIDEvNCBtb2QgTiB1c2luZyBbSE9DIC0gRmFjdCAyLjE2MF1cbiAgY29uc3QgZSA9ICgobCArIEJpZ0ludCg0KSkgLyBCaWdJbnQoOCkpICoqIEJpZ0ludCgyKTtcbiAgY29uc3QgeCA9IHkubWFwKCh5X2kpID0+IG1vZFBvdyh5X2ksIGUsIE4pKTtcbiAgcmV0dXJuIHsgdywgeCwgeiB9O1xufVxuXG4vKipcbiAqIFZlcmlmeSB0aGF0IE4gaXMgdGhlIHByb2R1Y3Qgb2YgdHdvIGxhcmdlIHByaW1lcy5cbiAqIEBwYXJhbSB7YmlnaW50fSBOIFRoZSBwcmltZSBudW1iZXIgYmVpbmcgdmVyaWZpZWQuXG4gKiBAcGFyYW0ge0Rlc2VyaWFsaXplZFBhaWxsaWVyQmx1bVByb29mfSBUaGUgcHJvb2YgdG8gdmVyaWZ5IE4gaXMgYSBwcm9kdWN0IG9mIHR3byBsYXJnZSBwcmltZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBOIGlzIGEgcHJvZHVjdCBvZiB0d28gbGFyZ2UgcHJpbWVzLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5KE46IGJpZ2ludCwgeyB3LCB4LCB6IH06IERlc2VyaWFsaXplZFBhaWxsaWVyQmx1bVByb29mKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIC8vIFZlcmlmaWVyIGNoZWNrcyBOID4gMS5cbiAgaWYgKE4gPD0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxJyk7XG4gIH1cbiAgLy8gVmVyaWZpZXIgY2hlY2tzIE4gaXMgb2RkLlxuICBpZiAoTiAlIEJpZ0ludCgyKSAhPT0gQmlnSW50KDEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOIG11c3QgYmUgYW4gb2RkIG51bWJlcicpO1xuICB9XG4gIC8vIFZlcmlmaWVyIGNoZWNrcyBOIGlzIG5vdCBwcmltZS5cbiAgaWYgKGF3YWl0IGlzUHJvYmFibHlQcmltZShOLCAyNCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ04gbXVzdCBiZSBhIGNvbXBvc2l0ZSBudW1iZXInKTtcbiAgfVxuICAvLyBWZXJpZmllciBjaGVja3MgdGhhdCB0aGUgSmFjb2JpIHN5bWJvbCBmb3IgdyBpcyAxIHdydCBOLlxuICBpZiAoamFjb2JpKHcsIE4pICE9PSBCaWdJbnQoLTEpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdKYWNvYmkgc3ltYm9sIG9mIHcgbXVzdCBiZSAtMSB3cnQgdG8gTicpO1xuICB9XG4gIC8vIFZlcmlmaWVyIGdlbmVyYXRlcyB5X2kuXG4gIGNvbnN0IHkgPSBnZW5lcmF0ZVkoTiwgdyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgLy8gVmVyaWZpZXIgY2hlY2tzIHpfaSBeIE4gbW9kIE4gPT0geV9pLlxuICAgIGlmIChtb2RQb3coeltpXSwgTiwgTikgIT09IHlbaV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFpbGxpZXIgdmVyaWZpY2F0aW9uIG9mIHpbJHtpfV0gZmFpbGVkYCk7XG4gICAgfVxuICAgIC8vIFZlcmlmaWVyIGNoZWNrcyB4X2kgXiA0IG1vZCBOID09IHlfaS5cbiAgICBpZiAobW9kUG93KHhbaV0sIDQsIE4pICE9PSB5W2ldKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhaWxsaWVyIHZlcmlmaWNhdGlvbiBvZiB4WyR7aX1dIGZhaWxlZGApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rangeproof.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/rangeproof.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EAEvB,UAAU,EACV,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,SAAS,CAAC;AAQjB,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOhF;AAwBD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,SAAS,SAAsB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CA2C3G;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,kBAAkB,EAC1B,CAAC,EAAE,MAAM,EACT,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,uBAAuB,CAAC,CAsBlC;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,uBAAuB,GACnC,OAAO,CAAC,OAAO,CAAC,CA0ClB;AACD;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CACzB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,UAAU,CAAC,CAgCrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,UAAU,EACjB,CAAC,EAAE,MAAM,GACR,OAAO,
|
|
1
|
+
{"version":3,"file":"rangeproof.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/rangeproof.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EAEvB,UAAU,EACV,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,SAAS,CAAC;AAQjB,wBAAsB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOhF;AAwBD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,SAAS,SAAsB,GAAG,OAAO,CAAC,4BAA4B,CAAC,CA2C3G;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,kBAAkB,EAC1B,CAAC,EAAE,MAAM,EACT,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,uBAAuB,CAAC,CAsBlC;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,uBAAuB,GACnC,OAAO,CAAC,OAAO,CAAC,CA0ClB;AACD;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CACzB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,UAAU,CAAC,CAgCrB;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,UAAU,EACjB,CAAC,EAAE,MAAM,GACR,OAAO,CAmCT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,mBAAmB,CAAC,CAoD9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,EAAE,EAAE,SAAS,EACb,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,mBAAmB,EAC1B,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,GACR,OAAO,CAiET"}
|