exonum-client-cis
Version:
Light Client for Exonum CIS Blockchain
232 lines (181 loc) • 5.65 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.hexadecimalToUint8Array = hexadecimalToUint8Array;
exports.hexadecimalToBinaryString = hexadecimalToBinaryString;
exports.uint8ArrayToHexadecimal = uint8ArrayToHexadecimal;
exports.uint8ArrayToBinaryString = uint8ArrayToBinaryString;
exports.binaryStringToUint8Array = binaryStringToUint8Array;
exports.binaryStringToHexadecimal = binaryStringToHexadecimal;
exports.stringToUint8Array = stringToUint8Array;
var validate = _interopRequireWildcard(require("../types/validate"));
/**
* Convert hexadecimal string into uint8Array
* @param {string} str
* @returns {Uint8Array}
*/
function hexadecimalToUint8Array(str) {
if (typeof str !== 'string') {
throw new TypeError('Wrong data type passed to convertor. Hexadecimal string is expected');
}
if (!validate.validateHexadecimal(str, str.length / 2)) {
throw new TypeError('String of wrong type is passed. Hexadecimal expected.');
}
var uint8arr = new Uint8Array(str.length / 2);
for (var i = 0, j = 0; i < str.length; i += 2, j++) {
uint8arr[j] = parseInt(str.substr(i, 2), 16);
}
return uint8arr;
}
/**
* Convert hexadecimal string into binary string
* @param {string} str
* @returns {string}
*/
function hexadecimalToBinaryString(str) {
var binaryStr = '';
if (typeof str !== 'string') {
throw new TypeError('Wrong data type passed to convertor. Hexadecimal string is expected');
}
if (!validate.validateHexadecimal(str, Math.ceil(str.length / 2))) {
throw new TypeError('String of wrong type is passed. Hexadecimal expected.');
}
var prevBin = null;
for (var i = 0; i < str.length; i++) {
var bin = strReverse(parseInt(str[i], 16).toString(2));
while (bin.length < 4) {
bin = bin + '0';
}
if (!prevBin) {
prevBin = bin;
} else {
binaryStr += bin + prevBin;
prevBin = null;
}
}
return binaryStr;
}
/**
* Convert uint8Array into string
* @param {Uint8Array} uint8arr
* @returns {string}
*/
function uint8ArrayToHexadecimal(uint8arr) {
var str = '';
if (!(uint8arr instanceof Uint8Array)) {
throw new TypeError('Wrong data type of array of 8-bit integers. Uint8Array is expected');
}
for (var i = 0; i < uint8arr.length; i++) {
var hex = uint8arr[i].toString(16);
hex = hex.length === 1 ? '0' + hex : hex;
str += hex;
}
return str.toLowerCase();
}
/**
* Convert uint8Array into binary string
* @param {Uint8Array} uint8arr
* @returns {string}
*/
function uint8ArrayToBinaryString(uint8arr) {
var binaryStr = '';
if (!(uint8arr instanceof Uint8Array)) {
throw new TypeError('Wrong data type of array of 8-bit integers. Uint8Array is expected');
}
for (var i = 0; i < uint8arr.length; i++) {
var bin = strReverse(uint8arr[i].toString(2));
while (bin.length < 8) {
bin = bin + '0';
}
binaryStr += bin;
}
return binaryStr;
}
/**
* Convert binary string into uint8Array
* @param {string} binaryStr
* @returns {Uint8Array}
*/
function binaryStringToUint8Array(binaryStr) {
var array = [];
if (typeof binaryStr !== 'string') {
throw new TypeError('Wrong data type passed to convertor. Binary string is expected');
}
if (!validate.validateBinaryString(binaryStr)) {
throw new TypeError('String of wrong type is passed. Binary string expected.');
}
for (var i = 0; i < binaryStr.length; i += 8) {
array.push(parseInt(strReverse(binaryStr.substr(i, 8)), 2));
}
return new Uint8Array(array);
}
/**
* Convert string into reverse string
* @param str
* @returns {string}
*/
function strReverse(str) {
return str.split('').reverse().join('');
}
/**
* Convert binary string into hexadecimal string
* @param {string} binaryStr
* @returns {string}
*/
function binaryStringToHexadecimal(binaryStr) {
var str = '';
if (typeof binaryStr !== 'string') {
throw new TypeError('Wrong data type passed to convertor. Binary string is expected');
}
if (!validate.validateBinaryString(binaryStr)) {
throw new TypeError('String of wrong type is passed. Binary string expected.');
}
for (var i = 0; i < binaryStr.length; i += 8) {
var hex = parseInt(strReverse(binaryStr.substr(i, 8)), 2).toString(16);
hex = hex.length === 1 ? '0' + hex : hex;
str += hex;
}
return str.toLowerCase();
}
/**
* Convert sting into uint8Array
* @param {string} str
* @param {number} [len] - optional
* @returns {Uint8Array}
*/
function stringToUint8Array(str, len) {
var array;
var from = 0;
if (typeof str !== 'string') {
throw new TypeError('Wrong data type passed to convertor. String is expected');
}
if (len > 0) {
array = new Array(len);
array.fill(0);
} else {
array = [];
}
for (var i = 0; i < str.length; i++) {
var c = str.charCodeAt(i);
if (c < 128) {
array[from++] = c;
} else if (c < 2048) {
array[from++] = c >> 6 | 192;
array[from++] = c & 63 | 128;
} else if ((c & 0xFC00) === 0xD800 && i + 1 < str.length && (str.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {
// surrogate pair
c = 0x10000 + ((c & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF);
array[from++] = c >> 18 | 240;
array[from++] = c >> 12 & 63 | 128;
array[from++] = c >> 6 & 63 | 128;
array[from++] = c & 63 | 128;
} else {
array[from++] = c >> 12 | 224;
array[from++] = c >> 6 & 63 | 128;
array[from++] = c & 63 | 128;
}
}
return new Uint8Array(array);
}