1234567891011121314151617181920212223242526272829 |
- var isStr = require('./isStr');
- var strToBytes = require('./strToBytes');
- var TABLE = [];
- for (var n = 0; n < 256; n++) {
- var c = n;
- for (var k = 0; k < 8; k++) {
- if (c & 1) {
- c = 0xedb88320 ^ (c >>> 1);
- } else {
- c = c >>> 1;
- }
- }
- TABLE[n] = c >>> 0;
- }
- if (typeof Int32Array !== 'undefined') TABLE = new Int32Array(TABLE);
- exports = function(input, previous) {
- return exports.signed(input, previous) >>> 0;
- };
- exports.signed = function(input, previous) {
- if (isStr(input)) input = strToBytes(input);
- var crc = previous === 0 ? 0 : ~~previous ^ -1;
- for (var i = 0, len = input.length; i < len; i++) {
- var byte = input[i];
- crc = TABLE[(crc ^ byte) & 0xff] ^ (crc >>> 8);
- }
- return crc ^ -1;
- };
- module.exports = exports;
|