Skip to content

Commit f090e74

Browse files
antouhouCofresi
authored andcommitted
Fix/deprecated buffer usage (#105)
* Fixed buffer usage in ecdsa, signature and message classes * Fix buffer usage in `BufferWriter` * Fix buffer usage in `PrivateKey` * Fix buffer usage in `Address` * Fix buffer usage in `HDPubKey` * Fix buffer usage in `HDPrivateKey` * Fix buffer usage in `Opcode` * Fix buffer usage in `PublicKey` * Fix buffer usage in `util/buffer` * Fix buffer usage in `MerkleBlock` * Fix buffer usage in `Block` * Fix buffer usage in `BlockHeader` * Fix buffer usage in `Point` * Fix buffer usage in `Hash` * Fix buffer usage in `BN` * Fix buffer usage in `Random` * Fix buffer usage in `Interpreter` * Fix buffer usage in `Script` * Fix buffer usage in `BufferReader` and `base58check` * Fix buffer usage in `VarInt` * Fix buffer usage in `Transaction/Signature` and `GovObject` * Fix buffer usage in `Mnemonic` * Fix buffer usage in `pbkdf2` * Fix buffer usage in `SigHash` * Fix buffer usage in `HashSignature` * Remove usages of `buffer` module * Remove `buffer-compare` module * Fix Buffer usage in tests * Remove `buffer` module from tests * Remove unused sha module * Bump a version * Fix buffer usage in docs
1 parent 52cf444 commit f090e74

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+437
-485
lines changed

benchmark/serialization.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ async.series([
3131
buffers.push(br.toBuffer());
3232

3333
// hashes
34-
var data = bitcore.crypto.Hash.sha256sha256(new Buffer(32));
34+
var data = bitcore.crypto.Hash.sha256sha256(Buffer.alloc(32));
3535
hashBuffers.push(data);
3636
}
3737

docs/examples.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ var address = privateKey.toAddress();
6767

6868
## Generate an address from a SHA256 hash
6969
```javascript
70-
var value = new Buffer('correct horse battery staple');
70+
var value = Buffer.from('correct horse battery staple');
7171
var hash = bitcore.crypto.Hash.sha256(value);
7272
var bn = bitcore.crypto.BN.fromBuffer(hash);
7373

docs/script.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ var script = Script()
8383
.add('OP_IF') // add an opcode by name
8484
.prepend(114) // add OP_2SWAP by code
8585
.add(Opcode.OP_NOT) // add an opcode object
86-
.add(new Buffer('bacacafe', 'hex')) // add a data buffer (will append the size of the push operation first)
86+
.add(Buffer.from('bacacafe', 'hex')) // add a data buffer (will append the size of the push operation first)
8787

8888
assert(script.toString() === 'OP_2SWAP OP_IF OP_NOT 4 0xbacacafe');
8989
```
@@ -92,7 +92,7 @@ assert(script.toString() === 'OP_2SWAP OP_IF OP_NOT 4 0xbacacafe');
9292
`Script` has an easy interface to parse raw scripts from the network or dashd, and to extract useful information. An illustrative example (for more options check the API reference)
9393
9494
```javascript
95-
var raw_script = new Buffer('5221022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da2103e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e921021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc1853ae', 'hex');
95+
var raw_script = Buffer.from('5221022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da2103e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e921021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc1853ae', 'hex');
9696
var s = new Script(raw_script);
9797
console.log(s.toString());
9898
// 'OP_2 33 0x022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da 33 0x03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9 33 0x021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18 OP_3 OP_CHECKMULTISIG'

lib/address.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ Address._transformObject = function(data) {
149149
$.checkArgument(data.hash || data.hashBuffer, 'Must provide a `hash` or `hashBuffer` property');
150150
$.checkArgument(data.type, 'Must provide a `type` property');
151151
return {
152-
hashBuffer: data.hash ? new Buffer(data.hash, 'hex') : data.hashBuffer,
152+
hashBuffer: data.hash ? Buffer.from(data.hash, 'hex') : data.hashBuffer,
153153
network: Networks.get(data.network) || Networks.defaultNetwork,
154154
type: data.type
155155
};
@@ -394,7 +394,7 @@ Address.fromObject = function fromObject(obj) {
394394
JSUtil.isHexa(obj.hash),
395395
'Unexpected hash property, "' + obj.hash + '", expected to be hex.'
396396
);
397-
var hashBuffer = new Buffer(obj.hash, 'hex');
397+
var hashBuffer = Buffer.from(obj.hash, 'hex');
398398
return new Address(hashBuffer, obj.network, obj.type);
399399
};
400400

@@ -462,7 +462,7 @@ Address.prototype.isPayToScriptHash = function() {
462462
* @returns {Buffer} Bitcoin address buffer
463463
*/
464464
Address.prototype.toBuffer = function() {
465-
var version = new Buffer([this.network[this.type]]);
465+
var version = Buffer.from([this.network[this.type]]);
466466
var buf = Buffer.concat([version, this.hashBuffer]);
467467
return buf;
468468
};

lib/block/block.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ Block.fromBuffer = function fromBuffer(buf) {
120120
* @returns {Block} - A hex encoded string of the block
121121
*/
122122
Block.fromString = function fromString(str) {
123-
var buf = new Buffer(str, 'hex');
123+
var buf = Buffer.from(str, 'hex');
124124
return Block.fromBuffer(buf);
125125
};
126126

@@ -130,7 +130,7 @@ Block.fromString = function fromString(str) {
130130
*/
131131
Block.fromRawBlock = function fromRawBlock(data) {
132132
if (!BufferUtil.isBuffer(data)) {
133-
data = new Buffer(data, 'binary');
133+
data = Buffer.from(data, 'binary');
134134
}
135135
var br = BufferReader(data);
136136
br.pos = Block.Values.START_OF_BLOCK;
@@ -278,7 +278,7 @@ Block.prototype.inspect = function inspect() {
278278

279279
Block.Values = {
280280
START_OF_BLOCK: 8, // Start of block in raw block data
281-
NULL_HASH: new Buffer('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
281+
NULL_HASH: Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
282282
};
283283

284284
module.exports = Block;

lib/block/blockheader.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,10 @@ BlockHeader._fromObject = function _fromObject(data) {
7373
var prevHash = data.prevHash;
7474
var merkleRoot = data.merkleRoot;
7575
if (_.isString(data.prevHash)) {
76-
prevHash = BufferUtil.reverse(new Buffer(data.prevHash, 'hex'));
76+
prevHash = BufferUtil.reverse(Buffer.from(data.prevHash, 'hex'));
7777
}
7878
if (_.isString(data.merkleRoot)) {
79-
merkleRoot = BufferUtil.reverse(new Buffer(data.merkleRoot, 'hex'));
79+
merkleRoot = BufferUtil.reverse(Buffer.from(data.merkleRoot, 'hex'));
8080
}
8181
var info = {
8282
hash: data.hash,
@@ -106,7 +106,7 @@ BlockHeader.fromObject = function fromObject(obj) {
106106
*/
107107
BlockHeader.fromRawBlock = function fromRawBlock(data) {
108108
if (!BufferUtil.isBuffer(data)) {
109-
data = new Buffer(data, 'binary');
109+
data = Buffer.from(data, 'binary');
110110
}
111111
var br = BufferReader(data);
112112
br.pos = BlockHeader.Constants.START_OF_HEADER;
@@ -128,7 +128,7 @@ BlockHeader.fromBuffer = function fromBuffer(buf) {
128128
* @returns {BlockHeader} - An instance of block header
129129
*/
130130
BlockHeader.fromString = function fromString(str) {
131-
var buf = new Buffer(str, 'hex');
131+
var buf = Buffer.from(str, 'hex');
132132
return BlockHeader.fromBuffer(buf);
133133
};
134134

lib/block/merkleblock.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ MerkleBlock.prototype.toBufferWriter = function toBufferWriter(bw) {
104104
bw.writeUInt32LE(this.numTransactions);
105105
bw.writeVarintNum(this.hashes.length);
106106
for (var i = 0; i < this.hashes.length; i++) {
107-
bw.write(new Buffer(this.hashes[i], 'hex'));
107+
bw.write(Buffer.from(this.hashes[i], 'hex'));
108108
}
109109
bw.writeVarintNum(this.flags.length);
110110
for (i = 0; i < this.flags.length; i++) {
@@ -185,14 +185,14 @@ MerkleBlock.prototype._traverseMerkleTree = function traverseMerkleTree(depth, p
185185
if(depth === 0 && isParentOfMatch) {
186186
opts.txs.push(hash);
187187
}
188-
return new Buffer(hash, 'hex');
188+
return Buffer.from(hash, 'hex');
189189
} else {
190190
var left = this._traverseMerkleTree(depth-1, pos*2, opts);
191191
var right = left;
192192
if(pos*2+1 < this._calcTreeWidth(depth-1)) {
193193
right = this._traverseMerkleTree(depth-1, pos*2+1, opts);
194194
}
195-
return Hash.sha256sha256(new Buffer.concat([left, right]));
195+
return Hash.sha256sha256(Buffer.concat([left, right]));
196196
}
197197
};
198198

@@ -232,7 +232,7 @@ MerkleBlock.prototype.hasTransaction = function hasTransaction(tx) {
232232
var hash = tx;
233233
if(tx instanceof Transaction) {
234234
// We need to reverse the id hash for the lookup
235-
hash = BufferUtil.reverse(new Buffer(tx.id, 'hex')).toString('hex');
235+
hash = BufferUtil.reverse(Buffer.from(tx.id, 'hex')).toString('hex');
236236
}
237237

238238
var txs = [];

lib/crypto/bn.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ var $ = require('../util/preconditions');
88
var _ = require('lodash');
99

1010
var reversebuf = function(buf) {
11-
var buf2 = new Buffer(buf.length);
11+
var buf2 = Buffer.alloc(buf.length);
1212
for (var i = 0; i < buf.length; i++) {
1313
buf2[i] = buf[buf.length - 1 - i];
1414
}
@@ -45,7 +45,7 @@ BN.fromBuffer = function(buf, opts) {
4545
BN.fromSM = function(buf, opts) {
4646
var ret;
4747
if (buf.length === 0) {
48-
return BN.fromBuffer(new Buffer([0]));
48+
return BN.fromBuffer(Buffer.from([0]));
4949
}
5050

5151
var endian = 'big';
@@ -76,7 +76,7 @@ BN.prototype.toBuffer = function(opts) {
7676
if (opts && opts.size) {
7777
hex = this.toString(16, 2);
7878
var natlen = hex.length / 2;
79-
buf = new Buffer(hex, 'hex');
79+
buf = Buffer.from(hex, 'hex');
8080

8181
if (natlen === opts.size) {
8282
buf = buf;
@@ -87,7 +87,7 @@ BN.prototype.toBuffer = function(opts) {
8787
}
8888
} else {
8989
hex = this.toString(16, 2);
90-
buf = new Buffer(hex, 'hex');
90+
buf = Buffer.from(hex, 'hex');
9191
}
9292

9393
if (typeof opts !== 'undefined' && opts.endian === 'little') {
@@ -102,19 +102,19 @@ BN.prototype.toSMBigEndian = function() {
102102
if (this.cmp(BN.Zero) === -1) {
103103
buf = this.neg().toBuffer();
104104
if (buf[0] & 0x80) {
105-
buf = Buffer.concat([new Buffer([0x80]), buf]);
105+
buf = Buffer.concat([Buffer.from([0x80]), buf]);
106106
} else {
107107
buf[0] = buf[0] | 0x80;
108108
}
109109
} else {
110110
buf = this.toBuffer();
111111
if (buf[0] & 0x80) {
112-
buf = Buffer.concat([new Buffer([0x00]), buf]);
112+
buf = Buffer.concat([Buffer.from([0x00]), buf]);
113113
}
114114
}
115115

116116
if (buf.length === 1 & buf[0] === 0) {
117-
buf = new Buffer([]);
117+
buf = Buffer.from([]);
118118
}
119119
return buf;
120120
};
@@ -192,7 +192,7 @@ BN.trim = function(buf, natlen) {
192192
};
193193

194194
BN.pad = function(buf, natlen, size) {
195-
var rbuf = new Buffer(size);
195+
var rbuf = Buffer.alloc(size);
196196
for (var i = 0; i < buf.length; i++) {
197197
rbuf[rbuf.length - 1 - i] = buf[buf.length - 1 - i];
198198
}

lib/crypto/ecdsa.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,25 +84,25 @@ ECDSA.prototype.deterministicK = function(badrs) {
8484
if (_.isUndefined(badrs)) {
8585
badrs = 0;
8686
}
87-
var v = new Buffer(32);
87+
var v = Buffer.alloc(32);
8888
v.fill(0x01);
89-
var k = new Buffer(32);
89+
var k = Buffer.alloc(32);
9090
k.fill(0x00);
9191
var x = this.privkey.bn.toBuffer({
9292
size: 32
9393
});
9494
var hashbuf = this.endian === 'little' ? BufferUtil.reverse(this.hashbuf) : this.hashbuf
95-
k = Hash.sha256hmac(Buffer.concat([v, new Buffer([0x00]), x, hashbuf]), k);
95+
k = Hash.sha256hmac(Buffer.concat([v, Buffer.from([0x00]), x, hashbuf]), k);
9696
v = Hash.sha256hmac(v, k);
97-
k = Hash.sha256hmac(Buffer.concat([v, new Buffer([0x01]), x, hashbuf]), k);
97+
k = Hash.sha256hmac(Buffer.concat([v, Buffer.from([0x01]), x, hashbuf]), k);
9898
v = Hash.sha256hmac(v, k);
9999
v = Hash.sha256hmac(v, k);
100100
var T = BN.fromBuffer(v);
101101
var N = Point.getN();
102102

103103
// also explained in 3.2, we must ensure T is in the proper range (0, N)
104104
for (var i = 0; i < badrs || !(T.lt(N) && T.gt(BN.Zero)); i++) {
105-
k = Hash.sha256hmac(Buffer.concat([v, new Buffer([0x00])]), k);
105+
k = Hash.sha256hmac(Buffer.concat([v, Buffer.from([0x00])]), k);
106106
v = Hash.sha256hmac(v, k);
107107
v = Hash.sha256hmac(v, k);
108108
T = BN.fromBuffer(v);
@@ -195,7 +195,7 @@ ECDSA.prototype.sigError = function() {
195195
ECDSA.toLowS = function(s) {
196196
//enforce low s
197197
//see BIP 62, "low S values in signatures"
198-
if (s.gt(BN.fromBuffer(new Buffer('7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0', 'hex')))) {
198+
if (s.gt(BN.fromBuffer(Buffer.from('7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0', 'hex')))) {
199199
s = Point.getN().sub(s);
200200
}
201201
return s;

lib/crypto/hash.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
'use strict';
55

6-
var sha512 = require('sha512');
76
var x11hash = require('@dashevo/x11-hash-js');
87
var crypto = require('crypto');
98
var BufferUtil = require('../util/buffer');
@@ -32,7 +31,7 @@ Hash.sha256sha256 = function(buf) {
3231

3332
Hash.x11 = function(buf) {
3433
$.checkArgument(BufferUtil.isBuffer(buf));
35-
return new Buffer.from(x11hash.digest(buf, 1, 1));
34+
return Buffer.from(x11hash.digest(buf, 1, 1));
3635
};
3736

3837
Hash.ripemd160 = function(buf) {
@@ -64,20 +63,20 @@ Hash.hmac = function(hashf, data, key) {
6463
if (key.length > blocksize) {
6564
key = hashf(key);
6665
} else if (key < blocksize) {
67-
var fill = new Buffer(blocksize);
66+
var fill = Buffer.alloc(blocksize);
6867
fill.fill(0);
6968
key.copy(fill);
7069
key = fill;
7170
}
7271

73-
var o_key = new Buffer(blocksize);
72+
var o_key = Buffer.alloc(blocksize);
7473
o_key.fill(0x5c);
7574

76-
var i_key = new Buffer(blocksize);
75+
var i_key = Buffer.alloc(blocksize);
7776
i_key.fill(0x36);
7877

79-
var o_key_pad = new Buffer(blocksize);
80-
var i_key_pad = new Buffer(blocksize);
78+
var o_key_pad = Buffer.alloc(blocksize);
79+
var i_key_pad = Buffer.alloc(blocksize);
8180
for (var i = 0; i < blocksize; i++) {
8281
o_key_pad[i] = o_key[i] ^ key[i];
8382
i_key_pad[i] = i_key[i] ^ key[i];

lib/crypto/hashsignature.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ var hashSignature = {
3939
sig: signature
4040
}).toPublicKey();
4141
var extractedPubKeyId = extractedPublicKey._getID();
42-
var pubKeyId = new Buffer(publicKeyId, 'hex');
42+
var pubKeyId = Buffer.from(publicKeyId, 'hex');
4343

4444
return extractedPubKeyId.equals(pubKeyId);
4545
}
4646
};
4747

48-
module.exports = hashSignature;
48+
module.exports = hashSignature;

lib/crypto/point.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ Point.pointToCompressed = function pointToCompressed(point) {
143143
var prefix;
144144
var odd = ybuf[ybuf.length - 1] % 2;
145145
if (odd) {
146-
prefix = new Buffer([0x03]);
146+
prefix = Buffer.from([0x03]);
147147
} else {
148-
prefix = new Buffer([0x02]);
148+
prefix = Buffer.from([0x02]);
149149
}
150150
return BufferUtil.concat([prefix, xbuf]);
151151
};

lib/crypto/random.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,15 @@ Random.getRandomBufferBrowser = function(size) {
3232

3333
var bbuf = new Uint8Array(size);
3434
crypto.getRandomValues(bbuf);
35-
var buf = new Buffer(bbuf);
35+
var buf = Buffer.from(bbuf);
3636

3737
return buf;
3838
};
3939

4040
/* insecure random bytes, but it never fails */
4141
Random.getPseudoRandomBuffer = function(size) {
4242
var b32 = 0x100000000;
43-
var b = new Buffer(size);
43+
var b = Buffer.alloc(size);
4444
var r;
4545

4646
for (var i = 0; i <= size; i++) {

lib/crypto/signature.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ Signature.fromTxFormat = function(buf) {
8282
};
8383

8484
Signature.fromString = function(str) {
85-
var buf = new Buffer(str, 'hex');
85+
var buf = Buffer.from(str, 'hex');
8686
return Signature.fromDER(buf);
8787
};
8888

@@ -157,7 +157,7 @@ Signature.prototype.toCompact = function(i, compressed) {
157157
if (compressed === false) {
158158
val = val - 4;
159159
}
160-
var b1 = new Buffer([val]);
160+
var b1 = Buffer.from([val]);
161161
var b2 = this.r.toBuffer({
162162
size: 32
163163
});
@@ -174,8 +174,8 @@ Signature.prototype.toBuffer = Signature.prototype.toDER = function() {
174174
var rneg = rnbuf[0] & 0x80 ? true : false;
175175
var sneg = snbuf[0] & 0x80 ? true : false;
176176

177-
var rbuf = rneg ? Buffer.concat([new Buffer([0x00]), rnbuf]) : rnbuf;
178-
var sbuf = sneg ? Buffer.concat([new Buffer([0x00]), snbuf]) : snbuf;
177+
var rbuf = rneg ? Buffer.concat([Buffer.from([0x00]), rnbuf]) : rnbuf;
178+
var sbuf = sneg ? Buffer.concat([Buffer.from([0x00]), snbuf]) : snbuf;
179179

180180
var rlength = rbuf.length;
181181
var slength = sbuf.length;
@@ -184,7 +184,7 @@ Signature.prototype.toBuffer = Signature.prototype.toDER = function() {
184184
var sheader = 0x02;
185185
var header = 0x30;
186186

187-
var der = Buffer.concat([new Buffer([header, length, rheader, rlength]), rbuf, new Buffer([sheader, slength]), sbuf]);
187+
var der = Buffer.concat([Buffer.from([header, length, rheader, rlength]), rbuf, Buffer.from([sheader, slength]), sbuf]);
188188
return der;
189189
};
190190

@@ -302,7 +302,7 @@ Signature.prototype.hasDefinedHashtype = function() {
302302

303303
Signature.prototype.toTxFormat = function() {
304304
var derbuf = this.toDER();
305-
var buf = new Buffer(1);
305+
var buf = Buffer.alloc(1);
306306
buf.writeUInt8(this.nhashtype, 0);
307307
return Buffer.concat([derbuf, buf]);
308308
};

0 commit comments

Comments
 (0)