crc
Advanced tools
Comparing version 0.3.0 to 1.0.0
513
lib/crc.js
@@ -1,488 +0,61 @@ | ||
(function (root, factory) { | ||
if (typeof define === 'function' && define.amd) { | ||
// AMD. Register as an anonymous module. | ||
define(factory); | ||
} else if (typeof exports === 'object') { | ||
// Node. | ||
module.exports = factory(); | ||
} else { | ||
// Browser globals (root is window) | ||
root.returnExports = factory(); | ||
} | ||
}(this, function() | ||
{ | ||
// CRC-8 in table form | ||
// | ||
// Copyright (c) 1989 AnDan Software. You may use this program, or | ||
// code or tables extracted from it, as long as this notice is not | ||
// removed or changed. | ||
var CRC8_TAB = new Array( | ||
// C/C++ language: | ||
// | ||
// unsigned char CRC8_TAB[] = {...}; | ||
0x00,0x1B,0x36,0x2D,0x6C,0x77,0x5A,0x41,0xD8,0xC3,0xEE,0xF5,0xB4,0xAF,0x82,0x99,0xD3,0xC8,0xE5, | ||
0xFE,0xBF,0xA4,0x89,0x92,0x0B,0x10,0x3D,0x26,0x67,0x7C,0x51,0x4A,0xC5,0xDE,0xF3,0xE8,0xA9,0xB2, | ||
0x9F,0x84,0x1D,0x06,0x2B,0x30,0x71,0x6A,0x47,0x5C,0x16,0x0D,0x20,0x3B,0x7A,0x61,0x4C,0x57,0xCE, | ||
0xD5,0xF8,0xE3,0xA2,0xB9,0x94,0x8F,0xE9,0xF2,0xDF,0xC4,0x85,0x9E,0xB3,0xA8,0x31,0x2A,0x07,0x1C, | ||
0x5D,0x46,0x6B,0x70,0x3A,0x21,0x0C,0x17,0x56,0x4D,0x60,0x7B,0xE2,0xF9,0xD4,0xCF,0x8E,0x95,0xB8, | ||
0xA3,0x2C,0x37,0x1A,0x01,0x40,0x5B,0x76,0x6D,0xF4,0xEF,0xC2,0xD9,0x98,0x83,0xAE,0xB5,0xFF,0xE4, | ||
0xC9,0xD2,0x93,0x88,0xA5,0xBE,0x27,0x3C,0x11,0x0A,0x4B,0x50,0x7D,0x66,0xB1,0xAA,0x87,0x9C,0xDD, | ||
0xC6,0xEB,0xF0,0x69,0x72,0x5F,0x44,0x05,0x1E,0x33,0x28,0x62,0x79,0x54,0x4F,0x0E,0x15,0x38,0x23, | ||
0xBA,0xA1,0x8C,0x97,0xD6,0xCD,0xE0,0xFB,0x74,0x6F,0x42,0x59,0x18,0x03,0x2E,0x35,0xAC,0xB7,0x9A, | ||
0x81,0xC0,0xDB,0xF6,0xED,0xA7,0xBC,0x91,0x8A,0xCB,0xD0,0xFD,0xE6,0x7F,0x64,0x49,0x52,0x13,0x08, | ||
0x25,0x3E,0x58,0x43,0x6E,0x75,0x34,0x2F,0x02,0x19,0x80,0x9B,0xB6,0xAD,0xEC,0xF7,0xDA,0xC1,0x8B, | ||
0x90,0xBD,0xA6,0xE7,0xFC,0xD1,0xCA,0x53,0x48,0x65,0x7E,0x3F,0x24,0x09,0x12,0x9D,0x86,0xAB,0xB0, | ||
0xF1,0xEA,0xC7,0xDC,0x45,0x5E,0x73,0x68,0x29,0x32,0x1F,0x04,0x4E,0x55,0x78,0x63,0x22,0x39,0x14, | ||
0x0F,0x96,0x8D,0xA0,0xBB,0xFA,0xE1,0xCC,0xD7 | ||
); | ||
// Generated by CoffeeScript 1.7.1 | ||
var CRC, hex; | ||
// 'crc' should be initialized to 0x00. | ||
// C/C++ language: | ||
// | ||
// inline unsigned char crc8Add(unsigned char crc, unsigned char c) | ||
// { | ||
// return CRC8_TAB[crc^c]; | ||
// } | ||
function crc8Add(crc,c) { | ||
return CRC8_TAB[(crc^c)&0xFF]; | ||
} | ||
hex = require('./hex'); | ||
// CRC-16 (as it is in SEA's ARC) in table form | ||
// | ||
// The logic for this method of calculating the CRC 16 bit polynomial | ||
// is taken from an article by David Schwaderer in the April 1985 | ||
// issue of PC Tech Journal. | ||
var CRC_ARC_TAB = new Array( | ||
// THIS TABLE IS THE RIGHT ONE FOR MODBUS CALCULATIONS | ||
// C/C++ language: | ||
// | ||
// unsigned short CRC_ARC_TAB[] = {...}; | ||
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 | ||
); | ||
module.exports = CRC = (function() { | ||
CRC.prototype.INIT_CRC = 0x00; | ||
// 'crc' should be initialized to 0x0000. | ||
// C/C++ language: | ||
// | ||
// inline unsigned short crcArcAdd(unsigned short crc, unsigned char c) | ||
// { | ||
// return CRC_ARC_TAB[(unsigned char)crc^c]^(unsigned short)(crc>>8); | ||
// } | ||
function crcArcAdd(crc,c) { | ||
return CRC_ARC_TAB[(crc^c)&0xFF]^((crc>>8)&0xFF); | ||
} | ||
CRC.prototype.XOR_MASK = 0x00; | ||
// CRC-16 (as it is in ZMODEM) in table form | ||
// | ||
// Copyright (c) 1989 AnDan Software. You may use this program, or | ||
// code or tables extracted from it, as long as this notice is not | ||
// removed or changed. | ||
var CRC16_TAB = new Array( | ||
// C/C++ language: | ||
// | ||
// unsigned short CRC16_TAB[] = {...}; | ||
0x0000,0x1021,0x2042,0x3063,0x4084,0x50A5,0x60C6,0x70E7,0x8108,0x9129,0xA14A,0xB16B,0xC18C, | ||
0xD1AD,0xE1CE,0xF1EF,0x1231,0x0210,0x3273,0x2252,0x52B5,0x4294,0x72F7,0x62D6,0x9339,0x8318, | ||
0xB37B,0xA35A,0xD3BD,0xC39C,0xF3FF,0xE3DE,0x2462,0x3443,0x0420,0x1401,0x64E6,0x74C7,0x44A4, | ||
0x5485,0xA56A,0xB54B,0x8528,0x9509,0xE5EE,0xF5CF,0xC5AC,0xD58D,0x3653,0x2672,0x1611,0x0630, | ||
0x76D7,0x66F6,0x5695,0x46B4,0xB75B,0xA77A,0x9719,0x8738,0xF7DF,0xE7FE,0xD79D,0xC7BC,0x48C4, | ||
0x58E5,0x6886,0x78A7,0x0840,0x1861,0x2802,0x3823,0xC9CC,0xD9ED,0xE98E,0xF9AF,0x8948,0x9969, | ||
0xA90A,0xB92B,0x5AF5,0x4AD4,0x7AB7,0x6A96,0x1A71,0x0A50,0x3A33,0x2A12,0xDBFD,0xCBDC,0xFBBF, | ||
0xEB9E,0x9B79,0x8B58,0xBB3B,0xAB1A,0x6CA6,0x7C87,0x4CE4,0x5CC5,0x2C22,0x3C03,0x0C60,0x1C41, | ||
0xEDAE,0xFD8F,0xCDEC,0xDDCD,0xAD2A,0xBD0B,0x8D68,0x9D49,0x7E97,0x6EB6,0x5ED5,0x4EF4,0x3E13, | ||
0x2E32,0x1E51,0x0E70,0xFF9F,0xEFBE,0xDFDD,0xCFFC,0xBF1B,0xAF3A,0x9F59,0x8F78,0x9188,0x81A9, | ||
0xB1CA,0xA1EB,0xD10C,0xC12D,0xF14E,0xE16F,0x1080,0x00A1,0x30C2,0x20E3,0x5004,0x4025,0x7046, | ||
0x6067,0x83B9,0x9398,0xA3FB,0xB3DA,0xC33D,0xD31C,0xE37F,0xF35E,0x02B1,0x1290,0x22F3,0x32D2, | ||
0x4235,0x5214,0x6277,0x7256,0xB5EA,0xA5CB,0x95A8,0x8589,0xF56E,0xE54F,0xD52C,0xC50D,0x34E2, | ||
0x24C3,0x14A0,0x0481,0x7466,0x6447,0x5424,0x4405,0xA7DB,0xB7FA,0x8799,0x97B8,0xE75F,0xF77E, | ||
0xC71D,0xD73C,0x26D3,0x36F2,0x0691,0x16B0,0x6657,0x7676,0x4615,0x5634,0xD94C,0xC96D,0xF90E, | ||
0xE92F,0x99C8,0x89E9,0xB98A,0xA9AB,0x5844,0x4865,0x7806,0x6827,0x18C0,0x08E1,0x3882,0x28A3, | ||
0xCB7D,0xDB5C,0xEB3F,0xFB1E,0x8BF9,0x9BD8,0xABBB,0xBB9A,0x4A75,0x5A54,0x6A37,0x7A16,0x0AF1, | ||
0x1AD0,0x2AB3,0x3A92,0xFD2E,0xED0F,0xDD6C,0xCD4D,0xBDAA,0xAD8B,0x9DE8,0x8DC9,0x7C26,0x6C07, | ||
0x5C64,0x4C45,0x3CA2,0x2C83,0x1CE0,0x0CC1,0xEF1F,0xFF3E,0xCF5D,0xDF7C,0xAF9B,0xBFBA,0x8FD9, | ||
0x9FF8,0x6E17,0x7E36,0x4E55,0x5E74,0x2E93,0x3EB2,0x0ED1,0x1EF0 | ||
); | ||
CRC.prototype.WIDTH = 0; | ||
// 'crc' should be initialized to 0x0000. | ||
// C/C++ language: | ||
// | ||
// inline unsigned short crc16Add(unsigned short crc, unsigned char c) | ||
// { | ||
// return CRC16_TAB[(unsigned char)(crc>>8)^c]^(unsigned short)(crc<<8); | ||
// } | ||
function crc16Add(crc,c) { | ||
return CRC16_TAB[((crc>>8)^c)&0xFF]^((crc<<8)&0xFFFF); | ||
} | ||
CRC.prototype.pack = function(crc) { | ||
return ''; | ||
}; | ||
// FCS-16 (as it is in PPP) in table form | ||
// | ||
// Described in RFC-1662 by William Allen Simpson, see RFC-1662 for references. | ||
// | ||
// Modified by Anders Danielsson, March 10, 2006. | ||
var FCS_16_TAB = new Array( | ||
// C/C++ language: | ||
// | ||
// unsigned short FCS_16_TAB[256] = {...}; | ||
0x0000,0x1189,0x2312,0x329B,0x4624,0x57AD,0x6536,0x74BF,0x8C48,0x9DC1,0xAF5A,0xBED3,0xCA6C, | ||
0xDBE5,0xE97E,0xF8F7,0x1081,0x0108,0x3393,0x221A,0x56A5,0x472C,0x75B7,0x643E,0x9CC9,0x8D40, | ||
0xBFDB,0xAE52,0xDAED,0xCB64,0xF9FF,0xE876,0x2102,0x308B,0x0210,0x1399,0x6726,0x76AF,0x4434, | ||
0x55BD,0xAD4A,0xBCC3,0x8E58,0x9FD1,0xEB6E,0xFAE7,0xC87C,0xD9F5,0x3183,0x200A,0x1291,0x0318, | ||
0x77A7,0x662E,0x54B5,0x453C,0xBDCB,0xAC42,0x9ED9,0x8F50,0xFBEF,0xEA66,0xD8FD,0xC974,0x4204, | ||
0x538D,0x6116,0x709F,0x0420,0x15A9,0x2732,0x36BB,0xCE4C,0xDFC5,0xED5E,0xFCD7,0x8868,0x99E1, | ||
0xAB7A,0xBAF3,0x5285,0x430C,0x7197,0x601E,0x14A1,0x0528,0x37B3,0x263A,0xDECD,0xCF44,0xFDDF, | ||
0xEC56,0x98E9,0x8960,0xBBFB,0xAA72,0x6306,0x728F,0x4014,0x519D,0x2522,0x34AB,0x0630,0x17B9, | ||
0xEF4E,0xFEC7,0xCC5C,0xDDD5,0xA96A,0xB8E3,0x8A78,0x9BF1,0x7387,0x620E,0x5095,0x411C,0x35A3, | ||
0x242A,0x16B1,0x0738,0xFFCF,0xEE46,0xDCDD,0xCD54,0xB9EB,0xA862,0x9AF9,0x8B70,0x8408,0x9581, | ||
0xA71A,0xB693,0xC22C,0xD3A5,0xE13E,0xF0B7,0x0840,0x19C9,0x2B52,0x3ADB,0x4E64,0x5FED,0x6D76, | ||
0x7CFF,0x9489,0x8500,0xB79B,0xA612,0xD2AD,0xC324,0xF1BF,0xE036,0x18C1,0x0948,0x3BD3,0x2A5A, | ||
0x5EE5,0x4F6C,0x7DF7,0x6C7E,0xA50A,0xB483,0x8618,0x9791,0xE32E,0xF2A7,0xC03C,0xD1B5,0x2942, | ||
0x38CB,0x0A50,0x1BD9,0x6F66,0x7EEF,0x4C74,0x5DFD,0xB58B,0xA402,0x9699,0x8710,0xF3AF,0xE226, | ||
0xD0BD,0xC134,0x39C3,0x284A,0x1AD1,0x0B58,0x7FE7,0x6E6E,0x5CF5,0x4D7C,0xC60C,0xD785,0xE51E, | ||
0xF497,0x8028,0x91A1,0xA33A,0xB2B3,0x4A44,0x5BCD,0x6956,0x78DF,0x0C60,0x1DE9,0x2F72,0x3EFB, | ||
0xD68D,0xC704,0xF59F,0xE416,0x90A9,0x8120,0xB3BB,0xA232,0x5AC5,0x4B4C,0x79D7,0x685E,0x1CE1, | ||
0x0D68,0x3FF3,0x2E7A,0xE70E,0xF687,0xC41C,0xD595,0xA12A,0xB0A3,0x8238,0x93B1,0x6B46,0x7ACF, | ||
0x4854,0x59DD,0x2D62,0x3CEB,0x0E70,0x1FF9,0xF78F,0xE606,0xD49D,0xC514,0xB1AB,0xA022,0x92B9, | ||
0x8330,0x7BC7,0x6A4E,0x58D5,0x495C,0x3DE3,0x2C6A,0x1EF1,0x0F78 | ||
); | ||
// 'fcs' should be initialized to 0xFFFF and after the computation it should be | ||
// complemented (inverted). | ||
// | ||
// If the FCS-16 is calculated over the data and over the complemented FCS-16, the | ||
// result will always be 0xF0B8 (without the complementation). | ||
// | ||
// C/C++ language: | ||
// | ||
// inline unsigned short fcs16Add(unsigned short fcs, unsigned char c) | ||
// { | ||
// return FCS_16_TAB[(unsigned char)fcs^c]^(unsigned short)(fcs>>8); | ||
// } | ||
function fcs16Add(fcs,c) { | ||
return FCS_16_TAB[(fcs^c)&0xFF]^((fcs>>8)&0xFF); | ||
} | ||
// | ||
// CRC-32 (as it is in ZMODEM) in table form | ||
// | ||
// Copyright (C) 1986 Gary S. Brown. You may use this program, or | ||
// code or tables extracted from it, as desired without restriction. | ||
// | ||
// Modified by Anders Danielsson, February 5, 1989 and March 10, 2006. | ||
// | ||
// This is also known as FCS-32 (as it is in PPP), described in | ||
// RFC-1662 by William Allen Simpson, see RFC-1662 for references. | ||
// | ||
var CRC32_TAB = new Array( /* CRC polynomial 0xEDB88320 */ | ||
// C/C++ language: | ||
// | ||
// unsigned long CRC32_TAB[] = {...}; | ||
0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3, | ||
0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,0xE7B82D07,0x90BF1D91, | ||
0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,0x6DDDE4EB,0xF4D4B551,0x83D385C7, | ||
0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5, | ||
0x3B6E20C8,0x4C69105E,0xD56041E4,0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B, | ||
0x35B5A8FA,0x42B2986C,0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59, | ||
0x26D930AC,0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F, | ||
0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,0xB6662D3D, | ||
0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,0x9FBFE4A5,0xE8B8D433, | ||
0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,0x086D3D2D,0x91646C97,0xE6635C01, | ||
0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457, | ||
0x65B0D9C6,0x12B7E950,0x8BBEB8EA,0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65, | ||
0x4DB26158,0x3AB551CE,0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB, | ||
0x4369E96A,0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9, | ||
0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,0xCE61E49F, | ||
0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,0xB7BD5C3B,0xC0BA6CAD, | ||
0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,0x9DD277AF,0x04DB2615,0x73DC1683, | ||
0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1, | ||
0xF00F9344,0x8708A3D2,0x1E01F268,0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7, | ||
0xFED41B76,0x89D32BE0,0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5, | ||
0xD6D6A3E8,0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B, | ||
0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,0x4669BE79, | ||
0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,0x220216B9,0x5505262F, | ||
0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D, | ||
0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,0x9C0906A9,0xEB0E363F,0x72076785,0x05005713, | ||
0x95BF4A82,0xE2B87A14,0x7BB12BAE,0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21, | ||
0x86D3D2D4,0xF1D4E242,0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777, | ||
0x88085AE6,0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45, | ||
0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,0x3E6E77DB, | ||
0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,0x47B2CF7F,0x30B5FFE9, | ||
0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,0xCDD70693,0x54DE5729,0x23D967BF, | ||
0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D | ||
); | ||
// 'crc' should be initialized to 0xFFFFFFFF and after the computation it should be | ||
// complemented (inverted). | ||
// | ||
// CRC-32 is also known as FCS-32. | ||
// | ||
// If the FCS-32 is calculated over the data and over the complemented FCS-32, the | ||
// result will always be 0xDEBB20E3 (without the complementation). | ||
// | ||
// C/C++ language: | ||
// | ||
// inline unsigned long crc32Add(unsigned long crc, unsigned char c) | ||
// { | ||
// return CRC32_TAB[(unsigned char)crc^c]^(crc>>8); | ||
// } | ||
// | ||
function crc32Add(crc,c) { | ||
return CRC32_TAB[(crc^c)&0xFF]^((crc>>8)&0xFFFFFF); | ||
} | ||
function crc8(str) | ||
{ | ||
var n, len = str.length, crc = 0; | ||
for(var i = 0; i < len; i++) { | ||
crc = crc8Add(crc, str.charCodeAt(i)); | ||
CRC.prototype.each_byte = function(str, cb) { | ||
var char, _i, _len, _results; | ||
_results = []; | ||
for (_i = 0, _len = str.length; _i < _len; _i++) { | ||
char = str[_i]; | ||
_results.push(cb(char.charCodeAt(0))); | ||
} | ||
return _results; | ||
}; | ||
return crc; | ||
function CRC() { | ||
this.crc = this.INIT_CRC; | ||
} | ||
function crc8Buffer(buf) | ||
{ | ||
var crc = 0; | ||
CRC.prototype.digest_length = function() { | ||
return Math.ceil(this.WIDTH / 8.0); | ||
}; | ||
for (var i = 0, len = buf.length; i < len; ++i) { | ||
crc = crc8Add(crc, buf[i]); | ||
} | ||
CRC.prototype.update = function(data) {}; | ||
return crc; | ||
} | ||
CRC.prototype.reset = function() { | ||
return this.crc = this.INIT_CRC; | ||
}; | ||
function crc8Stream(stream, callback) | ||
{ | ||
var crc = 0; | ||
CRC.prototype.checksum = function() { | ||
return this.crc ^ this.XOR_MASK; | ||
}; | ||
stream.on("data", function(data) { | ||
for (var i = 0, len = data.length; i < len; ++i) { | ||
crc = crc8Add(crc, data[i]); | ||
} | ||
}); | ||
CRC.prototype.finish = function() { | ||
return this.pack(this.checksum()); | ||
}; | ||
stream.on("error", function(error) { | ||
callback(error); | ||
}); | ||
stream.on("end", function() { | ||
callback(null, crc); | ||
}); | ||
} | ||
function crcArc(str) | ||
{ | ||
var i, len = str.length, crc = 0; | ||
for(i = 0; i < len; i++) { | ||
crc = crcArcAdd(crc, str.charCodeAt(i)); | ||
CRC.prototype.hexdigest = function(value) { | ||
var result; | ||
if (value != null) { | ||
this.update(value); | ||
} | ||
result = hex(this.finish()); | ||
this.reset(); | ||
return result; | ||
}; | ||
return crc; | ||
} | ||
return CRC; | ||
function crcModbusString(str) | ||
{ | ||
//SAME AS ABOVE EXCEPT THIS HAS THE MODBUS CRC AT 0XFFFF | ||
var i, len = str.length, crc = 65535; | ||
for(i = 0; i < len; i++) { | ||
crc = crcArcAdd(crc, str.charCodeAt(i)); | ||
} | ||
return crc; | ||
} | ||
function crcModbusHex(buf) | ||
{ | ||
// SAME AS ABOVE EXCEPT THIS HAS THE MODBUS CRC AT 0XFFFF | ||
var crc = 65535; | ||
for (var i = 0, len = buf.length; i < len; ++i) { | ||
crc = crcArcAdd(crc, buf[i]); | ||
} | ||
return crc; | ||
} | ||
function crc16(str) { | ||
var i, len = str.length, crc = 0; | ||
for(i = 0; i < len; i++) { | ||
crc = crc16Add(crc, str.charCodeAt(i)); | ||
} | ||
return crc; | ||
} | ||
function crc16Buffer(buf) { | ||
var crc = 0; | ||
for (var i = 0, len = buf.length; i < len; ++i) { | ||
crc = crc16Add(crc, buf[i]); | ||
} | ||
return crc; | ||
} | ||
function crc16Stream(stream, callback) | ||
{ | ||
var crc = 0; | ||
stream.on("data", function(data) { | ||
for (var i = 0, len = data.length; i < len; ++i) { | ||
crc = crc16Add(crc, data[i]); | ||
} | ||
}); | ||
stream.on("error", function(error) { | ||
callback(error); | ||
}); | ||
stream.on("end", function() { | ||
callback(null, crc); | ||
}); | ||
} | ||
function fcs16(str) | ||
{ | ||
var i, len = str.length, fcs = 0xFFFF; | ||
for(i = 0; i < len; i++) { | ||
fcs = fcs16Add(fcs,str.charCodeAt(i)); | ||
} | ||
return fcs^0xFFFF; | ||
} | ||
function crc32(str) { | ||
var i, len = str.length, crc = 0xFFFFFFFF; | ||
for(i = 0; i < len; i++) { | ||
crc = crc32Add(crc, str.charCodeAt(i)); | ||
} | ||
return crc^0xFFFFFFFF; | ||
} | ||
function crc32Buffer(buf) | ||
{ | ||
var crc = 0xFFFFFFFF; | ||
for (var i = 0, len = buf.length; i < len; ++i) { | ||
crc = crc32Add(crc, buf[i]); | ||
} | ||
return crc ^ 0xFFFFFFFF; | ||
} | ||
function crc32Stream(stream, callback) { | ||
var crc = 0xFFFFFFFF; | ||
stream.on("data", function(data) { | ||
for (var i = 0, len = data.length; i < len; ++i) { | ||
crc = crc32Add(crc, data[i]); | ||
} | ||
}); | ||
stream.on("error", function(error) { | ||
callback(error); | ||
}); | ||
stream.on("end", function() { | ||
callback(null, crc ^ 0xFFFFFFFF); | ||
}); | ||
} | ||
/** | ||
* Convert value as 8-bit unsigned integer to 2 digit hexadecimal number. | ||
*/ | ||
function hex8(val) { | ||
var n = val & 0xFF, str = n.toString(16).toUpperCase(); | ||
while (str.length < 2) { | ||
str = "0" + str; | ||
} | ||
return str; | ||
} | ||
/** | ||
* Convert value as 16-bit unsigned integer to 4 digit hexadecimal number. | ||
*/ | ||
function hex16(val) { | ||
return hex8(val >> 8) + hex8(val); | ||
} | ||
/** | ||
* Convert value as 32-bit unsigned integer to 8 digit hexadecimal number. | ||
*/ | ||
function hex32(val) { | ||
return hex16(val >> 16) + hex16(val); | ||
} | ||
function crc16CCITT(str) { | ||
var i, len = str.length, crc = 0xFFFF; | ||
for(i = 0; i < len; i++) { | ||
crc = crc16Add(crc, str.charCodeAt(i)); | ||
} | ||
return crc^0x0000; | ||
} | ||
function crc16CCITTBuffer(buf) { | ||
var crc = 0xFFFF; | ||
for (var i = 0, len = buf.length; i < len; ++i) { | ||
crc = crc16Add(crc, buf[i]); | ||
} | ||
return crc^0x0000; | ||
} | ||
return { | ||
'crc8': crc8, | ||
'crcArc': crcArc, | ||
'crcModbusString': crcModbusString, | ||
'crcModbusHex': crcModbusHex, | ||
'crc16': crc16, | ||
'crc16CCITT': crc16CCITT, | ||
'fcs16': fcs16, | ||
'crc32': crc32, | ||
'hex8': hex8, | ||
'hex16': hex16, | ||
'hex32': hex32, | ||
'buffer': { | ||
'crc8': crc8Buffer, | ||
'crc16': crc16Buffer, | ||
'crc16CCITT': crc16CCITTBuffer, | ||
'crc32': crc32Buffer | ||
}, | ||
'stream': { | ||
'crc8': crc8Stream, | ||
'crc16': crc16Stream, | ||
'crc32': crc32Stream | ||
} | ||
}; | ||
})); | ||
})(); |
{ | ||
"name" : "crc", | ||
"version" : "0.3.0", | ||
"description" : "CRC JavaScript implementation", | ||
"author": "Alex Gorbatchev <alex.gorbatchev@gmail.com>", | ||
"contributors": ["Dean Kusler <deankus@gmail.com>"], | ||
"main": "./lib/crc.js", | ||
"scripts": { | ||
"test": "./node_modules/.bin/mocha --require should --reporter spec" | ||
}, | ||
"directories" : {}, | ||
"devDependencies": { | ||
"mocha": "*", | ||
"should": "*" | ||
}, | ||
"repository": { | ||
"type": "git", | ||
"url": "git://github.com/alexgorbatchev/node-crc.git" | ||
} | ||
"name": "crc", | ||
"version": "1.0.0", | ||
"description": "CRC JavaScript implementation", | ||
"keywords": [ | ||
"crc" | ||
], | ||
"main": "./lib/index.js", | ||
"scripts": { | ||
"test": "./node_modules/.bin/mocha test/*.spec.coffee", | ||
"pretest": "./node_modules/.bin/coffee --bare --output ./lib --compile ./src/*.coffee" | ||
}, | ||
"author": { | ||
"name": "Alex Gorbatchev", | ||
"url": "https://github.com/alexgorbatchev" | ||
}, | ||
"devDependencies": { | ||
"mocha": "*", | ||
"should": "*", | ||
"coffee-script": "~1.7.1", | ||
"coffee-errors": "~0.8.6", | ||
"chai": "~1.9.1" | ||
}, | ||
"homepage": "https://github.com/alexgorbatchev/node-crc", | ||
"bugs": "https://github.com/alexgorbatchev/node-crc/issues", | ||
"repository": { | ||
"type": "git", | ||
"url": "git://github.com/alexgorbatchev/node-crc.git" | ||
}, | ||
"license": "MIT" | ||
} |
@@ -1,11 +0,67 @@ | ||
# JavaScript CRC 8, 16 and 32. | ||
# crc | ||
This is a basic port/copy of the JavaScript CRC implementation. The module works with any CommonJS system supporting `module.exports` notation, AMD, and the browser. When loaded in the browser, all functions end up under the `window.crc` "namespace". | ||
[![NPM version](https://badge.fury.io/js/crc.png)](http://badge.fury.io/js/crc) | ||
[![Dependency status](https://david-dm.org/alexgorbatchev/crc.png)](https://david-dm.org/alexgorbatchev/crc) | ||
[![devDependency Status](https://david-dm.org/alexgorbatchev/crc/dev-status.png)](https://david-dm.org/alexgorbatchev/crc#info=devDependencies) | ||
[![Build Status](https://secure.travis-ci.org/alexgorbatchev/crc.png?branch=master)](https://travis-ci.org/alexgorbatchev/crc) | ||
Original code is taken from http://www.digsys.se/JavaScript/CRC.aspx | ||
[![NPM](https://nodei.co/npm/crc.png?downloads=true)](https://npmjs.org/package/crc) | ||
## Functions | ||
Module for calculating Cyclic Redundancy Check (CRC). | ||
The following functions are implemented: | ||
## Features | ||
* Pure JavaScript implementation, no dependencies. | ||
* Provides CRC Tables for optimized calculations. | ||
* Provides support for the following CRC algorithms: | ||
* CRC1 `new crc.CRC1` or `crc.crc1(…)` | ||
* CRC8 `new crc.CRC8` or `crc.crc8(…)` | ||
* CRC8 1-Wire `new crc.CRC81Wire` or `crc.crc81wire(…)` | ||
* CRC16 `new crc.CRC16` or `crc.crc16(…)` | ||
* CRC16 CCITT `new crc.CRC16CCITT` or `crc.crc16ccitt(…)` | ||
* CRC16 Modbus `new crc.CRC16Modbus` or `crc.crc16modbus(…)` | ||
* CRC24 `new crc.CRC24` or `crc.crc24(…)` | ||
* CRC32 `new crc.CRC32` or `crc.crc32(…)` | ||
## Installation | ||
npm install crc | ||
## Running tests | ||
$ npm install | ||
$ make test | ||
## Usage Example | ||
Calculate a CRC32: | ||
var crc = require('crc'); | ||
crc.crc32('hello'); | ||
# => "3610a686" | ||
Calculate a CRC32 of a file: | ||
crc.crc32(fs.readFileAsync('README.md', 'utf8')); | ||
# => "127ad531" | ||
Incrementally calculate a CRC32: | ||
crc32 = new crc.CRC32() | ||
crc32.update('one') | ||
crc32.update('two') | ||
crc32.update('three') | ||
crc32.hexdigest() | ||
# => "09e1c092" | ||
Directly access the checksum: | ||
crc32.checksum() | ||
# => 165789842 | ||
## Upgrading | ||
Older version `0.3.0` was unfortunately ported from a not so reliable source and results were not matching other libraries. If you are using 3.x please continue using it. | ||
crc8(String) #=> Number | ||
@@ -23,13 +79,31 @@ crcArc(String) #=> Number | ||
## Installation | ||
## Thanks | ||
git clone git://github.com/alexgorbatchev/node-crc.git | ||
This module is a direct port from Ruby's [Digest CRC](https://github.com/postmodern/digest-crc) | ||
module. Which is in turn based on [pycrc](http://www.tty1.net/pycrc/) library | ||
which is able to generate C source-code for all of the CRC algorithms, | ||
including their CRC Tables. | ||
or | ||
# License | ||
npm install crc | ||
The MIT License (MIT) | ||
## Running tests | ||
Copyright (c) 2014 Alex Gorbatchev | ||
$ npm install | ||
$ make test | ||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
The above copyright notice and this permission notice shall be included in | ||
all copies or substantial portions of the Software. | ||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
THE SOFTWARE. |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
SPDX disjunction
LicenseSPDX disjunction for an artifact's license information
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
SPDX disjunction
LicenseSPDX disjunction for an artifact's license information
Found 1 instance in 1 package
No bug tracker
MaintenancePackage does not have a linked bug tracker in package.json.
Found 1 instance in 1 package
No License Found
License(Experimental) License information could not be found
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
No website
QualityPackage does not have a website.
Found 1 instance in 1 package
117399
85
1
0
109
0
5
345
1