Browse Source

Merge pull request #176 from dcousens/rename

Project structure cleanup
hk-custom-address
Wei Lu 11 years ago
parent
commit
9cd34f50d5
  1. 0
      src/bufferutils.js
  2. 60
      src/eckey.js
  3. 58
      src/ecpubkey.js
  4. 4
      src/hdwallet.js
  5. 6
      src/index.js
  6. 9
      src/message.js
  7. 22
      src/transaction.js
  8. 6
      test/address.js
  9. 2
      test/base58.js
  10. 2
      test/base58check.js
  11. 18
      test/bufferutils.js
  12. 2
      test/convert.js
  13. 27
      test/crypto.js
  14. 4
      test/ec.js
  15. 13
      test/ecdsa.js
  16. 96
      test/eckey.js
  17. 95
      test/ecpubkey.js
  18. 2
      test/hdwallet.js
  19. 17
      test/integration/p2sh.js
  20. 7
      test/message.js
  21. 8
      test/script.js
  22. 11
      test/transaction.js
  23. 16
      test/wallet.js

0
src/buffer.js → src/bufferutils.js

60
src/eckey.js

@ -4,15 +4,12 @@ var ecdsa = require('./ecdsa')
var networks = require('./networks') var networks = require('./networks')
var secureRandom = require('secure-random') var secureRandom = require('secure-random')
var Address = require('./address') var BigInteger = require('bigi')
var crypto = require('./crypto') var ECPubKey = require('./ecpubkey')
var sec = require('./sec') var sec = require('./sec')
var ecparams = sec('secp256k1') var ecparams = sec('secp256k1')
var BigInteger = require('bigi')
var ECPointFp = require('./ec').ECPointFp
function ECKey(D, compressed) { function ECKey(D, compressed) {
assert(D.compareTo(BigInteger.ZERO) > 0, 'Private key must be greater than 0') 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') 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) var D = BigInteger.fromBuffer(buffer)
return new ECKey(D, compressed) return new ECKey(D, compressed)
} }
ECKey.fromHex = function(hex, compressed) { ECKey.fromHex = function(hex, compressed) {
return ECKey.fromBuffer(new Buffer(hex, 'hex'), compressed) return ECKey.fromBuffer(new Buffer(hex, 'hex'), compressed)
} }
@ -67,6 +65,7 @@ ECKey.prototype.sign = function(hash) {
ECKey.prototype.toBuffer = function() { ECKey.prototype.toBuffer = function() {
return this.D.toBuffer(32) return this.D.toBuffer(32)
} }
ECKey.prototype.toHex = function() { ECKey.prototype.toHex = function() {
return this.toBuffer().toString('hex') return this.toBuffer().toString('hex')
} }
@ -82,53 +81,4 @@ ECKey.prototype.toWIF = function(version) {
return base58check.encode(buffer, version) return base58check.encode(buffer, version)
} }
////////////////////////////////////////////////////// module.exports = ECKey
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
}

58
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

4
src/hdwallet.js

@ -5,8 +5,8 @@ var convert = require('./convert')
var Address = require('./address') var Address = require('./address')
var BigInteger = require('bigi') var BigInteger = require('bigi')
var crypto = require('./crypto') var crypto = require('./crypto')
var ECKey = require('./eckey').ECKey var ECKey = require('./eckey')
var ECPubKey = require('./eckey').ECPubKey var ECPubKey = require('./ecpubkey')
var networks = require('./networks') var networks = require('./networks')
var sec = require('./sec') var sec = require('./sec')

6
src/index.js

@ -6,14 +6,14 @@ module.exports = {
Address: require('./address'), Address: require('./address'),
base58: require('./base58'), base58: require('./base58'),
base58check: require('./base58check'), base58check: require('./base58check'),
BufferExt: require('./buffer'), bufferutils: require('./bufferutils'),
convert: require('./convert'), convert: require('./convert'),
crypto: require('./crypto'), crypto: require('./crypto'),
ec: ec, ec: ec,
ecdsa: require('./ecdsa'), ecdsa: require('./ecdsa'),
ECKey: Key.ECKey, ECKey: require('./eckey'),
ECPointFp: ec.ECPointFp, ECPointFp: ec.ECPointFp,
ECPubKey: Key.ECPubKey, ECPubKey: require('./ecpubkey'),
Message: require('./message'), Message: require('./message'),
Opcode: require('./opcode'), Opcode: require('./opcode'),
HDWallet: require('./hdwallet'), HDWallet: require('./hdwallet'),

9
src/message.js

@ -1,18 +1,17 @@
/// Implements Bitcoin's feature for signing arbitrary messages. /// Implements Bitcoin's feature for signing arbitrary messages.
var Address = require('./address') var Address = require('./address')
var BufferExt = require('./buffer') var bufferutils = require('./bufferutils')
var crypto = require('./crypto') var crypto = require('./crypto')
var ecdsa = require('./ecdsa') var ecdsa = require('./ecdsa')
var ECPubKey = require('./eckey').ECPubKey var ECPubKey = require('./ecpubkey')
// FIXME: incompatible with other networks (Litecoin etc) // FIXME: incompatible with other networks (Litecoin etc)
var MAGIC_PREFIX = new Buffer('\x18Bitcoin Signed Message:\n') var MAGIC_PREFIX = new Buffer('\x18Bitcoin Signed Message:\n')
function magicHash(message) { function magicHash(message) {
var messageBuffer = new Buffer(message) var messageBuffer = new Buffer(message)
var lengthBuffer = new Buffer(BufferExt.varIntSize(messageBuffer.length)) var lengthBuffer = new Buffer(bufferutils.varIntSize(messageBuffer.length))
BufferExt.writeVarInt(lengthBuffer, messageBuffer.length, 0) bufferutils.writeVarInt(lengthBuffer, messageBuffer.length, 0)
var buffer = Buffer.concat([ var buffer = Buffer.concat([
MAGIC_PREFIX, lengthBuffer, messageBuffer MAGIC_PREFIX, lengthBuffer, messageBuffer

22
src/transaction.js

@ -3,14 +3,14 @@
var assert = require('assert') var assert = require('assert')
var Address = require('./address') var Address = require('./address')
var BigInteger = require('bigi') var BigInteger = require('bigi')
var BufferExt = require('./buffer') var bufferutils = require('./bufferutils')
var Script = require('./script') var Script = require('./script')
var convert = require('./convert') var convert = require('./convert')
var crypto = require('./crypto') var crypto = require('./crypto')
var ECKey = require('./eckey').ECKey var ECKey = require('./eckey')
var ecdsa = require('./ecdsa') var ecdsa = require('./ecdsa')
var Transaction = function (doc) { function Transaction(doc) {
if (!(this instanceof Transaction)) { return new Transaction(doc) } if (!(this instanceof Transaction)) { return new Transaction(doc) }
this.version = 1 this.version = 1
this.locktime = 0 this.locktime = 0
@ -122,17 +122,17 @@ Transaction.prototype.addOutput = function (address, value) {
*/ */
Transaction.prototype.serialize = function () { Transaction.prototype.serialize = function () {
var txInSize = this.ins.reduce(function(a, x) { 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) }, 0)
var txOutSize = this.outs.reduce(function(a, x) { 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) }, 0)
var buffer = new Buffer( var buffer = new Buffer(
8 + 8 +
BufferExt.varIntSize(this.ins.length) + bufferutils.varIntSize(this.ins.length) +
BufferExt.varIntSize(this.outs.length) + bufferutils.varIntSize(this.outs.length) +
txInSize + txInSize +
txOutSize txOutSize
) )
@ -148,11 +148,11 @@ Transaction.prototype.serialize = function () {
offset += 4 offset += 4
} }
function writeUInt64(i) { function writeUInt64(i) {
BufferExt.writeUInt64LE(buffer, i, offset) bufferutils.writeUInt64LE(buffer, i, offset)
offset += 8 offset += 8
} }
function writeVarInt(i) { function writeVarInt(i) {
var n = BufferExt.writeVarInt(buffer, i, offset) var n = bufferutils.writeVarInt(buffer, i, offset)
offset += n offset += n
} }
@ -294,12 +294,12 @@ Transaction.deserialize = function(buffer) {
return i return i
} }
function readUInt64() { function readUInt64() {
var i = BufferExt.readUInt64LE(buffer, offset) var i = bufferutils.readUInt64LE(buffer, offset)
offset += 8 offset += 8
return i return i
} }
function readVarInt() { function readVarInt() {
var vi = BufferExt.readVarInt(buffer, offset) var vi = bufferutils.readVarInt(buffer, offset)
offset += vi.size offset += vi.size
return vi.number return vi.number
} }

6
test/address.js

@ -1,7 +1,7 @@
var assert = require('assert') var assert = require('assert')
var Address = require('..').Address var Address = require('../src/address')
var networks = require('..').networks var networks = require('../src/networks')
var Script = require('..').Script var Script = require('../src/script')
var b58fixtures = require('./fixtures/base58') var b58fixtures = require('./fixtures/base58')
var fixtures = require('./fixtures/address') var fixtures = require('./fixtures/address')

2
test/base58.js

@ -1,5 +1,5 @@
var assert = require('assert') var assert = require('assert')
var base58 = require('../').base58 var base58 = require('../src/base58')
var fixtures = require('./fixtures/base58') var fixtures = require('./fixtures/base58')
function b2h(b) { return new Buffer(b).toString('hex') } function b2h(b) { return new Buffer(b).toString('hex') }

2
test/base58check.js

@ -1,5 +1,5 @@
var assert = require('assert') var assert = require('assert')
var base58check = require('../').base58check var base58check = require('../src/base58check')
var fixtures = require('./fixtures/base58check') var fixtures = require('./fixtures/base58check')
function b2h(b) { return new Buffer(b).toString('hex') } function b2h(b) { return new Buffer(b).toString('hex') }

18
test/buffer.js → test/bufferutils.js

@ -1,14 +1,14 @@
var assert = require('assert') var assert = require('assert')
var BufferExt = require('../').BufferExt var bufferutils = require('../src/bufferutils')
var fixtures = require('./fixtures/buffer.js') var fixtures = require('./fixtures/buffer.js')
describe('Buffer Extensions', function() { describe('bufferutils', function() {
describe('readUInt64LE', function() { describe('readUInt64LE', function() {
it('matches test vectors', function() { it('matches test vectors', function() {
fixtures.valid.forEach(function(f) { fixtures.valid.forEach(function(f) {
var buffer = new Buffer(f.hex64, 'hex') var buffer = new Buffer(f.hex64, 'hex')
var number = BufferExt.readUInt64LE(buffer, 0) var number = bufferutils.readUInt64LE(buffer, 0)
assert.equal(number, f.dec) assert.equal(number, f.dec)
}) })
@ -19,7 +19,7 @@ describe('Buffer Extensions', function() {
it('matches test vectors', function() { it('matches test vectors', function() {
fixtures.valid.forEach(function(f) { fixtures.valid.forEach(function(f) {
var buffer = new Buffer(f.hexVI, 'hex') 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.number, f.dec)
assert.equal(d.size, buffer.length) assert.equal(d.size, buffer.length)
@ -31,7 +31,7 @@ describe('Buffer Extensions', function() {
it('matches test vectors', function() { it('matches test vectors', function() {
fixtures.valid.forEach(function(f) { fixtures.valid.forEach(function(f) {
var number = parseInt(f.dec) var number = parseInt(f.dec)
var size = BufferExt.varIntSize(number) var size = bufferutils.varIntSize(number)
assert.equal(size, f.hexVI.length / 2) assert.equal(size, f.hexVI.length / 2)
}) })
@ -44,7 +44,7 @@ describe('Buffer Extensions', function() {
var buffer = new Buffer(8) var buffer = new Buffer(8)
buffer.fill(0) buffer.fill(0)
BufferExt.writeUInt64LE(buffer, f.dec, 0) bufferutils.writeUInt64LE(buffer, f.dec, 0)
assert.equal(buffer.toString('hex'), f.hex64) assert.equal(buffer.toString('hex'), f.hex64)
}) })
}) })
@ -55,7 +55,7 @@ describe('Buffer Extensions', function() {
var buffer = new Buffer(8) var buffer = new Buffer(8)
buffer.fill(0) 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) var buffer = new Buffer(9)
buffer.fill(0) 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) assert.equal(buffer.slice(0, n).toString('hex'), f.hexVI)
}) })
}) })
@ -78,7 +78,7 @@ describe('Buffer Extensions', function() {
var buffer = new Buffer(9) var buffer = new Buffer(9)
buffer.fill(0) buffer.fill(0)
BufferExt.writeVarInt(buffer, f.dec, 0) bufferutils.writeVarInt(buffer, f.dec, 0)
}) })
}) })
}) })

2
test/convert.js

@ -1,5 +1,5 @@
var assert = require('assert') var assert = require('assert')
var convert = require('../').convert var convert = require('../src/convert')
describe('convert', function() { describe('convert', function() {
describe('byte array and word array conversions', function(){ describe('byte array and word array conversions', function(){

27
test/crypto.js

@ -1,13 +1,14 @@
var assert = require('assert') var assert = require('assert')
var crypto = require('../').crypto var crypto = require('../src/crypto')
var fixture = require('./fixtures/crypto')
var fixtures = require('./fixtures/crypto')
describe('Crypto', function() { describe('Crypto', function() {
describe('HASH160', function() { describe('HASH160', function() {
it('matches the test vector', 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 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) assert.equal(actual, expected)
}) })
@ -16,9 +17,9 @@ describe('Crypto', function() {
describe('HASH256', function() { describe('HASH256', function() {
it('matches the test vector', 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 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) assert.equal(actual, expected)
}) })
@ -27,9 +28,9 @@ describe('Crypto', function() {
describe('SHA1', function() { describe('SHA1', function() {
it('matches the test vector', 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 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) assert.equal(actual, expected)
}) })
@ -38,9 +39,9 @@ describe('Crypto', function() {
describe('SHA256', function() { describe('SHA256', function() {
it('matches the test vector', 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 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) assert.equal(actual, expected)
}) })
@ -49,12 +50,12 @@ describe('Crypto', function() {
describe('HMAC SHA512', function() { describe('HMAC SHA512', function() {
it('matches the test vector', 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 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 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) assert.equal(actual.toString('hex'), expected)
}) })

4
test/ec.js

@ -1,10 +1,10 @@
var assert = require('assert') var assert = require('assert')
var sec = require('../').sec var sec = require('../src/sec')
var ecparams = sec('secp256k1') var ecparams = sec('secp256k1')
var BigInteger = require('bigi') var BigInteger = require('bigi')
var ECPointFp = require('../').ECPointFp var ECPointFp = require('../src/ec').ECPointFp
describe('ec', function() { describe('ec', function() {
describe('ECPointFp', function() { describe('ECPointFp', function() {

13
test/ecdsa.js

@ -1,13 +1,14 @@
var assert = require('assert') var assert = require('assert')
var crypto = require('../').crypto var crypto = require('../src/crypto')
var ecdsa = require('..').ecdsa var ecdsa = require('../src/ecdsa')
var sec = require('..').sec
var sec = require('../src/sec')
var ecparams = sec("secp256k1") var ecparams = sec("secp256k1")
var BigInteger = require('bigi') var BigInteger = require('bigi')
var ECKey = require('..').ECKey var ECKey = require('../src/eckey')
var ECPubKey = require('..').ECPubKey var ECPubKey = require('../src/ecpubkey')
var Message = require('..').Message var Message = require('../src/message')
var fixtures = require('./fixtures/ecdsa.js') var fixtures = require('./fixtures/ecdsa.js')

96
test/eckey.js

@ -1,8 +1,8 @@
var assert = require('assert') var assert = require('assert')
var crypto = require('../src/crypto')
var crypto = require('..').crypto var ECKey = require('../src/eckey')
var ECKey = require('../src/eckey.js').ECKey var ECPubKey = require('../src/ecpubkey')
var ECPubKey = require('../src/eckey.js').ECPubKey
describe('ECKey', function() { describe('ECKey', function() {
describe('constructor', 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() { describe('signing', function() {
var hpriv = 'ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458' var hpriv = 'ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458'
var hcpub = '024b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea811992' var hcpub = '024b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea811992'
@ -151,23 +80,4 @@ describe('ECKey', function() {
assert(!priv2.pub.verify(hash, signature)) 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)
})
})
}) })

95
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)
}
})
})
})

2
test/hdwallet.js

@ -1,6 +1,6 @@
var assert = require('assert') var assert = require('assert')
var HDWallet = require('../').HDWallet var HDWallet = require('../src/hdwallet')
function b2h(buf) { function b2h(buf) {
assert(Buffer.isBuffer(buf)) assert(Buffer.isBuffer(buf))

17
test/integration/p2sh.js

@ -1,12 +1,13 @@
var assert = require('assert'); var assert = require('assert')
var Address = require('../../src/address'); var bitcoin = require('../../')
var ECKey = require('../../src/eckey').ECKey; var crypto = bitcoin.crypto
var T = require('../../src/transaction'); var networks = bitcoin.networks
var Transaction = T.Transaction;
var Script = require('../../src/script'); var Address = bitcoin.Address
var networks = require('../../src/networks'); var ECKey = bitcoin.ECKey
var crypto = require('../../src/crypto'); var Transaction = bitcoin.Transaction
var Script = bitcoin.Script
var helloblock = require('helloblock-js')({ var helloblock = require('helloblock-js')({
network: 'testnet' network: 'testnet'

7
test/message.js

@ -1,7 +1,8 @@
var assert = require('assert') var assert = require('assert')
var ECKey = require('../src/eckey').ECKey var networks = require('../src/networks')
var Message = require('../').Message
var networks = require('../').networks var ECKey = require('../src/eckey')
var Message = require('../src/message')
var fixtures = require('./fixtures/message') var fixtures = require('./fixtures/message')

8
test/script.js

@ -1,9 +1,9 @@
var assert = require('assert') var assert = require('assert')
var crypto = require('..').crypto var crypto = require('../src/crypto')
var networks = require('..').networks var networks = require('../src/networks')
var Address = require('../src/address.js') var Address = require('../src/address')
var Script = require('../src/script.js') var Script = require('../src/script')
var fixtures = require('./fixtures/script') var fixtures = require('./fixtures/script')

11
test/transaction.js

@ -1,11 +1,9 @@
var assert = require('assert') var assert = require('assert')
var networks = require('../src/networks')
var Address = require('../src/address') var Address = require('../src/address')
var ECKey = require('../src/eckey').ECKey var ECKey = require('../src/eckey')
var networks = require('..').networks var Transaction = require('../src/transaction').Transaction
var T = require('../src/transaction')
var Transaction = T.Transaction
var TransactionOut = T.TransactionOut
var Script = require('../src/script') var Script = require('../src/script')
var fixtureTxes = require('./fixtures/mainnet_tx') var fixtureTxes = require('./fixtures/mainnet_tx')
@ -276,8 +274,5 @@ describe('Transaction', function() {
assert.equal(tx.serializeHex(), expected) assert.equal(tx.serializeHex(), expected)
}) })
}) })
describe('TransactionOut', function() {
})
}) })

16
test/wallet.js

@ -1,14 +1,12 @@
var assert = require('assert') var assert = require('assert')
var crypto = require('../').crypto var crypto = require('../src/crypto')
var sinon = require('sinon') var sinon = require('sinon')
var Address = require('..').Address var Address = require('../src/address')
var HDNode = require('../src/hdwallet.js') var HDWallet = require('../src/hdwallet')
var T = require('../src/transaction.js') var Script = require('../src/script')
var Transaction = T.Transaction var Transaction = require('../src/transaction').Transaction
var TransactionOut = T.TransactionOut var Wallet = require('../src/wallet')
var Script = require('../src/script.js')
var Wallet = require('../src/wallet.js')
var fixtureTxes = require('./fixtures/mainnet_tx') var fixtureTxes = require('./fixtures/mainnet_tx')
var fixtureTx1Hex = fixtureTxes.prevTx var fixtureTx1Hex = fixtureTxes.prevTx
@ -32,7 +30,7 @@ describe('Wallet', function() {
it("generates m/0' as the main account", function() { it("generates m/0' as the main account", function() {
var mainAccount = wallet.getAccountZero() 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) assert.equal(mainAccount.depth, 1)
}) })

Loading…
Cancel
Save