// Public npm libraries. import assert from 'assert' import { Buffer } from 'safe-buffer' // Mocks import { createRequire } from 'module' // Unit under test (uut) import BCHJS from '../../src/bch-js.js' const require = createRequire(import.meta.url) const fixtures = require('./fixtures/ecpair.json') // const bchjs = new BCHJS() let bchjs describe('#ECPair', () => { beforeEach(() => { bchjs = new BCHJS() }) describe('#fromWIF', () => { fixtures.fromWIF.forEach(fixture => { it(`should create ECPair from WIF ${fixture.privateKeyWIF}`, () => { const ecpair = bchjs.ECPair.fromWIF(fixture.privateKeyWIF) assert.equal(typeof ecpair, 'object') }) it(`should get ${fixture.legacy} legacy address`, () => { const legacy = bchjs.ECPair.fromWIF(fixture.privateKeyWIF) assert.equal(bchjs.HDNode.toLegacyAddress(legacy), fixture.legacy) }) it(`should get ${fixture.cashAddr} cash address`, () => { const cashAddr = bchjs.ECPair.fromWIF(fixture.privateKeyWIF) assert.equal(bchjs.HDNode.toCashAddress(cashAddr), fixture.cashAddr) }) it(`should get ${fixture.regtestAddr} cash address`, () => { const cashAddr = bchjs.ECPair.fromWIF(fixture.privateKeyWIF) assert.equal( bchjs.HDNode.toCashAddress(cashAddr, true), fixture.regtestAddr ) }) }) }) describe('#toWIF', () => { fixtures.toWIF.forEach(fixture => { it(`should get WIF ${fixture.privateKeyWIF} from ECPair`, () => { const ecpair = bchjs.ECPair.fromWIF(fixture.privateKeyWIF) const wif = bchjs.ECPair.toWIF(ecpair) assert.equal(wif, fixture.privateKeyWIF) }) }) }) describe('#fromPublicKey', () => { fixtures.fromPublicKey.forEach(fixture => { it('should create ECPair from public key buffer', () => { const ecpair = bchjs.ECPair.fromPublicKey( Buffer.from(fixture.pubkeyHex, 'hex') ) assert.equal(typeof ecpair, 'object') }) it(`should get ${fixture.legacy} legacy address`, () => { const ecpair = bchjs.ECPair.fromPublicKey( Buffer.from(fixture.pubkeyHex, 'hex') ) assert.equal(bchjs.HDNode.toLegacyAddress(ecpair), fixture.legacy) }) it(`should get ${fixture.cashAddr} cash address`, () => { const ecpair = bchjs.ECPair.fromPublicKey( Buffer.from(fixture.pubkeyHex, 'hex') ) assert.equal(bchjs.HDNode.toCashAddress(ecpair), fixture.cashAddr) }) it(`should get ${fixture.regtestAddr} cash address`, () => { const ecpair = bchjs.ECPair.fromPublicKey( Buffer.from(fixture.pubkeyHex, 'hex') ) assert.equal( bchjs.HDNode.toCashAddress(ecpair, true), fixture.regtestAddr ) }) }) }) describe('#toPublicKey', () => { fixtures.toPublicKey.forEach(fixture => { it('should create a public key buffer from an ECPair', () => { const ecpair = bchjs.ECPair.fromPublicKey( Buffer.from(fixture.pubkeyHex, 'hex') ) const pubkeyBuffer = bchjs.ECPair.toPublicKey(ecpair) assert.equal(typeof pubkeyBuffer, 'object') }) }) }) describe('#toLegacyAddress', () => { fixtures.toLegacyAddress.forEach(fixture => { it(`should create legacy address ${fixture.legacy} from an ECPair`, () => { const ecpair = bchjs.ECPair.fromWIF(fixture.privateKeyWIF) const legacyAddress = bchjs.ECPair.toLegacyAddress(ecpair) assert.equal(legacyAddress, fixture.legacy) }) }) }) describe('#toCashAddress', () => { fixtures.toCashAddress.forEach(fixture => { it(`should create cash address ${fixture.cashAddr} from an ECPair`, () => { const ecpair = bchjs.ECPair.fromWIF(fixture.privateKeyWIF) const cashAddr = bchjs.ECPair.toCashAddress(ecpair) assert.equal(cashAddr, fixture.cashAddr) }) }) fixtures.toCashAddress.forEach(fixture => { it(`should create regtest cash address ${fixture.regtestAddr} from an ECPair`, () => { const ecpair = bchjs.ECPair.fromWIF(fixture.privateKeyWIF) const regtestAddr = bchjs.ECPair.toCashAddress(ecpair, true) assert.equal(regtestAddr, fixture.regtestAddr) }) }) }) describe('#sign', () => { fixtures.sign.forEach(fixture => { it('should sign 32 byte hash buffer', () => { const ecpair = bchjs.ECPair.fromWIF(fixture.privateKeyWIF) const buf = Buffer.from(bchjs.Crypto.sha256(fixture.data), 'hex') const signatureBuf = bchjs.ECPair.sign(ecpair, buf) assert.equal(typeof signatureBuf, 'object') }) }) }) describe('#verify', () => { fixtures.verify.forEach(fixture => { it('should verify signed 32 byte hash buffer', () => { const ecpair1 = bchjs.ECPair.fromWIF(fixture.privateKeyWIF1) // const ecpair2 = bchjs.ECPair.fromWIF(fixture.privateKeyWIF2) const buf = Buffer.from(bchjs.Crypto.sha256(fixture.data), 'hex') const signature = bchjs.ECPair.sign(ecpair1, buf) const verify = bchjs.ECPair.verify(ecpair1, buf, signature) assert.equal(verify, true) }) }) }) })