Skip to content

Commit 41d6475

Browse files
committed
Merge pull request bitcoinjs#476 from bitcoinjs/bequal
use buffer-equals / buffer-reverse
2 parents c50d510 + 731a31e commit 41d6475

File tree

9 files changed

+25
-47
lines changed

9 files changed

+25
-47
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@
6262
"bigi": "^1.4.0",
6363
"bip66": "^1.1.0",
6464
"bs58check": "^1.0.5",
65+
"buffer-equals": "^1.0.3",
66+
"buffer-reverse": "^1.0.0",
6567
"create-hash": "^1.1.0",
6668
"create-hmac": "^1.1.3",
6769
"ecurve": "^1.0.0",

src/block.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var bufferutils = require('./bufferutils')
22
var bcrypto = require('./crypto')
3+
var bufferReverse = require('buffer-reverse')
34

45
var Transaction = require('./transaction')
56

@@ -70,7 +71,7 @@ Block.prototype.getHash = function () {
7071
}
7172

7273
Block.prototype.getId = function () {
73-
return bufferutils.reverse(this.getHash()).toString('hex')
74+
return bufferReverse(this.getHash()).toString('hex')
7475
}
7576

7677
Block.prototype.getUTCDate = function () {

src/bufferutils.js

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -167,29 +167,13 @@ function varIntBuffer (i) {
167167
return buffer
168168
}
169169

170-
function equal (a, b) {
171-
if (a.length !== b.length) return false
172-
173-
for (var i = 0; i < a.length; ++i) {
174-
if (a[i] !== b[i]) return false
175-
}
176-
177-
return true
178-
}
179-
180-
function reverse (buffer) {
181-
var buffer2 = new Buffer(buffer)
182-
Array.prototype.reverse.call(buffer2)
183-
return buffer2
184-
}
185-
186170
module.exports = {
187-
equal: equal,
171+
equal: require('buffer-equals'),
188172
pushDataSize: pushDataSize,
189173
readPushDataInt: readPushDataInt,
190174
readUInt64LE: readUInt64LE,
191175
readVarInt: readVarInt,
192-
reverse: reverse,
176+
reverse: require('buffer-reverse'),
193177
varIntBuffer: varIntBuffer,
194178
varIntSize: varIntSize,
195179
writePushDataInt: writePushDataInt,

src/transaction.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
var bufferutils = require('./bufferutils')
21
var bcrypto = require('./crypto')
3-
var opcodes = require('./opcodes')
42
var bscript = require('./script')
3+
var bufferReverse = require('buffer-reverse')
4+
var bufferutils = require('./bufferutils')
5+
var opcodes = require('./opcodes')
56
var typeforce = require('typeforce')
67
var types = require('./types')
78

@@ -247,7 +248,7 @@ Transaction.prototype.getHash = function () {
247248

248249
Transaction.prototype.getId = function () {
249250
// transaction hash's are displayed in reverse order
250-
return bufferutils.reverse(this.getHash()).toString('hex')
251+
return bufferReverse(this.getHash()).toString('hex')
251252
}
252253

253254
Transaction.prototype.toBuffer = function () {

src/transaction_builder.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
var baddress = require('./address')
22
var bcrypto = require('./crypto')
33
var bscript = require('./script')
4-
var bufferutils = require('./bufferutils')
4+
var bufferEquals = require('buffer-equals')
5+
var bufferReverse = require('buffer-reverse/inplace')
56
var networks = require('./networks')
67
var ops = require('./opcodes')
78

@@ -17,7 +18,7 @@ function fixMSSignatures (transaction, vin, pubKeys, signatures, prevOutScript,
1718

1819
return pubKeys.map(function (pubKey) {
1920
// skip optionally provided pubKey
20-
if (skipPubKey && bufferutils.equal(skipPubKey, pubKey)) return undefined
21+
if (skipPubKey && bufferEquals(skipPubKey, pubKey)) return undefined
2122

2223
var matched
2324
var keyPair2 = ECPair.fromPublicKeyBuffer(pubKey)
@@ -173,7 +174,7 @@ TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOu
173174
if (typeof txHash === 'string') {
174175
// transaction hashs's are displayed in reverse order, un-reverse it
175176
txHash = new Buffer(txHash, 'hex')
176-
Array.prototype.reverse.call(txHash)
177+
bufferReverse(txHash)
177178

178179
// is it a Transaction object?
179180
} else if (txHash instanceof Transaction) {
@@ -346,7 +347,7 @@ TransactionBuilder.prototype.sign = function (index, keyPair, redeemScript, hash
346347
if (canSign) {
347348
// if redeemScript was provided, enforce consistency
348349
if (redeemScript) {
349-
if (!bufferutils.equal(input.redeemScript, redeemScript)) throw new Error('Inconsistent redeemScript')
350+
if (!bufferEquals(input.redeemScript, redeemScript)) throw new Error('Inconsistent redeemScript')
350351
}
351352

352353
if (input.hashType !== hashType) throw new Error('Inconsistent hashType')
@@ -360,7 +361,7 @@ TransactionBuilder.prototype.sign = function (index, keyPair, redeemScript, hash
360361
if (input.prevOutType !== 'scripthash') throw new Error('PrevOutScript must be P2SH')
361362

362363
var scriptHash = bscript.decompile(input.prevOutScript)[1]
363-
if (!bufferutils.equal(scriptHash, bcrypto.hash160(redeemScript))) throw new Error('RedeemScript does not match ' + scriptHash.toString('hex'))
364+
if (!bufferEquals(scriptHash, bcrypto.hash160(redeemScript))) throw new Error('RedeemScript does not match ' + scriptHash.toString('hex'))
364365
}
365366

366367
var scriptType = bscript.classifyOutput(redeemScript)
@@ -377,7 +378,7 @@ TransactionBuilder.prototype.sign = function (index, keyPair, redeemScript, hash
377378
var pkh1 = redeemScriptChunks[2]
378379
var pkh2 = bcrypto.hash160(keyPair.getPublicKeyBuffer())
379380

380-
if (!bufferutils.equal(pkh1, pkh2)) throw new Error('privateKey cannot sign for this input')
381+
if (!bufferEquals(pkh1, pkh2)) throw new Error('privateKey cannot sign for this input')
381382
pubKeys = [kpPubKey]
382383

383384
break
@@ -427,7 +428,7 @@ TransactionBuilder.prototype.sign = function (index, keyPair, redeemScript, hash
427428

428429
// enforce in order signing of public keys
429430
var valid = input.pubKeys.some(function (pubKey, i) {
430-
if (!bufferutils.equal(kpPubKey, pubKey)) return false
431+
if (!bufferEquals(kpPubKey, pubKey)) return false
431432
if (input.signatures[i]) throw new Error('Signature already exists')
432433

433434
var signature = keyPair.sign(signatureHash)

test/bitcoin.core.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
var assert = require('assert')
44
var base58 = require('bs58')
55
var bitcoin = require('../')
6+
var bufferReverse = require('buffer-reverse')
67

78
var base58_encode_decode = require('./fixtures/core/base58_encode_decode.json')
89
var base58_keys_invalid = require('./fixtures/core/base58_keys_invalid.json')
@@ -150,7 +151,7 @@ describe('Bitcoin-core', function () {
150151
var input = inputs[i]
151152

152153
// reverse because test data is reversed
153-
var prevOutHash = bitcoin.bufferutils.reverse(new Buffer(input[0], 'hex'))
154+
var prevOutHash = bufferReverse(new Buffer(input[0], 'hex'))
154155
var prevOutIndex = input[1]
155156

156157
assert.deepEqual(txIn.hash, prevOutHash)
@@ -203,7 +204,7 @@ describe('Bitcoin-core', function () {
203204
var hashType = f[3]
204205

205206
// reverse because test data is reversed
206-
var expectedHash = bitcoin.bufferutils.reverse(new Buffer(f[4], 'hex'))
207+
var expectedHash = bufferReverse(new Buffer(f[4], 'hex'))
207208

208209
var hashTypes = []
209210
if ((hashType & 0x1f) === bitcoin.Transaction.SIGHASH_NONE) hashTypes.push('SIGHASH_NONE')

test/bufferutils.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -88,19 +88,6 @@ describe('bufferutils', function () {
8888
})
8989
})
9090

91-
describe('reverse', function () {
92-
fixtures.valid.forEach(function (f) {
93-
it('reverses ' + f.hex64 + ' correctly', function () {
94-
var buffer = new Buffer(f.hex64, 'hex')
95-
var buffer2 = bufferutils.reverse(buffer)
96-
97-
Array.prototype.reverse.call(buffer)
98-
99-
assert.deepEqual(buffer, buffer2)
100-
})
101-
})
102-
})
103-
10491
describe('varIntBuffer', function () {
10592
fixtures.valid.forEach(function (f) {
10693
it('encodes ' + f.dec + ' correctly', function () {

test/integration/crypto.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ var async = require('async')
55
var bigi = require('bigi')
66
var bitcoin = require('../../')
77
var blockchain = require('./_blockchain')
8+
var bufferReverse = require('buffer-reverse')
89
var crypto = require('crypto')
910

1011
var ecurve = require('ecurve')
@@ -134,7 +135,7 @@ describe('bitcoinjs-lib (crypto)', function () {
134135

135136
assert(bitcoin.script.isPubKeyHashInput(scriptChunks), 'Expected pubKeyHash script')
136137

137-
var prevOutTxId = bitcoin.bufferutils.reverse(transaction.ins[input.vout].hash).toString('hex')
138+
var prevOutTxId = bufferReverse(transaction.ins[input.vout].hash).toString('hex')
138139
var prevVout = transaction.ins[input.vout].index
139140

140141
tasks.push(function (callback) {

test/transaction_builder.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
var assert = require('assert')
44
var baddress = require('../src/address')
55
var bscript = require('../src/script')
6-
var bufferutils = require('../src/bufferutils')
6+
var bufferReverse = require('buffer-reverse')
77
var ops = require('../src/opcodes')
88

99
var BigInteger = require('bigi')
@@ -92,7 +92,7 @@ describe('TransactionBuilder', function () {
9292
var tx = new Transaction()
9393

9494
f.inputs.forEach(function (input) {
95-
var txHash = bufferutils.reverse(new Buffer(input.txId, 'hex'))
95+
var txHash = bufferReverse(new Buffer(input.txId, 'hex'))
9696

9797
tx.addInput(txHash, input.vout, undefined, bscript.fromASM(input.scriptSig))
9898
})

0 commit comments

Comments
 (0)