PHP WebShell
Текущая директория: /usr/lib/node_modules/bitgo/node_modules/avalanche/typings/tests/apis/platformvm
Просмотр файла: keychain.test.js
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const keychain_1 = require("../../../src/apis/platformvm/keychain");
const index_1 = require("../../../src/index");
const buffer_1 = require("buffer/");
const create_hash_1 = __importDefault(require("create-hash"));
const bintools_1 = __importDefault(require("../../../src/utils/bintools"));
const bintools = bintools_1.default.getInstance();
const alias = "P";
const hrp = "tests";
describe("PlatformVMKeyPair", () => {
const networkID = 1337;
const ip = "127.0.0.1";
const port = 9650;
const protocol = "https";
const avalanche = new index_1.Avalanche(ip, port, protocol, networkID, undefined, undefined, undefined, true);
test("human readable part", () => {
let hrp = avalanche.getHRP();
let networkID = avalanche.getNetworkID();
expect(hrp).toBe("custom");
expect(networkID).toBe(1337);
avalanche.setNetworkID(2);
hrp = avalanche.getHRP();
networkID = avalanche.getNetworkID();
expect(hrp).toBe("cascade");
expect(networkID).toBe(2);
avalanche.setNetworkID(3);
hrp = avalanche.getHRP();
networkID = avalanche.getNetworkID();
expect(hrp).toBe("denali");
expect(networkID).toBe(3);
avalanche.setNetworkID(4);
hrp = avalanche.getHRP();
networkID = avalanche.getNetworkID();
expect(hrp).toBe("everest");
expect(networkID).toBe(4);
avalanche.setNetworkID(0);
hrp = avalanche.getHRP();
networkID = avalanche.getNetworkID();
expect(hrp).toBe("custom");
expect(networkID).toBe(0);
avalanche.setNetworkID(1);
hrp = avalanche.getHRP();
networkID = avalanche.getNetworkID();
expect(hrp).toBe("avax");
expect(networkID).toBe(1);
avalanche.setNetworkID(12345);
hrp = avalanche.getHRP();
networkID = avalanche.getNetworkID();
expect(hrp).toBe("local");
expect(networkID).toBe(12345);
});
test("repeatable 1", () => {
const kp = new keychain_1.KeyPair(hrp, alias);
kp.importKey(buffer_1.Buffer.from("ef9bf2d4436491c153967c9709dd8e82795bdb9b5ad44ee22c2903005d1cf676", "hex"));
expect(kp.getPublicKey().toString("hex")).toBe("033fad3644deb20d7a210d12757092312451c112d04773cee2699fbb59dc8bb2ef");
const msg = buffer_1.Buffer.from((0, create_hash_1.default)("sha256").update(buffer_1.Buffer.from("09090909", "hex")).digest("hex"), "hex");
const sig = kp.sign(msg);
expect(sig.length).toBe(65);
expect(kp.verify(msg, sig)).toBe(true);
expect(kp.recover(msg, sig).toString("hex")).toBe(kp.getPublicKey().toString("hex"));
});
test("repeatable 2", () => {
const kp = new keychain_1.KeyPair(hrp, alias);
kp.importKey(buffer_1.Buffer.from("17c692d4a99d12f629d9f0ff92ec0dba15c9a83e85487b085c1a3018286995c6", "hex"));
expect(kp.getPublicKey().toString("hex")).toBe("02486553b276cfe7abf0efbcd8d173e55db9c03da020c33d0b219df24124da18ee");
const msg = buffer_1.Buffer.from((0, create_hash_1.default)("sha256").update(buffer_1.Buffer.from("09090909", "hex")).digest("hex"), "hex");
const sig = kp.sign(msg);
expect(sig.length).toBe(65);
expect(kp.verify(msg, sig)).toBe(true);
expect(kp.recover(msg, sig).toString("hex")).toBe(kp.getPublicKey().toString("hex"));
});
test("repeatable 3", () => {
const kp = new keychain_1.KeyPair(hrp, alias);
kp.importKey(buffer_1.Buffer.from("d0e17d4b31380f96a42b3e9ffc4c1b2a93589a1e51d86d7edc107f602fbc7475", "hex"));
expect(kp.getPublicKey().toString("hex")).toBe("031475b91d4fcf52979f1cf107f058088cc2bea6edd51915790f27185a7586e2f2");
const msg = buffer_1.Buffer.from((0, create_hash_1.default)("sha256").update(buffer_1.Buffer.from("09090909", "hex")).digest("hex"), "hex");
const sig = kp.sign(msg);
expect(sig.length).toBe(65);
expect(kp.verify(msg, sig)).toBe(true);
expect(kp.recover(msg, sig).toString("hex")).toBe(kp.getPublicKey().toString("hex"));
});
test("Creation Empty", () => {
const kp = new keychain_1.KeyPair(hrp, alias);
expect(kp.getPrivateKey()).not.toBeUndefined();
expect(kp.getAddress()).not.toBeUndefined();
expect(kp.getPrivateKeyString()).not.toBeUndefined();
expect(kp.getPublicKey()).not.toBeUndefined();
expect(kp.getPublicKeyString()).not.toBeUndefined();
const msg = buffer_1.Buffer.from((0, create_hash_1.default)("sha256").update(buffer_1.Buffer.from("09090909", "hex")).digest("hex"), "hex");
const sig = kp.sign(msg);
expect(sig.length).toBe(65);
expect(kp.verify(msg, sig)).toBe(true);
expect(kp.recover(msg, sig).toString("hex")).toBe(kp.getPublicKey().toString("hex"));
});
});
describe("PlatformVMKeyChain", () => {
test("importKey from Buffer", () => {
const keybuff = buffer_1.Buffer.from("d0e17d4b31380f96a42b3e9ffc4c1b2a93589a1e51d86d7edc107f602fbc7475", "hex");
const kc = new keychain_1.KeyChain(hrp, alias);
const kp2 = new keychain_1.KeyPair(hrp, alias);
const addr1 = kc.importKey(keybuff).getAddress();
const kp1 = kc.getKey(addr1);
kp2.importKey(keybuff);
const addr2 = kp1.getAddress();
expect(addr1.toString("hex")).toBe(addr2.toString("hex"));
expect(kp1.getPrivateKeyString()).toBe(kp2.getPrivateKeyString());
expect(kp1.getPublicKeyString()).toBe(kp2.getPublicKeyString());
expect(kc.hasKey(addr1)).toBe(true);
});
test("importKey from Buffer with leading zeros", () => {
const keybuff = buffer_1.Buffer.from("00007d4b31380f96a42b3e9ffc4c1b2a93589a1e51d86d7edc107f602fbc7475", "hex");
expect(keybuff.length).toBe(32);
const kc = new keychain_1.KeyChain(hrp, alias);
const kp2 = new keychain_1.KeyPair(hrp, alias);
const addr1 = kc.importKey(keybuff).getAddress();
const kp1 = kc.getKey(addr1);
kp2.importKey(keybuff);
const addr2 = kp1.getAddress();
expect(addr1.toString("hex")).toBe(addr2.toString("hex"));
expect(kp1.getPrivateKeyString()).toBe(kp2.getPrivateKeyString());
expect(kp1.getPrivateKey().length).toBe(32);
expect(kp2.getPrivateKey().length).toBe(32);
expect(kp1.getPublicKeyString()).toBe(kp2.getPublicKeyString());
expect(kp1.getPublicKey().length).toBe(33);
expect(kp2.getPublicKey().length).toBe(33);
expect(kc.hasKey(addr1)).toBe(true);
});
test("importKey from serialized string", () => {
const keybuff = buffer_1.Buffer.from("d0e17d4b31380f96a42b3e9ffc4c1b2a93589a1e51d86d7edc107f602fbc7475", "hex");
const kc = new keychain_1.KeyChain(hrp, alias);
const kp2 = new keychain_1.KeyPair(hrp, alias);
const addr1 = kc
.importKey("PrivateKey-" + bintools.cb58Encode(keybuff))
.getAddress();
const kp1 = kc.getKey(addr1);
kp2.importKey(keybuff);
const addr2 = kp1.getAddress();
expect(addr1.toString("hex")).toBe(addr2.toString("hex"));
expect(kp1.getPrivateKeyString()).toBe(kp2.getPrivateKeyString());
expect(kp1.getPublicKeyString()).toBe(kp2.getPublicKeyString());
expect(kc.hasKey(addr1)).toBe(true);
});
test("removeKey via keypair", () => {
const keybuff = buffer_1.Buffer.from("d0e17d4b31380f96a42b3e9ffc4c1b2a93589a1e51d86d7edc107f602fbc7475", "hex");
const kc = new keychain_1.KeyChain(hrp, alias);
const kp1 = new keychain_1.KeyPair(hrp, alias);
const addr1 = kc.importKey(keybuff).getAddress();
kp1.importKey(keybuff);
expect(kc.hasKey(addr1)).toBe(true);
kc.removeKey(kp1);
expect(kc.hasKey(addr1)).toBe(false);
});
test("removeKey via string", () => {
const keybuff = buffer_1.Buffer.from("d0e17d4b31380f96a42b3e9ffc4c1b2a93589a1e51d86d7edc107f602fbc7475", "hex");
const kc = new keychain_1.KeyChain(hrp, alias);
const addr1 = kc.importKey(keybuff).getAddress();
expect(kc.hasKey(addr1)).toBe(true);
kc.removeKey(addr1);
expect(kc.hasKey(addr1)).toBe(false);
});
test("removeKey bad keys", () => {
const keybuff = buffer_1.Buffer.from("d0e17d4b31380f96a42b3e9ffc4c1b2a93589a1e51d86d7edc107f602fbc7475", "hex");
const kc = new keychain_1.KeyChain(hrp, alias);
const addr1 = kc.importKey(keybuff).getAddress();
expect(kc.hasKey(addr1)).toBe(true);
expect(kc.removeKey(bintools.cb58Decode("6Y3kysjF9jnHnYkdS9yGAuoHyae2eNmeV"))).toBe(false);
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Y2hhaW4udGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Rlc3RzL2FwaXMvcGxhdGZvcm12bS9rZXljaGFpbi50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0VBQXlFO0FBQ3pFLDhDQUE4QztBQUM5QyxvQ0FBZ0M7QUFDaEMsOERBQW9DO0FBQ3BDLDJFQUFrRDtBQUVsRCxNQUFNLFFBQVEsR0FBYSxrQkFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO0FBQ2pELE1BQU0sS0FBSyxHQUFXLEdBQUcsQ0FBQTtBQUN6QixNQUFNLEdBQUcsR0FBVyxPQUFPLENBQUE7QUFDM0IsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQVMsRUFBRTtJQUN2QyxNQUFNLFNBQVMsR0FBVyxJQUFJLENBQUE7SUFDOUIsTUFBTSxFQUFFLEdBQVcsV0FBVyxDQUFBO0lBQzlCLE1BQU0sSUFBSSxHQUFXLElBQUksQ0FBQTtJQUN6QixNQUFNLFFBQVEsR0FBVyxPQUFPLENBQUE7SUFDaEMsTUFBTSxTQUFTLEdBQWMsSUFBSSxpQkFBUyxDQUN4QyxFQUFFLEVBQ0YsSUFBSSxFQUNKLFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxDQUNMLENBQUE7SUFFRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsR0FBUyxFQUFFO1FBQ3JDLElBQUksR0FBRyxHQUFXLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtRQUNwQyxJQUFJLFNBQVMsR0FBVyxTQUFTLENBQUMsWUFBWSxFQUFFLENBQUE7UUFDaEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMxQixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTVCLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDekIsR0FBRyxH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QyxrRUFBa0UsRUFDbEUsS0FBSyxDQUNOLENBQUE7UUFDRCxNQUFNLEVBQUUsR0FBYSxJQUFJLG1CQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQzdDLE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDeEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbkMsTUFBTSxDQUNKLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQ3ZFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ2YsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEtleUNoYWluLCBLZXlQYWlyIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hcGlzL3BsYXRmb3Jtdm0va2V5Y2hhaW5cIlxuaW1wb3J0IHsgQXZhbGFuY2hlIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9pbmRleFwiXG5pbXBvcnQgeyBCdWZmZXIgfSBmcm9tIFwiYnVmZmVyL1wiXG5pbXBvcnQgY3JlYXRlSGFzaCBmcm9tIFwiY3JlYXRlLWhhc2hcIlxuaW1wb3J0IEJpblRvb2xzIGZyb20gXCIuLi8uLi8uLi9zcmMvdXRpbHMvYmludG9vbHNcIlxuXG5jb25zdCBiaW50b29sczogQmluVG9vbHMgPSBCaW5Ub29scy5nZXRJbnN0YW5jZSgpXG5jb25zdCBhbGlhczogc3RyaW5nID0gXCJQXCJcbmNvbnN0IGhycDogc3RyaW5nID0gXCJ0ZXN0c1wiXG5kZXNjcmliZShcIlBsYXRmb3JtVk1LZXlQYWlyXCIsICgpOiB2b2lkID0+IHtcbiAgY29uc3QgbmV0d29ya0lEOiBudW1iZXIgPSAxMzM3XG4gIGNvbnN0IGlwOiBzdHJpbmcgPSBcIjEyNy4wLjAuMVwiXG4gIGNvbnN0IHBvcnQ6IG51bWJlciA9IDk2NTBcbiAgY29uc3QgcHJvdG9jb2w6IHN0cmluZyA9IFwiaHR0cHNcIlxuICBjb25zdCBhdmFsYW5jaGU6IEF2YWxhbmNoZSA9IG5ldyBBdmFsYW5jaGUoXG4gICAgaXAsXG4gICAgcG9ydCxcbiAgICBwcm90b2NvbCxcbiAgICBuZXR3b3JrSUQsXG4gICAgdW5kZWZpbmVkLFxuICAgIHVuZGVmaW5lZCxcbiAgICB1bmRlZmluZWQsXG4gICAgdHJ1ZVxuICApXG5cbiAgdGVzdChcImh1bWFuIHJlYWRhYmxlIHBhcnRcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGxldCBocnA6IHN0cmluZyA9IGF2YWxhbmNoZS5nZXRIUlAoKVxuICAgIGxldCBuZXR3b3JrSUQ6IG51bWJlciA9IGF2YWxhbmNoZS5nZXROZXR3b3JrSUQoKVxuICAgIGV4cGVjdChocnApLnRvQmUoXCJjdXN0b21cIilcbiAgICBleHBlY3QobmV0d29ya0lEKS50b0JlKDEzMzcpXG5cbiAgICBhdmFsYW5jaGUuc2V0TmV0d29ya0lEKDIpXG4gICAgaHJwID0gYXZhbGFuY2hlLmdldEhSUCgpXG4gICAgbmV0d29ya0lEID0gYXZhbGFuY2hlLmdldE5ldHdvcmtJRCgpXG4gICAgZXhwZWN0KGhycCkudG9CZShcImNhc2NhZGVcIilcbiAgICBleHBlY3QobmV0d29ya0lEKS50b0JlKDIpXG5cbiAgICBhdmFsYW5jaGUuc2V0TmV0d29ya0lEKDMpXG4gICAgaHJwID0gYXZhbGFuY2hlLmdldEhSUCgpXG4gICAgbmV0d29ya0lEID0gYXZhbGFuY2hlLmdldE5ldHdvcmtJRCgpXG4gICAgZXhwZWN0KGhycCkudG9CZShcImRlbmFsaVwiKVxuICAgIGV4cGVjdChuZXR3b3JrSUQpLnRvQmUoMylcblxuICAgIGF2YWxhbmNoZS5zZXROZXR3b3JrSUQoNClcbiAgICBocnAgPSBhdmFsYW5jaGUuZ2V0SFJQKClcbiAgICBuZXR3b3JrSUQgPSBhdmFsYW5jaGUuZ2V0TmV0d29ya0lEKClcbiAgICBleHBlY3QoaHJwKS50b0JlKFwiZXZlcmVzdFwiKVxuICAgIGV4cGVjdChuZXR3b3JrSUQpLnRvQmUoNClcblxuICAgIGF2YWxhbmNoZS5zZXROZXR3b3JrSUQoMClcbiAgICBocnAgPSBhdmFsYW5jaGUuZ2V0SFJQKClcbiAgICBuZXR3b3JrSUQgPSBhdmFsYW5jaGUuZ2V0TmV0d29ya0lEKClcbiAgICBleHBlY3QoaHJwKS50b0JlKFwiY3VzdG9tXCIpXG4gICAgZXhwZWN0KG5ldHdvcmtJRCkudG9CZSgwKVxuXG4gICAgYXZhbGFuY2hlLnNldE5ldHdvcmtJRCgxKVxuICAgIGhycCA9IGF2YWxhbmNoZS5nZXRIUlAoKVxuICAgIG5ldHdvcmtJRCA9IGF2YWxhbmNoZS5nZXROZXR3b3JrSUQoKVxuICAgIGV4cGVjdChocnApLnRvQmUoXCJhdmF4XCIpXG4gICAgZXhwZWN0KG5ldHdvcmtJRCkudG9CZSgxKVxuXG4gICAgYXZhbGFuY2hlLnNldE5ldHdvcmtJRCgxMjM0NSlcbiAgICBocnAgPSBhdmFsYW5jaGUuZ2V0SFJQKClcbiAgICBuZXR3b3JrSUQgPSBhdmFsYW5jaGUuZ2V0TmV0d29ya0lEKClcbiAgICBleHBlY3QoaHJwKS50b0JlKFwibG9jYWxcIilcbiAgICBleHBlY3QobmV0d29ya0lEKS50b0JlKDEyMzQ1KVxuICB9KVxuXG4gIHRlc3QoXCJyZXBlYXRhYmxlIDFcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGtwOiBLZXlQYWlyID0gbmV3IEtleVBhaXIoaHJwLCBhbGlhcylcbiAgICBrcC5pbXBvcnRLZXkoXG4gICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgXCJlZjliZjJkNDQzNjQ5MWMxNTM5NjdjOTcwOWRkOGU4Mjc5NWJkYjliNWFkNDRlZTIyYzI5MDMwMDVkMWNmNjc2XCIsXG4gICAgICAgIFwiaGV4XCJcbiAgICAgIClcbiAgICApXG4gICAgZXhwZWN0KGtwLmdldFB1YmxpY0tleSgpLnRvU3RyaW5nKFwiaGV4XCIpKS50b0JlKFxuICAgICAgXCIwMzNmYWQzNjQ0ZGViMjBkN2EyMTBkMTI3NTcwOTIzMTI0NTFjMTEyZDA0NzczY2VlMjY5OWZiYjU5ZGM4YmIyZWZcIlxuICAgIClcblxuICAgIGNvbnN0IG1zZzogQnVmZmVyID0gQnVmZmVyLmZyb20oXG4gICAgICBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShCdWZmZXIuZnJvbShcIjA5MDkwOTA5XCIsIFwiaGV4XCIpKS5kaWdlc3QoXCJoZXhcIiksXG4gICAgICBcImhleFwiXG4gICAgKVxuICAgIGNvbnN0IHNpZzogQnVmZmVyID0ga3Auc2lnbihtc2cpXG5cbiAgICBleHBlY3Qoc2lnLmxlbmd0aCkudG9CZSg2NSlcbiAgICBleHBlY3Qoa3AudmVyaWZ5KG1zZywgc2lnKSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChrcC5yZWNvdmVyKG1zZywgc2lnKS50b1N0cmluZyhcImhleFwiKSkudG9CZShcbiAgICAgIGtwLmdldFB1YmxpY0tleSgpLnRvU3RyaW5nKFwiaGV4XCIpXG4gICAgKVxuICB9KVxuXG4gIHRlc3QoXCJyZXBlYXRhYmxlIDJcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGtwOiBLZXlQYWlyID0gbmV3IEtleVBhaXIoaHJwLCBhbGlhcylcbiAgICBrcC5pbXBvcnRLZXkoXG4gICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgXCIxN2M2OTJkNGE5OWQxMmY2MjlkOWYwZmY5MmVjMGRiYTE1YzlhODNlODU0ODdiMDg1YzFhMzAxODI4Njk5NWM2XCIsXG4gICAgICAgIFwiaGV4XCJcbiAgICAgIClcbiAgICApXG4gICAgZXhwZWN0KGtwLmdldFB1YmxpY0tleSgpLnRvU3RyaW5nKFwiaGV4XCIpKS50b0JlKFxuICAgICAgXCIwMjQ4NjU1M2IyNzZjZmU3YWJmMGVmYmNkOGQxNzNlNTVkYjljMDNkYTAyMGMzM2QwYjIxOWRmMjQxMjRkYTE4ZWVcIlxuICAgIClcblxuICAgIGNvbnN0IG1zZzogQnVmZmVyID0gQnVmZmVyLmZyb20oXG4gICAgICBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShCdWZmZXIuZnJvbShcIjA5MDkwOTA5XCIsIFwiaGV4XCIpKS5kaWdlc3QoXCJoZXhcIiksXG4gICAgICBcImhleFwiXG4gICAgKVxuICAgIGNvbnN0IHNpZzogQnVmZmVyID0ga3Auc2lnbihtc2cpXG5cbiAgICBleHBlY3Qoc2lnLmxlbmd0aCkudG9CZSg2NSlcbiAgICBleHBlY3Qoa3AudmVyaWZ5KG1zZywgc2lnKSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChrcC5yZWNvdmVyKG1zZywgc2lnKS50b1N0cmluZyhcImhleFwiKSkudG9CZShcbiAgICAgIGtwLmdldFB1YmxpY0tleSgpLnRvU3RyaW5nKFwiaGV4XCIpXG4gICAgKVxuICB9KVxuXG4gIHRlc3QoXCJyZXBlYXRhYmxlIDNcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGtwOiBLZXlQYWlyID0gbmV3IEtleVBhaXIoaHJwLCBhbGlhcylcbiAgICBrcC5pbXBvcnRLZXkoXG4gICAgICBCdWZmZXIuZnJvbShcbiAgICAgICAgXCJkMGUxN2Q0YjMxMzgwZjk2YTQyYjNlOWZmYzRjMWIyYTkzNTg5YTFlNTFkODZkN2VkYzEwN2Y2MDJmYmM3NDc1XCIsXG4gICAgICAgIFwiaGV4XCJcbiAgICAgIClcbiAgICApXG4gICAgZXhwZWN0KGtwLmdldFB1YmxpY0tleSgpLnRvU3RyaW5nKFwiaGV4XCIpKS50b0JlKFxuICAgICAgXCIwMzE0NzViOTFkNGZjZjUyOTc5ZjFjZjEwN2YwNTgwODhjYzJiZWE2ZWRkNTE5MTU3OTBmMjcxODVhNzU4NmUyZjJcIlxuICAgIClcblxuICAgIGNvbnN0IG1zZzogQnVmZmVyID0gQnVmZmVyLmZyb20oXG4gICAgICBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShCdWZmZXIuZnJvbShcIjA5MDkwOTA5XCIsIFwiaGV4XCIpKS5kaWdlc3QoXCJoZXhcIiksXG4gICAgICBcImhleFwiXG4gICAgKVxuICAgIGNvbnN0IHNpZzogQnVmZmVyID0ga3Auc2lnbihtc2cpXG5cbiAgICBleHBlY3Qoc2lnLmxlbmd0aCkudG9CZSg2NSlcbiAgICBleHBlY3Qoa3AudmVyaWZ5KG1zZywgc2lnKSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChrcC5yZWNvdmVyKG1zZywgc2lnKS50b1N0cmluZyhcImhleFwiKSkudG9CZShcbiAgICAgIGtwLmdldFB1YmxpY0tleSgpLnRvU3RyaW5nKFwiaGV4XCIpXG4gICAgKVxuICB9KVxuXG4gIHRlc3QoXCJDcmVhdGlvbiBFbXB0eVwiLCAoKTogdm9pZCA9PiB7XG4gICAgY29uc3Qga3A6IEtleVBhaXIgPSBuZXcgS2V5UGFpcihocnAsIGFsaWFzKVxuICAgIGV4cGVjdChrcC5nZXRQcml2YXRlS2V5KCkpLm5vdC50b0JlVW5kZWZpbmVkKClcbiAgICBleHBlY3Qoa3AuZ2V0QWRkcmVzcygpKS5ub3QudG9CZVVuZGVmaW5lZCgpXG4gICAgZXhwZWN0KGtwLmdldFByaXZhdGVLZXlTdHJpbmcoKSkubm90LnRvQmVVbmRlZmluZWQoKVxuICAgIGV4cGVjdChrcC5nZXRQdWJsaWNLZXkoKSkubm90LnRvQmVVbmRlZmluZWQoKVxuICAgIGV4cGVjdChrcC5nZXRQdWJsaWNLZXlTdHJpbmcoKSkubm90LnRvQmVVbmRlZmluZWQoKVxuICAgIGNvbnN0IG1zZzogQnVmZmVyID0gQnVmZmVyLmZyb20oXG4gICAgICBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShCdWZmZXIuZnJvbShcIjA5MDkwOTA5XCIsIFwiaGV4XCIpKS5kaWdlc3QoXCJoZXhcIiksXG4gICAgICBcImhleFwiXG4gICAgKVxuICAgIGNvbnN0IHNpZzogQnVmZmVyID0ga3Auc2lnbihtc2cpXG5cbiAgICBleHBlY3Qoc2lnLmxlbmd0aCkudG9CZSg2NSlcbiAgICBleHBlY3Qoa3AudmVyaWZ5KG1zZywgc2lnKSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChrcC5yZWNvdmVyKG1zZywgc2lnKS50b1N0cmluZyhcImhleFwiKSkudG9CZShcbiAgICAgIGtwLmdldFB1YmxpY0tleSgpLnRvU3RyaW5nKFwiaGV4XCIpXG4gICAgKVxuICB9KVxufSlcblxuZGVzY3JpYmUoXCJQbGF0Zm9ybVZNS2V5Q2hhaW5cIiwgKCk6IHZvaWQgPT4ge1xuICB0ZXN0KFwiaW1wb3J0S2V5IGZyb20gQnVmZmVyXCIsICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBrZXlidWZmOiBCdWZmZXIgPSBCdWZmZXIuZnJvbShcbiAgICAgIFwiZDBlMTdkNGIzMTM4MGY5NmE0MmIzZTlmZmM0YzFiMmE5MzU4OWExZTUxZDg2ZDdlZGMxMDdmNjAyZmJjNzQ3NVwiLFxuICAgICAgXCJoZXhcIlxuICAgIClcbiAgICBjb25zdCBrYzogS2V5Q2hhaW4gPSBuZXcgS2V5Q2hhaW4oaHJwLCBhbGlhcylcbiAgICBjb25zdCBrcDI6IEtleVBhaXIgPSBuZXcgS2V5UGFpcihocnAsIGFsaWFzKVxuICAgIGNvbnN0IGFkZHIxOiBCdWZmZXIgPSBrYy5pbXBvcnRLZXkoa2V5YnVmZikuZ2V0QWRkcmVzcygpXG4gICAgY29uc3Qga3AxOiBLZXlQYWlyID0ga2MuZ2V0S2V5KGFkZHIxKVxuICAgIGtwMi5pbXBvcnRLZXkoa2V5YnVmZilcbiAgICBjb25zdCBhZGRyMiA9IGtwMS5nZXRBZGRyZXNzKClcbiAgICBleHBlY3QoYWRkcjEudG9TdHJpbmcoXCJoZXhcIikpLnRvQmUoYWRkcjIudG9TdHJpbmcoXCJoZXhcIikpXG4gICAgZXhwZWN0KGtwMS5nZXRQcml2YXRlS2V5U3RyaW5nKCkpLnRvQmUoa3AyLmdldFByaXZhdGVLZXlTdHJpbmcoKSlcbiAgICBleHBlY3Qoa3AxLmdldFB1YmxpY0tleVN0cmluZygpKS50b0JlKGtwMi5nZXRQdWJsaWNLZXlTdHJpbmcoKSlcbiAgICBleHBlY3Qoa2MuaGFzS2V5KGFkZHIxKSkudG9CZSh0cnVlKVxuICB9KVxuXG4gIHRlc3QoXCJpbXBvcnRLZXkgZnJvbSBCdWZmZXIgd2l0aCBsZWFkaW5nIHplcm9zXCIsICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBrZXlidWZmOiBCdWZmZXIgPSBCdWZmZXIuZnJvbShcbiAgICAgIFwiMDAwMDdkNGIzMTM4MGY5NmE0MmIzZTlmZmM0YzFiMmE5MzU4OWExZTUxZDg2ZDdlZGMxMDdmNjAyZmJjNzQ3NVwiLFxuICAgICAgXCJoZXhcIlxuICAgIClcbiAgICBleHBlY3Qoa2V5YnVmZi5sZW5ndGgpLnRvQmUoMzIpXG4gICAgY29uc3Qga2M6IEtleUNoYWluID0gbmV3IEtleUNoYWluKGhycCwgYWxpYXMpXG4gICAgY29uc3Qga3AyOiBLZXlQYWlyID0gbmV3IEtleVBhaXIoaHJwLCBhbGlhcylcbiAgICBjb25zdCBhZGRyMTogQnVmZmVyID0ga2MuaW1wb3J0S2V5KGtleWJ1ZmYpLmdldEFkZHJlc3MoKVxuICAgIGNvbnN0IGtwMTogS2V5UGFpciA9IGtjLmdldEtleShhZGRyMSlcbiAgICBrcDIuaW1wb3J0S2V5KGtleWJ1ZmYpXG4gICAgY29uc3QgYWRkcjIgPSBrcDEuZ2V0QWRkcmVzcygpXG4gICAgZXhwZWN0KGFkZHIxLnRvU3RyaW5nKFwiaGV4XCIpKS50b0JlKGFkZHIyLnRvU3RyaW5nKFwiaGV4XCIpKVxuICAgIGV4cGVjdChrcDEuZ2V0UHJpdmF0ZUtleVN0cmluZygpKS50b0JlKGtwMi5nZXRQcml2YXRlS2V5U3RyaW5nKCkpXG4gICAgZXhwZWN0KGtwMS5nZXRQcml2YXRlS2V5KCkubGVuZ3RoKS50b0JlKDMyKVxuICAgIGV4cGVjdChrcDIuZ2V0UHJpdmF0ZUtleSgpLmxlbmd0aCkudG9CZSgzMilcbiAgICBleHBlY3Qoa3AxLmdldFB1YmxpY0tleVN0cmluZygpKS50b0JlKGtwMi5nZXRQdWJsaWNLZXlTdHJpbmcoKSlcbiAgICBleHBlY3Qoa3AxLmdldFB1YmxpY0tleSgpLmxlbmd0aCkudG9CZSgzMylcbiAgICBleHBlY3Qoa3AyLmdldFB1YmxpY0tleSgpLmxlbmd0aCkudG9CZSgzMylcbiAgICBleHBlY3Qoa2MuaGFzS2V5KGFkZHIxKSkudG9CZSh0cnVlKVxuICB9KVxuXG4gIHRlc3QoXCJpbXBvcnRLZXkgZnJvbSBzZXJpYWxpemVkIHN0cmluZ1wiLCAoKTogdm9pZCA9PiB7XG4gICAgY29uc3Qga2V5YnVmZjogQnVmZmVyID0gQnVmZmVyLmZyb20oXG4gICAgICBcImQwZTE3ZDRiMzEzODBmOTZhNDJiM2U5ZmZjNGMxYjJhOTM1ODlhMWU1MWQ4NmQ3ZWRjMTA3ZjYwMmZiYzc0NzVcIixcbiAgICAgIFwiaGV4XCJcbiAgICApXG4gICAgY29uc3Qga2M6IEtleUNoYWluID0gbmV3IEtleUNoYWluKGhycCwgYWxpYXMpXG4gICAgY29uc3Qga3AyOiBLZXlQYWlyID0gbmV3IEtleVBhaXIoaHJwLCBhbGlhcylcbiAgICBjb25zdCBhZGRyMTogQnVmZmVyID0ga2NcbiAgICAgIC5pbXBvcnRLZXkoXCJQcml2YXRlS2V5LVwiICsgYmludG9vbHMuY2I1OEVuY29kZShrZXlidWZmKSlcbiAgICAgIC5nZXRBZGRyZXNzKClcbiAgICBjb25zdCBrcDE6IEtleVBhaXIgPSBrYy5nZXRLZXkoYWRkcjEpXG4gICAga3AyLmltcG9ydEtleShrZXlidWZmKVxuICAgIGNvbnN0IGFkZHIyID0ga3AxLmdldEFkZHJlc3MoKVxuICAgIGV4cGVjdChhZGRyMS50b1N0cmluZyhcImhleFwiKSkudG9CZShhZGRyMi50b1N0cmluZyhcImhleFwiKSlcbiAgICBleHBlY3Qoa3AxLmdldFByaXZhdGVLZXlTdHJpbmcoKSkudG9CZShrcDIuZ2V0UHJpdmF0ZUtleVN0cmluZygpKVxuICAgIGV4cGVjdChrcDEuZ2V0UHVibGljS2V5U3RyaW5nKCkpLnRvQmUoa3AyLmdldFB1YmxpY0tleVN0cmluZygpKVxuICAgIGV4cGVjdChrYy5oYXNLZXkoYWRkcjEpKS50b0JlKHRydWUpXG4gIH0pXG5cbiAgdGVzdChcInJlbW92ZUtleSB2aWEga2V5cGFpclwiLCAoKTogdm9pZCA9PiB7XG4gICAgY29uc3Qga2V5YnVmZjogQnVmZmVyID0gQnVmZmVyLmZyb20oXG4gICAgICBcImQwZTE3ZDRiMzEzODBmOTZhNDJiM2U5ZmZjNGMxYjJhOTM1ODlhMWU1MWQ4NmQ3ZWRjMTA3ZjYwMmZiYzc0NzVcIixcbiAgICAgIFwiaGV4XCJcbiAgICApXG4gICAgY29uc3Qga2M6IEtleUNoYWluID0gbmV3IEtleUNoYWluKGhycCwgYWxpYXMpXG4gICAgY29uc3Qga3AxOiBLZXlQYWlyID0gbmV3IEtleVBhaXIoaHJwLCBhbGlhcylcbiAgICBjb25zdCBhZGRyMTogQnVmZmVyID0ga2MuaW1wb3J0S2V5KGtleWJ1ZmYpLmdldEFkZHJlc3MoKVxuICAgIGtwMS5pbXBvcnRLZXkoa2V5YnVmZilcbiAgICBleHBlY3Qoa2MuaGFzS2V5KGFkZHIxKSkudG9CZSh0cnVlKVxuICAgIGtjLnJlbW92ZUtleShrcDEpXG4gICAgZXhwZWN0KGtjLmhhc0tleShhZGRyMSkpLnRvQmUoZmFsc2UpXG4gIH0pXG5cbiAgdGVzdChcInJlbW92ZUtleSB2aWEgc3RyaW5nXCIsICgpOiB2b2lkID0+IHtcbiAgICBjb25zdCBrZXlidWZmOiBCdWZmZXIgPSBCdWZmZXIuZnJvbShcbiAgICAgIFwiZDBlMTdkNGIzMTM4MGY5NmE0MmIzZTlmZmM0YzFiMmE5MzU4OWExZTUxZDg2ZDdlZGMxMDdmNjAyZmJjNzQ3NVwiLFxuICAgICAgXCJoZXhcIlxuICAgIClcbiAgICBjb25zdCBrYzogS2V5Q2hhaW4gPSBuZXcgS2V5Q2hhaW4oaHJwLCBhbGlhcylcbiAgICBjb25zdCBhZGRyMTogQnVmZmVyID0ga2MuaW1wb3J0S2V5KGtleWJ1ZmYpLmdldEFkZHJlc3MoKVxuICAgIGV4cGVjdChrYy5oYXNLZXkoYWRkcjEpKS50b0JlKHRydWUpXG4gICAga2MucmVtb3ZlS2V5KGFkZHIxKVxuICAgIGV4cGVjdChrYy5oYXNLZXkoYWRkcjEpKS50b0JlKGZhbHNlKVxuICB9KVxuXG4gIHRlc3QoXCJyZW1vdmVLZXkgYmFkIGtleXNcIiwgKCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGtleWJ1ZmY6IEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFxuICAgICAgXCJkMGUxN2Q0YjMxMzgwZjk2YTQyYjNlOWZmYzRjMWIyYTkzNTg5YTFlNTFkODZkN2VkYzEwN2Y2MDJmYmM3NDc1XCIsXG4gICAgICBcImhleFwiXG4gICAgKVxuICAgIGNvbnN0IGtjOiBLZXlDaGFpbiA9IG5ldyBLZXlDaGFpbihocnAsIGFsaWFzKVxuICAgIGNvbnN0IGFkZHIxOiBCdWZmZXIgPSBrYy5pbXBvcnRLZXkoa2V5YnVmZikuZ2V0QWRkcmVzcygpXG4gICAgZXhwZWN0KGtjLmhhc0tleShhZGRyMSkpLnRvQmUodHJ1ZSlcbiAgICBleHBlY3QoXG4gICAgICBrYy5yZW1vdmVLZXkoYmludG9vbHMuY2I1OERlY29kZShcIjZZM2t5c2pGOWpuSG5Za2RTOXlHQXVvSHlhZTJlTm1lVlwiKSlcbiAgICApLnRvQmUoZmFsc2UpXG4gIH0pXG59KVxuIl19Выполнить команду
Для локальной разработки. Не используйте в интернете!