PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-eth/test/unit
Просмотр файла: keyPair.ts
import assert from 'assert';
import should from 'should';
import { KeyPair } from '../../src';
import * as nacl from 'tweetnacl';
describe('Eth KeyPair', function () {
// these are all encodings of the same key so the test suite will show that they we can interchange between them
const xprv =
'xprv9s21ZrQH143K3D8TXfvAJgHVfTEeQNW5Ys9wZtnUZkqPzFzSjbEJrWC1vZ4GnXCvR7rQL2UFX3RSuYeU9MrERm1XBvACow7c36vnz5iYyj2';
const xpub =
'xpub661MyMwAqRbcFhCvdhTAfpEEDV58oqDvv65YNHC686NNs4KbH8YZQJWVmrfbve7aAVHzxw8bKFxA7MLeDK6BbLfkE3bqkvHLPgaGHHtYGeY';
const prv = '82A34E3867EA7EA4E67E27865D500AE84E98D07AB1BAB06526F0A5A5FDCC3EBA';
const pub = '03D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A8275';
const uncompressedPub =
'04D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A827503E948A2FDBF74A981D4E0054F10EDA7042C2D469F44473D3C7791E0E326E355';
const address = '0xeb317b9f2e0891d66c061ddc3f5ee7ed42d70a44';
const invalidPrivateKeyErrorMessage = 'Unsupported private key';
describe('should create a KeyPair', function () {
it('from an xpub', () => {
const keyPair = new KeyPair({ pub: xpub });
const defaultKeys = keyPair.getKeys();
should.not.exist(defaultKeys.prv);
defaultKeys.pub.should.equal('03D63D9FD9FD772A989C5B90EDB37716406356E98273E5F98FE07652247A3A8275');
const extendedKeys = keyPair.getExtendedKeys();
should.not.exist(extendedKeys.xprv);
extendedKeys.xpub.should.equal(xpub);
});
it('from an xprv', () => {
const keyPair = new KeyPair({ prv: xprv });
const defaultKeys = keyPair.getKeys();
defaultKeys.prv!.should.equal(prv);
defaultKeys.pub.should.equal(pub);
const extendedKeys = keyPair.getExtendedKeys();
extendedKeys.xprv!.should.equal(xprv);
extendedKeys.xpub.should.equal(xpub);
});
it('from an uncompressed public key', () => {
const keyPair = new KeyPair({ pub: uncompressedPub });
const defaultKeys = keyPair.getKeys();
should.not.exist(defaultKeys.prv);
defaultKeys.pub.should.equal(uncompressedPub);
assert.throws(() => keyPair.getExtendedKeys());
});
it('from a compressed public key', () => {
const keyPair = new KeyPair({ pub });
const defaultKeys = keyPair.getKeys();
should.not.exist(defaultKeys.prv);
defaultKeys.pub.should.equal(uncompressedPub);
assert.throws(() => keyPair.getExtendedKeys());
});
it('from a raw private key', () => {
const keyPair = new KeyPair({ prv });
const defaultKeys = keyPair.getKeys();
defaultKeys.prv!.should.equal(prv);
defaultKeys.pub.should.equal(uncompressedPub);
assert.throws(() => keyPair.getExtendedKeys());
});
it('from an empty value', () => {
const keyPair = new KeyPair();
should.exists(keyPair.getKeys().prv);
should.exists(keyPair.getKeys().pub);
should.equal(keyPair.getKeys().prv!.length, 64);
should.equal(keyPair.getKeys().pub.length, 66);
});
it('from seed', () => {
const seed = nacl.randomBytes(64);
const keyPair = new KeyPair({ seed: Buffer.from(seed) });
keyPair.getKeys().should.have.property('pub');
keyPair.getKeys().should.have.property('prv');
});
});
describe('should fail to create a KeyPair', function () {
it('from an invalid public key', () => {
const source = {
pub: '01D63D',
};
assert.throws(() => new KeyPair(source));
});
it('from an invalid private key', () => {
const source = {
prv: '82A34E',
};
assert.throws(() => new KeyPair(source));
assert.throws(
() => new KeyPair({ prv: prv + pub }),
(e: any) => e.message === invalidPrivateKeyErrorMessage
);
});
});
describe('getAddress', function () {
it('should get an address from xprv', () => {
const keyPair = new KeyPair({ prv: xprv });
const calculatedAddress = keyPair.getAddress();
calculatedAddress.should.equal(address);
});
it('should get an address from xpub', () => {
const keyPair = new KeyPair({ pub: xpub });
const calculatedAddress = keyPair.getAddress();
calculatedAddress.should.equal(address);
});
it('should get an address from prv', () => {
const keyPair = new KeyPair({ prv });
const calculatedAddress = keyPair.getAddress();
calculatedAddress.should.equal(address);
});
it('should get an address from pub', () => {
const keyPair = new KeyPair({ pub });
const calculatedAddress = keyPair.getAddress();
calculatedAddress.should.equal(address);
});
it('should get an address from uncompressed pub', () => {
const keyPair = new KeyPair({ pub: uncompressedPub });
const calculatedAddress = keyPair.getAddress();
calculatedAddress.should.equal(address);
});
});
describe('getExtendedKeys', function () {
it('should get the keys in extended format from xprv', () => {
const keyPair = new KeyPair({ prv: xprv });
const { xprv: calculatedXprv, xpub: calculatedXpub } = keyPair.getExtendedKeys();
calculatedXprv!.should.equal(xprv);
calculatedXpub.should.equal(xpub);
});
it('should get the keys in extended format from xpub', () => {
const keyPair = new KeyPair({ pub: xpub });
const { xprv: calculatedXprv, xpub: calculatedXpub } = keyPair.getExtendedKeys();
should.not.exist(calculatedXprv);
calculatedXpub.should.equal(xpub);
});
it('should not be able to get keys from prv', () => {
const keyPair = new KeyPair({ prv });
assert.throws(() => keyPair.getExtendedKeys());
});
it('should get the keys in extended format from pub', () => {
const keyPair = new KeyPair({ pub });
assert.throws(() => keyPair.getExtendedKeys());
});
it('should get the keys in extended format from uncompressed pub', () => {
const keyPair = new KeyPair({ pub: uncompressedPub });
assert.throws(() => keyPair.getExtendedKeys());
});
});
});
Выполнить команду
Для локальной разработки. Не используйте в интернете!