crc-multi
v0.1.2
Published
CRC In Javascript
Downloads
136
Readme
crc-multi
JavaScript library to perform several different CRC calculations in pure JavaScript.
About
This library is highly influenced by Bastian Molkenthin's Online CRC JavaScript Web Site. There are a few differences, specifically, this library uses JavaScript BigInts to perform calculations. As a result, it leads to a simplification of the code, but the response can't be directly used as an integer.
CRC Models
This library currently supports the 8, 16, 32, and 64 Bit CRC Algorithms listed on the RevEng CRC Catalogue. More algorithms may work, but has not yet been tested. See the list of algorithms below for a complete list.
Each of the algorithms listed on that page include check value that is used to test the CRC calculation against the string 123456789
.
Usage
const {
CRC,
CRCModel,
} = require('crc-multi');
const model = CRCModel.GetModel('CRC-16/ARC');
/*
{
width: 16,
poly: 32773n,
init: 0n,
refin: true,
refout: true,
xorout: 0n,
check: 47933n,
residue: 0n,
name: 'CRC-16/ARC'
}
*/
const crc = new CRC(model);
const check = crc.compute(Buffer.from('123456789'));
// 47933n
assert(check === BigInt('0xbb3d'));
Algorithm List
| Algorithm(s) | Width | Check | Poly | Init | RefIn | RefOut | XorOut | | -------------------------------------------------------- | ----- | ------------------ | ------------------ | ------------------ | ----- | ------ | ------------------ | | CRC-8/AUTOSAR, CRC8_8H2F | 8 | 0xdf | 0x2f | 0xff | false | false | 0xff | | CRC-8/BLUETOOTH | 8 | 0x26 | 0xa7 | 0x0 | true | true | 0x0 | | CRC-8/CDMA2000, CRC8_CDMA2000 | 8 | 0xda | 0x9b | 0xff | false | false | 0x0 | | CRC-8/DARC, CRC8_DARC | 8 | 0x15 | 0x39 | 0x0 | true | true | 0x0 | | CRC-8/DVB-S2, CRC8_DVB_S2 | 8 | 0xbc | 0xd5 | 0x0 | false | false | 0x0 | | CRC-8/GSM-A, CRC8_SAE_J1850_ZERO | 8 | 0x37 | 0x1d | 0x0 | false | false | 0x0 | | CRC-8/GSM-B | 8 | 0x94 | 0x49 | 0x0 | false | false | 0xff | | CRC-8/I-432-1, CRC8_ITU, CRC-8/ITU | 8 | 0xa1 | 0x7 | 0x0 | false | false | 0x55 | | CRC-8/I-CODE, CRC8_ICODE | 8 | 0x7e | 0x1d | 0xfd | false | false | 0x0 | | CRC-8/LTE | 8 | 0xea | 0x9b | 0x0 | false | false | 0x0 | | CRC-8/MAXIM-DOW, CRC8_MAXIM, CRC-8/MAXIM | 8 | 0xa1 | 0x31 | 0x0 | true | true | 0x0 | | CRC-8/MIFARE-MAD | 8 | 0x99 | 0x1d | 0xc7 | false | false | 0x0 | | CRC-8/NRSC-5 | 8 | 0xf7 | 0x31 | 0xff | false | false | 0x0 | | CRC-8/OPENSAFETY | 8 | 0x3e | 0x2f | 0x0 | false | false | 0x0 | | CRC-8/ROHC, CRC8_ROHC | 8 | 0xd0 | 0x7 | 0xff | true | true | 0x0 | | CRC-8/SAE-J1850, CRC8_SAE_J1850 | 8 | 0x4b | 0x1d | 0xff | false | false | 0xff | | CRC-8/SMBUS, CRC8, CRC-8 | 8 | 0xf4 | 0x7 | 0x0 | false | false | 0x0 | | CRC-8/TECH-3250, CRC8_EBU, CRC-8/EBU | 8 | 0x97 | 0x1d | 0xff | true | true | 0x0 | | CRC-8/WCDMA, CRC8_WCDMA | 8 | 0x25 | 0x9b | 0x0 | true | true | 0x0 | | CRC-16/ARC, CRC16_ARC | 16 | 0xbb3d | 0x8005 | 0x0 | true | true | 0x0 | | CRC-16/CDMA2000, CRC16_CDMA2000 | 16 | 0x4c06 | 0xc867 | 0xffff | false | false | 0x0 | | CRC-16/CMS | 16 | 0xaee7 | 0x8005 | 0xffff | false | false | 0x0 | | CRC-16/DDS-110, CRC16_DDS_110 | 16 | 0x9ecf | 0x8005 | 0x800d | false | false | 0x0 | | CRC-16/DECT-R, CRC16_DECT_R | 16 | 0x7e | 0x589 | 0x0 | false | false | 0x1 | | CRC-16/DECT-X, CRC16_DECT_X | 16 | 0x7f | 0x589 | 0x0 | false | false | 0x0 | | CRC-16/DNP, CRC16_DNP | 16 | 0xea82 | 0x3d65 | 0x0 | true | true | 0xffff | | CRC-16/EN-13757, CRC16_EN_13757 | 16 | 0xc2b7 | 0x3d65 | 0x0 | false | false | 0xffff | | CRC-16/GENIBUS, CRC16_GENIBUS | 16 | 0xd64e | 0x1021 | 0xffff | false | false | 0xffff | | CRC-16/GSM | 16 | 0xce3c | 0x1021 | 0x0 | false | false | 0xffff | | CRC-16/IBM-3740, CRC16_CCITT_FALSE, CRC-16/CCITT-FALSE | 16 | 0x29b1 | 0x1021 | 0xffff | false | false | 0x0 | | CRC-16/IBM-SDLC, CRC16_X_25, CRC-16/X-25 | 16 | 0x906e | 0x1021 | 0xffff | true | true | 0xffff | | CRC-16/ISO-IEC-14443-3-A, CRC16_A, CRC-A | 16 | 0xbf05 | 0x1021 | 0xc6c6 | true | true | 0x0 | | CRC-16/KERMIT, CRC16_KERMIT | 16 | 0x2189 | 0x1021 | 0x0 | true | true | 0x0 | | CRC-16/LJ1200 | 16 | 0xbdf4 | 0x6f63 | 0x0 | false | false | 0x0 | | CRC-16/MAXIM-DOW, CRC16_MAXIM, CRC-16/MAXIM | 16 | 0x44c2 | 0x8005 | 0x0 | true | true | 0xffff | | CRC-16/MCRF4XX, CRC16_MCRF4XX | 16 | 0x6f91 | 0x1021 | 0xffff | true | true | 0x0 | | CRC-16/MODBUS, CRC16_MODBUS | 16 | 0x4b37 | 0x8005 | 0xffff | true | true | 0x0 | | CRC-16/NRSC-5 | 16 | 0xa066 | 0x80b | 0xffff | true | true | 0x0 | | CRC-16/OPENSAFETY-A | 16 | 0x5d38 | 0x5935 | 0x0 | false | false | 0x0 | | CRC-16/OPENSAFETY-B | 16 | 0x20fe | 0x755b | 0x0 | false | false | 0x0 | | CRC-16/PROFIBUS | 16 | 0xa819 | 0x1dcf | 0xffff | false | false | 0xffff | | CRC-16/RIELLO, CRC16_RIELLO | 16 | 0x63d0 | 0x1021 | 0xb2aa | true | true | 0x0 | | CRC-16/SPI-FUJITSU, CRC16_AUG_CCITT, CRC-16/AUG-CCITT | 16 | 0xe5cc | 0x1021 | 0x1d0f | false | false | 0x0 | | CRC-16/T10-DIF, CRC16_T10_DIF | 16 | 0xd0db | 0x8bb7 | 0x0 | false | false | 0x0 | | CRC-16/TELEDISK, CRC16_TELEDISK | 16 | 0xfb3 | 0xa097 | 0x0 | false | false | 0x0 | | CRC-16/TMS37157, CRC16_TMS37157 | 16 | 0x26b1 | 0x1021 | 0x89ec | true | true | 0x0 | | CRC-16/UMTS, CRC16_BUYPASS, CRC-16/BUYPASS | 16 | 0xfee8 | 0x8005 | 0x0 | false | false | 0x0 | | CRC-16/USB, CRC16_USB | 16 | 0xb4c8 | 0x8005 | 0xffff | true | true | 0xffff | | CRC-16/XMODEM, CRC16_CCIT_ZERO, CRC16_XMODEM | 16 | 0x31c3 | 0x1021 | 0x0 | false | false | 0x0 | | CRC-32/AIXM, CRC32_Q, CRC-32Q | 32 | 0x3010bf7f | 0x814141ab | 0x0 | false | false | 0x0 | | CRC-32/AUTOSAR | 32 | 0x1697d06a | 0xf4acfb13 | 0xffffffff | true | true | 0xffffffff | | CRC-32/BASE91-D, CRC32_D, CRC-32D | 32 | 0x87315576 | 0xa833982b | 0xffffffff | true | true | 0xffffffff | | CRC-32/BZIP2, CRC32_BZIP2 | 32 | 0xfc891918 | 0x4c11db7 | 0xffffffff | false | false | 0xffffffff | | CRC-32/CD-ROM-EDC | 32 | 0x6ec2edc4 | 0x8001801b | 0x0 | true | true | 0x0 | | CRC-32/CKSUM, CRC32_POSIX, CRC-32/POSIX | 32 | 0x765e7680 | 0x4c11db7 | 0x0 | false | false | 0xffffffff | | CRC-32/ISCSI, CRC32_C, CRC-32C | 32 | 0xe3069283 | 0x1edc6f41 | 0xffffffff | true | true | 0xffffffff | | CRC-32/ISO-HDLC, CRC32, CRC-32 | 32 | 0xcbf43926 | 0x4c11db7 | 0xffffffff | true | true | 0xffffffff | | CRC-32/JAMCRC, CRC32_JAMCRC | 32 | 0x340bc6d9 | 0x4c11db7 | 0xffffffff | true | true | 0x0 | | CRC-32/MPEG-2, CRC32_MPEG2 | 32 | 0x376e6e7 | 0x4c11db7 | 0xffffffff | false | false | 0x0 | | CRC-32/XFER, CRC32_XFER | 32 | 0xbd0be338 | 0xaf | 0x0 | false | false | 0x0 | | CRC-64/ECMA-182, CRC64_ECMA_182 | 64 | 0x6c40df5f0b497347 | 0x42f0e1eba9ea3693 | 0x0 | false | false | 0x0 | | CRC-64/GO-ISO, CRC64_GO_ISO | 64 | 0xb90956c775a41001 | 0x1b | 0xffffffffffffffff | true | true | 0xffffffffffffffff | | CRC-64/WE, CRC64_WE | 64 | 0x62ec59e3f1a4f00a | 0x42f0e1eba9ea3693 | 0xffffffffffffffff | false | false | 0xffffffffffffffff | | CRC-64/XZ, CRC64_XZ | 64 | 0x995dc9bbdf1939fa | 0x42f0e1eba9ea3693 | 0xffffffffffffffff | true | true | 0xffffffffffffffff |