From ee3d3eaea1dfd31e83899717beb0bb18269e6bf9 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 18 May 2016 07:09:16 -0700 Subject: [PATCH] drop utils.read/write. --- lib/bcoin/bloom.js | 7 +- lib/bcoin/chaindb.js | 2 +- lib/bcoin/hd.js | 2 +- lib/bcoin/miner.js | 2 +- lib/bcoin/protocol/framer.js | 4 +- lib/bcoin/protocol/parser.js | 12 +- lib/bcoin/reader.js | 22 +- lib/bcoin/script.js | 4 +- lib/bcoin/scrypt.js | 6 +- lib/bcoin/txdb.js | 2 +- lib/bcoin/utils.js | 408 ++--------------------------------- lib/bcoin/workers.js | 6 +- lib/bcoin/writer.js | 38 ++-- 13 files changed, 78 insertions(+), 437 deletions(-) diff --git a/lib/bcoin/bloom.js b/lib/bcoin/bloom.js index 046079e1..46ec7f40 100644 --- a/lib/bcoin/bloom.js +++ b/lib/bcoin/bloom.js @@ -78,7 +78,10 @@ Bloom.prototype.add = function add(val, enc) { shift = bit >>> 5; shift *= 4; - utils.writeU32(this.filter, utils.readU32(this.filter, shift) | pos, shift); + this.filter.writeUInt32LE( + this.filter.readUInt32LE(shift, true) | pos, + shift, + true); } }; @@ -101,7 +104,7 @@ Bloom.prototype.test = function test(val, enc) { shift = bit >>> 5; shift *= 4; - if ((utils.readU32(this.filter, shift) & pos) === 0) + if ((this.filter.readUInt32LE(shift, true) & pos) === 0) return false; } diff --git a/lib/bcoin/chaindb.js b/lib/bcoin/chaindb.js index 8183de9f..88534398 100644 --- a/lib/bcoin/chaindb.js +++ b/lib/bcoin/chaindb.js @@ -457,7 +457,7 @@ ChainDB.prototype.save = function save(entry, block, connect, callback) { hash = new Buffer(entry.hash, 'hex'); height = new Buffer(4); - utils.writeU32(height, entry.height, 0); + height.writeUInt32LE(height, 0, true); batch.put('h/' + entry.hash, height); batch.put('e/' + entry.hash, entry.toRaw()); diff --git a/lib/bcoin/hd.js b/lib/bcoin/hd.js index 5ebf0a45..693071f3 100644 --- a/lib/bcoin/hd.js +++ b/lib/bcoin/hd.js @@ -609,7 +609,7 @@ HDPrivateKey.prototype.derivePurpose45 = function derivePurpose45() { HDPrivateKey.prototype.isMaster = function isMaster() { return this.depth === 0 && this.childIndex === 0 - && utils.readU32(this.parentFingerPrint, 0) === 0; + && this.parentFingerPrint.readUInt32LE(0, true) === 0; }; /** diff --git a/lib/bcoin/miner.js b/lib/bcoin/miner.js index c5dc7ed6..63401927 100644 --- a/lib/bcoin/miner.js +++ b/lib/bcoin/miner.js @@ -528,7 +528,7 @@ MinerBlock.prototype.findNonce = function findNonce() { // Update the raw buffer (faster than // constantly serializing the block) - utils.writeU32(data, block.nonce, 76); + data.writeUInt32LE(block.nonce, 76, true); // Send progress report every so often if (block.nonce % 100000 === 0) diff --git a/lib/bcoin/protocol/framer.js b/lib/bcoin/protocol/framer.js index 9b50770b..d29edeb5 100644 --- a/lib/bcoin/protocol/framer.js +++ b/lib/bcoin/protocol/framer.js @@ -51,7 +51,7 @@ Framer.prototype.header = function header(cmd, payload) { assert(payload.length <= 0xffffffff); // Magic value - utils.writeU32(h, this.network.magic, 0); + h.writeUInt32LE(this.network.magic, 0, true); // Command len = cmd.copy(h, 4); @@ -59,7 +59,7 @@ Framer.prototype.header = function header(cmd, payload) { h[i] = 0; // Payload length - utils.writeU32(h, payload.length, 16); + h.writeUInt32LE(payload.length, 16, true); // Checksum utils.checksum(payload).copy(h, 20); diff --git a/lib/bcoin/protocol/parser.js b/lib/bcoin/protocol/parser.js index f470b8c2..0aebc792 100644 --- a/lib/bcoin/protocol/parser.js +++ b/lib/bcoin/protocol/parser.js @@ -90,6 +90,8 @@ Parser.prototype.feed = function feed(data) { */ Parser.prototype.parse = function parse(chunk) { + var checksum; + if (chunk.length > constants.MAX_MESSAGE) return this._error('Packet too large: %dmb.', utils.mb(chunk.length)); @@ -100,7 +102,9 @@ Parser.prototype.parse = function parse(chunk) { this.packet.payload = chunk; - if (utils.readU32(utils.checksum(this.packet.payload)) !== this.packet.checksum) + checksum = utils.checksum(this.packet.payload).readUInt32LE(0, true); + + if (checksum !== this.packet.checksum) return this._error('Invalid checksum'); try { @@ -126,7 +130,7 @@ Parser.prototype.parse = function parse(chunk) { Parser.prototype.parseHeader = function parseHeader(h) { var i, magic, cmd; - magic = utils.readU32(h, 0); + magic = h.readUInt32LE(0, true); if (magic !== this.network.magic) return this._error('Invalid magic value: ' + magic.toString(16)); @@ -138,7 +142,7 @@ Parser.prototype.parseHeader = function parseHeader(h) { return this._error('Not NULL-terminated cmd'); cmd = h.toString('ascii', 4, 4 + i); - this.waiting = utils.readU32(h, 16); + this.waiting = h.readUInt32LE(16, true); if (this.waiting > constants.MAX_MESSAGE) return this._error('Packet length too large: %dmb', utils.mb(this.waiting)); @@ -146,7 +150,7 @@ Parser.prototype.parseHeader = function parseHeader(h) { return { cmd: cmd, length: this.waiting, - checksum: utils.readU32(h, 20) + checksum: h.readUInt32LE(20, true) }; }; diff --git a/lib/bcoin/reader.js b/lib/bcoin/reader.js index de089196..ae530a08 100644 --- a/lib/bcoin/reader.js +++ b/lib/bcoin/reader.js @@ -145,7 +145,7 @@ BufferReader.prototype.destroy = function destroy() { BufferReader.prototype.readU8 = function readU8() { var ret; assert(this.offset + 1 <= this.data.length); - ret = utils.readU8(this.data, this.offset); + ret = this.data.readUInt8(this.offset, true); this.offset += 1; return ret; }; @@ -158,7 +158,7 @@ BufferReader.prototype.readU8 = function readU8() { BufferReader.prototype.readU16 = function readU16() { var ret; assert(this.offset + 2 <= this.data.length); - ret = utils.readU16(this.data, this.offset); + ret = this.data.readUInt16LE(this.offset, true); this.offset += 2; return ret; }; @@ -171,7 +171,7 @@ BufferReader.prototype.readU16 = function readU16() { BufferReader.prototype.readU16BE = function readU16BE() { var ret; assert(this.offset + 2 <= this.data.length); - ret = utils.readU16BE(this.data, this.offset); + ret = this.data.readUInt16BE(this.offset, true); this.offset += 2; return ret; }; @@ -184,7 +184,7 @@ BufferReader.prototype.readU16BE = function readU16BE() { BufferReader.prototype.readU32 = function readU32() { var ret; assert(this.offset + 4 <= this.data.length); - ret = utils.readU32(this.data, this.offset); + ret = this.data.readUInt32LE(this.offset, true); this.offset += 4; return ret; }; @@ -197,7 +197,7 @@ BufferReader.prototype.readU32 = function readU32() { BufferReader.prototype.readU32BE = function readU32BE() { var ret; assert(this.offset + 4 <= this.data.length); - ret = utils.readU32BE(this.data, this.offset); + ret = this.data.readUInt32BE(this.offset, true); this.offset += 4; return ret; }; @@ -284,7 +284,7 @@ BufferReader.prototype.readU53BE = function readU53BE() { BufferReader.prototype.read8 = function read8() { var ret; assert(this.offset + 1 <= this.data.length); - ret = utils.read8(this.data, this.offset); + ret = this.data.readInt8(this.offset, true); this.offset += 1; return ret; }; @@ -297,7 +297,7 @@ BufferReader.prototype.read8 = function read8() { BufferReader.prototype.read16 = function read16() { var ret; assert(this.offset + 2 <= this.data.length); - ret = utils.read16(this.data, this.offset); + ret = this.data.readInt16LE(this.offset, true); this.offset += 2; return ret; }; @@ -310,7 +310,7 @@ BufferReader.prototype.read16 = function read16() { BufferReader.prototype.read16BE = function read16BE() { var ret; assert(this.offset + 2 <= this.data.length); - ret = utils.read16BE(this.data, this.offset); + ret = this.data.readInt16BE(this.offset, true); this.offset += 2; return ret; }; @@ -323,7 +323,7 @@ BufferReader.prototype.read16BE = function read16BE() { BufferReader.prototype.read32 = function read32() { var ret; assert(this.offset + 4 <= this.data.length); - ret = utils.read32(this.data, this.offset); + ret = this.data.readInt32LE(this.offset, true); this.offset += 4; return ret; }; @@ -336,7 +336,7 @@ BufferReader.prototype.read32 = function read32() { BufferReader.prototype.read32BE = function read32BE() { var ret; assert(this.offset + 4 <= this.data.length); - ret = utils.read32BE(this.data, this.offset); + ret = this.data.readInt32BE(this.offset, true); this.offset += 4; return ret; }; @@ -577,7 +577,7 @@ BufferReader.prototype.readNullString = function readNullString(enc) { BufferReader.prototype.createChecksum = function createChecksum() { var start = this.stack[this.stack.length - 1] || 0; var data = this.data.slice(start, this.offset); - return utils.readU32(utils.checksum(data), 0); + return utils.checksum(data).readUInt32LE(0, true); }; /** diff --git a/lib/bcoin/script.js b/lib/bcoin/script.js index 7d3858fc..0ab9976d 100644 --- a/lib/bcoin/script.js +++ b/lib/bcoin/script.js @@ -2554,7 +2554,7 @@ Script.prototype.isCommitment = function isCommitment() { return false; if (this.raw[1] !== 0x24) return false; - if (utils.readU32BE(this.raw, 2) !== 0xaa21a9ed) + if (this.raw.readUInt32BE(2, true) !== 0xaa21a9ed) return false; return true; } @@ -2562,7 +2562,7 @@ Script.prototype.isCommitment = function isCommitment() { && this.code[0] === opcodes.OP_RETURN && Buffer.isBuffer(this.code[1]) && this.code[1].length === 36 - && utils.readU32BE(this.code[1], 0) === 0xaa21a9ed; + && this.code[1].readUInt32BE(0, true) === 0xaa21a9ed; }; /** diff --git a/lib/bcoin/scrypt.js b/lib/bcoin/scrypt.js index 0d49d1b8..a3e47732 100644 --- a/lib/bcoin/scrypt.js +++ b/lib/bcoin/scrypt.js @@ -75,7 +75,7 @@ function salsa20_8(B) { var i; for (i = 0; i < 16; i++) - B32[i] = utils.readU32(B, i * 4); + B32[i] = B.readUInt32LE(i * 4, true); for (i = 0; i < 16; i++) x[i] = B32[i]; @@ -126,7 +126,7 @@ function salsa20_8(B) { B32[i] += x[i]; for (i = 0; i < 16; i++) - utils.writeU32(B, B32[i], 4 * i); + B.writeUInt32LE(B32[i], 4 * i, true); } function R(a, b) { @@ -153,7 +153,7 @@ function blockmix_salsa8(B, Y, r) { } function integerify(B, r) { - return utils.readU32(B, (2 * r - 1) * 64); + return B.readUInt32LE((2 * r - 1) * 64, true); } function smix(B, r, N, V, XY) { diff --git a/lib/bcoin/txdb.js b/lib/bcoin/txdb.js index 7d6d5181..07851982 100644 --- a/lib/bcoin/txdb.js +++ b/lib/bcoin/txdb.js @@ -1643,7 +1643,7 @@ TXDB.prototype.getBalance = function getBalance(address, callback) { utils.forEachSerial(hashes, function(hash, next) { self.db.fetch('c/' + hash[0] + '/' + hash[1], function(data, key) { - var height = utils.readU32(data, 4); + var height = data.readUInt32LE(4, true); var value = utils.read64N(data, 8); assert(data.length >= 16); diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index 15133ebe..ca281047 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -1294,104 +1294,11 @@ utils.U64 = new bn('ffffffffffffffff', 'hex'); utils.nonce = function _nonce() { var nonce = new Buffer(8); - utils.writeU32(nonce, Math.random() * 0x100000000 | 0, 0); - utils.writeU32(nonce, Math.random() * 0x100000000 | 0, 4); + nonce.writeUInt32LE(Math.random() * 0x100000000 | 0, 0, true); + nonce.writeUInt32LE(Math.random() * 0x100000000 | 0, 4, true); return new bn(nonce); }; -// -// Integer Functions -// -// Non-64-bit functions originally taken from the node.js tree: -// -// Copyright Joyent, Inc. and other Node contributors. All rights reserved. -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -// IN THE SOFTWARE. -// - -/** - * Read uint8. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.readU8 = function readU8(data, off) { - off = off >>> 0; - return data[off]; -}; - -/** - * Read uint16le. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.readU16 = function readU16(data, off) { - off = off >>> 0; - return data[off] | (data[off + 1] << 8); -}; - -/** - * Read uint16be. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.readU16BE = function readU16BE(data, off) { - off = off >>> 0; - return (data[off] << 8) | data[off + 1]; -}; - -/** - * Read uint32le. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.readU32 = function readU32(data, off) { - off = off >>> 0; - - return ((data[off]) - | (data[off + 1] << 8) - | (data[off + 2] << 16)) - + (data[off + 3] * 0x1000000); -}; - -/** - * Read uint32be. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.readU32BE = function readU32BE(data, off) { - off = off >>> 0; - - return (data[off] * 0x1000000) - + ((data[off + 1] << 16) - | (data[off + 2] << 8) - | data[off + 3]); -}; - /** * Read uint64le. * @param {Buffer} data @@ -1420,80 +1327,6 @@ utils.readU64BE = function readU64BE(data, off) { return new bn(num, 'be'); }; -/** - * Read int8. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.read8 = function read8(data, off) { - var num; - off = off >>> 0; - num = data[off]; - return !(num & 0x80) ? num : (0xff - num + 1) * -1; -}; - -/** - * Read int16le. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.read16 = function read16(data, off) { - var num; - off = off >>> 0; - num = data[off] | (data[off + 1] << 8); - return (num & 0x8000) ? num | 0xffff0000 : num; -}; - -/** - * Read int16be. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.read16BE = function read16BE(data, off) { - var num; - off = off >>> 0; - num = data[off + 1] | (data[off] << 8); - return (num & 0x8000) ? num | 0xffff0000 : num; -}; - -/** - * Read int32le. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.read32 = function read32(data, off) { - off = off >>> 0; - - return (data[off]) - | (data[off + 1] << 8) - | (data[off + 2] << 16) - | (data[off + 3] << 24); -}; - -/** - * Read int32be. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.read32BE = function read32BE(data, off) { - off = off >>> 0; - - return (data[off] << 24) - | (data[off + 1] << 16) - | (data[off + 2] << 8) - | (data[off + 3]); -}; - /** * Read int64le. * @param {Buffer} data @@ -1534,74 +1367,6 @@ utils.read64BE = function read64BE(data, off) { return new bn(num, 'be'); }; -/** - * Write uint8. - * @param {Number} value - */ - -utils.writeU8 = function writeU8(dst, num, off) { - num = +num; - off = off >>> 0; - dst[off] = num & 0xff; - return 1; -}; - -/** - * Write uint16le. - * @param {Number} value - */ - -utils.writeU16 = function writeU16(dst, num, off) { - num = +num; - off = off >>> 0; - dst[off] = num & 0xff; - dst[off + 1] = (num >>> 8) & 0xff; - return 2; -}; - -/** - * Write uint16be. - * @param {Number} value - */ - -utils.writeU16BE = function write16BE(dst, num, off) { - num = +num; - off = off >>> 0; - dst[off] = (num >>> 8) & 0xff; - dst[off + 1] = num & 0xff; - return 2; -}; - -/** - * Write uint32le. - * @param {Number} value - */ - -utils.writeU32 = function writeU32(dst, num, off) { - num = +num; - off = off >>> 0; - dst[off + 3] = (num >>> 24) & 0xff; - dst[off + 2] = (num >>> 16) & 0xff; - dst[off + 1] = (num >>> 8) & 0xff; - dst[off] = num & 0xff; - return 4; -}; - -/** - * Write uint32be. - * @param {Number} value - */ - -utils.writeU32BE = function writeU32BE(dst, num, off) { - num = +num; - off = off >>> 0; - dst[off] = (num >>> 24) & 0xff; - dst[off + 1] = (num >>> 16) & 0xff; - dst[off + 2] = (num >>> 8) & 0xff; - dst[off + 3] = num & 0xff; - return 4; -}; - /** * Write uint64le. * @param {BN|Number} value @@ -1707,7 +1472,7 @@ utils.write64N = function write64N(dst, num, off, be) { dst[off + 7] = (hi >>> 24) & 0xff; } - return 8; + return off + 8; }; /** @@ -1735,11 +1500,11 @@ utils.readU64N = function readU64N(data, off, force53, be) { off = off >>> 0; if (be) { - hi = utils.readU32(data, off); - lo = utils.readU32(data, off + 4); + hi = data.readUInt32LE(off, true); + lo = data.readUInt32LE(off + 4, true); } else { - hi = utils.readU32(data, off + 4); - lo = utils.readU32(data, off); + hi = data.readUInt32LE(off + 4, true); + lo = data.readUInt32LE(off, true); } if (force53) @@ -1778,11 +1543,11 @@ utils.read64N = function read64N(data, off, force53, be) { off = off >>> 0; if (be) { - hi = utils.readU32(data, off); - lo = utils.readU32(data, off + 4); + hi = data.readUInt32LE(off, true); + lo = data.readUInt32LE(off + 4, true); } else { - hi = utils.readU32(data, off + 4); - lo = utils.readU32(data, off); + hi = data.readUInt32LE(off + 4, true); + lo = data.readUInt32LE(off, true); } if (hi & 0x80000000) { @@ -1818,137 +1583,6 @@ utils.read64NBE = function read64NBE(data, off, force53) { return utils.read64N(data, off, force53, true); }; -/** - * Read first least significant 53 bits of - * a uint64le as a js number. Maintain the sign. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.readU53 = function readU53(data, off) { - return utils.readU64N(data, off, true); -}; - -/** - * Read first least significant 53 bits of - * a uint64be as a js number. Maintain the sign. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.readU53BE = function readU53BE(data, off) { - return utils.readU64NBE(data, off, true); -}; - -/** - * Read first least significant 53 bits of - * a uint64le as a js number. Maintain the sign. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.read53 = function read53(data, off) { - return utils.read64N(data, off, true); -}; - -/** - * Read first least significant 53 bits of - * a int64be as a js number. Maintain the sign. - * @param {Buffer} data - * @param {Number} off - * @returns {Number} - */ - -utils.read53BE = function read53BE(data, off) { - return utils.read64NBE(data, off, true); -}; - -/** - * Write int8. - * @param {Buffer} dst - * @param {Number} num - * @param {Number} off - * @returns {Number} Number of bytes written. - */ - -utils.write8 = function write8(dst, num, off) { - num = +num; - off = off >>> 0; - dst[off] = num & 0xff; - return 1; -}; - -/** - * Write int16le. - * @param {Buffer} dst - * @param {Number} num - * @param {Number} off - * @returns {Number} Number of bytes written. - */ - -utils.write16 = function write16(dst, num, off) { - num = +num; - off = off >>> 0; - dst[off] = num & 0xff; - dst[off + 1] = (num >>> 8) & 0xff; - return 2; -}; - -/** - * Write int16be. - * @param {Buffer} dst - * @param {Number} num - * @param {Number} off - * @returns {Number} Number of bytes written. - */ - -utils.write16BE = function write16BE(dst, num, off) { - num = +num; - off = off >>> 0; - dst[off] = (num >>> 8) & 0xff; - dst[off + 1] = num & 0xff; - return 2; -}; - -/** - * Write int32le. - * @param {Buffer} dst - * @param {Number} num - * @param {Number} off - * @returns {Number} Number of bytes written. - */ - -utils.write32 = function write32(dst, num, off) { - num = +num; - off = off >>> 0; - dst[off] = num & 0xff; - dst[off + 1] = (num >>> 8) & 0xff; - dst[off + 2] = (num >>> 16) & 0xff; - dst[off + 3] = (num >>> 24) & 0xff; - return 4; -}; - -/** - * Write int32be. - * @param {Buffer} dst - * @param {Number} num - * @param {Number} off - * @returns {Number} Number of bytes written. - */ - -utils.write32BE = function write32BE(dst, num, off) { - num = +num; - off = off >>> 0; - dst[off] = (num >>> 24) & 0xff; - dst[off + 1] = (num >>> 16) & 0xff; - dst[off + 2] = (num >>> 8) & 0xff; - dst[off + 3] = num & 0xff; - return 4; -}; - /** * Write int64le. * @param {Buffer} dst @@ -1976,7 +1610,7 @@ utils.write64 = function write64(dst, num, off) { for (i = 0; i < num.length; i++) dst[off++] = num[i]; - return 8; + return off; }; /** @@ -2006,7 +1640,7 @@ utils.write64BE = function write64BE(dst, num, off) { for (i = 0; i < num.length; i++) dst[off++] = num[i]; - return 8; + return off; }; /** @@ -2038,7 +1672,7 @@ utils.readVarint = function readVarint(data, off, big) { } else if (data[off] === 0xfe) { size = 5; assert(off + size <= data.length); - value = utils.readU32(data, off + 1); + value = data.readUInt32LE(off + 1, true); if (big) value = new bn(value); } else if (data[off] === 0xff) { @@ -2070,7 +1704,7 @@ utils.writeVarint = function writeVarint(dst, num, off) { if (num.bitLength() > 32) { dst[off] = 0xff; utils.writeU64(dst, num, off + 1); - return 9; + return off + 9; } num = num.toNumber(); } @@ -2079,14 +1713,14 @@ utils.writeVarint = function writeVarint(dst, num, off) { if (num < 0xfd) { dst[off] = num & 0xff; - return 1; + return off + 1; } if (num <= 0xffff) { dst[off] = 0xfd; dst[off + 1] = num & 0xff; dst[off + 2] = (num >>> 8) & 0xff; - return 3; + return off + 3; } if (num <= 0xffffffff) { @@ -2095,13 +1729,13 @@ utils.writeVarint = function writeVarint(dst, num, off) { dst[off + 2] = (num >>> 8) & 0xff; dst[off + 3] = (num >>> 16) & 0xff; dst[off + 4] = (num >>> 24) & 0xff; - return 5; + return off + 5; } dst[off] = 0xff; utils.writeU64N(dst, num, off + 1); - return 9; + return off + 9; }; /** @@ -2543,7 +2177,7 @@ utils.getMerkleBranch = function getMerkleBranch(index, leaves) { for (; size > 1; size = (size + 1) / 2 | 0) { i = Math.min(index ^ 1, size - 1); branch.push(tree[j + i]); - index >>= 1; + index >>>= 1; j += size; } @@ -2575,7 +2209,7 @@ utils.checkMerkleBranch = function checkMerkleBranch(hash, branch, index) { else hash = utils.dsha256(Buffer.concat([hash, otherside])); - index >>= 1; + index >>>= 1; } return hash; diff --git a/lib/bcoin/workers.js b/lib/bcoin/workers.js index bc0bdfb5..cf505e89 100644 --- a/lib/bcoin/workers.js +++ b/lib/bcoin/workers.js @@ -807,9 +807,9 @@ Parser.prototype.feed = function feed(data) { Parser.prototype.parseHeader = function parseHeader(data) { return { - magic: utils.readU32(data, 0), - job: utils.readU32(data, 4), - size: utils.readU32(data, 8) + magic: data.readUInt32LE(0, true), + job: data.readUInt32LE(4, true), + size: data.readUInt32LE(8, true) }; }; diff --git a/lib/bcoin/writer.js b/lib/bcoin/writer.js index b9538c8b..a056b23e 100644 --- a/lib/bcoin/writer.js +++ b/lib/bcoin/writer.js @@ -78,25 +78,25 @@ BufferWriter.prototype.render = function render(keep) { item = this.data[i]; switch (item[0]) { case SEEK: off += item[1]; break; - case UI8: off += utils.writeU8(data, item[1], off); break; - case UI16: off += utils.writeU16(data, item[1], off); break; - case UI16BE: off += utils.writeU16BE(data, item[1], off); break; - case UI32: off += utils.writeU32(data, item[1], off); break; - case UI32BE: off += utils.writeU32BE(data, item[1], off); break; - case UI64: off += utils.writeU64(data, item[1], off); break; - case UI64BE: off += utils.writeU64BE(data, item[1], off); break; - case I8: off += utils.write8(data, item[1], off); break; - case I16: off += utils.write16(data, item[1], off); break; - case I16BE: off += utils.write16BE(data, item[1], off); break; - case I32: off += utils.write32(data, item[1], off); break; - case I32BE: off += utils.write32BE(data, item[1], off); break; - case I64: off += utils.write64(data, item[1], off); break; - case I64BE: off += utils.write64BE(data, item[1], off); break; - case FL: data.writeFloatLE(item[1], off, true); off += 4; break; - case FLBE: data.writeFloatBE(item[1], off, true); off += 4; break; - case DBL: data.writeDoubleLE(item[1], off, true); off += 8; break; - case DBLBE: data.writeDoubleBE(item[1], off, true); off += 8; break; - case VARINT: off += utils.writeVarint(data, item[1], off); break; + case UI8: off = data.writeUInt8(item[1], off, true); break; + case UI16: off = data.writeUInt16LE(item[1], off, true); break; + case UI16BE: off = data.writeUInt16BE(item[1], off, true); break; + case UI32: off = data.writeUInt32LE(item[1], off, true); break; + case UI32BE: off = data.writeUInt32BE(item[1], off, true); break; + case UI64: off = utils.writeU64(data, item[1], off); break; + case UI64BE: off = utils.writeU64BE(data, item[1], off); break; + case I8: off = data.writeInt8(item[1], off, true); break; + case I16: off = data.writeInt16LE(item[1], off, true); break; + case I16BE: off = data.writeInt16BE(item[1], off, true); break; + case I32: off = data.writeInt32LE(item[1], off, true); break; + case I32BE: off = data.writeInt32BE(item[1], off, true); break; + case I64: off = utils.write64(data, item[1], off); break; + case I64BE: off = utils.write64BE(data, item[1], off); break; + case FL: off = data.writeFloatLE(item[1], off, true); break; + case FLBE: off = data.writeFloatBE(item[1], off, true); break; + case DBL: off = data.writeDoubleLE(item[1], off, true); break; + case DBLBE: off = data.writeDoubleBE(item[1], off, true); break; + case VARINT: off = utils.writeVarint(data, item[1], off); break; case BYTES: off += item[1].copy(data, off); break; case STR: off += data.write(item[1], off, item[2]); break; case CHECKSUM: