diff --git a/src/bufferutils.js b/src/bufferutils.js
index 9f1c85e..773e502 100644
--- a/src/bufferutils.js
+++ b/src/bufferutils.js
@@ -168,6 +168,16 @@ function varIntBuffer (i) {
   return buffer
 }
 
+function equal (a, b) {
+  if (a.length !== b.length) return false
+
+  for (var i = 0; i < a.length; ++i) {
+    if (a[i] !== b[i]) return false
+  }
+
+  return true
+}
+
 function reverse (buffer) {
   var buffer2 = new Buffer(buffer)
   Array.prototype.reverse.call(buffer2)
@@ -175,6 +185,7 @@ function reverse (buffer) {
 }
 
 module.exports = {
+  equal: equal,
   pushDataSize: pushDataSize,
   readPushDataInt: readPushDataInt,
   readUInt64LE: readUInt64LE,
diff --git a/src/transaction_builder.js b/src/transaction_builder.js
index cafcfc8..e2b7e28 100644
--- a/src/transaction_builder.js
+++ b/src/transaction_builder.js
@@ -399,7 +399,7 @@ TransactionBuilder.prototype.sign = function (index, keyPair, redeemScript, hash
 
   // enforce in order signing of public keys
   assert(input.pubKeys.some(function (pubKey, i) {
-    if (kpPubKey.compare(pubKey) !== 0) return false
+    if (!bufferutils.equal(kpPubKey, pubKey)) return false
 
     assert(!input.signatures[i], 'Signature already exists')
 
@@ -407,7 +407,7 @@ TransactionBuilder.prototype.sign = function (index, keyPair, redeemScript, hash
     input.signatures[i] = signature
 
     return true
-  }), 'key pair cannot sign for this input')
+  }, this), 'key pair cannot sign for this input')
 }
 
 module.exports = TransactionBuilder