madeline-ton
Version:
Pure JS client-side implementation of the Telegram TON blockchain protocol
160 lines (122 loc) • 3.37 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.atobInt32 = exports.atobInt8 = exports.bufferConcat = exports.hexToBytes = exports.bufferViewEqual = exports.transfer = exports.xorInPlace = exports.bytesToHex = exports.posMod = void 0;
/**
* Positive modulo
* @param {number} a A
* @param {number} b B
* @returns number
*/
var posMod = function posMod(a, b) {
var r = a % b;
return r < 0 ? r + b : r;
};
exports.posMod = posMod;
var byteToHexMap = Array(0xff);
for (var n = 0; n <= 0xff; ++n) {
var hexOctet = n.toString(16);
if (hexOctet.length === 1) {
hexOctet = "0" + hexOctet;
}
byteToHexMap[n] = hexOctet;
}
/**
* Converts bytes to hex string
* @param {Uint8Array} bytes Bytes
* @returns string
*/
var bytesToHex = function bytesToHex(bytes) {
var length = bytes.length;
var arr = Array(length);
for (var i = 0; i < length; i++) {
arr[i] = byteToHexMap[bytes[i]];
}
return arr.join('');
};
/**
* Converts hex string to Uint8Array
* @param {string} hex Hex
* @param {Uint8Array} out Output array
*/
exports.bytesToHex = bytesToHex;
var hexToBytes = function hexToBytes(hex, out) {
out = out || new Uint8Array(hex.length / 2);
var length = out.length;
for (var x = 0; x < length; x++) {
out[x] = parseInt(hex[x * 2].concat(hex[x * 2 + 1]), 16);
}
return out;
};
/**
* XOR all elements in two BufferViews, a will be modified to contain the new values
* @param {ArrayBufferView} a
* @param {ArrayBufferView} b
*/
exports.hexToBytes = hexToBytes;
var xorInPlace = function xorInPlace(a, b) {
for (var x = 0; x < a.length; x++) {
a[x] = a[x] ^ b[x];
}
};
/**
* Check it two ArrayBufferViews are equal
* @param {ArrayBufferView} a
* @param {ArrayBufferView} b
*/
exports.xorInPlace = xorInPlace;
var bufferViewEqual = function bufferViewEqual(a, b) {
var length = a.length;
if (length != b.length) return false;
for (var x = 0; x < length; x++) {
if (a[x] != b[x]) {
return false;
}
}
return true;
};
/**
* Concatenate two buffers
* @param {Uint8Array} a
* @param {Uint8Array} b
* @param {Uint8Array|undefined} c
*/
exports.bufferViewEqual = bufferViewEqual;
var bufferConcat = function bufferConcat(a, b, c) {
var res = new Uint8Array(a.byteLength + b.byteLength + (c ? c.byteLength : 0));
res.set(a);
res.set(b, a.byteLength);
if (c) {
res.set(c, a.byteLength + b.byteLength);
}
return res;
};
/**
* Resize buffer
* @param {ArrayBuffer} source Source buffer
* @param {number} length New length
*/
exports.bufferConcat = bufferConcat;
var transferPoly = function transferPoly(source, length) {
if (length <= source.byteLength) return source.slice(0, length);
var sourceView = new Uint8Array(source),
destView = new Uint8Array(new ArrayBuffer(length));
destView.set(sourceView);
return destView.buffer;
};
var transfer = ArrayBuffer.transfer || transferPoly;
exports.transfer = transfer;
var atobInt8 = function atobInt8(data) {
data = atob(data);
var view = new Uint8Array(data.length);
for (var x = 0; x < data.length; x++) {
view[x] = data.charCodeAt(x);
}
return view;
};
exports.atobInt8 = atobInt8;
var atobInt32 = function atobInt32(data) {
return new Uint32Array(atobInt8(data).buffer);
};
exports.atobInt32 = atobInt32;