You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
166 lines
4.0 KiB
166 lines
4.0 KiB
'use strict';
|
|
|
|
var buffer = require('buffer');
|
|
var assert = require('assert');
|
|
|
|
var js = require('./js');
|
|
var $ = require('./preconditions');
|
|
|
|
function equals(a, b) {
|
|
if (a.length !== b.length) {
|
|
return false;
|
|
}
|
|
var length = a.length;
|
|
for (var i = 0; i < length; i++) {
|
|
if (a[i] !== b[i]) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
module.exports = {
|
|
/**
|
|
* Fill a buffer with a value.
|
|
*
|
|
* @param {Buffer} buffer
|
|
* @param {number} value
|
|
* @return {Buffer}
|
|
*/
|
|
fill: function fill(buffer, value) {
|
|
$.checkArgumentType(buffer, 'Buffer', 'buffer');
|
|
$.checkArgumentType(value, 'number', 'value');
|
|
var length = buffer.length;
|
|
for (var i = 0; i < length; i++) {
|
|
buffer[i] = value;
|
|
}
|
|
return buffer;
|
|
},
|
|
|
|
/**
|
|
* Returns true if the given argument is an instance of a buffer. Tests for
|
|
* both node's Buffer and Uint8Array
|
|
*
|
|
* @param {*} arg
|
|
* @return {boolean}
|
|
*/
|
|
isBuffer: function isBuffer(arg) {
|
|
return buffer.Buffer.isBuffer(arg) || arg instanceof Uint8Array;
|
|
},
|
|
|
|
/**
|
|
* Returns a zero-filled byte array
|
|
*
|
|
* @param {number} bytes
|
|
* @return {Buffer}
|
|
*/
|
|
emptyBuffer: function emptyBuffer(bytes) {
|
|
$.checkArgumentType(bytes, 'number', 'bytes');
|
|
var result = new buffer.Buffer(bytes);
|
|
for (var i = 0; i < bytes; i++) {
|
|
result.write('\0', i);
|
|
}
|
|
return result;
|
|
},
|
|
|
|
/**
|
|
* Concatenates a buffer
|
|
*
|
|
* Shortcut for <tt>buffer.Buffer.concat</tt>
|
|
*/
|
|
concat: buffer.Buffer.concat,
|
|
|
|
equals: equals,
|
|
equal: equals,
|
|
|
|
/**
|
|
* Transforms a number from 0 to 255 into a Buffer of size 1 with that value
|
|
*
|
|
* @param {number} integer
|
|
* @return {Buffer}
|
|
*/
|
|
integerAsSingleByteBuffer: function integerAsSingleByteBuffer(integer) {
|
|
$.checkArgumentType(integer, 'number', 'integer');
|
|
return new buffer.Buffer([integer & 0xff]);
|
|
},
|
|
|
|
/**
|
|
* Transform a 4-byte integer into a Buffer of length 4.
|
|
*
|
|
* @param {number} integer
|
|
* @return {Buffer}
|
|
*/
|
|
integerAsBuffer: function integerAsBuffer(integer) {
|
|
$.checkArgumentType(integer, 'number', 'integer');
|
|
var bytes = [];
|
|
bytes.push((integer >> 24) & 0xff);
|
|
bytes.push((integer >> 16) & 0xff);
|
|
bytes.push((integer >> 8) & 0xff);
|
|
bytes.push(integer & 0xff);
|
|
return new Buffer(bytes);
|
|
},
|
|
|
|
/**
|
|
* Transform the first 4 values of a Buffer into a number, in little endian encoding
|
|
*
|
|
* @param {Buffer} buffer
|
|
* @return {number}
|
|
*/
|
|
integerFromBuffer: function integerFromBuffer(buffer) {
|
|
$.checkArgumentType(buffer, 'Buffer', 'buffer');
|
|
return buffer[0] << 24 | buffer[1] << 16 | buffer[2] << 8 | buffer[3];
|
|
},
|
|
|
|
/**
|
|
* Transforms the first byte of an array into a number ranging from -128 to 127
|
|
* @param {Buffer} buffer
|
|
* @return {number}
|
|
*/
|
|
integerFromSingleByteBuffer: function integerFromBuffer(buffer) {
|
|
$.checkArgumentType(buffer, 'Buffer', 'buffer');
|
|
return buffer[0];
|
|
},
|
|
|
|
/**
|
|
* Transforms a buffer into a string with a number in hexa representation
|
|
*
|
|
* Shorthand for <tt>buffer.toString('hex')</tt>
|
|
*
|
|
* @param {Buffer} buffer
|
|
* @return {string}
|
|
*/
|
|
bufferToHex: function bufferToHex(buffer) {
|
|
$.checkArgumentType(buffer, 'Buffer', 'buffer');
|
|
return buffer.toString('hex');
|
|
},
|
|
|
|
/**
|
|
* Reverse a buffer
|
|
* @param {Buffer} param
|
|
* @return {Buffer}
|
|
*/
|
|
reverse: function reverse(param) {
|
|
$.checkArgumentType(param, 'Buffer', 'param');
|
|
var ret = new buffer.Buffer(param.length);
|
|
for (var i = 0; i < param.length; i++) {
|
|
ret[i] = param[param.length - i - 1];
|
|
}
|
|
return ret;
|
|
},
|
|
|
|
/**
|
|
* Transforms an hexa encoded string into a Buffer with binary values
|
|
*
|
|
* Shorthand for <tt>Buffer(string, 'hex')</tt>
|
|
*
|
|
* @param {string} string
|
|
* @return {Buffer}
|
|
*/
|
|
hexToBuffer: function hexToBuffer(string) {
|
|
assert(js.isHexa(string));
|
|
return new buffer.Buffer(string, 'hex');
|
|
}
|
|
};
|
|
|
|
module.exports.NULL_HASH = module.exports.fill(new Buffer(32), 0);
|
|
module.exports.EMPTY_BUFFER = new Buffer(0);
|
|
|