71 lines
1.6 KiB
JavaScript
71 lines
1.6 KiB
JavaScript
"use strict";
|
|
var crypto = require('crypto');
|
|
|
|
function swapHex(value) {
|
|
let s = value.toString(16);
|
|
s = s.replace(/^(.(..)*)$/, "0$1");
|
|
var a = s.match(/../g);
|
|
a.reverse();
|
|
var s2 = a.join("");
|
|
return s2;
|
|
}
|
|
|
|
function numToBytes(num, bytes) {
|
|
if (bytes === undefined) bytes = 8;
|
|
if (bytes == 0) return [];
|
|
else return [num % 256].concat(numToBytes(Math.floor(num / 256), bytes - 1));
|
|
}
|
|
|
|
function numToVarInt(num) {
|
|
if (num < 253) return [num];
|
|
else if (num < 65536) return [253].concat(numToBytes(num, 2));
|
|
else if (num < 4294967296) return [254].concat(numToBytes(num, 4));
|
|
else return [253].concat(numToBytes(num, 8));
|
|
}
|
|
|
|
function hexToBytes(hex) {
|
|
for (var bytes = [], c = 0; c < hex.length; c += 2)
|
|
bytes.push(parseInt(hex.substr(c, 2), 16));
|
|
return bytes;
|
|
}
|
|
|
|
function bytesToHex(bytes) {
|
|
for (var hex = [], i = 0; i < bytes.length; i++) {
|
|
hex.push((bytes[i] >>> 4).toString(16));
|
|
hex.push((bytes[i] & 0xf).toString(16));
|
|
}
|
|
return hex.join("");
|
|
}
|
|
function bytesLen(num) {
|
|
return Math.ceil(num.toString(2).length / 8);
|
|
}
|
|
|
|
|
|
function sha256(buffer) {
|
|
var hash1 = crypto.createHash('sha256');
|
|
hash1.update(buffer);
|
|
return hash1.digest();
|
|
};
|
|
|
|
function sha256d(buffer) {
|
|
return sha256(sha256(buffer));
|
|
};
|
|
|
|
function reverseBuffer(buff) {
|
|
var reversed = Buffer.alloc(buff.length);
|
|
for (var i = buff.length - 1; i >= 0; i--)
|
|
reversed[buff.length - i - 1] = buff[i];
|
|
return reversed;
|
|
};
|
|
|
|
module.exports = {
|
|
swapHex,
|
|
numToBytes,
|
|
numToVarInt,
|
|
hexToBytes,
|
|
bytesToHex,
|
|
bytesLen,
|
|
sha256,
|
|
sha256d,
|
|
reverseBuffer
|
|
}; |