crcmod.predefined – CRC calculation using predefined algorithms

This module provides a function factory mkPredefinedCrcFun() and a class PredefinedCrc for calculating CRCs of byte strings using common predefined CRC algorithms.

The function factory and the class are very similar to those defined in crcmod, except that the CRC algorithm is specified by a predefined name, rather than the individual polynomial, reflection, and initial and final-XOR parameters.

Predefined CRC algorithms

The crcmod.predefined module offers the following predefined algorithms:

Name Polynomial Reversed? Init-value XOR-out Check
crc-8 0x107 False 0x00 0x00 0xF4
crc-8-darc 0x139 True 0x00 0x00 0x15
crc-8-i-code 0x11D False 0xFD 0x00 0x7E
crc-8-itu 0x107 False 0x55 0x55 0xA1
crc-8-maxim 0x131 True 0x00 0x00 0xA1
crc-8-rohc 0x107 True 0xFF 0x00 0xD0
crc-8-wcdma 0x19B True 0x00 0x00 0x25
crc-16 0x18005 True 0x0000 0x0000 0xBB3D
crc-16-buypass 0x18005 False 0x0000 0x0000 0xFEE8
crc-16-dds-110 0x18005 False 0x800D 0x0000 0x9ECF
crc-16-dect 0x10589 False 0x0001 0x0001 0x007E
crc-16-dnp 0x13D65 True 0xFFFF 0xFFFF 0xEA82
crc-16-en-13757 0x13D65 False 0xFFFF 0xFFFF 0xC2B7
crc-16-genibus 0x11021 False 0x0000 0xFFFF 0xD64E
crc-16-maxim 0x18005 True 0xFFFF 0xFFFF 0x44C2
crc-16-mcrf4xx 0x11021 True 0xFFFF 0x0000 0x6F91
crc-16-riello 0x11021 True 0x554D 0x0000 0x63D0
crc-16-t10-dif 0x18BB7 False 0x0000 0x0000 0xD0DB
crc-16-teledisk 0x1A097 False 0x0000 0x0000 0x0FB3
crc-16-usb 0x18005 True 0x0000 0xFFFF 0xB4C8
x-25 0x11021 True 0x0000 0xFFFF 0x906E
xmodem 0x11021 False 0x0000 0x0000 0x31C3
modbus 0x18005 True 0xFFFF 0x0000 0x4B37
kermit [1] 0x11021 True 0x0000 0x0000 0x2189
crc-ccitt-false [1] 0x11021 False 0xFFFF 0x0000 0x29B1
crc-aug-ccitt [1] 0x11021 False 0x1D0F 0x0000 0xE5CC
crc-24 0x1864CFB False 0xB704CE 0x000000 0x21CF02
crc-24-flexray-a 0x15D6DCB False 0xFEDCBA 0x000000 0x7979BD
crc-24-flexray-b 0x15D6DCB False 0xABCDEF 0x000000 0x1F23B8
crc-32 0x104C11DB7 True 0x00000000 0xFFFFFFFF 0xCBF43926
crc-32-bzip2 0x104C11DB7 False 0x00000000 0xFFFFFFFF 0xFC891918
crc-32c 0x11EDC6F41 True 0x00000000 0xFFFFFFFF 0xE3069283
crc-32d 0x1A833982B True 0x00000000 0xFFFFFFFF 0x87315576
crc-32-mpeg 0x104C11DB7 False 0xFFFFFFFF 0x00000000 0x0376E6E7
posix 0x104C11DB7 False 0xFFFFFFFF 0xFFFFFFFF 0x765E7680
crc-32q 0x1814141AB False 0x00000000 0x00000000 0x3010BF7F
jamcrc 0x104C11DB7 True 0xFFFFFFFF 0x00000000 0x340BC6D9
xfer 0x1000000AF False 0x00000000 0x00000000 0xBD0BE338
crc-64 0x1000000000000001B True 0x0000000000000000 0x0000000000000000 0x46A5A9388A5BEFFE
crc-64-we 0x142F0E1EBA9EA3693 False 0x0000000000000000 0xFFFFFFFFFFFFFFFF 0x62EC59E3F1A4F00A
crc-64-jones 0x1AD93D23594C935A9 True 0xFFFFFFFFFFFFFFFF 0x0000000000000000 0xCAA717168609F281

Notes

[1](1, 2, 3)

Definitions of CCITT are disputable. See:

mkPredefinedCrcFun() – CRC function factory

The function factory provides a simple interface for CRC calculation. It is similar to crcmod.mkCrcFun(), except that it specifies a CRC algorithm by name rather than its parameters.

crcmod.predefined.mkPredefinedCrcFun(crc_name)

Function factory that returns a new function for calculating CRCs using a specified CRC algorithm.

Parameter:crc_name (string) – The name of the predefined CRC algorithm to use.
Returns:CRC calculation function
Return type:function

The function that is returned is the same as that returned by crcmod.mkCrcFun():

.crc_function(data[, crc=initCrc])
Parameters:
  • data (byte string) – Data for which to calculate the CRC.
  • crc – Initial CRC value.
Returns:

Calculated CRC value.

Return type:

integer

crcmod.predefined.mkCrcFun(crc_name)

This is an alias for crcmod.predefined.mkPredefinedCrcFun(). However, it is not defined when crcmod.predefined is imported using the form:

>>> from crcmod.predefined import *

Examples

CRC-32 example:

>>> import crcmod.predefined

>>> crc32_func = crcmod.predefined.mkCrcFun('crc-32')
>>> hex(crc32_func('123456789'))
'0xcbf43926L'

XMODEM example:

>>> xmodem_crc_func = crcmod.predefined.mkCrcFun('xmodem')
>>> hex(xmodem_crc_func('123456789'))
'0x31c3'

Class PredefinedCrc

This class is inherited from the crcmod.Crc class, and is the same except for the initialization. It specifies a CRC algorithm by name rather than its parameters.

class crcmod.predefined.PredefinedCrc(crc_name)

Returns a new Crc object for calculating CRCs using a specified CRC algorithm.

The parameter is the same as that for the factory function crcmod.predefined.mkPredefinedCrcFun().

Parameter:crc_name (string) – The name of the predefined CRC algorithm to use.
class crcmod.predefined.Crc(poly[, initCrc, rev, xorOut])

This is an alias for crcmod.predefined.PredefinedCrc. However, it is not defined when crcmod.predefined is imported using the form:

>>> from crcmod.predefined import *

Examples

CRC-32 Example:

>>> import crcmod.predefined

>>> crc32 = crcmod.predefined.Crc('crc-32')
>>> crc32.update('123456789')
>>> hex(crc32.crcValue)
'0xcbf43926L'
>>> crc32.hexdigest()
'CBF43926'