diff --git a/src/address.js b/src/address.js index c469d0f..3e3fd1b 100644 --- a/src/address.js +++ b/src/address.js @@ -18,7 +18,7 @@ function findScriptTypeByVersion(queryVersion) { } function Address(hash, version) { - assert(Buffer.isBuffer(hash), 'First argument must be a Buffer') + assert(Buffer.isBuffer(hash), 'Expected Buffer, got ' + hash) assert.strictEqual(hash.length, 20, 'Invalid hash length') assert.strictEqual(version & 0xFF, version, 'Invalid version byte') diff --git a/src/base58.js b/src/base58.js index 5b21538..13791f4 100644 --- a/src/base58.js +++ b/src/base58.js @@ -12,7 +12,7 @@ var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' var ALPHABET_BUF = new Buffer(ALPHABET, 'ascii') var ALPHABET_MAP = {} for(var i = 0; i < ALPHABET.length; i++) { - ALPHABET_MAP[ALPHABET[i]] = BigInteger.valueOf(i) + ALPHABET_MAP[ALPHABET.charAt(i)] = BigInteger.valueOf(i) } var BASE = BigInteger.valueOf(58) @@ -21,7 +21,7 @@ function encode(buffer) { var result = new Buffer(buffer.length << 1) var i = result.length - 1 - while (bi.compareTo(BigInteger.ZERO) > 0) { + while (bi.signum() > 0) { var remainder = bi.mod(BASE) bi = bi.divide(BASE) @@ -43,7 +43,7 @@ function encode(buffer) { function decode(string) { if (string.length === 0) return new Buffer(0) - var num = BigInteger.ZERO.clone() + var num = BigInteger.ZERO for (var i = 0; i < string.length; i++) { num = num.multiply(BASE) @@ -55,16 +55,16 @@ function decode(string) { } // deal with leading zeros - var i = 0 - while ((i < string.length) && (string[i] === ALPHABET[0])) { - i++ + var j = 0 + while ((j < string.length) && (string[j] === ALPHABET[0])) { + j++ } var buffer = num.toBuffer() - var leadz = new Buffer(i) - leadz.fill(0) + var leadingZeros = new Buffer(j) + leadingZeros.fill(0) - return Buffer.concat([leadz, buffer]) + return Buffer.concat([leadingZeros, buffer]) } module.exports = { diff --git a/src/base58check.js b/src/base58check.js index 10afce2..a905ec9 100644 --- a/src/base58check.js +++ b/src/base58check.js @@ -4,13 +4,8 @@ var base58 = require('./base58') var crypto = require('./crypto') // Encode a buffer as a base58-check-encoded string -function encode(buffer, version) { - version = version || 0 - - // FIXME: `new Buffer(buffer)` is unnecessary if input is a Buffer +function encode(payload, version) { var version = new Buffer([version]) - var payload = new Buffer(buffer) - var message = Buffer.concat([version, payload]) var checksum = crypto.hash256(message).slice(0, 4) diff --git a/src/bufferutils.js b/src/bufferutils.js index e24735f..05364e1 100644 --- a/src/bufferutils.js +++ b/src/bufferutils.js @@ -45,6 +45,7 @@ function readPushDataInt(buffer, offset) { } return { + opcode: opcode, number: number, size: size } diff --git a/src/ecdsa.js b/src/ecdsa.js index ee0dcde..2eeffad 100644 --- a/src/ecdsa.js +++ b/src/ecdsa.js @@ -91,18 +91,18 @@ function serializeSig(signature) { var sBa = signature.s.toDERInteger() var sequence = [] - sequence.push(0x02); // INTEGER + sequence.push(0x02) // INTEGER sequence.push(rBa.length) sequence = sequence.concat(rBa) - sequence.push(0x02); // INTEGER + sequence.push(0x02) // INTEGER sequence.push(sBa.length) sequence = sequence.concat(sBa) sequence.unshift(sequence.length) - sequence.unshift(0x30); // SEQUENCE + sequence.unshift(0x30) // SEQUENCE - return sequence + return new Buffer(sequence) } /** diff --git a/src/eckey.js b/src/eckey.js index 170b9dc..4d9f9e3 100644 --- a/src/eckey.js +++ b/src/eckey.js @@ -11,7 +11,7 @@ var sec = require('./sec') var ecparams = sec('secp256k1') function ECKey(D, compressed) { - assert(D.compareTo(BigInteger.ZERO) > 0, 'Private key must be greater than 0') + assert(D.signum() > 0, 'Private key must be greater than 0') assert(D.compareTo(ecparams.getN()) < 0, 'Private key must be less than the curve order') var Q = ecparams.getG().multiply(D) diff --git a/test/base58check.js b/test/base58check.js index c4d1030..0a88952 100644 --- a/test/base58check.js +++ b/test/base58check.js @@ -11,7 +11,7 @@ describe('base58check', function() { it('can decode ' + f.string, function() { var actual = base58check.decode(f.string) var expected = { - version: f.decode.version, + version: f.decode.version || 0, payload: h2b(f.decode.payload), checksum: h2b(f.decode.checksum) } @@ -40,4 +40,3 @@ describe('base58check', function() { }) }) }) - diff --git a/test/bufferutils.js b/test/bufferutils.js index 4882062..d7dbfa3 100644 --- a/test/bufferutils.js +++ b/test/bufferutils.js @@ -23,7 +23,9 @@ describe('bufferutils', function() { it('decodes ' + f.hexPD + ' correctly', function() { var buffer = new Buffer(f.hexPD, 'hex') var d = bufferutils.readPushDataInt(buffer, 0) + var fopcode = parseInt(f.hexPD.substr(0, 2), 16) + assert.equal(d.opcode, fopcode) assert.equal(d.number, f.dec) assert.equal(d.size, buffer.length) }) diff --git a/test/eckey.js b/test/eckey.js index 34ce21a..7d17416 100644 --- a/test/eckey.js +++ b/test/eckey.js @@ -31,8 +31,10 @@ describe('ECKey', function() { fixtures.invalid.constructor.forEach(function(f) { it('throws on ' + f.D, function() { + var D = new BigInteger(f.D) + assert.throws(function() { - new ECKey(new BigInteger(f.D)) + new ECKey(D) }, new RegExp(f.exception)) }) }) diff --git a/test/fixtures/base58check.json b/test/fixtures/base58check.json index dc4928f..3314ec5 100644 --- a/test/fixtures/base58check.json +++ b/test/fixtures/base58check.json @@ -1,5 +1,12 @@ { "valid": [ + { + "string": "1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i", + "decode": { + "payload": "65a16059864a2fdbc7c99a4723a8395bc6f188eb", + "checksum": "c046b2ff" + } + }, { "string": "1AGNa15ZQXAZUgFiqJ2i7Z2DPU2J6hW62i", "decode": { diff --git a/test/fixtures/eckey.json b/test/fixtures/eckey.json index 923ed42..fff0164 100644 --- a/test/fixtures/eckey.json +++ b/test/fixtures/eckey.json @@ -67,6 +67,10 @@ ], "invalid": { "constructor": [ + { + "exception": "Private key must be greater than 0", + "D": "-1" + }, { "exception": "Private key must be greater than 0", "D": "0"