UNPKG

@gandlaf21/bc-ur

Version:

A JS implementation of the Uniform Resources (UR) specification from Blockchain Commons

75 lines 2.68 kB
import { Buffer } from "buffer"; import { sha256 } from "@noble/hashes/sha256"; var CRC_TABLE = function () { var c; var crcTable = []; for (var n = 0; n < 256; n++) { c = n; for (var k = 0; k < 8; k++) { c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); } crcTable[n] = c; } return crcTable; }(); var crc32 = function (message) { var crc = 0 ^ (-1); for (var i = 0; i < message.length; i++) { crc = (crc >>> 8) ^ CRC_TABLE[(crc ^ message[i]) & 0xFF]; } return (crc ^ (-1)) >>> 0; }; export var sha256Hash = function (data) { return Buffer.from(sha256(data)); }; export var partition = function (s, n) { return s.match(new RegExp('.{1,' + n + '}', 'g')) || [s]; }; export var split = function (s, length) { return [s.slice(0, -length), s.slice(-length)]; }; export var getCRC = function (message) { return crc32(message); }; export var getCRCHex = function (message) { return crc32(message).toString(16).padStart(8, '0'); }; export var toUint32 = function (number) { return number >>> 0; }; export var intToBytes = function (num) { var arr = new ArrayBuffer(4); // an Int32 takes 4 bytes var view = new DataView(arr); view.setUint32(0, num, false); // byteOffset = 0; litteEndian = false return Buffer.from(arr); }; export var isURType = function (type) { return type.split('').every(function (_, index) { var c = type.charCodeAt(index); if ('a'.charCodeAt(0) <= c && c <= 'z'.charCodeAt(0)) return true; if ('0'.charCodeAt(0) <= c && c <= '9'.charCodeAt(0)) return true; if (c === '-'.charCodeAt(0)) return true; return false; }); }; export var hasPrefix = function (s, prefix) { return s.indexOf(prefix) === 0; }; export var arraysEqual = function (ar1, ar2) { if (ar1.length !== ar2.length) { return false; } return ar1.every(function (el) { return ar2.includes(el); }); }; /** * Checks if ar1 contains all elements of ar2 * @param ar1 the outer array * @param ar2 the array to be contained in ar1 */ export var arrayContains = function (ar1, ar2) { return ar2.every(function (v) { return ar1.includes(v); }); }; /** * Returns the difference array of `ar1` - `ar2` */ export var setDifference = function (ar1, ar2) { return ar1.filter(function (x) { return ar2.indexOf(x) < 0; }); }; export var bufferXOR = function (a, b) { var length = Math.max(a.length, b.length); var buffer = Buffer.allocUnsafe(length); for (var i = 0; i < length; ++i) { buffer[i] = a[i] ^ b[i]; } return buffer; }; //# sourceMappingURL=utils.js.map