45 lines
855 B
JavaScript
45 lines
855 B
JavaScript
|
'use strict';
|
||
|
|
||
|
var crcTable = [];
|
||
|
|
||
|
(function() {
|
||
|
for (var i = 0; i < 256; i++) {
|
||
|
var currentCrc = i;
|
||
|
for (var j = 0; j < 8; j++) {
|
||
|
if (currentCrc & 1) {
|
||
|
currentCrc = 0xedb88320 ^ (currentCrc >>> 1);
|
||
|
}
|
||
|
else {
|
||
|
currentCrc = currentCrc >>> 1;
|
||
|
}
|
||
|
}
|
||
|
crcTable[i] = currentCrc;
|
||
|
}
|
||
|
}());
|
||
|
|
||
|
var CrcCalculator = module.exports = function() {
|
||
|
this._crc = -1;
|
||
|
};
|
||
|
|
||
|
CrcCalculator.prototype.write = function(data) {
|
||
|
|
||
|
for (var i = 0; i < data.length; i++) {
|
||
|
this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);
|
||
|
}
|
||
|
return true;
|
||
|
};
|
||
|
|
||
|
CrcCalculator.prototype.crc32 = function() {
|
||
|
return this._crc ^ -1;
|
||
|
};
|
||
|
|
||
|
|
||
|
CrcCalculator.crc32 = function(buf) {
|
||
|
|
||
|
var crc = -1;
|
||
|
for (var i = 0; i < buf.length; i++) {
|
||
|
crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);
|
||
|
}
|
||
|
return crc ^ -1;
|
||
|
};
|