@bitgo/sdk-lib-mpc 10.17.0 → 10.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +9 -0
- package/dist/src/tss/dkls-vrf/util.d.ts.map +1 -0
- package/dist/src/tss/dkls-vrf/util.js +52 -0
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts +3 -1
- package/dist/src/tss/ecdsa-dkls/dkg.d.ts.map +1 -1
- package/dist/src/tss/ecdsa-dkls/dkg.js +1 -1
- package/dist/src/tss/eddsa-mps/dkg.d.ts +3 -0
- package/dist/src/tss/eddsa-mps/dkg.d.ts.map +1 -1
- package/dist/src/tss/eddsa-mps/dkg.js +1 -1
- package/dist/src/tss/index.d.ts +1 -0
- package/dist/src/tss/index.d.ts.map +1 -1
- package/dist/src/tss/index.js +2 -1
- 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/dsg.d.ts +108 -0
- package/dist/src/tss/redpallas-mps/dsg.d.ts.map +1 -0
- package/dist/src/tss/redpallas-mps/dsg.js +355 -0
- package/dist/src/tss/redpallas-mps/index.d.ts +3 -0
- package/dist/src/tss/redpallas-mps/index.d.ts.map +1 -1
- package/dist/src/tss/redpallas-mps/index.js +4 -2
- package/dist/src/tss/redpallas-mps/types.d.ts +45 -0
- package/dist/src/tss/redpallas-mps/types.d.ts.map +1 -1
- package/dist/src/tss/redpallas-mps/types.js +25 -2
- package/dist/src/tss/redpallas-mps/util.d.ts +28 -0
- package/dist/src/tss/redpallas-mps/util.d.ts.map +1 -1
- package/dist/src/tss/redpallas-mps/util.js +95 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -4
|
@@ -1,9 +1,44 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
39
|
exports.generateRedPallasDKGKeyShares = generateRedPallasDKGKeyShares;
|
|
40
|
+
exports.executeTillRound = executeTillRound;
|
|
41
|
+
exports.verifyRedPallasSignature = verifyRedPallasSignature;
|
|
7
42
|
const crypto_1 = __importDefault(require("crypto"));
|
|
8
43
|
const assert_1 = __importDefault(require("assert"));
|
|
9
44
|
const ed25519_1 = require("@noble/curves/ed25519");
|
|
@@ -53,4 +88,63 @@ async function generateRedPallasDKGKeyShares(derivationSeed, seedUser, seedBacku
|
|
|
53
88
|
bitgo.handleIncomingMessages(r2Messages, derivationSeed);
|
|
54
89
|
return [user, backup, bitgo];
|
|
55
90
|
}
|
|
56
|
-
|
|
91
|
+
/**
|
|
92
|
+
* Initializes two RedPallas DSG parties and drives them through the protocol until the
|
|
93
|
+
* specified round. Mirrors `executeTillRound` in `../eddsa-mps/util.ts`, minus the
|
|
94
|
+
* derivation path (RedPallas DSG operates on an already-(root-or-derived) keyshare; there
|
|
95
|
+
* is no per-signing-session derivation path).
|
|
96
|
+
*
|
|
97
|
+
* @param round - Round to execute until (1–3). Returns intermediate message arrays for 1–2,
|
|
98
|
+
* or the final `RedPallasSignatureResult` (signature/rk/alpha) for 3.
|
|
99
|
+
* @param party1Dsg - First DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
|
|
100
|
+
* @param party2Dsg - Second DSG party (`new RedPallasDSG(partyIdx)`), not yet initialized.
|
|
101
|
+
* @param keyShare1 - Key share for the first party.
|
|
102
|
+
* @param keyShare2 - Key share for the second party.
|
|
103
|
+
* @param message - Raw message bytes to sign.
|
|
104
|
+
*/
|
|
105
|
+
async function executeTillRound(round, party1Dsg, party2Dsg, keyShare1, keyShare2, message) {
|
|
106
|
+
if (round < 1 || round > 3) {
|
|
107
|
+
throw Error('Invalid round number');
|
|
108
|
+
}
|
|
109
|
+
await party1Dsg.initDsg(keyShare1, message, party2Dsg.getPartyIdx());
|
|
110
|
+
await party2Dsg.initDsg(keyShare2, message, party1Dsg.getPartyIdx());
|
|
111
|
+
const party1Round0Message = party1Dsg.getFirstMessage();
|
|
112
|
+
const party2Round0Message = party2Dsg.getFirstMessage();
|
|
113
|
+
const [party2Round1Messages] = party2Dsg.handleIncomingMessages([party1Round0Message, party2Round0Message]);
|
|
114
|
+
const [party1Round1Messages] = party1Dsg.handleIncomingMessages([party1Round0Message, party2Round0Message]);
|
|
115
|
+
if (round === 1)
|
|
116
|
+
return [[party1Round1Messages], [party2Round1Messages]];
|
|
117
|
+
const [party1Round2Messages] = party1Dsg.handleIncomingMessages([party1Round1Messages, party2Round1Messages]);
|
|
118
|
+
const [party2Round2Messages] = party2Dsg.handleIncomingMessages([party1Round1Messages, party2Round1Messages]);
|
|
119
|
+
if (round === 2)
|
|
120
|
+
return [[party1Round2Messages], [party2Round2Messages]];
|
|
121
|
+
party1Dsg.handleIncomingMessages([party1Round2Messages, party2Round2Messages]);
|
|
122
|
+
party2Dsg.handleIncomingMessages([party1Round2Messages, party2Round2Messages]);
|
|
123
|
+
const sig1 = party1Dsg.getSignature();
|
|
124
|
+
const sig2 = party2Dsg.getSignature();
|
|
125
|
+
(0, assert_1.default)(sig1.signature.toString('hex') === sig2.signature.toString('hex'));
|
|
126
|
+
(0, assert_1.default)(sig1.rk.toString('hex') === sig2.rk.toString('hex'));
|
|
127
|
+
(0, assert_1.default)(sig1.alpha.toString('hex') === sig2.alpha.toString('hex'));
|
|
128
|
+
return sig1;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Verifies a `RedPallasSignatureResult` against the raw message.
|
|
132
|
+
*
|
|
133
|
+
* IMPORTANT: unlike EdDSA, RedPallas signatures must be verified against `rk` — the
|
|
134
|
+
* randomized verification key produced alongside the signature by DSG round3 — and NOT
|
|
135
|
+
* against the DKG (or derived) public key directly. `rk = pk + [alpha]G`; `alpha` is
|
|
136
|
+
* included in `RedPallasSignatureResult` for callers that need to independently confirm
|
|
137
|
+
* the relationship between `rk` and a known `pk`, but is not required to verify the
|
|
138
|
+
* signature itself.
|
|
139
|
+
*/
|
|
140
|
+
async function verifyRedPallasSignature(signatureResult, message) {
|
|
141
|
+
const wasm = typeof window !== 'undefined' && !window.process && !window.process?.['type']
|
|
142
|
+
? // eslint-disable-next-line import/no-internal-modules -- @bitgo/wasm-mps exposes environment-specific subpath exports.
|
|
143
|
+
await Promise.resolve().then(() => __importStar(require('@bitgo/wasm-mps/web'))).then(async (webWasm) => {
|
|
144
|
+
await webWasm.default();
|
|
145
|
+
return webWasm;
|
|
146
|
+
})
|
|
147
|
+
: await Promise.resolve().then(() => __importStar(require('@bitgo/wasm-mps')));
|
|
148
|
+
return wasm.redpallas_verify(signatureResult.rk, signatureResult.signature, message);
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c3MvcmVkcGFsbGFzLW1wcy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUNBLHNFQXVDQztBQWdCRCw0Q0FpQ0M7QUFZRCw0REFhQztBQXBKRCxvREFBNEI7QUFDNUIsb0RBQTRCO0FBQzVCLG1EQUErQztBQUMvQywrQkFBcUM7QUFJckMsU0FBUyxxQkFBcUIsQ0FBQyxJQUFhO0lBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDbkQsQ0FBQztBQVdELFNBQVMsWUFBWSxDQUFDLElBQTRCO0lBQ2hELElBQUEsZ0JBQU0sRUFBQyxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7SUFDdEYsSUFBQSxnQkFBTSxFQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztJQUN6RixPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSw2QkFBNkIsQ0FDakQs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dkYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHgyNTUxOSB9IGZyb20gJ0Bub2JsZS9jdXJ2ZXMvZWQyNTUxOSc7XG5pbXBvcnQgeyBSZWRQYWxsYXNES0cgfSBmcm9tICcuL2RrZyc7XG5pbXBvcnQgeyBSZWRQYWxsYXNEU0cgfSBmcm9tICcuL2RzZyc7XG5pbXBvcnQgeyBEZXNlcmlhbGl6ZWRNZXNzYWdlcywgUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmZ1bmN0aW9uIGdlbmVyYXRlWDI1NTE5S2V5cGFpcihzZWVkPzogQnVmZmVyKTogeyBwcml2S2V5OiBCdWZmZXI7IHB1YktleTogQnVmZmVyIH0ge1xuICBjb25zdCBwcml2S2V5ID0gc2VlZCA/IHNlZWQuc3ViYXJyYXkoMCwgMzIpIDogY3J5cHRvLnJhbmRvbUJ5dGVzKDMyKTtcbiAgY29uc3QgcHViS2V5ID0gQnVmZmVyLmZyb20oeDI1NTE5LmdldFB1YmxpY0tleShwcml2S2V5KSk7XG4gIHJldHVybiB7IHByaXZLZXk6IEJ1ZmZlci5mcm9tKHByaXZLZXkpLCBwdWJLZXkgfTtcbn1cblxuLyoqXG4gKiBQZXItcGFydHkgZGV0ZXJtaW5pc3RpYyBzZWVkIG1hdGVyaWFsLiBUbyB1c2UgdGhlIHNhbWUgc2VlZCBmb3IgYm90aCwgcGFzcyBpdCBhcyBib3RoIGZpZWxkcy5cbiAqIGBlbmNLZXlgIHNlZWRzIHRoZSBYMjU1MTkgZW5jcnlwdGlvbiBrZXk7IGBka2dTZWVkYCBzZWVkcyBES0cgcm91bmQgMC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRQYWxsYXNES0dQYXJ0eVNlZWQge1xuICBlbmNLZXk/OiBCdWZmZXI7XG4gIGRrZ1NlZWQ/OiBCdWZmZXI7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2VlZChzZWVkPzogUmVkUGFsbGFzREtHUGFydHlTZWVkKTogUmVkUGFsbGFzREtHUGFydHlTZWVkIHtcbiAgYXNzZXJ0KCFzZWVkPy5lbmNLZXkgfHwgc2VlZC5lbmNLZXkubGVuZ3RoID49IDMyLCAnZW5jS2V5IG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgYXNzZXJ0KCFzZWVkPy5ka2dTZWVkIHx8IHNlZWQuZGtnU2VlZC5sZW5ndGggPj0gMzIsICdka2dTZWVkIG11c3QgYmUgYXQgbGVhc3QgMzIgYnl0ZXMnKTtcbiAgcmV0dXJuIHNlZWQgPz8ge307XG59XG5cbi8qKlxuICogUnVucyBhIGZ1bGwgMy1wYXJ0eSAoMi1vZi0zKSBSZWRQYWxsYXMgREtHIGluLXByb2Nlc3MuIFNlZSBgUmVkUGFsbGFzREtHUGFydHlTZWVkYC5cbiAqIE1pcnJvcnMgYGdlbmVyYXRlRWREc2FES0dLZXlTaGFyZXNgIGluIGAuLi9lZGRzYS1tcHMvdXRpbC50c2AuXG4gKlxuICogQHBhcmFtIGRlcml2YXRpb25TZWVkIC0gMzItYnl0ZSBzZWVkIGNvbnN1bWVkIGJ5IHJvdW5kMiBmb3IgdGhlIChwbGF0Zm9ybS1zaWRlLW9ubHkpXG4gKiAgIHN1YnNlcXVlbnQgZGVyaXZhdGlvbiBwcm9jZXNzLiBNdXN0IGJlIHRoZSBzYW1lIHZhbHVlIGFjcm9zcyBhbGwgdGhyZWUgcGFydGllcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlUmVkUGFsbGFzREtHS2V5U2hhcmVzKFxuICBkZXJpdmF0aW9uU2VlZDogQnVmZmVyLFxuICBzZWVkVXNlcj86IFJlZFBhbGxhc0RLR1BhcnR5U2VlZCxcbiAgc2VlZEJhY2t1cD86IFJlZFBhbGxhc0RLR1BhcnR5U2VlZCxcbiAgc2VlZEJpdGdvPzogUmVkUGFsbGFzREtHUGFydHlTZWVkXG4pOiBQcm9taXNlPFtSZWRQYWxsYXNES0csIFJlZFBhbGxhc0RLRywgUmVkUGFsbGFzREtHXT4ge1xuICBjb25zdCB7IGVuY0tleTogdXNlckVuY0tleSwgZGtnU2VlZDogdXNlckRrZ1NlZWQgfSA9IHZhbGlkYXRlU2VlZChzZWVkVXNlcik7XG4gIGNvbnN0IHsgZW5jS2V5OiBiYWNrdXBFbmNLZXksIGRrZ1NlZWQ6IGJhY2t1cERrZ1NlZWQgfSA9IHZhbGlkYXRlU2VlZChzZWVkQmFja3VwKTtcbiAgY29uc3QgeyBlbmNLZXk6IGJpdGdvRW5jS2V5LCBka2dTZWVkOiBiaXRnb0RrZ1NlZWQgfSA9IHZhbGlkYXRlU2VlZChzZWVkQml0Z28pO1xuXG4gIGNvbnN0IHVzZXIgPSBuZXcgUmVkUGFsbGFzREtHKDMsIDIsIDApO1xuICBjb25zdCBiYWNrdXAgPSBuZXcgUmVkUGFsbGFzREtHKDMsIDIsIDEpO1xuICBjb25zdCBiaXRnbyA9IG5ldyBSZWRQYWxsYXNES0coMywgMiwgMik7XG5cbiAgY29uc3QgdXNlcktQID0gZ2VuZXJhdGVYMjU1MTlLZXlwYWlyKHVzZXJFbmNLZXkpO1xuICBjb25zdCBiYWNrdXBLUCA9IGdlbmVyYXRlWDI1NTE5S2V5cGFpcihiYWNrdXBFbmNLZXkpO1xuICBjb25zdCBiaXRnb0tQID0gZ2VuZXJhdGVYMjU1MTlLZXlwYWlyKGJpdGdvRW5jS2V5KTtcblxuICBhd2FpdCB1c2VyLmluaXREa2codXNlcktQLnByaXZLZXksIFtiYWNrdXBLUC5wdWJLZXksIGJpdGdvS1AucHViS2V5XSk7XG4gIGF3YWl0IGJhY2t1cC5pbml0RGtnKGJhY2t1cEtQLnByaXZLZXksIFt1c2VyS1AucHViS2V5LCBiaXRnb0tQLnB1YktleV0pO1xuICBhd2FpdCBiaXRnby5pbml0RGtnKGJpdGdvS1AucHJpdktleSwgW3VzZXJLUC5wdWJLZXksIGJhY2t1cEtQLnB1YktleV0pO1xuXG4gIGNvbnN0IHIxTWVzc2FnZXMgPSBbXG4gICAgdXNlci5nZXRGaXJzdE1lc3NhZ2UodXNlckRrZ1NlZWQpLFxuICAgIGJhY2t1cC5nZXRGaXJzdE1lc3NhZ2UoYmFja3VwRGtnU2VlZCksXG4gICAgYml0Z28uZ2V0Rmlyc3RNZXNzYWdlKGJpdGdvRGtnU2VlZCksXG4gIF07XG5cbiAgY29uc3QgcjJNZXNzYWdlcyA9IFtcbiAgICAuLi51c2VyLmhhbmRsZUluY29taW5nTWVzc2FnZXMocjFNZXNzYWdlcyksXG4gICAgLi4uYmFja3VwLmhhbmRsZUluY29taW5nTWVzc2FnZXMocjFNZXNzYWdlcyksXG4gICAgLi4uYml0Z28uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyMU1lc3NhZ2VzKSxcbiAgXTtcblxuICB1c2VyLmhhbmRsZUluY29taW5nTWVzc2FnZXMocjJNZXNzYWdlcywgZGVyaXZhdGlvblNlZWQpO1xuICBiYWNrdXAuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhyMk1lc3NhZ2VzLCBkZXJpdmF0aW9uU2VlZCk7XG4gIGJpdGdvLmhhbmRsZUluY29taW5nTWVzc2FnZXMocjJNZXNzYWdlcywgZGVyaXZhdGlvblNlZWQpO1xuXG4gIHJldHVybiBbdXNlciwgYmFja3VwLCBiaXRnb107XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdHdvIFJlZFBhbGxhcyBEU0cgcGFydGllcyBhbmQgZHJpdmVzIHRoZW0gdGhyb3VnaCB0aGUgcHJvdG9jb2wgdW50aWwgdGhlXG4gKiBzcGVjaWZpZWQgcm91bmQuIE1pcnJvcnMgYGV4ZWN1dGVUaWxsUm91bmRgIGluIGAuLi9lZGRzYS1tcHMvdXRpbC50c2AsIG1pbnVzIHRoZVxuICogZGVyaXZhdGlvbiBwYXRoIChSZWRQYWxsYXMgRFNHIG9wZXJhdGVzIG9uIGFuIGFscmVhZHktKHJvb3Qtb3ItZGVyaXZlZCkga2V5c2hhcmU7IHRoZXJlXG4gKiBpcyBubyBwZXItc2lnbmluZy1zZXNzaW9uIGRlcml2YXRpb24gcGF0aCkuXG4gKlxuICogQHBhcmFtIHJvdW5kIC0gUm91bmQgdG8gZXhlY3V0ZSB1bnRpbCAoMeKAkzMpLiBSZXR1cm5zIGludGVybWVkaWF0ZSBtZXNzYWdlIGFycmF5cyBmb3IgMeKAkzIsXG4gKiAgIG9yIHRoZSBmaW5hbCBgUmVkUGFsbGFzU2lnbmF0dXJlUmVzdWx0YCAoc2lnbmF0dXJlL3JrL2FscGhhKSBmb3IgMy5cbiAqIEBwYXJhbSBwYXJ0eTFEc2cgLSBGaXJzdCBEU0cgcGFydHkgKGBuZXcgUmVkUGFsbGFzRFNHKHBhcnR5SWR4KWApLCBub3QgeWV0IGluaXRpYWxpemVkLlxuICogQHBhcmFtIHBhcnR5MkRzZyAtIFNlY29uZCBEU0cgcGFydHkgKGBuZXcgUmVkUGFsbGFzRFNHKHBhcnR5SWR4KWApLCBub3QgeWV0IGluaXRpYWxpemVkLlxuICogQHBhcmFtIGtleVNoYXJlMSAtIEtleSBzaGFyZSBmb3IgdGhlIGZpcnN0IHBhcnR5LlxuICogQHBhcmFtIGtleVNoYXJlMiAtIEtleSBzaGFyZSBmb3IgdGhlIHNlY29uZCBwYXJ0eS5cbiAqIEBwYXJhbSBtZXNzYWdlIC0gUmF3IG1lc3NhZ2UgYnl0ZXMgdG8gc2lnbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVUaWxsUm91bmQoXG4gIHJvdW5kOiBudW1iZXIsXG4gIHBhcnR5MURzZzogUmVkUGFsbGFzRFNHLFxuICBwYXJ0eTJEc2c6IFJlZFBhbGxhc0RTRyxcbiAga2V5U2hhcmUxOiBCdWZmZXIsXG4gIGtleVNoYXJlMjogQnVmZmVyLFxuICBtZXNzYWdlOiBCdWZmZXJcbik6IFByb21pc2U8RGVzZXJpYWxpemVkTWVzc2FnZXNbXSB8IFJlZFBhbGxhc1NpZ25hdHVyZVJlc3VsdD4ge1xuICBpZiAocm91bmQgPCAxIHx8IHJvdW5kID4gMykge1xuICAgIHRocm93IEVycm9yKCdJbnZhbGlkIHJvdW5kIG51bWJlcicpO1xuICB9XG4gIGF3YWl0IHBhcnR5MURzZy5pbml0RHNnKGtleVNoYXJlMSwgbWVzc2FnZSwgcGFydHkyRHNnLmdldFBhcnR5SWR4KCkpO1xuICBhd2FpdCBwYXJ0eTJEc2cuaW5pdERzZyhrZXlTaGFyZTIsIG1lc3NhZ2UsIHBhcnR5MURzZy5nZXRQYXJ0eUlkeCgpKTtcbiAgY29uc3QgcGFydHkxUm91bmQwTWVzc2FnZSA9IHBhcnR5MURzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcbiAgY29uc3QgcGFydHkyUm91bmQwTWVzc2FnZSA9IHBhcnR5MkRzZy5nZXRGaXJzdE1lc3NhZ2UoKTtcblxuICBjb25zdCBbcGFydHkyUm91bmQxTWVzc2FnZXNdID0gcGFydHkyRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kME1lc3NhZ2UsIHBhcnR5MlJvdW5kME1lc3NhZ2VdKTtcbiAgY29uc3QgW3BhcnR5MVJvdW5kMU1lc3NhZ2VzXSA9IHBhcnR5MURzZy5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKFtwYXJ0eTFSb3VuZDBNZXNzYWdlLCBwYXJ0eTJSb3VuZDBNZXNzYWdlXSk7XG4gIGlmIChyb3VuZCA9PT0gMSkgcmV0dXJuIFtbcGFydHkxUm91bmQxTWVzc2FnZXNdLCBbcGFydHkyUm91bmQxTWVzc2FnZXNdXTtcblxuICBjb25zdCBbcGFydHkxUm91bmQyTWVzc2FnZXNdID0gcGFydHkxRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kMU1lc3NhZ2VzLCBwYXJ0eTJSb3VuZDFNZXNzYWdlc10pO1xuICBjb25zdCBbcGFydHkyUm91bmQyTWVzc2FnZXNdID0gcGFydHkyRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kMU1lc3NhZ2VzLCBwYXJ0eTJSb3VuZDFNZXNzYWdlc10pO1xuICBpZiAocm91bmQgPT09IDIpIHJldHVybiBbW3BhcnR5MVJvdW5kMk1lc3NhZ2VzXSwgW3BhcnR5MlJvdW5kMk1lc3NhZ2VzXV07XG5cbiAgcGFydHkxRHNnLmhhbmRsZUluY29taW5nTWVzc2FnZXMoW3BhcnR5MVJvdW5kMk1lc3NhZ2VzLCBwYXJ0eTJSb3VuZDJNZXNzYWdlc10pO1xuICBwYXJ0eTJEc2cuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhbcGFydHkxUm91bmQyTWVzc2FnZXMsIHBhcnR5MlJvdW5kMk1lc3NhZ2VzXSk7XG5cbiAgY29uc3Qgc2lnMSA9IHBhcnR5MURzZy5nZXRTaWduYXR1cmUoKTtcbiAgY29uc3Qgc2lnMiA9IHBhcnR5MkRzZy5nZXRTaWduYXR1cmUoKTtcbiAgYXNzZXJ0KHNpZzEuc2lnbmF0dXJlLnRvU3RyaW5nKCdoZXgnKSA9PT0gc2lnMi5zaWduYXR1cmUudG9TdHJpbmcoJ2hleCcpKTtcbiAgYXNzZXJ0KHNpZzEucmsudG9TdHJpbmcoJ2hleCcpID09PSBzaWcyLnJrLnRvU3RyaW5nKCdoZXgnKSk7XG4gIGFzc2VydChzaWcxLmFscGhhLnRvU3RyaW5nKCdoZXgnKSA9PT0gc2lnMi5hbHBoYS50b1N0cmluZygnaGV4JykpO1xuICByZXR1cm4gc2lnMTtcbn1cblxuLyoqXG4gKiBWZXJpZmllcyBhIGBSZWRQYWxsYXNTaWduYXR1cmVSZXN1bHRgIGFnYWluc3QgdGhlIHJhdyBtZXNzYWdlLlxuICpcbiAqIElNUE9SVEFOVDogdW5saWtlIEVkRFNBLCBSZWRQYWxsYXMgc2lnbmF0dXJlcyBtdXN0IGJlIHZlcmlmaWVkIGFnYWluc3QgYHJrYCDigJQgdGhlXG4gKiByYW5kb21pemVkIHZlcmlmaWNhdGlvbiBrZXkgcHJvZHVjZWQgYWxvbmdzaWRlIHRoZSBzaWduYXR1cmUgYnkgRFNHIHJvdW5kMyDigJQgYW5kIE5PVFxuICogYWdhaW5zdCB0aGUgREtHIChvciBkZXJpdmVkKSBwdWJsaWMga2V5IGRpcmVjdGx5LiBgcmsgPSBwayArIFthbHBoYV1HYDsgYGFscGhhYCBpc1xuICogaW5jbHVkZWQgaW4gYFJlZFBhbGxhc1NpZ25hdHVyZVJlc3VsdGAgZm9yIGNhbGxlcnMgdGhhdCBuZWVkIHRvIGluZGVwZW5kZW50bHkgY29uZmlybVxuICogdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBya2AgYW5kIGEga25vd24gYHBrYCwgYnV0IGlzIG5vdCByZXF1aXJlZCB0byB2ZXJpZnkgdGhlXG4gKiBzaWduYXR1cmUgaXRzZWxmLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5UmVkUGFsbGFzU2lnbmF0dXJlKFxuICBzaWduYXR1cmVSZXN1bHQ6IFJlZFBhbGxhc1NpZ25hdHVyZVJlc3VsdCxcbiAgbWVzc2FnZTogQnVmZmVyXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qgd2FzbSA9XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIXdpbmRvdy5wcm9jZXNzICYmICF3aW5kb3cucHJvY2Vzcz8uWyd0eXBlJ11cbiAgICAgID8gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1pbnRlcm5hbC1tb2R1bGVzIC0tIEBiaXRnby93YXNtLW1wcyBleHBvc2VzIGVudmlyb25tZW50LXNwZWNpZmljIHN1YnBhdGggZXhwb3J0cy5cbiAgICAgICAgYXdhaXQgaW1wb3J0KCdAYml0Z28vd2FzbS1tcHMvd2ViJykudGhlbihhc3luYyAod2ViV2FzbSkgPT4ge1xuICAgICAgICAgIGF3YWl0IHdlYldhc20uZGVmYXVsdCgpO1xuICAgICAgICAgIHJldHVybiB3ZWJXYXNtO1xuICAgICAgICB9KVxuICAgICAgOiBhd2FpdCBpbXBvcnQoJ0BiaXRnby93YXNtLW1wcycpO1xuICByZXR1cm4gd2FzbS5yZWRwYWxsYXNfdmVyaWZ5KHNpZ25hdHVyZVJlc3VsdC5yaywgc2lnbmF0dXJlUmVzdWx0LnNpZ25hdHVyZSwgbWVzc2FnZSk7XG59XG4iXX0=
|