From 7e9b5d858497c4ec63bf1ff7f02509194520bd83 Mon Sep 17 00:00:00 2001
From: Daniel Cousens <github@dcousens.com>
Date: Fri, 30 May 2014 16:28:13 +1000
Subject: [PATCH 1/9] bufferutils: return opcode for use

---
 src/bufferutils.js  | 1 +
 test/bufferutils.js | 2 ++
 2 files changed, 3 insertions(+)

diff --git a/src/bufferutils.js b/src/bufferutils.js
index ac340e9..1f4afaa 100644
--- a/src/bufferutils.js
+++ b/src/bufferutils.js
@@ -37,6 +37,7 @@ function readPushDataInt(buffer, offset) {
   }
 
   return {
+    opcode: opcode,
     number: number,
     size: size
   }
diff --git a/test/bufferutils.js b/test/bufferutils.js
index 72cec2d..04bfd0c 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)
       })

From b10e96cbff0c88ca171366e1c6af49b803f8e828 Mon Sep 17 00:00:00 2001
From: Daniel Cousens <github@dcousens.com>
Date: Fri, 30 May 2014 17:49:12 +1000
Subject: [PATCH 2/9] ecdsa: serializeSig should return a Buffer

---
 src/ecdsa.js | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

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)
 }
 
 /**

From 978f0c5406fdd0b927578455e308e899a161e3e1 Mon Sep 17 00:00:00 2001
From: Daniel Cousens <github@dcousens.com>
Date: Sat, 31 May 2014 11:23:47 +1000
Subject: [PATCH 3/9] ECKey: adds test to ensure throws on negative D

---
 test/fixtures/eckey.json | 4 ++++
 1 file changed, 4 insertions(+)

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"

From 5f88cb89318d92884c7f2203b1088b70988f13d8 Mon Sep 17 00:00:00 2001
From: Daniel Cousens <github@dcousens.com>
Date: Sat, 31 May 2014 11:24:00 +1000
Subject: [PATCH 4/9] ECKey: use signum over compareTo

---
 src/eckey.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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)

From baec325e6f6d73ad6c947e436ebdc0f3052a4ae1 Mon Sep 17 00:00:00 2001
From: Daniel Cousens <github@dcousens.com>
Date: Sat, 31 May 2014 11:25:11 +1000
Subject: [PATCH 5/9] base58: use signum over compareTo

---
 src/base58.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/base58.js b/src/base58.js
index 5b21538..dcfe808 100644
--- a/src/base58.js
+++ b/src/base58.js
@@ -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)
 

From 77ed66b24ddcf4184ba579271728e6a2ba87b7dc Mon Sep 17 00:00:00 2001
From: Daniel Cousens <github@dcousens.com>
Date: Sat, 31 May 2014 11:28:00 +1000
Subject: [PATCH 6/9] ECKey: ensure throw is from ECKey

---
 test/eckey.js | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

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

From 2b2081bed906be7c6fbf61ef17b9c5bc89b89e16 Mon Sep 17 00:00:00 2001
From: Daniel Cousens <github@dcousens.com>
Date: Sat, 31 May 2014 11:31:19 +1000
Subject: [PATCH 7/9] base58check: buffers only, remove explicit 0

Undefined is treated as zero if it ever gets to this point anyway, so no
value is added by having this default param here.

A test fixture to verify this behaviour is added.
---
 src/base58check.js             | 7 +------
 test/base58check.js            | 3 +--
 test/fixtures/base58check.json | 7 +++++++
 3 files changed, 9 insertions(+), 8 deletions(-)

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/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/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": {

From 61c57adbf86d8cee0122ae3ae15aae8d84a7938f Mon Sep 17 00:00:00 2001
From: Daniel Cousens <github@dcousens.com>
Date: Sat, 31 May 2014 11:48:03 +1000
Subject: [PATCH 8/9] Address: Expected T, got PARAM for Buffer assertion

---
 src/address.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

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')
 

From 77d4325d4b57d3b26494b56922b6ce9b89de1d7b Mon Sep 17 00:00:00 2001
From: Daniel Cousens <github@dcousens.com>
Date: Sat, 31 May 2014 11:48:15 +1000
Subject: [PATCH 9/9] base58: cleanup variable names

The encode/decode functions are also now similar syntactically.
---
 src/base58.js | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/base58.js b/src/base58.js
index dcfe808..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)
 
@@ -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 = {