@bitgo-beta/sdk-lib-mpc 8.2.0-beta.212 → 8.2.0-beta.2120
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/dist/src/curves/ed25519.d.ts +0 -1
- package/dist/src/curves/ed25519.d.ts.map +1 -1
- package/dist/src/curves/ed25519.js +12 -12
- package/dist/src/curves/ed25519Bip32HdTree.js +14 -14
- package/dist/src/curves/index.js +6 -2
- package/dist/src/curves/secp256k1.d.ts +0 -1
- package/dist/src/curves/secp256k1.d.ts.map +1 -1
- package/dist/src/curves/secp256k1.js +22 -38
- package/dist/src/curves/secp256k1Bip32HdTree.js +10 -10
- package/dist/src/curves/types.d.ts +2 -3
- package/dist/src/curves/types.d.ts.map +1 -1
- package/dist/src/curves/util.d.ts +2 -0
- package/dist/src/curves/util.d.ts.map +1 -1
- package/dist/src/curves/util.js +34 -3
- package/dist/src/hashCommitment.d.ts +0 -1
- package/dist/src/hashCommitment.d.ts.map +1 -1
- package/dist/src/hashCommitment.js +7 -8
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +24 -10
- package/dist/src/openssl/index.js +6 -2
- package/dist/src/openssl/openssl.d.ts +1 -2
- package/dist/src/openssl/openssl.d.ts.map +1 -1
- package/dist/src/openssl/openssl.js +4 -12
- package/dist/src/safePrime.d.ts +3 -0
- package/dist/src/safePrime.d.ts.map +1 -0
- package/dist/src/safePrime.js +19 -0
- package/dist/src/schnorrProof.d.ts +0 -1
- package/dist/src/schnorrProof.d.ts.map +1 -1
- package/dist/src/schnorrProof.js +8 -9
- package/dist/src/shamir/index.js +6 -2
- package/dist/src/shamir/shamir.js +2 -2
- package/dist/src/shamir/types.d.ts +1 -1
- package/dist/src/shamir/types.d.ts.map +1 -1
- package/dist/src/tss/dkls-vrf/dkg.d.ts +91 -0
- package/dist/src/tss/dkls-vrf/dkg.d.ts.map +1 -0
- package/dist/src/tss/dkls-vrf/dkg.js +278 -0
- package/dist/src/tss/dkls-vrf/index.d.ts +4 -0
- package/dist/src/tss/dkls-vrf/index.d.ts.map +1 -0
- package/dist/src/tss/dkls-vrf/index.js +40 -0
- package/dist/src/tss/dkls-vrf/types.d.ts +28 -0
- package/dist/src/tss/dkls-vrf/types.d.ts.map +1 -0
- package/dist/src/tss/dkls-vrf/types.js +23 -0
- package/dist/src/tss/dkls-vrf/util.d.ts +63 -0
- package/dist/src/tss/dkls-vrf/util.d.ts.map +1 -0
- package/dist/src/tss/dkls-vrf/util.js +200 -0
- package/dist/src/tss/ecdsa/index.js +23 -9
- package/dist/src/tss/ecdsa/paillierproof.js +10 -10
- package/dist/src/tss/ecdsa/rangeproof.d.ts +1 -2
- package/dist/src/tss/ecdsa/rangeproof.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/rangeproof.js +108 -118
- package/dist/src/tss/ecdsa/types.d.ts +28 -17
- package/dist/src/tss/ecdsa/types.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/types.js +29 -31
- package/dist/src/tss/ecdsa/zkVProof.d.ts +0 -1
- package/dist/src/tss/ecdsa/zkVProof.d.ts.map +1 -1
- package/dist/src/tss/ecdsa/zkVProof.js +9 -10
- package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts +69 -0
- package/dist/src/tss/ecdsa-dkls/commsLayer.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/commsLayer.js +268 -0
- package/dist/src/tss/ecdsa-dkls/derive.d.ts +111 -0
- package/dist/src/tss/ecdsa-dkls/derive.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/derive.js +329 -0
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts +64 -0
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/dkg.js +309 -0
- package/dist/src/tss/ecdsa-dkls/dsg.d.ts +47 -0
- package/dist/src/tss/ecdsa-dkls/dsg.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/dsg.js +271 -0
- package/dist/src/tss/ecdsa-dkls/index.d.ts +7 -0
- package/dist/src/tss/ecdsa-dkls/index.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/index.js +43 -0
- package/dist/src/tss/ecdsa-dkls/types.d.ts +163 -0
- package/dist/src/tss/ecdsa-dkls/types.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/types.js +215 -0
- package/dist/src/tss/ecdsa-dkls/util.d.ts +26 -0
- package/dist/src/tss/ecdsa-dkls/util.d.ts.map +1 -0
- package/dist/src/tss/ecdsa-dkls/util.js +276 -0
- package/dist/src/tss/eddsa-mps/commsLayer.d.ts +30 -0
- package/dist/src/tss/eddsa-mps/commsLayer.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/commsLayer.js +96 -0
- package/dist/src/tss/eddsa-mps/derive.d.ts +34 -0
- package/dist/src/tss/eddsa-mps/derive.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/derive.js +198 -0
- package/dist/src/tss/eddsa-mps/dkg.d.ts +109 -0
- package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/dkg.js +304 -0
- package/dist/src/tss/eddsa-mps/dsg.d.ts +96 -0
- package/dist/src/tss/eddsa-mps/dsg.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/dsg.js +346 -0
- package/dist/src/tss/eddsa-mps/index.d.ts +8 -0
- package/dist/src/tss/eddsa-mps/index.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/index.js +43 -0
- package/dist/src/tss/eddsa-mps/types.d.ts +76 -0
- package/dist/src/tss/eddsa-mps/types.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/types.js +105 -0
- package/dist/src/tss/eddsa-mps/util.d.ts +33 -0
- package/dist/src/tss/eddsa-mps/util.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps/util.js +94 -0
- package/dist/src/tss/eddsa-mps-vrf/dkg.d.ts +65 -0
- package/dist/src/tss/eddsa-mps-vrf/dkg.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps-vrf/dkg.js +246 -0
- package/dist/src/tss/eddsa-mps-vrf/index.d.ts +4 -0
- package/dist/src/tss/eddsa-mps-vrf/index.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps-vrf/index.js +40 -0
- package/dist/src/tss/eddsa-mps-vrf/types.d.ts +31 -0
- package/dist/src/tss/eddsa-mps-vrf/types.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps-vrf/types.js +97 -0
- package/dist/src/tss/eddsa-mps-vrf/util.d.ts +29 -0
- package/dist/src/tss/eddsa-mps-vrf/util.d.ts.map +1 -0
- package/dist/src/tss/eddsa-mps-vrf/util.js +75 -0
- package/dist/src/tss/index.d.ts +5 -0
- package/dist/src/tss/index.d.ts.map +1 -1
- package/dist/src/tss/index.js +11 -2
- package/dist/src/tss/redpallas-mps/commsLayer.d.ts +34 -0
- package/dist/src/tss/redpallas-mps/commsLayer.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/commsLayer.js +100 -0
- package/dist/src/tss/redpallas-mps/dkg.d.ts +103 -0
- package/dist/src/tss/redpallas-mps/dkg.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/dkg.js +285 -0
- package/dist/src/tss/redpallas-mps/dsg.d.ts +130 -0
- package/dist/src/tss/redpallas-mps/dsg.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/dsg.js +376 -0
- package/dist/src/tss/redpallas-mps/index.d.ts +8 -0
- package/dist/src/tss/redpallas-mps/index.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/index.js +43 -0
- package/dist/src/tss/redpallas-mps/rerand.d.ts +110 -0
- package/dist/src/tss/redpallas-mps/rerand.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/rerand.js +330 -0
- package/dist/src/tss/redpallas-mps/types.d.ts +120 -0
- package/dist/src/tss/redpallas-mps/types.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/types.js +133 -0
- package/dist/src/tss/redpallas-mps/util.d.ts +56 -0
- package/dist/src/tss/redpallas-mps/util.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/util.js +173 -0
- package/dist/src/types.d.ts +0 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/util.d.ts +0 -1
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +21 -22
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +42 -5
- package/.eslintignore +0 -5
- package/CHANGELOG.md +0 -356
- package/dist/src/openssl/opensslbytes.d.ts +0 -4
- package/dist/src/openssl/opensslbytes.d.ts.map +0 -1
- package/dist/src/openssl/opensslbytes.js +0 -20
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.RedPallasRerandState = exports.RedPallasDsgState = exports.RedPallasDkgState = exports.RedPallasReducedKeyShareType = void 0;
|
|
37
|
+
exports.serializeMessage = serializeMessage;
|
|
38
|
+
exports.deserializeMessage = deserializeMessage;
|
|
39
|
+
exports.serializeMessages = serializeMessages;
|
|
40
|
+
exports.deserializeMessages = deserializeMessages;
|
|
41
|
+
exports.getDecodedReducedKeyShare = getDecodedReducedKeyShare;
|
|
42
|
+
const cbor_x_1 = require("cbor-x");
|
|
43
|
+
const Either_1 = require("fp-ts/Either");
|
|
44
|
+
const t = __importStar(require("io-ts"));
|
|
45
|
+
exports.RedPallasReducedKeyShareType = t.type({
|
|
46
|
+
keyShare: t.array(t.number),
|
|
47
|
+
pub: t.array(t.number),
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* Represents the state of a RedPallas DKG (Distributed Key Generation) session.
|
|
51
|
+
*
|
|
52
|
+
* Unlike the EdDSA MPS `DkgState`, there is no `Share` state: `redpallas_dkg_round2_process`
|
|
53
|
+
* returns a `MsgDerivationInit` (msg/pk/share/state) directly, completing the DKG session in
|
|
54
|
+
* one step. Key derivation (ask/nk/rivk/ivks) is a separate, subsequent, platform-side-only
|
|
55
|
+
* process (`redpallas_derivation_process`) not modelled here.
|
|
56
|
+
*/
|
|
57
|
+
var RedPallasDkgState;
|
|
58
|
+
(function (RedPallasDkgState) {
|
|
59
|
+
/** DKG session has not been initialized */
|
|
60
|
+
RedPallasDkgState["Uninitialized"] = "Uninitialized";
|
|
61
|
+
/** DKG session has been initialized (Init state in WASM) */
|
|
62
|
+
RedPallasDkgState["Init"] = "Init";
|
|
63
|
+
/** DKG session is waiting for first message (WaitMsg1 state in WASM) */
|
|
64
|
+
RedPallasDkgState["WaitMsg1"] = "WaitMsg1";
|
|
65
|
+
/** DKG session is waiting for second message (WaitMsg2 state in WASM) */
|
|
66
|
+
RedPallasDkgState["WaitMsg2"] = "WaitMsg2";
|
|
67
|
+
/** DKG session has completed successfully and key shares are available */
|
|
68
|
+
RedPallasDkgState["Complete"] = "Complete";
|
|
69
|
+
})(RedPallasDkgState || (exports.RedPallasDkgState = RedPallasDkgState = {}));
|
|
70
|
+
/**
|
|
71
|
+
* Represents the state of a RedPallas DSG (Distributed Sign Generation) session.
|
|
72
|
+
*
|
|
73
|
+
* Mirrors the EdDSA MPS `DsgState`, except `redpallas_dsg_round0_process` does not take a
|
|
74
|
+
* derivation path: RedPallas key derivation (ask/nk/rivk/ivks) happens separately, upstream,
|
|
75
|
+
* as part of DKG (see `RedPallasDkgState`); the DSG round functions only ever operate on an
|
|
76
|
+
* already-derived (or root) `Keyshare`. The keyshare passed to DSG must come from a prior
|
|
77
|
+
* `RedPallasRerand` session (see `RedPallasRerandState`).
|
|
78
|
+
*/
|
|
79
|
+
var RedPallasDsgState;
|
|
80
|
+
(function (RedPallasDsgState) {
|
|
81
|
+
/** DSG session has not been initialized */
|
|
82
|
+
RedPallasDsgState["Uninitialized"] = "Uninitialized";
|
|
83
|
+
/** initDsg() has been called; ready for getFirstMessage() */
|
|
84
|
+
RedPallasDsgState["Init"] = "Init";
|
|
85
|
+
/** R0 broadcast emitted; waiting for counterpart's R0 broadcast (SignMsg1) */
|
|
86
|
+
RedPallasDsgState["WaitMsg1"] = "WaitMsg1";
|
|
87
|
+
/** R1 broadcast emitted; waiting for counterpart's R1 broadcast (SignMsg2) */
|
|
88
|
+
RedPallasDsgState["WaitMsg2"] = "WaitMsg2";
|
|
89
|
+
/** R2 broadcast emitted; waiting for counterpart's R2 broadcast (SignMsg3, the partial sig) */
|
|
90
|
+
RedPallasDsgState["WaitMsg3"] = "WaitMsg3";
|
|
91
|
+
/** Final RedPallas signature (signature/rk) is available via getSignature() */
|
|
92
|
+
RedPallasDsgState["Complete"] = "Complete";
|
|
93
|
+
})(RedPallasDsgState || (exports.RedPallasDsgState = RedPallasDsgState = {}));
|
|
94
|
+
/**
|
|
95
|
+
* Represents the state of a RedPallas rerand (key re-randomization) session.
|
|
96
|
+
*
|
|
97
|
+
* A rerand session must run before every RedPallas DSG, between the same 2 parties
|
|
98
|
+
* that will then sign. Since `@bitgo/wasm-mps` 1.17.0, DSG no longer randomizes the
|
|
99
|
+
* key it signs with; the randomizer (`alpha`) is produced here instead.
|
|
100
|
+
*/
|
|
101
|
+
var RedPallasRerandState;
|
|
102
|
+
(function (RedPallasRerandState) {
|
|
103
|
+
/** Rerand session has not been initialized */
|
|
104
|
+
RedPallasRerandState["Uninitialized"] = "Uninitialized";
|
|
105
|
+
/** initRerand() has been called; ready for getFirstMessage() */
|
|
106
|
+
RedPallasRerandState["Init"] = "Init";
|
|
107
|
+
/** R0 (local commitment) emitted; waiting for counterpart's R0 broadcast (commitment) */
|
|
108
|
+
RedPallasRerandState["WaitMsg1"] = "WaitMsg1";
|
|
109
|
+
/** R1 broadcast emitted; waiting for counterpart's R1 broadcast (randomizer + blind opening) */
|
|
110
|
+
RedPallasRerandState["WaitMsg2"] = "WaitMsg2";
|
|
111
|
+
/** Rerandomized key share (keyShare/pk/alpha) is available via getRerandomizedKeyShare() */
|
|
112
|
+
RedPallasRerandState["Complete"] = "Complete";
|
|
113
|
+
})(RedPallasRerandState || (exports.RedPallasRerandState = RedPallasRerandState = {}));
|
|
114
|
+
function serializeMessage(msg) {
|
|
115
|
+
return { from: msg.from, payload: Buffer.from(msg.payload).toString('base64') };
|
|
116
|
+
}
|
|
117
|
+
function deserializeMessage(msg) {
|
|
118
|
+
return { from: msg.from, payload: Buffer.from(msg.payload, 'base64') };
|
|
119
|
+
}
|
|
120
|
+
function serializeMessages(msgs) {
|
|
121
|
+
return msgs.map(serializeMessage);
|
|
122
|
+
}
|
|
123
|
+
function deserializeMessages(msgs) {
|
|
124
|
+
return msgs.map(deserializeMessage);
|
|
125
|
+
}
|
|
126
|
+
function getDecodedReducedKeyShare(reducedKeyShare) {
|
|
127
|
+
const decoded = exports.RedPallasReducedKeyShareType.decode((0, cbor_x_1.decode)(reducedKeyShare));
|
|
128
|
+
if ((0, Either_1.isLeft)(decoded)) {
|
|
129
|
+
throw new Error(`Unable to parse reducedKeyShare: ${decoded.left}`);
|
|
130
|
+
}
|
|
131
|
+
return decoded.right;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHNzL3JlZHBhbGxhcy1tcHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0lBLDRDQUVDO0FBRUQsZ0RBRUM7QUFFRCw4Q0FFQztBQUVELGtEQUVDO0FBRUQsOERBTUM7QUF4SkQsbUNBQWdDO0FBQ2hDLHlDQUFzQztBQUN0Qyx5Q0FBMkI7QUFFZCxRQUFBLDRCQUE0QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDakQsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzQixHQUFHLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0NBQ3ZCLENBQUMsQ0FBQztBQUlIOzs7Ozs7O0dBT0c7QUFDSCxJQUFZLGlCQVdYO0FBWEQsV0FBWSxpQkFBaUI7SUFDM0IsMkNBQTJDO0lBQzNDLG9EQUErQixDQUFBO0lBQy9CLDREQUE0RDtJQUM1RCxrQ0FBYSxDQUFBO0lBQ2Isd0VBQXdFO0lBQ3hFLDBDQUFxQixDQUFBO0lBQ3JCLHlFQUF5RTtJQUN6RSwwQ0FBcUIsQ0FBQTtJQUNyQiwwRUFBMEU7SUFDMUUsMENBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQVhXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBVzVCO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxJQUFZLGlCQWFYO0FBYkQsV0FBWSxpQkFBaUI7SUFDM0IsMkNBQTJDO0lBQzNDLG9EQUErQixDQUFBO0lBQy9CLDZEQUE2RDtJQUM3RCxrQ0FBYSxDQUFBO0lBQ2IsOEVBQThFO0lBQzlFLDBDQUFxQixDQUFBO0lBQ3JCLDhFQUE4RTtJQUM5RSwwQ0FBcUIsQ0FBQTtJQUNyQiwrRkFBK0Y7SUFDL0YsMENBQXFCLENBQUE7SUFDckIsK0VBQStFO0lBQy9FLDBDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFiVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQWE1QjtBQUVEOzs7Ozs7R0FNRztBQUNILElBQVksb0JBV1g7QUFYRCxXQUFZLG9CQUFvQjtJQUM5Qiw4Q0FBOEM7SUFDOUMsdURBQStCLENBQUE7SUFDL0IsZ0VBQWdFO0lBQ2hFLHFDQUFhLENBQUE7SUFDYix5RkFBeUY7SUFDekYsNkNBQXFCLENBQUE7SUFDckIsZ0dBQWdHO0lBQ2hHLDZDQUFxQixDQUFBO0lBQ3JCLDRGQUE0RjtJQUM1Riw2Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBWFcsb0JBQW9CLG9DQUFwQixvQkFBb0IsUUFXL0I7QUF3REQsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBd0I7SUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNsRixDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsR0FBc0I7SUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUN6RSxDQUFDO0FBRUQsU0FBZ0IsaUJBQWlCLENBQUMsSUFBMEI7SUFDMUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLElBQXdCO0lBQzFELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxTQUFnQix5QkFBeUIsQ0FBQyxlQUFvQztJQUM1RSxNQUFNLE9BQU8sR0FBRyxvQ0FBNEIsQ0FBQyxNQUFNLENBQUMsSUFBQSxlQUFNLEVBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUM3RSxJQUFJLElBQUEsZUFBTSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVjb2RlIH0gZnJvbSAnY2Jvci14JztcbmltcG9ydCB7IGlzTGVmdCB9IGZyb20gJ2ZwLXRzL0VpdGhlcic7XG5pbXBvcnQgKiBhcyB0IGZyb20gJ2lvLXRzJztcblxuZXhwb3J0IGNvbnN0IFJlZFBhbGxhc1JlZHVjZWRLZXlTaGFyZVR5cGUgPSB0LnR5cGUoe1xuICBrZXlTaGFyZTogdC5hcnJheSh0Lm51bWJlciksXG4gIHB1YjogdC5hcnJheSh0Lm51bWJlciksXG59KTtcblxuZXhwb3J0IHR5cGUgUmVkUGFsbGFzUmVkdWNlZEtleVNoYXJlID0gdC5UeXBlT2Y8dHlwZW9mIFJlZFBhbGxhc1JlZHVjZWRLZXlTaGFyZVR5cGU+O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIGEgUmVkUGFsbGFzIERLRyAoRGlzdHJpYnV0ZWQgS2V5IEdlbmVyYXRpb24pIHNlc3Npb24uXG4gKlxuICogVW5saWtlIHRoZSBFZERTQSBNUFMgYERrZ1N0YXRlYCwgdGhlcmUgaXMgbm8gYFNoYXJlYCBzdGF0ZTogYHJlZHBhbGxhc19ka2dfcm91bmQyX3Byb2Nlc3NgXG4gKiByZXR1cm5zIGEgYE1zZ0Rlcml2YXRpb25Jbml0YCAobXNnL3BrL3NoYXJlL3N0YXRlKSBkaXJlY3RseSwgY29tcGxldGluZyB0aGUgREtHIHNlc3Npb24gaW5cbiAqIG9uZSBzdGVwLiBLZXkgZGVyaXZhdGlvbiAoYXNrL25rL3JpdmsvaXZrcykgaXMgYSBzZXBhcmF0ZSwgc3Vic2VxdWVudCwgcGxhdGZvcm0tc2lkZS1vbmx5XG4gKiBwcm9jZXNzIChgcmVkcGFsbGFzX2Rlcml2YXRpb25fcHJvY2Vzc2ApIG5vdCBtb2RlbGxlZCBoZXJlLlxuICovXG5leHBvcnQgZW51bSBSZWRQYWxsYXNEa2dTdGF0ZSB7XG4gIC8qKiBES0cgc2Vzc2lvbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgKi9cbiAgVW5pbml0aWFsaXplZCA9ICdVbmluaXRpYWxpemVkJyxcbiAgLyoqIERLRyBzZXNzaW9uIGhhcyBiZWVuIGluaXRpYWxpemVkIChJbml0IHN0YXRlIGluIFdBU00pICovXG4gIEluaXQgPSAnSW5pdCcsXG4gIC8qKiBES0cgc2Vzc2lvbiBpcyB3YWl0aW5nIGZvciBmaXJzdCBtZXNzYWdlIChXYWl0TXNnMSBzdGF0ZSBpbiBXQVNNKSAqL1xuICBXYWl0TXNnMSA9ICdXYWl0TXNnMScsXG4gIC8qKiBES0cgc2Vzc2lvbiBpcyB3YWl0aW5nIGZvciBzZWNvbmQgbWVzc2FnZSAoV2FpdE1zZzIgc3RhdGUgaW4gV0FTTSkgKi9cbiAgV2FpdE1zZzIgPSAnV2FpdE1zZzInLFxuICAvKiogREtHIHNlc3Npb24gaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYW5kIGtleSBzaGFyZXMgYXJlIGF2YWlsYWJsZSAqL1xuICBDb21wbGV0ZSA9ICdDb21wbGV0ZScsXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc3RhdGUgb2YgYSBSZWRQYWxsYXMgRFNHIChEaXN0cmlidXRlZCBTaWduIEdlbmVyYXRpb24pIHNlc3Npb24uXG4gKlxuICogTWlycm9ycyB0aGUgRWREU0EgTVBTIGBEc2dTdGF0ZWAsIGV4Y2VwdCBgcmVkcGFsbGFzX2RzZ19yb3VuZDBfcHJvY2Vzc2AgZG9lcyBub3QgdGFrZSBhXG4gKiBkZXJpdmF0aW9uIHBhdGg6IFJlZFBhbGxhcyBrZXkgZGVyaXZhdGlvbiAoYXNrL25rL3JpdmsvaXZrcykgaGFwcGVucyBzZXBhcmF0ZWx5LCB1cHN0cmVhbSxcbiAqIGFzIHBhcnQgb2YgREtHIChzZWUgYFJlZFBhbGxhc0RrZ1N0YXRlYCk7IHRoZSBEU0cgcm91bmQgZnVuY3Rpb25zIG9ubHkgZXZlciBvcGVyYXRlIG9uIGFuXG4gKiBhbHJlYWR5LWRlcml2ZWQgKG9yIHJvb3QpIGBLZXlzaGFyZWAuIFRoZSBrZXlzaGFyZSBwYXNzZWQgdG8gRFNHIG11c3QgY29tZSBmcm9tIGEgcHJpb3JcbiAqIGBSZWRQYWxsYXNSZXJhbmRgIHNlc3Npb24gKHNlZSBgUmVkUGFsbGFzUmVyYW5kU3RhdGVgKS5cbiAqL1xuZXhwb3J0IGVudW0gUmVkUGFsbGFzRHNnU3RhdGUge1xuICAvKiogRFNHIHNlc3Npb24gaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkICovXG4gIFVuaW5pdGlhbGl6ZWQgPSAnVW5pbml0aWFsaXplZCcsXG4gIC8qKiBpbml0RHNnKCkgaGFzIGJlZW4gY2FsbGVkOyByZWFkeSBmb3IgZ2V0Rmlyc3RNZXNzYWdlKCkgKi9cbiAgSW5pdCA9ICdJbml0JyxcbiAgLyoqIFIwIGJyb2FkY2FzdCBlbWl0dGVkOyB3YWl0aW5nIGZvciBjb3VudGVycGFydCdzIFIwIGJyb2FkY2FzdCAoU2lnbk1zZzEpICovXG4gIFdhaXRNc2cxID0gJ1dhaXRNc2cxJyxcbiAgLyoqIFIxIGJyb2FkY2FzdCBlbWl0dGVkOyB3YWl0aW5nIGZvciBjb3VudGVycGFydCdzIFIxIGJyb2FkY2FzdCAoU2lnbk1zZzIpICovXG4gIFdhaXRNc2cyID0gJ1dhaXRNc2cyJyxcbiAgLyoqIFIyIGJyb2FkY2FzdCBlbWl0dGVkOyB3YWl0aW5nIGZvciBjb3VudGVycGFydCdzIFIyIGJyb2FkY2FzdCAoU2lnbk1zZzMsIHRoZSBwYXJ0aWFsIHNpZykgKi9cbiAgV2FpdE1zZzMgPSAnV2FpdE1zZzMnLFxuICAvKiogRmluYWwgUmVkUGFsbGFzIHNpZ25hdHVyZSAoc2lnbmF0dXJlL3JrKSBpcyBhdmFpbGFibGUgdmlhIGdldFNpZ25hdHVyZSgpICovXG4gIENvbXBsZXRlID0gJ0NvbXBsZXRlJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIFJlZFBhbGxhcyByZXJhbmQgKGtleSByZS1yYW5kb21pemF0aW9uKSBzZXNzaW9uLlxuICpcbiAqIEEgcmVyYW5kIHNlc3Npb24gbXVzdCBydW4gYmVmb3JlIGV2ZXJ5IFJlZFBhbGxhcyBEU0csIGJldHdlZW4gdGhlIHNhbWUgMiBwYXJ0aWVzXG4gKiB0aGF0IHdpbGwgdGhlbiBzaWduLiBTaW5jZSBgQGJpdGdvL3dhc20tbXBzYCAxLjE3LjAsIERTRyBubyBsb25nZXIgcmFuZG9taXplcyB0aGVcbiAqIGtleSBpdCBzaWducyB3aXRoOyB0aGUgcmFuZG9taXplciAoYGFscGhhYCkgaXMgcHJvZHVjZWQgaGVyZSBpbnN0ZWFkLlxuICovXG5leHBvcnQgZW51bSBSZWRQYWxsYXNSZXJhbmRTdGF0ZSB7XG4gIC8qKiBSZXJhbmQgc2Vzc2lvbiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgKi9cbiAgVW5pbml0aWFsaXplZCA9ICdVbmluaXRpYWxpemVkJyxcbiAgLyoqIGluaXRSZXJhbmQoKSBoYXMgYmVlbiBjYWxsZWQ7IHJlYWR5IGZvciBnZXRGaXJzdE1lc3NhZ2UoKSAqL1xuICBJbml0ID0gJ0luaXQnLFxuICAvKiogUjAgKGxvY2FsIGNvbW1pdG1lbnQpIGVtaXR0ZWQ7IHdhaXRpbmcgZm9yIGNvdW50ZXJwYXJ0J3MgUjAgYnJvYWRjYXN0IChjb21taXRtZW50KSAqL1xuICBXYWl0TXNnMSA9ICdXYWl0TXNnMScsXG4gIC8qKiBSMSBicm9hZGNhc3QgZW1pdHRlZDsgd2FpdGluZyBmb3IgY291bnRlcnBhcnQncyBSMSBicm9hZGNhc3QgKHJhbmRvbWl6ZXIgKyBibGluZCBvcGVuaW5nKSAqL1xuICBXYWl0TXNnMiA9ICdXYWl0TXNnMicsXG4gIC8qKiBSZXJhbmRvbWl6ZWQga2V5IHNoYXJlIChrZXlTaGFyZS9way9hbHBoYSkgaXMgYXZhaWxhYmxlIHZpYSBnZXRSZXJhbmRvbWl6ZWRLZXlTaGFyZSgpICovXG4gIENvbXBsZXRlID0gJ0NvbXBsZXRlJyxcbn1cblxuLyoqXG4gKiBUaGUgZmluYWwgb3V0cHV0IG9mIGEgUmVkUGFsbGFzIHJlcmFuZCBzZXNzaW9uLlxuICpcbiAqIC0gYGtleVNoYXJlYCBpcyB0aGUgcmVyYW5kb21pemVkIGtleXNoYXJlIHRvIGJlIHBhc3NlZCB0byBgUmVkUGFsbGFzRFNHLmluaXREc2dgLlxuICogLSBgcGtgIGlzIHRoZSByZXJhbmRvbWl6ZWQgcHVibGljIGtleTsgdGhlIERTRyByZXN1bHQncyBgcmtgIGVxdWFscyBpdCwgYW5kIHRoZSBEU0dcbiAqICAgc2lnbmF0dXJlIHZlcmlmaWVzIHVuZGVyIGl0LlxuICogLSBgYWxwaGFgIGlzIHRoZSAzMi1ieXRlIHR3ZWFrIHNjYWxhciBhcHBsaWVkIHRvIGJvdGggdGhlIERLRyBrZXlzaGFyZXMgYW5kIHRoZSBES0dcbiAqICAgcHVibGljIGtleSAoYHBrID0gcGtfZGtnICsgW2FscGhhXUdgKS4gSXQgaXMgZnJlc2ggcGVyIHJlcmFuZCBzZXNzaW9uIGFuZCBpZGVudGljYWxcbiAqICAgb24gYm90aCBwYXJ0aWVzLiBTaW5jZSB0aGUgcmVyYW5kIHByb3RvY29sIG1vdmVkIG91dCBvZiBEU0cgKHdhc20tbXBzIDEuMTcuMCksIHRoaXNcbiAqICAgaXMgdGhlIG9ubHkgcGxhY2UgYGFscGhhYCBpcyBleHBvc2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZFBhbGxhc1JlcmFuZFJlc3VsdCB7XG4gIGtleVNoYXJlOiBCdWZmZXI7XG4gIHBrOiBCdWZmZXI7XG4gIGFscGhhOiBCdWZmZXI7XG59XG5cbi8qKlxuICogVGhlIGZpbmFsIG91dHB1dCBvZiBhIFJlZFBhbGxhcyBEU0cgc2Vzc2lvbi5cbiAqXG4gKiAtIGBzaWduYXR1cmVgIGlzIHRoZSA2NC1ieXRlIHJhdyBTY2hub3JyIChSZWRQYWxsYXMpIHNpZ25hdHVyZS5cbiAqIC0gYHJrYCBpcyB0aGUgcmVyYW5kb21pemVkIHZlcmlmaWNhdGlvbiBrZXkgdGhhdCB0aGUgc2lnbmF0dXJlIG11c3QgYmUgdmVyaWZpZWQgYWdhaW5zdFxuICogICAoaS5lLiBgcmVkcGFsbGFzX3ZlcmlmeShyaywgc2lnbmF0dXJlLCBtZXNzYWdlKWApLCBub3QgdGhlIERLRyBwdWJsaWMga2V5LiBEU0cgZG9lc1xuICogICBub3QgcmFuZG9taXplIHRoZSBrZXkgaXQgc2lnbnMgd2l0aDogYHJrYCBlcXVhbHMgdGhlIGBwa2Agb2YgdGhlIHJlcmFuZG9taXplZFxuICogICBrZXlzaGFyZSB0aGUgRFNHIHNlc3Npb24gd2FzIGluaXRpYWxpemVkIHdpdGggKHNlZSBgUmVkUGFsbGFzUmVyYW5kUmVzdWx0YCksIGFuZFxuICogICB0aGUgY29ycmVzcG9uZGluZyBgYWxwaGFgIGlzIGF2YWlsYWJsZSBmcm9tIHRoYXQgcmVyYW5kIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRQYWxsYXNTaWduYXR1cmVSZXN1bHQge1xuICBzaWduYXR1cmU6IEJ1ZmZlcjtcbiAgcms6IEJ1ZmZlcjtcbn1cblxuLyoqIEEgUEdQIGRldGFjaGVkLXNpZ25lZCBtZXNzYWdlIGJ5IGEgcGFydHkuXG4gKiBgbWVzc2FnZWAgaXMgdGhlIHJhdyBwYXlsb2FkIGVuY29kZWQgYXMgYmFzZTY0LlxuICogYHNpZ25hdHVyZWAgaXMgYW4gYXJtb3JlZCBQR1AgZGV0YWNoZWQgc2lnbmF0dXJlIG92ZXIgdGhvc2UgYnl0ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTVBTU2lnbmVkTWVzc2FnZSB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZTxUPiB7XG4gIHBheWxvYWQ6IFQ7XG4gIGZyb206IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgU2VyaWFsaXplZE1lc3NhZ2UgPSBNZXNzYWdlPHN0cmluZz47XG5cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRNZXNzYWdlcyA9IE1lc3NhZ2U8c3RyaW5nPltdO1xuXG5leHBvcnQgdHlwZSBEZXNlcmlhbGl6ZWRNZXNzYWdlID0gTWVzc2FnZTxVaW50OEFycmF5PjtcblxuZXhwb3J0IHR5cGUgRGVzZXJpYWxpemVkTWVzc2FnZXMgPSBNZXNzYWdlPFVpbnQ4QXJyYXk+W107XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVNZXNzYWdlKG1zZzogRGVzZXJpYWxpemVkTWVzc2FnZSk6IFNlcmlhbGl6ZWRNZXNzYWdlIHtcbiAgcmV0dXJuIHsgZnJvbTogbXNnLmZyb20sIHBheWxvYWQ6IEJ1ZmZlci5mcm9tKG1zZy5wYXlsb2FkKS50b1N0cmluZygnYmFzZTY0JykgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplTWVzc2FnZShtc2c6IFNlcmlhbGl6ZWRNZXNzYWdlKTogRGVzZXJpYWxpemVkTWVzc2FnZSB7XG4gIHJldHVybiB7IGZyb206IG1zZy5mcm9tLCBwYXlsb2FkOiBCdWZmZXIuZnJvbShtc2cucGF5bG9hZCwgJ2Jhc2U2NCcpIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVNZXNzYWdlcyhtc2dzOiBEZXNlcmlhbGl6ZWRNZXNzYWdlcyk6IFNlcmlhbGl6ZWRNZXNzYWdlcyB7XG4gIHJldHVybiBtc2dzLm1hcChzZXJpYWxpemVNZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlc2VyaWFsaXplTWVzc2FnZXMobXNnczogU2VyaWFsaXplZE1lc3NhZ2VzKTogRGVzZXJpYWxpemVkTWVzc2FnZXMge1xuICByZXR1cm4gbXNncy5tYXAoZGVzZXJpYWxpemVNZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29kZWRSZWR1Y2VkS2V5U2hhcmUocmVkdWNlZEtleVNoYXJlOiBCdWZmZXIgfCBVaW50OEFycmF5KTogUmVkUGFsbGFzUmVkdWNlZEtleVNoYXJlIHtcbiAgY29uc3QgZGVjb2RlZCA9IFJlZFBhbGxhc1JlZHVjZWRLZXlTaGFyZVR5cGUuZGVjb2RlKGRlY29kZShyZWR1Y2VkS2V5U2hhcmUpKTtcbiAgaWYgKGlzTGVmdChkZWNvZGVkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHBhcnNlIHJlZHVjZWRLZXlTaGFyZTogJHtkZWNvZGVkLmxlZnR9YCk7XG4gIH1cbiAgcmV0dXJuIGRlY29kZWQucmlnaHQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { RedPallasDKG } from './dkg';
|
|
2
|
+
import { RedPallasDSG } from './dsg';
|
|
3
|
+
import { RedPallasRerand } from './rerand';
|
|
4
|
+
import { DeserializedMessages, RedPallasRerandResult, RedPallasSignatureResult } from './types';
|
|
5
|
+
/**
|
|
6
|
+
* Per-party deterministic seed material. To use the same seed for both, pass it as both fields.
|
|
7
|
+
* `encKey` seeds the X25519 encryption key; `dkgSeed` seeds DKG round 0.
|
|
8
|
+
*/
|
|
9
|
+
export interface RedPallasDKGPartySeed {
|
|
10
|
+
encKey?: Buffer;
|
|
11
|
+
dkgSeed?: Buffer;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Runs a full 3-party (2-of-3) RedPallas DKG in-process. See `RedPallasDKGPartySeed`.
|
|
15
|
+
* Mirrors `generateEdDsaDKGKeyShares` in `../eddsa-mps/util.ts`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function generateRedPallasDKGKeyShares(seedUser?: RedPallasDKGPartySeed, seedBackup?: RedPallasDKGPartySeed, seedBitgo?: RedPallasDKGPartySeed): Promise<[RedPallasDKG, RedPallasDKG, RedPallasDKG]>;
|
|
18
|
+
/**
|
|
19
|
+
* Runs a full 2-party rerand session in-process: the key re-randomization that must
|
|
20
|
+
* precede every RedPallas DSG (same 2 parties that will then sign). See `RedPallasRerand`
|
|
21
|
+
* for the protocol. Asserts that both parties agree on the rerandomized public key `pk`
|
|
22
|
+
* and the tweak scalar `alpha`.
|
|
23
|
+
*/
|
|
24
|
+
export declare function executeRerand(party1: RedPallasRerand, party2: RedPallasRerand, keyShare1: Buffer, keyShare2: Buffer): Promise<[RedPallasRerandResult, RedPallasRerandResult]>;
|
|
25
|
+
/**
|
|
26
|
+
* Initializes two RedPallas DSG parties and drives them through the protocol until the
|
|
27
|
+
* specified round. Mirrors `executeTillRound` in `../eddsa-mps/util.ts`, minus the
|
|
28
|
+
* derivation path (RedPallas DSG operates on an already-(root-or-derived) keyshare; there
|
|
29
|
+
* is no per-signing-session derivation path).
|
|
30
|
+
*
|
|
31
|
+
* The keyshares are used as given: for the supported flow they are rerand outputs from
|
|
32
|
+
* `executeRerand`, in which case both parties' signature `rk` equals the rerand `pk`
|
|
33
|
+
* and the signature verifies under it.
|
|
34
|
+
*
|
|
35
|
+
* @param round - Round to execute until (1–3). Returns intermediate message arrays for 1–2,
|
|
36
|
+
* or the final `RedPallasSignatureResult` (signature/rk) for 3.
|
|
37
|
+
* @param party1Dsg - First DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
|
|
38
|
+
* @param party2Dsg - Second DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
|
|
39
|
+
* @param keyShare1 - Key share for the first party.
|
|
40
|
+
* @param keyShare2 - Key share for the second party.
|
|
41
|
+
* @param message - Raw message bytes to sign.
|
|
42
|
+
*/
|
|
43
|
+
export declare function executeTillRound(round: number, party1Dsg: RedPallasDSG, party2Dsg: RedPallasDSG, keyShare1: Buffer, keyShare2: Buffer, message: Buffer): Promise<DeserializedMessages[] | RedPallasSignatureResult>;
|
|
44
|
+
/**
|
|
45
|
+
* Verifies a `RedPallasSignatureResult` against the raw message.
|
|
46
|
+
*
|
|
47
|
+
* IMPORTANT: unlike EdDSA, RedPallas signatures must be verified against `rk` — the
|
|
48
|
+
* rerandomized verification key produced by the rerand session that preceded DSG — and
|
|
49
|
+
* NOT against the DKG (or derived) public key directly. `rk` equals the rerand result's
|
|
50
|
+
* `pk` (`pk = pk_dkg + [alpha]G`); the `alpha` randomizer is available from
|
|
51
|
+
* `RedPallasRerand.getRerandomizedKeyShare()` for callers that need to independently
|
|
52
|
+
* confirm the relationship between `rk` and a known `pk`, but is not required to verify
|
|
53
|
+
* the signature itself.
|
|
54
|
+
*/
|
|
55
|
+
export declare function verifyRedPallasSignature(signatureResult: RedPallasSignatureResult, message: Buffer): Promise<boolean>;
|
|
56
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/tss/redpallas-mps/util.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAQhG;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,QAAQ,CAAC,EAAE,qBAAqB,EAChC,UAAU,CAAC,EAAE,qBAAqB,EAClC,SAAS,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAiCrD;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,eAAe,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,qBAAqB,EAAE,qBAAqB,CAAC,CAAC,CAgBzD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,YAAY,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,EAAE,GAAG,wBAAwB,CAAC,CAyB5D;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAC5C,eAAe,EAAE,wBAAwB,EACzC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAUlB"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.generateRedPallasDKGKeyShares = generateRedPallasDKGKeyShares;
|
|
40
|
+
exports.executeRerand = executeRerand;
|
|
41
|
+
exports.executeTillRound = executeTillRound;
|
|
42
|
+
exports.verifyRedPallasSignature = verifyRedPallasSignature;
|
|
43
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
44
|
+
const assert_1 = __importDefault(require("assert"));
|
|
45
|
+
const ed25519_1 = require("@noble/curves/ed25519");
|
|
46
|
+
const dkg_1 = require("./dkg");
|
|
47
|
+
function generateX25519Keypair(seed) {
|
|
48
|
+
const privKey = seed ? seed.subarray(0, 32) : crypto_1.default.randomBytes(32);
|
|
49
|
+
const pubKey = Buffer.from(ed25519_1.x25519.getPublicKey(privKey));
|
|
50
|
+
return { privKey: Buffer.from(privKey), pubKey };
|
|
51
|
+
}
|
|
52
|
+
function validateSeed(seed) {
|
|
53
|
+
(0, assert_1.default)(!seed?.encKey || seed.encKey.length >= 32, 'encKey must be at least 32 bytes');
|
|
54
|
+
(0, assert_1.default)(!seed?.dkgSeed || seed.dkgSeed.length >= 32, 'dkgSeed must be at least 32 bytes');
|
|
55
|
+
return seed ?? {};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Runs a full 3-party (2-of-3) RedPallas DKG in-process. See `RedPallasDKGPartySeed`.
|
|
59
|
+
* Mirrors `generateEdDsaDKGKeyShares` in `../eddsa-mps/util.ts`.
|
|
60
|
+
*/
|
|
61
|
+
async function generateRedPallasDKGKeyShares(seedUser, seedBackup, seedBitgo) {
|
|
62
|
+
const { encKey: userEncKey, dkgSeed: userDkgSeed } = validateSeed(seedUser);
|
|
63
|
+
const { encKey: backupEncKey, dkgSeed: backupDkgSeed } = validateSeed(seedBackup);
|
|
64
|
+
const { encKey: bitgoEncKey, dkgSeed: bitgoDkgSeed } = validateSeed(seedBitgo);
|
|
65
|
+
const user = new dkg_1.RedPallasDKG(3, 2, 0);
|
|
66
|
+
const backup = new dkg_1.RedPallasDKG(3, 2, 1);
|
|
67
|
+
const bitgo = new dkg_1.RedPallasDKG(3, 2, 2);
|
|
68
|
+
const userKP = generateX25519Keypair(userEncKey);
|
|
69
|
+
const backupKP = generateX25519Keypair(backupEncKey);
|
|
70
|
+
const bitgoKP = generateX25519Keypair(bitgoEncKey);
|
|
71
|
+
await user.initDkg(userKP.privKey, [backupKP.pubKey, bitgoKP.pubKey]);
|
|
72
|
+
await backup.initDkg(backupKP.privKey, [userKP.pubKey, bitgoKP.pubKey]);
|
|
73
|
+
await bitgo.initDkg(bitgoKP.privKey, [userKP.pubKey, backupKP.pubKey]);
|
|
74
|
+
const r1Messages = [
|
|
75
|
+
user.getFirstMessage(userDkgSeed),
|
|
76
|
+
backup.getFirstMessage(backupDkgSeed),
|
|
77
|
+
bitgo.getFirstMessage(bitgoDkgSeed),
|
|
78
|
+
];
|
|
79
|
+
const r2Messages = [
|
|
80
|
+
...user.handleIncomingMessages(r1Messages),
|
|
81
|
+
...backup.handleIncomingMessages(r1Messages),
|
|
82
|
+
...bitgo.handleIncomingMessages(r1Messages),
|
|
83
|
+
];
|
|
84
|
+
user.handleIncomingMessages(r2Messages);
|
|
85
|
+
backup.handleIncomingMessages(r2Messages);
|
|
86
|
+
bitgo.handleIncomingMessages(r2Messages);
|
|
87
|
+
return [user, backup, bitgo];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Runs a full 2-party rerand session in-process: the key re-randomization that must
|
|
91
|
+
* precede every RedPallas DSG (same 2 parties that will then sign). See `RedPallasRerand`
|
|
92
|
+
* for the protocol. Asserts that both parties agree on the rerandomized public key `pk`
|
|
93
|
+
* and the tweak scalar `alpha`.
|
|
94
|
+
*/
|
|
95
|
+
async function executeRerand(party1, party2, keyShare1, keyShare2) {
|
|
96
|
+
await party1.initRerand(keyShare1, party2.getPartyIdx());
|
|
97
|
+
await party2.initRerand(keyShare2, party1.getPartyIdx());
|
|
98
|
+
const party1Round0Message = party1.getFirstMessage();
|
|
99
|
+
const party2Round0Message = party2.getFirstMessage();
|
|
100
|
+
const [party1Round1Message] = party1.handleIncomingMessages([party1Round0Message, party2Round0Message]);
|
|
101
|
+
const [party2Round1Message] = party2.handleIncomingMessages([party1Round0Message, party2Round0Message]);
|
|
102
|
+
party1.handleIncomingMessages([party1Round1Message, party2Round1Message]);
|
|
103
|
+
party2.handleIncomingMessages([party1Round1Message, party2Round1Message]);
|
|
104
|
+
const result1 = party1.getRerandomizedKeyShare();
|
|
105
|
+
const result2 = party2.getRerandomizedKeyShare();
|
|
106
|
+
(0, assert_1.default)(result1.pk.toString('hex') === result2.pk.toString('hex'));
|
|
107
|
+
(0, assert_1.default)(result1.alpha.toString('hex') === result2.alpha.toString('hex'));
|
|
108
|
+
return [result1, result2];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Initializes two RedPallas DSG parties and drives them through the protocol until the
|
|
112
|
+
* specified round. Mirrors `executeTillRound` in `../eddsa-mps/util.ts`, minus the
|
|
113
|
+
* derivation path (RedPallas DSG operates on an already-(root-or-derived) keyshare; there
|
|
114
|
+
* is no per-signing-session derivation path).
|
|
115
|
+
*
|
|
116
|
+
* The keyshares are used as given: for the supported flow they are rerand outputs from
|
|
117
|
+
* `executeRerand`, in which case both parties' signature `rk` equals the rerand `pk`
|
|
118
|
+
* and the signature verifies under it.
|
|
119
|
+
*
|
|
120
|
+
* @param round - Round to execute until (1–3). Returns intermediate message arrays for 1–2,
|
|
121
|
+
* or the final `RedPallasSignatureResult` (signature/rk) for 3.
|
|
122
|
+
* @param party1Dsg - First DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
|
|
123
|
+
* @param party2Dsg - Second DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
|
|
124
|
+
* @param keyShare1 - Key share for the first party.
|
|
125
|
+
* @param keyShare2 - Key share for the second party.
|
|
126
|
+
* @param message - Raw message bytes to sign.
|
|
127
|
+
*/
|
|
128
|
+
async function executeTillRound(round, party1Dsg, party2Dsg, keyShare1, keyShare2, message) {
|
|
129
|
+
if (round < 1 || round > 3) {
|
|
130
|
+
throw Error('Invalid round number');
|
|
131
|
+
}
|
|
132
|
+
await party1Dsg.initDsg(keyShare1, message, party2Dsg.getPartyIdx());
|
|
133
|
+
await party2Dsg.initDsg(keyShare2, message, party1Dsg.getPartyIdx());
|
|
134
|
+
const party1Round0Message = party1Dsg.getFirstMessage();
|
|
135
|
+
const party2Round0Message = party2Dsg.getFirstMessage();
|
|
136
|
+
const [party2Round1Messages] = party2Dsg.handleIncomingMessages([party1Round0Message, party2Round0Message]);
|
|
137
|
+
const [party1Round1Messages] = party1Dsg.handleIncomingMessages([party1Round0Message, party2Round0Message]);
|
|
138
|
+
if (round === 1)
|
|
139
|
+
return [[party1Round1Messages], [party2Round1Messages]];
|
|
140
|
+
const [party1Round2Messages] = party1Dsg.handleIncomingMessages([party1Round1Messages, party2Round1Messages]);
|
|
141
|
+
const [party2Round2Messages] = party2Dsg.handleIncomingMessages([party1Round1Messages, party2Round1Messages]);
|
|
142
|
+
if (round === 2)
|
|
143
|
+
return [[party1Round2Messages], [party2Round2Messages]];
|
|
144
|
+
party1Dsg.handleIncomingMessages([party1Round2Messages, party2Round2Messages]);
|
|
145
|
+
party2Dsg.handleIncomingMessages([party1Round2Messages, party2Round2Messages]);
|
|
146
|
+
const sig1 = party1Dsg.getSignature();
|
|
147
|
+
const sig2 = party2Dsg.getSignature();
|
|
148
|
+
(0, assert_1.default)(sig1.signature.toString('hex') === sig2.signature.toString('hex'));
|
|
149
|
+
(0, assert_1.default)(sig1.rk.toString('hex') === sig2.rk.toString('hex'));
|
|
150
|
+
return sig1;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Verifies a `RedPallasSignatureResult` against the raw message.
|
|
154
|
+
*
|
|
155
|
+
* IMPORTANT: unlike EdDSA, RedPallas signatures must be verified against `rk` — the
|
|
156
|
+
* rerandomized verification key produced by the rerand session that preceded DSG — and
|
|
157
|
+
* NOT against the DKG (or derived) public key directly. `rk` equals the rerand result's
|
|
158
|
+
* `pk` (`pk = pk_dkg + [alpha]G`); the `alpha` randomizer is available from
|
|
159
|
+
* `RedPallasRerand.getRerandomizedKeyShare()` for callers that need to independently
|
|
160
|
+
* confirm the relationship between `rk` and a known `pk`, but is not required to verify
|
|
161
|
+
* the signature itself.
|
|
162
|
+
*/
|
|
163
|
+
async function verifyRedPallasSignature(signatureResult, message) {
|
|
164
|
+
const wasm = typeof window !== 'undefined' && !window.process && !window.process?.['type']
|
|
165
|
+
? // eslint-disable-next-line import/no-internal-modules -- @bitgo/wasm-mps exposes environment-specific subpath exports.
|
|
166
|
+
await Promise.resolve().then(() => __importStar(require('@bitgo/wasm-mps/web'))).then(async (webWasm) => {
|
|
167
|
+
await webWasm.default();
|
|
168
|
+
return webWasm;
|
|
169
|
+
})
|
|
170
|
+
: await Promise.resolve().then(() => __importStar(require('@bitgo/wasm-mps')));
|
|
171
|
+
return wasm.redpallas_verify(signatureResult.rk, signatureResult.signature, message);
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvcmVkcGFsbGFzLW1wcy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUNBLHNFQXFDQztBQVFELHNDQXFCQztBQW9CRCw0Q0FnQ0M7QUFhRCw0REFhQztBQWpMRCxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLG1EQUErQztBQUMvQywrQkFBcUM7QUFLckMsU0FBUyxxQkFBcUIsQ0FBQyxJQUFhO0lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbkQsQ0FBQztBQVdELFNBQVMsWUFBWSxDQUFDLElBQTRCO0lBQ2hELElBQUEsZ0JBQU0sRUFBQyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7SUFDdEYsSUFBQSxnQkFBTSxFQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztJQUN6RixPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7R0FHRztBQUNJLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQsUUFBZ0MsRUFDaEMsVUFBa0MsRUFDbEMsU0FBaUM7SUFFakMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1RSxNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2xGLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFL0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxrQkFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxrQkFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxrQkFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFeEMsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakQsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckQsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFbkQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN4RSxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFdkUsTUFBTSxVQUFVLEdBQUc7UUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7UUFDakMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7UUFDckMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7S0FDcEMsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQztRQUMxQyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUM7UUFDNUMsR0FBRyxLQUFLLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDO0tBQzVDLENBQUM7SUFFRixJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsYUFBYSxDQUNqQyxNQUF1QixFQUN2QixNQUF1QixFQUN2QixTQUFpQixFQUNqQixTQUFpQjtJQUVqQixNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDekQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDckQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7SUFFckQsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUN4RyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDMUUsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBRTFFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0lBQ2pELElBQUEsZ0JBQU0sRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLElBQUEsZ0JBQU0sRUFBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNJLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsS0FBYSxFQUNiLFNBQXVCLEVBQ3ZCLFNBQXVCLEVBQ3ZCLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLE9BQWU7SUFFZixJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3hELE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBRXhELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUM1RyxNQUFNLENBQUMsb0JBQW9CLENBQUMsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFDNUcsSUFBSSxLQUFLLEtBQUssQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFFekUsTUFBTSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUMsb0JBQW9CLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBQzlHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUM5RyxJQUFJLEtBQUssS0FBSyxDQUFDO1FBQUUsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztJQUV6RSxTQUFTLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDL0UsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUMsb0JBQW9CLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0lBRS9FLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEMsSUFBQSxnQkFBTSxFQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUUsSUFBQSxnQkFBTSxFQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNJLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsZUFBeUMsRUFDekMsT0FBZTtJQUVmLE1BQU0sSUFBSSxHQUNSLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQzNFLENBQUMsQ0FBQyx1SEFBdUg7WUFDdkgsTUFBTSxrREFBTyxxQkFBcUIsSUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO2dCQUN6RCxNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLHdEQUFhLGlCQUFpQixHQUFDLENBQUM7SUFDdEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyB4MjU1MTkgfSBmcm9tICdAbm9ibGUvY3VydmVzL2VkMjU1MTknO1xuaW1wb3J0IHsgUmVkUGFsbGFzREtHIH0gZnJvbSAnLi9ka2cnO1xuaW1wb3J0IHsgUmVkUGFsbGFzRFNHIH0gZnJvbSAnLi9kc2cnO1xuaW1wb3J0IHsgUmVkUGFsbGFzUmVyYW5kIH0gZnJvbSAnLi9yZXJhbmQnO1xuaW1wb3J0IHsgRGVzZXJpYWxpemVkTWVzc2FnZXMsIFJlZFBhbGxhc1JlcmFuZFJlc3VsdCwgUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlWDI1NTE5S2V5cGFpcihzZWVkPzogQnVmZmVyKTogeyBwcml2S2V5OiBCdWZmZXI7IHB1YktleTogQnVmZmVyIH0ge1xuICBjb25zdCBwcml2S2V5ID0gc2VlZCA/IHNlZWQuc3ViYXJyYXkoMCwgMzIpIDogY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKTtcbiAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20oeDI1NTE5LmdldFB1YmxpY0tleShwcml2S2V5KSk7XG4gIHJldHVybiB7IHByaXZLZXk6IEJ1ZmZlci5mcm9tKHByaXZLZXkpLCBwdWJLZXkgfTtcbn1cblxuLyoqXG4gKiBQZXItcGFydHkgZGV0ZXJtaW5pc3RpYyBzZWVkIG1hdGVyaWFsLiBUbyB1c2UgdGhlIHNhbWUgc2VlZCBmb3IgYm90aCwgcGFzcyBpdCBhcyBib3RoIGZpZWxkcy5cbiAqIGBlbmNLZXlgIHNlZWRzIHRoZSBYMjU1MTkgZW5jcnlwdGlvbiBrZXk7IGBka2dTZWVkYCBzZWVkcyBES0cgcm91bmQgMC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRQYWxsYXNES0dQYXJ0eVNlZWQge1xuICBlbmNLZXk/OiBCdWZmZXI7XG4gIGRrZ1NlZWQ/OiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2VlZChzZWVkPzogUmVkUGFsbGFzREtHUGFydHlTZWVkKTogUmVkUGFsbGFzREtHUGFydHlTZWVkIHtcbiAgYXNzZXJ0KCFzZWVkPy5lbmNLZXkgfHwgc2VlZC5lbmNLZXkubGVuZ3RoID49IDMyLCAnZW5jS2V5IG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgYXNzZXJ0KCFzZWVkPy5ka2dTZWVkIHx8IHNlZWQuZGtnU2VlZC5sZW5ndGggPj0gMzIsICdka2dTZWVkIG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgcmV0dXJuIHNlZWQgPz8ge307XG59XG5cbi8qKlxuICogUnVucyBhIGZ1bGwgMy1wYXJ0eSAoMi1vZi0zKSBSZWRQYWxsYXMgREtHIGluLXByb2Nlc3MuIFNlZSBgUmVkUGFsbGFzREtHUGFydHlTZWVkYC5cbiAqIE1pcnJvcnMgYGdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXNgIGluIGAuLi9lZGRzYS1tcHMvdXRpbC50c2AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZVJlZFBhbGxhc0RLR0tleVNoYXJlcyhcbiAgc2VlZFVzZXI/OiBSZWRQYWxsYXNES0dQYXJ0eVNlZWQsXG4gIHNlZWRCYWNrdXA/OiBSZWRQYWxsYXNES0dQYXJ0eVNlZWQsXG4gIHNlZWRCaXRnbz86IFJlZFBhbGxhc0RLR1BhcnR5U2VlZFxuKTogUHJvbWlzZTxbUmVkUGFsbGFzREtHLCBSZWRQYWxsYXNES0csIFJlZFBhbGxhc0RLR10+IHtcbiAgY29uc3QgeyBlbmNLZXk6IHVzZXJFbmNLZXksIGRrZ1NlZWQ6IHVzZXJEa2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZFVzZXIpO1xuICBjb25zdCB7IGVuY0tleTogYmFja3VwRW5jS2V5LCBka2dTZWVkOiBiYWNrdXBEa2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZEJhY2t1cCk7XG4gIGNvbnN0IHsgZW5jS2V5OiBiaXRnb0VuY0tleSwgZGtnU2VlZDogYml0Z29Ea2dTZWVkIH0gPSB2YWxpZGF0ZVNlZWQoc2VlZEJpdGdvKTtcblxuICBjb25zdCB1c2VyID0gbmV3IFJlZFBhbGxhc0RLRygzLCAyLCAwKTtcbiAgY29uc3QgYmFja3VwID0gbmV3IFJlZFBhbGxhc0RLRygzLCAyLCAxKTtcbiAgY29uc3QgYml0Z28gPSBuZXcgUmVkUGFsbGFzREtHKDMsIDIsIDIpO1xuXG4gIGNvbnN0IHVzZXJLUCA9IGdlbmVyYXRlWDI1NTE5S2V5cGFpcih1c2VyRW5jS2V5KTtcbiAgY29uc3QgYmFja3VwS1AgPSBnZW5lcmF0ZVgyNTUxOUtleXBhaXIoYmFja3VwRW5jS2V5KTtcbiAgY29uc3QgYml0Z29LUCA9IGdlbmVyYXRlWDI1NTE5S2V5cGFpcihiaXRnb0VuY0tleSk7XG5cbiAgYXdhaXQgdXNlci5pbml0RGtnKHVzZXJLUC5wcml2S2V5LCBbYmFja3VwS1AucHViS2V5LCBiaXRnb0tQLnB1YktleV0pO1xuICBhd2FpdCBiYWNrdXAuaW5pdERrZyhiYWNrdXBLUC5wcml2S2V5LCBbdXNlcktQLnB1YktleSwgYml0Z29LUC5wdWJLZXldKTtcbiAgYXdhaXQgYml0Z28uaW5pdERrZyhiaXRnb0tQLnByaXZLZXksIFt1c2VyS1AucHViS2V5LCBiYWNrdXBLUC5wdWJLZXldKTtcblxuICBjb25zdCByMU1lc3NhZ2VzID0gW1xuICAgIHVzZXIuZ2V0Rmlyc3RNZXNzYWdlKHVzZXJEa2dTZWVkKSxcbiAgICBiYWNrdXAuZ2V0Rmlyc3RNZXNzYWdlKGJhY2t1cERrZ1NlZWQpLFxuICAgIGJpdGdvLmdldEZpcnN0TWVzc2FnZShiaXRnb0RrZ1NlZWQpLFxuICBdO1xuXG4gIGNvbnN0IHIyTWVzc2FnZXMgPSBbXG4gICAgLi4udXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIxTWVzc2FnZXMpLFxuICAgIC4uLmJhY2t1cC5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIxTWVzc2FnZXMpLFxuICAgIC4uLmJpdGdvLmhhbmRsZUluY29taW5nTWVzc2FnZXMocjFNZXNzYWdlcyksXG4gIF07XG5cbiAgdXNlci5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKHIyTWVzc2FnZXMpO1xuICBiYWNrdXAuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyMk1lc3NhZ2VzKTtcbiAgYml0Z28uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyMk1lc3NhZ2VzKTtcbiAgcmV0dXJuIFt1c2VyLCBiYWNrdXAsIGJpdGdvXTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgZnVsbCAyLXBhcnR5IHJlcmFuZCBzZXNzaW9uIGluLXByb2Nlc3M6IHRoZSBrZXkgcmUtcmFuZG9taXphdGlvbiB0aGF0IG11c3RcbiAqIHByZWNlZGUgZXZlcnkgUmVkUGFsbGFzIERTRyAoc2FtZSAyIHBhcnRpZXMgdGhhdCB3aWxsIHRoZW4gc2lnbikuIFNlZSBgUmVkUGFsbGFzUmVyYW5kYFxuICogZm9yIHRoZSBwcm90b2NvbC4gQXNzZXJ0cyB0aGF0IGJvdGggcGFydGllcyBhZ3JlZSBvbiB0aGUgcmVyYW5kb21pemVkIHB1YmxpYyBrZXkgYHBrYFxuICogYW5kIHRoZSB0d2VhayBzY2FsYXIgYGFscGhhYC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVSZXJhbmQoXG4gIHBhcnR5MTogUmVkUGFsbGFzUmVyYW5kLFxuICBwYXJ0eTI6IFJlZFBhbGxhc1JlcmFuZCxcbiAga2V5U2hhcmUxOiBCdWZmZXIsXG4gIGtleVNoYXJlMjogQnVmZmVyXG4pOiBQcm9taXNlPFtSZWRQYWxsYXNSZXJhbmRSZXN1bHQsIFJlZFBhbGxhc1JlcmFuZFJlc3VsdF0+IHtcbiAgYXdhaXQgcGFydHkxLmluaXRSZXJhbmQoa2V5U2hhcmUxLCBwYXJ0eTIuZ2V0UGFydHlJZHgoKSk7XG4gIGF3YWl0IHBhcnR5Mi5pbml0UmVyYW5kKGtleVNoYXJlMiwgcGFydHkxLmdldFBhcnR5SWR4KCkpO1xuICBjb25zdCBwYXJ0eTFSb3VuZDBNZXNzYWdlID0gcGFydHkxLmdldEZpcnN0TWVzc2FnZSgpO1xuICBjb25zdCBwYXJ0eTJSb3VuZDBNZXNzYWdlID0gcGFydHkyLmdldEZpcnN0TWVzc2FnZSgpO1xuXG4gIGNvbnN0IFtwYXJ0eTFSb3VuZDFNZXNzYWdlXSA9IHBhcnR5MS5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDBNZXNzYWdlLCBwYXJ0eTJSb3VuZDBNZXNzYWdlXSk7XG4gIGNvbnN0IFtwYXJ0eTJSb3VuZDFNZXNzYWdlXSA9IHBhcnR5Mi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDBNZXNzYWdlLCBwYXJ0eTJSb3VuZDBNZXNzYWdlXSk7XG4gIHBhcnR5MS5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlLCBwYXJ0eTJSb3VuZDFNZXNzYWdlXSk7XG4gIHBhcnR5Mi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlLCBwYXJ0eTJSb3VuZDFNZXNzYWdlXSk7XG5cbiAgY29uc3QgcmVzdWx0MSA9IHBhcnR5MS5nZXRSZXJhbmRvbWl6ZWRLZXlTaGFyZSgpO1xuICBjb25zdCByZXN1bHQyID0gcGFydHkyLmdldFJlcmFuZG9taXplZEtleVNoYXJlKCk7XG4gIGFzc2VydChyZXN1bHQxLnBrLnRvU3RyaW5nKCdoZXgnKSA9PT0gcmVzdWx0Mi5way50b1N0cmluZygnaGV4JykpO1xuICBhc3NlcnQocmVzdWx0MS5hbHBoYS50b1N0cmluZygnaGV4JykgPT09IHJlc3VsdDIuYWxwaGEudG9TdHJpbmcoJ2hleCcpKTtcbiAgcmV0dXJuIFtyZXN1bHQxLCByZXN1bHQyXTtcbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0d28gUmVkUGFsbGFzIERTRyBwYXJ0aWVzIGFuZCBkcml2ZXMgdGhlbSB0aHJvdWdoIHRoZSBwcm90b2NvbCB1bnRpbCB0aGVcbiAqIHNwZWNpZmllZCByb3VuZC4gTWlycm9ycyBgZXhlY3V0ZVRpbGxSb3VuZGAgaW4gYC4uL2VkZHNhLW1wcy91dGlsLnRzYCwgbWludXMgdGhlXG4gKiBkZXJpdmF0aW9uIHBhdGggKFJlZFBhbGxhcyBEU0cgb3BlcmF0ZXMgb24gYW4gYWxyZWFkeS0ocm9vdC1vci1kZXJpdmVkKSBrZXlzaGFyZTsgdGhlcmVcbiAqIGlzIG5vIHBlci1zaWduaW5nLXNlc3Npb24gZGVyaXZhdGlvbiBwYXRoKS5cbiAqXG4gKiBUaGUga2V5c2hhcmVzIGFyZSB1c2VkIGFzIGdpdmVuOiBmb3IgdGhlIHN1cHBvcnRlZCBmbG93IHRoZXkgYXJlIHJlcmFuZCBvdXRwdXRzIGZyb21cbiAqIGBleGVjdXRlUmVyYW5kYCwgaW4gd2hpY2ggY2FzZSBib3RoIHBhcnRpZXMnIHNpZ25hdHVyZSBgcmtgIGVxdWFscyB0aGUgcmVyYW5kIGBwa2BcbiAqIGFuZCB0aGUgc2lnbmF0dXJlIHZlcmlmaWVzIHVuZGVyIGl0LlxuICpcbiAqIEBwYXJhbSByb3VuZCAtIFJvdW5kIHRvIGV4ZWN1dGUgdW50aWwgKDHigJMzKS4gUmV0dXJucyBpbnRlcm1lZGlhdGUgbWVzc2FnZSBhcnJheXMgZm9yIDHigJMyLFxuICogICBvciB0aGUgZmluYWwgYFJlZFBhbGxhc1NpZ25hdHVyZVJlc3VsdGAgKHNpZ25hdHVyZS9yaykgZm9yIDMuXG4gKiBAcGFyYW0gcGFydHkxRHNnIC0gRmlyc3QgRFNHIHBhcnR5IChgbmV3IFJlZFBhbGxhc0RTRyhwYXJ0eUlkeClgKSwgbm90IHlldCBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSBwYXJ0eTJEc2cgLSBTZWNvbmQgRFNHIHBhcnR5IChgbmV3IFJlZFBhbGxhc0RTRyhwYXJ0eUlkeClgKSwgbm90IHlldCBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSBrZXlTaGFyZTEgLSBLZXkgc2hhcmUgZm9yIHRoZSBmaXJzdCBwYXJ0eS5cbiAqIEBwYXJhbSBrZXlTaGFyZTIgLSBLZXkgc2hhcmUgZm9yIHRoZSBzZWNvbmQgcGFydHkuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIFJhdyBtZXNzYWdlIGJ5dGVzIHRvIHNpZ24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlVGlsbFJvdW5kKFxuICByb3VuZDogbnVtYmVyLFxuICBwYXJ0eTFEc2c6IFJlZFBhbGxhc0RTRyxcbiAgcGFydHkyRHNnOiBSZWRQYWxsYXNEU0csXG4gIGtleVNoYXJlMTogQnVmZmVyLFxuICBrZXlTaGFyZTI6IEJ1ZmZlcixcbiAgbWVzc2FnZTogQnVmZmVyXG4pOiBQcm9taXNlPERlc2VyaWFsaXplZE1lc3NhZ2VzW10gfCBSZWRQYWxsYXNTaWduYXR1cmVSZXN1bHQ+IHtcbiAgaWYgKHJvdW5kIDwgMSB8fCByb3VuZCA+IDMpIHtcbiAgICB0aHJvdyBFcnJvcignSW52YWxpZCByb3VuZCBudW1iZXInKTtcbiAgfVxuICBhd2FpdCBwYXJ0eTFEc2cuaW5pdERzZyhrZXlTaGFyZTEsIG1lc3NhZ2UsIHBhcnR5MkRzZy5nZXRQYXJ0eUlkeCgpKTtcbiAgYXdhaXQgcGFydHkyRHNnLmluaXREc2coa2V5U2hhcmUyLCBtZXNzYWdlLCBwYXJ0eTFEc2cuZ2V0UGFydHlJZHgoKSk7XG4gIGNvbnN0IHBhcnR5MVJvdW5kME1lc3NhZ2UgPSBwYXJ0eTFEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG4gIGNvbnN0IHBhcnR5MlJvdW5kME1lc3NhZ2UgPSBwYXJ0eTJEc2cuZ2V0Rmlyc3RNZXNzYWdlKCk7XG5cbiAgY29uc3QgW3BhcnR5MlJvdW5kMU1lc3NhZ2VzXSA9IHBhcnR5MkRzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDBNZXNzYWdlLCBwYXJ0eTJSb3VuZDBNZXNzYWdlXSk7XG4gIGNvbnN0IFtwYXJ0eTFSb3VuZDFNZXNzYWdlc10gPSBwYXJ0eTFEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbcGFydHkxUm91bmQwTWVzc2FnZSwgcGFydHkyUm91bmQwTWVzc2FnZV0pO1xuICBpZiAocm91bmQgPT09IDEpIHJldHVybiBbW3BhcnR5MVJvdW5kMU1lc3NhZ2VzXSwgW3BhcnR5MlJvdW5kMU1lc3NhZ2VzXV07XG5cbiAgY29uc3QgW3BhcnR5MVJvdW5kMk1lc3NhZ2VzXSA9IHBhcnR5MURzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlcywgcGFydHkyUm91bmQxTWVzc2FnZXNdKTtcbiAgY29uc3QgW3BhcnR5MlJvdW5kMk1lc3NhZ2VzXSA9IHBhcnR5MkRzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDFNZXNzYWdlcywgcGFydHkyUm91bmQxTWVzc2FnZXNdKTtcbiAgaWYgKHJvdW5kID09PSAyKSByZXR1cm4gW1twYXJ0eTFSb3VuZDJNZXNzYWdlc10sIFtwYXJ0eTJSb3VuZDJNZXNzYWdlc11dO1xuXG4gIHBhcnR5MURzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDJNZXNzYWdlcywgcGFydHkyUm91bmQyTWVzc2FnZXNdKTtcbiAgcGFydHkyRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kMk1lc3NhZ2VzLCBwYXJ0eTJSb3VuZDJNZXNzYWdlc10pO1xuXG4gIGNvbnN0IHNpZzEgPSBwYXJ0eTFEc2cuZ2V0U2lnbmF0dXJlKCk7XG4gIGNvbnN0IHNpZzIgPSBwYXJ0eTJEc2cuZ2V0U2lnbmF0dXJlKCk7XG4gIGFzc2VydChzaWcxLnNpZ25hdHVyZS50b1N0cmluZygnaGV4JykgPT09IHNpZzIuc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSk7XG4gIGFzc2VydChzaWcxLnJrLnRvU3RyaW5nKCdoZXgnKSA9PT0gc2lnMi5yay50b1N0cmluZygnaGV4JykpO1xuICByZXR1cm4gc2lnMTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyBhIGBSZWRQYWxsYXNTaWduYXR1cmVSZXN1bHRgIGFnYWluc3QgdGhlIHJhdyBtZXNzYWdlLlxuICpcbiAqIElNUE9SVEFOVDogdW5saWtlIEVkRFNBLCBSZWRQYWxsYXMgc2lnbmF0dXJlcyBtdXN0IGJlIHZlcmlmaWVkIGFnYWluc3QgYHJrYCDigJQgdGhlXG4gKiByZXJhbmRvbWl6ZWQgdmVyaWZpY2F0aW9uIGtleSBwcm9kdWNlZCBieSB0aGUgcmVyYW5kIHNlc3Npb24gdGhhdCBwcmVjZWRlZCBEU0cg4oCUIGFuZFxuICogTk9UIGFnYWluc3QgdGhlIERLRyAob3IgZGVyaXZlZCkgcHVibGljIGtleSBkaXJlY3RseS4gYHJrYCBlcXVhbHMgdGhlIHJlcmFuZCByZXN1bHQnc1xuICogYHBrYCAoYHBrID0gcGtfZGtnICsgW2FscGhhXUdgKTsgdGhlIGBhbHBoYWAgcmFuZG9taXplciBpcyBhdmFpbGFibGUgZnJvbVxuICogYFJlZFBhbGxhc1JlcmFuZC5nZXRSZXJhbmRvbWl6ZWRLZXlTaGFyZSgpYCBmb3IgY2FsbGVycyB0aGF0IG5lZWQgdG8gaW5kZXBlbmRlbnRseVxuICogY29uZmlybSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHJrYCBhbmQgYSBrbm93biBgcGtgLCBidXQgaXMgbm90IHJlcXVpcmVkIHRvIHZlcmlmeVxuICogdGhlIHNpZ25hdHVyZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlSZWRQYWxsYXNTaWduYXR1cmUoXG4gIHNpZ25hdHVyZVJlc3VsdDogUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0LFxuICBtZXNzYWdlOiBCdWZmZXJcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB3YXNtID1cbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiAhd2luZG93LnByb2Nlc3MgJiYgIXdpbmRvdy5wcm9jZXNzPy5bJ3R5cGUnXVxuICAgICAgPyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWludGVybmFsLW1vZHVsZXMgLS0gQGJpdGdvL3dhc20tbXBzIGV4cG9zZXMgZW52aXJvbm1lbnQtc3BlY2lmaWMgc3VicGF0aCBleHBvcnRzLlxuICAgICAgICBhd2FpdCBpbXBvcnQoJ0BiaXRnby93YXNtLW1wcy93ZWInKS50aGVuKGFzeW5jICh3ZWJXYXNtKSA9PiB7XG4gICAgICAgICAgYXdhaXQgd2ViV2FzbS5kZWZhdWx0KCk7XG4gICAgICAgICAgcmV0dXJuIHdlYldhc207XG4gICAgICAgIH0pXG4gICAgICA6IGF3YWl0IGltcG9ydCgnQGJpdGdvL3dhc20tbXBzJyk7XG4gIHJldHVybiB3YXNtLnJlZHBhbGxhc192ZXJpZnkoc2lnbmF0dXJlUmVzdWx0LnJrLCBzaWduYXR1cmVSZXN1bHQuc2lnbmF0dXJlLCBtZXNzYWdlKTtcbn1cbiJdfQ==
|
package/dist/src/types.d.ts
CHANGED
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,gBAAgB,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;CACX"}
|
package/dist/src/util.d.ts
CHANGED
package/dist/src/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAInE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAIvF;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,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrE;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;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOxE;AAED;;;;GAIG;AACH,wBAAsB,6BAA6B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAU9E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAO,GAAG,MAAM,CAQvE"}
|