@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.
Files changed (40) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/src/tss/ecdsa/generatePaillierKey.d.ts +6 -0
  3. package/dist/src/tss/ecdsa/generatePaillierKey.d.ts.map +1 -0
  4. package/dist/src/tss/ecdsa/generatePaillierKey.js +52 -0
  5. package/dist/src/tss/ecdsa/paillierBlumProof.d.ts +16 -0
  6. package/dist/src/tss/ecdsa/paillierBlumProof.d.ts.map +1 -0
  7. package/dist/src/tss/ecdsa/paillierBlumProof.js +148 -0
  8. package/dist/src/tss/ecdsa/{rangeproof.d.ts.map → rangeProof.d.ts.map} +1 -1
  9. package/dist/src/tss/ecdsa/rangeProof.js +404 -0
  10. package/dist/src/util.d.ts +6 -0
  11. package/dist/src/util.d.ts.map +1 -1
  12. package/dist/src/util.js +24 -2
  13. package/dist/tsconfig.tsbuildinfo +1 -1
  14. package/package.json +3 -4
  15. package/dist/src/curves/baseCurve.d.ts +0 -19
  16. package/dist/src/curves/baseCurve.d.ts.map +0 -1
  17. package/dist/src/curves/baseCurve.js +0 -6
  18. package/dist/src/curves/bip32.d.ts +0 -8
  19. package/dist/src/curves/bip32.d.ts.map +0 -1
  20. package/dist/src/curves/bip32.js +0 -54
  21. package/dist/src/curves/bip32HdTree.d.ts +0 -8
  22. package/dist/src/curves/bip32HdTree.d.ts.map +0 -1
  23. package/dist/src/curves/bip32HdTree.js +0 -54
  24. package/dist/src/curves/hdTree.d.ts +0 -2
  25. package/dist/src/curves/hdTree.d.ts.map +0 -1
  26. package/dist/src/curves/hdTree.js +0 -11
  27. package/dist/src/curves/nobleEcc.d.ts +0 -10
  28. package/dist/src/curves/nobleEcc.d.ts.map +0 -1
  29. package/dist/src/curves/nobleEcc.js +0 -194
  30. package/dist/src/curves/shamir.d.ts +0 -37
  31. package/dist/src/curves/shamir.d.ts.map +0 -1
  32. package/dist/src/curves/shamir.js +0 -136
  33. package/dist/src/tss/ecdsa/mpc.d.ts +0 -129
  34. package/dist/src/tss/ecdsa/mpc.d.ts.map +0 -1
  35. package/dist/src/tss/ecdsa/mpc.js +0 -1095
  36. package/dist/src/tss/ecdsa/rangeproof.js +0 -401
  37. /package/dist/src/tss/ecdsa/{paillierproof.d.ts → paillierProof.d.ts} +0 -0
  38. /package/dist/src/tss/ecdsa/{paillierproof.d.ts.map → paillierProof.d.ts.map} +0 -0
  39. /package/dist/src/tss/ecdsa/{paillierproof.js → paillierProof.js} +0 -0
  40. /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,CAgCT;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"}
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"}