varuint-bitcoin
Advanced tools
Comparing version 1.0.3 to 1.0.4
66
index.js
'use strict' | ||
// Number.MAX_SAFE_INTEGER | ||
var MAX_SAFE_INTEGER = 9007199254740991 | ||
function checkUInt53 (n) { | ||
// Number.MAX_SAFE_INTEGER | ||
if (n < 0 || n > 9007199254740991 || n % 1 !== 0) throw new RangeError('value out of range') | ||
if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range') | ||
} | ||
function encode (n, buffer, offset) { | ||
checkUInt53(n) | ||
if (!buffer) buffer = new Buffer(encodingLength(n)) | ||
function encode (number, buffer, offset) { | ||
checkUInt53(number) | ||
if (!buffer) buffer = new Buffer(encodingLength(number)) | ||
if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance') | ||
if (!offset) offset = 0 | ||
if (n < 0xfd) { | ||
buffer.writeUInt8(n, offset) | ||
// 8 bit | ||
if (number < 0xfd) { | ||
buffer.writeUInt8(number, offset) | ||
encode.bytes = 1 | ||
} else if (n <= 0xffff) { | ||
// 16 bit | ||
} else if (number <= 0xffff) { | ||
buffer.writeUInt8(0xfd, offset) | ||
buffer.writeUInt16LE(n, offset + 1) | ||
buffer.writeUInt16LE(number, offset + 1) | ||
encode.bytes = 3 | ||
} else if (n <= 0xffffffff) { | ||
// 32 bit | ||
} else if (number <= 0xffffffff) { | ||
buffer.writeUInt8(0xfe, offset) | ||
buffer.writeUInt32LE(n, offset + 1) | ||
buffer.writeUInt32LE(number, offset + 1) | ||
encode.bytes = 5 | ||
// 64 bit | ||
} else { | ||
buffer.writeUInt8(0xff, offset) | ||
buffer.writeUInt32LE(n >>> 0, offset + 1) | ||
buffer.writeUInt32LE((n / 0x100000000) | 0, offset + 5) | ||
buffer.writeUInt32LE(number >>> 0, offset + 1) | ||
buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5) | ||
encode.bytes = 9 | ||
} | ||
return buffer | ||
@@ -35,12 +48,21 @@ } | ||
if (!offset) offset = 0 | ||
var first = buffer.readUInt8(offset) | ||
// 8 bit | ||
if (first < 0xfd) { | ||
decode.bytes = 1 | ||
return first | ||
// 16 bit | ||
} else if (first === 0xfd) { | ||
decode.bytes = 3 | ||
return buffer.readUInt16LE(offset + 1) | ||
// 32 bit | ||
} else if (first === 0xfe) { | ||
decode.bytes = 5 | ||
return buffer.readUInt32LE(offset + 1) | ||
// 64 bit | ||
} else { | ||
@@ -50,14 +72,16 @@ decode.bytes = 9 | ||
var hi = buffer.readUInt32LE(offset + 5) | ||
var n = hi * 0x0100000000 + lo | ||
checkUInt53(n) | ||
return n | ||
var number = hi * 0x0100000000 + lo | ||
checkUInt53(number) | ||
return number | ||
} | ||
} | ||
function encodingLength (n) { | ||
checkUInt53(n) | ||
function encodingLength (number) { | ||
checkUInt53(number) | ||
return ( | ||
n < 0xfd ? 1 | ||
: n <= 0xffff ? 3 | ||
: n <= 0xffffffff ? 5 | ||
number < 0xfd ? 1 | ||
: number <= 0xffff ? 3 | ||
: number <= 0xffffffff ? 5 | ||
: 9 | ||
@@ -64,0 +88,0 @@ ) |
{ | ||
"name": "varuint-bitcoin", | ||
"version": "1.0.3", | ||
"version": "1.0.4", | ||
"description": "encode/decode number as bitcoin variable length integer", | ||
@@ -5,0 +5,0 @@ "homepage": "https://github.com/bitcoinjs/varuint-bitcoin", |
4968
70