PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-xtz/dist/test/unit
Просмотр файла: keyPair.js
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const assert_1 = __importDefault(require("assert"));
const should_1 = __importDefault(require("should"));
const src_1 = require("../../src");
describe('Xtz KeyPair', function () {
const defaultSeed = { seed: Buffer.alloc(32) };
describe('should create a KeyPair', function () {
it('from an xpub', () => {
const source = {
pub: 'xpub661MyMwAqRbcFhCvdhTAfpEEDV58oqDvv65YNHC686NNs4KbH8YZQJWVmrfbve7aAVHzxw8bKFxA7MLeDK6BbLfkE3bqkvHLPgaGHHtYGeY',
};
const keyPair = new src_1.XtzLib.KeyPair(source);
const defaultKeys = keyPair.getKeys();
should_1.default.not.exist(defaultKeys.prv);
defaultKeys.pub.should.equal('sppk7csjXKT4wvUNCPMfAgZMNuvSjzW4Y2ZAKZEdvyEPtYagE6pCwkw');
const extendedKeys = keyPair.getExtendedKeys();
should_1.default.not.exist(extendedKeys.xprv);
extendedKeys.xpub.should.equal('xpub661MyMwAqRbcFhCvdhTAfpEEDV58oqDvv65YNHC686NNs4KbH8YZQJWVmrfbve7aAVHzxw8bKFxA7MLeDK6BbLfkE3bqkvHLPgaGHHtYGeY');
});
it('from an xprv', () => {
const source = {
prv: 'xprv9s21ZrQH143K3D8TXfvAJgHVfTEeQNW5Ys9wZtnUZkqPzFzSjbEJrWC1vZ4GnXCvR7rQL2UFX3RSuYeU9MrERm1XBvACow7c36vnz5iYyj2',
};
const keyPair = new src_1.XtzLib.KeyPair(source);
const defaultKeys = keyPair.getKeys();
defaultKeys.prv.should.equal('spsk2R6ek35CtfJMt2XHPWgFcf1wUGLK2fKbU3f4hWZNABo1YrrqP7');
defaultKeys.pub.should.equal('sppk7csjXKT4wvUNCPMfAgZMNuvSjzW4Y2ZAKZEdvyEPtYagE6pCwkw');
const extendedKeys = keyPair.getExtendedKeys();
extendedKeys.xprv.should.equal('xprv9s21ZrQH143K3D8TXfvAJgHVfTEeQNW5Ys9wZtnUZkqPzFzSjbEJrWC1vZ4GnXCvR7rQL2UFX3RSuYeU9MrERm1XBvACow7c36vnz5iYyj2');
extendedKeys.xpub.should.equal('xpub661MyMwAqRbcFhCvdhTAfpEEDV58oqDvv65YNHC686NNs4KbH8YZQJWVmrfbve7aAVHzxw8bKFxA7MLeDK6BbLfkE3bqkvHLPgaGHHtYGeY');
});
it('from an uncompressed public key', () => {
const source = {
pub: '04D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A827503E948A2FDBF74A981D4E0054F10EDA7042C2D469F44473D3C7791E0E326E355',
};
const keyPair = new src_1.XtzLib.KeyPair(source);
const defaultKeys = keyPair.getKeys();
should_1.default.not.exist(defaultKeys.prv);
defaultKeys.pub.should.equal('sppk7csjXKT4wvUNCPMfAgZMNuvSjzW4Y2ZAKZEdvyEPtYagE6pCwkw');
assert_1.default.throws(() => keyPair.getExtendedKeys());
});
it('from a compressed public key', () => {
const source = {
pub: '03D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A8275',
};
const keyPair = new src_1.XtzLib.KeyPair(source);
const defaultKeys = keyPair.getKeys();
should_1.default.not.exist(defaultKeys.prv);
defaultKeys.pub.should.equal('sppk7csjXKT4wvUNCPMfAgZMNuvSjzW4Y2ZAKZEdvyEPtYagE6pCwkw');
assert_1.default.throws(() => keyPair.getExtendedKeys());
});
it('from a Tezos public key', () => {
const source = {
pub: 'sppk7csjXKT4wvUNCPMfAgZMNuvSjzW4Y2ZAKZEdvyEPtYagE6pCwkw',
};
const keyPair = new src_1.XtzLib.KeyPair(source);
const defaultKeys = keyPair.getKeys();
should_1.default.not.exist(defaultKeys.prv);
defaultKeys.pub.should.equal('sppk7csjXKT4wvUNCPMfAgZMNuvSjzW4Y2ZAKZEdvyEPtYagE6pCwkw');
assert_1.default.throws(() => keyPair.getExtendedKeys());
});
it('from a raw private key', () => {
const source = {
prv: '82A34E3867EA7EA4E67E27865D500AE84E98D07AB1BAB06526F0A5A5FDCC3EBA',
};
const keyPair = new src_1.XtzLib.KeyPair(source);
const defaultKeys = keyPair.getKeys();
defaultKeys.prv.should.equal('spsk2R6ek35CtfJMt2XHPWgFcf1wUGLK2fKbU3f4hWZNABo1YrrqP7');
defaultKeys.pub.should.equal('sppk7csjXKT4wvUNCPMfAgZMNuvSjzW4Y2ZAKZEdvyEPtYagE6pCwkw');
assert_1.default.throws(() => keyPair.getExtendedKeys());
});
it('from a Tezos private key', () => {
const source = {
prv: 'spsk2cbiVsAvpGKmau9XcMscL3NRwjkyT575N5AyAofcoj41x6g6TL',
};
const keyPair = new src_1.XtzLib.KeyPair(source);
const defaultKeys = keyPair.getKeys();
defaultKeys.prv.should.equal('spsk2cbiVsAvpGKmau9XcMscL3NRwjkyT575N5AyAofcoj41x6g6TL');
defaultKeys.pub.should.equal('sppk7ZWB8diU2TWehxdkWCV2DTFvn1hPz4qLjiD3nJQozKnoSEnSC8b');
keyPair.getAddress().should.equal('tz2P2E8EgHaLA6A17rH3pE9T2tx6DA7D4siW');
assert_1.default.throws(() => keyPair.getExtendedKeys());
});
});
describe('should fail to create a KeyPair', function () {
it('from an invalid seed', () => {
const seed = { seed: Buffer.alloc(8) }; // Seed should be at least 128 bits (16 bytes, not 8)
assert_1.default.throws(() => new src_1.XtzLib.KeyPair(seed));
});
it('from an invalid public key', () => {
const source = {
pub: '01D63D',
};
assert_1.default.throws(() => new src_1.XtzLib.KeyPair(source));
});
it('from an invalid private key', () => {
const source = {
prv: '82A34E',
};
assert_1.default.throws(() => new src_1.XtzLib.KeyPair(source));
});
});
describe('getAddress', function () {
it('should get an address', () => {
const keyPair = new src_1.XtzLib.KeyPair(defaultSeed);
const address = keyPair.getAddress();
address.should.equal('tz2PtJ9zgEgFVTRqy6GXsst54tH3ksEnYvvS');
});
});
describe('getKeys', function () {
it('should get private and public keys in the protocol default format', () => {
const keyPair = new src_1.XtzLib.KeyPair(defaultSeed);
const { prv, pub } = keyPair.getKeys();
prv.should.equal('spsk2R6ek35CtfJMt2XHPWgFcf1wUGLK2fKbU3f4hWZNABo1YrrqP7');
pub.should.equal('sppk7csjXKT4wvUNCPMfAgZMNuvSjzW4Y2ZAKZEdvyEPtYagE6pCwkw');
});
it('should get private and public keys for a random seed', () => {
const keyPair = new src_1.XtzLib.KeyPair();
const { prv, pub } = keyPair.getKeys();
should_1.default.exist(prv);
should_1.default.exist(pub);
});
});
describe('getExtendedKeys', function () {
it('should get the keys in extended format', () => {
const keyPair = new src_1.XtzLib.KeyPair(defaultSeed);
const { xprv, xpub } = keyPair.getExtendedKeys();
xprv.should.equal('xprv9s21ZrQH143K3D8TXfvAJgHVfTEeQNW5Ys9wZtnUZkqPzFzSjbEJrWC1vZ4GnXCvR7rQL2UFX3RSuYeU9MrERm1XBvACow7c36vnz5iYyj2');
xpub.should.equal('xpub661MyMwAqRbcFhCvdhTAfpEEDV58oqDvv65YNHC686NNs4KbH8YZQJWVmrfbve7aAVHzxw8bKFxA7MLeDK6BbLfkE3bqkvHLPgaGHHtYGeY');
});
it('should get the keys in extended format for a random seed', () => {
const keyPair = new src_1.XtzLib.KeyPair();
const { xprv, xpub } = keyPair.getExtendedKeys();
should_1.default.exist(xprv);
should_1.default.exist(xpub);
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG9EQUE0QjtBQUU1QixtQ0FBbUM7QUFFbkMsUUFBUSxDQUFDLGFBQWEsRUFBRTtJQUN0QixNQUFNLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFFL0MsUUFBUSxDQUFDLHlCQUF5QixFQUFFO1FBQ2xDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFO1lBQ3RCLE1BQU0sTUFBTSxHQUFHO2dCQUNiLEdBQUcsRUFBRSxpSEFBaUg7YUFDdkgsQ0FBQztZQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksWUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzQyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdEMsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztZQUV4RixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDL0MsZ0JBQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQzVCLGlIQUFpSCxDQUNsSCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRTtZQUN0QixNQUFNLE1BQU0sR0FBRztnQkFDYixHQUFHLEVBQUUsaUhBQWlIO2FBQ3ZILENBQUM7WUFDRixN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RyxJQUFJLFlBQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNqRCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IFh0ekxpYiB9IGZyb20gJy4uLy4uL3NyYyc7XG5cbmRlc2NyaWJlKCdYdHogS2V5UGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgZGVmYXVsdFNlZWQgPSB7IHNlZWQ6IEJ1ZmZlci5hbGxvYygzMikgfTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGNyZWF0ZSBhIEtleVBhaXInLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2Zyb20gYW4geHB1YicsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHtcbiAgICAgICAgcHViOiAneHB1YjY2MU15TXdBcVJiY0ZoQ3ZkaFRBZnBFRURWNThvcUR2djY1WU5IQzY4Nk5OczRLYkg4WVpRSldWbXJmYnZlN2FBVkh6eHc4YktGeEE3TUxlREs2QmJMZmtFM2Jxa3ZITFBnYUdISHRZR2VZJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IFh0ekxpYi5LZXlQYWlyKHNvdXJjZSk7XG4gICAgICBjb25zdCBkZWZhdWx0S2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChkZWZhdWx0S2V5cy5wcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbCgnc3Bwazdjc2pYS1Q0d3ZVTkNQTWZBZ1pNTnV2U2p6VzRZMlpBS1pFZHZ5RVB0WWFnRTZwQ3drdycpO1xuXG4gICAgICBjb25zdCBleHRlbmRlZEtleXMgPSBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChleHRlbmRlZEtleXMueHBydik7XG4gICAgICBleHRlbmRlZEtleXMueHB1Yi5zaG91bGQuZXF1YWwoXG4gICAgICAgICd4cHViNjYxTXlNd0FxUmJjRmhDdmRoVEFmcEVFRFY1OG9xRHZ2NjVZTkhDNjg2Tk5zNEtiSDhZWlFKV1ZtcmZidmU3YUFWSHp4dzhiS0Z4QTdNTGVESzZCYkxma0UzYnFrdkhMUGdhR0hIdFlHZVknXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4geHBydicsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHtcbiAgICAgICAgcHJ2OiAneHBydjlzMjFaclFIMTQzSzNEOFRYZnZBSmdIVmZURWVRTlc1WXM5d1p0blVaa3FQekZ6U2piRUpyV0Mxdlo0R25YQ3ZSN3JRTDJVRlgzUlN1WWVVOU1yRVJtMVhCdkFDb3c3YzM2dm56NWlZeWoyJyxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IFh0ekxpYi5LZXlQYWlyKHNvdXJjZSk7XG4gICAgICBjb25zdCBkZWZhdWx0S2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgZGVmYXVsdEtleXMucHJ2IS5zaG91bGQuZXF1YWwoJ3Nwc2syUjZlazM1Q3RmSk10MlhIUFdnRmNmMXdVR0xLMmZLYlUzZjRoV1pOQUJvMVlycnFQNycpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbCgnc3Bwazdjc2pYS1Q0d3ZVTkNQTWZBZ1pNTnV2U2p6VzRZMlpBS1pFZHZ5RVB0WWFnRTZwQ3drdycpO1xuXG4gICAgICBjb25zdCBleHRlbmRlZEtleXMgPSBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpO1xuICAgICAgZXh0ZW5kZWRLZXlzLnhwcnYhLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3hwcnY5czIxWnJRSDE0M0szRDhUWGZ2QUpnSFZmVEVlUU5XNVlzOXdadG5VWmtxUHpGelNqYkVKcldDMXZaNEduWEN2UjdyUUwyVUZYM1JTdVllVTlNckVSbTFYQnZBQ293N2MzNnZuejVpWXlqMidcbiAgICAgICk7XG4gICAgICBleHRlbmRlZEtleXMueHB1Yi5zaG91bGQuZXF1YWwoXG4gICAgICAgICd4cHViNjYxTXlNd0FxUmJjRmhDdmRoVEFmcEVFRFY1OG9xRHZ2NjVZTkhDNjg2Tk5zNEtiSDhZWlFKV1ZtcmZidmU3YUFWSHp4dzhiS0Z4QTdNTGVESzZCYkxma0UzYnFrdkhMUGdhR0hIdFlHZVknXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4gdW5jb21wcmVzc2VkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSB7XG4gICAgICAgIHB1YjogJzA0RDYzRDlGRDlGRDc3MkE5ODlDNUI5MEVEQjM3NzE2NDA2MzU2RTk4MjczRTVGOThGRTA3NjUyMjQ3QTNBODI3NTAzRTk0OEEyRkRCRjc0QTk4MUQ0RTAwNTRGMTBFREE3MDQyQzJENDY5RjQ0NDczRDNDNzc5MUUwRTMyNkUzNTUnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgWHR6TGliLktleVBhaXIoc291cmNlKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRLZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgICBzaG91bGQubm90LmV4aXN0KGRlZmF1bHRLZXlzLnBydik7XG4gICAgICBkZWZhdWx0S2V5cy5wdWIuc2hvdWxkLmVxdWFsKCdzcHBrN2NzalhLVDR3dlVOQ1BNZkFnWk1OdXZTanpXNFkyWkFLWkVkdnlFUHRZYWdFNnBDd2t3Jyk7XG5cbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhIGNvbXByZXNzZWQgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHtcbiAgICAgICAgcHViOiAnMDNENjNEOUZEOUZENzcyQTk4OUM1QjkwRURCMzc3MTY0MDYzNTZFOTgyNzNFNUY5OEZFMDc2NTIyNDdBM0E4Mjc1JyxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IFh0ekxpYi5LZXlQYWlyKHNvdXJjZSk7XG4gICAgICBjb25zdCBkZWZhdWx0S2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChkZWZhdWx0S2V5cy5wcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbCgnc3Bwazdjc2pYS1Q0d3ZVTkNQTWZBZ1pNTnV2U2p6VzRZMlpBS1pFZHZ5RVB0WWFnRTZwQ3drdycpO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYSBUZXpvcyBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0ge1xuICAgICAgICBwdWI6ICdzcHBrN2NzalhLVDR3dlVOQ1BNZkFnWk1OdXZTanpXNFkyWkFLWkVkdnlFUHRZYWdFNnBDd2t3JyxcbiAgICAgIH07XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IFh0ekxpYi5LZXlQYWlyKHNvdXJjZSk7XG4gICAgICBjb25zdCBkZWZhdWx0S2V5cyA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChkZWZhdWx0S2V5cy5wcnYpO1xuICAgICAgZGVmYXVsdEtleXMucHViLnNob3VsZC5lcXVhbCgnc3Bwazdjc2pYS1Q0d3ZVTkNQTWZBZ1pNTnV2U2p6VzRZMlpBS1pFZHZ5RVB0WWFnRTZwQ3drdycpO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYSByYXcgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSB7XG4gICAgICAgIHBydjogJzgyQTM0RTM4NjdFQTdFQTRFNjdFMjc4NjVENTAwQUU4NEU5OEQwN0FCMUJBQjA2NTI2RjBBNUE1RkRDQzNFQkEnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgWHR6TGliLktleVBhaXIoc291cmNlKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRLZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgICBkZWZhdWx0S2V5cy5wcnYhLnNob3VsZC5lcXVhbCgnc3BzazJSNmVrMzVDdGZKTXQyWEhQV2dGY2Yxd1VHTEsyZktiVTNmNGhXWk5BQm8xWXJycVA3Jyk7XG4gICAgICBkZWZhdWx0S2V5cy5wdWIuc2hvdWxkLmVxdWFsKCdzcHBrN2NzalhLVDR3dlVOQ1BNZkFnWk1OdXZTanpXNFkyWkFLWkVkdnlFUHRZYWdFNnBDd2t3Jyk7XG5cbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhIFRlem9zIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0ge1xuICAgICAgICBwcnY6ICdzcHNrMmNiaVZzQXZwR0ttYXU5WGNNc2NMM05Sd2preVQ1NzVONUF5QW9mY29qNDF4Nmc2VEwnLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgWHR6TGliLktleVBhaXIoc291cmNlKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRLZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgICBkZWZhdWx0S2V5cy5wcnYhLnNob3VsZC5lcXVhbCgnc3BzazJjYmlWc0F2cEdLbWF1OVhjTXNjTDNOUndqa3lUNTc1TjVBeUFvZmNvajQxeDZnNlRMJyk7XG4gICAgICBkZWZhdWx0S2V5cy5wdWIuc2hvdWxkLmVxdWFsKCdzcHBrN1pXQjhkaVUyVFdlaHhka1dDVjJEVEZ2bjFoUHo0cUxqaUQzbkpRb3pLbm9TRW5TQzhiJyk7XG4gICAgICBrZXlQYWlyLmdldEFkZHJlc3MoKS5zaG91bGQuZXF1YWwoJ3R6MlAyRThFZ0hhTEE2QTE3ckgzcEU5VDJ0eDZEQTdENHNpVycpO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXIuZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2hvdWxkIGZhaWwgdG8gY3JlYXRlIGEgS2V5UGFpcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZnJvbSBhbiBpbnZhbGlkIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVkID0geyBzZWVkOiBCdWZmZXIuYWxsb2MoOCkgfTsgLy8gIFNlZWQgc2hvdWxkIGJlIGF0IGxlYXN0IDEyOCBiaXRzICgxNiBieXRlcywgbm90IDgpXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBYdHpMaWIuS2V5UGFpcihzZWVkKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhbiBpbnZhbGlkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2UgPSB7XG4gICAgICAgIHB1YjogJzAxRDYzRCcsXG4gICAgICB9O1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBuZXcgWHR6TGliLktleVBhaXIoc291cmNlKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhbiBpbnZhbGlkIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0ge1xuICAgICAgICBwcnY6ICc4MkEzNEUnLFxuICAgICAgfTtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4gbmV3IFh0ekxpYi5LZXlQYWlyKHNvdXJjZSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0QWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdldCBhbiBhZGRyZXNzJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBYdHpMaWIuS2V5UGFpcihkZWZhdWx0U2VlZCk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga2V5UGFpci5nZXRBZGRyZXNzKCk7XG4gICAgICBhZGRyZXNzLnNob3VsZC5lcXVhbCgndHoyUHRKOXpnRWdGVlRScXk2R1hzc3Q1NHRIM2tzRW5ZdnZTJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRLZXlzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZ2V0IHByaXZhdGUgYW5kIHB1YmxpYyBrZXlzIGluIHRoZSBwcm90b2NvbCBkZWZhdWx0IGZvcm1hdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgWHR6TGliLktleVBhaXIoZGVmYXVsdFNlZWQpO1xuICAgICAgY29uc3QgeyBwcnYsIHB1YiB9ID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gICAgICBwcnYhLnNob3VsZC5lcXVhbCgnc3BzazJSNmVrMzVDdGZKTXQyWEhQV2dGY2Yxd1VHTEsyZktiVTNmNGhXWk5BQm8xWXJycVA3Jyk7XG4gICAgICBwdWIuc2hvdWxkLmVxdWFsKCdzcHBrN2NzalhLVDR3dlVOQ1BNZkFnWk1OdXZTanpXNFkyWkFLWkVkdnlFUHRZYWdFNnBDd2t3Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBwcml2YXRlIGFuZCBwdWJsaWMga2V5cyBmb3IgYSByYW5kb20gc2VlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgWHR6TGliLktleVBhaXIoKTtcbiAgICAgIGNvbnN0IHsgcHJ2LCBwdWIgfSA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLmV4aXN0KHBydik7XG4gICAgICBzaG91bGQuZXhpc3QocHViKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEV4dGVuZGVkS2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdldCB0aGUga2V5cyBpbiBleHRlbmRlZCBmb3JtYXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IFh0ekxpYi5LZXlQYWlyKGRlZmF1bHRTZWVkKTtcbiAgICAgIGNvbnN0IHsgeHBydiwgeHB1YiB9ID0ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKTtcbiAgICAgIHhwcnYhLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3hwcnY5czIxWnJRSDE0M0szRDhUWGZ2QUpnSFZmVEVlUU5XNVlzOXdadG5VWmtxUHpGelNqYkVKcldDMXZaNEduWEN2UjdyUUwyVUZYM1JTdVllVTlNckVSbTFYQnZBQ293N2MzNnZuejVpWXlqMidcbiAgICAgICk7XG4gICAgICB4cHViLnNob3VsZC5lcXVhbChcbiAgICAgICAgJ3hwdWI2NjFNeU13QXFSYmNGaEN2ZGhUQWZwRUVEVjU4b3FEdnY2NVlOSEM2ODZOTnM0S2JIOFlaUUpXVm1yZmJ2ZTdhQVZIenh3OGJLRnhBN01MZURLNkJiTGZrRTNicWt2SExQZ2FHSEh0WUdlWSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCB0aGUga2V5cyBpbiBleHRlbmRlZCBmb3JtYXQgIGZvciBhIHJhbmRvbSBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBYdHpMaWIuS2V5UGFpcigpO1xuICAgICAgY29uc3QgeyB4cHJ2LCB4cHViIH0gPSBrZXlQYWlyLmdldEV4dGVuZGVkS2V5cygpO1xuICAgICAgc2hvdWxkLmV4aXN0KHhwcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0KHhwdWIpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!