extract-base-iterator
Version:
Base iterator for extract iterators like tar-iterator and zip-iterator
76 lines • 2.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: Object.getOwnPropertyDescriptor(all, name).get
});
}
_export(exports, {
get crc32 () {
return crc32;
},
get crc32Region () {
return crc32Region;
},
get verifyCrc32 () {
return verifyCrc32;
},
get verifyCrc32Region () {
return verifyCrc32Region;
}
});
/**
* CRC32 calculation for archive formats
*
* Uses IEEE polynomial 0xEDB88320 (same as ZIP, 7z, PNG, gzip, etc.)
* All bit operations (>>>, ^, &) work correctly in Node 0.8
*
* This is the standard CRC-32 algorithm used by:
* - ZIP/PKZIP
* - 7-Zip
* - PNG
* - gzip
* - Ethernet
*/ // Pre-computed lookup table for performance
var CRC32_TABLE = [];
// Initialize table at module load time
(function initTable() {
for(var i = 0; i < 256; i++){
var c = i;
for(var j = 0; j < 8; j++){
if ((c & 1) !== 0) {
c = 0xedb88320 ^ c >>> 1;
} else {
c = c >>> 1;
}
}
CRC32_TABLE[i] = c >>> 0; // Ensure unsigned
}
})();
function crc32(buf, initial) {
var crc = initial === undefined ? 0xffffffff : ~initial >>> 0;
for(var i = 0; i < buf.length; i++){
var index = (crc ^ buf[i]) & 0xff;
crc = CRC32_TABLE[index] ^ crc >>> 8;
}
return ~crc >>> 0; // Return unsigned
}
function crc32Region(buf, offset, length, initial) {
var crc = initial === undefined ? 0xffffffff : ~initial >>> 0;
var end = offset + length;
for(var i = offset; i < end; i++){
var index = (crc ^ buf[i]) & 0xff;
crc = CRC32_TABLE[index] ^ crc >>> 8;
}
return ~crc >>> 0; // Return unsigned
}
function verifyCrc32(buf, expected) {
return crc32(buf) === expected >>> 0;
}
function verifyCrc32Region(buf, offset, length, expected) {
return crc32Region(buf, offset, length) === expected >>> 0;
}
/* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }