@bitgo-beta/sdk-lib-mpc 8.2.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +5 -0
- package/CHANGELOG.md +4 -0
- package/LICENSE +191 -0
- package/README.md +0 -0
- package/dist/src/curves/baseCurve.d.ts +19 -0
- package/dist/src/curves/baseCurve.d.ts.map +1 -0
- package/dist/src/curves/baseCurve.js +6 -0
- package/dist/src/curves/index.d.ts +3 -0
- package/dist/src/curves/index.d.ts.map +1 -0
- package/dist/src/curves/index.js +15 -0
- package/dist/src/curves/secp256k1.d.ts +17 -0
- package/dist/src/curves/secp256k1.d.ts.map +1 -0
- package/dist/src/curves/secp256k1.js +70 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +16 -0
- package/dist/src/openssl/index.d.ts +2 -0
- package/dist/src/openssl/index.d.ts.map +1 -0
- package/dist/src/openssl/index.js +14 -0
- package/dist/src/openssl/openssl.d.ts +9 -0
- package/dist/src/openssl/openssl.d.ts.map +1 -0
- package/dist/src/openssl/openssl.js +45 -0
- package/dist/src/openssl/opensslbytes.d.ts +4 -0
- package/dist/src/openssl/opensslbytes.d.ts.map +1 -0
- package/dist/src/openssl/opensslbytes.js +20 -0
- package/dist/src/tss/ecdsa/index.d.ts +3 -0
- package/dist/src/tss/ecdsa/index.d.ts.map +1 -0
- package/dist/src/tss/ecdsa/index.js +25 -0
- package/dist/src/tss/ecdsa/rangeproof.d.ts +80 -0
- package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -0
- package/dist/src/tss/ecdsa/rangeproof.js +403 -0
- package/dist/src/tss/ecdsa/types.d.ts +73 -0
- package/dist/src/tss/ecdsa/types.d.ts.map +1 -0
- package/dist/src/tss/ecdsa/types.js +70 -0
- package/dist/src/tss/index.d.ts +2 -0
- package/dist/src/tss/index.d.ts.map +1 -0
- package/dist/src/tss/index.js +14 -0
- package/dist/src/util.d.ts +44 -0
- package/dist/src/util.d.ts.map +1 -0
- package/dist/src/util.js +123 -0
- package/dist/tsconfig.tsbuildinfo +3621 -0
- package/package.json +52 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
interface NtildeProof<T> {
|
|
2
|
+
alpha: T[];
|
|
3
|
+
t: T[];
|
|
4
|
+
}
|
|
5
|
+
interface NtildeProofs<T> {
|
|
6
|
+
h1WrtH2: NtildeProof<T>;
|
|
7
|
+
h2WrtH1: NtildeProof<T>;
|
|
8
|
+
}
|
|
9
|
+
interface Ntilde<T> {
|
|
10
|
+
ntilde: T;
|
|
11
|
+
h1: T;
|
|
12
|
+
h2: T;
|
|
13
|
+
}
|
|
14
|
+
export declare type DeserializedNtilde = Ntilde<bigint>;
|
|
15
|
+
/**
|
|
16
|
+
* Deserializes a challenge from hex strings to bigint
|
|
17
|
+
* @param challenge
|
|
18
|
+
*/
|
|
19
|
+
export declare function deserializeNtilde(challenge: SerializedNtilde): DeserializedNtilde;
|
|
20
|
+
export declare type DeserializedNtildeProof = NtildeProof<bigint>;
|
|
21
|
+
export declare type DeserializedNtildeProofs = NtildeProofs<bigint>;
|
|
22
|
+
export declare type DeserializedNtildeWithProofs = DeserializedNtilde & {
|
|
23
|
+
ntildeProof: DeserializedNtildeProofs;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Deserializes a challenge and it's proofs from hex strings to bigint
|
|
27
|
+
* @param challenge
|
|
28
|
+
*/
|
|
29
|
+
export declare function deserializeNtildeWithProofs(challenge: SerializedNtildeWithProofs): DeserializedNtildeWithProofs;
|
|
30
|
+
export declare type SerializedNtilde = Ntilde<string>;
|
|
31
|
+
/**
|
|
32
|
+
* Serializes a challenge from big int to hex strings.
|
|
33
|
+
* @param challenge
|
|
34
|
+
*/
|
|
35
|
+
export declare function serializeNtilde(challenge: DeserializedNtilde): SerializedNtilde;
|
|
36
|
+
export declare type SerializedNtildeProof = NtildeProof<string>;
|
|
37
|
+
export declare type SerializedNtildeProofs = NtildeProofs<string>;
|
|
38
|
+
export declare type SerializedNtildeWithProofs = SerializedNtilde & {
|
|
39
|
+
ntildeProof: SerializedNtildeProofs;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Serializes a challenge and it's proofs from big int to hex strings.
|
|
43
|
+
* @param challenge
|
|
44
|
+
*/
|
|
45
|
+
export declare function serializeNtildeWithProofs(challenge: DeserializedNtildeWithProofs): SerializedNtildeWithProofs;
|
|
46
|
+
export interface RSAModulus {
|
|
47
|
+
n: bigint;
|
|
48
|
+
q1: bigint;
|
|
49
|
+
q2: bigint;
|
|
50
|
+
}
|
|
51
|
+
export interface RangeProof {
|
|
52
|
+
z: bigint;
|
|
53
|
+
u: bigint;
|
|
54
|
+
w: bigint;
|
|
55
|
+
s: bigint;
|
|
56
|
+
s1: bigint;
|
|
57
|
+
s2: bigint;
|
|
58
|
+
}
|
|
59
|
+
export interface RangeProofWithCheck {
|
|
60
|
+
z: bigint;
|
|
61
|
+
zprm: bigint;
|
|
62
|
+
t: bigint;
|
|
63
|
+
v: bigint;
|
|
64
|
+
w: bigint;
|
|
65
|
+
s: bigint;
|
|
66
|
+
s1: bigint;
|
|
67
|
+
s2: bigint;
|
|
68
|
+
t1: bigint;
|
|
69
|
+
t2: bigint;
|
|
70
|
+
u: bigint;
|
|
71
|
+
}
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/tss/ecdsa/types.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,CAAC,EAAE,CAAC,EAAE,CAAC;CACR;AAGD,UAAU,YAAY,CAAC,CAAC;IACtB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;CACzB;AAGD,UAAU,MAAM,CAAC,CAAC;IAChB,MAAM,EAAE,CAAC,CAAC;IACV,EAAE,EAAE,CAAC,CAAC;IACN,EAAE,EAAE,CAAC,CAAC;CACP;AAED,oBAAY,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAChD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,kBAAkB,CAMjF;AAED,oBAAY,uBAAuB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAC1D,oBAAY,wBAAwB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAC5D,oBAAY,4BAA4B,GAAG,kBAAkB,GAAG;IAC9D,WAAW,EAAE,wBAAwB,CAAC;CACvC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,0BAA0B,GAAG,4BAA4B,CAc/G;AAED,oBAAY,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;AAE9C;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,kBAAkB,GAAG,gBAAgB,CAM/E;AAED,oBAAY,qBAAqB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AACxD,oBAAY,sBAAsB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAC1D,oBAAY,0BAA0B,GAAG,gBAAgB,GAAG;IAC1D,WAAW,EAAE,sBAAsB,CAAC;CACrC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,4BAA4B,GAAG,0BAA0B,CAc7G;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IAEV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAGD,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAGD,MAAM,WAAW,mBAAmB;IAClC,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;CACX"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serializeNtildeWithProofs = exports.serializeNtilde = exports.deserializeNtildeWithProofs = exports.deserializeNtilde = void 0;
|
|
4
|
+
// Ntilde Proof where both alpha and t are a set of 128 proofs each.
|
|
5
|
+
const util_1 = require("../../util");
|
|
6
|
+
/**
|
|
7
|
+
* Deserializes a challenge from hex strings to bigint
|
|
8
|
+
* @param challenge
|
|
9
|
+
*/
|
|
10
|
+
function deserializeNtilde(challenge) {
|
|
11
|
+
return {
|
|
12
|
+
ntilde: util_1.hexToBigInt(challenge.ntilde),
|
|
13
|
+
h1: util_1.hexToBigInt(challenge.h1),
|
|
14
|
+
h2: util_1.hexToBigInt(challenge.h2),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
exports.deserializeNtilde = deserializeNtilde;
|
|
18
|
+
/**
|
|
19
|
+
* Deserializes a challenge and it's proofs from hex strings to bigint
|
|
20
|
+
* @param challenge
|
|
21
|
+
*/
|
|
22
|
+
function deserializeNtildeWithProofs(challenge) {
|
|
23
|
+
return {
|
|
24
|
+
...deserializeNtilde(challenge),
|
|
25
|
+
ntildeProof: {
|
|
26
|
+
h1WrtH2: {
|
|
27
|
+
alpha: util_1.convertHexArrToBigIntArr(challenge.ntildeProof.h1WrtH2.alpha),
|
|
28
|
+
t: util_1.convertHexArrToBigIntArr(challenge.ntildeProof.h1WrtH2.t),
|
|
29
|
+
},
|
|
30
|
+
h2WrtH1: {
|
|
31
|
+
alpha: util_1.convertHexArrToBigIntArr(challenge.ntildeProof.h2WrtH1.alpha),
|
|
32
|
+
t: util_1.convertHexArrToBigIntArr(challenge.ntildeProof.h2WrtH1.t),
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
exports.deserializeNtildeWithProofs = deserializeNtildeWithProofs;
|
|
38
|
+
/**
|
|
39
|
+
* Serializes a challenge from big int to hex strings.
|
|
40
|
+
* @param challenge
|
|
41
|
+
*/
|
|
42
|
+
function serializeNtilde(challenge) {
|
|
43
|
+
return {
|
|
44
|
+
ntilde: util_1.bigIntToHex(challenge.ntilde),
|
|
45
|
+
h1: util_1.bigIntToHex(challenge.h1),
|
|
46
|
+
h2: util_1.bigIntToHex(challenge.h2),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
exports.serializeNtilde = serializeNtilde;
|
|
50
|
+
/**
|
|
51
|
+
* Serializes a challenge and it's proofs from big int to hex strings.
|
|
52
|
+
* @param challenge
|
|
53
|
+
*/
|
|
54
|
+
function serializeNtildeWithProofs(challenge) {
|
|
55
|
+
return {
|
|
56
|
+
...serializeNtilde(challenge),
|
|
57
|
+
ntildeProof: {
|
|
58
|
+
h1WrtH2: {
|
|
59
|
+
alpha: util_1.convertBigIntArrToHexArr(challenge.ntildeProof.h1WrtH2.alpha),
|
|
60
|
+
t: util_1.convertBigIntArrToHexArr(challenge.ntildeProof.h1WrtH2.t),
|
|
61
|
+
},
|
|
62
|
+
h2WrtH1: {
|
|
63
|
+
alpha: util_1.convertBigIntArrToHexArr(challenge.ntildeProof.h2WrtH1.alpha),
|
|
64
|
+
t: util_1.convertBigIntArrToHexArr(challenge.ntildeProof.h2WrtH1.t),
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
exports.serializeNtildeWithProofs = serializeNtildeWithProofs;
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL2VjZHNhL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9FQUFvRTtBQUNwRSxxQ0FBMEc7QUFxQjFHOzs7R0FHRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLFNBQTJCO0lBQzNELE9BQU87UUFDTCxNQUFNLEVBQUUsa0JBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQ3JDLEVBQUUsRUFBRSxrQkFBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0IsRUFBRSxFQUFFLGtCQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztLQUM5QixDQUFDO0FBQ0osQ0FBQztBQU5ELDhDQU1DO0FBUUQ7OztHQUdHO0FBQ0gsU0FBZ0IsMkJBQTJCLENBQUMsU0FBcUM7SUFDL0UsT0FBTztRQUNMLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxDQUFDO1FBQy9CLFdBQVcsRUFBRTtZQUNYLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsK0JBQXdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNwRSxDQUFDLEVBQUUsK0JBQXdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQzdEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSwrQkFBd0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3BFLENBQUMsRUFBRSwrQkFBd0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDN0Q7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBZEQsa0VBY0M7QUFJRDs7O0dBR0c7QUFDSCxTQUFnQixlQUFlLENBQUMsU0FBNkI7SUFDM0QsT0FBTztRQUNMLE1BQU0sRUFBRSxrQkFBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDckMsRUFBRSxFQUFFLGtCQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM3QixFQUFFLEVBQUUsa0JBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO0tBQzlCLENBQUM7QUFDSixDQUFDO0FBTkQsMENBTUM7QUFRRDs7O0dBR0c7QUFDSCxTQUFnQix5QkFBeUIsQ0FBQyxTQUF1QztJQUMvRSxPQUFPO1FBQ0wsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO1FBQzdCLFdBQVcsRUFBRTtZQUNYLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsK0JBQXdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUNwRSxDQUFDLEVBQUUsK0JBQXdCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQzdEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSwrQkFBd0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3BFLENBQUMsRUFBRSwrQkFBd0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7YUFDN0Q7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBZEQsOERBY0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBOdGlsZGUgUHJvb2Ygd2hlcmUgYm90aCBhbHBoYSBhbmQgdCBhcmUgYSBzZXQgb2YgMTI4IHByb29mcyBlYWNoLlxuaW1wb3J0IHsgYmlnSW50VG9IZXgsIGNvbnZlcnRCaWdJbnRBcnJUb0hleEFyciwgY29udmVydEhleEFyclRvQmlnSW50QXJyLCBoZXhUb0JpZ0ludCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuXG5pbnRlcmZhY2UgTnRpbGRlUHJvb2Y8VD4ge1xuICBhbHBoYTogVFtdO1xuICB0OiBUW107XG59XG5cbi8vIE50aWxkZSBQcm9vZlxuaW50ZXJmYWNlIE50aWxkZVByb29mczxUPiB7XG4gIGgxV3J0SDI6IE50aWxkZVByb29mPFQ+O1xuICBoMldydEgxOiBOdGlsZGVQcm9vZjxUPjtcbn1cblxuLy8gTnRpbGRlIGNoYWxsZW5nZSB2YWx1ZXNcbmludGVyZmFjZSBOdGlsZGU8VD4ge1xuICBudGlsZGU6IFQ7XG4gIGgxOiBUO1xuICBoMjogVDtcbn1cblxuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkTnRpbGRlID0gTnRpbGRlPGJpZ2ludD47XG4vKipcbiAqIERlc2VyaWFsaXplcyBhIGNoYWxsZW5nZSBmcm9tIGhleCBzdHJpbmdzIHRvIGJpZ2ludFxuICogQHBhcmFtIGNoYWxsZW5nZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemVOdGlsZGUoY2hhbGxlbmdlOiBTZXJpYWxpemVkTnRpbGRlKTogRGVzZXJpYWxpemVkTnRpbGRlIHtcbiAgcmV0dXJuIHtcbiAgICBudGlsZGU6IGhleFRvQmlnSW50KGNoYWxsZW5nZS5udGlsZGUpLFxuICAgIGgxOiBoZXhUb0JpZ0ludChjaGFsbGVuZ2UuaDEpLFxuICAgIGgyOiBoZXhUb0JpZ0ludChjaGFsbGVuZ2UuaDIpLFxuICB9O1xufVxuXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWROdGlsZGVQcm9vZiA9IE50aWxkZVByb29mPGJpZ2ludD47XG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWROdGlsZGVQcm9vZnMgPSBOdGlsZGVQcm9vZnM8YmlnaW50PjtcbmV4cG9ydCB0eXBlIERlc2VyaWFsaXplZE50aWxkZVdpdGhQcm9vZnMgPSBEZXNlcmlhbGl6ZWROdGlsZGUgJiB7XG4gIG50aWxkZVByb29mOiBEZXNlcmlhbGl6ZWROdGlsZGVQcm9vZnM7XG59O1xuXG4vKipcbiAqIERlc2VyaWFsaXplcyBhIGNoYWxsZW5nZSBhbmQgaXQncyBwcm9vZnMgZnJvbSBoZXggc3RyaW5ncyB0byBiaWdpbnRcbiAqIEBwYXJhbSBjaGFsbGVuZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplTnRpbGRlV2l0aFByb29mcyhjaGFsbGVuZ2U6IFNlcmlhbGl6ZWROdGlsZGVXaXRoUHJvb2ZzKTogRGVzZXJpYWxpemVkTnRpbGRlV2l0aFByb29mcyB7XG4gIHJldHVybiB7XG4gICAgLi4uZGVzZXJpYWxpemVOdGlsZGUoY2hhbGxlbmdlKSxcbiAgICBudGlsZGVQcm9vZjoge1xuICAgICAgaDFXcnRIMjoge1xuICAgICAgICBhbHBoYTogY29udmVydEhleEFyclRvQmlnSW50QXJyKGNoYWxsZW5nZS5udGlsZGVQcm9vZi5oMVdydEgyLmFscGhhKSxcbiAgICAgICAgdDogY29udmVydEhleEFyclRvQmlnSW50QXJyKGNoYWxsZW5nZS5udGlsZGVQcm9vZi5oMVdydEgyLnQpLFxuICAgICAgfSxcbiAgICAgIGgyV3J0SDE6IHtcbiAgICAgICAgYWxwaGE6IGNvbnZlcnRIZXhBcnJUb0JpZ0ludEFycihjaGFsbGVuZ2UubnRpbGRlUHJvb2YuaDJXcnRIMS5hbHBoYSksXG4gICAgICAgIHQ6IGNvbnZlcnRIZXhBcnJUb0JpZ0ludEFycihjaGFsbGVuZ2UubnRpbGRlUHJvb2YuaDJXcnRIMS50KSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZE50aWxkZSA9IE50aWxkZTxzdHJpbmc+O1xuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYSBjaGFsbGVuZ2UgZnJvbSBiaWcgaW50IHRvIGhleCBzdHJpbmdzLlxuICogQHBhcmFtIGNoYWxsZW5nZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplTnRpbGRlKGNoYWxsZW5nZTogRGVzZXJpYWxpemVkTnRpbGRlKTogU2VyaWFsaXplZE50aWxkZSB7XG4gIHJldHVybiB7XG4gICAgbnRpbGRlOiBiaWdJbnRUb0hleChjaGFsbGVuZ2UubnRpbGRlKSxcbiAgICBoMTogYmlnSW50VG9IZXgoY2hhbGxlbmdlLmgxKSxcbiAgICBoMjogYmlnSW50VG9IZXgoY2hhbGxlbmdlLmgyKSxcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZE50aWxkZVByb29mID0gTnRpbGRlUHJvb2Y8c3RyaW5nPjtcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWROdGlsZGVQcm9vZnMgPSBOdGlsZGVQcm9vZnM8c3RyaW5nPjtcbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWROdGlsZGVXaXRoUHJvb2ZzID0gU2VyaWFsaXplZE50aWxkZSAmIHtcbiAgbnRpbGRlUHJvb2Y6IFNlcmlhbGl6ZWROdGlsZGVQcm9vZnM7XG59O1xuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYSBjaGFsbGVuZ2UgYW5kIGl0J3MgcHJvb2ZzIGZyb20gYmlnIGludCB0byBoZXggc3RyaW5ncy5cbiAqIEBwYXJhbSBjaGFsbGVuZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZU50aWxkZVdpdGhQcm9vZnMoY2hhbGxlbmdlOiBEZXNlcmlhbGl6ZWROdGlsZGVXaXRoUHJvb2ZzKTogU2VyaWFsaXplZE50aWxkZVdpdGhQcm9vZnMge1xuICByZXR1cm4ge1xuICAgIC4uLnNlcmlhbGl6ZU50aWxkZShjaGFsbGVuZ2UpLFxuICAgIG50aWxkZVByb29mOiB7XG4gICAgICBoMVdydEgyOiB7XG4gICAgICAgIGFscGhhOiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIoY2hhbGxlbmdlLm50aWxkZVByb29mLmgxV3J0SDIuYWxwaGEpLFxuICAgICAgICB0OiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIoY2hhbGxlbmdlLm50aWxkZVByb29mLmgxV3J0SDIudCksXG4gICAgICB9LFxuICAgICAgaDJXcnRIMToge1xuICAgICAgICBhbHBoYTogY29udmVydEJpZ0ludEFyclRvSGV4QXJyKGNoYWxsZW5nZS5udGlsZGVQcm9vZi5oMldydEgxLmFscGhhKSxcbiAgICAgICAgdDogY29udmVydEJpZ0ludEFyclRvSGV4QXJyKGNoYWxsZW5nZS5udGlsZGVQcm9vZi5oMldydEgxLnQpLFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJTQU1vZHVsdXMge1xuICBuOiBiaWdpbnQ7XG4gIC8vIFNvcGhpZSBHZXJtYWluIHByaW1lcy5cbiAgcTE6IGJpZ2ludDtcbiAgcTI6IGJpZ2ludDtcbn1cblxuLy8gUmFuZ2UgcHJvb2YgdmFsdWVzXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlUHJvb2Yge1xuICB6OiBiaWdpbnQ7XG4gIHU6IGJpZ2ludDtcbiAgdzogYmlnaW50O1xuICBzOiBiaWdpbnQ7XG4gIHMxOiBiaWdpbnQ7XG4gIHMyOiBiaWdpbnQ7XG59XG5cbi8vIFJhbmdlIHByb29mIHZhbHVlc1xuZXhwb3J0IGludGVyZmFjZSBSYW5nZVByb29mV2l0aENoZWNrIHtcbiAgejogYmlnaW50O1xuICB6cHJtOiBiaWdpbnQ7XG4gIHQ6IGJpZ2ludDtcbiAgdjogYmlnaW50O1xuICB3OiBiaWdpbnQ7XG4gIHM6IGJpZ2ludDtcbiAgczE6IGJpZ2ludDtcbiAgczI6IGJpZ2ludDtcbiAgdDE6IGJpZ2ludDtcbiAgdDI6IGJpZ2ludDtcbiAgdTogYmlnaW50O1xufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tss/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
__exportStar(require("./ecdsa"), exports);
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZWNkc2EnO1xuIl19
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { PublicKey } from 'paillier-bigint';
|
|
3
|
+
/**
|
|
4
|
+
* Returns a bigint array from a hex string array
|
|
5
|
+
* @param values
|
|
6
|
+
*/
|
|
7
|
+
export declare function convertHexArrToBigIntArr(values: string[]): bigint[];
|
|
8
|
+
/**
|
|
9
|
+
* Returns a hex string array from a bigint array
|
|
10
|
+
* @param values
|
|
11
|
+
*/
|
|
12
|
+
export declare function convertBigIntArrToHexArr(values: bigint[]): string[];
|
|
13
|
+
export declare function hexToBigInt(hex: string): bigint;
|
|
14
|
+
/**
|
|
15
|
+
* Returns an hex string of the given bigint
|
|
16
|
+
*
|
|
17
|
+
* @param {bigint} bigint - the bigint to be converted to hex
|
|
18
|
+
* @param hexLength
|
|
19
|
+
* @returns {string} - the hex value
|
|
20
|
+
*/
|
|
21
|
+
export declare function bigIntToHex(bigint: bigint, hexLength?: number): string;
|
|
22
|
+
export declare function bigIntToBufferLE(n: bigint, bytes?: number): Buffer;
|
|
23
|
+
export declare function bigIntFromBufferLE(buf: Buffer): bigint;
|
|
24
|
+
export declare function bigIntToBufferBE(n: bigint, bytes?: number): Buffer;
|
|
25
|
+
export declare function bigIntFromBufferBE(buf: Buffer): bigint;
|
|
26
|
+
export declare function bigIntFromU8ABE(buf: Uint8Array): bigint;
|
|
27
|
+
export declare function clamp(u: bigint): bigint;
|
|
28
|
+
/**
|
|
29
|
+
* Function get pallier public key simple varient
|
|
30
|
+
* @param {bigint} n
|
|
31
|
+
* @returns {bigint}
|
|
32
|
+
*/
|
|
33
|
+
export declare function getPaillierPublicKey(n: bigint): PublicKey;
|
|
34
|
+
/**
|
|
35
|
+
* Generate a random number co-prime to x
|
|
36
|
+
* @param x
|
|
37
|
+
*/
|
|
38
|
+
export declare function randomCoPrimeTo(x: bigint): Promise<bigint>;
|
|
39
|
+
/**
|
|
40
|
+
* Generate a random number of a given bitlength
|
|
41
|
+
* @param bitlength
|
|
42
|
+
*/
|
|
43
|
+
export declare function randomBigInt(bitlength: number): Promise<bigint>;
|
|
44
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInE;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAU/C;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAOtE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAIvC;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAEzD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOhE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE"}
|
package/dist/src/util.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.randomBigInt = exports.randomCoPrimeTo = exports.getPaillierPublicKey = exports.clamp = exports.bigIntFromU8ABE = exports.bigIntFromBufferBE = exports.bigIntToBufferBE = exports.bigIntFromBufferLE = exports.bigIntToBufferLE = exports.bigIntToHex = exports.hexToBigInt = exports.convertBigIntArrToHexArr = exports.convertHexArrToBigIntArr = void 0;
|
|
4
|
+
const paillier_bigint_1 = require("paillier-bigint");
|
|
5
|
+
const bigint_crypto_utils_1 = require("bigint-crypto-utils");
|
|
6
|
+
const bigint_mod_arith_1 = require("bigint-mod-arith");
|
|
7
|
+
/**
|
|
8
|
+
* Returns a bigint array from a hex string array
|
|
9
|
+
* @param values
|
|
10
|
+
*/
|
|
11
|
+
function convertHexArrToBigIntArr(values) {
|
|
12
|
+
return values.map((value) => {
|
|
13
|
+
return hexToBigInt(value);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
exports.convertHexArrToBigIntArr = convertHexArrToBigIntArr;
|
|
17
|
+
/**
|
|
18
|
+
* Returns a hex string array from a bigint array
|
|
19
|
+
* @param values
|
|
20
|
+
*/
|
|
21
|
+
function convertBigIntArrToHexArr(values) {
|
|
22
|
+
return values.map((value) => {
|
|
23
|
+
return bigIntToHex(value);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
exports.convertBigIntArrToHexArr = convertBigIntArrToHexArr;
|
|
27
|
+
function hexToBigInt(hex) {
|
|
28
|
+
// Strangely bigint.toString(16) gives a hex string without 0x,
|
|
29
|
+
// but it won't accept the same string without 0x to convert
|
|
30
|
+
// to a bigint (BigInt(hex string)). So have to introduce this
|
|
31
|
+
// check to convert to add 0x in case if hex string
|
|
32
|
+
// doesn't have it.
|
|
33
|
+
if (hex.slice(0, 2) === '0x') {
|
|
34
|
+
return BigInt(hex);
|
|
35
|
+
}
|
|
36
|
+
return BigInt('0x' + hex);
|
|
37
|
+
}
|
|
38
|
+
exports.hexToBigInt = hexToBigInt;
|
|
39
|
+
/**
|
|
40
|
+
* Returns an hex string of the given bigint
|
|
41
|
+
*
|
|
42
|
+
* @param {bigint} bigint - the bigint to be converted to hex
|
|
43
|
+
* @param hexLength
|
|
44
|
+
* @returns {string} - the hex value
|
|
45
|
+
*/
|
|
46
|
+
function bigIntToHex(bigint, hexLength) {
|
|
47
|
+
let hex = bigint.toString(16);
|
|
48
|
+
hex = '0'.slice(0, hex.length % 2) + hex;
|
|
49
|
+
if (hexLength) {
|
|
50
|
+
hex = hex.padStart(hexLength, '0');
|
|
51
|
+
}
|
|
52
|
+
return hex;
|
|
53
|
+
}
|
|
54
|
+
exports.bigIntToHex = bigIntToHex;
|
|
55
|
+
function bigIntToBufferLE(n, bytes) {
|
|
56
|
+
let v = n.toString(16);
|
|
57
|
+
v = '0'.slice(0, v.length % 2) + v;
|
|
58
|
+
const buf = Buffer.from(v, 'hex').reverse();
|
|
59
|
+
if (bytes && buf.length < bytes) {
|
|
60
|
+
return Buffer.concat([buf, Buffer.alloc(bytes - buf.length)]);
|
|
61
|
+
}
|
|
62
|
+
return buf;
|
|
63
|
+
}
|
|
64
|
+
exports.bigIntToBufferLE = bigIntToBufferLE;
|
|
65
|
+
function bigIntFromBufferLE(buf) {
|
|
66
|
+
return BigInt('0x' + Buffer.from(buf).reverse().toString('hex'));
|
|
67
|
+
}
|
|
68
|
+
exports.bigIntFromBufferLE = bigIntFromBufferLE;
|
|
69
|
+
function bigIntToBufferBE(n, bytes) {
|
|
70
|
+
let v = n.toString(16);
|
|
71
|
+
v = '0'.slice(0, v.length % 2) + v;
|
|
72
|
+
const buf = Buffer.from(v, 'hex');
|
|
73
|
+
if (bytes && buf.length < bytes) {
|
|
74
|
+
return Buffer.concat([Buffer.alloc(bytes - buf.length), buf]);
|
|
75
|
+
}
|
|
76
|
+
return buf;
|
|
77
|
+
}
|
|
78
|
+
exports.bigIntToBufferBE = bigIntToBufferBE;
|
|
79
|
+
function bigIntFromBufferBE(buf) {
|
|
80
|
+
return BigInt('0x' + buf.toString('hex'));
|
|
81
|
+
}
|
|
82
|
+
exports.bigIntFromBufferBE = bigIntFromBufferBE;
|
|
83
|
+
function bigIntFromU8ABE(buf) {
|
|
84
|
+
return bigIntFromBufferBE(Buffer.from(buf));
|
|
85
|
+
}
|
|
86
|
+
exports.bigIntFromU8ABE = bigIntFromU8ABE;
|
|
87
|
+
function clamp(u) {
|
|
88
|
+
u &= BigInt('0x7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8');
|
|
89
|
+
u |= BigInt('0x4000000000000000000000000000000000000000000000000000000000000000');
|
|
90
|
+
return u;
|
|
91
|
+
}
|
|
92
|
+
exports.clamp = clamp;
|
|
93
|
+
/**
|
|
94
|
+
* Function get pallier public key simple varient
|
|
95
|
+
* @param {bigint} n
|
|
96
|
+
* @returns {bigint}
|
|
97
|
+
*/
|
|
98
|
+
function getPaillierPublicKey(n) {
|
|
99
|
+
return new paillier_bigint_1.PublicKey(n, n + BigInt(1));
|
|
100
|
+
}
|
|
101
|
+
exports.getPaillierPublicKey = getPaillierPublicKey;
|
|
102
|
+
/**
|
|
103
|
+
* Generate a random number co-prime to x
|
|
104
|
+
* @param x
|
|
105
|
+
*/
|
|
106
|
+
async function randomCoPrimeTo(x) {
|
|
107
|
+
while (true) {
|
|
108
|
+
const y = await randomBigInt(bigint_crypto_utils_1.bitLength(x));
|
|
109
|
+
if (y > BigInt(0) && bigint_mod_arith_1.gcd(x, y) === BigInt(1)) {
|
|
110
|
+
return y;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
exports.randomCoPrimeTo = randomCoPrimeTo;
|
|
115
|
+
/**
|
|
116
|
+
* Generate a random number of a given bitlength
|
|
117
|
+
* @param bitlength
|
|
118
|
+
*/
|
|
119
|
+
async function randomBigInt(bitlength) {
|
|
120
|
+
return bigIntFromBufferBE(Buffer.from(await bigint_crypto_utils_1.randBits(bitlength, true)));
|
|
121
|
+
}
|
|
122
|
+
exports.randomBigInt = randomBigInt;
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUE0QztBQUM1Qyw2REFBMEQ7QUFDMUQsdURBQXVDO0FBRXZDOzs7R0FHRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLE1BQWdCO0lBQ3ZELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzFCLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUpELDREQUlDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsTUFBZ0I7SUFDdkQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDMUIsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBSkQsNERBSUM7QUFFRCxTQUFnQixXQUFXLENBQUMsR0FBVztJQUNyQywrREFBK0Q7SUFDL0QsNERBQTREO0lBQzVELDhEQUE4RDtJQUM5RCxtREFBbUQ7SUFDbkQsbUJBQW1CO0lBQ25CLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQzVCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3BCO0lBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFWRCxrQ0FVQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFdBQVcsQ0FBQyxNQUFjLEVBQUUsU0FBa0I7SUFDNUQsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVB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RUQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLGVBQWUsQ0FBQyxDQUFTO0lBQzdDLE9BQU8sSUFBSSxFQUFFO1FBQ1gsTUFBTSxDQUFDLEdBQUcsTUFBTSxZQUFZLENBQUMsK0JBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxzQkFBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDNUMsT0FBTyxDQUFDLENBQUM7U0FDVjtLQUNGO0FBQ0gsQ0FBQztBQVBELDBDQU9DO0FBRUQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FBQyxTQUFpQjtJQUNsRCxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSw4QkFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUZELG9DQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHVibGljS2V5IH0gZnJvbSAncGFpbGxpZXItYmlnaW50JztcbmltcG9ydCB7IGJpdExlbmd0aCwgcmFuZEJpdHMgfSBmcm9tICdiaWdpbnQtY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IGdjZCB9IGZyb20gJ2JpZ2ludC1tb2QtYXJpdGgnO1xuXG4vKipcbiAqIFJldHVybnMgYSBiaWdpbnQgYXJyYXkgZnJvbSBhIGhleCBzdHJpbmcgYXJyYXlcbiAqIEBwYXJhbSB2YWx1ZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRIZXhBcnJUb0JpZ0ludEFycih2YWx1ZXM6IHN0cmluZ1tdKTogYmlnaW50W10ge1xuICByZXR1cm4gdmFsdWVzLm1hcCgodmFsdWUpID0+IHtcbiAgICByZXR1cm4gaGV4VG9CaWdJbnQodmFsdWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgaGV4IHN0cmluZyBhcnJheSBmcm9tIGEgYmlnaW50IGFycmF5XG4gKiBAcGFyYW0gdmFsdWVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QmlnSW50QXJyVG9IZXhBcnIodmFsdWVzOiBiaWdpbnRbXSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHZhbHVlcy5tYXAoKHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIGJpZ0ludFRvSGV4KHZhbHVlKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoZXhUb0JpZ0ludChoZXg6IHN0cmluZyk6IGJpZ2ludCB7XG4gIC8vIFN0cmFuZ2VseSBiaWdpbnQudG9TdHJpbmcoMTYpIGdpdmVzIGEgaGV4IHN0cmluZyB3aXRob3V0IDB4LFxuICAvLyBidXQgaXQgd29uJ3QgYWNjZXB0IHRoZSBzYW1lIHN0cmluZyB3aXRob3V0IDB4IHRvIGNvbnZlcnRcbiAgLy8gdG8gYSBiaWdpbnQgKEJpZ0ludChoZXggc3RyaW5nKSkuIFNvIGhhdmUgdG8gaW50cm9kdWNlIHRoaXNcbiAgLy8gY2hlY2sgdG8gY29udmVydCB0byBhZGQgMHggaW4gY2FzZSBpZiBoZXggc3RyaW5nXG4gIC8vIGRvZXNuJ3QgaGF2ZSBpdC5cbiAgaWYgKGhleC5zbGljZSgwLCAyKSA9PT0gJzB4Jykge1xuICAgIHJldHVybiBCaWdJbnQoaGV4KTtcbiAgfVxuICByZXR1cm4gQmlnSW50KCcweCcgKyBoZXgpO1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gaGV4IHN0cmluZyBvZiB0aGUgZ2l2ZW4gYmlnaW50XG4gKlxuICogQHBhcmFtIHtiaWdpbnR9IGJpZ2ludCAtIHRoZSBiaWdpbnQgdG8gYmUgY29udmVydGVkIHRvIGhleFxuICogQHBhcmFtIGhleExlbmd0aFxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgaGV4IHZhbHVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRUb0hleChiaWdpbnQ6IGJpZ2ludCwgaGV4TGVuZ3RoPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgbGV0IGhleCA9IGJpZ2ludC50b1N0cmluZygxNik7XG4gIGhleCA9ICcwJy5zbGljZSgwLCBoZXgubGVuZ3RoICUgMikgKyBoZXg7XG4gIGlmIChoZXhMZW5ndGgpIHtcbiAgICBoZXggPSBoZXgucGFkU3RhcnQoaGV4TGVuZ3RoLCAnMCcpO1xuICB9XG4gIHJldHVybiBoZXg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiaWdJbnRUb0J1ZmZlckxFKG46IGJpZ2ludCwgYnl0ZXM/OiBudW1iZXIpOiBCdWZmZXIge1xuICBsZXQgdiA9IG4udG9TdHJpbmcoMTYpO1xuICB2ID0gJzAnLnNsaWNlKDAsIHYubGVuZ3RoICUgMikgKyB2O1xuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbSh2LCAnaGV4JykucmV2ZXJzZSgpO1xuICBpZiAoYnl0ZXMgJiYgYnVmLmxlbmd0aCA8IGJ5dGVzKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoW2J1ZiwgQnVmZmVyLmFsbG9jKGJ5dGVzIC0gYnVmLmxlbmd0aCldKTtcbiAgfVxuICByZXR1cm4gYnVmO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50RnJvbUJ1ZmZlckxFKGJ1ZjogQnVmZmVyKTogYmlnaW50IHtcbiAgcmV0dXJuIEJpZ0ludCgnMHgnICsgQnVmZmVyLmZyb20oYnVmKS5yZXZlcnNlKCkudG9TdHJpbmcoJ2hleCcpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludFRvQnVmZmVyQkUobjogYmlnaW50LCBieXRlcz86IG51bWJlcik6IEJ1ZmZlciB7XG4gIGxldCB2ID0gbi50b1N0cmluZygxNik7XG4gIHYgPSAnMCcuc2xpY2UoMCwgdi5sZW5ndGggJSAyKSArIHY7XG4gIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKHYsICdoZXgnKTtcbiAgaWYgKGJ5dGVzICYmIGJ1Zi5sZW5ndGggPCBieXRlcykge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFtCdWZmZXIuYWxsb2MoYnl0ZXMgLSBidWYubGVuZ3RoKSwgYnVmXSk7XG4gIH1cbiAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJpZ0ludEZyb21CdWZmZXJCRShidWY6IEJ1ZmZlcik6IGJpZ2ludCB7XG4gIHJldHVybiBCaWdJbnQoJzB4JyArIGJ1Zi50b1N0cmluZygnaGV4JykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmlnSW50RnJvbVU4QUJFKGJ1ZjogVWludDhBcnJheSk6IGJpZ2ludCB7XG4gIHJldHVybiBiaWdJbnRGcm9tQnVmZmVyQkUoQnVmZmVyLmZyb20oYnVmKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcCh1OiBiaWdpbnQpOiBiaWdpbnQge1xuICB1ICY9IEJpZ0ludCgnMHg3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmY4Jyk7XG4gIHUgfD0gQmlnSW50KCcweDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnKTtcbiAgcmV0dXJuIHU7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZ2V0IHBhbGxpZXIgcHVibGljIGtleSBzaW1wbGUgdmFyaWVudFxuICogQHBhcmFtIHtiaWdpbnR9IG5cbiAqIEByZXR1cm5zIHtiaWdpbnR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWlsbGllclB1YmxpY0tleShuOiBiaWdpbnQpOiBQdWJsaWNLZXkge1xuICByZXR1cm4gbmV3IFB1YmxpY0tleShuLCBuICsgQmlnSW50KDEpKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgY28tcHJpbWUgdG8geFxuICogQHBhcmFtIHhcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJhbmRvbUNvUHJpbWVUbyh4OiBiaWdpbnQpOiBQcm9taXNlPGJpZ2ludD4ge1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHkgPSBhd2FpdCByYW5kb21CaWdJbnQoYml0TGVuZ3RoKHgpKTtcbiAgICBpZiAoeSA+IEJpZ0ludCgwKSAmJiBnY2QoeCwgeSkgPT09IEJpZ0ludCgxKSkge1xuICAgICAgcmV0dXJuIHk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSByYW5kb20gbnVtYmVyIG9mIGEgZ2l2ZW4gYml0bGVuZ3RoXG4gKiBAcGFyYW0gYml0bGVuZ3RoXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYW5kb21CaWdJbnQoYml0bGVuZ3RoOiBudW1iZXIpOiBQcm9taXNlPGJpZ2ludD4ge1xuICByZXR1cm4gYmlnSW50RnJvbUJ1ZmZlckJFKEJ1ZmZlci5mcm9tKGF3YWl0IHJhbmRCaXRzKGJpdGxlbmd0aCwgdHJ1ZSkpKTtcbn1cbiJdfQ==
|