You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
276 lines
3.6 KiB
276 lines
3.6 KiB
var isStr = require('./isStr');
|
|
var strToBytes = require('./strToBytes');
|
|
|
|
var TABLE = [
|
|
0x0000,
|
|
0xc0c1,
|
|
0xc181,
|
|
0x0140,
|
|
0xc301,
|
|
0x03c0,
|
|
0x0280,
|
|
0xc241,
|
|
0xc601,
|
|
0x06c0,
|
|
0x0780,
|
|
0xc741,
|
|
0x0500,
|
|
0xc5c1,
|
|
0xc481,
|
|
0x0440,
|
|
0xcc01,
|
|
0x0cc0,
|
|
0x0d80,
|
|
0xcd41,
|
|
0x0f00,
|
|
0xcfc1,
|
|
0xce81,
|
|
0x0e40,
|
|
0x0a00,
|
|
0xcac1,
|
|
0xcb81,
|
|
0x0b40,
|
|
0xc901,
|
|
0x09c0,
|
|
0x0880,
|
|
0xc841,
|
|
0xd801,
|
|
0x18c0,
|
|
0x1980,
|
|
0xd941,
|
|
0x1b00,
|
|
0xdbc1,
|
|
0xda81,
|
|
0x1a40,
|
|
0x1e00,
|
|
0xdec1,
|
|
0xdf81,
|
|
0x1f40,
|
|
0xdd01,
|
|
0x1dc0,
|
|
0x1c80,
|
|
0xdc41,
|
|
0x1400,
|
|
0xd4c1,
|
|
0xd581,
|
|
0x1540,
|
|
0xd701,
|
|
0x17c0,
|
|
0x1680,
|
|
0xd641,
|
|
0xd201,
|
|
0x12c0,
|
|
0x1380,
|
|
0xd341,
|
|
0x1100,
|
|
0xd1c1,
|
|
0xd081,
|
|
0x1040,
|
|
0xf001,
|
|
0x30c0,
|
|
0x3180,
|
|
0xf141,
|
|
0x3300,
|
|
0xf3c1,
|
|
0xf281,
|
|
0x3240,
|
|
0x3600,
|
|
0xf6c1,
|
|
0xf781,
|
|
0x3740,
|
|
0xf501,
|
|
0x35c0,
|
|
0x3480,
|
|
0xf441,
|
|
0x3c00,
|
|
0xfcc1,
|
|
0xfd81,
|
|
0x3d40,
|
|
0xff01,
|
|
0x3fc0,
|
|
0x3e80,
|
|
0xfe41,
|
|
0xfa01,
|
|
0x3ac0,
|
|
0x3b80,
|
|
0xfb41,
|
|
0x3900,
|
|
0xf9c1,
|
|
0xf881,
|
|
0x3840,
|
|
0x2800,
|
|
0xe8c1,
|
|
0xe981,
|
|
0x2940,
|
|
0xeb01,
|
|
0x2bc0,
|
|
0x2a80,
|
|
0xea41,
|
|
0xee01,
|
|
0x2ec0,
|
|
0x2f80,
|
|
0xef41,
|
|
0x2d00,
|
|
0xedc1,
|
|
0xec81,
|
|
0x2c40,
|
|
0xe401,
|
|
0x24c0,
|
|
0x2580,
|
|
0xe541,
|
|
0x2700,
|
|
0xe7c1,
|
|
0xe681,
|
|
0x2640,
|
|
0x2200,
|
|
0xe2c1,
|
|
0xe381,
|
|
0x2340,
|
|
0xe101,
|
|
0x21c0,
|
|
0x2080,
|
|
0xe041,
|
|
0xa001,
|
|
0x60c0,
|
|
0x6180,
|
|
0xa141,
|
|
0x6300,
|
|
0xa3c1,
|
|
0xa281,
|
|
0x6240,
|
|
0x6600,
|
|
0xa6c1,
|
|
0xa781,
|
|
0x6740,
|
|
0xa501,
|
|
0x65c0,
|
|
0x6480,
|
|
0xa441,
|
|
0x6c00,
|
|
0xacc1,
|
|
0xad81,
|
|
0x6d40,
|
|
0xaf01,
|
|
0x6fc0,
|
|
0x6e80,
|
|
0xae41,
|
|
0xaa01,
|
|
0x6ac0,
|
|
0x6b80,
|
|
0xab41,
|
|
0x6900,
|
|
0xa9c1,
|
|
0xa881,
|
|
0x6840,
|
|
0x7800,
|
|
0xb8c1,
|
|
0xb981,
|
|
0x7940,
|
|
0xbb01,
|
|
0x7bc0,
|
|
0x7a80,
|
|
0xba41,
|
|
0xbe01,
|
|
0x7ec0,
|
|
0x7f80,
|
|
0xbf41,
|
|
0x7d00,
|
|
0xbdc1,
|
|
0xbc81,
|
|
0x7c40,
|
|
0xb401,
|
|
0x74c0,
|
|
0x7580,
|
|
0xb541,
|
|
0x7700,
|
|
0xb7c1,
|
|
0xb681,
|
|
0x7640,
|
|
0x7200,
|
|
0xb2c1,
|
|
0xb381,
|
|
0x7340,
|
|
0xb101,
|
|
0x71c0,
|
|
0x7080,
|
|
0xb041,
|
|
0x5000,
|
|
0x90c1,
|
|
0x9181,
|
|
0x5140,
|
|
0x9301,
|
|
0x53c0,
|
|
0x5280,
|
|
0x9241,
|
|
0x9601,
|
|
0x56c0,
|
|
0x5780,
|
|
0x9741,
|
|
0x5500,
|
|
0x95c1,
|
|
0x9481,
|
|
0x5440,
|
|
0x9c01,
|
|
0x5cc0,
|
|
0x5d80,
|
|
0x9d41,
|
|
0x5f00,
|
|
0x9fc1,
|
|
0x9e81,
|
|
0x5e40,
|
|
0x5a00,
|
|
0x9ac1,
|
|
0x9b81,
|
|
0x5b40,
|
|
0x9901,
|
|
0x59c0,
|
|
0x5880,
|
|
0x9841,
|
|
0x8801,
|
|
0x48c0,
|
|
0x4980,
|
|
0x8941,
|
|
0x4b00,
|
|
0x8bc1,
|
|
0x8a81,
|
|
0x4a40,
|
|
0x4e00,
|
|
0x8ec1,
|
|
0x8f81,
|
|
0x4f40,
|
|
0x8d01,
|
|
0x4dc0,
|
|
0x4c80,
|
|
0x8c41,
|
|
0x4400,
|
|
0x84c1,
|
|
0x8581,
|
|
0x4540,
|
|
0x8701,
|
|
0x47c0,
|
|
0x4680,
|
|
0x8641,
|
|
0x8201,
|
|
0x42c0,
|
|
0x4380,
|
|
0x8341,
|
|
0x4100,
|
|
0x81c1,
|
|
0x8081,
|
|
0x4040
|
|
];
|
|
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;
|
|
for (var i = 0, len = input.length; i < len; i++) {
|
|
var byte = input[i];
|
|
crc = (TABLE[(crc ^ byte) & 0xff] ^ (crc >> 8)) & 0xffff;
|
|
}
|
|
return crc;
|
|
};
|
|
|
|
module.exports = exports;
|
|
|