PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-ada/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 should_1 = __importDefault(require("should"));
const src_1 = require("../../src");
const resources_1 = require("../resources/");
const cardano_serialization_lib_nodejs_1 = require("@emurgo/cardano-serialization-lib-nodejs");
const sdk_core_1 = require("@bitgo/sdk-core");
describe('Ada Keypair', () => {
const defaultSeed = { seed: Buffer.alloc(32) };
describe('Keypair creation', () => {
it('initial state', () => {
const keyPair = new src_1.KeyPair();
should_1.default.exists(keyPair.getKeys().prv);
should_1.default.exists(keyPair.getKeys().prv);
});
it('initialization from private key', () => {
let keyPair = new src_1.KeyPair({
prv: resources_1.enterpriseAccounts.account1.secretKey,
});
should_1.default.equal(keyPair.getKeys().prv, (0, sdk_core_1.toHex)(cardano_serialization_lib_nodejs_1.PrivateKey.from_bech32(resources_1.enterpriseAccounts.account1.secretKey).as_bytes()));
should_1.default.equal(keyPair.getKeys().pub, resources_1.enterpriseAccounts.account1.hexPublic);
keyPair = new src_1.KeyPair({
prv: resources_1.enterpriseAccounts.account2.secretKey,
});
should_1.default.equal(keyPair.getKeys().prv, (0, sdk_core_1.toHex)(cardano_serialization_lib_nodejs_1.PrivateKey.from_bech32(resources_1.enterpriseAccounts.account2.secretKey).as_bytes()));
should_1.default.equal(keyPair.getKeys().pub, resources_1.enterpriseAccounts.account2.hexPublic);
});
it('initialization from public key', () => {
let keyPair = new src_1.KeyPair({ pub: resources_1.enterpriseAccounts.account1.publicKey });
should_1.default.equal(keyPair.getKeys().pub, (0, sdk_core_1.toHex)(cardano_serialization_lib_nodejs_1.PublicKey.from_bech32(resources_1.enterpriseAccounts.account1.publicKey).as_bytes()));
keyPair = new src_1.KeyPair({ pub: resources_1.enterpriseAccounts.account2.publicKey });
should_1.default.equal(keyPair.getAddress(sdk_core_1.AddressFormat.testnet), resources_1.enterpriseAccounts.account2.baseAddress);
keyPair = new src_1.KeyPair({ pub: resources_1.enterpriseAccounts.account4.publicKeyHex });
should_1.default.equal(keyPair.getKeys().pub, resources_1.enterpriseAccounts.account4.publicKeyHex);
});
});
describe('KeyPair validation', () => {
it('should fail to create from an invalid seed', () => {
const seed = { seed: Buffer.alloc(8) }; // Seed should be 512 bits (64 bytes)
should_1.default.throws(() => new src_1.KeyPair(seed), 'bad seed size');
});
it('should fail to create from an invalid public key', () => {
const source = {
pub: '01D63D',
};
should_1.default.throws(() => new src_1.KeyPair(source), 'address seems to be malformed');
});
it('should fail to create from an invalid private key', () => {
const source = {
prv: '82A34',
};
should_1.default.throws(() => new src_1.KeyPair(source), 'Invalid base32 characters');
});
});
describe('getAddress', () => {
it('should get an address', () => {
let keyPair = new src_1.KeyPair({ prv: resources_1.enterpriseAccounts.account1.secretKey });
let address = keyPair.getAddress(sdk_core_1.AddressFormat.testnet);
address.should.equal(resources_1.enterpriseAccounts.account1.baseAddress);
keyPair = new src_1.KeyPair({ prv: resources_1.enterpriseAccounts.account3.secretKey });
address = keyPair.getAddress(sdk_core_1.AddressFormat.testnet);
address.should.equal(resources_1.enterpriseAccounts.account3.baseAddress);
keyPair = new src_1.KeyPair({ pub: resources_1.enterpriseAccounts.account4.publicKeyHex });
address = keyPair.getAddress(sdk_core_1.AddressFormat.testnet);
address.should.equal(resources_1.enterpriseAccounts.account4.baseAddress);
});
});
describe('getKeys', () => {
it('should get private and public keys in the protocol default format', () => {
const keyPair = new src_1.KeyPair(defaultSeed);
const { prv, pub } = keyPair.getKeys();
prv.should.equal(prv);
pub.should.equal(pub);
const address = keyPair.getAddress(sdk_core_1.AddressFormat.testnet);
address.should.equal(resources_1.enterpriseAccounts.seedAccount.enterpriseAddress);
});
it('should get private and public keys for a random seed', () => {
const keyPair = new src_1.KeyPair();
const { prv, pub } = keyPair.getKeys();
should_1.default.exist(prv);
should_1.default.exist(pub);
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLG1DQUFvQztBQUNwQyw2Q0FBbUQ7QUFDbkQsK0ZBQWlGO0FBQ2pGLDhDQUF1RDtBQUV2RCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixNQUFNLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFFL0MsUUFBUSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUNoQyxFQUFFLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtZQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sRUFBRSxDQUFDO1lBQzlCLGdCQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUNBQWlDLEVBQUUsR0FBRyxFQUFFO1lBQ3pDLElBQUksT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDO2dCQUN4QixHQUFHLEVBQUUsOEJBQWtCLENBQUMsUUFBUSxDQUFDLFNBQVM7YUFDM0MsQ0FBQyxDQUFDO1lBRUgsZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFDckIsSUFBQSxnQkFBSyxFQUFDLDZDQUFVLENBQUMsV0FBVyxDQUFDLDhCQUFrQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUNoRixDQUFDO1lBRUYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSw4QkFBa0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFM0UsT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDO2dCQUNwQixHQUFHLEVBQUUsOEJBQWtCLENBQUMsUUFBUSxDQUFDLFNBQVM7YUFDM0MsQ0FBQyxDQUFDO1lBRUgsZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFDckIsSUFBQSxnQkFBSyxFQUFDLDZDQUFVLENBQUMsV0FBVyxDQUFDLDhCQUFrQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUNoRixDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSw4QkFBa0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxFQUFFO1lBQ3hDLElBQUksT0FBTyxHQUFHLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLDhCQUFrQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBRTFFLGdCQUFNLENBQUMsS0FBSyxDQUNWLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQ3JCLElBQUEsZ0JBQUssRUFBQyw0Q0FBUyxDQUFDLFdBQVcsQ0FBQyw4QkFBa0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FDL0UsQ0FBQztZQUVGLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSw4QkFBa0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN0RSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLHdCQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsOEJBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRWpHLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSw4QkFBa0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUN6RSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLDhCQUFrQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNoRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1lBQ3BELE1BQU0sSUFBSSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLHNDQUFzQztZQUM5RSxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLGFBQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7WUFDMUQsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsR0FBRyxFQUFFLFFBQVE7YUFDZCxDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsK0JBQStCLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtREFBbUQsRUFBRSxHQUFHLEVBQUU7WUFDM0QsTUFBTSxNQUFNLEdBQUc7Z0JBQ2IsR0FBRyxFQUFFLE9BQU87YUFDYixDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7UUFDMUIsRUFBRSxDQUFDLHVCQUF1QixFQUFFLEdBQUcsRUFBRTtZQUMvQixJQUFJLE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSw4QkFBa0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUMxRSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLHdCQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTlELE9BQU8sR0FBRyxJQUFJLGFBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSw4QkFBa0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUN0RSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyx3QkFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhCQUFrQixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUU5RCxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsOEJBQWtCLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDekUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsd0JBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw4QkFBa0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1FBQ3ZCLEVBQUUsQ0FBQyxtRUFBbUUsRUFBRSxHQUFHLEVBQUU7WUFDM0UsTUFBTSxPQUFPLEdBQUcsSUFBSSxhQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFdkMsR0FBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyx3QkFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDhCQUFrQixDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEdBQUcsRUFBRTtZQUM5RCxNQUFNLE9BQU8sR0FBRyxJQUFJLGFBQU8sRUFBRSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLGdCQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMnO1xuaW1wb3J0IHsgZW50ZXJwcmlzZUFjY291bnRzIH0gZnJvbSAnLi4vcmVzb3VyY2VzLyc7XG5pbXBvcnQgeyBQcml2YXRlS2V5LCBQdWJsaWNLZXkgfSBmcm9tICdAZW11cmdvL2NhcmRhbm8tc2VyaWFsaXphdGlvbi1saWItbm9kZWpzJztcbmltcG9ydCB7IEFkZHJlc3NGb3JtYXQsIHRvSGV4IH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuZGVzY3JpYmUoJ0FkYSBLZXlwYWlyJywgKCkgPT4ge1xuICBjb25zdCBkZWZhdWx0U2VlZCA9IHsgc2VlZDogQnVmZmVyLmFsbG9jKDMyKSB9O1xuXG4gIGRlc2NyaWJlKCdLZXlwYWlyIGNyZWF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdpbml0aWFsIHN0YXRlJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBzaG91bGQuZXhpc3RzKGtleVBhaXIuZ2V0S2V5cygpLnBydik7XG4gICAgICBzaG91bGQuZXhpc3RzKGtleVBhaXIuZ2V0S2V5cygpLnBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnaW5pdGlhbGl6YXRpb24gZnJvbSBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIGxldCBrZXlQYWlyID0gbmV3IEtleVBhaXIoe1xuICAgICAgICBwcnY6IGVudGVycHJpc2VBY2NvdW50cy5hY2NvdW50MS5zZWNyZXRLZXksXG4gICAgICB9KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBrZXlQYWlyLmdldEtleXMoKS5wcnYsXG4gICAgICAgIHRvSGV4KFByaXZhdGVLZXkuZnJvbV9iZWNoMzIoZW50ZXJwcmlzZUFjY291bnRzLmFjY291bnQxLnNlY3JldEtleSkuYXNfYnl0ZXMoKSlcbiAgICAgICk7XG5cbiAgICAgIHNob3VsZC5lcXVhbChrZXlQYWlyLmdldEtleXMoKS5wdWIsIGVudGVycHJpc2VBY2NvdW50cy5hY2NvdW50MS5oZXhQdWJsaWMpO1xuXG4gICAgICBrZXlQYWlyID0gbmV3IEtleVBhaXIoe1xuICAgICAgICBwcnY6IGVudGVycHJpc2VBY2NvdW50cy5hY2NvdW50Mi5zZWNyZXRLZXksXG4gICAgICB9KTtcblxuICAgICAgc2hvdWxkLmVxdWFsKFxuICAgICAgICBrZXlQYWlyLmdldEtleXMoKS5wcnYsXG4gICAgICAgIHRvSGV4KFByaXZhdGVLZXkuZnJvbV9iZWNoMzIoZW50ZXJwcmlzZUFjY291bnRzLmFjY291bnQyLnNlY3JldEtleSkuYXNfYnl0ZXMoKSlcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpci5nZXRLZXlzKCkucHViLCBlbnRlcnByaXNlQWNjb3VudHMuYWNjb3VudDIuaGV4UHVibGljKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbml0aWFsaXphdGlvbiBmcm9tIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBsZXQga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiBlbnRlcnByaXNlQWNjb3VudHMuYWNjb3VudDEucHVibGljS2V5IH0pO1xuXG4gICAgICBzaG91bGQuZXF1YWwoXG4gICAgICAgIGtleVBhaXIuZ2V0S2V5cygpLnB1YixcbiAgICAgICAgdG9IZXgoUHVibGljS2V5LmZyb21fYmVjaDMyKGVudGVycHJpc2VBY2NvdW50cy5hY2NvdW50MS5wdWJsaWNLZXkpLmFzX2J5dGVzKCkpXG4gICAgICApO1xuXG4gICAgICBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IGVudGVycHJpc2VBY2NvdW50cy5hY2NvdW50Mi5wdWJsaWNLZXkgfSk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpci5nZXRBZGRyZXNzKEFkZHJlc3NGb3JtYXQudGVzdG5ldCksIGVudGVycHJpc2VBY2NvdW50cy5hY2NvdW50Mi5iYXNlQWRkcmVzcyk7XG5cbiAgICAgIGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHB1YjogZW50ZXJwcmlzZUFjY291bnRzLmFjY291bnQ0LnB1YmxpY0tleUhleCB9KTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlQYWlyLmdldEtleXMoKS5wdWIsIGVudGVycHJpc2VBY2NvdW50cy5hY2NvdW50NC5wdWJsaWNLZXlIZXgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnS2V5UGFpciB2YWxpZGF0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZmFpbCB0byBjcmVhdGUgZnJvbSBhbiBpbnZhbGlkIHNlZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVkID0geyBzZWVkOiBCdWZmZXIuYWxsb2MoOCkgfTsgLy8gIFNlZWQgc2hvdWxkIGJlIDUxMiBiaXRzICg2NCBieXRlcylcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gbmV3IEtleVBhaXIoc2VlZCksICdiYWQgc2VlZCBzaXplJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gY3JlYXRlIGZyb20gYW4gaW52YWxpZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlID0ge1xuICAgICAgICBwdWI6ICcwMUQ2M0QnLFxuICAgICAgfTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gbmV3IEtleVBhaXIoc291cmNlKSwgJ2FkZHJlc3Mgc2VlbXMgdG8gYmUgbWFsZm9ybWVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gY3JlYXRlIGZyb20gYW4gaW52YWxpZCBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHtcbiAgICAgICAgcHJ2OiAnODJBMzQnLFxuICAgICAgfTtcbiAgICAgIHNob3VsZC50aHJvd3MoKCkgPT4gbmV3IEtleVBhaXIoc291cmNlKSwgJ0ludmFsaWQgYmFzZTMyIGNoYXJhY3RlcnMnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEFkZHJlc3MnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZXQgYW4gYWRkcmVzcycsICgpID0+IHtcbiAgICAgIGxldCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IGVudGVycHJpc2VBY2NvdW50cy5hY2NvdW50MS5zZWNyZXRLZXkgfSk7XG4gICAgICBsZXQgYWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcyhBZGRyZXNzRm9ybWF0LnRlc3RuZXQpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuZXF1YWwoZW50ZXJwcmlzZUFjY291bnRzLmFjY291bnQxLmJhc2VBZGRyZXNzKTtcblxuICAgICAga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBlbnRlcnByaXNlQWNjb3VudHMuYWNjb3VudDMuc2VjcmV0S2V5IH0pO1xuICAgICAgYWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcyhBZGRyZXNzRm9ybWF0LnRlc3RuZXQpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuZXF1YWwoZW50ZXJwcmlzZUFjY291bnRzLmFjY291bnQzLmJhc2VBZGRyZXNzKTtcblxuICAgICAga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiBlbnRlcnByaXNlQWNjb3VudHMuYWNjb3VudDQucHVibGljS2V5SGV4IH0pO1xuICAgICAgYWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcyhBZGRyZXNzRm9ybWF0LnRlc3RuZXQpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuZXF1YWwoZW50ZXJwcmlzZUFjY291bnRzLmFjY291bnQ0LmJhc2VBZGRyZXNzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEtleXMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZXQgcHJpdmF0ZSBhbmQgcHVibGljIGtleXMgaW4gdGhlIHByb3RvY29sIGRlZmF1bHQgZm9ybWF0JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKGRlZmF1bHRTZWVkKTtcbiAgICAgIGNvbnN0IHsgcHJ2LCBwdWIgfSA9IGtleVBhaXIuZ2V0S2V5cygpO1xuXG4gICAgICBwcnYhLnNob3VsZC5lcXVhbChwcnYpO1xuICAgICAgcHViLnNob3VsZC5lcXVhbChwdWIpO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcyhBZGRyZXNzRm9ybWF0LnRlc3RuZXQpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuZXF1YWwoZW50ZXJwcmlzZUFjY291bnRzLnNlZWRBY2NvdW50LmVudGVycHJpc2VBZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IHByaXZhdGUgYW5kIHB1YmxpYyBrZXlzIGZvciBhIHJhbmRvbSBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKCk7XG4gICAgICBjb25zdCB7IHBydiwgcHViIH0gPSBrZXlQYWlyLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5leGlzdChwcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0KHB1Yik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!