PHP WebShell

Текущая директория: /opt/BitGoJS/modules/sdk-coin-xlm/dist/test/unit

Просмотр файла: utils.js

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
    var ownKeys = function(o) {
        ownKeys = Object.getOwnPropertyNames || function (o) {
            var ar = [];
            for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
            return ar;
        };
        return ownKeys(o);
    };
    return function (mod) {
        if (mod && mod.__esModule) return mod;
        var result = {};
        if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
        __setModuleDefault(result, mod);
        return result;
    };
})();
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 Utils = __importStar(require("../../src/lib/utils"));
describe('Stellar Utils', () => {
    const userKeychain = {
        pub: 'GA34NPQ4M54HHZBKSDZ5B3J3BZHTXKCZD4UFO2OYZERPOASK4DAATSIB',
        prv: 'SDADJSTZNIKF46NM7LE3ZHMX4TJ2VJBL7PTERNDLWHZ5U6KNO5S7XFJD',
    };
    const backupKeychain = {
        pub: 'GC3D3ZNNK7GHLMSWJA54DQO6QJUJJF7K6J5JGCEW45ZT6QMKZ6PMUHUM',
        prv: 'SA22TDBINLZMGYUDVXGUP2JMYIQ3DTJE53PNQUVCDK73XRS6TDVYU7WW',
    };
    // This key pair is the decoded version of the userKeychain above
    const rootKeychain = {
        pub: '37c6be1c677873e42a90f3d0ed3b0e4f3ba8591f285769d8c922f7024ae0c009',
        prv: 'c034ca796a145e79acfac9bc9d97e4d3aaa42bfbe648b46bb1f3da794d7765fb37c6be1c677873e42a90f3d0ed3b0e4f3ba8591f285769d8c922f7024ae0c009',
    };
    // This key pair is the decoded version of the backupKeychain above
    const backupRootKeychain = {
        pub: 'b63de5ad57cc75b256483bc1c1de82689497eaf27a930896e7733f418acf9eca',
        prv: '35a98c286af2c36283adcd47e92cc221b1cd24eeded852a21abfbbc65e98eb8ab63de5ad57cc75b256483bc1c1de82689497eaf27a930896e7733f418acf9eca',
    };
    describe('key validation', () => {
        it('should validate a Stellar public key', () => {
            Utils.isValidStellarPublicKey(userKeychain.pub).should.equal(true);
            Utils.isValidStellarPublicKey(backupKeychain.pub).should.equal(true);
        });
        it('should validate a Stellar private key', () => {
            Utils.isValidStellarPrivateKey(userKeychain.prv).should.equal(true);
            Utils.isValidStellarPrivateKey(backupKeychain.prv).should.equal(true);
        });
        it('should validate a raw public key', () => {
            Utils.isValidRootPublicKey(rootKeychain.pub).should.equal(true);
            Utils.isValidRootPublicKey(backupRootKeychain.pub).should.equal(true);
        });
        it('should validate a raw private key', () => {
            Utils.isValidRootPrivateKey(rootKeychain.prv).should.equal(true);
            Utils.isValidRootPrivateKey(backupRootKeychain.prv).should.equal(true);
        });
        it('should fail to validate an invalid Stellar public key', () => {
            Utils.isValidStellarPublicKey(rootKeychain.pub).should.equal(false);
            Utils.isValidStellarPublicKey(backupRootKeychain.pub).should.equal(false);
        });
        it('should fail to validate an invalid Stellar private key', () => {
            Utils.isValidStellarPrivateKey(rootKeychain.prv).should.equal(false);
            Utils.isValidStellarPrivateKey(backupRootKeychain.prv).should.equal(false);
        });
        it('should fail to validate an invalid raw public key', () => {
            Utils.isValidRootPublicKey(userKeychain.pub).should.equal(false);
            Utils.isValidRootPublicKey(backupKeychain.pub).should.equal(false);
        });
        it('should fail to validate an invalid raw private key', () => {
            Utils.isValidRootPrivateKey(userKeychain.prv).should.equal(false);
            Utils.isValidRootPrivateKey(backupKeychain.prv).should.equal(false);
        });
    });
    describe('encode and decode keys', () => {
        it('should encode a raw public key to a Stellar public key', () => {
            const pub = Buffer.from(rootKeychain.pub, 'hex');
            Utils.encodePublicKey(pub).should.equal(userKeychain.pub);
            const backupPub = Buffer.from(backupRootKeychain.pub, 'hex');
            Utils.encodePublicKey(backupPub).should.equal(backupKeychain.pub);
        });
        it('should encode a raw private key to a Stellar private key', () => {
            const prv = Buffer.from(rootKeychain.prv.slice(0, 64), 'hex');
            Utils.encodePrivateKey(prv).should.equal(userKeychain.prv);
            const backupPrv = Buffer.from(backupRootKeychain.prv.slice(0, 64), 'hex');
            Utils.encodePrivateKey(backupPrv).should.equal(backupKeychain.prv);
        });
        it('should decode a Stellar public key to a raw public key', () => {
            const decodedPub = Utils.decodePublicKey(userKeychain.pub).toString('hex');
            const decodedBackupPub = Utils.decodePublicKey(backupKeychain.pub).toString('hex');
            decodedPub.should.equal(rootKeychain.pub);
            decodedBackupPub.should.equal(backupRootKeychain.pub);
        });
        it('should decode a Stellar private key to a raw private key', () => {
            const decodedPrv = Utils.decodePrivateKey(userKeychain.prv).toString('hex');
            const decodedBackupPrv = Utils.decodePrivateKey(backupKeychain.prv).toString('hex');
            decodedPrv.should.equal(rootKeychain.prv.slice(0, 64));
            decodedBackupPrv.should.equal(backupRootKeychain.prv.slice(0, 64));
        });
    });
    describe('create Stellar keypairs', () => {
        it('should create a Stellar keypair given a Stellar public key', () => {
            const keypair = Utils.createStellarKeypairFromPub(userKeychain.pub);
            const backupKeypair = Utils.createStellarKeypairFromPub(backupKeychain.pub);
            keypair.publicKey().should.equal(userKeychain.pub);
            backupKeypair.publicKey().should.equal(backupKeychain.pub);
        });
        it('should create a Stellar keypair given a raw public key', () => {
            const keypair = Utils.createStellarKeypairFromPub(rootKeychain.pub);
            const backupKeypair = Utils.createStellarKeypairFromPub(backupRootKeychain.pub);
            keypair.publicKey().should.equal(userKeychain.pub);
            backupKeypair.publicKey().should.equal(backupKeychain.pub);
        });
        it('should create a Stellar keypair given a Stellar private key', () => {
            const keypair = Utils.createStellarKeypairFromPrv(userKeychain.prv);
            const backupKeypair = Utils.createStellarKeypairFromPrv(backupKeychain.prv);
            keypair.publicKey().should.equal(userKeychain.pub);
            backupKeypair.publicKey().should.equal(backupKeychain.pub);
            keypair.secret().should.equal(userKeychain.prv);
            backupKeypair.secret().should.equal(backupKeychain.prv);
        });
        it('should create a Stellar keypair given a raw private key', () => {
            const keypair = Utils.createStellarKeypairFromPrv(rootKeychain.prv);
            const backupKeypair = Utils.createStellarKeypairFromPrv(backupRootKeychain.prv);
            keypair.publicKey().should.equal(userKeychain.pub);
            backupKeypair.publicKey().should.equal(backupKeychain.pub);
            keypair.secret().should.equal(userKeychain.prv);
            backupKeypair.secret().should.equal(backupKeychain.prv);
        });
        it('should fail to create a Stellar keypair given an invalid public key', () => {
            // non G-prefixed, so this should fail with invalid root key
            assert_1.default.throws(() => Utils.createStellarKeypairFromPub('invalid'), /Error: Invalid root public key/);
        });
        it('should fail to create a Stellar keypair given an invalid G-prefixed public key', () => {
            assert_1.default.throws(() => Utils.createStellarKeypairFromPub('GINVALID'), /Error: Invalid Stellar public key/);
        });
        it('should fail to create a Stellar keypair given an invalid private key', () => {
            // non S-prefixed, so this should fail with invalid root key
            assert_1.default.throws(() => Utils.createStellarKeypairFromPrv('invalid'), /Error: Invalid root private key/);
        });
        it('should fail to create a Stellar keypair given an invalid S-prefixed private key', () => {
            assert_1.default.throws(() => Utils.createStellarKeypairFromPrv('SINVALID'), /Error: Invalid Stellar private key/);
        });
    });
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsMkRBQTZDO0FBRTdDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO0lBQzdCLE1BQU0sWUFBWSxHQUFHO1FBQ25CLEdBQUcsRUFBRSwwREFBMEQ7UUFDL0QsR0FBRyxFQUFFLDBEQUEwRDtLQUNoRSxDQUFDO0lBQ0YsTUFBTSxjQUFjLEdBQUc7UUFDckIsR0FBRyxFQUFFLDBEQUEwRDtRQUMvRCxHQUFHLEVBQUUsMERBQTBEO0tBQ2hFLENBQUM7SUFDRixpRUFBaUU7SUFDakUsTUFBTSxZQUFZLEdBQUc7UUFDbkIsR0FBRyxFQUFFLGtFQUFrRTtRQUN2RSxHQUFHLEVBQUUsa0lBQWtJO0tBQ3hJLENBQUM7SUFDRixtRUFBbUU7SUFDbkUsTUFBTSxrQkFBa0IsR0FBRztRQUN6QixHQUFHLEVBQUUsa0VBQWtFO1FBQ3ZFLEdBQUcsRUFBRSxrSUFBa0k7S0FDeEksQ0FBQztJQUVGLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUU7UUFDOUIsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtZQUM5QyxLQUFLLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkUsS0FBSyxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtZQUMvQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLEdBQUcs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NUQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxFQUFFLGlDQUFpQyxDQUFDLENBQUM7UUFDdkcsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUZBQWlGLEVBQUUsR0FBRyxFQUFFO1lBQ3pGLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO1FBQzNHLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuXG5kZXNjcmliZSgnU3RlbGxhciBVdGlscycsICgpID0+IHtcbiAgY29uc3QgdXNlcktleWNoYWluID0ge1xuICAgIHB1YjogJ0dBMzROUFE0TTU0SEhaQktTRFo1QjNKM0JaSFRYS0NaRDRVRk8yT1laRVJQT0FTSzREQUFUU0lCJyxcbiAgICBwcnY6ICdTREFESlNUWk5JS0Y0Nk5NN0xFM1pITVg0VEoyVkpCTDdQVEVSTkRMV0haNVU2S05PNVM3WEZKRCcsXG4gIH07XG4gIGNvbnN0IGJhY2t1cEtleWNoYWluID0ge1xuICAgIHB1YjogJ0dDM0QzWk5OSzdHSExNU1dKQTU0RFFPNlFKVUpKRjdLNko1SkdDRVc0NVpUNlFNS1o2UE1VSFVNJyxcbiAgICBwcnY6ICdTQTIyVERCSU5MWk1HWVVEVlhHVVAySk1ZSVEzRFRKRTUzUE5RVVZDREs3M1hSUzZURFZZVTdXVycsXG4gIH07XG4gIC8vIFRoaXMga2V5IHBhaXIgaXMgdGhlIGRlY29kZWQgdmVyc2lvbiBvZiB0aGUgdXNlcktleWNoYWluIGFib3ZlXG4gIGNvbnN0IHJvb3RLZXljaGFpbiA9IHtcbiAgICBwdWI6ICczN2M2YmUxYzY3Nzg3M2U0MmE5MGYzZDBlZDNiMGU0ZjNiYTg1OTFmMjg1NzY5ZDhjOTIyZjcwMjRhZTBjMDA5JyxcbiAgICBwcnY6ICdjMDM0Y2E3OTZhMTQ1ZTc5YWNmYWM5YmM5ZDk3ZTRkM2FhYTQyYmZiZTY0OGI0NmJiMWYzZGE3OTRkNzc2NWZiMzdjNmJlMWM2Nzc4NzNlNDJhOTBmM2QwZWQzYjBlNGYzYmE4NTkxZjI4NTc2OWQ4YzkyMmY3MDI0YWUwYzAwOScsXG4gIH07XG4gIC8vIFRoaXMga2V5IHBhaXIgaXMgdGhlIGRlY29kZWQgdmVyc2lvbiBvZiB0aGUgYmFja3VwS2V5Y2hhaW4gYWJvdmVcbiAgY29uc3QgYmFja3VwUm9vdEtleWNoYWluID0ge1xuICAgIHB1YjogJ2I2M2RlNWFkNTdjYzc1YjI1NjQ4M2JjMWMxZGU4MjY4OTQ5N2VhZjI3YTkzMDg5NmU3NzMzZjQxOGFjZjllY2EnLFxuICAgIHBydjogJzM1YTk4YzI4NmFmMmMzNjI4M2FkY2Q0N2U5MmNjMjIxYjFjZDI0ZWVkZWQ4NTJhMjFhYmZiYmM2NWU5OGViOGFiNjNkZTVhZDU3Y2M3NWIyNTY0ODNiYzFjMWRlODI2ODk0OTdlYWYyN2E5MzA4OTZlNzczM2Y0MThhY2Y5ZWNhJyxcbiAgfTtcblxuICBkZXNjcmliZSgna2V5IHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIFN0ZWxsYXIgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIFV0aWxzLmlzVmFsaWRTdGVsbGFyUHVibGljS2V5KHVzZXJLZXljaGFpbi5wdWIpLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICAgIFV0aWxzLmlzVmFsaWRTdGVsbGFyUHVibGljS2V5KGJhY2t1cEtleWNoYWluLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIFN0ZWxsYXIgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICBVdGlscy5pc1ZhbGlkU3RlbGxhclByaXZhdGVLZXkodXNlcktleWNoYWluLnBydikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgVXRpbHMuaXNWYWxpZFN0ZWxsYXJQcml2YXRlS2V5KGJhY2t1cEtleWNoYWluLnBydikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHJhdyBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgVXRpbHMuaXNWYWxpZFJvb3RQdWJsaWNLZXkocm9vdEtleWNoYWluLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgICAgVXRpbHMuaXNWYWxpZFJvb3RQdWJsaWNLZXkoYmFja3VwUm9vdEtleWNoYWluLnB1Yikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHJhdyBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIFV0aWxzLmlzVmFsaWRSb290UHJpdmF0ZUtleShyb290S2V5Y2hhaW4ucHJ2KS5zaG91bGQuZXF1YWwodHJ1ZSk7XG4gICAgICBVdGlscy5pc1ZhbGlkUm9vdFByaXZhdGVLZXkoYmFja3VwUm9vdEtleWNoYWluLnBydikuc2hvdWxkLmVxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmYWlsIHRvIHZhbGlkYXRlIGFuIGludmFsaWQgU3RlbGxhciBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgVXRpbHMuaXNWYWxpZFN0ZWxsYXJQdWJsaWNLZXkocm9vdEtleWNoYWluLnB1Yikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIFV0aWxzLmlzVmFsaWRTdGVsbGFyUHVibGljS2V5KGJhY2t1cFJvb3RLZXljaGFpbi5wdWIpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gdmFsaWRhdGUgYW4gaW52YWxpZCBTdGVsbGFyIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgVXRpbHMuaXNWYWxpZFN0ZWxsYXJQcml2YXRlS2V5KHJvb3RLZXljaGFpbi5wcnYpLnNob3VsZC5lcXVhbChmYWxzZSk7XG4gICAgICBVdGlscy5pc1ZhbGlkU3RlbGxhclByaXZhdGVLZXkoYmFja3VwUm9vdEtleWNoYWluLnBydikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSBhbiBpbnZhbGlkIHJhdyBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgVXRpbHMuaXNWYWxpZFJvb3RQdWJsaWNLZXkodXNlcktleWNoYWluLnB1Yikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICAgIFV0aWxzLmlzVmFsaWRSb290UHVibGljS2V5KGJhY2t1cEtleWNoYWluLnB1Yikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byB2YWxpZGF0ZSBhbiBpbnZhbGlkIHJhdyBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIFV0aWxzLmlzVmFsaWRSb290UHJpdmF0ZUtleSh1c2VyS2V5Y2hhaW4ucHJ2KS5zaG91bGQuZXF1YWwoZmFsc2UpO1xuICAgICAgVXRpbHMuaXNWYWxpZFJvb3RQcml2YXRlS2V5KGJhY2t1cEtleWNoYWluLnBydikuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VuY29kZSBhbmQgZGVjb2RlIGtleXMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBlbmNvZGUgYSByYXcgcHVibGljIGtleSB0byBhIFN0ZWxsYXIgcHVibGljIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHB1YiA9IEJ1ZmZlci5mcm9tKHJvb3RLZXljaGFpbi5wdWIsICdoZXgnKTtcbiAgICAgIFV0aWxzLmVuY29kZVB1YmxpY0tleShwdWIpLnNob3VsZC5lcXVhbCh1c2VyS2V5Y2hhaW4ucHViKTtcblxuICAgICAgY29uc3QgYmFja3VwUHViID0gQnVmZmVyLmZyb20oYmFja3VwUm9vdEtleWNoYWluLnB1YiwgJ2hleCcpO1xuICAgICAgVXRpbHMuZW5jb2RlUHVibGljS2V5KGJhY2t1cFB1Yikuc2hvdWxkLmVxdWFsKGJhY2t1cEtleWNoYWluLnB1Yik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVuY29kZSBhIHJhdyBwcml2YXRlIGtleSB0byBhIFN0ZWxsYXIgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcnYgPSBCdWZmZXIuZnJvbShyb290S2V5Y2hhaW4ucHJ2LnNsaWNlKDAsIDY0KSwgJ2hleCcpO1xuICAgICAgVXRpbHMuZW5jb2RlUHJpdmF0ZUtleShwcnYpLnNob3VsZC5lcXVhbCh1c2VyS2V5Y2hhaW4ucHJ2KTtcblxuICAgICAgY29uc3QgYmFja3VwUHJ2ID0gQnVmZmVyLmZyb20oYmFja3VwUm9vdEtleWNoYWluLnBydi5zbGljZSgwLCA2NCksICdoZXgnKTtcbiAgICAgIFV0aWxzLmVuY29kZVByaXZhdGVLZXkoYmFja3VwUHJ2KS5zaG91bGQuZXF1YWwoYmFja3VwS2V5Y2hhaW4ucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVjb2RlIGEgU3RlbGxhciBwdWJsaWMga2V5IHRvIGEgcmF3IHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZWNvZGVkUHViID0gVXRpbHMuZGVjb2RlUHVibGljS2V5KHVzZXJLZXljaGFpbi5wdWIpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICAgIGNvbnN0IGRlY29kZWRCYWNrdXBQdWIgPSBVdGlscy5kZWNvZGVQdWJsaWNLZXkoYmFja3VwS2V5Y2hhaW4ucHViKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAgIGRlY29kZWRQdWIuc2hvdWxkLmVxdWFsKHJvb3RLZXljaGFpbi5wdWIpO1xuICAgICAgZGVjb2RlZEJhY2t1cFB1Yi5zaG91bGQuZXF1YWwoYmFja3VwUm9vdEtleWNoYWluLnB1Yik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGRlY29kZSBhIFN0ZWxsYXIgcHJpdmF0ZSBrZXkgdG8gYSByYXcgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBkZWNvZGVkUHJ2ID0gVXRpbHMuZGVjb2RlUHJpdmF0ZUtleSh1c2VyS2V5Y2hhaW4ucHJ2KS50b1N0cmluZygnaGV4Jyk7XG4gICAgICBjb25zdCBkZWNvZGVkQmFja3VwUHJ2ID0gVXRpbHMuZGVjb2RlUHJpdmF0ZUtleShiYWNrdXBLZXljaGFpbi5wcnYpLnRvU3RyaW5nKCdoZXgnKTtcblxuICAgICAgZGVjb2RlZFBydi5zaG91bGQuZXF1YWwocm9vdEtleWNoYWluLnBydi5zbGljZSgwLCA2NCkpO1xuICAgICAgZGVjb2RlZEJhY2t1cFBydi5zaG91bGQuZXF1YWwoYmFja3VwUm9vdEtleWNoYWluLnBydi5zbGljZSgwLCA2NCkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY3JlYXRlIFN0ZWxsYXIga2V5cGFpcnMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSBTdGVsbGFyIGtleXBhaXIgZ2l2ZW4gYSBTdGVsbGFyIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlwYWlyID0gVXRpbHMuY3JlYXRlU3RlbGxhcktleXBhaXJGcm9tUHViKHVzZXJLZXljaGFpbi5wdWIpO1xuICAgICAgY29uc3QgYmFja3VwS2V5cGFpciA9IFV0aWxzLmNyZWF0ZVN0ZWxsYXJLZXlwYWlyRnJvbVB1YihiYWNrdXBLZXljaGFpbi5wdWIpO1xuXG4gICAgICBrZXlwYWlyLnB1YmxpY0tleSgpLnNob3VsZC5lcXVhbCh1c2VyS2V5Y2hhaW4ucHViKTtcbiAgICAgIGJhY2t1cEtleXBhaXIucHVibGljS2V5KCkuc2hvdWxkLmVxdWFsKGJhY2t1cEtleWNoYWluLnB1Yik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIFN0ZWxsYXIga2V5cGFpciBnaXZlbiBhIHJhdyBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5cGFpciA9IFV0aWxzLmNyZWF0ZVN0ZWxsYXJLZXlwYWlyRnJvbVB1Yihyb290S2V5Y2hhaW4ucHViKTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleXBhaXIgPSBVdGlscy5jcmVhdGVTdGVsbGFyS2V5cGFpckZyb21QdWIoYmFja3VwUm9vdEtleWNoYWluLnB1Yik7XG5cbiAgICAgIGtleXBhaXIucHVibGljS2V5KCkuc2hvdWxkLmVxdWFsKHVzZXJLZXljaGFpbi5wdWIpO1xuICAgICAgYmFja3VwS2V5cGFpci5wdWJsaWNLZXkoKS5zaG91bGQuZXF1YWwoYmFja3VwS2V5Y2hhaW4ucHViKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgU3RlbGxhciBrZXlwYWlyIGdpdmVuIGEgU3RlbGxhciBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleXBhaXIgPSBVdGlscy5jcmVhdGVTdGVsbGFyS2V5cGFpckZyb21QcnYodXNlcktleWNoYWluLnBydik7XG4gICAgICBjb25zdCBiYWNrdXBLZXlwYWlyID0gVXRpbHMuY3JlYXRlU3RlbGxhcktleXBhaXJGcm9tUHJ2KGJhY2t1cEtleWNoYWluLnBydik7XG5cbiAgICAgIGtleXBhaXIucHVibGljS2V5KCkuc2hvdWxkLmVxdWFsKHVzZXJLZXljaGFpbi5wdWIpO1xuICAgICAgYmFja3VwS2V5cGFpci5wdWJsaWNLZXkoKS5zaG91bGQuZXF1YWwoYmFja3VwS2V5Y2hhaW4ucHViKTtcbiAgICAgIGtleXBhaXIuc2VjcmV0KCkuc2hvdWxkLmVxdWFsKHVzZXJLZXljaGFpbi5wcnYpO1xuICAgICAgYmFja3VwS2V5cGFpci5zZWNyZXQoKS5zaG91bGQuZXF1YWwoYmFja3VwS2V5Y2hhaW4ucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgU3RlbGxhciBrZXlwYWlyIGdpdmVuIGEgcmF3IHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5cGFpciA9IFV0aWxzLmNyZWF0ZVN0ZWxsYXJLZXlwYWlyRnJvbVBydihyb290S2V5Y2hhaW4ucHJ2KTtcbiAgICAgIGNvbnN0IGJhY2t1cEtleXBhaXIgPSBVdGlscy5jcmVhdGVTdGVsbGFyS2V5cGFpckZyb21QcnYoYmFja3VwUm9vdEtleWNoYWluLnBydik7XG5cbiAgICAgIGtleXBhaXIucHVibGljS2V5KCkuc2hvdWxkLmVxdWFsKHVzZXJLZXljaGFpbi5wdWIpO1xuICAgICAgYmFja3VwS2V5cGFpci5wdWJsaWNLZXkoKS5zaG91bGQuZXF1YWwoYmFja3VwS2V5Y2hhaW4ucHViKTtcbiAgICAgIGtleXBhaXIuc2VjcmV0KCkuc2hvdWxkLmVxdWFsKHVzZXJLZXljaGFpbi5wcnYpO1xuICAgICAgYmFja3VwS2V5cGFpci5zZWNyZXQoKS5zaG91bGQuZXF1YWwoYmFja3VwS2V5Y2hhaW4ucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBjcmVhdGUgYSBTdGVsbGFyIGtleXBhaXIgZ2l2ZW4gYW4gaW52YWxpZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgLy8gbm9uIEctcHJlZml4ZWQsIHNvIHRoaXMgc2hvdWxkIGZhaWwgd2l0aCBpbnZhbGlkIHJvb3Qga2V5XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IFV0aWxzLmNyZWF0ZVN0ZWxsYXJLZXlwYWlyRnJvbVB1YignaW52YWxpZCcpLCAvRXJyb3I6IEludmFsaWQgcm9vdCBwdWJsaWMga2V5Lyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZhaWwgdG8gY3JlYXRlIGEgU3RlbGxhciBrZXlwYWlyIGdpdmVuIGFuIGludmFsaWQgRy1wcmVmaXhlZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBVdGlscy5jcmVhdGVTdGVsbGFyS2V5cGFpckZyb21QdWIoJ0dJTlZBTElEJyksIC9FcnJvcjogSW52YWxpZCBTdGVsbGFyIHB1YmxpYyBrZXkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBjcmVhdGUgYSBTdGVsbGFyIGtleXBhaXIgZ2l2ZW4gYW4gaW52YWxpZCBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIC8vIG5vbiBTLXByZWZpeGVkLCBzbyB0aGlzIHNob3VsZCBmYWlsIHdpdGggaW52YWxpZCByb290IGtleVxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBVdGlscy5jcmVhdGVTdGVsbGFyS2V5cGFpckZyb21QcnYoJ2ludmFsaWQnKSwgL0Vycm9yOiBJbnZhbGlkIHJvb3QgcHJpdmF0ZSBrZXkvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmFpbCB0byBjcmVhdGUgYSBTdGVsbGFyIGtleXBhaXIgZ2l2ZW4gYW4gaW52YWxpZCBTLXByZWZpeGVkIHByaXZhdGUga2V5JywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBVdGlscy5jcmVhdGVTdGVsbGFyS2V5cGFpckZyb21QcnYoJ1NJTlZBTElEJyksIC9FcnJvcjogSW52YWxpZCBTdGVsbGFyIHByaXZhdGUga2V5Lyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=

Выполнить команду


Для локальной разработки. Не используйте в интернете!