From 7a740c2e7bfdad92bd34c7ece1ad39c6582f7e26 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Tue, 13 May 2014 16:35:07 +1000 Subject: [PATCH 1/4] tests: forces consistent import syntax --- test/base58.js | 2 +- test/base58check.js | 2 +- test/bufferutils.js | 86 +++++++++++++++++++++++++++++++++++++++++++++ test/convert.js | 2 +- test/crypto.js | 27 +++++++------- test/ec.js | 4 +-- test/ecdsa.js | 3 +- test/eckey.js | 6 ++-- test/message.js | 7 ++-- test/script.js | 4 +-- test/transaction.js | 15 +++----- test/wallet.js | 12 +++---- 12 files changed, 126 insertions(+), 44 deletions(-) create mode 100644 test/bufferutils.js diff --git a/test/base58.js b/test/base58.js index 93f2c1c..71bcc08 100644 --- a/test/base58.js +++ b/test/base58.js @@ -1,5 +1,5 @@ var assert = require('assert') -var base58 = require('../').base58 +var base58 = require('..').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..a5f6bf0 100644 --- a/test/base58check.js +++ b/test/base58check.js @@ -1,5 +1,5 @@ var assert = require('assert') -var base58check = require('../').base58check +var base58check = require('..').base58check var fixtures = require('./fixtures/base58check') function b2h(b) { return new Buffer(b).toString('hex') } diff --git a/test/bufferutils.js b/test/bufferutils.js new file mode 100644 index 0000000..1066116 --- /dev/null +++ b/test/bufferutils.js @@ -0,0 +1,86 @@ +var assert = require('assert') +var bufferutils = require('..').bufferutils + +var fixtures = require('./fixtures/buffer.js') + +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 = bufferutils.readUInt64LE(buffer, 0) + + assert.equal(number, f.dec) + }) + }) + }) + + describe('readVarInt', function() { + it('matches test vectors', function() { + fixtures.valid.forEach(function(f) { + var buffer = new Buffer(f.hexVI, 'hex') + var d = bufferutils.readVarInt(buffer, 0) + + assert.equal(d.number, f.dec) + assert.equal(d.size, buffer.length) + }) + }) + }) + + describe('varIntSize', function() { + it('matches test vectors', function() { + fixtures.valid.forEach(function(f) { + var number = parseInt(f.dec) + var size = bufferutils.varIntSize(number) + + assert.equal(size, f.hexVI.length / 2) + }) + }) + }) + + describe('writeUInt64LE', function() { + it('matches test vectors', function() { + fixtures.valid.forEach(function(f) { + var buffer = new Buffer(8) + buffer.fill(0) + + bufferutils.writeUInt64LE(buffer, f.dec, 0) + assert.equal(buffer.toString('hex'), f.hex64) + }) + }) + + fixtures.invalid.forEach(function(f) { + it('throws on ' + f.description, function() { + assert.throws(function() { + var buffer = new Buffer(8) + buffer.fill(0) + + bufferutils.writeUInt64LE(buffer, f.dec, 0) + }) + }) + }) + }) + + describe('writeVarInt', function() { + it('matches test vectors', function() { + fixtures.valid.forEach(function(f) { + var buffer = new Buffer(9) + buffer.fill(0) + + var n = bufferutils.writeVarInt(buffer, f.dec, 0) + assert.equal(buffer.slice(0, n).toString('hex'), f.hexVI) + }) + }) + + fixtures.invalid.forEach(function(f) { + it('throws on ' + f.description, function() { + assert.throws(function() { + var buffer = new Buffer(9) + buffer.fill(0) + + bufferutils.writeVarInt(buffer, f.dec, 0) + }) + }) + }) + }) +}) diff --git a/test/convert.js b/test/convert.js index 10abfff..f6c8dbf 100644 --- a/test/convert.js +++ b/test/convert.js @@ -1,5 +1,5 @@ var assert = require('assert') -var convert = require('../').convert +var convert = require('..').convert describe('convert', function() { describe('byte array and word array conversions', function(){ diff --git a/test/crypto.js b/test/crypto.js index ff414d7..c62936d 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('..').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..6821809 100644 --- a/test/ec.js +++ b/test/ec.js @@ -1,10 +1,10 @@ var assert = require('assert') -var sec = require('../').sec +var sec = require('..').sec var ecparams = sec('secp256k1') var BigInteger = require('bigi') -var ECPointFp = require('../').ECPointFp +var ECPointFp = require('..').ECPointFp describe('ec', function() { describe('ECPointFp', function() { diff --git a/test/ecdsa.js b/test/ecdsa.js index fedeb6c..bdc2ebd 100644 --- a/test/ecdsa.js +++ b/test/ecdsa.js @@ -1,6 +1,7 @@ var assert = require('assert') -var crypto = require('../').crypto +var crypto = require('..').crypto var ecdsa = require('..').ecdsa + var sec = require('..').sec var ecparams = sec("secp256k1") diff --git a/test/eckey.js b/test/eckey.js index 76a7d32..3af0e93 100644 --- a/test/eckey.js +++ b/test/eckey.js @@ -1,8 +1,8 @@ var assert = require('assert') - var crypto = require('..').crypto -var ECKey = require('../src/eckey.js').ECKey -var ECPubKey = require('../src/eckey.js').ECPubKey + +var ECKey = require('..').ECKey +var ECPubKey = require('..').ECPubKey describe('ECKey', function() { describe('constructor', function() { diff --git a/test/message.js b/test/message.js index 12831da..e17a395 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('..').networks + +var ECKey = require('..').ECKey +var Message = require('..').Message var fixtures = require('./fixtures/message') diff --git a/test/script.js b/test/script.js index 218e971..719fcdd 100644 --- a/test/script.js +++ b/test/script.js @@ -2,8 +2,8 @@ var assert = require('assert') var crypto = require('..').crypto var networks = require('..').networks -var Address = require('../src/address.js') -var Script = require('../src/script.js') +var Address = require('..').Address +var Script = require('..').Script var fixtures = require('./fixtures/script') diff --git a/test/transaction.js b/test/transaction.js index d4e1e13..d949fae 100644 --- a/test/transaction.js +++ b/test/transaction.js @@ -1,12 +1,10 @@ var assert = require('assert') - -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 Script = require('../src/script') + +var Address = require('..').Address +var ECKey = require('..').ECKey +var Transaction = require('..').Transaction +var Script = require('..').Script var fixtureTxes = require('./fixtures/mainnet_tx') var fixtureTx1Hex = fixtureTxes.prevTx @@ -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..33f17c7 100644 --- a/test/wallet.js +++ b/test/wallet.js @@ -3,12 +3,10 @@ var crypto = require('../').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 HDWallet = require('..').HDWallet +var Script = require('..').Script +var Transaction = require('..').Transaction +var Wallet = require('..').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) }) From 05e0d08098c6d0e4375e72a811156f63a19d856b Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Tue, 13 May 2014 16:38:13 +1000 Subject: [PATCH 2/4] BufferExt: rename to bufferutils --- src/{buffer.js => bufferutils.js} | 0 src/index.js | 2 +- src/message.js | 7 ++- src/transaction.js | 20 +++---- test/buffer.js | 86 ------------------------------- 5 files changed, 14 insertions(+), 101 deletions(-) rename src/{buffer.js => bufferutils.js} (100%) delete mode 100644 test/buffer.js 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/index.js b/src/index.js index 484342d..8423409 100644 --- a/src/index.js +++ b/src/index.js @@ -6,7 +6,7 @@ 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, diff --git a/src/message.js b/src/message.js index c31755e..90df6c8 100644 --- a/src/message.js +++ b/src/message.js @@ -1,7 +1,6 @@ /// 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 @@ -11,8 +10,8 @@ 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..8fe2537 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 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/buffer.js b/test/buffer.js deleted file mode 100644 index 67eb296..0000000 --- a/test/buffer.js +++ /dev/null @@ -1,86 +0,0 @@ -var assert = require('assert') -var BufferExt = require('../').BufferExt - -var fixtures = require('./fixtures/buffer.js') - -describe('Buffer Extensions', 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) - - assert.equal(number, f.dec) - }) - }) - }) - - describe('readVarInt', function() { - it('matches test vectors', function() { - fixtures.valid.forEach(function(f) { - var buffer = new Buffer(f.hexVI, 'hex') - var d = BufferExt.readVarInt(buffer, 0) - - assert.equal(d.number, f.dec) - assert.equal(d.size, buffer.length) - }) - }) - }) - - describe('varIntSize', function() { - it('matches test vectors', function() { - fixtures.valid.forEach(function(f) { - var number = parseInt(f.dec) - var size = BufferExt.varIntSize(number) - - assert.equal(size, f.hexVI.length / 2) - }) - }) - }) - - describe('writeUInt64LE', function() { - it('matches test vectors', function() { - fixtures.valid.forEach(function(f) { - var buffer = new Buffer(8) - buffer.fill(0) - - BufferExt.writeUInt64LE(buffer, f.dec, 0) - assert.equal(buffer.toString('hex'), f.hex64) - }) - }) - - fixtures.invalid.forEach(function(f) { - it('throws on ' + f.description, function() { - assert.throws(function() { - var buffer = new Buffer(8) - buffer.fill(0) - - BufferExt.writeUInt64LE(buffer, f.dec, 0) - }) - }) - }) - }) - - describe('writeVarInt', function() { - it('matches test vectors', function() { - fixtures.valid.forEach(function(f) { - var buffer = new Buffer(9) - buffer.fill(0) - - var n = BufferExt.writeVarInt(buffer, f.dec, 0) - assert.equal(buffer.slice(0, n).toString('hex'), f.hexVI) - }) - }) - - fixtures.invalid.forEach(function(f) { - it('throws on ' + f.description, function() { - assert.throws(function() { - var buffer = new Buffer(9) - buffer.fill(0) - - BufferExt.writeVarInt(buffer, f.dec, 0) - }) - }) - }) - }) -}) From e27c97a791a9b3088a7693a03dea4462099b89af Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Tue, 13 May 2014 16:44:29 +1000 Subject: [PATCH 3/4] ECPubKey/ECKey: separate to two files --- src/eckey.js | 60 +++-------------------------- src/ecpubkey.js | 58 ++++++++++++++++++++++++++++ src/hdwallet.js | 4 +- src/index.js | 4 +- src/message.js | 2 +- src/transaction.js | 2 +- test/eckey.js | 90 ------------------------------------------- test/ecpubkey.js | 95 ++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 164 insertions(+), 151 deletions(-) create mode 100644 src/ecpubkey.js create mode 100644 test/ecpubkey.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 8423409..274f1aa 100644 --- a/src/index.js +++ b/src/index.js @@ -11,9 +11,9 @@ module.exports = { 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 90df6c8..526c665 100644 --- a/src/message.js +++ b/src/message.js @@ -3,7 +3,7 @@ var Address = require('./address') 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') diff --git a/src/transaction.js b/src/transaction.js index 8fe2537..b21f851 100644 --- a/src/transaction.js +++ b/src/transaction.js @@ -7,7 +7,7 @@ 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') function Transaction(doc) { diff --git a/test/eckey.js b/test/eckey.js index 3af0e93..58847b5 100644 --- a/test/eckey.js +++ b/test/eckey.js @@ -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..dfa2955 --- /dev/null +++ b/test/ecpubkey.js @@ -0,0 +1,95 @@ +var assert = require('assert') + +var ECPubKey = require('..').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) + } + }) + }) +}) From 6c0eebe94bd9d693ee12e1cc45b0afb66a1ab426 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Tue, 13 May 2014 17:55:53 +1000 Subject: [PATCH 4/4] tests: use filepaths directly After a long IRC discussion, it was decided that the use of direct filepaths instead of the module is a more pure form of testing , although it may provide less overall coverage than the mixed integration style imports used previously. This will need to be remedied by further integration testing in /test/integration. --- test/address.js | 6 +++--- test/base58.js | 2 +- test/base58check.js | 2 +- test/bufferutils.js | 2 +- test/convert.js | 2 +- test/crypto.js | 2 +- test/ec.js | 4 ++-- test/ecdsa.js | 12 ++++++------ test/eckey.js | 6 +++--- test/ecpubkey.js | 2 +- test/hdwallet.js | 2 +- test/integration/p2sh.js | 17 +++++++++-------- test/message.js | 6 +++--- test/script.js | 8 ++++---- test/transaction.js | 10 +++++----- test/wallet.js | 12 ++++++------ 16 files changed, 48 insertions(+), 47 deletions(-) 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 71bcc08..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 a5f6bf0..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/bufferutils.js b/test/bufferutils.js index 1066116..382c8ff 100644 --- a/test/bufferutils.js +++ b/test/bufferutils.js @@ -1,5 +1,5 @@ var assert = require('assert') -var bufferutils = require('..').bufferutils +var bufferutils = require('../src/bufferutils') var fixtures = require('./fixtures/buffer.js') diff --git a/test/convert.js b/test/convert.js index f6c8dbf..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 c62936d..36ab9cc 100644 --- a/test/crypto.js +++ b/test/crypto.js @@ -1,5 +1,5 @@ var assert = require('assert') -var crypto = require('..').crypto +var crypto = require('../src/crypto') var fixtures = require('./fixtures/crypto') diff --git a/test/ec.js b/test/ec.js index 6821809..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 bdc2ebd..2e9a028 100644 --- a/test/ecdsa.js +++ b/test/ecdsa.js @@ -1,14 +1,14 @@ var assert = require('assert') -var crypto = require('..').crypto -var ecdsa = require('..').ecdsa +var crypto = require('../src/crypto') +var ecdsa = require('../src/ecdsa') -var sec = require('..').sec +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 58847b5..2ef218b 100644 --- a/test/eckey.js +++ b/test/eckey.js @@ -1,8 +1,8 @@ var assert = require('assert') -var crypto = require('..').crypto +var crypto = require('../src/crypto') -var ECKey = require('..').ECKey -var ECPubKey = require('..').ECPubKey +var ECKey = require('../src/eckey') +var ECPubKey = require('../src/ecpubkey') describe('ECKey', function() { describe('constructor', function() { diff --git a/test/ecpubkey.js b/test/ecpubkey.js index dfa2955..faf338d 100644 --- a/test/ecpubkey.js +++ b/test/ecpubkey.js @@ -1,6 +1,6 @@ var assert = require('assert') -var ECPubKey = require('..').ECPubKey +var ECPubKey = require('../src/ecpubkey') describe('ECPubKey', function() { describe('toBuffer/toHex', function() { 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 e17a395..f2edc87 100644 --- a/test/message.js +++ b/test/message.js @@ -1,8 +1,8 @@ var assert = require('assert') -var networks = require('..').networks +var networks = require('../src/networks') -var ECKey = require('..').ECKey -var Message = require('..').Message +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 719fcdd..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('..').Address -var Script = require('..').Script +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 d949fae..5c2fcbd 100644 --- a/test/transaction.js +++ b/test/transaction.js @@ -1,10 +1,10 @@ var assert = require('assert') -var networks = require('..').networks +var networks = require('../src/networks') -var Address = require('..').Address -var ECKey = require('..').ECKey -var Transaction = require('..').Transaction -var Script = require('..').Script +var Address = require('../src/address') +var ECKey = require('../src/eckey') +var Transaction = require('../src/transaction').Transaction +var Script = require('../src/script') var fixtureTxes = require('./fixtures/mainnet_tx') var fixtureTx1Hex = fixtureTxes.prevTx diff --git a/test/wallet.js b/test/wallet.js index 33f17c7..276ef0f 100644 --- a/test/wallet.js +++ b/test/wallet.js @@ -1,12 +1,12 @@ var assert = require('assert') -var crypto = require('../').crypto +var crypto = require('../src/crypto') var sinon = require('sinon') -var Address = require('..').Address -var HDWallet = require('..').HDWallet -var Script = require('..').Script -var Transaction = require('..').Transaction -var Wallet = require('..').Wallet +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