Add Custom CRC

This commit is contained in:
r4mos 2025-03-03 17:15:26 +01:00
parent 3025391821
commit 1b4760c447
2 changed files with 805 additions and 172 deletions

View file

@ -27,180 +27,731 @@ class CRCChecksum extends Operation {
this.args = [ this.args = [
{ {
name: "Algorithm", name: "Algorithm",
type: "option", type: "argSelector",
value: [ value: [
"CRC-3/GSM", {
"CRC-3/ROHC", name: "Custom",
"CRC-4/G-704", on: [1, 2, 3, 4, 5, 6]
"CRC-4/INTERLAKEN", },
"CRC-4/ITU", {
"CRC-5/EPC", name: "CRC-3/GSM",
"CRC-5/EPC-C1G2", off: [1, 2, 3, 4, 5, 6]
"CRC-5/G-704", },
"CRC-5/ITU", {
"CRC-5/USB", name: "CRC-3/ROHC",
"CRC-6/CDMA2000-A", off: [1, 2, 3, 4, 5, 6]
"CRC-6/CDMA2000-B", },
"CRC-6/DARC", {
"CRC-6/G-704", name: "CRC-4/G-704",
"CRC-6/GSM", off: [1, 2, 3, 4, 5, 6]
"CRC-6/ITU", },
"CRC-7/MMC", {
"CRC-7/ROHC", name: "CRC-4/INTERLAKEN",
"CRC-7/UMTS", off: [1, 2, 3, 4, 5, 6]
"CRC-8", },
"CRC-8/8H2F", {
"CRC-8/AES", name: "CRC-4/ITU",
"CRC-8/AUTOSAR", off: [1, 2, 3, 4, 5, 6]
"CRC-8/BLUETOOTH", },
"CRC-8/CDMA2000", {
"CRC-8/DARC", name: "CRC-5/EPC",
"CRC-8/DVB-S2", off: [1, 2, 3, 4, 5, 6]
"CRC-8/EBU", },
"CRC-8/GSM-A", {
"CRC-8/GSM-B", name: "CRC-5/EPC-C1G2",
"CRC-8/HITAG", off: [1, 2, 3, 4, 5, 6]
"CRC-8/I-432-1", },
"CRC-8/I-CODE", {
"CRC-8/ITU", name: "CRC-5/G-704",
"CRC-8/LTE", off: [1, 2, 3, 4, 5, 6]
"CRC-8/MAXIM", },
"CRC-8/MAXIM-DOW", {
"CRC-8/MIFARE-MAD", name: "CRC-5/ITU",
"CRC-8/NRSC-5", off: [1, 2, 3, 4, 5, 6]
"CRC-8/OPENSAFETY", },
"CRC-8/ROHC", {
"CRC-8/SAE-J1850", name: "CRC-5/USB",
"CRC-8/SAE-J1850-ZERO", off: [1, 2, 3, 4, 5, 6]
"CRC-8/SMBUS", },
"CRC-8/TECH-3250", {
"CRC-8/WCDMA", name: "CRC-6/CDMA2000-A",
"CRC-10/ATM", off: [1, 2, 3, 4, 5, 6]
"CRC-10/CDMA2000", },
"CRC-10/GSM", {
"CRC-10/I-610", name: "CRC-6/CDMA2000-B",
"CRC-11/FLEXRAY", off: [1, 2, 3, 4, 5, 6]
"CRC-11/UMTS", },
"CRC-12/3GPP", {
"CRC-12/CDMA2000", name: "CRC-6/DARC",
"CRC-12/DECT", off: [1, 2, 3, 4, 5, 6]
"CRC-12/GSM", },
"CRC-12/UMTS", {
"CRC-13/BBC", name: "CRC-6/G-704",
"CRC-14/DARC", off: [1, 2, 3, 4, 5, 6]
"CRC-14/GSM", },
"CRC-15/CAN", {
"CRC-15/MPT1327", name: "CRC-6/GSM",
"CRC-16", off: [1, 2, 3, 4, 5, 6]
"CRC-16/A", },
"CRC-16/ACORN", {
"CRC-16/ARC", name: "CRC-6/ITU",
"CRC-16/AUG-CCITT", off: [1, 2, 3, 4, 5, 6]
"CRC-16/AUTOSAR", },
"CRC-16/B", {
"CRC-16/BLUETOOTH", name: "CRC-7/MMC",
"CRC-16/BUYPASS", off: [1, 2, 3, 4, 5, 6]
"CRC-16/CCITT", },
"CRC-16/CCITT-FALSE", {
"CRC-16/CCITT-TRUE", name: "CRC-7/ROHC",
"CRC-16/CCITT-ZERO", off: [1, 2, 3, 4, 5, 6]
"CRC-16/CDMA2000", },
"CRC-16/CMS", {
"CRC-16/DARC", name: "CRC-7/UMTS",
"CRC-16/DDS-110", off: [1, 2, 3, 4, 5, 6]
"CRC-16/DECT-R", },
"CRC-16/DECT-X", {
"CRC-16/DNP", name: "CRC-8",
"CRC-16/EN-13757", off: [1, 2, 3, 4, 5, 6]
"CRC-16/EPC", },
"CRC-16/EPC-C1G2", {
"CRC-16/GENIBUS", name: "CRC-8/8H2F",
"CRC-16/GSM", off: [1, 2, 3, 4, 5, 6]
"CRC-16/I-CODE", },
"CRC-16/IBM", {
"CRC-16/IBM-3740", name: "CRC-8/AES",
"CRC-16/IBM-SDLC", off: [1, 2, 3, 4, 5, 6]
"CRC-16/IEC-61158-2", },
"CRC-16/ISO-HDLC", {
"CRC-16/ISO-IEC-14443-3-A", name: "CRC-8/AUTOSAR",
"CRC-16/ISO-IEC-14443-3-B", off: [1, 2, 3, 4, 5, 6]
"CRC-16/KERMIT", },
"CRC-16/LHA", {
"CRC-16/LJ1200", name: "CRC-8/BLUETOOTH",
"CRC-16/LTE", off: [1, 2, 3, 4, 5, 6]
"CRC-16/M17", },
"CRC-16/MAXIM", {
"CRC-16/MAXIM-DOW", name: "CRC-8/CDMA2000",
"CRC-16/MCRF4XX", off: [1, 2, 3, 4, 5, 6]
"CRC-16/MODBUS", },
"CRC-16/NRSC-5", {
"CRC-16/OPENSAFETY-A", name: "CRC-8/DARC",
"CRC-16/OPENSAFETY-B", off: [1, 2, 3, 4, 5, 6]
"CRC-16/PROFIBUS", },
"CRC-16/RIELLO", {
"CRC-16/SPI-FUJITSU", name: "CRC-8/DVB-S2",
"CRC-16/T10-DIF", off: [1, 2, 3, 4, 5, 6]
"CRC-16/TELEDISK", },
"CRC-16/TMS37157", {
"CRC-16/UMTS", name: "CRC-8/EBU",
"CRC-16/USB", off: [1, 2, 3, 4, 5, 6]
"CRC-16/V-41-LSB", },
"CRC-16/V-41-MSB", {
"CRC-16/VERIFONE", name: "CRC-8/GSM-A",
"CRC-16/X-25", off: [1, 2, 3, 4, 5, 6]
"CRC-16/XMODEM", },
"CRC-16/ZMODEM", {
"CRC-17/CAN-FD", name: "CRC-8/GSM-B",
"CRC-21/CAN-FD", off: [1, 2, 3, 4, 5, 6]
"CRC-24/BLE", },
"CRC-24/FLEXRAY-A", {
"CRC-24/FLEXRAY-B", name: "CRC-8/HITAG",
"CRC-24/INTERLAKEN", off: [1, 2, 3, 4, 5, 6]
"CRC-24/LTE-A", },
"CRC-24/LTE-B", {
"CRC-24/OPENPGP", name: "CRC-8/I-432-1",
"CRC-24/OS-9", off: [1, 2, 3, 4, 5, 6]
"CRC-30/CDMA", },
"CRC-31/PHILIPS", {
"CRC-32", name: "CRC-8/I-CODE",
"CRC-32/AAL5", off: [1, 2, 3, 4, 5, 6]
"CRC-32/ADCCP", },
"CRC-32/AIXM", {
"CRC-32/AUTOSAR", name: "CRC-8/ITU",
"CRC-32/BASE91-C", off: [1, 2, 3, 4, 5, 6]
"CRC-32/BASE91-D", },
"CRC-32/BZIP2", {
"CRC-32/C", name: "CRC-8/LTE",
"CRC-32/CASTAGNOLI", off: [1, 2, 3, 4, 5, 6]
"CRC-32/CD-ROM-EDC", },
"CRC-32/CKSUM", {
"CRC-32/D", name: "CRC-8/MAXIM",
"CRC-32/DECT-B", off: [1, 2, 3, 4, 5, 6]
"CRC-32/INTERLAKEN", },
"CRC-32/ISCSI", {
"CRC-32/ISO-HDLC", name: "CRC-8/MAXIM-DOW",
"CRC-32/JAMCRC", off: [1, 2, 3, 4, 5, 6]
"CRC-32/MEF", },
"CRC-32/MPEG-2", {
"CRC-32/NVME", name: "CRC-8/MIFARE-MAD",
"CRC-32/PKZIP", off: [1, 2, 3, 4, 5, 6]
"CRC-32/POSIX", },
"CRC-32/Q", {
"CRC-32/SATA", name: "CRC-8/NRSC-5",
"CRC-32/V-42", off: [1, 2, 3, 4, 5, 6]
"CRC-32/XFER", },
"CRC-32/XZ", {
"CRC-40/GSM", name: "CRC-8/OPENSAFETY",
"CRC-64/ECMA-182", off: [1, 2, 3, 4, 5, 6]
"CRC-64/GO-ECMA", },
"CRC-64/GO-ISO", {
"CRC-64/MS", name: "CRC-8/ROHC",
"CRC-64/NVME", off: [1, 2, 3, 4, 5, 6]
"CRC-64/REDIS", },
"CRC-64/WE", {
"CRC-64/XZ", name: "CRC-8/SAE-J1850",
"CRC-82/DARC" off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-8/SAE-J1850-ZERO",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-8/SMBUS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-8/TECH-3250",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-8/WCDMA",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-10/ATM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-10/CDMA2000",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-10/GSM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-10/I-610",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-11/FLEXRAY",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-11/UMTS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-12/3GPP",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-12/CDMA2000",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-12/DECT",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-12/GSM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-12/UMTS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-13/BBC",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-14/DARC",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-14/GSM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-15/CAN",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-15/MPT1327",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/A",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/ACORN",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/ARC",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/AUG-CCITT",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/AUTOSAR",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/B",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/BLUETOOTH",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/BUYPASS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/CCITT",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/CCITT-FALSE",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/CCITT-TRUE",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/CCITT-ZERO",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/CDMA2000",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/CMS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/DARC",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/DDS-110",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/DECT-R",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/DECT-X",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/DNP",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/EN-13757",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/EPC",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/EPC-C1G2",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/GENIBUS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/GSM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/I-CODE",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/IBM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/IBM-3740",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/IBM-SDLC",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/IEC-61158-2",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/ISO-HDLC",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/ISO-IEC-14443-3-A",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/ISO-IEC-14443-3-B",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/KERMIT",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/LHA",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/LJ1200",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/LTE",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/M17",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/MAXIM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/MAXIM-DOW",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/MCRF4XX",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/MODBUS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/NRSC-5",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/OPENSAFETY-A",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/OPENSAFETY-B",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/PROFIBUS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/RIELLO",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/SPI-FUJITSU",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/T10-DIF",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/TELEDISK",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/TMS37157",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/UMTS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/USB",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/V-41-LSB",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/V-41-MSB",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/VERIFONE",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/X-25",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/XMODEM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-16/ZMODEM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-17/CAN-FD",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-21/CAN-FD",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-24/BLE",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-24/FLEXRAY-A",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-24/FLEXRAY-B",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-24/INTERLAKEN",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-24/LTE-A",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-24/LTE-B",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-24/OPENPGP",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-24/OS-9",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-30/CDMA",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-31/PHILIPS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/AAL5",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/ADCCP",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/AIXM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/AUTOSAR",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/BASE91-C",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/BASE91-D",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/BZIP2",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/C",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/CASTAGNOLI",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/CD-ROM-EDC",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/CKSUM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/D",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/DECT-B",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/INTERLAKEN",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/ISCSI",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/ISO-HDLC",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/JAMCRC",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/MEF",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/MPEG-2",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/NVME",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/PKZIP",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/POSIX",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/Q",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/SATA",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/V-42",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/XFER",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-32/XZ",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-40/GSM",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-64/ECMA-182",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-64/GO-ECMA",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-64/GO-ISO",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-64/MS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-64/NVME",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-64/REDIS",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-64/WE",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-64/XZ",
off: [1, 2, 3, 4, 5, 6]
},
{
name: "CRC-82/DARC",
off: [1, 2, 3, 4, 5, 6]
}
] ]
},
{
name: "Width (bits)",
type: "toggleString",
value: "0",
toggleValues: ["Decimal"]
},
{
name: "Polynomial",
type: "toggleString",
value: "0",
toggleValues: ["Hex"]
},
{
name: "Initialization",
type: "toggleString",
value: "0",
toggleValues: ["Hex"]
},
{
name: "Reflect input",
type: "option",
value: ["True", "False"]
},
{
name: "Reflect output",
type: "option",
value: ["True", "False"]
},
{
name: "Xor Output",
type: "toggleString",
value: "0",
toggleValues: ["Hex"]
} }
]; ];
} }
@ -340,6 +891,32 @@ class CRCChecksum extends Operation {
return VALUE.toString(16).padStart(Math.ceil(Number(width) / 4), "0"); return VALUE.toString(16).padStart(Math.ceil(Number(width) / 4), "0");
} }
/**
* Validates user input to perform a custom CRC
*
* @param {Object} widthObject
* @param {ArrayBuffer} input
* @param {Object} polyObject
* @param {Object} initObject
* @param {Object} reflectInObject
* @param {Object} reflectOutObject
* @param {Object} xorOutObject
*/
custom(widthObject, input, polyObject, initObject, reflectInObject, reflectOutObject, xorOutObject) {
try {
const width = BigInt(widthObject.string);
const poly = BigInt("0x" + polyObject.string);
const init = BigInt("0x" + initObject.string);
const reflectIn = reflectInObject.string === "True";
const reflectOut = reflectOutObject.string === "True";
const xorOut = BigInt("0x" + xorOutObject.string);
return this.crc(width, input, poly, init, reflectIn, reflectOut, xorOut);
} catch (error) {
throw new OperationError("Invalid custom CRC arguments");
}
}
/** /**
* Calculation of all known CRCs. Names and constants extracted from https://reveng.sourceforge.io/crc-catalogue/all.htm * Calculation of all known CRCs. Names and constants extracted from https://reveng.sourceforge.io/crc-catalogue/all.htm
* *
@ -352,6 +929,7 @@ class CRCChecksum extends Operation {
input = new Uint8Array(input); input = new Uint8Array(input);
switch (algorithm) { switch (algorithm) {
case "Custom": return this.custom(args[1], input, args[2], args[3], args[4], args[5], args[6]);
case "CRC-3/GSM": return this.crc(3n, input, 0x3n, 0x0n, false, false, 0x7n); case "CRC-3/GSM": return this.crc(3n, input, 0x3n, 0x0n, false, false, 0x7n);
case "CRC-3/ROHC": return this.crc(3n, input, 0x3n, 0x7n, true, true, 0x0n); case "CRC-3/ROHC": return this.crc(3n, input, 0x3n, 0x7n, true, true, 0x0n);
case "CRC-4/G-704": return this.crc(4n, input, 0x3n, 0x0n, true, true, 0x0n); case "CRC-4/G-704": return this.crc(4n, input, 0x3n, 0x0n, true, true, 0x0n);

View file

@ -1995,5 +1995,60 @@ TestRegister.addTests([
"args": ["CRC-82/DARC"] "args": ["CRC-82/DARC"]
} }
] ]
},
{
name: "Custom. CRC-32",
input: "123456789",
expectedOutput: "cbf43926",
recipeConfig: [
{
"op": "CRC Checksum",
"args": ["Custom", "32", "04C11DB7", "FFFFFFFF", "True", "True", "FFFFFFFF"]
}
]
},
{
name: "Custom. Invalid Width",
input: "123456789",
expectedOutput: "Invalid custom CRC arguments",
recipeConfig: [
{
"op": "CRC Checksum",
"args": ["Custom", "ABC", "04C11DB7", "FFFFFFFF", "True", "True", "FFFFFFFF"]
}
]
},
{
name: "Custom. Invalid Poly",
input: "123456789",
expectedOutput: "Invalid custom CRC arguments",
recipeConfig: [
{
"op": "CRC Checksum",
"args": ["Custom", "32", "", "FFFFFFFF", "True", "True", "FFFFFFFF"]
}
]
},
{
name: "Custom. Invalid Init",
input: "123456789",
expectedOutput: "Invalid custom CRC arguments",
recipeConfig: [
{
"op": "CRC Checksum",
"args": ["Custom", "32", "04C11DB7", "", "True", "True", "FFFFFFFF"]
}
]
},
{
name: "Custom. Invalid Xor Out",
input: "123456789",
expectedOutput: "Invalid custom CRC arguments",
recipeConfig: [
{
"op": "CRC Checksum",
"args": ["Custom", "32", "04C11DB7", "FFFFFFFF", "True", "True", ""]
}
]
} }
]); ]);