'use strict'; import * as js from './Js' import * as $ from './Preconditions' import * as assert from 'assert' import * as buffer from 'buffer' function equal_func(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} */ export 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; } /** * Return a copy of a buffer * * @param {Buffer} original * @return {Buffer} */ export function copy(original) { var buffer = Buffer.alloc(original.length); original.copy(buffer); 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} */ export function isBuffer(arg) { return buffer.Buffer.isBuffer(arg) || arg instanceof Uint8Array; } /** * Returns a zero-filled byte array * * @param {number} bytes * @return {Buffer} */ export function emptyBuffer(bytes) { $.checkArgumentType(bytes, 'number', 'bytes'); var result = Buffer.alloc(bytes); for (var i = 0; i < bytes; i++) { result.write('\0', i); } return result; } /** * Concatenates a buffer * * Shortcut for buffer.Buffer.concat */ export const concat = buffer.Buffer.concat export const equals = equal_func export const equal = equal_func /** * Transforms a number from 0 to 255 into a Buffer of size 1 with that value * * @param {number} integer * @return {Buffer} */ export function integerAsSingleByteBuffer(integer) { $.checkArgumentType(integer, 'number', 'integer'); return Buffer.from([integer & 0xff]); } /** * Transform a 4-byte integer into a Buffer of length 4. * * @param {number} integer * @return {Buffer} */ export 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 Buffer.from(bytes); } /** * Transform the first 4 values of a Buffer into a number, in little endian encoding * * @param {Buffer} buffer * @return {number} */ export 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} */ export function integerFromSingleByteBuffer(buffer) { $.checkArgumentType(buffer, 'Buffer', 'buffer'); return buffer[0]; } /** * Transforms a buffer into a string with a number in hexa representation * * Shorthand for buffer.toString('hex') * * @param {Buffer} buffer * @return {string} */ export function bufferToHex(buffer) { $.checkArgumentType(buffer, 'Buffer', 'buffer'); return buffer.toString('hex'); } /** * Reverse a buffer * @param {Buffer} param * @return {Buffer} */ export function reverse(param) { return (Buffer.from(param)).reverse(); } export function hexToBuffer(string) { assert(js.isHexa(string)); return new buffer.Buffer(string, 'hex'); } // }; module.exports.NULL_HASH = module.exports.fill(Buffer.alloc(32), 0); module.exports.EMPTY_BUFFER = Buffer.alloc(0);