UNPKG

madeline-ton

Version:

Pure JS client-side implementation of the Telegram TON blockchain protocol

160 lines (122 loc) 3.37 kB
"use strict"; 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;