@gandlaf21/bc-ur
Version:
A JS implementation of the Uniform Resources (UR) specification from Blockchain Commons
91 lines (90 loc) • 3.35 kB
JavaScript
;
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;