@bitgo-beta/sdk-lib-mpc 8.2.1-alpha.41 → 8.2.1-alpha.42

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.
@@ -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
@@ -1,6 +1,9 @@
1
1
  export * as EcdsaTypes from './types';
2
- export * as EcdsaRangeProof from './rangeproof';
3
- export * as EcdsaPaillierProof from './paillierproof';
2
+ export * as EcdsaRangeProof from './rangeProof';
3
+ export * as EcdsaPaillierProof from './paillierProof';
4
+ export * as EcdsaPaillierBlumProof from './paillierBlumProof';
4
5
  export * as EcdsaZkVProof from './zkVProof';
6
+ export * as EcdsaNoSmallFactorsProof from './noSmallFactorsProof';
7
+ export * from './generatePaillierKey';
5
8
  export declare const minModulusBitLength = 3072;
6
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,eAAe,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,kBAAkB,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,aAAa,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,mBAAmB,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,eAAe,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,kBAAkB,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,sBAAsB,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,aAAa,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,wBAAwB,MAAM,uBAAuB,CAAC;AAClE,cAAc,uBAAuB,CAAC;AACtC,eAAO,MAAM,mBAAmB,OAAO,CAAC"}
@@ -18,11 +18,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
21
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
22
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
23
+ };
21
24
  Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.minModulusBitLength = exports.EcdsaZkVProof = exports.EcdsaPaillierProof = exports.EcdsaRangeProof = exports.EcdsaTypes = void 0;
25
+ exports.minModulusBitLength = exports.EcdsaNoSmallFactorsProof = exports.EcdsaZkVProof = exports.EcdsaPaillierBlumProof = exports.EcdsaPaillierProof = exports.EcdsaRangeProof = exports.EcdsaTypes = void 0;
23
26
  exports.EcdsaTypes = __importStar(require("./types"));
24
- exports.EcdsaRangeProof = __importStar(require("./rangeproof"));
25
- exports.EcdsaPaillierProof = __importStar(require("./paillierproof"));
27
+ exports.EcdsaRangeProof = __importStar(require("./rangeProof"));
28
+ exports.EcdsaPaillierProof = __importStar(require("./paillierProof"));
29
+ exports.EcdsaPaillierBlumProof = __importStar(require("./paillierBlumProof"));
26
30
  exports.EcdsaZkVProof = __importStar(require("./zkVProof"));
31
+ exports.EcdsaNoSmallFactorsProof = __importStar(require("./noSmallFactorsProof"));
32
+ __exportStar(require("./generatePaillierKey"), exports);
27
33
  exports.minModulusBitLength = 3072;
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBc0M7QUFDdEMsZ0VBQWdEO0FBQ2hELHNFQUFzRDtBQUN0RCw0REFBNEM7QUFFL0IsUUFBQSxtQkFBbUIsR0FBRyxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBFY2RzYVR5cGVzIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogYXMgRWNkc2FSYW5nZVByb29mIGZyb20gJy4vcmFuZ2Vwcm9vZic7XG5leHBvcnQgKiBhcyBFY2RzYVBhaWxsaWVyUHJvb2YgZnJvbSAnLi9wYWlsbGllcnByb29mJztcbmV4cG9ydCAqIGFzIEVjZHNhWmtWUHJvb2YgZnJvbSAnLi96a1ZQcm9vZic7XG5cbmV4cG9ydCBjb25zdCBtaW5Nb2R1bHVzQml0TGVuZ3RoID0gMzA3MjtcbiJdfQ==
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBc0M7QUFDdEMsZ0VBQWdEO0FBQ2hELHNFQUFzRDtBQUN0RCw4RUFBOEQ7QUFDOUQsNERBQTRDO0FBQzVDLGtGQUFrRTtBQUNsRSx3REFBc0M7QUFDekIsUUFBQSxtQkFBbUIsR0FBRyxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBFY2RzYVR5cGVzIGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0ICogYXMgRWNkc2FSYW5nZVByb29mIGZyb20gJy4vcmFuZ2VQcm9vZic7XG5leHBvcnQgKiBhcyBFY2RzYVBhaWxsaWVyUHJvb2YgZnJvbSAnLi9wYWlsbGllclByb29mJztcbmV4cG9ydCAqIGFzIEVjZHNhUGFpbGxpZXJCbHVtUHJvb2YgZnJvbSAnLi9wYWlsbGllckJsdW1Qcm9vZic7XG5leHBvcnQgKiBhcyBFY2RzYVprVlByb29mIGZyb20gJy4vemtWUHJvb2YnO1xuZXhwb3J0ICogYXMgRWNkc2FOb1NtYWxsRmFjdG9yc1Byb29mIGZyb20gJy4vbm9TbWFsbEZhY3RvcnNQcm9vZic7XG5leHBvcnQgKiBmcm9tICcuL2dlbmVyYXRlUGFpbGxpZXJLZXknO1xuZXhwb3J0IGNvbnN0IG1pbk1vZHVsdXNCaXRMZW5ndGggPSAzMDcyO1xuIl19
@@ -0,0 +1,24 @@
1
+ import { DeserializedNoSmallFactorsProof } from './types';
2
+ /**
3
+ * Prove that $n0$ has no small factors, where $n0$ is the product of two large primes.
4
+ * @param p - a large prime.
5
+ * @param q - a large prime.
6
+ * @param w - a random number with the same bitLength as $p * q$, that satisfies the Jacobi of w is -1 wrt $n0$.
7
+ * @param nHat - a safe bi-prime, such as that returned from rangeProof.generateNTilde.
8
+ * @param s - security parameters for $nHat$ such as the $h1$ value returned from rangeProof.generateNTilde.
9
+ * @param t - security parameters for $nHat$ such as the $h2$ value returned from rangeProof.generateNTilde.
10
+ * @returns proof that the product of $p * q$ has no small factors.
11
+ */
12
+ export declare function prove(p: bigint, q: bigint, w: bigint, nHat: bigint, s: bigint, t: bigint): DeserializedNoSmallFactorsProof;
13
+ /**
14
+ * Verify that $n0$ is not the product of any small factors.
15
+ * @param n0 - a modulus that is the product of $p$ and $q$.
16
+ * @param w - a random number with the same bitLength as $n0$, that satisfies the Jacobi of w is -1 wrt $n0$.
17
+ * @param nHat - a safe bi-prime, such as that returned from rangeProof.generateNTilde.
18
+ * @param s - security parameters for $nHat$ such as the $h1$ value returned from rangeProof.generateNTilde.
19
+ * @param t - security parameters for $nHat$ such as the $h2$ value returned from rangeProof.generateNTilde.
20
+ * @param proof - a proof generated by noSmallFactors.prove.
21
+ * @returns true if verification successful.
22
+ */
23
+ export declare function verify(n0: bigint, w: bigint, nHat: bigint, s: bigint, t: bigint, proof: DeserializedNoSmallFactorsProof): boolean;
24
+ //# sourceMappingURL=noSmallFactorsProof.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noSmallFactorsProof.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/noSmallFactorsProof.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AA6E1D;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CACnB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,+BAA+B,CA+BjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CACpB,EAAE,EAAE,MAAM,EACV,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,+BAA+B,GACrC,OAAO,CAwBT"}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.verify = exports.prove = void 0;
4
+ /**
5
+ * Implementation of No Small Factors ($\Pi^\text{fac}).
6
+ * https://eprint.iacr.org/2020/492.pdf Section B.4
7
+ */
8
+ const crypto_1 = require("crypto");
9
+ const bigint_crypto_utils_1 = require("bigint-crypto-utils");
10
+ const bigint_mod_arith_1 = require("bigint-mod-arith");
11
+ const util_1 = require("../../util");
12
+ const ORDER = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');
13
+ const ELL = BigInt(256);
14
+ const EPSILON = BigInt(BigInt(2) * ELL);
15
+ function hash(N, w, nonce) {
16
+ // NOTE: There's a bug in node type file for crypto that prevents us from using Hash.copy({ outputLength: ... })
17
+ // outputLength must be specified on the copy() for a shake256 hash to behave correctly.
18
+ // On the other hand, since it's very likely that the first hash will fall in the desired range, using
19
+ // Hash.copy() to save on repeated calling update(`${N}$${w}$`) may not be worth it.
20
+ return crypto_1.createHash('shake256', { outputLength: 1 + Math.floor((bigint_crypto_utils_1.bitLength(ORDER) + 7) / 8) })
21
+ .update(util_1.bigIntToBufferBE(N))
22
+ .update('$')
23
+ .update(util_1.bigIntToBufferBE(w))
24
+ .update('$')
25
+ .update(nonce)
26
+ .digest();
27
+ }
28
+ /**
29
+ * Generate pseudo-random challenge value $e$ and associated $nonce$ for $(N, w)$.
30
+ * @param N - the prime number to verify is a product of two large primes.
31
+ * @param w - a random number with the same bitLength as N, that satisfies the Jacobi of w is -1 wrt N.
32
+ * @returns {nonce, e} - challenge value $e$ and associated $nonce$ that makes $e$ uniformly random from $(-order, order)$.
33
+ */
34
+ function generateEforProve(N, w) {
35
+ let nonce, e, digest;
36
+ do {
37
+ nonce = crypto_1.randomBytes(33);
38
+ digest = hash(N, w, nonce);
39
+ e = util_1.bigIntFromBufferBE(digest.subarray(1));
40
+ } while (e >= ORDER);
41
+ if (digest[0] & 1) {
42
+ return { nonce, e: -e };
43
+ }
44
+ return { nonce, e };
45
+ }
46
+ /**
47
+ * Generate pseudo-random challenge value $e$ for $(N, w)$ and associated $nonce$.
48
+ * @param N - the prime number to verify is a product of two large primes.
49
+ * @param w - a random number with the same bitLength as N, that satisfies the Jacobi of w is -1 wrt N.
50
+ * @param nonce - a random nonce.
51
+ * @returns {bigint} - challenge value $e$.
52
+ */
53
+ function generateEforVerify(N, w, nonce) {
54
+ const digest = hash(N, w, nonce);
55
+ const e = util_1.bigIntFromBufferBE(digest.subarray(1));
56
+ if (digest[0] & 1) {
57
+ return -e;
58
+ }
59
+ return e;
60
+ }
61
+ /**
62
+ * Calculate the closest integer square root of $n$.
63
+ * @param n - the number to calculate the square root of.
64
+ * @returns {bigint} - $n$'s closest integer square root.
65
+ */
66
+ function isqrt(n) {
67
+ if (n < BigInt(0)) {
68
+ throw new Error();
69
+ }
70
+ if (n < BigInt(2)) {
71
+ return n;
72
+ }
73
+ function newtonIteration(n, x0) {
74
+ const x1 = (n / x0 + x0) >> BigInt(1);
75
+ if (x0 === x1 || x0 === x1 - BigInt(1)) {
76
+ return x0;
77
+ }
78
+ return newtonIteration(n, x1);
79
+ }
80
+ return newtonIteration(n, BigInt(1));
81
+ }
82
+ /**
83
+ * Prove that $n0$ has no small factors, where $n0$ is the product of two large primes.
84
+ * @param p - a large prime.
85
+ * @param q - a large prime.
86
+ * @param w - a random number with the same bitLength as $p * q$, that satisfies the Jacobi of w is -1 wrt $n0$.
87
+ * @param nHat - a safe bi-prime, such as that returned from rangeProof.generateNTilde.
88
+ * @param s - security parameters for $nHat$ such as the $h1$ value returned from rangeProof.generateNTilde.
89
+ * @param t - security parameters for $nHat$ such as the $h2$ value returned from rangeProof.generateNTilde.
90
+ * @returns proof that the product of $p * q$ has no small factors.
91
+ */
92
+ function prove(p, q, w, nHat, s, t) {
93
+ const n0 = p * q;
94
+ const { nonce, e } = generateEforProve(n0, w);
95
+ const sqrtN0 = isqrt(n0);
96
+ const alpha = bigint_crypto_utils_1.randBetween(sqrtN0 << (ELL + EPSILON), -sqrtN0 << (ELL + EPSILON));
97
+ const beta = bigint_crypto_utils_1.randBetween(sqrtN0 << (ELL + EPSILON), -sqrtN0 << (ELL + EPSILON));
98
+ const rho = bigint_crypto_utils_1.randBetween((nHat * n0) << ELL, -(nHat * n0) << ELL);
99
+ // Commit to p.
100
+ const mu = bigint_crypto_utils_1.randBetween(nHat << ELL, -nHat << ELL);
101
+ const P = (bigint_mod_arith_1.modPow(s, p, nHat) * bigint_mod_arith_1.modPow(t, mu, nHat)) % nHat;
102
+ // Commit to q.
103
+ const nu = bigint_crypto_utils_1.randBetween(nHat << ELL, -nHat << ELL);
104
+ const Q = (bigint_mod_arith_1.modPow(s, q, nHat) * bigint_mod_arith_1.modPow(t, nu, nHat)) % nHat;
105
+ // Commit to alpha.
106
+ const x = bigint_crypto_utils_1.randBetween(nHat << (ELL + EPSILON), -nHat << (ELL + EPSILON));
107
+ const A = (bigint_mod_arith_1.modPow(s, alpha, nHat) * bigint_mod_arith_1.modPow(t, x, nHat)) % nHat;
108
+ // Commit to beta.
109
+ const y = bigint_crypto_utils_1.randBetween(nHat << (ELL + EPSILON), -nHat << (ELL + EPSILON));
110
+ const B = (bigint_mod_arith_1.modPow(s, beta, nHat) * bigint_mod_arith_1.modPow(t, y, nHat)) % nHat;
111
+ // Commit to Q and alpha.
112
+ const r = bigint_crypto_utils_1.randBetween((nHat * n0) << (ELL + EPSILON), -(nHat * n0) << (ELL + EPSILON));
113
+ const T = (bigint_mod_arith_1.modPow(Q, alpha, nHat) * bigint_mod_arith_1.modPow(t, r, nHat)) % nHat;
114
+ const rhoHat = rho - nu * p;
115
+ const z1 = alpha + e * p;
116
+ const z2 = beta + e * q;
117
+ const w1 = x + e * mu;
118
+ const w2 = y + e * nu;
119
+ const v = r + e * rhoHat;
120
+ return { P, Q, A, B, T, rho, z1, z2, w1, w2, v, nonce: util_1.bigIntFromBufferBE(nonce) };
121
+ }
122
+ exports.prove = prove;
123
+ /**
124
+ * Verify that $n0$ is not the product of any small factors.
125
+ * @param n0 - a modulus that is the product of $p$ and $q$.
126
+ * @param w - a random number with the same bitLength as $n0$, that satisfies the Jacobi of w is -1 wrt $n0$.
127
+ * @param nHat - a safe bi-prime, such as that returned from rangeProof.generateNTilde.
128
+ * @param s - security parameters for $nHat$ such as the $h1$ value returned from rangeProof.generateNTilde.
129
+ * @param t - security parameters for $nHat$ such as the $h2$ value returned from rangeProof.generateNTilde.
130
+ * @param proof - a proof generated by noSmallFactors.prove.
131
+ * @returns true if verification successful.
132
+ */
133
+ function verify(n0, w, nHat, s, t, proof) {
134
+ const { P, Q, A, B, T, rho, z1, z2, w1, w2, v, nonce } = proof;
135
+ const e = generateEforVerify(n0, w, util_1.bigIntToBufferBE(nonce, 33));
136
+ if (e < -ORDER || e > ORDER) {
137
+ throw new Error('Could not verify no small factors proof');
138
+ }
139
+ const sqrtN0 = isqrt(n0);
140
+ const R = (bigint_mod_arith_1.modPow(s, n0, nHat) * bigint_mod_arith_1.modPow(t, rho, nHat)) % nHat;
141
+ if ((bigint_mod_arith_1.modPow(s, z1, nHat) * bigint_mod_arith_1.modPow(t, w1, nHat)) % nHat !== (A * bigint_mod_arith_1.modPow(P, e, nHat)) % nHat) {
142
+ throw new Error('Could not verify no small factors proof');
143
+ }
144
+ if ((bigint_mod_arith_1.modPow(s, z2, nHat) * bigint_mod_arith_1.modPow(t, w2, nHat)) % nHat !== (B * bigint_mod_arith_1.modPow(Q, e, nHat)) % nHat) {
145
+ throw new Error('Could not verify no small factors proof');
146
+ }
147
+ if ((bigint_mod_arith_1.modPow(Q, z1, nHat) * bigint_mod_arith_1.modPow(t, v, nHat)) % nHat !== (T * bigint_mod_arith_1.modPow(R, e, nHat)) % nHat) {
148
+ throw new Error('Could not verify no small factors proof');
149
+ }
150
+ if (z1 < -sqrtN0 << (ELL + EPSILON) || z1 > sqrtN0 << (ELL + EPSILON)) {
151
+ throw new Error('Could not verify no small factors proof');
152
+ }
153
+ if (z2 < -sqrtN0 << (ELL + EPSILON) || z2 > sqrtN0 << (ELL + EPSILON)) {
154
+ throw new Error('Could not verify no small factors proof');
155
+ }
156
+ return true;
157
+ }
158
+ exports.verify = verify;
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9TbWFsbEZhY3RvcnNQcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWNkc2Evbm9TbWFsbEZhY3RvcnNQcm9vZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7O0dBR0c7QUFDSCxtQ0FBaUQ7QUFDakQsNkRBQTZEO0FBQzdELHVEQUEwQztBQUMxQyxxQ0FBa0U7QUFHbEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLG9FQUFvRSxDQUFDLENBQUM7QUFDM0YsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFFeEMsU0FBUyxJQUFJLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxLQUFhO0lBQy9DLGdIQUFnSDtJQUNoSCw4RkFBOEY7SUFDOUYsNEdBQTRHO0lBQzVHLDBGQUEwRjtJQUMxRixPQUFPLG1CQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsK0JBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3hGLE1BQU0sQ0FBQyx1QkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQixNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ1gsTUFBTSxDQUFDLHVCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDWCxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ2IsTUFBTSxFQUFFLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLENBQVMsRUFBRSxDQUFTO0lBQzdDLElBQUksS0FBYSxFQUFFLENBQVMsRUFBRSxNQUFjLENB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KipcbiAqIEltcGxlbWVudGF0aW9uIG9mIE5vIFNtYWxsIEZhY3RvcnMgKCRcXFBpXlxcdGV4dHtmYWN9KS5cbiAqIGh0dHBzOi8vZXByaW50LmlhY3Iub3JnLzIwMjAvNDkyLnBkZiBTZWN0aW9uIEIuNFxuICovXG5pbXBvcnQgeyBjcmVhdGVIYXNoLCByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBiaXRMZW5ndGgsIHJhbmRCZXR3ZWVuIH0gZnJvbSAnYmlnaW50LWNyeXB0by11dGlscyc7XG5pbXBvcnQgeyBtb2RQb3cgfSBmcm9tICdiaWdpbnQtbW9kLWFyaXRoJztcbmltcG9ydCB7IGJpZ0ludEZyb21CdWZmZXJCRSwgYmlnSW50VG9CdWZmZXJCRSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkTm9TbWFsbEZhY3RvcnNQcm9vZiB9IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBPUkRFUiA9IEJpZ0ludCgnMHhmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZWJhYWVkY2U2YWY0OGEwM2JiZmQyNWU4Y2QwMzY0MTQxJyk7XG5jb25zdCBFTEwgPSBCaWdJbnQoMjU2KTtcbmNvbnN0IEVQU0lMT04gPSBCaWdJbnQoQmlnSW50KDIpICogRUxMKTtcblxuZnVuY3Rpb24gaGFzaChOOiBiaWdpbnQsIHc6IGJpZ2ludCwgbm9uY2U6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gIC8vIE5PVEU6IFRoZXJlJ3MgYSBidWcgaW4gbm9kZSB0eXBlIGZpbGUgZm9yIGNyeXB0byB0aGF0IHByZXZlbnRzIHVzIGZyb20gdXNpbmcgSGFzaC5jb3B5KHsgb3V0cHV0TGVuZ3RoOiAuLi4gfSlcbiAgLy8gICAgICAgb3V0cHV0TGVuZ3RoIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb3B5KCkgZm9yIGEgc2hha2UyNTYgaGFzaCB0byBiZWhhdmUgY29ycmVjdGx5LlxuICAvLyAgICAgICBPbiB0aGUgb3RoZXIgaGFuZCwgc2luY2UgaXQncyB2ZXJ5IGxpa2VseSB0aGF0IHRoZSBmaXJzdCBoYXNoIHdpbGwgZmFsbCBpbiB0aGUgZGVzaXJlZCByYW5nZSwgdXNpbmdcbiAgLy8gICAgICAgSGFzaC5jb3B5KCkgdG8gc2F2ZSBvbiByZXBlYXRlZCBjYWxsaW5nIHVwZGF0ZShgJHtOfSQke3d9JGApIG1heSBub3QgYmUgd29ydGggaXQuXG4gIHJldHVybiBjcmVhdGVIYXNoKCdzaGFrZTI1NicsIHsgb3V0cHV0TGVuZ3RoOiAxICsgTWF0aC5mbG9vcigoYml0TGVuZ3RoKE9SREVSKSArIDcpIC8gOCkgfSlcbiAgICAudXBkYXRlKGJpZ0ludFRvQnVmZmVyQkUoTikpXG4gICAgLnVwZGF0ZSgnJCcpXG4gICAgLnVwZGF0ZShiaWdJbnRUb0J1ZmZlckJFKHcpKVxuICAgIC51cGRhdGUoJyQnKVxuICAgIC51cGRhdGUobm9uY2UpXG4gICAgLmRpZ2VzdCgpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIHBzZXVkby1yYW5kb20gY2hhbGxlbmdlIHZhbHVlICRlJCBhbmQgYXNzb2NpYXRlZCAkbm9uY2UkIGZvciAkKE4sIHcpJC5cbiAqIEBwYXJhbSBOIC0gdGhlIHByaW1lIG51bWJlciB0byB2ZXJpZnkgaXMgYSBwcm9kdWN0IG9mIHR3byBsYXJnZSBwcmltZXMuXG4gKiBAcGFyYW0gdyAtIGEgcmFuZG9tIG51bWJlciB3aXRoIHRoZSBzYW1lIGJpdExlbmd0aCBhcyBOLCB0aGF0IHNhdGlzZmllcyB0aGUgSmFjb2JpIG9mIHcgaXMgLTEgd3J0IE4uXG4gKiBAcmV0dXJucyB7bm9uY2UsIGV9IC0gY2hhbGxlbmdlIHZhbHVlICRlJCBhbmQgYXNzb2NpYXRlZCAkbm9uY2UkIHRoYXQgbWFrZXMgJGUkIHVuaWZvcm1seSByYW5kb20gZnJvbSAkKC1vcmRlciwgb3JkZXIpJC5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVFZm9yUHJvdmUoTjogYmlnaW50LCB3OiBiaWdpbnQpOiB7IG5vbmNlOiBCdWZmZXI7IGU6IGJpZ2ludCB9IHtcbiAgbGV0IG5vbmNlOiBCdWZmZXIsIGU6IGJpZ2ludCwgZGlnZXN0OiBCdWZmZXI7XG4gIGRvIHtcbiAgICBub25jZSA9IHJhbmRvbUJ5dGVzKDMzKTtcbiAgICBkaWdlc3QgPSBoYXNoKE4sIHcsIG5vbmNlKTtcbiAgICBlID0gYmlnSW50RnJvbUJ1ZmZlckJFKGRpZ2VzdC5zdWJhcnJheSgxKSk7XG4gIH0gd2hpbGUgKGUgPj0gT1JERVIpO1xuICBpZiAoZGlnZXN0WzBdICYgMSkge1xuICAgIHJldHVybiB7IG5vbmNlLCBlOiAtZSB9O1xuICB9XG4gIHJldHVybiB7IG5vbmNlLCBlIH07XG59XG5cbi8qKlxuICogR2VuZXJhdGUgcHNldWRvLXJhbmRvbSBjaGFsbGVuZ2UgdmFsdWUgJGUkIGZvciAkKE4sIHcpJCBhbmQgYXNzb2NpYXRlZCAkbm9uY2UkLlxuICogQHBhcmFtIE4gLSB0aGUgcHJpbWUgbnVtYmVyIHRvIHZlcmlmeSBpcyBhIHByb2R1Y3Qgb2YgdHdvIGxhcmdlIHByaW1lcy5cbiAqIEBwYXJhbSB3IC0gYSByYW5kb20gbnVtYmVyIHdpdGggdGhlIHNhbWUgYml0TGVuZ3RoIGFzIE4sIHRoYXQgc2F0aXNmaWVzIHRoZSBKYWNvYmkgb2YgdyBpcyAtMSB3cnQgTi5cbiAqIEBwYXJhbSBub25jZSAtIGEgcmFuZG9tIG5vbmNlLlxuICogQHJldHVybnMge2JpZ2ludH0gLSBjaGFsbGVuZ2UgdmFsdWUgJGUkLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZUVmb3JWZXJpZnkoTjogYmlnaW50LCB3OiBiaWdpbnQsIG5vbmNlOiBCdWZmZXIpOiBiaWdpbnQge1xuICBjb25zdCBkaWdlc3QgPSBoYXNoKE4sIHcsIG5vbmNlKTtcbiAgY29uc3QgZSA9IGJpZ0ludEZyb21CdWZmZXJCRShkaWdlc3Quc3ViYXJyYXkoMSkpO1xuICBpZiAoZGlnZXN0WzBdICYgMSkge1xuICAgIHJldHVybiAtZTtcbiAgfVxuICByZXR1cm4gZTtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGNsb3Nlc3QgaW50ZWdlciBzcXVhcmUgcm9vdCBvZiAkbiQuXG4gKiBAcGFyYW0gbiAtIHRoZSBudW1iZXIgdG8gY2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdCBvZi5cbiAqIEByZXR1cm5zIHtiaWdpbnR9IC0gJG4kJ3MgY2xvc2VzdCBpbnRlZ2VyIHNxdWFyZSByb290LlxuICovXG5mdW5jdGlvbiBpc3FydChuOiBiaWdpbnQpOiBiaWdpbnQge1xuICBpZiAobiA8IEJpZ0ludCgwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9XG4gIGlmIChuIDwgQmlnSW50KDIpKSB7XG4gICAgcmV0dXJuIG47XG4gIH1cbiAgZnVuY3Rpb24gbmV3dG9uSXRlcmF0aW9uKG46IGJpZ2ludCwgeDA6IGJpZ2ludCkge1xuICAgIGNvbnN0IHgxID0gKG4gLyB4MCArIHgwKSA+PiBCaWdJbnQoMSk7XG4gICAgaWYgKHgwID09PSB4MSB8fCB4MCA9PT0geDEgLSBCaWdJbnQoMSkpIHtcbiAgICAgIHJldHVybiB4MDtcbiAgICB9XG4gICAgcmV0dXJuIG5ld3Rvbkl0ZXJhdGlvbihuLCB4MSk7XG4gIH1cbiAgcmV0dXJuIG5ld3Rvbkl0ZXJhdGlvbihuLCBCaWdJbnQoMSkpO1xufVxuXG4vKipcbiAqIFByb3ZlIHRoYXQgJG4wJCBoYXMgbm8gc21hbGwgZmFjdG9ycywgd2hlcmUgJG4wJCBpcyB0aGUgcHJvZHVjdCBvZiB0d28gbGFyZ2UgcHJpbWVzLlxuICogQHBhcmFtIHAgLSBhIGxhcmdlIHByaW1lLlxuICogQHBhcmFtIHEgLSBhIGxhcmdlIHByaW1lLlxuICogQHBhcmFtIHcgLSBhIHJhbmRvbSBudW1iZXIgd2l0aCB0aGUgc2FtZSBiaXRMZW5ndGggYXMgJHAgKiBxJCwgdGhhdCBzYXRpc2ZpZXMgdGhlIEphY29iaSBvZiB3IGlzIC0xIHdydCAkbjAkLlxuICogQHBhcmFtIG5IYXQgLSBhIHNhZmUgYmktcHJpbWUsIHN1Y2ggYXMgdGhhdCByZXR1cm5lZCBmcm9tIHJhbmdlUHJvb2YuZ2VuZXJhdGVOVGlsZGUuXG4gKiBAcGFyYW0gcyAtIHNlY3VyaXR5IHBhcmFtZXRlcnMgZm9yICRuSGF0JCBzdWNoIGFzIHRoZSAkaDEkIHZhbHVlIHJldHVybmVkIGZyb20gcmFuZ2VQcm9vZi5nZW5lcmF0ZU5UaWxkZS5cbiAqIEBwYXJhbSB0IC0gc2VjdXJpdHkgcGFyYW1ldGVycyBmb3IgJG5IYXQkIHN1Y2ggYXMgdGhlICRoMiQgdmFsdWUgcmV0dXJuZWQgZnJvbSByYW5nZVByb29mLmdlbmVyYXRlTlRpbGRlLlxuICogQHJldHVybnMgcHJvb2YgdGhhdCB0aGUgcHJvZHVjdCBvZiAkcCAqIHEkIGhhcyBubyBzbWFsbCBmYWN0b3JzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmUoXG4gIHA6IGJpZ2ludCxcbiAgcTogYmlnaW50LFxuICB3OiBiaWdpbnQsXG4gIG5IYXQ6IGJpZ2ludCxcbiAgczogYmlnaW50LFxuICB0OiBiaWdpbnRcbik6IERlc2VyaWFsaXplZE5vU21hbGxGYWN0b3JzUHJvb2Yge1xuICBjb25zdCBuMCA9IHAgKiBxO1xuICBjb25zdCB7IG5vbmNlLCBlIH0gPSBnZW5lcmF0ZUVmb3JQcm92ZShuMCwgdyk7XG4gIGNvbnN0IHNxcnROMCA9IGlzcXJ0KG4wKTtcbiAgY29uc3QgYWxwaGEgPSByYW5kQmV0d2VlbihzcXJ0TjAgPDwgKEVMTCArIEVQU0lMT04pLCAtc3FydE4wIDw8IChFTEwgKyBFUFNJTE9OKSk7XG4gIGNvbnN0IGJldGEgPSByYW5kQmV0d2VlbihzcXJ0TjAgPDwgKEVMTCArIEVQU0lMT04pLCAtc3FydE4wIDw8IChFTEwgKyBFUFNJTE9OKSk7XG4gIGNvbnN0IHJobyA9IHJhbmRCZXR3ZWVuKChuSGF0ICogbjApIDw8IEVMTCwgLShuSGF0ICogbjApIDw8IEVMTCk7XG4gIC8vIENvbW1pdCB0byBwLlxuICBjb25zdCBtdSA9IHJhbmRCZXR3ZWVuKG5IYXQgPDwgRUxMLCAtbkhhdCA8PCBFTEwpO1xuICBjb25zdCBQID0gKG1vZFBvdyhzLCBwLCBuSGF0KSAqIG1vZFBvdyh0LCBtdSwgbkhhdCkpICUgbkhhdDtcbiAgLy8gQ29tbWl0IHRvIHEuXG4gIGNvbnN0IG51ID0gcmFuZEJldHdlZW4obkhhdCA8PCBFTEwsIC1uSGF0IDw8IEVMTCk7XG4gIGNvbnN0IFEgPSAobW9kUG93KHMsIHEsIG5IYXQpICogbW9kUG93KHQsIG51LCBuSGF0KSkgJSBuSGF0O1xuICAvLyBDb21taXQgdG8gYWxwaGEuXG4gIGNvbnN0IHggPSByYW5kQmV0d2VlbihuSGF0IDw8IChFTEwgKyBFUFNJTE9OKSwgLW5IYXQgPDwgKEVMTCArIEVQU0lMT04pKTtcbiAgY29uc3QgQSA9IChtb2RQb3cocywgYWxwaGEsIG5IYXQpICogbW9kUG93KHQsIHgsIG5IYXQpKSAlIG5IYXQ7XG4gIC8vIENvbW1pdCB0byBiZXRhLlxuICBjb25zdCB5ID0gcmFuZEJldHdlZW4obkhhdCA8PCAoRUxMICsgRVBTSUxPTiksIC1uSGF0IDw8IChFTEwgKyBFUFNJTE9OKSk7XG4gIGNvbnN0IEIgPSAobW9kUG93KHMsIGJldGEsIG5IYXQpICogbW9kUG93KHQsIHksIG5IYXQpKSAlIG5IYXQ7XG4gIC8vIENvbW1pdCB0byBRIGFuZCBhbHBoYS5cbiAgY29uc3QgciA9IHJhbmRCZXR3ZWVuKChuSGF0ICogbjApIDw8IChFTEwgKyBFUFNJTE9OKSwgLShuSGF0ICogbjApIDw8IChFTEwgKyBFUFNJTE9OKSk7XG4gIGNvbnN0IFQgPSAobW9kUG93KFEsIGFscGhhLCBuSGF0KSAqIG1vZFBvdyh0LCByLCBuSGF0KSkgJSBuSGF0O1xuXG4gIGNvbnN0IHJob0hhdCA9IHJobyAtIG51ICogcDtcbiAgY29uc3QgejEgPSBhbHBoYSArIGUgKiBwO1xuICBjb25zdCB6MiA9IGJldGEgKyBlICogcTtcbiAgY29uc3QgdzEgPSB4ICsgZSAqIG11O1xuICBjb25zdCB3MiA9IHkgKyBlICogbnU7XG4gIGNvbnN0IHYgPSByICsgZSAqIHJob0hhdDtcblxuICByZXR1cm4geyBQLCBRLCBBLCBCLCBULCByaG8sIHoxLCB6MiwgdzEsIHcyLCB2LCBub25jZTogYmlnSW50RnJvbUJ1ZmZlckJFKG5vbmNlKSB9O1xufVxuXG4vKipcbiAqIFZlcmlmeSB0aGF0ICRuMCQgaXMgbm90IHRoZSBwcm9kdWN0IG9mIGFueSBzbWFsbCBmYWN0b3JzLlxuICogQHBhcmFtIG4wIC0gYSBtb2R1bHVzIHRoYXQgaXMgdGhlIHByb2R1Y3Qgb2YgJHAkIGFuZCAkcSQuXG4gKiBAcGFyYW0gdyAtIGEgcmFuZG9tIG51bWJlciB3aXRoIHRoZSBzYW1lIGJpdExlbmd0aCBhcyAkbjAkLCB0aGF0IHNhdGlzZmllcyB0aGUgSmFjb2JpIG9mIHcgaXMgLTEgd3J0ICRuMCQuXG4gKiBAcGFyYW0gbkhhdCAtIGEgc2FmZSBiaS1wcmltZSwgc3VjaCBhcyB0aGF0IHJldHVybmVkIGZyb20gcmFuZ2VQcm9vZi5nZW5lcmF0ZU5UaWxkZS5cbiAqIEBwYXJhbSBzIC0gc2VjdXJpdHkgcGFyYW1ldGVycyBmb3IgJG5IYXQkIHN1Y2ggYXMgdGhlICRoMSQgdmFsdWUgcmV0dXJuZWQgZnJvbSByYW5nZVByb29mLmdlbmVyYXRlTlRpbGRlLlxuICogQHBhcmFtIHQgLSBzZWN1cml0eSBwYXJhbWV0ZXJzIGZvciAkbkhhdCQgc3VjaCBhcyB0aGUgJGgyJCB2YWx1ZSByZXR1cm5lZCBmcm9tIHJhbmdlUHJvb2YuZ2VuZXJhdGVOVGlsZGUuXG4gKiBAcGFyYW0gcHJvb2YgLSBhIHByb29mIGdlbmVyYXRlZCBieSBub1NtYWxsRmFjdG9ycy5wcm92ZS5cbiAqIEByZXR1cm5zIHRydWUgaWYgdmVyaWZpY2F0aW9uIHN1Y2Nlc3NmdWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnkoXG4gIG4wOiBiaWdpbnQsXG4gIHc6IGJpZ2ludCxcbiAgbkhhdDogYmlnaW50LFxuICBzOiBiaWdpbnQsXG4gIHQ6IGJpZ2ludCxcbiAgcHJvb2Y6IERlc2VyaWFsaXplZE5vU21hbGxGYWN0b3JzUHJvb2Zcbik6IGJvb2xlYW4ge1xuICBjb25zdCB7IFAsIFEsIEEsIEIsIFQsIHJobywgejEsIHoyLCB3MSwgdzIsIHYsIG5vbmNlIH0gPSBwcm9vZjtcbiAgY29uc3QgZSA9IGdlbmVyYXRlRWZvclZlcmlmeShuMCwgdywgYmlnSW50VG9CdWZmZXJCRShub25jZSwgMzMpKTtcbiAgaWYgKGUgPCAtT1JERVIgfHwgZSA+IE9SREVSKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgdmVyaWZ5IG5vIHNtYWxsIGZhY3RvcnMgcHJvb2YnKTtcbiAgfVxuICBjb25zdCBzcXJ0TjAgPSBpc3FydChuMCk7XG4gIGNvbnN0IFIgPSAobW9kUG93KHMsIG4wLCBuSGF0KSAqIG1vZFBvdyh0LCByaG8sIG5IYXQpKSAlIG5IYXQ7XG4gIGlmICgobW9kUG93KHMsIHoxLCBuSGF0KSAqIG1vZFBvdyh0LCB3MSwgbkhhdCkpICUgbkhhdCAhPT0gKEEgKiBtb2RQb3coUCwgZSwgbkhhdCkpICUgbkhhdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHZlcmlmeSBubyBzbWFsbCBmYWN0b3JzIHByb29mJyk7XG4gIH1cbiAgaWYgKChtb2RQb3cocywgejIsIG5IYXQpICogbW9kUG93KHQsIHcyLCBuSGF0KSkgJSBuSGF0ICE9PSAoQiAqIG1vZFBvdyhRLCBlLCBuSGF0KSkgJSBuSGF0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgdmVyaWZ5IG5vIHNtYWxsIGZhY3RvcnMgcHJvb2YnKTtcbiAgfVxuICBpZiAoKG1vZFBvdyhRLCB6MSwgbkhhdCkgKiBtb2RQb3codCwgdiwgbkhhdCkpICUgbkhhdCAhPT0gKFQgKiBtb2RQb3coUiwgZSwgbkhhdCkpICUgbkhhdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IHZlcmlmeSBubyBzbWFsbCBmYWN0b3JzIHByb29mJyk7XG4gIH1cbiAgaWYgKHoxIDwgLXNxcnROMCA8PCAoRUxMICsgRVBTSUxPTikgfHwgejEgPiBzcXJ0TjAgPDwgKEVMTCArIEVQU0lMT04pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgdmVyaWZ5IG5vIHNtYWxsIGZhY3RvcnMgcHJvb2YnKTtcbiAgfVxuICBpZiAoejIgPCAtc3FydE4wIDw8IChFTEwgKyBFUFNJTE9OKSB8fCB6MiA+IHNxcnROMCA8PCAoRUxMICsgRVBTSUxPTikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCB2ZXJpZnkgbm8gc21hbGwgZmFjdG9ycyBwcm9vZicpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIl19
@@ -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, ab, 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;AA4ExD;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,6BAA6B,CAAC,CA+CxF;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,6BAA6B,GAAG,OAAO,CAAC,OAAO,CAAC,CAsCxG"}
@@ -0,0 +1,174 @@
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((_, i) => {
23
+ while (true) {
24
+ const counterBuf = Buffer.alloc(4);
25
+ counterBuf.writeUInt32BE(counter++);
26
+ const y = util_1.bigIntFromBufferBE(crypto_1.createHash('shake256', { outputLength: NBuf.length })
27
+ .update(counterBuf)
28
+ .update('$')
29
+ .update(NBuf)
30
+ .update('$')
31
+ .update(wBuf)
32
+ .update('$')
33
+ .digest());
34
+ if (y > BigInt(0) && y < N && bigint_mod_arith_1.gcd(y, N) === BigInt(1)) {
35
+ return y;
36
+ }
37
+ }
38
+ });
39
+ }
40
+ // https://en.wikipedia.org/wiki/Jacobi_symbol#Implementation_in_C++
41
+ function jacobi(a, n) {
42
+ // a/n is represented as (a,n)
43
+ if (n <= BigInt(0)) {
44
+ throw new Error('n must greater than 0');
45
+ }
46
+ if (n % BigInt(2) !== BigInt(1)) {
47
+ throw new Error('n must be odd');
48
+ }
49
+ // step 1
50
+ a = a % n;
51
+ let t = BigInt(1);
52
+ let r;
53
+ // step 3
54
+ while (a !== BigInt(0)) {
55
+ // step 2
56
+ while (a % BigInt(2) === BigInt(0)) {
57
+ a /= BigInt(2);
58
+ r = n % BigInt(8);
59
+ if (r === BigInt(3) || r === BigInt(5)) {
60
+ t = -t;
61
+ }
62
+ }
63
+ // step 4
64
+ r = n;
65
+ n = a;
66
+ a = r;
67
+ if (a % BigInt(4) === BigInt(3) && n % BigInt(4) === BigInt(3)) {
68
+ t = -t;
69
+ }
70
+ a = a % n;
71
+ }
72
+ if (n === BigInt(1)) {
73
+ return t;
74
+ }
75
+ return BigInt(0);
76
+ }
77
+ /**
78
+ * Prove that a modulus (p*q) is the product of two large safe primes (p and q).
79
+ * @param {bigint} p The larger prime factor of the modulus
80
+ * @param {bigint} q The smaller prime factor of the modulus.
81
+ * @returns {DeserializedPaillierBlumProof} The proof that the modulus is the product of two large primes.
82
+ */
83
+ async function prove(p, q) {
84
+ // Prover selects random w with Jacobi symbol 1 wrt N.
85
+ const N = p * q;
86
+ const l = (p - BigInt(1)) * (q - BigInt(1));
87
+ const d = bigint_mod_arith_1.modInv(N, l);
88
+ let w;
89
+ while (true) {
90
+ w = util_1.bigIntFromBufferBE(Buffer.from(await bigint_crypto_utils_1.randBits(bigint_crypto_utils_1.bitLength(N))));
91
+ if (jacobi(w, N) === BigInt(-1)) {
92
+ break;
93
+ }
94
+ }
95
+ // This is calculating the inverse of the function y^4 mod N,
96
+ // i.e.y ^ (1 / 4), where N = pq is a blum integer using HOC - Fact 2.160
97
+ // from cacr.uwaterloo.ca / hac / about / chap2.pdf
98
+ // Prover generates a_i, b_i, and y_i.
99
+ const y = generateY(N, w);
100
+ // Prover calculates z_i = y_i ^ d mod N
101
+ const z = y.map((y_i) => bigint_mod_arith_1.modPow(y_i, d, N));
102
+ // Prover calculates x_i = y_i ^ 1/4 mod N using [HOC - Fact 2.160]
103
+ const e = ((l + BigInt(4)) / BigInt(8)) ** BigInt(2);
104
+ const ab = Array(m).fill(null);
105
+ const x = await Promise.all(y.map(async (y_i, i) => {
106
+ // Select random a_i, b_i so that y_i' = (-1)^{a_i} * w^{b_i} * y is
107
+ // quadratic residue of N using [HOC - Fact 2.137].
108
+ let ab_i, t;
109
+ for (ab_i = 0; ab_i < 4; ab_i++) {
110
+ t = y_i;
111
+ if (ab_i & 2) {
112
+ t = -t;
113
+ }
114
+ if (ab_i & 1) {
115
+ t *= w;
116
+ }
117
+ if (bigint_mod_arith_1.modPow(t, (p - BigInt(1)) / BigInt(2), p) === BigInt(1) &&
118
+ bigint_mod_arith_1.modPow(t, (q - BigInt(1)) / BigInt(2), q) === BigInt(1)) {
119
+ break;
120
+ }
121
+ }
122
+ ab[i] = ab_i;
123
+ return bigint_mod_arith_1.modPow(t, e, N);
124
+ }));
125
+ return { w, ab, x, z };
126
+ }
127
+ exports.prove = prove;
128
+ /**
129
+ * Verify that N is the product of two large primes.
130
+ * @param {bigint} N The prime number being verified.
131
+ * @param {DeserializedPaillierBlumProof} The proof to verify N is a product of two large primes.
132
+ * @returns {boolean} True if N is a product of two large primes, and false otherwise.
133
+ */
134
+ async function verify(N, { w, ab, x, z }) {
135
+ // Verifier checks N > 1.
136
+ if (N <= 1) {
137
+ throw new Error('N must be greater than 1');
138
+ }
139
+ // Verifier checks N is odd.
140
+ if (N % BigInt(2) !== BigInt(1)) {
141
+ throw new Error('N must be an odd number');
142
+ }
143
+ // Verifier checks N is not prime.
144
+ if (await bigint_crypto_utils_1.isProbablyPrime(N, 24)) {
145
+ throw new Error('N must be a composite number');
146
+ }
147
+ // Verifier checks that the Jacobi symbol for w is 1 wrt N.
148
+ if (jacobi(w, N) !== BigInt(-1)) {
149
+ throw new Error('Jacobi symbol of w must be -1 wrt to N');
150
+ }
151
+ // Verifier generates a_i, b_i, y_i.
152
+ const y = generateY(N, w);
153
+ for (let i = 0; i < m; i++) {
154
+ // Verifier checks z_i ^ N mod N == y_i.
155
+ if (bigint_mod_arith_1.modPow(z[i], N, N) !== y[i]) {
156
+ throw new Error(`Paillier verification of z[${i}] failed`);
157
+ }
158
+ // Verifier checks x_i ^ 4 mod N == (-1)^a * w^b * y_i.
159
+ let y_i = y[i];
160
+ if (ab[i] & 2) {
161
+ y_i = -y_i;
162
+ }
163
+ if (ab[i] & 1) {
164
+ y_i *= w;
165
+ }
166
+ y_i = bigint_mod_arith_1.modPow(y_i, 1, N);
167
+ if (bigint_mod_arith_1.modPow(x[i], 4, N) !== y_i) {
168
+ throw new Error(`Paillier verification of x[${i}] failed`);
169
+ }
170
+ }
171
+ return true;
172
+ }
173
+ exports.verify = verify;
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbGxpZXJCbHVtUHJvb2YuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhL3BhaWxsaWVyQmx1bVByb29mLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFvQztBQUNwQyw2REFBMkU7QUFDM0UsdURBQXVEO0FBQ3ZELHFDQUFrRTtBQUdsRSxzQkFBc0I7QUFDdEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRWI7Ozs7O0dBS0c7QUFDSCxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNyQixNQUFNLElBQUksR0FBRyx1QkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLElBQUksR0FBRyx1QkFBZ0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDWixJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ1osT0FBTyxJQUFJLEVBQUU7WUFDWCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNwQyxNQUFNLENBQUMsR0FBRyx5QkFBa0IsQ0FDMUIsbUJBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2lCQUNsRCxNQUFNLENBQUMsVUFBVSxDQUFDO2lCQUNsQixNQUFNLENBQUMsR0FBRyxDQUFDO2lCQUNYLE1BQU0sQ0FBQyxJQUFJLENBQUM7aUJBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQztpQkFDWCxNQUFNLENBQUMsSUFBSSxDQUFDO2lCQUNaLE1BQU0sQ0FB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QzVEO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUF0Q0Qsd0JBc0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyBiaXRMZW5ndGgsIHJhbmRCaXRzLCBpc1Byb2JhYmx5UHJpbWUgfSBmcm9tICdiaWdpbnQtY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IGdjZCwgbW9kSW52LCBtb2RQb3cgfSBmcm9tICdiaWdpbnQtbW9kLWFyaXRoJztcbmltcG9ydCB7IGJpZ0ludEZyb21CdWZmZXJCRSwgYmlnSW50VG9CdWZmZXJCRSB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkUGFpbGxpZXJCbHVtUHJvb2YgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gU2VjdXJpdHkgcGFyYW1ldGVyLlxuY29uc3QgbSA9IDgwO1xuXG4vKipcbiAqIEdlbmVyYXRlIHBzdWVkby1yYW5kb20gcXVhZHJhdGljIHJlc2lkdWUgZm9yIChOLCB3LCBpKS5cbiAqIEBwYXJhbSBOIC0gdGhlIHByaW1lIG51bWJlciB0byB2ZXJpZnkgaXMgYSBwcm9kdWN0IG9mIHR3byBsYXJnZSBwcmltZXMuXG4gKiBAcGFyYW0gdyAtIGEgcmFuZG9tIG51bWJlciB3aXRoIHRoZSBzYW1lIGJpdExlbmd0aCBhcyBOLCB0aGF0IHNhdGlzZmllcyB0aGUgSmFjb2JpIG9mIHcgaXMgLTEgd3J0IE4uXG4gKiBAcmV0dXJucyB7YmlnaW50W119IC0gc2V0IG9mIGNoYWxsZW5nZXMgZm9yIE5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVZKE4sIHcpOiBiaWdpbnRbXSB7XG4gIGNvbnN0IE5CdWYgPSBiaWdJbnRUb0J1ZmZlckJFKE4pO1xuICBjb25zdCB3QnVmID0gYmlnSW50VG9CdWZmZXJCRSh3LCBOQnVmLmxlbmd0aCk7XG4gIGxldCBjb3VudGVyID0gMDtcbiAgcmV0dXJuIEFycmF5KG0pXG4gICAgLmZpbGwobnVsbClcbiAgICAubWFwKChfLCBpKSA9PiB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBjb3VudGVyQnVmID0gQnVmZmVyLmFsbG9jKDQpO1xuICAgICAgICBjb3VudGVyQnVmLndyaXRlVUludDMyQkUoY291bnRlcisrKTtcbiAgICAgICAgY29uc3QgeSA9IGJpZ0ludEZyb21CdWZmZXJCRShcbiAgICAgICAgICBjcmVhdGVIYXNoKCdzaGFrZTI1NicsIHsgb3V0cHV0TGVuZ3RoOiBOQnVmLmxlbmd0aCB9KVxuICAgICAgICAgICAgLnVwZGF0ZShjb3VudGVyQnVmKVxuICAgICAgICAgICAgLnVwZGF0ZSgnJCcpXG4gICAgICAgICAgICAudXBkYXRlKE5CdWYpXG4gICAgICAgICAgICAudXBkYXRlKCckJylcbiAgICAgICAgICAgIC51cGRhdGUod0J1ZilcbiAgICAgICAgICAgIC51cGRhdGUoJyQnKVxuICAgICAgICAgICAgLmRpZ2VzdCgpXG4gICAgICAgICk7XG4gICAgICAgIGlmICh5ID4gQmlnSW50KDApICYmIHkgPCBOICYmIGdjZCh5LCBOKSA9PT0gQmlnSW50KDEpKSB7XG4gICAgICAgICAgcmV0dXJuIHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbn1cblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmFjb2JpX3N5bWJvbCNJbXBsZW1lbnRhdGlvbl9pbl9DKytcbmZ1bmN0aW9uIGphY29iaShhLCBuKTogYmlnaW50IHtcbiAgLy8gYS9uIGlzIHJlcHJlc2VudGVkIGFzIChhLG4pXG4gIGlmIChuIDw9IEJpZ0ludCgwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbiBtdXN0IGdyZWF0ZXIgdGhhbiAwJyk7XG4gIH1cbiAgaWYgKG4gJSBCaWdJbnQoMikgIT09IEJpZ0ludCgxKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignbiBtdXN0IGJlIG9kZCcpO1xuICB9XG4gIC8vIHN0ZXAgMVxuICBhID0gYSAlIG47XG4gIGxldCB0ID0gQmlnSW50KDEpO1xuICBsZXQgcjtcbiAgLy8gc3RlcCAzXG4gIHdoaWxlIChhICE9PSBCaWdJbnQoMCkpIHtcbiAgICAvLyBzdGVwIDJcbiAgICB3aGlsZSAoYSAlIEJpZ0ludCgyKSA9PT0gQmlnSW50KDApKSB7XG4gICAgICBhIC89IEJpZ0ludCgyKTtcbiAgICAgIHIgPSBuICUgQmlnSW50KDgpO1xuICAgICAgaWYgKHIgPT09IEJpZ0ludCgzKSB8fCByID09PSBCaWdJbnQoNSkpIHtcbiAgICAgICAgdCA9IC10O1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBzdGVwIDRcbiAgICByID0gbjtcbiAgICBuID0gYTtcbiAgICBhID0gcjtcbiAgICBpZiAoYSAlIEJpZ0ludCg0KSA9PT0gQmlnSW50KDMpICYmIG4gJSBCaWdJbnQoNCkgPT09IEJpZ0ludCgzKSkge1xuICAgICAgdCA9IC10O1xuICAgIH1cbiAgICBhID0gYSAlIG47XG4gIH1cbiAgaWYgKG4gPT09IEJpZ0ludCgxKSkge1xuICAgIHJldHVybiB0O1xuICB9XG4gIHJldHVybiBCaWdJbnQoMCk7XG59XG5cbi8qKlxuICogUHJvdmUgdGhhdCBhIG1vZHVsdXMgKHAqcSkgaXMgdGhlIHByb2R1Y3Qgb2YgdHdvIGxhcmdlIHNhZmUgcHJpbWVzIChwIGFuZCBxKS5cbiAqIEBwYXJhbSB7YmlnaW50fSBwIFRoZSBsYXJnZXIgcHJpbWUgZmFjdG9yIG9mIHRoZSBtb2R1bHVzXG4gKiBAcGFyYW0ge2JpZ2ludH0gcSBUaGUgc21hbGxlciBwcmltZSBmYWN0b3Igb2YgdGhlIG1vZHVsdXMuXG4gKiBAcmV0dXJucyB7RGVzZXJpYWxpemVkUGFpbGxpZXJCbHVtUHJvb2Z9IFRoZSBwcm9vZiB0aGF0IHRoZSBtb2R1bHVzIGlzIHRoZSBwcm9kdWN0IG9mIHR3byBsYXJnZSBwcmltZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm92ZShwOiBiaWdpbnQsIHE6IGJpZ2ludCk6IFByb21pc2U8RGVzZXJpYWxpemVkUGFpbGxpZXJCbHVtUHJvb2Y+IHtcbiAgLy8gUHJvdmVyIHNlbGVjdHMgcmFuZG9tIHcgd2l0aCBKYWNvYmkgc3ltYm9sIDEgd3J0IE4uXG4gIGNvbnN0IE4gPSBwICogcTtcbiAgY29uc3QgbCA9IChwIC0gQmlnSW50KDEpKSAqIChxIC0gQmlnSW50KDEpKTtcbiAgY29uc3QgZCA9IG1vZEludihOLCBsKTtcbiAgbGV0IHc7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdyA9IGJpZ0ludEZyb21CdWZmZXJCRShCdWZmZXIuZnJvbShhd2FpdCByYW5kQml0cyhiaXRMZW5ndGgoTikpKSk7XG4gICAgaWYgKGphY29iaSh3LCBOKSA9PT0gQmlnSW50KC0xKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIC8vIFRoaXMgaXMgY2FsY3VsYXRpbmcgdGhlIGludmVyc2Ugb2YgdGhlIGZ1bmN0aW9uIHleNCBtb2QgTixcbiAgLy8gaS5lLnkgXiAoMSAvIDQpLCB3aGVyZSBOID0gcHEgaXMgYSBibHVtIGludGVnZXIgdXNpbmcgSE9DIC0gRmFjdCAyLjE2MFxuICAvLyBmcm9tIGNhY3IudXdhdGVybG9vLmNhIC8gaGFjIC8gYWJvdXQgLyBjaGFwMi5wZGZcbiAgLy8gUHJvdmVyIGdlbmVyYXRlcyBhX2ksIGJfaSwgYW5kIHlfaS5cbiAgY29uc3QgeSA9IGdlbmVyYXRlWShOLCB3KTtcbiAgLy8gUHJvdmVyIGNhbGN1bGF0ZXMgel9pID0geV9pIF4gZCBtb2QgTlxuICBjb25zdCB6ID0geS5tYXAoKHlfaSkgPT4gbW9kUG93KHlfaSwgZCwgTikpO1xuICAvLyBQcm92ZXIgY2FsY3VsYXRlcyB4X2kgPSB5X2kgXiAxLzQgbW9kIE4gdXNpbmcgW0hPQyAtIEZhY3QgMi4xNjBdXG4gIGNvbnN0IGUgPSAoKGwgKyBCaWdJbnQoNCkpIC8gQmlnSW50KDgpKSAqKiBCaWdJbnQoMik7XG4gIGNvbnN0IGFiID0gQXJyYXkobSkuZmlsbChudWxsKTtcbiAgY29uc3QgeCA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHkubWFwKGFzeW5jICh5X2ksIGkpID0+IHtcbiAgICAgIC8vIFNlbGVjdCByYW5kb20gYV9pLCBiX2kgc28gdGhhdCB5X2knID0gKC0xKV57YV9pfSAqIHdee2JfaX0gKiB5IGlzXG4gICAgICAvLyBxdWFkcmF0aWMgcmVzaWR1ZSBvZiBOIHVzaW5nIFtIT0MgLSBGYWN0IDIuMTM3XS5cbiAgICAgIGxldCBhYl9pLCB0O1xuICAgICAgZm9yIChhYl9pID0gMDsgYWJfaSA8IDQ7IGFiX2krKykge1xuICAgICAgICB0ID0geV9pO1xuICAgICAgICBpZiAoYWJfaSAmIDIpIHtcbiAgICAgICAgICB0ID0gLXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFiX2kgJiAxKSB7XG4gICAgICAgICAgdCAqPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBtb2RQb3codCwgKHAgLSBCaWdJbnQoMSkpIC8gQmlnSW50KDIpLCBwKSA9PT0gQmlnSW50KDEpICYmXG4gICAgICAgICAgbW9kUG93KHQsIChxIC0gQmlnSW50KDEpKSAvIEJpZ0ludCgyKSwgcSkgPT09IEJpZ0ludCgxKVxuICAgICAgICApIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYWJbaV0gPSBhYl9pO1xuICAgICAgcmV0dXJuIG1vZFBvdyh0LCBlLCBOKTtcbiAgICB9KVxuICApO1xuICByZXR1cm4geyB3LCBhYiwgeCwgeiB9O1xufVxuXG4vKipcbiAqIFZlcmlmeSB0aGF0IE4gaXMgdGhlIHByb2R1Y3Qgb2YgdHdvIGxhcmdlIHByaW1lcy5cbiAqIEBwYXJhbSB7YmlnaW50fSBOIFRoZSBwcmltZSBudW1iZXIgYmVpbmcgdmVyaWZpZWQuXG4gKiBAcGFyYW0ge0Rlc2VyaWFsaXplZFBhaWxsaWVyQmx1bVByb29mfSBUaGUgcHJvb2YgdG8gdmVyaWZ5IE4gaXMgYSBwcm9kdWN0IG9mIHR3byBsYXJnZSBwcmltZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBOIGlzIGEgcHJvZHVjdCBvZiB0d28gbGFyZ2UgcHJpbWVzLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5KE46IGJpZ2ludCwgeyB3LCBhYiwgeCwgeiB9OiBEZXNlcmlhbGl6ZWRQYWlsbGllckJsdW1Qcm9vZik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAvLyBWZXJpZmllciBjaGVja3MgTiA+IDEuXG4gIGlmIChOIDw9IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ04gbXVzdCBiZSBncmVhdGVyIHRoYW4gMScpO1xuICB9XG4gIC8vIFZlcmlmaWVyIGNoZWNrcyBOIGlzIG9kZC5cbiAgaWYgKE4gJSBCaWdJbnQoMikgIT09IEJpZ0ludCgxKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignTiBtdXN0IGJlIGFuIG9kZCBudW1iZXInKTtcbiAgfVxuICAvLyBWZXJpZmllciBjaGVja3MgTiBpcyBub3QgcHJpbWUuXG4gIGlmIChhd2FpdCBpc1Byb2JhYmx5UHJpbWUoTiwgMjQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOIG11c3QgYmUgYSBjb21wb3NpdGUgbnVtYmVyJyk7XG4gIH1cbiAgLy8gVmVyaWZpZXIgY2hlY2tzIHRoYXQgdGhlIEphY29iaSBzeW1ib2wgZm9yIHcgaXMgMSB3cnQgTi5cbiAgaWYgKGphY29iaSh3LCBOKSAhPT0gQmlnSW50KC0xKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSmFjb2JpIHN5bWJvbCBvZiB3IG11c3QgYmUgLTEgd3J0IHRvIE4nKTtcbiAgfVxuICAvLyBWZXJpZmllciBnZW5lcmF0ZXMgYV9pLCBiX2ksIHlfaS5cbiAgY29uc3QgeSA9IGdlbmVyYXRlWShOLCB3KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAvLyBWZXJpZmllciBjaGVja3Mgel9pIF4gTiBtb2QgTiA9PSB5X2kuXG4gICAgaWYgKG1vZFBvdyh6W2ldLCBOLCBOKSAhPT0geVtpXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQYWlsbGllciB2ZXJpZmljYXRpb24gb2Ygelske2l9XSBmYWlsZWRgKTtcbiAgICB9XG4gICAgLy8gVmVyaWZpZXIgY2hlY2tzIHhfaSBeIDQgbW9kIE4gPT0gKC0xKV5hICogd15iICogeV9pLlxuICAgIGxldCB5X2kgPSB5W2ldO1xuICAgIGlmIChhYltpXSAmIDIpIHtcbiAgICAgIHlfaSA9IC15X2k7XG4gICAgfVxuICAgIGlmIChhYltpXSAmIDEpIHtcbiAgICAgIHlfaSAqPSB3O1xuICAgIH1cbiAgICB5X2kgPSBtb2RQb3coeV9pLCAxLCBOKTtcbiAgICBpZiAobW9kUG93KHhbaV0sIDQsIE4pICE9PSB5X2kpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFpbGxpZXIgdmVyaWZpY2F0aW9uIG9mIHhbJHtpfV0gZmFpbGVkYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIl19
@@ -21,4 +21,4 @@ export declare function prove(n: bigint, lambda: bigint, p: Array<bigint>): bigi
21
21
  * @param sigma - array of proofs $\sigma$
22
22
  */
23
23
  export declare function verify(n: bigint, p: Array<bigint>, sigma: Array<bigint>): boolean;
24
- //# sourceMappingURL=paillierproof.d.ts.map
24
+ //# sourceMappingURL=paillierProof.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paillierproof.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/paillierproof.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,KAAK,SAAS,CAAC;AAC5B,eAAO,MAAM,CAAC,QAAkC,CAAC;AAEjD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CASjE;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAM3E;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAkCjF"}
1
+ {"version":3,"file":"paillierProof.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/paillierProof.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,KAAK,SAAS,CAAC;AAC5B,eAAO,MAAM,CAAC,QAAkC,CAAC;AAEjD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CASjE;AAED;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAM3E;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAkCjF"}
@@ -83,4 +83,4 @@ function verify(n, p, sigma) {
83
83
  return true;
84
84
  }
85
85
  exports.verify = verify;
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbGxpZXJwcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWNkc2EvcGFpbGxpZXJwcm9vZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2REFBZ0Q7QUFDaEQsdURBQWtEO0FBRWxELHFDQUEyRDtBQUMzRCxtQ0FBOEM7QUFDOUMscUNBQW1EO0FBRW5ELHVCQUF1QjtBQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCwrQ0FBK0M7QUFDL0Msb0VBQW9FO0FBQ3ZELFFBQUEsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNmLFFBQUEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBSyxDQUFDLENBQUMsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLFNBQVMsQ0FBQyxDQUFTO0lBQ3ZDLElBQUksK0JBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRywyQkFBbUIsRUFBRTtRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCwyQkFBbUIsRUFBRSxDQUFDLENBQUM7S0FDcEc7SUFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQ2hCLEtBQUssQ0FBQyxTQUFDLENBQUM7U0FDTCxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ1YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLG9DQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQy9DLENBQUM7QUFDSixDQUFDO0FBVEQsOEJBU0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBUyxFQUFFLE1BQWMsRUFBRSxDQUFnQjtJQUMvRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztLQUNwRTtJQUNELE1BQU0sS0FBSyxHQUFHLHlCQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMseUJBQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQU5ELHNCQU1DO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixNQUFNLENBQUMsQ0FBUyxFQUFFLENBQWdCLEVBQUUsS0FBb0I7SUFDdEUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7S0FDcEU7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztLQUMxRTtJQUNELHNFQUFzRTtJQUN0RSxpQ0FBaUM7SUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ1YsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELElBQUksYUFBSyxLQUFLLE1BQU0sRUFBRTtRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7S0FDNUM7SUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLGdDQUF1QixFQUFFO1FBQzNDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxLQUFLLENBQUM7U0FDZDtLQUNGO0lBQ0QsOERBQThEO0lBQzlELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFDLEVBQUU7UUFDdEIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDMUMsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELDREQUE0RDtJQUM1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLHlCQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUNuQyxPQUFPLEtBQUssQ0FBQztTQUNkO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFsQ0Qsd0JBa0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYml0TGVuZ3RoIH0gZnJvbSAnYmlnaW50LWNyeXB0by11dGlscyc7XG5pbXBvcnQgeyBtb2RJbnYsIG1vZFBvdyB9IGZyb20gJ2JpZ2ludC1tb2QtYXJpdGgnO1xuXG5pbXBvcnQgeyByYW5kb21Qb3NpdGl2ZUNvUHJpbWVMZXNzVGhhbiB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgbWluTW9kdWx1c0JpdExlbmd0aCB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgcHJpbWVzU21hbGxlclRoYW4zMTk1NjcgfSBmcm9tICcuL3ByaW1lcyc7XG5cbi8vIFNlY3VyaXR5IHBhcmFtZXRlcnMuXG5jb25zdCBrID0gMTI4O1xuLy8gZXByaW50LmlhY3Iub3JnLzIwMTgvMDU3LnBkZiNwYWdlNiBzZWN0aW9uIDVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9CaXRHby9CaXRHb0pTL3B1bGwvMzUwMiNkaXNjdXNzaW9uX3IxMjAzMDcwMzkyXG5leHBvcnQgY29uc3QgYWxwaGEgPSAzMTk1Njc7XG5leHBvcnQgY29uc3QgbSA9IE1hdGguY2VpbChrIC8gTWF0aC5sb2cyKGFscGhhKSk7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzZXQgb2YgY2hhbGxlbmdlcyAkcCQgZm9yIGEgZ2l2ZW4gcGFpbGxpZXIgcHVibGljIGtleSBtb2R1bHVzICRuJC5cbiAqIEBwYXJhbSBuIC0gcGFpbGxpZXIgcHVibGljIGtleSBtb2R1bHVzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxiaWdpbnQ+Pn0gLSBhcnJheSBvZiBjaGFsbGVuZ2VzICRwX2kkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVAobjogYmlnaW50KTogUHJvbWlzZTxBcnJheTxiaWdpbnQ+PiB7XG4gIGlmIChiaXRMZW5ndGgobikgPCBtaW5Nb2R1bHVzQml0TGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtb2R1bHVzIG4gbXVzdCBoYXZlIGEgYml0IGxlbmd0aCBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byAke21pbk1vZHVsdXNCaXRMZW5ndGh9YCk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgIEFycmF5KG0pXG4gICAgICAuZmlsbChudWxsKVxuICAgICAgLm1hcCgoKSA9PiByYW5kb21Qb3NpdGl2ZUNvUHJpbWVMZXNzVGhhbihuKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHNldCBvZiBwcm9vZnMgJHNpZ21hJCBmb3IgYSBnaXZlbiBzZXQgb2YgY2hhbGxlbmdlcyAkcCQgdXNpbmcgdGhlIHBhaWxsaWVyIHB1YmxpYyBrZXkgbW9kdWx1cyAkbiQgYW5kIHRoZSBwcml2YXRlIGtleSAkXFxsYW1iZGEkLlxuICogQHBhcmFtIG4gLSBwYWlsbGllciBwdWJsaWMga2V5IG1vZHVsdXMgJG4kXG4gKiBAcGFyYW0gbGFtYmRhIC0gcHJpdmF0ZSBrZXkgJFxcbGFtYmRhLCAgd2hpY2ggaXMgdGhlICRcXGV1bGVyKE4pID0gKHAtMSkocS0xKSRcbiAqIEBwYXJhbSBwIC0gYXJyYXkgb2YgY2hhbGxlbmdlcyAkcCRcbiAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PGJpZ2ludD4+fSAtIGFycmF5IG9mIHByb29mcyAkXFxzaWdtYSRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZlKG46IGJpZ2ludCwgbGFtYmRhOiBiaWdpbnQsIHA6IEFycmF5PGJpZ2ludD4pOiBiaWdpbnRbXSB7XG4gIGlmICghcC5ldmVyeSgocF9pKSA9PiBwX2kgPiAwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWxsIHBhaWxsaWVyIGNoYWxsZW5nZSB2YWx1ZXMgbXVzdCBiZSBwb3NpdGl2ZS4nKTtcbiAgfVxuICBjb25zdCBuX2ludiA9IG1vZEludihuLCBsYW1iZGEpO1xuICByZXR1cm4gcC5tYXAoKHBfaSkgPT4gbW9kUG93KHBfaSwgbl9pbnYsIG4pKTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgYSBzZXQgb2YgcHJvb2ZzICRcXHNpZ21hJCBvbiB0aGUgbW9kdWx1cyAkbiQgdXNpbmcgdGhlIGNoYWxsZW5nZXMgJHAkIHRoYXQgd2VyZSBwcm92aWRlZCB0byB0aGUgcHJvdmVyIHRvIGdlbmVyYXRlIHRoZSBwcm9vZnMuXG4gKiBAcGFyYW0gbiAtIHBhaWxsaWVyIHB1YmxpYyBrZXkgbW9kdWx1cyAkbiRcbiAqIEBwYXJhbSBwIC0gYXJyYXkgb2YgY2hhbGxlbmdlcyAkcCRcbiAqIEBwYXJhbSBzaWdtYSAtIGFycmF5IG9mIHByb29mcyAkXFxzaWdtYSRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeShuOiBiaWdpbnQsIHA6IEFycmF5PGJpZ2ludD4sIHNpZ21hOiBBcnJheTxiaWdpbnQ+KTogYm9vbGVhbiB7XG4gIGlmICghcC5ldmVyeSgocF9pKSA9PiBwX2kgPiAwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWxsIHBhaWxsaWVyIGNoYWxsZW5nZSB2YWx1ZXMgbXVzdCBiZSBwb3NpdGl2ZS4nKTtcbiAgfVxuICBpZiAoIXNpZ21hLmV2ZXJ5KChzaWdtYV9pKSA9PiBzaWdtYV9pID4gMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FsbCBwYWlsbGllciBjaGFsbGVuZ2UgcHJvb2YgdmFsdWVzIG11c3QgYmUgcG9zaXRpdmUuJyk7XG4gIH1cbiAgLy8gYSkgQ2hlY2sgdGhhdCAkTiQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGFuZCBpcyBub3QgZGl2aXNpYmxlIGJ5IGFsbFxuICAvLyB0aGUgcHJpbWVzIGxlc3MgdGhhbiAkXFxhbHBoYSQuXG4gIGlmIChuIDw9IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGFscGhhICE9PSAzMTk1NjcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIGFscGhhIHZhbHVlJyk7XG4gIH1cbiAgZm9yIChjb25zdCBwcmltZSBvZiBwcmltZXNTbWFsbGVyVGhhbjMxOTU2Nykge1xuICAgIGlmIChuICUgQmlnSW50KHByaW1lKSA9PT0gQmlnSW50KDApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIGIpIENoZWNrIHRoYXQgJFxcc2lnbWFfaSQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyICRpID0gMS4uLm0kLlxuICBpZiAoc2lnbWEubGVuZ3RoICE9PSBtKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghc2lnbWEuZXZlcnkoKHNpZ21hX2kpID0+IHNpZ21hX2kgPiAwKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBjKSBWZXJpZnkgdGhhdCAkcF9pID0gXFxzaWdtYV9pXk4gXFxtb2QgTiQgZm9yICRpID0gMS4uLm0kLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgIGlmIChwW2ldICE9PSBtb2RQb3coc2lnbWFbaV0sIG4sIG4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIl19
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbGxpZXJQcm9vZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvZWNkc2EvcGFpbGxpZXJQcm9vZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2REFBZ0Q7QUFDaEQsdURBQWtEO0FBRWxELHFDQUEyRDtBQUMzRCxtQ0FBOEM7QUFDOUMscUNBQW1EO0FBRW5ELHVCQUF1QjtBQUN2QixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCwrQ0FBK0M7QUFDL0Msb0VBQW9FO0FBQ3ZELFFBQUEsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNmLFFBQUEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBSyxDQUFDLENBQUMsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLFNBQVMsQ0FBQyxDQUFTO0lBQ3ZDLElBQUksK0JBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRywyQkFBbUIsRUFBRTtRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCwyQkFBbUIsRUFBRSxDQUFDLENBQUM7S0FDcEc7SUFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQ2hCLEtBQUssQ0FBQyxTQUFDLENBQUM7U0FDTCxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ1YsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLG9DQUE2QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQy9DLENBQUM7QUFDSixDQUFDO0FBVEQsOEJBU0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBUyxFQUFFLE1BQWMsRUFBRSxDQUFnQjtJQUMvRCxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztLQUNwRTtJQUNELE1BQU0sS0FBSyxHQUFHLHlCQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMseUJBQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQU5ELHNCQU1DO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixNQUFNLENBQUMsQ0FBUyxFQUFFLENBQWdCLEVBQUUsS0FBb0I7SUFDdEUsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7S0FDcEU7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztLQUMxRTtJQUNELHNFQUFzRTtJQUN0RSxpQ0FBaUM7SUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ1YsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELElBQUksYUFBSyxLQUFLLE1BQU0sRUFBRTtRQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7S0FDNUM7SUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLGdDQUF1QixFQUFFO1FBQzNDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxLQUFLLENBQUM7U0FDZDtLQUNGO0lBQ0QsOERBQThEO0lBQzlELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFDLEVBQUU7UUFDdEIsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEVBQUU7UUFDMUMsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUNELDREQUE0RDtJQUM1RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLHlCQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtZQUNuQyxPQUFPLEtBQUssQ0FBQztTQUNkO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFsQ0Qsd0JBa0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYml0TGVuZ3RoIH0gZnJvbSAnYmlnaW50LWNyeXB0by11dGlscyc7XG5pbXBvcnQgeyBtb2RJbnYsIG1vZFBvdyB9IGZyb20gJ2JpZ2ludC1tb2QtYXJpdGgnO1xuXG5pbXBvcnQgeyByYW5kb21Qb3NpdGl2ZUNvUHJpbWVMZXNzVGhhbiB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgbWluTW9kdWx1c0JpdExlbmd0aCB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgcHJpbWVzU21hbGxlclRoYW4zMTk1NjcgfSBmcm9tICcuL3ByaW1lcyc7XG5cbi8vIFNlY3VyaXR5IHBhcmFtZXRlcnMuXG5jb25zdCBrID0gMTI4O1xuLy8gZXByaW50LmlhY3Iub3JnLzIwMTgvMDU3LnBkZiNwYWdlNiBzZWN0aW9uIDVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9CaXRHby9CaXRHb0pTL3B1bGwvMzUwMiNkaXNjdXNzaW9uX3IxMjAzMDcwMzkyXG5leHBvcnQgY29uc3QgYWxwaGEgPSAzMTk1Njc7XG5leHBvcnQgY29uc3QgbSA9IE1hdGguY2VpbChrIC8gTWF0aC5sb2cyKGFscGhhKSk7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzZXQgb2YgY2hhbGxlbmdlcyAkcCQgZm9yIGEgZ2l2ZW4gcGFpbGxpZXIgcHVibGljIGtleSBtb2R1bHVzICRuJC5cbiAqIEBwYXJhbSBuIC0gcGFpbGxpZXIgcHVibGljIGtleSBtb2R1bHVzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTxiaWdpbnQ+Pn0gLSBhcnJheSBvZiBjaGFsbGVuZ2VzICRwX2kkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVAobjogYmlnaW50KTogUHJvbWlzZTxBcnJheTxiaWdpbnQ+PiB7XG4gIGlmIChiaXRMZW5ndGgobikgPCBtaW5Nb2R1bHVzQml0TGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBtb2R1bHVzIG4gbXVzdCBoYXZlIGEgYml0IGxlbmd0aCBsYXJnZXIgdGhhbiBvciBlcXVhbCB0byAke21pbk1vZHVsdXNCaXRMZW5ndGh9YCk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgIEFycmF5KG0pXG4gICAgICAuZmlsbChudWxsKVxuICAgICAgLm1hcCgoKSA9PiByYW5kb21Qb3NpdGl2ZUNvUHJpbWVMZXNzVGhhbihuKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHNldCBvZiBwcm9vZnMgJHNpZ21hJCBmb3IgYSBnaXZlbiBzZXQgb2YgY2hhbGxlbmdlcyAkcCQgdXNpbmcgdGhlIHBhaWxsaWVyIHB1YmxpYyBrZXkgbW9kdWx1cyAkbiQgYW5kIHRoZSBwcml2YXRlIGtleSAkXFxsYW1iZGEkLlxuICogQHBhcmFtIG4gLSBwYWlsbGllciBwdWJsaWMga2V5IG1vZHVsdXMgJG4kXG4gKiBAcGFyYW0gbGFtYmRhIC0gcHJpdmF0ZSBrZXkgJFxcbGFtYmRhLCAgd2hpY2ggaXMgdGhlICRcXGV1bGVyKE4pID0gKHAtMSkocS0xKSRcbiAqIEBwYXJhbSBwIC0gYXJyYXkgb2YgY2hhbGxlbmdlcyAkcCRcbiAqIEByZXR1cm5zIHtQcm9taXNlPEFycmF5PGJpZ2ludD4+fSAtIGFycmF5IG9mIHByb29mcyAkXFxzaWdtYSRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZlKG46IGJpZ2ludCwgbGFtYmRhOiBiaWdpbnQsIHA6IEFycmF5PGJpZ2ludD4pOiBiaWdpbnRbXSB7XG4gIGlmICghcC5ldmVyeSgocF9pKSA9PiBwX2kgPiAwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWxsIHBhaWxsaWVyIGNoYWxsZW5nZSB2YWx1ZXMgbXVzdCBiZSBwb3NpdGl2ZS4nKTtcbiAgfVxuICBjb25zdCBuX2ludiA9IG1vZEludihuLCBsYW1iZGEpO1xuICByZXR1cm4gcC5tYXAoKHBfaSkgPT4gbW9kUG93KHBfaSwgbl9pbnYsIG4pKTtcbn1cblxuLyoqXG4gKiBWZXJpZnkgYSBzZXQgb2YgcHJvb2ZzICRcXHNpZ21hJCBvbiB0aGUgbW9kdWx1cyAkbiQgdXNpbmcgdGhlIGNoYWxsZW5nZXMgJHAkIHRoYXQgd2VyZSBwcm92aWRlZCB0byB0aGUgcHJvdmVyIHRvIGdlbmVyYXRlIHRoZSBwcm9vZnMuXG4gKiBAcGFyYW0gbiAtIHBhaWxsaWVyIHB1YmxpYyBrZXkgbW9kdWx1cyAkbiRcbiAqIEBwYXJhbSBwIC0gYXJyYXkgb2YgY2hhbGxlbmdlcyAkcCRcbiAqIEBwYXJhbSBzaWdtYSAtIGFycmF5IG9mIHByb29mcyAkXFxzaWdtYSRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeShuOiBiaWdpbnQsIHA6IEFycmF5PGJpZ2ludD4sIHNpZ21hOiBBcnJheTxiaWdpbnQ+KTogYm9vbGVhbiB7XG4gIGlmICghcC5ldmVyeSgocF9pKSA9PiBwX2kgPiAwKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQWxsIHBhaWxsaWVyIGNoYWxsZW5nZSB2YWx1ZXMgbXVzdCBiZSBwb3NpdGl2ZS4nKTtcbiAgfVxuICBpZiAoIXNpZ21hLmV2ZXJ5KChzaWdtYV9pKSA9PiBzaWdtYV9pID4gMCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FsbCBwYWlsbGllciBjaGFsbGVuZ2UgcHJvb2YgdmFsdWVzIG11c3QgYmUgcG9zaXRpdmUuJyk7XG4gIH1cbiAgLy8gYSkgQ2hlY2sgdGhhdCAkTiQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyIGFuZCBpcyBub3QgZGl2aXNpYmxlIGJ5IGFsbFxuICAvLyB0aGUgcHJpbWVzIGxlc3MgdGhhbiAkXFxhbHBoYSQuXG4gIGlmIChuIDw9IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKGFscGhhICE9PSAzMTk1NjcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vuc3VwcG9ydGVkIGFscGhhIHZhbHVlJyk7XG4gIH1cbiAgZm9yIChjb25zdCBwcmltZSBvZiBwcmltZXNTbWFsbGVyVGhhbjMxOTU2Nykge1xuICAgIGlmIChuICUgQmlnSW50KHByaW1lKSA9PT0gQmlnSW50KDApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIGIpIENoZWNrIHRoYXQgJFxcc2lnbWFfaSQgaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyICRpID0gMS4uLm0kLlxuICBpZiAoc2lnbWEubGVuZ3RoICE9PSBtKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghc2lnbWEuZXZlcnkoKHNpZ21hX2kpID0+IHNpZ21hX2kgPiAwKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBjKSBWZXJpZnkgdGhhdCAkcF9pID0gXFxzaWdtYV9pXk4gXFxtb2QgTiQgZm9yICRpID0gMS4uLm0kLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IG07IGkrKykge1xuICAgIGlmIChwW2ldICE9PSBtb2RQb3coc2lnbWFbaV0sIG4sIG4pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuIl19
@@ -77,4 +77,4 @@ export declare function proveWithCheck(curve: BaseCurve, modulusBits: number, pk
77
77
  * @returns {boolean} True if verification succeeds.
78
78
  */
79
79
  export declare function verifyWithCheck(curve: BaseCurve, modulusBits: number, pk: PublicKey, ntilde: DeserializedNtilde, proof: RangeProofWithCheck, c1: bigint, c2: bigint, X: bigint): boolean;
80
- //# sourceMappingURL=rangeproof.d.ts.map
80
+ //# sourceMappingURL=rangeProof.d.ts.map