@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.
Files changed (42) hide show
  1. package/.eslintignore +5 -0
  2. package/CHANGELOG.md +4 -0
  3. package/LICENSE +191 -0
  4. package/README.md +0 -0
  5. package/dist/src/curves/baseCurve.d.ts +19 -0
  6. package/dist/src/curves/baseCurve.d.ts.map +1 -0
  7. package/dist/src/curves/baseCurve.js +6 -0
  8. package/dist/src/curves/index.d.ts +3 -0
  9. package/dist/src/curves/index.d.ts.map +1 -0
  10. package/dist/src/curves/index.js +15 -0
  11. package/dist/src/curves/secp256k1.d.ts +17 -0
  12. package/dist/src/curves/secp256k1.d.ts.map +1 -0
  13. package/dist/src/curves/secp256k1.js +70 -0
  14. package/dist/src/index.d.ts +4 -0
  15. package/dist/src/index.d.ts.map +1 -0
  16. package/dist/src/index.js +16 -0
  17. package/dist/src/openssl/index.d.ts +2 -0
  18. package/dist/src/openssl/index.d.ts.map +1 -0
  19. package/dist/src/openssl/index.js +14 -0
  20. package/dist/src/openssl/openssl.d.ts +9 -0
  21. package/dist/src/openssl/openssl.d.ts.map +1 -0
  22. package/dist/src/openssl/openssl.js +45 -0
  23. package/dist/src/openssl/opensslbytes.d.ts +4 -0
  24. package/dist/src/openssl/opensslbytes.d.ts.map +1 -0
  25. package/dist/src/openssl/opensslbytes.js +20 -0
  26. package/dist/src/tss/ecdsa/index.d.ts +3 -0
  27. package/dist/src/tss/ecdsa/index.d.ts.map +1 -0
  28. package/dist/src/tss/ecdsa/index.js +25 -0
  29. package/dist/src/tss/ecdsa/rangeproof.d.ts +80 -0
  30. package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -0
  31. package/dist/src/tss/ecdsa/rangeproof.js +403 -0
  32. package/dist/src/tss/ecdsa/types.d.ts +73 -0
  33. package/dist/src/tss/ecdsa/types.d.ts.map +1 -0
  34. package/dist/src/tss/ecdsa/types.js +70 -0
  35. package/dist/src/tss/index.d.ts +2 -0
  36. package/dist/src/tss/index.d.ts.map +1 -0
  37. package/dist/src/tss/index.js +14 -0
  38. package/dist/src/util.d.ts +44 -0
  39. package/dist/src/util.d.ts.map +1 -0
  40. package/dist/src/util.js +123 -0
  41. package/dist/tsconfig.tsbuildinfo +3621 -0
  42. 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,2 @@
1
+ export * from './ecdsa';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -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==