UNPKG

@gandlaf21/bc-ur

Version:

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

91 lines (90 loc) 3.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.bufferXOR = exports.setDifference = exports.arrayContains = exports.arraysEqual = exports.hasPrefix = exports.isURType = exports.intToBytes = exports.toUint32 = exports.getCRCHex = exports.getCRC = exports.split = exports.partition = exports.sha256Hash = void 0; var buffer_1 = require("buffer"); var sha256_1 = require("@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; }; var sha256Hash = function (data) { return buffer_1.Buffer.from(sha256_1.sha256(data)); }; exports.sha256Hash = sha256Hash; var partition = function (s, n) { return s.match(new RegExp('.{1,' + n + '}', 'g')) || [s]; }; exports.partition = partition; var split = function (s, length) { return [s.slice(0, -length), s.slice(-length)]; }; exports.split = split; var getCRC = function (message) { return crc32(message); }; exports.getCRC = getCRC; var getCRCHex = function (message) { return crc32(message).toString(16).padStart(8, '0'); }; exports.getCRCHex = getCRCHex; var toUint32 = function (number) { return number >>> 0; }; exports.toUint32 = toUint32; 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_1.Buffer.from(arr); }; exports.intToBytes = intToBytes; 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; }); }; exports.isURType = isURType; var hasPrefix = function (s, prefix) { return s.indexOf(prefix) === 0; }; exports.hasPrefix = hasPrefix; var arraysEqual = function (ar1, ar2) { if (ar1.length !== ar2.length) { return false; } return ar1.every(function (el) { return ar2.includes(el); }); }; exports.arraysEqual = arraysEqual; /** * Checks if ar1 contains all elements of ar2 * @param ar1 the outer array * @param ar2 the array to be contained in ar1 */ var arrayContains = function (ar1, ar2) { return ar2.every(function (v) { return ar1.includes(v); }); }; exports.arrayContains = arrayContains; /** * Returns the difference array of `ar1` - `ar2` */ var setDifference = function (ar1, ar2) { return ar1.filter(function (x) { return ar2.indexOf(x) < 0; }); }; exports.setDifference = setDifference; var bufferXOR = function (a, b) { var length = Math.max(a.length, b.length); var buffer = buffer_1.Buffer.allocUnsafe(length); for (var i = 0; i < length; ++i) { buffer[i] = a[i] ^ b[i]; } return buffer; }; exports.bufferXOR = bufferXOR;