@bitgo-beta/utxo-descriptors 0.0.1-beta.37 → 0.0.1-beta.371
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/cjs/src/index.d.ts +1 -0
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +3 -2
- package/dist/cjs/src/pox5/descriptor.d.ts +22 -0
- package/dist/cjs/src/pox5/descriptor.d.ts.map +1 -0
- package/dist/cjs/src/pox5/descriptor.js +79 -0
- package/dist/cjs/src/pox5/index.d.ts +6 -0
- package/dist/cjs/src/pox5/index.d.ts.map +1 -0
- package/dist/cjs/src/pox5/index.js +22 -0
- package/dist/cjs/src/pox5/input.d.ts +28 -0
- package/dist/cjs/src/pox5/input.d.ts.map +1 -0
- package/dist/cjs/src/pox5/input.js +47 -0
- package/dist/cjs/src/pox5/parseDescriptor.d.ts +20 -0
- package/dist/cjs/src/pox5/parseDescriptor.d.ts.map +1 -0
- package/dist/cjs/src/pox5/parseDescriptor.js +113 -0
- package/dist/cjs/src/pox5/recovery.d.ts +13 -0
- package/dist/cjs/src/pox5/recovery.d.ts.map +1 -0
- package/dist/cjs/src/pox5/recovery.js +75 -0
- package/dist/cjs/src/pox5/validation.d.ts +12 -0
- package/dist/cjs/src/pox5/validation.d.ts.map +1 -0
- package/dist/cjs/src/pox5/validation.js +70 -0
- package/dist/cjs/src/sbtc/parseDescriptor.d.ts +8 -0
- package/dist/cjs/src/sbtc/parseDescriptor.d.ts.map +1 -1
- package/dist/cjs/src/sbtc/parseDescriptor.js +7 -1
- package/dist/cjs/test/unit/pox5/descriptor.d.ts +2 -0
- package/dist/cjs/test/unit/pox5/descriptor.d.ts.map +1 -0
- package/dist/cjs/test/unit/pox5/descriptor.js +163 -0
- package/dist/cjs/test/unit/pox5/input.d.ts +2 -0
- package/dist/cjs/test/unit/pox5/input.d.ts.map +1 -0
- package/dist/cjs/test/unit/pox5/input.js +113 -0
- package/dist/cjs/test/unit/pox5/recovery.d.ts +2 -0
- package/dist/cjs/test/unit/pox5/recovery.d.ts.map +1 -0
- package/dist/cjs/test/unit/pox5/recovery.js +87 -0
- package/dist/cjs/test/unit/pox5/validation.d.ts +2 -0
- package/dist/cjs/test/unit/pox5/validation.d.ts.map +1 -0
- package/dist/cjs/test/unit/pox5/validation.js +99 -0
- package/dist/cjs/test/unit/sbtc/parseDescriptor.js +14 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/pox5/descriptor.d.ts +22 -0
- package/dist/esm/pox5/descriptor.d.ts.map +1 -0
- package/dist/esm/pox5/descriptor.js +74 -0
- package/dist/esm/pox5/index.d.ts +6 -0
- package/dist/esm/pox5/index.d.ts.map +1 -0
- package/dist/esm/pox5/index.js +6 -0
- package/dist/esm/pox5/input.d.ts +28 -0
- package/dist/esm/pox5/input.d.ts.map +1 -0
- package/dist/esm/pox5/input.js +43 -0
- package/dist/esm/pox5/parseDescriptor.d.ts +20 -0
- package/dist/esm/pox5/parseDescriptor.d.ts.map +1 -0
- package/dist/esm/pox5/parseDescriptor.js +109 -0
- package/dist/esm/pox5/recovery.d.ts +13 -0
- package/dist/esm/pox5/recovery.d.ts.map +1 -0
- package/dist/esm/pox5/recovery.js +68 -0
- package/dist/esm/pox5/validation.d.ts +12 -0
- package/dist/esm/pox5/validation.d.ts.map +1 -0
- package/dist/esm/pox5/validation.js +65 -0
- package/dist/esm/sbtc/parseDescriptor.d.ts +8 -0
- package/dist/esm/sbtc/parseDescriptor.d.ts.map +1 -1
- package/dist/esm/sbtc/parseDescriptor.js +7 -1
- package/package.json +8 -5
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const strict_1 = __importDefault(require("assert/strict"));
|
|
7
|
+
const crypto_1 = require("crypto");
|
|
8
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
9
|
+
const testutils_1 = require("@bitgo/wasm-utxo/testutils");
|
|
10
|
+
const pox5_1 = require("../../../src/pox5");
|
|
11
|
+
const UNLOCK_HEIGHT = 840000;
|
|
12
|
+
function sha256(value) {
|
|
13
|
+
return (0, crypto_1.createHash)('sha256').update(value).digest();
|
|
14
|
+
}
|
|
15
|
+
function createPox5RecoveryPsbt(lockTime, sequence = 0xfffffffe, unlockHeight = UNLOCK_HEIGHT) {
|
|
16
|
+
const [user, backup, bitgo] = (0, testutils_1.getKeyTriple)('utxo-staking-pox5-recovery');
|
|
17
|
+
const earlyExit = (0, testutils_1.getKey)('utxo-staking-pox5-recovery-early-exit');
|
|
18
|
+
const principalPreimage = Buffer.alloc(32, 0x42);
|
|
19
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)({
|
|
20
|
+
unlockHeight,
|
|
21
|
+
stakerCommitment: sha256(principalPreimage),
|
|
22
|
+
earlyExitKey: Buffer.from(earlyExit.publicKey),
|
|
23
|
+
stakerKeys: [Buffer.from(user.publicKey), Buffer.from(backup.publicKey), Buffer.from(bitgo.publicKey)],
|
|
24
|
+
});
|
|
25
|
+
const concreteDescriptor = descriptor;
|
|
26
|
+
const psbt = wasm_utxo_1.Psbt.create(2, lockTime);
|
|
27
|
+
psbt.addInput('01'.repeat(32), 0, 100000n, concreteDescriptor.scriptPubkey(), sequence);
|
|
28
|
+
psbt.addOutput(concreteDescriptor.scriptPubkey(), 90000n);
|
|
29
|
+
psbt.updateInputWithDescriptor(0, concreteDescriptor);
|
|
30
|
+
const match = (0, pox5_1.matchPox5Input)(psbt, 0, new Map([['pox5', concreteDescriptor]]));
|
|
31
|
+
strict_1.default.ok(match);
|
|
32
|
+
return { psbt, match: match, principalPreimage };
|
|
33
|
+
}
|
|
34
|
+
describe('PoX-5 spend policy', function () {
|
|
35
|
+
it('allows the early-exit branch regardless of nLockTime', function () {
|
|
36
|
+
const locktimeSpend = createPox5RecoveryPsbt(UNLOCK_HEIGHT);
|
|
37
|
+
const earlyExitSpend = createPox5RecoveryPsbt(0);
|
|
38
|
+
const timestampLocktime = createPox5RecoveryPsbt(pox5_1.POX5_MAX_UNLOCK_HEIGHT);
|
|
39
|
+
strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5EarlyExitSpend)(locktimeSpend.psbt, locktimeSpend.match));
|
|
40
|
+
strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5EarlyExitSpend)(earlyExitSpend.psbt, earlyExitSpend.match));
|
|
41
|
+
strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5EarlyExitSpend)(timestampLocktime.psbt, timestampLocktime.match));
|
|
42
|
+
});
|
|
43
|
+
it('classifies the spend from native principal-preimage metadata', function () {
|
|
44
|
+
const locktimeSpend = createPox5RecoveryPsbt(UNLOCK_HEIGHT);
|
|
45
|
+
strict_1.default.equal((0, pox5_1.classifyPox5Spend)(locktimeSpend.psbt, locktimeSpend.match), 'locktime');
|
|
46
|
+
const earlyExitSpend = createPox5RecoveryPsbt(0);
|
|
47
|
+
(0, pox5_1.preparePox5EarlyExit)(earlyExitSpend.psbt, 0, earlyExitSpend.match, earlyExitSpend.principalPreimage);
|
|
48
|
+
strict_1.default.equal((0, pox5_1.classifyPox5Spend)(earlyExitSpend.psbt, earlyExitSpend.match), 'early-exit');
|
|
49
|
+
});
|
|
50
|
+
it('enforces the block-height and unlock-height boundaries', function () {
|
|
51
|
+
const atHeight = createPox5RecoveryPsbt(UNLOCK_HEIGHT);
|
|
52
|
+
const aboveHeight = createPox5RecoveryPsbt(UNLOCK_HEIGHT + 1);
|
|
53
|
+
const belowHeight = createPox5RecoveryPsbt(UNLOCK_HEIGHT - 1);
|
|
54
|
+
const timestampLocktime = createPox5RecoveryPsbt(pox5_1.POX5_MAX_UNLOCK_HEIGHT);
|
|
55
|
+
strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5LocktimeSpend)(atHeight.psbt, [atHeight.match]));
|
|
56
|
+
strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5LocktimeSpend)(aboveHeight.psbt, [aboveHeight.match]));
|
|
57
|
+
strict_1.default.throws(() => (0, pox5_1.assertPox5LocktimeSpend)(belowHeight.psbt, [belowHeight.match]), /at least/);
|
|
58
|
+
strict_1.default.throws(() => (0, pox5_1.assertPox5LocktimeSpend)(timestampLocktime.psbt, [timestampLocktime.match]), /block height below/);
|
|
59
|
+
});
|
|
60
|
+
it('requires non-final sequences for locktime spends', function () {
|
|
61
|
+
const final = createPox5RecoveryPsbt(UNLOCK_HEIGHT, 0xffffffff);
|
|
62
|
+
const nonFinal = createPox5RecoveryPsbt(UNLOCK_HEIGHT, 0xfffffffe);
|
|
63
|
+
strict_1.default.throws(() => (0, pox5_1.assertPox5LocktimeSpend)(final.psbt, [final.match]), /non-final sequence/);
|
|
64
|
+
strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5LocktimeSpend)(nonFinal.psbt, [nonFinal.match]));
|
|
65
|
+
});
|
|
66
|
+
it('allows final sequences on unrelated transaction inputs', function () {
|
|
67
|
+
const { psbt, match } = createPox5RecoveryPsbt(UNLOCK_HEIGHT);
|
|
68
|
+
psbt.addInput('02'.repeat(32), 0, 10000n, new Uint8Array([0x51]), 0xffffffff);
|
|
69
|
+
strict_1.default.doesNotThrow(() => (0, pox5_1.assertPox5LocktimeSpend)(psbt, [match]));
|
|
70
|
+
});
|
|
71
|
+
it('requires an input match to remain bound to its original PSBT input', function () {
|
|
72
|
+
const { psbt, match, principalPreimage } = createPox5RecoveryPsbt(0);
|
|
73
|
+
strict_1.default.throws(() => (0, pox5_1.preparePox5EarlyExit)(psbt, 1, match, principalPreimage), /belongs to PSBT input/);
|
|
74
|
+
});
|
|
75
|
+
it('adds a validated principal preimage through the native PSBT API', function () {
|
|
76
|
+
const earlyExitSpend = createPox5RecoveryPsbt(0);
|
|
77
|
+
(0, pox5_1.preparePox5EarlyExit)(earlyExitSpend.psbt, 0, earlyExitSpend.match, earlyExitSpend.principalPreimage);
|
|
78
|
+
const records = earlyExitSpend.psbt
|
|
79
|
+
.getInputKeyValues(0)
|
|
80
|
+
.filter((record) => record.type === 'known' && record.key === 'PSBT_IN_SHA256');
|
|
81
|
+
strict_1.default.equal(records.length, 1);
|
|
82
|
+
const [record] = records;
|
|
83
|
+
strict_1.default.deepStrictEqual(Buffer.from(record.keyData), sha256(earlyExitSpend.principalPreimage));
|
|
84
|
+
strict_1.default.deepStrictEqual(Buffer.from(record.value), earlyExitSpend.principalPreimage);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3ZlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90ZXN0L3VuaXQvcG94NS9yZWNvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJEQUFtQztBQUNuQyxtQ0FBb0M7QUFFcEMsZ0RBQXlEO0FBQ3pELDBEQUFrRTtBQUVsRSw0Q0FTMkI7QUFFM0IsTUFBTSxhQUFhLEdBQUcsTUFBTyxDQUFDO0FBRTlCLFNBQVMsTUFBTSxDQUFDLEtBQWlCO0lBQy9CLE9BQU8sSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsUUFBZ0IsRUFDaEIsUUFBUSxHQUFHLFVBQVUsRUFDckIsWUFBWSxHQUFHLGFBQWE7SUFNNUIsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBQSx3QkFBWSxFQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDekUsTUFBTSxTQUFTLEdBQUcsSUFBQSxrQkFBTSxFQUFDLHVDQUF1QyxDQUFDLENBQUM7SUFDbEUsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqRCxNQUFNLFVBQVUsR0FBRyxJQUFBLGlDQUEwQixFQUFDO1FBQzVDLFlBQVk7UUFDWixnQkFBZ0IsRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDM0MsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUM5QyxVQUFVLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFD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TUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUk7YUFDaEMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO2FBQ3BCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2xGLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUN6QixnQkFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztRQUM5RixnQkFBTSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxjQUFjLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN0RixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQvc3RyaWN0JztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBQc2J0LCB0eXBlIERlc2NyaXB0b3IgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvJztcbmltcG9ydCB7IGdldEtleSwgZ2V0S2V5VHJpcGxlIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4by90ZXN0dXRpbHMnO1xuXG5pbXBvcnQge1xuICBhc3NlcnRQb3g1RWFybHlFeGl0U3BlbmQsXG4gIGFzc2VydFBveDVMb2NrdGltZVNwZW5kLFxuICBjbGFzc2lmeVBveDVTcGVuZCxcbiAgY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3IsXG4gIG1hdGNoUG94NUlucHV0LFxuICB0eXBlIFBveDVJbnB1dE1hdGNoLFxuICBQT1g1X01BWF9VTkxPQ0tfSEVJR0hULFxuICBwcmVwYXJlUG94NUVhcmx5RXhpdCxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL3BveDUnO1xuXG5jb25zdCBVTkxPQ0tfSEVJR0hUID0gODQwXzAwMDtcblxuZnVuY3Rpb24gc2hhMjU2KHZhbHVlOiBVaW50OEFycmF5KTogQnVmZmVyIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh2YWx1ZSkuZGlnZXN0KCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBveDVSZWNvdmVyeVBzYnQoXG4gIGxvY2tUaW1lOiBudW1iZXIsXG4gIHNlcXVlbmNlID0gMHhmZmZmZmZmZSxcbiAgdW5sb2NrSGVpZ2h0ID0gVU5MT0NLX0hFSUdIVFxuKToge1xuICBwc2J0OiBQc2J0O1xuICBtYXRjaDogUG94NUlucHV0TWF0Y2g7XG4gIHByaW5jaXBhbFByZWltYWdlOiBCdWZmZXI7XG59IHtcbiAgY29uc3QgW3VzZXIsIGJhY2t1cCwgYml0Z29dID0gZ2V0S2V5VHJpcGxlKCd1dHhvLXN0YWtpbmctcG94NS1yZWNvdmVyeScpO1xuICBjb25zdCBlYXJseUV4aXQgPSBnZXRLZXkoJ3V0eG8tc3Rha2luZy1wb3g1LXJlY292ZXJ5LWVhcmx5LWV4aXQnKTtcbiAgY29uc3QgcHJpbmNpcGFsUHJlaW1hZ2UgPSBCdWZmZXIuYWxsb2MoMzIsIDB4NDIpO1xuICBjb25zdCBkZXNjcmlwdG9yID0gY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3Ioe1xuICAgIHVubG9ja0hlaWdodCxcbiAgICBzdGFrZXJDb21taXRtZW50OiBzaGEyNTYocHJpbmNpcGFsUHJlaW1hZ2UpLFxuICAgIGVhcmx5RXhpdEtleTogQnVmZmVyLmZyb20oZWFybHlFeGl0LnB1YmxpY0tleSksXG4gICAgc3Rha2VyS2V5czogW0J1ZmZlci5mcm9tKHVzZXIucHVibGljS2V5KSwgQnVmZmVyLmZyb20oYmFja3VwLnB1YmxpY0tleSksIEJ1ZmZlci5mcm9tKGJpdGdvLnB1YmxpY0tleSldLFxuICB9KTtcbiAgY29uc3QgY29uY3JldGVEZXNjcmlwdG9yID0gZGVzY3JpcHRvciBhcyBEZXNjcmlwdG9yO1xuICBjb25zdCBwc2J0ID0gUHNidC5jcmVhdGUoMiwgbG9ja1RpbWUpO1xuICBwc2J0LmFkZElucHV0KCcwMScucmVwZWF0KDMyKSwgMCwgMTAwXzAwMG4sIGNvbmNyZXRlRGVzY3JpcHRvci5zY3JpcHRQdWJrZXkoKSwgc2VxdWVuY2UpO1xuICBwc2J0LmFkZE91dHB1dChjb25jcmV0ZURlc2NyaXB0b3Iuc2NyaXB0UHVia2V5KCksIDkwXzAwMG4pO1xuICBwc2J0LnVwZGF0ZUlucHV0V2l0aERlc2NyaXB0b3IoMCwgY29uY3JldGVEZXNjcmlwdG9yKTtcblxuICBjb25zdCBtYXRjaCA9IG1hdGNoUG94NUlucHV0KHBzYnQsIDAsIG5ldyBNYXAoW1sncG94NScsIGNvbmNyZXRlRGVzY3JpcHRvcl1dKSk7XG4gIGFzc2VydC5vayhtYXRjaCk7XG4gIHJldHVybiB7IHBzYnQsIG1hdGNoOiBtYXRjaCBhcyBQb3g1SW5wdXRNYXRjaCwgcHJpbmNpcGFsUHJlaW1hZ2UgfTtcbn1cblxuZGVzY3JpYmUoJ1BvWC01IHNwZW5kIHBvbGljeScsIGZ1bmN0aW9uICgpIHtcbiAgaXQoJ2FsbG93cyB0aGUgZWFybHktZXhpdCBicmFuY2ggcmVnYXJkbGVzcyBvZiBuTG9ja1RpbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbG9ja3RpbWVTcGVuZCA9IGNyZWF0ZVBveDVSZWNvdmVyeVBzYnQoVU5MT0NLX0hFSUdIVCk7XG4gICAgY29uc3QgZWFybHlFeGl0U3BlbmQgPSBjcmVhdGVQb3g1UmVjb3ZlcnlQc2J0KDApO1xuICAgIGNvbnN0IHRpbWVzdGFtcExvY2t0aW1lID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChQT1g1X01BWF9VTkxPQ0tfSEVJR0hUKTtcblxuICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gYXNzZXJ0UG94NUVhcmx5RXhpdFNwZW5kKGxvY2t0aW1lU3BlbmQucHNidCwgbG9ja3RpbWVTcGVuZC5tYXRjaCkpO1xuICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gYXNzZXJ0UG94NUVhcmx5RXhpdFNwZW5kKGVhcmx5RXhpdFNwZW5kLnBzYnQsIGVhcmx5RXhpdFNwZW5kLm1hdGNoKSk7XG4gICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBhc3NlcnRQb3g1RWFybHlFeGl0U3BlbmQodGltZXN0YW1wTG9ja3RpbWUucHNidCwgdGltZXN0YW1wTG9ja3RpbWUubWF0Y2gpKTtcbiAgfSk7XG5cbiAgaXQoJ2NsYXNzaWZpZXMgdGhlIHNwZW5kIGZyb20gbmF0aXZlIHByaW5jaXBhbC1wcmVpbWFnZSBtZXRhZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBsb2NrdGltZVNwZW5kID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChVTkxPQ0tfSEVJR0hUKTtcbiAgICBhc3NlcnQuZXF1YWwoY2xhc3NpZnlQb3g1U3BlbmQobG9ja3RpbWVTcGVuZC5wc2J0LCBsb2NrdGltZVNwZW5kLm1hdGNoKSwgJ2xvY2t0aW1lJyk7XG5cbiAgICBjb25zdCBlYXJseUV4aXRTcGVuZCA9IGNyZWF0ZVBveDVSZWNvdmVyeVBzYnQoMCk7XG4gICAgcHJlcGFyZVBveDVFYXJseUV4aXQoZWFybHlFeGl0U3BlbmQucHNidCwgMCwgZWFybHlFeGl0U3BlbmQubWF0Y2gsIGVhcmx5RXhpdFNwZW5kLnByaW5jaXBhbFByZWltYWdlKTtcbiAgICBhc3NlcnQuZXF1YWwoY2xhc3NpZnlQb3g1U3BlbmQoZWFybHlFeGl0U3BlbmQucHNidCwgZWFybHlFeGl0U3BlbmQubWF0Y2gpLCAnZWFybHktZXhpdCcpO1xuICB9KTtcblxuICBpdCgnZW5mb3JjZXMgdGhlIGJsb2NrLWhlaWdodCBhbmQgdW5sb2NrLWhlaWdodCBib3VuZGFyaWVzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGF0SGVpZ2h0ID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChVTkxPQ0tfSEVJR0hUKTtcbiAgICBjb25zdCBhYm92ZUhlaWdodCA9IGNyZWF0ZVBveDVSZWNvdmVyeVBzYnQoVU5MT0NLX0hFSUdIVCArIDEpO1xuICAgIGNvbnN0IGJlbG93SGVpZ2h0ID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChVTkxPQ0tfSEVJR0hUIC0gMSk7XG4gICAgY29uc3QgdGltZXN0YW1wTG9ja3RpbWUgPSBjcmVhdGVQb3g1UmVjb3ZlcnlQc2J0KFBPWDVfTUFYX1VOTE9DS19IRUlHSFQpO1xuXG4gICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBhc3NlcnRQb3g1TG9ja3RpbWVTcGVuZChhdEhlaWdodC5wc2J0LCBbYXRIZWlnaHQubWF0Y2hdKSk7XG4gICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBhc3NlcnRQb3g1TG9ja3RpbWVTcGVuZChhYm92ZUhlaWdodC5wc2J0LCBbYWJvdmVIZWlnaHQubWF0Y2hdKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhc3NlcnRQb3g1TG9ja3RpbWVTcGVuZChiZWxvd0hlaWdodC5wc2J0LCBbYmVsb3dIZWlnaHQubWF0Y2hdKSwgL2F0IGxlYXN0Lyk7XG4gICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICgpID0+IGFzc2VydFBveDVMb2NrdGltZVNwZW5kKHRpbWVzdGFtcExvY2t0aW1lLnBzYnQsIFt0aW1lc3RhbXBMb2NrdGltZS5tYXRjaF0pLFxuICAgICAgL2Jsb2NrIGhlaWdodCBiZWxvdy9cbiAgICApO1xuICB9KTtcblxuICBpdCgncmVxdWlyZXMgbm9uLWZpbmFsIHNlcXVlbmNlcyBmb3IgbG9ja3RpbWUgc3BlbmRzJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGZpbmFsID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChVTkxPQ0tfSEVJR0hULCAweGZmZmZmZmZmKTtcbiAgICBjb25zdCBub25GaW5hbCA9IGNyZWF0ZVBveDVSZWNvdmVyeVBzYnQoVU5MT0NLX0hFSUdIVCwgMHhmZmZmZmZmZSk7XG5cbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGFzc2VydFBveDVMb2NrdGltZVNwZW5kKGZpbmFsLnBzYnQsIFtmaW5hbC5tYXRjaF0pLCAvbm9uLWZpbmFsIHNlcXVlbmNlLyk7XG4gICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBhc3NlcnRQb3g1TG9ja3RpbWVTcGVuZChub25GaW5hbC5wc2J0LCBbbm9uRmluYWwubWF0Y2hdKSk7XG4gIH0pO1xuXG4gIGl0KCdhbGxvd3MgZmluYWwgc2VxdWVuY2VzIG9uIHVucmVsYXRlZCB0cmFuc2FjdGlvbiBpbnB1dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgeyBwc2J0LCBtYXRjaCB9ID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidChVTkxPQ0tfSEVJR0hUKTtcbiAgICBwc2J0LmFkZElucHV0KCcwMicucmVwZWF0KDMyKSwgMCwgMTBfMDAwbiwgbmV3IFVpbnQ4QXJyYXkoWzB4NTFdKSwgMHhmZmZmZmZmZik7XG5cbiAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IGFzc2VydFBveDVMb2NrdGltZVNwZW5kKHBzYnQsIFttYXRjaF0pKTtcbiAgfSk7XG5cbiAgaXQoJ3JlcXVpcmVzIGFuIGlucHV0IG1hdGNoIHRvIHJlbWFpbiBib3VuZCB0byBpdHMgb3JpZ2luYWwgUFNCVCBpbnB1dCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7IHBzYnQsIG1hdGNoLCBwcmluY2lwYWxQcmVpbWFnZSB9ID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidCgwKTtcblxuICAgIGFzc2VydC50aHJvd3MoKCkgPT4gcHJlcGFyZVBveDVFYXJseUV4aXQocHNidCwgMSwgbWF0Y2gsIHByaW5jaXBhbFByZWltYWdlKSwgL2JlbG9uZ3MgdG8gUFNCVCBpbnB1dC8pO1xuICB9KTtcblxuICBpdCgnYWRkcyBhIHZhbGlkYXRlZCBwcmluY2lwYWwgcHJlaW1hZ2UgdGhyb3VnaCB0aGUgbmF0aXZlIFBTQlQgQVBJJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGVhcmx5RXhpdFNwZW5kID0gY3JlYXRlUG94NVJlY292ZXJ5UHNidCgwKTtcblxuICAgIHByZXBhcmVQb3g1RWFybHlFeGl0KGVhcmx5RXhpdFNwZW5kLnBzYnQsIDAsIGVhcmx5RXhpdFNwZW5kLm1hdGNoLCBlYXJseUV4aXRTcGVuZC5wcmluY2lwYWxQcmVpbWFnZSk7XG5cbiAgICBjb25zdCByZWNvcmRzID0gZWFybHlFeGl0U3BlbmQucHNidFxuICAgICAgLmdldElucHV0S2V5VmFsdWVzKDApXG4gICAgICAuZmlsdGVyKChyZWNvcmQpID0+IHJlY29yZC50eXBlID09PSAna25vd24nICYmIHJlY29yZC5rZXkgPT09ICdQU0JUX0lOX1NIQTI1NicpO1xuICAgIGFzc2VydC5lcXVhbChyZWNvcmRzLmxlbmd0aCwgMSk7XG4gICAgY29uc3QgW3JlY29yZF0gPSByZWNvcmRzO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoQnVmZmVyLmZyb20ocmVjb3JkLmtleURhdGEpLCBzaGEyNTYoZWFybHlFeGl0U3BlbmQucHJpbmNpcGFsUHJlaW1hZ2UpKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKEJ1ZmZlci5mcm9tKHJlY29yZC52YWx1ZSksIGVhcmx5RXhpdFNwZW5kLnByaW5jaXBhbFByZWltYWdlKTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../../../test/unit/pox5/validation.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,99 @@
|
|
|
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
|
+
const assert = __importStar(require("assert"));
|
|
37
|
+
const crypto_1 = require("crypto");
|
|
38
|
+
const wasm_utxo_1 = require("@bitgo/wasm-utxo");
|
|
39
|
+
const testutils_1 = require("@bitgo/wasm-utxo/testutils");
|
|
40
|
+
const pox5_1 = require("../../../src/pox5");
|
|
41
|
+
function sha256(value) {
|
|
42
|
+
return (0, crypto_1.createHash)('sha256').update(value).digest();
|
|
43
|
+
}
|
|
44
|
+
function getParams(stakerCommitment) {
|
|
45
|
+
const stakerKeys = (0, testutils_1.getKeyTriple)('utxo-descriptors-pox5-validation');
|
|
46
|
+
return {
|
|
47
|
+
unlockHeight: 840000,
|
|
48
|
+
stakerCommitment,
|
|
49
|
+
earlyExitKey: Buffer.from(stakerKeys[0].derive(9).publicKey),
|
|
50
|
+
stakerKeys: [
|
|
51
|
+
Buffer.from(stakerKeys[0].publicKey),
|
|
52
|
+
Buffer.from(stakerKeys[1].publicKey),
|
|
53
|
+
Buffer.from(stakerKeys[2].publicKey),
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function createPsbt() {
|
|
58
|
+
const psbt = wasm_utxo_1.Psbt.create(2, 0);
|
|
59
|
+
psbt.addInput('01'.repeat(32), 0, 100000n, new Uint8Array(34));
|
|
60
|
+
psbt.addOutput(new Uint8Array([0x6a]), 0n);
|
|
61
|
+
return psbt;
|
|
62
|
+
}
|
|
63
|
+
describe('PoX-5 principal preimage validation', function () {
|
|
64
|
+
it('extracts and validates the descriptor-committed SHA256 record', function () {
|
|
65
|
+
const preimage = Buffer.alloc(32, 0x42);
|
|
66
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(getParams(sha256(preimage)));
|
|
67
|
+
const psbt = createPsbt();
|
|
68
|
+
psbt.addSha256Preimage(0, preimage);
|
|
69
|
+
assert.deepStrictEqual((0, pox5_1.getPox5PrincipalPreimage)(psbt, 0, descriptor), preimage);
|
|
70
|
+
});
|
|
71
|
+
it('ignores unrelated SHA256 records and rejects a missing committed preimage', function () {
|
|
72
|
+
const preimage = Buffer.alloc(32, 0x42);
|
|
73
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(getParams(sha256(preimage)));
|
|
74
|
+
assert.throws(() => (0, pox5_1.getPox5PrincipalPreimage)(createPsbt(), 0, descriptor), /matching the descriptor commitment/);
|
|
75
|
+
const psbt = createPsbt();
|
|
76
|
+
psbt.addSha256Preimage(0, preimage);
|
|
77
|
+
psbt.addSha256Preimage(0, Buffer.alloc(32, 0x43));
|
|
78
|
+
assert.deepStrictEqual((0, pox5_1.getPox5PrincipalPreimage)(psbt, 0, descriptor), preimage);
|
|
79
|
+
const unmatchedPsbt = createPsbt();
|
|
80
|
+
unmatchedPsbt.addSha256Preimage(0, Buffer.alloc(32, 0x43));
|
|
81
|
+
assert.throws(() => (0, pox5_1.getPox5PrincipalPreimage)(unmatchedPsbt, 0, descriptor), /matching the descriptor commitment/);
|
|
82
|
+
});
|
|
83
|
+
it('rejects malformed SHA256 digest and preimage values', function () {
|
|
84
|
+
const preimage = Buffer.alloc(32, 0x42);
|
|
85
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(getParams(sha256(preimage)));
|
|
86
|
+
const psbt = createPsbt();
|
|
87
|
+
psbt.setInputKV(0, { type: 'unknown', keyType: 0x0b, data: sha256(preimage) }, new Uint8Array(31));
|
|
88
|
+
assert.throws(() => (0, pox5_1.getPox5PrincipalPreimage)(psbt, 0, descriptor), /preimage must be 32 bytes/);
|
|
89
|
+
});
|
|
90
|
+
it('checks the principal preimage against the descriptor commitment', function () {
|
|
91
|
+
const preimage = Buffer.alloc(32, 0x42);
|
|
92
|
+
const descriptor = (0, pox5_1.createPox5LockupDescriptor)(getParams(sha256(preimage)));
|
|
93
|
+
const info = (0, pox5_1.parsePox5LockupDescriptor)(descriptor);
|
|
94
|
+
assert.ok(info);
|
|
95
|
+
assert.doesNotThrow(() => (0, pox5_1.assertPox5PrincipalPreimage)(info, preimage));
|
|
96
|
+
assert.throws(() => (0, pox5_1.assertPox5PrincipalPreimage)(info, Buffer.alloc(32, 0x43)), /does not match/);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9wb3g1L3ZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsbUNBQW9DO0FBRXBDLGdEQUF3QztBQUN4QywwREFBMEQ7QUFFMUQsNENBTTJCO0FBRTNCLFNBQVMsTUFBTSxDQUFDLEtBQWlCO0lBQy9CLE9BQU8sSUFBQSxtQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsZ0JBQXdCO0lBQ3pDLE1BQU0sVUFBVSxHQUFHLElBQUEsd0JBQVksRUFBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3BFLE9BQU87UUFDTCxZQUFZLEVBQUUsTUFBTztRQUNyQixnQkFBZ0I7UUFDaEIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDNUQsVUFBVSxFQUFFO1lBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNwQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDckM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsVUFBVTtJQUNqQixNQUFNLElBQUksR0FBRyxnQkFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLFFBQVEs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Q25HLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFDbEcsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsaUVBQWlFLEVBQUU7UUFDcEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBQSxpQ0FBMEIsRUFBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNLElBQUksR0FBRyxJQUFBLGdDQUF5QixFQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLGtDQUEyQixFQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxrQ0FBMkIsRUFBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25HLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBQc2J0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBnZXRLZXlUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvL3Rlc3R1dGlscyc7XG5cbmltcG9ydCB7XG4gIGFzc2VydFBveDVQcmluY2lwYWxQcmVpbWFnZSxcbiAgY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3IsXG4gIGdldFBveDVQcmluY2lwYWxQcmVpbWFnZSxcbiAgUG94NUxvY2t1cERlc2NyaXB0b3JQYXJhbXMsXG4gIHBhcnNlUG94NUxvY2t1cERlc2NyaXB0b3IsXG59IGZyb20gJy4uLy4uLy4uL3NyYy9wb3g1JztcblxuZnVuY3Rpb24gc2hhMjU2KHZhbHVlOiBVaW50OEFycmF5KTogQnVmZmVyIHtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh2YWx1ZSkuZGlnZXN0KCk7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmFtcyhzdGFrZXJDb21taXRtZW50OiBCdWZmZXIpOiBQb3g1TG9ja3VwRGVzY3JpcHRvclBhcmFtcyB7XG4gIGNvbnN0IHN0YWtlcktleXMgPSBnZXRLZXlUcmlwbGUoJ3V0eG8tZGVzY3JpcHRvcnMtcG94NS12YWxpZGF0aW9uJyk7XG4gIHJldHVybiB7XG4gICAgdW5sb2NrSGVpZ2h0OiA4NDBfMDAwLFxuICAgIHN0YWtlckNvbW1pdG1lbnQsXG4gICAgZWFybHlFeGl0S2V5OiBCdWZmZXIuZnJvbShzdGFrZXJLZXlzWzBdLmRlcml2ZSg5KS5wdWJsaWNLZXkpLFxuICAgIHN0YWtlcktleXM6IFtcbiAgICAgIEJ1ZmZlci5mcm9tKHN0YWtlcktleXNbMF0ucHVibGljS2V5KSxcbiAgICAgIEJ1ZmZlci5mcm9tKHN0YWtlcktleXNbMV0ucHVibGljS2V5KSxcbiAgICAgIEJ1ZmZlci5mcm9tKHN0YWtlcktleXNbMl0ucHVibGljS2V5KSxcbiAgICBdLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQc2J0KCk6IFBzYnQge1xuICBjb25zdCBwc2J0ID0gUHNidC5jcmVhdGUoMiwgMCk7XG4gIHBzYnQuYWRkSW5wdXQoJzAxJy5yZXBlYXQoMzIpLCAwLCAxMDBfMDAwbiwgbmV3IFVpbnQ4QXJyYXkoMzQpKTtcbiAgcHNidC5hZGRPdXRwdXQobmV3IFVpbnQ4QXJyYXkoWzB4NmFdKSwgMG4pO1xuICByZXR1cm4gcHNidDtcbn1cblxuZGVzY3JpYmUoJ1BvWC01IHByaW5jaXBhbCBwcmVpbWFnZSB2YWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBpdCgnZXh0cmFjdHMgYW5kIHZhbGlkYXRlcyB0aGUgZGVzY3JpcHRvci1jb21taXR0ZWQgU0hBMjU2IHJlY29yZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwcmVpbWFnZSA9IEJ1ZmZlci5hbGxvYygzMiwgMHg0Mik7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGNyZWF0ZVBveDVMb2NrdXBEZXNjcmlwdG9yKGdldFBhcmFtcyhzaGEyNTYocHJlaW1hZ2UpKSk7XG4gICAgY29uc3QgcHNidCA9IGNyZWF0ZVBzYnQoKTtcbiAgICBwc2J0LmFkZFNoYTI1NlByZWltYWdlKDAsIHByZWltYWdlKTtcblxuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZ2V0UG94NVByaW5jaXBhbFByZWltYWdlKHBzYnQsIDAsIGRlc2NyaXB0b3IpLCBwcmVpbWFnZSk7XG4gIH0pO1xuXG4gIGl0KCdpZ25vcmVzIHVucmVsYXRlZCBTSEEyNTYgcmVjb3JkcyBhbmQgcmVqZWN0cyBhIG1pc3NpbmcgY29tbWl0dGVkIHByZWltYWdlJywgZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHByZWltYWdlID0gQnVmZmVyLmFsbG9jKDMyLCAweDQyKTtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gY3JlYXRlUG94NUxvY2t1cERlc2NyaXB0b3IoZ2V0UGFyYW1zKHNoYTI1NihwcmVpbWFnZSkpKTtcbiAgICBhc3NlcnQudGhyb3dzKCgpID0+IGdldFBveDVQcmluY2lwYWxQcmVpbWFnZShjcmVhdGVQc2J0KCksIDAsIGRlc2NyaXB0b3IpLCAvbWF0Y2hpbmcgdGhlIGRlc2NyaXB0b3IgY29tbWl0bWVudC8pO1xuXG4gICAgY29uc3QgcHNidCA9IGNyZWF0ZVBzYnQoKTtcbiAgICBwc2J0LmFkZFNoYTI1NlByZWltYWdlKDAsIHByZWltYWdlKTtcbiAgICBwc2J0LmFkZFNoYTI1NlByZWltYWdlKDAsIEJ1ZmZlci5hbGxvYygzMiwgMHg0MykpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZ2V0UG94NVByaW5jaXBhbFByZWltYWdlKHBzYnQsIDAsIGRlc2NyaXB0b3IpLCBwcmVpbWFnZSk7XG5cbiAgICBjb25zdCB1bm1hdGNoZWRQc2J0ID0gY3JlYXRlUHNidCgpO1xuICAgIHVubWF0Y2hlZFBzYnQuYWRkU2hhMjU2UHJlaW1hZ2UoMCwgQnVmZmVyLmFsbG9jKDMyLCAweDQzKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBnZXRQb3g1UHJpbmNpcGFsUHJlaW1hZ2UodW5tYXRjaGVkUHNidCwgMCwgZGVzY3JpcHRvciksIC9tYXRjaGluZyB0aGUgZGVzY3JpcHRvciBjb21taXRtZW50Lyk7XG4gIH0pO1xuXG4gIGl0KCdyZWplY3RzIG1hbGZvcm1lZCBTSEEyNTYgZGlnZXN0IGFuZCBwcmVpbWFnZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcHJlaW1hZ2UgPSBCdWZmZXIuYWxsb2MoMzIsIDB4NDIpO1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjcmVhdGVQb3g1TG9ja3VwRGVzY3JpcHRvcihnZXRQYXJhbXMoc2hhMjU2KHByZWltYWdlKSkpO1xuICAgIGNvbnN0IHBzYnQgPSBjcmVhdGVQc2J0KCk7XG4gICAgcHNidC5zZXRJbnB1dEtWKDAsIHsgdHlwZTogJ3Vua25vd24nLCBrZXlUeXBlOiAweDBiLCBkYXRhOiBzaGEyNTYocHJlaW1hZ2UpIH0sIG5ldyBVaW50OEFycmF5KDMxKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBnZXRQb3g1UHJpbmNpcGFsUHJlaW1hZ2UocHNidCwgMCwgZGVzY3JpcHRvciksIC9wcmVpbWFnZSBtdXN0IGJlIDMyIGJ5dGVzLyk7XG4gIH0pO1xuXG4gIGl0KCdjaGVja3MgdGhlIHByaW5jaXBhbCBwcmVpbWFnZSBhZ2FpbnN0IHRoZSBkZXNjcmlwdG9yIGNvbW1pdG1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcHJlaW1hZ2UgPSBCdWZmZXIuYWxsb2MoMzIsIDB4NDIpO1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBjcmVhdGVQb3g1TG9ja3VwRGVzY3JpcHRvcihnZXRQYXJhbXMoc2hhMjU2KHByZWltYWdlKSkpO1xuICAgIGNvbnN0IGluZm8gPSBwYXJzZVBveDVMb2NrdXBEZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgIGFzc2VydC5vayhpbmZvKTtcblxuICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gYXNzZXJ0UG94NVByaW5jaXBhbFByZWltYWdlKGluZm8sIHByZWltYWdlKSk7XG4gICAgYXNzZXJ0LnRocm93cygoKSA9PiBhc3NlcnRQb3g1UHJpbmNpcGFsUHJlaW1hZ2UoaW5mbywgQnVmZmVyLmFsbG9jKDMyLCAweDQzKSksIC9kb2VzIG5vdCBtYXRjaC8pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -90,6 +90,11 @@ describe('parseSbtcDepositDescriptor', function () {
|
|
|
90
90
|
const sortedInput = [...reclaimKeyHex].sort().map((k) => Buffer.from(k, 'hex'));
|
|
91
91
|
assert.deepStrictEqual(parsed.reclaimKeys, sortedInput);
|
|
92
92
|
});
|
|
93
|
+
it('exposes raw hex reclaimKeyStrings for definite inputs', function () {
|
|
94
|
+
const parsed = (0, sbtc_1.parseSbtcDepositDescriptor)(descriptor);
|
|
95
|
+
assert.ok(parsed);
|
|
96
|
+
assert.deepStrictEqual(parsed.reclaimKeyStrings, [...reclaimKeyHex].sort());
|
|
97
|
+
});
|
|
93
98
|
it('returns miniscript AST nodes for both leaves', function () {
|
|
94
99
|
const parsed = (0, sbtc_1.parseSbtcDepositDescriptor)(descriptor);
|
|
95
100
|
assert.ok(parsed);
|
|
@@ -121,6 +126,14 @@ describe('parseSbtcDepositDescriptor', function () {
|
|
|
121
126
|
assert.ok(parsed);
|
|
122
127
|
assert.strictEqual(parsed.reclaimKeys, undefined);
|
|
123
128
|
});
|
|
129
|
+
it('exposes the raw xpub.../* reclaimKeyStrings for derivable inputs', function () {
|
|
130
|
+
const parsed = (0, sbtc_1.parseSbtcDepositDescriptor)(descriptor);
|
|
131
|
+
assert.ok(parsed);
|
|
132
|
+
assert.strictEqual(parsed.reclaimKeyStrings.length, 3);
|
|
133
|
+
for (const k of parsed.reclaimKeyStrings) {
|
|
134
|
+
assert.match(k, /^xpub[1-9A-HJ-NP-Za-km-z]+\/\*$/);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
124
137
|
it('resolves to concrete reclaim keys after atDerivationIndex(0) and compiles to a tap Miniscript', function () {
|
|
125
138
|
assert.strictEqual(descriptor.hasWildcard(), true);
|
|
126
139
|
const derivedZero = descriptor.atDerivationIndex(0);
|
|
@@ -186,4 +199,4 @@ describe('parseSbtcDepositDescriptor', function () {
|
|
|
186
199
|
});
|
|
187
200
|
});
|
|
188
201
|
});
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VEZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3NidGMvcGFyc2VEZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBRWpDLGdEQUFzRTtBQUN0RSwwREFBMEQ7QUFFMUQsNENBUzJCO0FBSTNCLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxrRUFBa0UsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNySCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRTNFLFNBQVMsY0FBYztJQUNyQixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFBLHdCQUFZLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEQsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLFlBQWtELEVBQUU7SUFDdkUsT0FBTztRQUNMLFVBQVUsRUFBRSxjQUFjLEVBQUU7UUFDNUIsUUFBUSxFQUFFLGdDQUF5QjtRQUNuQyxNQUFNLEVBQUUsNkJBQXNCO1FBQzlCLGVBQWUsRUFBRSxnQkFBZ0I7UUFDakMsbUJBQW1CLEVBQUUscUJBQXFCO1FBQzFDLEdBQUcsU0FBUztLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQsUUFBUSxDQUFDLDRCQUE0QixFQUFFO0lBQ3JDLFFBQVEsQ0FBQyxvREFBb0QsRUFBRTtRQUM3RCxNQUFNLGFBQWEsR0FBNkI7WUFDOUMsa0VBQWtFO1lBQ2xFLGtFQUFrRTtZQUNsRSxrRUFBa0U7U0FDbkUsQ0FBQztRQUNG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QyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUU7WUFDbEQsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLENBQUM7WUFDaEMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDNUMsTUFBTSxVQUFVLEdBQUcsc0JBQVUsQ0FBQyxVQUFVLENBQUMsSUFBQSxrQ0FBMkIsRUFBQyxNQUFNLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMzRixNQUFNLE1BQU0sR0FBRyxJQUFBLGlDQUEwQixFQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBhc3QsIGJpcDMyLCBEZXNjcmlwdG9yLCBNaW5pc2NyaXB0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBnZXRLZXlUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvL3Rlc3R1dGlscyc7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZVNidGNEZXBvc2l0RGVzY3JpcHRvcixcbiAgREVGQVVMVF9NQVhfU0lHTkVSX0ZFRSxcbiAgREVGQVVMVF9SRUNMQUlNX0xPQ0tfVElNRSxcbiAgZW5jb2RlRGVwb3NpdFBheWxvYWQsXG4gIHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yLFxuICBTYnRjRGVwb3NpdERlc2NyaXB0b3JQYXJhbXMsXG4gIFNUQUNLU19SRUNJUElFTlRfQllURV9MRU5HVEgsXG4gIFVOU1BFTkRBQkxFX0lOVEVSTkFMX0tFWSxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL3NidGMnO1xuXG50eXBlIEJJUDMySW50ZXJmYWNlID0gYmlwMzIuQklQMzJJbnRlcmZhY2U7XG5cbmNvbnN0IFNJR05FUlNfQUdHUkVHQVRFX0tFWSA9IEJ1ZmZlci5mcm9tKCdjOWMyMzEyY2E0MDZkY2I4ZWVkNTBiODI5YjUyOTJmNWZiM2U4NDZkYjBhNTU2YWY2MWNjNTM4MzRjZTc1NDIxJywgJ2hleCcpO1xuY29uc3QgU1RBQ0tTX1JFQ0lQSUVOVCA9IEJ1ZmZlci5mcm9tKCcwNScgKyAnMTYnICsgJzZkJy5yZXBlYXQoMjApLCAnaGV4Jyk7XG5cbmZ1bmN0aW9uIGdldEJpcDMyVHJpcGxlKCk6IFtCSVAzMkludGVyZmFjZSwgQklQMzJJbnRlcmZhY2UsIEJJUDMySW50ZXJmYWNlXSB7XG4gIGNvbnN0IFt1c2VyLCBiYWNrdXAsIGJpdGdvXSA9IGdldEtleVRyaXBsZSgnZGVmYXVsdCcpO1xuICByZXR1cm4gW3VzZXIsIGJhY2t1cCwgYml0Z29dO1xufVxuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyhvdmVycmlkZXM6IFBhcnRpYWw8U2J0Y0RlcG9zaXREZXNjcmlwdG9yUGFyYW1zPiA9IHt9KTogU2J0Y0RlcG9zaXREZXNjcmlwdG9yUGFyYW1zIHtcbiAgcmV0dXJuIHtcbiAgICB3YWxsZXRLZXlzOiBnZXRCaXAzMlRyaXBsZSgpLFxuICAgIGxvY2tUaW1lOiBERUZBVUxUX1JFQ0xBSU1fTE9DS19USU1FLFxuICAgIG1heEZlZTogREVGQVVMVF9NQVhfU0lHTkVSX0ZFRSxcbiAgICBzdGFja3NSZWNpcGllbnQ6IFNUQUNLU19SRUNJUElFTlQsXG4gICAgc2lnbmVyc0FnZ3JlZ2F0ZUtleTogU0lHTkVSU19BR0dSRUdBVEVfS0VZLFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfTtcbn1cblxuZGVzY3JpYmUoJ3BhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnZGVmaW5pdGUgZGVzY3JpcHRvciAoY29uY3JldGUgeC1vbmx5IHJlY2xhaW0ga2V5cyknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVjbGFpbUtleUhleDogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddID0gW1xuICAgICAgJzRkODM4NzU5YjJhNzQ2MTZhMjI5OGUwNTgwY2E4MTU4NzRmNWU1YTlkMmRkMWIyZjAyMDNiNjhjNjZmYzZjMWUnLFxuICAgICAgJzYzOTc3OWM0YjcwMGRjNTFlY2UwMTJhMGUyMDMyNWZjYWZhZGEyMmE0YTEyMmZmYWEwNGQwYzBjY2FlODM5NDMnLFxuICAgICAgJ2QxZDYwODRlYWM5ODMwM2U5ZDI4ZTA4MmJmZDllYWRmMGI4YmUwMzNlMjIzYTE3YWQwMWRmODFiZGFhOGM3YjInLFxuICAgIF07XG4gICAgY29uc3QgcmVjbGFpbUtleXM6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXSA9IFtcbiAgICAgIEJ1ZmZlci5mcm9tKHJlY2xhaW1LZXlIZXhbMF0sICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHJlY2xhaW1LZXlIZXhbMV0sICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHJlY2xhaW1LZXlIZXhbMl0sICdoZXgnKSxcbiAgICBdO1xuICAgIGNvbnN0IHBhcmFtczogU2J0Y0RlcG9zaXREZXNjcmlwdG9yUGFyYW1zID0ge1xuICAgICAgd2FsbGV0S2V5czogcmVjbGFpbUtleXMsXG4gICAgICBsb2NrVGltZTogMTQ0LFxuICAgICAgbWF4RmVlOiA4MF8wMDAsXG4gICAgICBzdGFja3NSZWNpcGllbnQ6IFNUQUNLU19SRUNJUElFTlQsXG4gICAgICBzaWduZXJzQWdncmVnYXRlS2V5OiBTSUdORVJTX0FHR1JFR0FURV9LRVksXG4gICAgfTtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKGNyZWF0ZVNidGNEZXBvc2l0RGVzY3JpcHRvcihwYXJhbXMpLCAnZGVmaW5pdGUnKTtcblxuICAgIGl0KCdyb3VuZC10cmlwcyBhbGwgaGlnaC1sZXZlbCBmaWVsZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNidGNEZXBvc2l0RGVzY3JpcHRvcihkZXNjcmlwdG9yKTtcbiAgICAgIGFzc2VydC5vayhwYXJzZWQpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQuc2lnbmVyc0FnZ3JlZ2F0ZUtleSwgU0lHTkVSU19BR0dSRUdBVEVfS0VZKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQubWF4RmVlLCA4MF8wMDBuKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocGFyc2VkLnN0YWNrc1JlY2lwaWVudCwgU1RBQ0tTX1JFQ0lQSUVOVCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLmxvY2tUaW1lLCAxNDQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgcmVjbGFpbSBrZXlzIGFzIDMyLWJ5dGUgYnVmZmVycyBpbiB0aGUgZGVzY3JpcHRvciBvcmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgICAgYXNzZXJ0Lm9rKHBhcnNlZCk7XG4gICAgICBhc3NlcnQub2socGFyc2VkLnJlY2xhaW1LZXlzKTtcbiAgICAgIC8vIG11bHRpX2Egc29ydHMga2V5cyBieSBoZXg7IHZlcmlmeSB0aGUgcGFyc2VyIHJldHVybnMgd2hhdGV2ZXIgb3JkZXJcbiAgICAgIC8vIHRoZSBkZXNjcmlwdG9yIGxpYnJhcnkgcHJvZHVjZWQgcmF0aGVyIHRoYW4gdGhlIG9yaWdpbmFsIGlucHV0IG9yZGVyLlxuICAgICAgY29uc3Qgc29ydGVkSW5wdXQgPSBbLi4ucmVjbGFpbUtleUhleF0uc29ydCgpLm1hcCgoaykgPT4gQnVmZmVyLmZyb20oaywgJ2hleCcpKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocGFyc2VkLnJlY2xhaW1LZXlzLCBzb3J0ZWRJbnB1dCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBtaW5pc2NyaXB0IEFTVCBub2RlcyBmb3IgYm90aCBsZWF2ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNidGNEZXBvc2l0RGVzY3JpcHRvcihkZXNjcmlwdG9yKTtcbiAgICAgIGFzc2VydC5vayhwYXJzZWQpO1xuICAgICAgY29uc3QgcGF5bG9hZEhleCA9IGVuY29kZURlcG9zaXRQYXlsb2FkKHBhcmFtcy5tYXhGZWUsIHBhcmFtcy5zdGFja3NSZWNpcGllbnQpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocGFyc2VkLmRlcG9zaXRNaW5pc2NyaXB0Tm9kZSwge1xuICAgICAgICBhbmRfdjogW3sgcGF5bG9hZF9kcm9wOiBwYXlsb2FkSGV4IH0sIHsgcGs6IFNJR05FUlNfQUdHUkVHQVRFX0tFWS50b1N0cmluZygnaGV4JykgfV0sXG4gICAgICB9IGFzIHVua25vd24gYXMgYXN0Lk1pbmlzY3JpcHROb2RlKTtcbiAgICAgIC8vIHI6b2xkZXIgKyBtdWx0aV9hIG11c3QgYmUgcHJlc2VudCBhbmQgY29ycmVjdGx5IG9yZGVyZWQgaW4gdGhlIEFTVC5cbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocGFyc2VkLnJlY2xhaW1NaW5pc2NyaXB0Tm9kZSwge1xuICAgICAgICBhbmRfdjogW3sgJ3I6b2xkZXInOiAxNDQgfSwgeyBtdWx0aV9hOiBbMiwgLi4uWy4uLnJlY2xhaW1LZXlIZXhdLnNvcnQoKV0gfV0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Rlcml2YWJsZSBkZXNjcmlwdG9yICh4cHViLyogcmVjbGFpbSBrZXlzKScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcygpO1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBEZXNjcmlwdG9yLmZyb21TdHJpbmcoY3JlYXRlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKHBhcmFtcyksICdkZXJpdmFibGUnKTtcblxuICAgIGl0KCdyb3VuZC10cmlwcyBsb2NrVGltZSwgbWF4RmVlLCByZWNpcGllbnQsIGFuZCBzaWduZXJzIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgICAgYXNzZXJ0Lm9rKHBhcnNlZCk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBhcnNlZC5zaWduZXJzQWdncmVnYXRlS2V5LCBTSUdORVJTX0FHR1JFR0FURV9LRVkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5tYXhGZWUsIEJpZ0ludChERUZBVUxUX01BWF9TSUdORVJfRkVFKSk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBhcnNlZC5zdGFja3NSZWNpcGllbnQsIFNUQUNLU19SRUNJUElFTlQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5sb2NrVGltZSwgREVGQVVMVF9SRUNMQUlNX0xPQ0tfVElNRSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyByZWNsYWltS2V5cz11bmRlZmluZWQgZm9yIGRlcml2YWJsZSBpbnB1dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBEZXJpdmFibGUgZGVzY3JpcHRvcnMgcmVuZGVyIG11bHRpX2EgZW50cmllcyBhcyBgeHB1Yi4uLi8qYCwgbm90IGFzXG4gICAgICAvLyAzMi1ieXRlIGhleCDigJQgdGhleSBjYW4ndCBiZSByZWR1Y2VkIHRvIGJ5dGVzIHdpdGhvdXQgcGlja2luZyBhbiBpbmRleC5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgICAgYXNzZXJ0Lm9rKHBhcnNlZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLnJlY2xhaW1LZXlzLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Jlc29sdmVzIHRvIGNvbmNyZXRlIHJlY2xhaW0ga2V5cyBhZnRlciBhdERlcml2YXRpb25JbmRleCgwKSBhbmQgY29tcGlsZXMgdG8gYSB0YXAgTWluaXNjcmlwdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChkZXNjcmlwdG9yLmhhc1dpbGRjYXJkKCksIHRydWUpO1xuICAgICAgY29uc3QgZGVyaXZlZFplcm8gPSBkZXNjcmlwdG9yLmF0RGVyaXZhdGlvbkluZGV4KDApO1xuICAgICAgY29uc3QgZGVyaXZlZE9uZSA9IGRlc2NyaXB0b3IuYXREZXJpdmF0aW9uSW5kZXgoMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVyaXZlZFplcm8uaGFzV2lsZGNhcmQoKSwgZmFsc2UpO1xuXG4gICAgICBjb25zdCBwYXJzZWRaZXJvID0gcGFyc2VTYnRjRGVwb3NpdERlc2NyaXB0b3IoZGVyaXZlZFplcm8pO1xuICAgICAgYXNzZXJ0Lm9rKHBhcnNlZFplcm8pO1xuICAgICAgYXNzZXJ0Lm9rKHBhcnNlZFplcm8ucmVjbGFpbUtleXMpO1xuICAgICAgZm9yIChjb25zdCBrIG9mIHBhcnNlZFplcm8ucmVjbGFpbUtleXMpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGsubGVuZ3RoLCAzMiwgYGV4cGVjdGVkIDMyLWJ5dGUgeC1vbmx5IGtleSwgZ290ICR7ay5sZW5ndGh9YCk7XG4gICAgICB9XG4gICAgICAvLyBEZXBvc2l0LWxlYWYgZmllbGRzIGFyZSBkZXJpdmF0aW9uLWluZGVwZW5kZW50LlxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWRaZXJvLnNpZ25lcnNBZ2dyZWdhdGVLZXksIFNJR05FUlNfQUdHUkVHQVRFX0tFWSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkWmVyby5sb2NrVGltZSwgREVGQVVMVF9SRUNMQUlNX0xPQ0tfVElNRSk7XG5cbiAgICAgIGNvbnN0IHBhcnNlZE9uZSA9IHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKGRlcml2ZWRPbmUpO1xuICAgICAgYXNzZXJ0Lm9rKHBhcnNlZE9uZT8ucmVjbGFpbUtleXMpO1xuICAgICAgYXNzZXJ0Lm5vdERlZXBTdHJpY3RFcXVhbChwYXJzZWRaZXJvLnJlY2xhaW1LZXlzLCBwYXJzZWRPbmUucmVjbGFpbUtleXMpO1xuXG4gICAgICAvLyBUaGUgcmV3cml0dGVuIHJlY2xhaW0gbGVhZiBjYXJyaWVzIGNvbmNyZXRlIGhleCBpbiBtdWx0aV9hLCBzbyB0aGVcbiAgICAgIC8vIGZvcm1hdHRlZCBzdHJpbmcgY29tcGlsZXMgYXMgYSB0YXAtY29udGV4dCBNaW5pc2NyaXB0LiBgZnJvbVN0cmluZ0V4dGBcbiAgICAgIC8vIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIGxlYWYgY29udGFpbnMgdGhlIGByOm9sZGVyYCAoZHJvcCkgd3JhcHBlci5cbiAgICAgIGNvbnN0IHJlY2xhaW1NcyA9IE1pbmlzY3JpcHQuZnJvbVN0cmluZ0V4dChhc3QuZm9ybWF0Tm9kZShwYXJzZWRaZXJvLnJlY2xhaW1NaW5pc2NyaXB0Tm9kZSksICd0YXAnLCB7fSk7XG4gICAgICBhc3NlcnQub2socmVjbGFpbU1zKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlamVjdGlvbiBwYXRocycsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcygpO1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBEZXNjcmlwdG9yLmZyb21TdHJpbmcoY3JlYXRlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKHBhcmFtcyksICdkZXJpdmFibGUnKTtcblxuICAgIGl0KCdyZXR1cm5zIG51bGwgZm9yIGEgbm9uLXNCVEMgZGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdwa2hEZXNjcmlwdG9yID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKGB3cGtoKCR7Z2V0QmlwMzJUcmlwbGUoKVswXS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCl9LyopYCwgJ2Rlcml2YWJsZScpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKHdwa2hEZXNjcmlwdG9yKSwgbnVsbCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBudWxsIGZvciBhIHRyKCkgdGhhdCBoYXMgYSBkaWZmZXJlbnQgaW50ZXJuYWwga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU3dhcCBVTlNQRU5EQUJMRSBmb3IgYW4gYXJiaXRyYXJ5IDMyLWJ5dGUga2V5IOKAlCBwYXR0ZXJuIG1hdGNoIG11c3RcbiAgICAgIC8vIHJlcXVpcmUgdGhlIGNhbm9uaWNhbCB1bnNwZW5kYWJsZSBwb2ludCwgbm90IGp1c3QgYW55IHRyKCkuXG4gICAgICBjb25zdCB0YW1wZXJlZCA9IGNyZWF0ZVNidGNEZXBvc2l0RGVzY3JpcHRvcihidWlsZFBhcmFtcygpKS5yZXBsYWNlKFVOU1BFTkRBQkxFX0lOVEVSTkFMX0tFWSwgJ2EnLnJlcGVhdCg2NCkpO1xuICAgICAgY29uc3Qgbm9kZSA9IGFzdC5mcm9tRGVzY3JpcHRvcihEZXNjcmlwdG9yLmZyb21TdHJpbmcodGFtcGVyZWQsICdkZXJpdmFibGUnKSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VTYnRjRGVwb3NpdERlc2NyaXB0b3Iobm9kZSksIG51bGwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FjY2VwdHMgYSBwcmUtZXh0cmFjdGVkIGFzdC5EZXNjcmlwdG9yTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBhc3QuZnJvbURlc2NyaXB0b3IoZGVzY3JpcHRvcik7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNidGNEZXBvc2l0RGVzY3JpcHRvcihub2RlKTtcbiAgICAgIGFzc2VydC5vayhwYXJzZWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5sb2NrVGltZSwgREVGQVVMVF9SRUNMQUlNX0xPQ0tfVElNRSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwYXJhbWV0ZXIgcm91bmQtdHJpcCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZXh0cmFjdHMgdGhlIHNhbWUgbWF4RmVlIGFuZCByZWNpcGllbnQgdGhhdCBlbmNvZGVEZXBvc2l0UGF5bG9hZCBwcm9kdWNlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlY2lwaWVudCA9IEJ1ZmZlci5hbGxvYyhTVEFDS1NfUkVDSVBJRU5UX0JZVEVfTEVOR1RILCAweDExKTtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IGJ1aWxkUGFyYW1zKHsgbWF4RmVlOiAxMjM0NW4sIHN0YWNrc1JlY2lwaWVudDogcmVjaXBpZW50IH0pO1xuICAgICAgY29uc3QgZGVzY3JpcHRvciA9IERlc2NyaXB0b3IuZnJvbVN0cmluZyhjcmVhdGVTYnRjRGVwb3NpdERlc2NyaXB0b3IocGFyYW1zKSwgJ2Rlcml2YWJsZScpO1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTYnRjRGVwb3NpdERlc2NyaXB0b3IoZGVzY3JpcHRvcik7XG4gICAgICBhc3NlcnQub2socGFyc2VkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQubWF4RmVlLCAxMjM0NW4pO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQuc3RhY2tzUmVjaXBpZW50LCByZWNpcGllbnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FjY2VwdHMgdGhlIGZ1bGwgdW5zaWduZWQgNjQtYml0IG1heEZlZSByYW5nZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1heCA9IDB4ZmZmZmZmZmZmZmZmZmZmZm47XG4gICAgICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcyh7IG1heEZlZTogbWF4IH0pO1xuICAgICAgY29uc3QgZGVzY3JpcHRvciA9IERlc2NyaXB0b3IuZnJvbVN0cmluZyhjcmVhdGVTYnRjRGVwb3NpdERlc2NyaXB0b3IocGFyYW1zKSwgJ2Rlcml2YWJsZScpO1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTYnRjRGVwb3NpdERlc2NyaXB0b3IoZGVzY3JpcHRvcik7XG4gICAgICBhc3NlcnQub2socGFyc2VkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQubWF4RmVlLCBtYXgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VEZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L3NidGMvcGFyc2VEZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBRWpDLGdEQUFzRTtBQUN0RSwwREFBMEQ7QUFFMUQsNENBUzJCO0FBSTNCLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxrRUFBa0UsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNySCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRTNFLFNBQVMsY0FBYztJQUNyQixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFBLHdCQUFZLEVBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEQsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLFlBQWtELEVBQUU7SUFDdkUsT0FBTztRQUNMLFVBQVUsRUFBRSxjQUFjLEVBQUU7UUFDNUIsUUFBUSxFQUFFLGdDQUF5QjtRQUNuQyxNQUFNLEVBQUUsNkJBQXNCO1FBQzlCLGVBQWUsRUFBRSxnQkFBZ0I7UUFDakMsbUJBQW1CLEVBQUUscUJBQXFCO1FBQzFDLEdBQUcsU0FBUztLQUNiLENBQUM7QUFDSixDQUFDO0FBRUQsUUFBUSxDQUFDLDRCQUE0QixFQUFFO0lBQ3JDLFFBQVEsQ0FBQyxvREFBb0QsRUFBRTtRQUM3RCxNQUFNLGFBQWEsR0FBNkI7WUFDOUMsa0VBQWtFO1lBQ2xFLGtFQUFrRTtZQUNsRSxrRUFBa0U7U0FDbkUsQ0FBQztRQUNG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QUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBhc3QsIGJpcDMyLCBEZXNjcmlwdG9yLCBNaW5pc2NyaXB0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBnZXRLZXlUcmlwbGUgfSBmcm9tICdAYml0Z28vd2FzbS11dHhvL3Rlc3R1dGlscyc7XG5cbmltcG9ydCB7XG4gIGNyZWF0ZVNidGNEZXBvc2l0RGVzY3JpcHRvcixcbiAgREVGQVVMVF9NQVhfU0lHTkVSX0ZFRSxcbiAgREVGQVVMVF9SRUNMQUlNX0xPQ0tfVElNRSxcbiAgZW5jb2RlRGVwb3NpdFBheWxvYWQsXG4gIHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yLFxuICBTYnRjRGVwb3NpdERlc2NyaXB0b3JQYXJhbXMsXG4gIFNUQUNLU19SRUNJUElFTlRfQllURV9MRU5HVEgsXG4gIFVOU1BFTkRBQkxFX0lOVEVSTkFMX0tFWSxcbn0gZnJvbSAnLi4vLi4vLi4vc3JjL3NidGMnO1xuXG50eXBlIEJJUDMySW50ZXJmYWNlID0gYmlwMzIuQklQMzJJbnRlcmZhY2U7XG5cbmNvbnN0IFNJR05FUlNfQUdHUkVHQVRFX0tFWSA9IEJ1ZmZlci5mcm9tKCdjOWMyMzEyY2E0MDZkY2I4ZWVkNTBiODI5YjUyOTJmNWZiM2U4NDZkYjBhNTU2YWY2MWNjNTM4MzRjZTc1NDIxJywgJ2hleCcpO1xuY29uc3QgU1RBQ0tTX1JFQ0lQSUVOVCA9IEJ1ZmZlci5mcm9tKCcwNScgKyAnMTYnICsgJzZkJy5yZXBlYXQoMjApLCAnaGV4Jyk7XG5cbmZ1bmN0aW9uIGdldEJpcDMyVHJpcGxlKCk6IFtCSVAzMkludGVyZmFjZSwgQklQMzJJbnRlcmZhY2UsIEJJUDMySW50ZXJmYWNlXSB7XG4gIGNvbnN0IFt1c2VyLCBiYWNrdXAsIGJpdGdvXSA9IGdldEtleVRyaXBsZSgnZGVmYXVsdCcpO1xuICByZXR1cm4gW3VzZXIsIGJhY2t1cCwgYml0Z29dO1xufVxuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyhvdmVycmlkZXM6IFBhcnRpYWw8U2J0Y0RlcG9zaXREZXNjcmlwdG9yUGFyYW1zPiA9IHt9KTogU2J0Y0RlcG9zaXREZXNjcmlwdG9yUGFyYW1zIHtcbiAgcmV0dXJuIHtcbiAgICB3YWxsZXRLZXlzOiBnZXRCaXAzMlRyaXBsZSgpLFxuICAgIGxvY2tUaW1lOiBERUZBVUxUX1JFQ0xBSU1fTE9DS19USU1FLFxuICAgIG1heEZlZTogREVGQVVMVF9NQVhfU0lHTkVSX0ZFRSxcbiAgICBzdGFja3NSZWNpcGllbnQ6IFNUQUNLU19SRUNJUElFTlQsXG4gICAgc2lnbmVyc0FnZ3JlZ2F0ZUtleTogU0lHTkVSU19BR0dSRUdBVEVfS0VZLFxuICAgIC4uLm92ZXJyaWRlcyxcbiAgfTtcbn1cblxuZGVzY3JpYmUoJ3BhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICBkZXNjcmliZSgnZGVmaW5pdGUgZGVzY3JpcHRvciAoY29uY3JldGUgeC1vbmx5IHJlY2xhaW0ga2V5cyknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcmVjbGFpbUtleUhleDogW3N0cmluZywgc3RyaW5nLCBzdHJpbmddID0gW1xuICAgICAgJzRkODM4NzU5YjJhNzQ2MTZhMjI5OGUwNTgwY2E4MTU4NzRmNWU1YTlkMmRkMWIyZjAyMDNiNjhjNjZmYzZjMWUnLFxuICAgICAgJzYzOTc3OWM0YjcwMGRjNTFlY2UwMTJhMGUyMDMyNWZjYWZhZGEyMmE0YTEyMmZmYWEwNGQwYzBjY2FlODM5NDMnLFxuICAgICAgJ2QxZDYwODRlYWM5ODMwM2U5ZDI4ZTA4MmJmZDllYWRmMGI4YmUwMzNlMjIzYTE3YWQwMWRmODFiZGFhOGM3YjInLFxuICAgIF07XG4gICAgY29uc3QgcmVjbGFpbUtleXM6IFtCdWZmZXIsIEJ1ZmZlciwgQnVmZmVyXSA9IFtcbiAgICAgIEJ1ZmZlci5mcm9tKHJlY2xhaW1LZXlIZXhbMF0sICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHJlY2xhaW1LZXlIZXhbMV0sICdoZXgnKSxcbiAgICAgIEJ1ZmZlci5mcm9tKHJlY2xhaW1LZXlIZXhbMl0sICdoZXgnKSxcbiAgICBdO1xuICAgIGNvbnN0IHBhcmFtczogU2J0Y0RlcG9zaXREZXNjcmlwdG9yUGFyYW1zID0ge1xuICAgICAgd2FsbGV0S2V5czogcmVjbGFpbUtleXMsXG4gICAgICBsb2NrVGltZTogMTQ0LFxuICAgICAgbWF4RmVlOiA4MF8wMDAsXG4gICAgICBzdGFja3NSZWNpcGllbnQ6IFNUQUNLU19SRUNJUElFTlQsXG4gICAgICBzaWduZXJzQWdncmVnYXRlS2V5OiBTSUdORVJTX0FHR1JFR0FURV9LRVksXG4gICAgfTtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKGNyZWF0ZVNidGNEZXBvc2l0RGVzY3JpcHRvcihwYXJhbXMpLCAnZGVmaW5pdGUnKTtcblxuICAgIGl0KCdyb3VuZC10cmlwcyBhbGwgaGlnaC1sZXZlbCBmaWVsZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNidGNEZXBvc2l0RGVzY3JpcHRvcihkZXNjcmlwdG9yKTtcbiAgICAgIGFzc2VydC5vayhwYXJzZWQpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQuc2lnbmVyc0FnZ3JlZ2F0ZUtleSwgU0lHTkVSU19BR0dSRUdBVEVfS0VZKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQubWF4RmVlLCA4MF8wMDBuKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocGFyc2VkLnN0YWNrc1JlY2lwaWVudCwgU1RBQ0tTX1JFQ0lQSUVOVCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLmxvY2tUaW1lLCAxNDQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgcmVjbGFpbSBrZXlzIGFzIDMyLWJ5dGUgYnVmZmVycyBpbiB0aGUgZGVzY3JpcHRvciBvcmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgICAgYXNzZXJ0Lm9rKHBhcnNlZCk7XG4gICAgICBhc3NlcnQub2socGFyc2VkLnJlY2xhaW1LZXlzKTtcbiAgICAgIC8vIG11bHRpX2Egc29ydHMga2V5cyBieSBoZXg7IHZlcmlmeSB0aGUgcGFyc2VyIHJldHVybnMgd2hhdGV2ZXIgb3JkZXJcbiAgICAgIC8vIHRoZSBkZXNjcmlwdG9yIGxpYnJhcnkgcHJvZHVjZWQgcmF0aGVyIHRoYW4gdGhlIG9yaWdpbmFsIGlucHV0IG9yZGVyLlxuICAgICAgY29uc3Qgc29ydGVkSW5wdXQgPSBbLi4ucmVjbGFpbUtleUhleF0uc29ydCgpLm1hcCgoaykgPT4gQnVmZmVyLmZyb20oaywgJ2hleCcpKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocGFyc2VkLnJlY2xhaW1LZXlzLCBzb3J0ZWRJbnB1dCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZXhwb3NlcyByYXcgaGV4IHJlY2xhaW1LZXlTdHJpbmdzIGZvciBkZWZpbml0ZSBpbnB1dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNidGNEZXBvc2l0RGVzY3JpcHRvcihkZXNjcmlwdG9yKTtcbiAgICAgIGFzc2VydC5vayhwYXJzZWQpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQucmVjbGFpbUtleVN0cmluZ3MsIFsuLi5yZWNsYWltS2V5SGV4XS5zb3J0KCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbWluaXNjcmlwdCBBU1Qgbm9kZXMgZm9yIGJvdGggbGVhdmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTYnRjRGVwb3NpdERlc2NyaXB0b3IoZGVzY3JpcHRvcik7XG4gICAgICBhc3NlcnQub2socGFyc2VkKTtcbiAgICAgIGNvbnN0IHBheWxvYWRIZXggPSBlbmNvZGVEZXBvc2l0UGF5bG9hZChwYXJhbXMubWF4RmVlLCBwYXJhbXMuc3RhY2tzUmVjaXBpZW50KS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBhcnNlZC5kZXBvc2l0TWluaXNjcmlwdE5vZGUsIHtcbiAgICAgICAgYW5kX3Y6IFt7IHBheWxvYWRfZHJvcDogcGF5bG9hZEhleCB9LCB7IHBrOiBTSUdORVJTX0FHR1JFR0FURV9LRVkudG9TdHJpbmcoJ2hleCcpIH1dLFxuICAgICAgfSBhcyB1bmtub3duIGFzIGFzdC5NaW5pc2NyaXB0Tm9kZSk7XG4gICAgICAvLyByOm9sZGVyICsgbXVsdGlfYSBtdXN0IGJlIHByZXNlbnQgYW5kIGNvcnJlY3RseSBvcmRlcmVkIGluIHRoZSBBU1QuXG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHBhcnNlZC5yZWNsYWltTWluaXNjcmlwdE5vZGUsIHtcbiAgICAgICAgYW5kX3Y6IFt7ICdyOm9sZGVyJzogMTQ0IH0sIHsgbXVsdGlfYTogWzIsIC4uLlsuLi5yZWNsYWltS2V5SGV4XS5zb3J0KCldIH1dLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkZXJpdmFibGUgZGVzY3JpcHRvciAoeHB1Yi8qIHJlY2xhaW0ga2V5cyknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYnVpbGRQYXJhbXMoKTtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKGNyZWF0ZVNidGNEZXBvc2l0RGVzY3JpcHRvcihwYXJhbXMpLCAnZGVyaXZhYmxlJyk7XG5cbiAgICBpdCgncm91bmQtdHJpcHMgbG9ja1RpbWUsIG1heEZlZSwgcmVjaXBpZW50LCBhbmQgc2lnbmVycyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNidGNEZXBvc2l0RGVzY3JpcHRvcihkZXNjcmlwdG9yKTtcbiAgICAgIGFzc2VydC5vayhwYXJzZWQpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQuc2lnbmVyc0FnZ3JlZ2F0ZUtleSwgU0lHTkVSU19BR0dSRUdBVEVfS0VZKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQubWF4RmVlLCBCaWdJbnQoREVGQVVMVF9NQVhfU0lHTkVSX0ZFRSkpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChwYXJzZWQuc3RhY2tzUmVjaXBpZW50LCBTVEFDS1NfUkVDSVBJRU5UKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQubG9ja1RpbWUsIERFRkFVTFRfUkVDTEFJTV9MT0NLX1RJTUUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgcmVjbGFpbUtleXM9dW5kZWZpbmVkIGZvciBkZXJpdmFibGUgaW5wdXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gRGVyaXZhYmxlIGRlc2NyaXB0b3JzIHJlbmRlciBtdWx0aV9hIGVudHJpZXMgYXMgYHhwdWIuLi4vKmAsIG5vdCBhc1xuICAgICAgLy8gMzItYnl0ZSBoZXgg4oCUIHRoZXkgY2FuJ3QgYmUgcmVkdWNlZCB0byBieXRlcyB3aXRob3V0IHBpY2tpbmcgYW4gaW5kZXguXG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVNidGNEZXBvc2l0RGVzY3JpcHRvcihkZXNjcmlwdG9yKTtcbiAgICAgIGFzc2VydC5vayhwYXJzZWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZC5yZWNsYWltS2V5cywgdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdleHBvc2VzIHRoZSByYXcgeHB1Yi4uLi8qIHJlY2xhaW1LZXlTdHJpbmdzIGZvciBkZXJpdmFibGUgaW5wdXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTYnRjRGVwb3NpdERlc2NyaXB0b3IoZGVzY3JpcHRvcik7XG4gICAgICBhc3NlcnQub2socGFyc2VkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQucmVjbGFpbUtleVN0cmluZ3MubGVuZ3RoLCAzKTtcbiAgICAgIGZvciAoY29uc3QgayBvZiBwYXJzZWQucmVjbGFpbUtleVN0cmluZ3MpIHtcbiAgICAgICAgYXNzZXJ0Lm1hdGNoKGssIC9eeHB1YlsxLTlBLUhKLU5QLVphLWttLXpdK1xcL1xcKiQvKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdyZXNvbHZlcyB0byBjb25jcmV0ZSByZWNsYWltIGtleXMgYWZ0ZXIgYXREZXJpdmF0aW9uSW5kZXgoMCkgYW5kIGNvbXBpbGVzIHRvIGEgdGFwIE1pbmlzY3JpcHQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZGVzY3JpcHRvci5oYXNXaWxkY2FyZCgpLCB0cnVlKTtcbiAgICAgIGNvbnN0IGRlcml2ZWRaZXJvID0gZGVzY3JpcHRvci5hdERlcml2YXRpb25JbmRleCgwKTtcbiAgICAgIGNvbnN0IGRlcml2ZWRPbmUgPSBkZXNjcmlwdG9yLmF0RGVyaXZhdGlvbkluZGV4KDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGRlcml2ZWRaZXJvLmhhc1dpbGRjYXJkKCksIGZhbHNlKTtcblxuICAgICAgY29uc3QgcGFyc2VkWmVybyA9IHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKGRlcml2ZWRaZXJvKTtcbiAgICAgIGFzc2VydC5vayhwYXJzZWRaZXJvKTtcbiAgICAgIGFzc2VydC5vayhwYXJzZWRaZXJvLnJlY2xhaW1LZXlzKTtcbiAgICAgIGZvciAoY29uc3QgayBvZiBwYXJzZWRaZXJvLnJlY2xhaW1LZXlzKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChrLmxlbmd0aCwgMzIsIGBleHBlY3RlZCAzMi1ieXRlIHgtb25seSBrZXksIGdvdCAke2subGVuZ3RofWApO1xuICAgICAgfVxuICAgICAgLy8gRGVwb3NpdC1sZWFmIGZpZWxkcyBhcmUgZGVyaXZhdGlvbi1pbmRlcGVuZGVudC5cbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocGFyc2VkWmVyby5zaWduZXJzQWdncmVnYXRlS2V5LCBTSUdORVJTX0FHR1JFR0FURV9LRVkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlZFplcm8ubG9ja1RpbWUsIERFRkFVTFRfUkVDTEFJTV9MT0NLX1RJTUUpO1xuXG4gICAgICBjb25zdCBwYXJzZWRPbmUgPSBwYXJzZVNidGNEZXBvc2l0RGVzY3JpcHRvcihkZXJpdmVkT25lKTtcbiAgICAgIGFzc2VydC5vayhwYXJzZWRPbmU/LnJlY2xhaW1LZXlzKTtcbiAgICAgIGFzc2VydC5ub3REZWVwU3RyaWN0RXF1YWwocGFyc2VkWmVyby5yZWNsYWltS2V5cywgcGFyc2VkT25lLnJlY2xhaW1LZXlzKTtcblxuICAgICAgLy8gVGhlIHJld3JpdHRlbiByZWNsYWltIGxlYWYgY2FycmllcyBjb25jcmV0ZSBoZXggaW4gbXVsdGlfYSwgc28gdGhlXG4gICAgICAvLyBmb3JtYXR0ZWQgc3RyaW5nIGNvbXBpbGVzIGFzIGEgdGFwLWNvbnRleHQgTWluaXNjcmlwdC4gYGZyb21TdHJpbmdFeHRgXG4gICAgICAvLyBpcyByZXF1aXJlZCBiZWNhdXNlIHRoZSBsZWFmIGNvbnRhaW5zIHRoZSBgcjpvbGRlcmAgKGRyb3ApIHdyYXBwZXIuXG4gICAgICBjb25zdCByZWNsYWltTXMgPSBNaW5pc2NyaXB0LmZyb21TdHJpbmdFeHQoYXN0LmZvcm1hdE5vZGUocGFyc2VkWmVyby5yZWNsYWltTWluaXNjcmlwdE5vZGUpLCAndGFwJywge30pO1xuICAgICAgYXNzZXJ0Lm9rKHJlY2xhaW1Ncyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWplY3Rpb24gcGF0aHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGFyYW1zID0gYnVpbGRQYXJhbXMoKTtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gRGVzY3JpcHRvci5mcm9tU3RyaW5nKGNyZWF0ZVNidGNEZXBvc2l0RGVzY3JpcHRvcihwYXJhbXMpLCAnZGVyaXZhYmxlJyk7XG5cbiAgICBpdCgncmV0dXJucyBudWxsIGZvciBhIG5vbi1zQlRDIGRlc2NyaXB0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3cGtoRGVzY3JpcHRvciA9IERlc2NyaXB0b3IuZnJvbVN0cmluZyhgd3BraCgke2dldEJpcDMyVHJpcGxlKClbMF0ubmV1dGVyZWQoKS50b0Jhc2U1OCgpfS8qKWAsICdkZXJpdmFibGUnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZVNidGNEZXBvc2l0RGVzY3JpcHRvcih3cGtoRGVzY3JpcHRvciksIG51bGwpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgbnVsbCBmb3IgYSB0cigpIHRoYXQgaGFzIGEgZGlmZmVyZW50IGludGVybmFsIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFN3YXAgVU5TUEVOREFCTEUgZm9yIGFuIGFyYml0cmFyeSAzMi1ieXRlIGtleSDigJQgcGF0dGVybiBtYXRjaCBtdXN0XG4gICAgICAvLyByZXF1aXJlIHRoZSBjYW5vbmljYWwgdW5zcGVuZGFibGUgcG9pbnQsIG5vdCBqdXN0IGFueSB0cigpLlxuICAgICAgY29uc3QgdGFtcGVyZWQgPSBjcmVhdGVTYnRjRGVwb3NpdERlc2NyaXB0b3IoYnVpbGRQYXJhbXMoKSkucmVwbGFjZShVTlNQRU5EQUJMRV9JTlRFUk5BTF9LRVksICdhJy5yZXBlYXQoNjQpKTtcbiAgICAgIGNvbnN0IG5vZGUgPSBhc3QuZnJvbURlc2NyaXB0b3IoRGVzY3JpcHRvci5mcm9tU3RyaW5nKHRhbXBlcmVkLCAnZGVyaXZhYmxlJykpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKG5vZGUpLCBudWxsKTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIGEgcHJlLWV4dHJhY3RlZCBhc3QuRGVzY3JpcHRvck5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBub2RlID0gYXN0LmZyb21EZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VTYnRjRGVwb3NpdERlc2NyaXB0b3Iobm9kZSk7XG4gICAgICBhc3NlcnQub2socGFyc2VkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwYXJzZWQubG9ja1RpbWUsIERFRkFVTFRfUkVDTEFJTV9MT0NLX1RJTUUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncGFyYW1ldGVyIHJvdW5kLXRyaXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2V4dHJhY3RzIHRoZSBzYW1lIG1heEZlZSBhbmQgcmVjaXBpZW50IHRoYXQgZW5jb2RlRGVwb3NpdFBheWxvYWQgcHJvZHVjZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZWNpcGllbnQgPSBCdWZmZXIuYWxsb2MoU1RBQ0tTX1JFQ0lQSUVOVF9CWVRFX0xFTkdUSCwgMHgxMSk7XG4gICAgICBjb25zdCBwYXJhbXMgPSBidWlsZFBhcmFtcyh7IG1heEZlZTogMTIzNDVuLCBzdGFja3NSZWNpcGllbnQ6IHJlY2lwaWVudCB9KTtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBEZXNjcmlwdG9yLmZyb21TdHJpbmcoY3JlYXRlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKHBhcmFtcyksICdkZXJpdmFibGUnKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgICAgYXNzZXJ0Lm9rKHBhcnNlZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLm1heEZlZSwgMTIzNDVuKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocGFyc2VkLnN0YWNrc1JlY2lwaWVudCwgcmVjaXBpZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdhY2NlcHRzIHRoZSBmdWxsIHVuc2lnbmVkIDY0LWJpdCBtYXhGZWUgcmFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtYXggPSAweGZmZmZmZmZmZmZmZmZmZmZuO1xuICAgICAgY29uc3QgcGFyYW1zID0gYnVpbGRQYXJhbXMoeyBtYXhGZWU6IG1heCB9KTtcbiAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBEZXNjcmlwdG9yLmZyb21TdHJpbmcoY3JlYXRlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKHBhcmFtcyksICdkZXJpdmFibGUnKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU2J0Y0RlcG9zaXREZXNjcmlwdG9yKGRlc2NyaXB0b3IpO1xuICAgICAgYXNzZXJ0Lm9rKHBhcnNlZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocGFyc2VkLm1heEZlZSwgbWF4KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|