PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-rune/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 sdk_core_1 = require("@bitgo/sdk-core");
const assert_1 = __importDefault(require("assert"));
const should_1 = __importDefault(require("should"));
const src_1 = require("../../src");
const rune_1 = require("../resources/rune");
describe('Rune Key Pair', () => {
describe('should create a valid KeyPair', () => {
it('from an empty value', () => {
const keyPairObj = new src_1.KeyPair();
const keys = keyPairObj.getKeys();
should_1.default.exists(keys.prv);
should_1.default.exists(keys.pub);
should_1.default.equal(keys.prv?.length, 64);
should_1.default.equal(keys.pub.length, 66);
const extendedKeys = keyPairObj.getExtendedKeys();
should_1.default.exists(extendedKeys.xprv);
should_1.default.exists(extendedKeys.xpub);
});
it('from a private key', () => {
const privateKey = rune_1.TEST_ACCOUNT.privateKey;
const keyPairObj = new src_1.KeyPair({ prv: privateKey });
const keys = keyPairObj.getKeys();
should_1.default.exists(keys.prv);
should_1.default.exists(keys.pub);
should_1.default.equal(keys.prv, rune_1.TEST_ACCOUNT.privateKey);
should_1.default.equal(keys.pub, rune_1.TEST_ACCOUNT.compressedPublicKey);
should_1.default.equal(keyPairObj.getAddress(), rune_1.TEST_ACCOUNT.pubAddress);
should_1.default.equal(keyPairObj.getAddress(sdk_core_1.AddressFormat.testnet), rune_1.TEST_ACCOUNT.testnetPubAddress);
assert_1.default.throws(() => keyPairObj.getExtendedKeys());
});
it('from a compressed public key', () => {
const publicKey = rune_1.TEST_ACCOUNT.compressedPublicKey;
const keyPairObj = new src_1.KeyPair({ pub: publicKey });
const keys = keyPairObj.getKeys();
should_1.default.not.exist(keys.prv);
should_1.default.exists(keys.pub);
should_1.default.equal(keys.pub, rune_1.TEST_ACCOUNT.compressedPublicKey);
assert_1.default.throws(() => keyPairObj.getExtendedKeys());
});
it('from an uncompressed public key', () => {
// Input is uncompressed, but we output the compressed key to keep
// parity with coreum network expectations.
const publicKey = rune_1.TEST_ACCOUNT.uncompressedPublicKey;
const keyPairObj = new src_1.KeyPair({ pub: publicKey });
const keys = keyPairObj.getKeys();
should_1.default.not.exist(keys.prv);
should_1.default.exists(keys.pub);
should_1.default.notEqual(keys.pub, publicKey);
should_1.default.equal(keys.pub, rune_1.TEST_ACCOUNT.compressedPublicKey);
assert_1.default.throws(() => keyPairObj.getExtendedKeys());
});
});
describe('should fail to create a KeyPair', () => {
it('from an invalid privateKey', () => {
assert_1.default.throws(() => new src_1.KeyPair({ prv: '' }), (e) => e.message === 'Unsupported private key');
});
it('from an invalid publicKey', () => {
assert_1.default.throws(() => new src_1.KeyPair({ pub: '' }), (e) => e.message.startsWith('Unsupported public key'));
});
it('from an undefined seed', () => {
const undefinedBuffer = undefined;
assert_1.default.throws(() => new src_1.KeyPair({ seed: undefinedBuffer }), (e) => e.message.startsWith('Invalid key pair options'));
});
it('from an undefined private key', () => {
const undefinedStr = undefined;
assert_1.default.throws(() => new src_1.KeyPair({ prv: undefinedStr }), (e) => e.message.startsWith('Invalid key pair options'));
});
it('from an undefined public key', () => {
const undefinedStr = undefined;
assert_1.default.throws(() => new src_1.KeyPair({ pub: undefinedStr }), (e) => e.message.startsWith('Invalid key pair options'));
});
});
describe('should get unique address', () => {
it('from a private key', () => {
const keyPair = new src_1.KeyPair({ prv: rune_1.TEST_ACCOUNT.privateKey });
should_1.default.equal(keyPair.getAddress(), rune_1.TEST_ACCOUNT.pubAddress);
});
it('from a compressed public key', () => {
const keyPair = new src_1.KeyPair({ pub: rune_1.TEST_ACCOUNT.compressedPublicKey });
should_1.default.equal(keyPair.getAddress(), rune_1.TEST_ACCOUNT.pubAddress);
});
it('should be different for different public keys', () => {
const keyPairOne = new src_1.KeyPair({ pub: rune_1.TEST_ACCOUNT.compressedPublicKey });
const keyPairTwo = new src_1.KeyPair({ pub: rune_1.TEST_ACCOUNT.compressedPublicKeyTwo });
should_1.default.notEqual(keyPairOne.getAddress(), keyPairTwo.getAddress());
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9rZXlQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOENBQWdEO0FBQ2hELG9EQUE0QjtBQUM1QixvREFBNEI7QUFDNUIsbUNBQW9DO0FBQ3BDLDRDQUFpRDtBQUVqRCxRQUFRLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtJQUM3QixRQUFRLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1FBQzdDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLEVBQUU7WUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxhQUFPLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLGdCQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUVsQyxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbEQsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLGdCQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLEVBQUU7WUFDNUIsTUFBTSxVQUFVLEdBQUcsbUJBQVksQ0FBQyxVQUFVLENBQUM7WUFDM0MsTUFBTSxVQUFVLEdB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QUMsRUFBRSxHQUFHLEVBQUUsbUJBQVksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7WUFDN0UsZ0JBQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFkZHJlc3NGb3JtYXQgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBURVNUX0FDQ09VTlQgfSBmcm9tICcuLi9yZXNvdXJjZXMvcnVuZSc7XG5cbmRlc2NyaWJlKCdSdW5lIEtleSBQYWlyJywgKCkgPT4ge1xuICBkZXNjcmliZSgnc2hvdWxkIGNyZWF0ZSBhIHZhbGlkIEtleVBhaXInLCAoKSA9PiB7XG4gICAgaXQoJ2Zyb20gYW4gZW1wdHkgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBrZXlQYWlyT2JqID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyT2JqLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5leGlzdHMoa2V5cy5wcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0cyhrZXlzLnB1Yik7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5cy5wcnY/Lmxlbmd0aCwgNjQpO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleXMucHViLmxlbmd0aCwgNjYpO1xuXG4gICAgICBjb25zdCBleHRlbmRlZEtleXMgPSBrZXlQYWlyT2JqLmdldEV4dGVuZGVkS2V5cygpO1xuICAgICAgc2hvdWxkLmV4aXN0cyhleHRlbmRlZEtleXMueHBydik7XG4gICAgICBzaG91bGQuZXhpc3RzKGV4dGVuZGVkS2V5cy54cHViKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGEgcHJpdmF0ZSBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcml2YXRlS2V5ID0gVEVTVF9BQ0NPVU5ULnByaXZhdGVLZXk7XG4gICAgICBjb25zdCBrZXlQYWlyT2JqID0gbmV3IEtleVBhaXIoeyBwcnY6IHByaXZhdGVLZXkgfSk7XG4gICAgICBjb25zdCBrZXlzID0ga2V5UGFpck9iai5nZXRLZXlzKCk7XG4gICAgICBzaG91bGQuZXhpc3RzKGtleXMucHJ2KTtcbiAgICAgIHNob3VsZC5leGlzdHMoa2V5cy5wdWIpO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleXMucHJ2LCBURVNUX0FDQ09VTlQucHJpdmF0ZUtleSk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5cy5wdWIsIFRFU1RfQUNDT1VOVC5jb21wcmVzc2VkUHVibGljS2V5KTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlQYWlyT2JqLmdldEFkZHJlc3MoKSwgVEVTVF9BQ0NPVU5ULnB1YkFkZHJlc3MpO1xuICAgICAgc2hvdWxkLmVxdWFsKGtleVBhaXJPYmouZ2V0QWRkcmVzcyhBZGRyZXNzRm9ybWF0LnRlc3RuZXQpLCBURVNUX0FDQ09VTlQudGVzdG5ldFB1YkFkZHJlc3MpO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXJPYmouZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYSBjb21wcmVzc2VkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBwdWJsaWNLZXkgPSBURVNUX0FDQ09VTlQuY29tcHJlc3NlZFB1YmxpY0tleTtcbiAgICAgIGNvbnN0IGtleVBhaXJPYmogPSBuZXcgS2V5UGFpcih7IHB1YjogcHVibGljS2V5IH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtleVBhaXJPYmouZ2V0S2V5cygpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChrZXlzLnBydik7XG4gICAgICBzaG91bGQuZXhpc3RzKGtleXMucHViKTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlzLnB1YiwgVEVTVF9BQ0NPVU5ULmNvbXByZXNzZWRQdWJsaWNLZXkpO1xuXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IGtleVBhaXJPYmouZ2V0RXh0ZW5kZWRLZXlzKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4gdW5jb21wcmVzc2VkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICAvLyBJbnB1dCBpcyB1bmNvbXByZXNzZWQsIGJ1dCB3ZSBvdXRwdXQgdGhlIGNvbXByZXNzZWQga2V5IHRvIGtlZXBcbiAgICAgIC8vIHBhcml0eSB3aXRoIGNvcmV1bSBuZXR3b3JrIGV4cGVjdGF0aW9ucy5cbiAgICAgIGNvbnN0IHB1YmxpY0tleSA9IFRFU1RfQUNDT1VOVC51bmNvbXByZXNzZWRQdWJsaWNLZXk7XG4gICAgICBjb25zdCBrZXlQYWlyT2JqID0gbmV3IEtleVBhaXIoeyBwdWI6IHB1YmxpY0tleSB9KTtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyT2JqLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5ub3QuZXhpc3Qoa2V5cy5wcnYpO1xuICAgICAgc2hvdWxkLmV4aXN0cyhrZXlzLnB1Yik7XG4gICAgICBzaG91bGQubm90RXF1YWwoa2V5cy5wdWIsIHB1YmxpY0tleSk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5cy5wdWIsIFRFU1RfQUNDT1VOVC5jb21wcmVzc2VkUHVibGljS2V5KTtcblxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiBrZXlQYWlyT2JqLmdldEV4dGVuZGVkS2V5cygpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBmYWlsIHRvIGNyZWF0ZSBhIEtleVBhaXInLCAoKSA9PiB7XG4gICAgaXQoJ2Zyb20gYW4gaW52YWxpZCBwcml2YXRlS2V5JywgKCkgPT4ge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gbmV3IEtleVBhaXIoeyBwcnY6ICcnIH0pLFxuICAgICAgICAoZTogYW55KSA9PiBlLm1lc3NhZ2UgPT09ICdVbnN1cHBvcnRlZCBwcml2YXRlIGtleSdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnZnJvbSBhbiBpbnZhbGlkIHB1YmxpY0tleScsICgpID0+IHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IG5ldyBLZXlQYWlyKHsgcHViOiAnJyB9KSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ1Vuc3VwcG9ydGVkIHB1YmxpYyBrZXknKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGFuIHVuZGVmaW5lZCBzZWVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgdW5kZWZpbmVkQnVmZmVyID0gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgQnVmZmVyO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gbmV3IEtleVBhaXIoeyBzZWVkOiB1bmRlZmluZWRCdWZmZXIgfSksXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZS5zdGFydHNXaXRoKCdJbnZhbGlkIGtleSBwYWlyIG9wdGlvbnMnKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGFuIHVuZGVmaW5lZCBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IHVuZGVmaW5lZFN0cjogc3RyaW5nID0gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgc3RyaW5nO1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gbmV3IEtleVBhaXIoeyBwcnY6IHVuZGVmaW5lZFN0ciB9KSxcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXNzYWdlLnN0YXJ0c1dpdGgoJ0ludmFsaWQga2V5IHBhaXIgb3B0aW9ucycpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Zyb20gYW4gdW5kZWZpbmVkIHB1YmxpYyBrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCB1bmRlZmluZWRTdHI6IHN0cmluZyA9IHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIHN0cmluZztcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IG5ldyBLZXlQYWlyKHsgcHViOiB1bmRlZmluZWRTdHIgfSksXG4gICAgICAgIChlOiBhbnkpID0+IGUubWVzc2FnZS5zdGFydHNXaXRoKCdJbnZhbGlkIGtleSBwYWlyIG9wdGlvbnMnKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nob3VsZCBnZXQgdW5pcXVlIGFkZHJlc3MnLCAoKSA9PiB7XG4gICAgaXQoJ2Zyb20gYSBwcml2YXRlIGtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHBydjogVEVTVF9BQ0NPVU5ULnByaXZhdGVLZXkgfSk7XG4gICAgICBzaG91bGQuZXF1YWwoa2V5UGFpci5nZXRBZGRyZXNzKCksIFRFU1RfQUNDT1VOVC5wdWJBZGRyZXNzKTtcbiAgICB9KTtcblxuICAgIGl0KCdmcm9tIGEgY29tcHJlc3NlZCBwdWJsaWMga2V5JywgKCkgPT4ge1xuICAgICAgY29uc3Qga2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiBURVNUX0FDQ09VTlQuY29tcHJlc3NlZFB1YmxpY0tleSB9KTtcbiAgICAgIHNob3VsZC5lcXVhbChrZXlQYWlyLmdldEFkZHJlc3MoKSwgVEVTVF9BQ0NPVU5ULnB1YkFkZHJlc3MpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBiZSBkaWZmZXJlbnQgZm9yIGRpZmZlcmVudCBwdWJsaWMga2V5cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGtleVBhaXJPbmUgPSBuZXcgS2V5UGFpcih7IHB1YjogVEVTVF9BQ0NPVU5ULmNvbXByZXNzZWRQdWJsaWNLZXkgfSk7XG4gICAgICBjb25zdCBrZXlQYWlyVHdvID0gbmV3IEtleVBhaXIoeyBwdWI6IFRFU1RfQUNDT1VOVC5jb21wcmVzc2VkUHVibGljS2V5VHdvIH0pO1xuICAgICAgc2hvdWxkLm5vdEVxdWFsKGtleVBhaXJPbmUuZ2V0QWRkcmVzcygpLCBrZXlQYWlyVHdvLmdldEFkZHJlc3MoKSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=Выполнить команду
Для локальной разработки. Не используйте в интернете!