diff --git a/src/buffer.js b/src/bufferutils.js similarity index 100% rename from src/buffer.js rename to src/bufferutils.js diff --git a/src/eckey.js b/src/eckey.js index fa238a9..66982e3 100644 --- a/src/eckey.js +++ b/src/eckey.js @@ -4,15 +4,12 @@ var ecdsa = require('./ecdsa') var networks = require('./networks') var secureRandom = require('secure-random') -var Address = require('./address') -var crypto = require('./crypto') +var BigInteger = require('bigi') +var ECPubKey = require('./ecpubkey') var sec = require('./sec') var ecparams = sec('secp256k1') -var BigInteger = require('bigi') -var ECPointFp = require('./ec').ECPointFp - function ECKey(D, compressed) { assert(D.compareTo(BigInteger.ZERO) > 0, 'Private key must be greater than 0') assert(D.compareTo(ecparams.getN()) < 0, 'Private key must be less than the curve order') @@ -31,6 +28,7 @@ ECKey.fromBuffer = function(buffer, compressed) { var D = BigInteger.fromBuffer(buffer) return new ECKey(D, compressed) } + ECKey.fromHex = function(hex, compressed) { return ECKey.fromBuffer(new Buffer(hex, 'hex'), compressed) } @@ -67,6 +65,7 @@ ECKey.prototype.sign = function(hash) { ECKey.prototype.toBuffer = function() { return this.D.toBuffer(32) } + ECKey.prototype.toHex = function() { return this.toBuffer().toString('hex') } @@ -82,53 +81,4 @@ ECKey.prototype.toWIF = function(version) { return base58check.encode(buffer, version) } -////////////////////////////////////////////////////// - -function ECPubKey(Q, compressed) { - assert(Q instanceof ECPointFp, 'Q must be an ECPointFP') - - if (compressed == undefined) compressed = true - assert.strictEqual(typeof compressed, 'boolean', 'Invalid compression flag') - - this.compressed = compressed - this.Q = Q -} - -// Static constructors -ECPubKey.fromBuffer = function(buffer) { - var type = buffer.readUInt8(0) - assert(type >= 0x02 || type <= 0x04, 'Invalid public key') - - var compressed = (type !== 0x04) - assert.strictEqual(buffer.length, compressed ? 33 : 65, 'Invalid public key') - - var Q = ECPointFp.decodeFrom(ecparams.getCurve(), buffer) - return new ECPubKey(Q, compressed) -} -ECPubKey.fromHex = function(hex) { - return ECPubKey.fromBuffer(new Buffer(hex, 'hex')) -} - -// Operations -ECPubKey.prototype.verify = function(hash, sig) { - return ecdsa.verify(hash, sig, this.Q) -} - -ECPubKey.prototype.getAddress = function(version) { - version = version || networks.bitcoin.pubKeyHash - - return new Address(crypto.hash160(this.toBuffer()), version) -} - -// Export functions -ECPubKey.prototype.toBuffer = function() { - return new Buffer(this.Q.getEncoded(this.compressed)) -} -ECPubKey.prototype.toHex = function() { - return this.toBuffer().toString('hex') -} - -module.exports = { - ECKey: ECKey, - ECPubKey: ECPubKey -} +module.exports = ECKey diff --git a/src/ecpubkey.js b/src/ecpubkey.js new file mode 100644 index 0000000..8bcf984 --- /dev/null +++ b/src/ecpubkey.js @@ -0,0 +1,58 @@ +var assert = require('assert') +var crypto = require('./crypto') +var ecdsa = require('./ecdsa') +var networks = require('./networks') + +var Address = require('./address') +var ECPointFp = require('./ec').ECPointFp + +var sec = require('./sec') +var ecparams = sec('secp256k1') + +function ECPubKey(Q, compressed) { + assert(Q instanceof ECPointFp, 'Q must be an ECPointFP') + + if (compressed == undefined) compressed = true + assert.strictEqual(typeof compressed, 'boolean', 'Invalid compression flag') + + this.compressed = compressed + this.Q = Q +} + +// Static constructors +ECPubKey.fromBuffer = function(buffer) { + var type = buffer.readUInt8(0) + assert(type >= 0x02 || type <= 0x04, 'Invalid public key') + + var compressed = (type !== 0x04) + assert.strictEqual(buffer.length, compressed ? 33 : 65, 'Invalid public key') + + var Q = ECPointFp.decodeFrom(ecparams.getCurve(), buffer) + return new ECPubKey(Q, compressed) +} + +ECPubKey.fromHex = function(hex) { + return ECPubKey.fromBuffer(new Buffer(hex, 'hex')) +} + +// Operations +ECPubKey.prototype.getAddress = function(version) { + version = version || networks.bitcoin.pubKeyHash + + return new Address(crypto.hash160(this.toBuffer()), version) +} + +ECPubKey.prototype.verify = function(hash, sig) { + return ecdsa.verify(hash, sig, this.Q) +} + +// Export functions +ECPubKey.prototype.toBuffer = function() { + return new Buffer(this.Q.getEncoded(this.compressed)) +} + +ECPubKey.prototype.toHex = function() { + return this.toBuffer().toString('hex') +} + +module.exports = ECPubKey diff --git a/src/hdwallet.js b/src/hdwallet.js index c0d68db..8e8f747 100644 --- a/src/hdwallet.js +++ b/src/hdwallet.js @@ -5,8 +5,8 @@ var convert = require('./convert') var Address = require('./address') var BigInteger = require('bigi') var crypto = require('./crypto') -var ECKey = require('./eckey').ECKey -var ECPubKey = require('./eckey').ECPubKey +var ECKey = require('./eckey') +var ECPubKey = require('./ecpubkey') var networks = require('./networks') var sec = require('./sec') diff --git a/src/index.js b/src/index.js index 484342d..274f1aa 100644 --- a/src/index.js +++ b/src/index.js @@ -6,14 +6,14 @@ module.exports = { Address: require('./address'), base58: require('./base58'), base58check: require('./base58check'), - BufferExt: require('./buffer'), + bufferutils: require('./bufferutils'), convert: require('./convert'), crypto: require('./crypto'), ec: ec, ecdsa: require('./ecdsa'), - ECKey: Key.ECKey, + ECKey: require('./eckey'), ECPointFp: ec.ECPointFp, - ECPubKey: Key.ECPubKey, + ECPubKey: require('./ecpubkey'), Message: require('./message'), Opcode: require('./opcode'), HDWallet: require('./hdwallet'), diff --git a/src/message.js b/src/message.js index c31755e..526c665 100644 --- a/src/message.js +++ b/src/message.js @@ -1,18 +1,17 @@ /// Implements Bitcoin's feature for signing arbitrary messages. - var Address = require('./address') -var BufferExt = require('./buffer') +var bufferutils = require('./bufferutils') var crypto = require('./crypto') var ecdsa = require('./ecdsa') -var ECPubKey = require('./eckey').ECPubKey +var ECPubKey = require('./ecpubkey') // FIXME: incompatible with other networks (Litecoin etc) var MAGIC_PREFIX = new Buffer('\x18Bitcoin Signed Message:\n') function magicHash(message) { var messageBuffer = new Buffer(message) - var lengthBuffer = new Buffer(BufferExt.varIntSize(messageBuffer.length)) - BufferExt.writeVarInt(lengthBuffer, messageBuffer.length, 0) + var lengthBuffer = new Buffer(bufferutils.varIntSize(messageBuffer.length)) + bufferutils.writeVarInt(lengthBuffer, messageBuffer.length, 0) var buffer = Buffer.concat([ MAGIC_PREFIX, lengthBuffer, messageBuffer diff --git a/src/transaction.js b/src/transaction.js index 6601ae9..b21f851 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -3,14 +3,14 @@ var assert = require('assert') var Address = require('./address') var BigInteger = require('bigi') -var BufferExt = require('./buffer') +var bufferutils = require('./bufferutils') var Script = require('./script') var convert = require('./convert') var crypto = require('./crypto') -var ECKey = require('./eckey').ECKey +var ECKey = require('./eckey') var ecdsa = require('./ecdsa') -var Transaction = function (doc) { +function Transaction(doc) { if (!(this instanceof Transaction)) { return new Transaction(doc) } this.version = 1 this.locktime = 0 @@ -122,17 +122,17 @@ Transaction.prototype.addOutput = function (address, value) { */ Transaction.prototype.serialize = function () { var txInSize = this.ins.reduce(function(a, x) { - return a + (40 + BufferExt.varIntSize(x.script.buffer.length) + x.script.buffer.length) + return a + (40 + bufferutils.varIntSize(x.script.buffer.length) + x.script.buffer.length) }, 0) var txOutSize = this.outs.reduce(function(a, x) { - return a + (8 + BufferExt.varIntSize(x.script.buffer.length) + x.script.buffer.length) + return a + (8 + bufferutils.varIntSize(x.script.buffer.length) + x.script.buffer.length) }, 0) var buffer = new Buffer( 8 + - BufferExt.varIntSize(this.ins.length) + - BufferExt.varIntSize(this.outs.length) + + bufferutils.varIntSize(this.ins.length) + + bufferutils.varIntSize(this.outs.length) + txInSize + txOutSize ) @@ -148,11 +148,11 @@ Transaction.prototype.serialize = function () { offset += 4 } function writeUInt64(i) { - BufferExt.writeUInt64LE(buffer, i, offset) + bufferutils.writeUInt64LE(buffer, i, offset) offset += 8 } function writeVarInt(i) { - var n = BufferExt.writeVarInt(buffer, i, offset) + var n = bufferutils.writeVarInt(buffer, i, offset) offset += n } @@ -294,12 +294,12 @@ Transaction.deserialize = function(buffer) { return i } function readUInt64() { - var i = BufferExt.readUInt64LE(buffer, offset) + var i = bufferutils.readUInt64LE(buffer, offset) offset += 8 return i } function readVarInt() { - var vi = BufferExt.readVarInt(buffer, offset) + var vi = bufferutils.readVarInt(buffer, offset) offset += vi.size return vi.number } diff --git a/test/address.js b/test/address.js index c276e87..0ec736f 100644 --- a/test/address.js +++ b/test/address.js @@ -1,7 +1,7 @@ var assert = require('assert') -var Address = require('..').Address -var networks = require('..').networks -var Script = require('..').Script +var Address = require('../src/address') +var networks = require('../src/networks') +var Script = require('../src/script') var b58fixtures = require('./fixtures/base58') var fixtures = require('./fixtures/address') diff --git a/test/base58.js b/test/base58.js index 93f2c1c..206425b 100644 --- a/test/base58.js +++ b/test/base58.js @@ -1,5 +1,5 @@ var assert = require('assert') -var base58 = require('../').base58 +var base58 = require('../src/base58') var fixtures = require('./fixtures/base58') function b2h(b) { return new Buffer(b).toString('hex') } diff --git a/test/base58check.js b/test/base58check.js index e255c85..a4940be 100644 --- a/test/base58check.js +++ b/test/base58check.js @@ -1,5 +1,5 @@ var assert = require('assert') -var base58check = require('../').base58check +var base58check = require('../src/base58check') var fixtures = require('./fixtures/base58check') function b2h(b) { return new Buffer(b).toString('hex') } diff --git a/test/buffer.js b/test/bufferutils.js similarity index 79% rename from test/buffer.js rename to test/bufferutils.js index 67eb296..382c8ff 100644 --- a/test/buffer.js +++ b/test/bufferutils.js @@ -1,14 +1,14 @@ var assert = require('assert') -var BufferExt = require('../').BufferExt +var bufferutils = require('../src/bufferutils') var fixtures = require('./fixtures/buffer.js') -describe('Buffer Extensions', function() { +describe('bufferutils', function() { describe('readUInt64LE', function() { it('matches test vectors', function() { fixtures.valid.forEach(function(f) { var buffer = new Buffer(f.hex64, 'hex') - var number = BufferExt.readUInt64LE(buffer, 0) + var number = bufferutils.readUInt64LE(buffer, 0) assert.equal(number, f.dec) }) @@ -19,7 +19,7 @@ describe('Buffer Extensions', function() { it('matches test vectors', function() { fixtures.valid.forEach(function(f) { var buffer = new Buffer(f.hexVI, 'hex') - var d = BufferExt.readVarInt(buffer, 0) + var d = bufferutils.readVarInt(buffer, 0) assert.equal(d.number, f.dec) assert.equal(d.size, buffer.length) @@ -31,7 +31,7 @@ describe('Buffer Extensions', function() { it('matches test vectors', function() { fixtures.valid.forEach(function(f) { var number = parseInt(f.dec) - var size = BufferExt.varIntSize(number) + var size = bufferutils.varIntSize(number) assert.equal(size, f.hexVI.length / 2) }) @@ -44,7 +44,7 @@ describe('Buffer Extensions', function() { var buffer = new Buffer(8) buffer.fill(0) - BufferExt.writeUInt64LE(buffer, f.dec, 0) + bufferutils.writeUInt64LE(buffer, f.dec, 0) assert.equal(buffer.toString('hex'), f.hex64) }) }) @@ -55,7 +55,7 @@ describe('Buffer Extensions', function() { var buffer = new Buffer(8) buffer.fill(0) - BufferExt.writeUInt64LE(buffer, f.dec, 0) + bufferutils.writeUInt64LE(buffer, f.dec, 0) }) }) }) @@ -67,7 +67,7 @@ describe('Buffer Extensions', function() { var buffer = new Buffer(9) buffer.fill(0) - var n = BufferExt.writeVarInt(buffer, f.dec, 0) + var n = bufferutils.writeVarInt(buffer, f.dec, 0) assert.equal(buffer.slice(0, n).toString('hex'), f.hexVI) }) }) @@ -78,7 +78,7 @@ describe('Buffer Extensions', function() { var buffer = new Buffer(9) buffer.fill(0) - BufferExt.writeVarInt(buffer, f.dec, 0) + bufferutils.writeVarInt(buffer, f.dec, 0) }) }) }) diff --git a/test/convert.js b/test/convert.js index 10abfff..7c94b4c 100644 --- a/test/convert.js +++ b/test/convert.js @@ -1,5 +1,5 @@ var assert = require('assert') -var convert = require('../').convert +var convert = require('../src/convert') describe('convert', function() { describe('byte array and word array conversions', function(){ diff --git a/test/crypto.js b/test/crypto.js index ff414d7..36ab9cc 100644 --- a/test/crypto.js +++ b/test/crypto.js @@ -1,13 +1,14 @@ var assert = require('assert') -var crypto = require('../').crypto -var fixture = require('./fixtures/crypto') +var crypto = require('../src/crypto') + +var fixtures = require('./fixtures/crypto') describe('Crypto', function() { describe('HASH160', function() { it('matches the test vector', function() { - fixture.before.hex.forEach(function(hex, i) { + fixtures.before.hex.forEach(function(hex, i) { var actual = crypto.hash160(new Buffer(hex, 'hex')).toString('hex') - var expected = fixture.after.hash160[i] + var expected = fixtures.after.hash160[i] assert.equal(actual, expected) }) @@ -16,9 +17,9 @@ describe('Crypto', function() { describe('HASH256', function() { it('matches the test vector', function() { - fixture.before.hex.forEach(function(hex, i) { + fixtures.before.hex.forEach(function(hex, i) { var actual = crypto.hash256(new Buffer(hex, 'hex')).toString('hex') - var expected = fixture.after.hash256[i] + var expected = fixtures.after.hash256[i] assert.equal(actual, expected) }) @@ -27,9 +28,9 @@ describe('Crypto', function() { describe('SHA1', function() { it('matches the test vector', function() { - fixture.before.hex.forEach(function(hex, i) { + fixtures.before.hex.forEach(function(hex, i) { var actual = crypto.sha1(new Buffer(hex, 'hex')).toString('hex') - var expected = fixture.after.sha1[i] + var expected = fixtures.after.sha1[i] assert.equal(actual, expected) }) @@ -38,9 +39,9 @@ describe('Crypto', function() { describe('SHA256', function() { it('matches the test vector', function() { - fixture.before.hex.forEach(function(hex, i) { + fixtures.before.hex.forEach(function(hex, i) { var actual = crypto.sha256(new Buffer(hex, 'hex')).toString('hex') - var expected = fixture.after.sha256[i] + var expected = fixtures.after.sha256[i] assert.equal(actual, expected) }) @@ -49,12 +50,12 @@ describe('Crypto', function() { describe('HMAC SHA512', function() { it('matches the test vector', function() { - fixture.before.hex.forEach(function(hex, i) { + fixtures.before.hex.forEach(function(hex, i) { var data = new Buffer(hex, 'hex') - var secret = new Buffer(fixture.after.hmacsha512.secret) + var secret = new Buffer(fixtures.after.hmacsha512.secret) var actual = crypto.HmacSHA512(data, secret) - var expected = fixture.after.hmacsha512.hash[i] + var expected = fixtures.after.hmacsha512.hash[i] assert.equal(actual.toString('hex'), expected) }) diff --git a/test/ec.js b/test/ec.js index c9fc3c8..af3e65d 100644 --- a/test/ec.js +++ b/test/ec.js @@ -1,10 +1,10 @@ var assert = require('assert') -var sec = require('../').sec +var sec = require('../src/sec') var ecparams = sec('secp256k1') var BigInteger = require('bigi') -var ECPointFp = require('../').ECPointFp +var ECPointFp = require('../src/ec').ECPointFp describe('ec', function() { describe('ECPointFp', function() { diff --git a/test/ecdsa.js b/test/ecdsa.js index fedeb6c..2e9a028 100644 --- a/test/ecdsa.js +++ b/test/ecdsa.js @@ -1,13 +1,14 @@ var assert = require('assert') -var crypto = require('../').crypto -var ecdsa = require('..').ecdsa -var sec = require('..').sec +var crypto = require('../src/crypto') +var ecdsa = require('../src/ecdsa') + +var sec = require('../src/sec') var ecparams = sec("secp256k1") var BigInteger = require('bigi') -var ECKey = require('..').ECKey -var ECPubKey = require('..').ECPubKey -var Message = require('..').Message +var ECKey = require('../src/eckey') +var ECPubKey = require('../src/ecpubkey') +var Message = require('../src/message') var fixtures = require('./fixtures/ecdsa.js') diff --git a/test/eckey.js b/test/eckey.js index 76a7d32..2ef218b 100644 --- a/test/eckey.js +++ b/test/eckey.js @@ -1,8 +1,8 @@ var assert = require('assert') +var crypto = require('../src/crypto') -var crypto = require('..').crypto -var ECKey = require('../src/eckey.js').ECKey -var ECPubKey = require('../src/eckey.js').ECPubKey +var ECKey = require('../src/eckey') +var ECPubKey = require('../src/ecpubkey') describe('ECKey', function() { describe('constructor', function() { @@ -51,77 +51,6 @@ describe('ECKey', function() { }) }) - describe('toAddress', function() { - var privkeys = [ - 'ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458', - '1111111111111111111111111111111111111111111111111111111111111111', - '18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725' - ] - - // compressed pubkeys - var cpubkeys = [ - '024b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea811992', - '034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa', - '0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352' - ] - - var pubkeys = cpubkeys.map(function(x) { - var pk = ECPubKey.fromHex(x) - pk.compressed = false - return pk.toHex() - }) - - it('bitcoin', function() { - var addresses = [ - '19SgmoUj4xowEjwtXvNAtYTAgbvR9iBCui', - '1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a', - '16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM' - ] - var compressedAddresses = [ - '1AA4sjKW2aUmbtN3MtegdvhYtDBbDEke1q', - '1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9', - '1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs', - ] - - for (var i = 0; i < addresses.length; ++i) { - var pub = ECPubKey.fromHex(pubkeys[i]) - var cpub = ECPubKey.fromHex(cpubkeys[i]) - cpub.compressed = true - - var addr = addresses[i] - var caddr = compressedAddresses[i] - - assert.equal(pub.getAddress().toString(), addr) - assert.equal(cpub.getAddress().toString(), caddr) - } - }) - - it('testnet', function() { - var addresses = [ - '19SgmoUj4xowEjwtXvNAtYTAgbvR9iBCui', - '1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a', - '16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM' - ] - var compressedAddresses = [ - '1AA4sjKW2aUmbtN3MtegdvhYtDBbDEke1q', - '1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9', - '1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs', - ] - - for (var i = 0; i < addresses.length; ++i) { - var pub = ECPubKey.fromHex(pubkeys[i]) - var cpub = ECPubKey.fromHex(cpubkeys[i]) - cpub.compressed = true - - var addr = addresses[i] - var caddr = compressedAddresses[i] - - assert.equal(pub.getAddress().toString(), addr) - assert.equal(cpub.getAddress().toString(), caddr) - } - }) - }) - describe('signing', function() { var hpriv = 'ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458' var hcpub = '024b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea811992' @@ -151,23 +80,4 @@ describe('ECKey', function() { assert(!priv2.pub.verify(hash, signature)) }) }) - - describe('output of ECPubKey', function() { - var hcpub = '024b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea811992' - var hpub = '044b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea81199283fbec990dad6fb98f93f712d50cb874dd717de6a184158d63886dda3090f566' - - it('using toHex should support compression', function() { - var pub = ECPubKey.fromHex(hcpub) - - assert.equal(pub.toHex(), hcpub) - assert.equal(pub.compressed, true) - }) - - it('using toHex should support uncompressed', function() { - var pub = ECPubKey.fromHex(hpub) - - assert.equal(pub.toHex(), hpub) - assert.equal(pub.compressed, false) - }) - }) }) diff --git a/test/ecpubkey.js b/test/ecpubkey.js new file mode 100644 index 0000000..faf338d --- /dev/null +++ b/test/ecpubkey.js @@ -0,0 +1,95 @@ +var assert = require('assert') + +var ECPubKey = require('../src/ecpubkey') + +describe('ECPubKey', function() { + describe('toBuffer/toHex', function() { + var hcpub = '024b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea811992' + var hpub = '044b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea81199283fbec990dad6fb98f93f712d50cb874dd717de6a184158d63886dda3090f566' + + it('using toHex should support compression', function() { + var pub = ECPubKey.fromHex(hcpub) + + assert.equal(pub.toHex(), hcpub) + assert.equal(pub.compressed, true) + }) + + it('using toHex should support uncompressed', function() { + var pub = ECPubKey.fromHex(hpub) + + assert.equal(pub.toHex(), hpub) + assert.equal(pub.compressed, false) + }) + }) + + describe('getAddress', function() { + var privkeys = [ + 'ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458', + '1111111111111111111111111111111111111111111111111111111111111111', + '18e14a7b6a307f426a94f8114701e7c8e774e7f9a47e2c2035db29a206321725' + ] + + // compressed pubkeys + var cpubkeys = [ + '024b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea811992', + '034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa', + '0250863ad64a87ae8a2fe83c1af1a8403cb53f53e486d8511dad8a04887e5b2352' + ] + + var pubkeys = cpubkeys.map(function(x) { + var pk = ECPubKey.fromHex(x) + pk.compressed = false + return pk.toHex() + }) + + it('bitcoin', function() { + var addresses = [ + '19SgmoUj4xowEjwtXvNAtYTAgbvR9iBCui', + '1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a', + '16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM' + ] + var compressedAddresses = [ + '1AA4sjKW2aUmbtN3MtegdvhYtDBbDEke1q', + '1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9', + '1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs', + ] + + for (var i = 0; i < addresses.length; ++i) { + var pub = ECPubKey.fromHex(pubkeys[i]) + var cpub = ECPubKey.fromHex(cpubkeys[i]) + cpub.compressed = true + + var addr = addresses[i] + var caddr = compressedAddresses[i] + + assert.equal(pub.getAddress().toString(), addr) + assert.equal(cpub.getAddress().toString(), caddr) + } + }) + + it('testnet', function() { + var addresses = [ + '19SgmoUj4xowEjwtXvNAtYTAgbvR9iBCui', + '1MsHWS1BnwMc3tLE8G35UXsS58fKipzB7a', + '16UwLL9Risc3QfPqBUvKofHmBQ7wMtjvM' + ] + var compressedAddresses = [ + '1AA4sjKW2aUmbtN3MtegdvhYtDBbDEke1q', + '1Q1pE5vPGEEMqRcVRMbtBK842Y6Pzo6nK9', + '1PMycacnJaSqwwJqjawXBErnLsZ7RkXUAs', + ] + + for (var i = 0; i < addresses.length; ++i) { + var pub = ECPubKey.fromHex(pubkeys[i]) + var cpub = ECPubKey.fromHex(cpubkeys[i]) + cpub.compressed = true + + var addr = addresses[i] + var caddr = compressedAddresses[i] + + assert.equal(pub.getAddress().toString(), addr) + assert.equal(cpub.getAddress().toString(), caddr) + } + }) + }) +}) diff --git a/test/hdwallet.js b/test/hdwallet.js index 46f4bdc..1207f76 100644 --- a/test/hdwallet.js +++ b/test/hdwallet.js @@ -1,6 +1,6 @@ var assert = require('assert') -var HDWallet = require('../').HDWallet +var HDWallet = require('../src/hdwallet') function b2h(buf) { assert(Buffer.isBuffer(buf)) diff --git a/test/integration/p2sh.js b/test/integration/p2sh.js index 55978bb..bb433a7 100644 --- a/test/integration/p2sh.js +++ b/test/integration/p2sh.js @@ -1,12 +1,13 @@ -var assert = require('assert'); +var assert = require('assert') -var Address = require('../../src/address'); -var ECKey = require('../../src/eckey').ECKey; -var T = require('../../src/transaction'); -var Transaction = T.Transaction; -var Script = require('../../src/script'); -var networks = require('../../src/networks'); -var crypto = require('../../src/crypto'); +var bitcoin = require('../../') +var crypto = bitcoin.crypto +var networks = bitcoin.networks + +var Address = bitcoin.Address +var ECKey = bitcoin.ECKey +var Transaction = bitcoin.Transaction +var Script = bitcoin.Script var helloblock = require('helloblock-js')({ network: 'testnet' diff --git a/test/message.js b/test/message.js index 12831da..f2edc87 100644 --- a/test/message.js +++ b/test/message.js @@ -1,7 +1,8 @@ var assert = require('assert') -var ECKey = require('../src/eckey').ECKey -var Message = require('../').Message -var networks = require('../').networks +var networks = require('../src/networks') + +var ECKey = require('../src/eckey') +var Message = require('../src/message') var fixtures = require('./fixtures/message') diff --git a/test/script.js b/test/script.js index 218e971..36f0e6c 100644 --- a/test/script.js +++ b/test/script.js @@ -1,9 +1,9 @@ var assert = require('assert') -var crypto = require('..').crypto -var networks = require('..').networks +var crypto = require('../src/crypto') +var networks = require('../src/networks') -var Address = require('../src/address.js') -var Script = require('../src/script.js') +var Address = require('../src/address') +var Script = require('../src/script') var fixtures = require('./fixtures/script') diff --git a/test/transaction.js b/test/transaction.js index d4e1e13..5c2fcbd 100644 --- a/test/transaction.js +++ b/test/transaction.js @@ -1,11 +1,9 @@ var assert = require('assert') +var networks = require('../src/networks') var Address = require('../src/address') -var ECKey = require('../src/eckey').ECKey -var networks = require('..').networks -var T = require('../src/transaction') -var Transaction = T.Transaction -var TransactionOut = T.TransactionOut +var ECKey = require('../src/eckey') +var Transaction = require('../src/transaction').Transaction var Script = require('../src/script') var fixtureTxes = require('./fixtures/mainnet_tx') @@ -276,8 +274,5 @@ describe('Transaction', function() { assert.equal(tx.serializeHex(), expected) }) }) - - describe('TransactionOut', function() { - }) }) diff --git a/test/wallet.js b/test/wallet.js index a7de4d1..276ef0f 100644 --- a/test/wallet.js +++ b/test/wallet.js @@ -1,14 +1,12 @@ var assert = require('assert') -var crypto = require('../').crypto +var crypto = require('../src/crypto') var sinon = require('sinon') -var Address = require('..').Address -var HDNode = require('../src/hdwallet.js') -var T = require('../src/transaction.js') -var Transaction = T.Transaction -var TransactionOut = T.TransactionOut -var Script = require('../src/script.js') -var Wallet = require('../src/wallet.js') +var Address = require('../src/address') +var HDWallet = require('../src/hdwallet') +var Script = require('../src/script') +var Transaction = require('../src/transaction').Transaction +var Wallet = require('../src/wallet') var fixtureTxes = require('./fixtures/mainnet_tx') var fixtureTx1Hex = fixtureTxes.prevTx @@ -32,7 +30,7 @@ describe('Wallet', function() { it("generates m/0' as the main account", function() { var mainAccount = wallet.getAccountZero() - assert.equal(mainAccount.index, 0 + HDNode.HIGHEST_BIT) + assert.equal(mainAccount.index, 0 + HDWallet.HIGHEST_BIT) assert.equal(mainAccount.depth, 1) })