All notable changes to this project will be documented in this file. For a detailed list of changes see the pycrc GitHub page. This project adheres to Semantic Versioning.
v0.9.2 - 2019-02-06
- Fix code generator to output the table correctly. Fixes #28.
- Ensure the data is aligned when using slice-by. Fixes #24.
v0.9.1 - 2017-09-09
- Added setup.py script to install pycrc on the system, if desired.
- Added checks about possibly unsuitable polynomials. Use the --force-poly option to override the error message.
- Completely rewritten the code generator back-end. The new back-end is more flexible and allows for a better optimisation of the generated expressions.
- Moved the python code under the
pycrc
directory and changed how the pycrc sub-modules are included. Before one would writeimport crc_xxx
, now one would writeimport pycrc.xxx
. - New license for the documentation: Creative Commons Attribution-Share Alike 4.0 Unported License.
- Fixed binary files handling with Python 2.7. Fixes #11. Thanks to James Bowman.
- Fixed some spelling. Thanks to Frank (ftheile) and ashelly.
- Fixed Header Guard generation. Don't use underscores to start the header guard name. Thanks to Andre Hartmann.
v0.9 - 2016-01-06
- Added Stephan Brumme to the
AUTHORS
file as his implementation of the slice-by algorithm is the basis for pycrc's implementation. - Added a new option
--slice-by
. This option is still experimental and limited in its use.
- Documented the experimental
--slice-by option
. - Simplified the implementation where Width is less than 8 bits.
- Run the code through
pylint
. - API change: changed the names of the member variables from
CamelCase
to the format suggested inPEP 0008
(lowercase letters and words separated by underscore).
- Suppressed the
crc_reflect
function where not needed. Addresses part of #8. Thanks to Craig McQueen. - Allow strings with values greater than 0x80 in
--check-hexstring
. - When the CRC width is less than 8 then the
bit-by-bit
algorithm needs to apply the CRC mask to the final value. Fixes #10. Thanks to Steve Geo. - Fixed the initial value of the 16-bit
CCITT
algorithm. Renamed the model fromccitt
tocrc-16-ccitt
. Fixes #7. Thanks to Craig McQueen.
v0.8.3 - 2015-08-31
- pycrc has a new homepage.
- The issue tracker on GitHub is now advertised as the preferred issue tracker.
- Applied some minor optimisations to the generated table-driven code.
- Belatedly added an authors file. Should I have forgotten to mention someone please don't hesitate to send a mail.
- Upgraded documentation to DocBook 5.
- Removed sourceforge mailing list from
README.md
in an effort to move pycrc away from sourceforge. - Removed the experimental
--bitwise-expression
option to facilitate restructuring of the code. - The preferred format for the input data for the Python API is now a byte array. But if a string is supplied it is decoded as UTF-8 string. Alternative formats are not supported and must be passed to the functions as byte arrays.
- Changed the signature of the
crc_update()
function: the data argument is now a pointer to void to improve compatibility with C++. Thanks to Kamil Szczygieł. This closes GitHub issue #4.
v0.8.2 - 2014-12-04
- Smaller code cleanups.
- Stated more clearly that the bitwise expression algorithm is experimental in the documentation.
- Fixed a typo in the documentation. The description previously stated: "The reflected value of 0xa3 (10100010b) is 0x45 (01000101b)" but this should be: "The reflected value of 0xa2 (10100010b) is 0x45 (01000101b)" Thanks to Andreas Nebenfuehr for reporting the mistake.
- Small cleanups.
Added a tests for special cases. For now, added
crc-5
with non-inverted input. This test is currently failing. - Removed warning about even polynomials. As Lars Pötter rightly pointed out, polynomials may be even. Added a caveat emptor about even polinomials in the documentation.
- The table-driven code for polynomials of width < 8 using a table index width < 8 was producing a wrong checksum. Thanks to Radosław Gancarz.
- Updated the generated code to cope with big Widths (>32 bits) on 32 bit
processors.
Since C89 does not give a way to specify the minimum length of a data type,
the test does not validate C89 code using Widths > 32.
For C99, the
uint_fastN_t
data types are used or long long, if the Width is unknown.
v0.8.1 - 2013-05-17
- Updated qm.py from GitHub.
- Explicitly stated that the output of pycrc is not considered a substantial
part of the code of pycrc in
README.md
. - Re-organised the symbol table: grouped the code by functionality, not by algorithm.
- The input to the CRC routines can now be bytes or strings.
- Minor formatting change in the manpage.
- Better python3 compatibility.
- Added the files generated with the
bwe
algorithm tocheck_files.sh
.
- Fixed a bug in the handling of hexstrings in Python3. Thanks to Matthias Kuehlewein.
- Added
--check-hexstring
to the tests. - Remove obsolete and unused
direct
parameter. Merge pull request #2 from smurfix/master. Thanks to Matthias Urlichs. - Don't recurse into main() when an unknown algorithm is selected. Merge pull request #2 from smurfix/master. Thanks to Matthias Urlichs.
v0.8 - 2013-01-04
- Merged (private) bitwise-expression branch to main.
This adds the highly experimental
bitwise-expression
(bwe
) code generator target, which might one day be almost as fast as the table-driven code but much smaller. At the moment the generated code is bigger and slower than any other algorithm, so use at your own risk.
- Now it is possible to specify the
--include
option multiple times. - Completely revisited and reworked the documentation.
- Updated the command line help screen with more useful command descriptions.
- Removed the
-*- coding: Latin-1 -*-
string. - Updated the copyright year to 2013.
- Renamed abbreviations to
bbb
,bbf
,tbl
. - It is possible now to abbreviate the algorithms (
bbb
forbit-by-bit
,bbf
forbit-by-bit-fast
andtbl
fortable-driven
). Added the list of supported CRC models to the error message when an unknown model parameter was supplied. - Documented the possibility to abbreviate the algorithms. Minor improvements in the documentation.
- Added a note to
README.md
that version 0.7.10 of pycrc is the last one known to work with Python 2.4. - Updated a link to the list of CRC models.
- Renamed i
README
toREADME.md
. - Updated link to the Catalogue of parametrised CRC algorithms.
v0.7.11 - 2012-10-20
- Improved Python3 compatibility. pycrc now requires Python 2.6 or later.
- Added a test for compiled standard models.
- Fixed a wrong
check
value of thecrc-64-jones
model. - Don't use
snprintf()
withc89
code, changed tosprintf()
. - Deleted
test.sh
shell script and replaced it withtest.py
.
v0.7.10 - 2012-02-13
- Added the models
crc-12-3gpp
,crc-16-genibus
,crc-32-bzip2
andcrc-64-xz
. Taken from Greg Cook's Catalogue of parametrised CRC algorithms.
- Bad-looking C code generated; make sure the
bit-by-bit
(-fast
) code does not contain two instructions on one line. Thanks to "intgr" for the fix. - Some small code clean-up: use
set()
when appropriate.
- Fixed a mistake in the man page that still used the old model name
crc-32mpeg
instead ofcrc-32-mpeg
. Thanks to Marek Erban.
v0.7.9 - 2011-12-08
- Fixed a bug in the generated C89 code that included
stdint.h
. Thanks to Frank (ftheile). Closes issue 3454356. - Fixed a bug in the generated C89 code when using a 64 bit CRC.
- Using the
--verbose
option made pycrc quit without error message.
v0.7.8 - 2011-07-10
- When generating C code for the C89 or ANSI standard, don't include
stdint.h
. This closes issue 3338930 - If no output file name is given while generating a C file, then pycrc will
#include
a hypotheticalpycrc.h
file instead of astdout.h
file. Also, added a comment on that line to make debugging easier. Closes issue 3325109. - Removed unused variable
this_option_optind
in the generated option parser.
v0.7.7 - 2011-02-11
- Updated the copyright year.
Fixed some coding style issues found by
pylint
andpychecker
.
- Substituted the deprecated function
atoi()
withint()
. Closes issue 3136566. Thanks to Tony Smith. - Updated the documentation using Windows-style calls to the Python interpreter.
v0.7.6 - 2010-10-21
- Rewritten macro parser from scratch. Simplified the macro language.
- Changed a simple division (/) to a integer division (//) for Python3 compatibility.
- Fixed a minor bug in the command line parsing of the generated main function.
v0.7.5 - 2010-03-28
- Python implementation of the
table-driven
algorithm can handle widths less than 8. - Suppressed warnings of unused cfg structure on partially defined models.
- Removed the half-baken and confusing
--direct
option.
- C/C++ code can now be generated for the table-driven algorithm with widths that are not byte-aligned or less than 8. This feature was heavily inspired by a similar feature in Danjel McGougan's Universal Crc.
- API change: introduced new variable
crc_shift
, member of thecrc_cfg_t
structure, which must be initialised manually when the width was undefined during C/C++ code generation. - Minor code cleanup.
v0.7.4 - 2010-01-24
- Added
crc-16-modbus
. Closes issue 2896611.
- Changed the
xor-in
value of thecrc-64-jones
model. - Set xmodem parameters equal to the
zmodem
parameters. - Generate more uniform error messages.
- Added a warning for even polynomials.
- Fix for unused variable argv. Closes issue 2893224. Thanks to Marko von Oppen.
v0.7.3 - 2009-10-25
- Added
crc-64-jones
CRC model. Thanks to Waterspirit.
- Renamed
crc-32mpeg
tocrc-32-mpeg
.
v0.7.2 - 2009-09-30
- Fixed a bug that caused the result of the Python
table-driven
code not being evaluated at all. Closes issue 2870630. Thanks to Ildar Muslukhov.
v0.7.1 - 2009-04-05
- Added
crc-32mpeg
. Thanks to Thomas Edwards.
v0.7 - 2009-02-27
- Added the
--direct
option. - Added
--check-hexstring
option. Closes issue 2545183. Thanks to Arnim Littek. - Added a check for extra arguments on the command line. Closes issue 2545185. Thanks to Arnim Littek.
- Added one more example in the documentation.
v0.6.7 - 2008-12-11
- Run Python's 2to3 script on all files. Check the code on a x64 platform.
- Fixed a bug that raised an exception when an unknown model was selected.
v0.6.6 - 2008-06-05
- New license for the documentation: Creative Commons Attribution-Share Alike 3.0 Unported License.
- Fixed a bug in the
print_params()
function. Closes issue 1985197. Thanks to Artur Lipowski.
v0.6.5 - 2008-03-03
- Added dallas-1-wire 8 bit CRC.
- Added
r-crc-16 model
(DECT (cordless digital standard) packets A-field according to ETSI EN 300 175-3 v2.1.1). Thanks to "raimondo". - Added
--crc-type
and--include-file
options. - Added new file to handle CRC models.
- Added extern "C" declaration to the generated C header file. Thanks to Nathan Royer.
- Changed the API to take the CRC model direct as parameter. Deleted the need
for an obscure
opt
object.
- Fixed a problem with the generated code for bit-by-bit-fast algorithms. Thanks to Hans Bacher.
v0.6.4 - 2007-12-05
- Fixed a bug in the code generator for the
table-driven
algorithm. Thanks to Tom McDermott. Closes issue 1843774
v0.6.3 - 2007-10-13
- Added new models:
crc-5
,crc-15
,crc-16-usb
,crc-24
,crc-64
. The new models are taken from Ray Burr's CrcMoose.
- Fixed some portability problems in the generated code. Thanks to Helmut Bauer. Closes issue 1812894.
- The option
--check-file
works now with--width
< 8. Closes issue 1794343. - Removed unnecessary restriction on the width when using the
bit-by-bit-fast
algorithm. Closes issue 1794344.
v0.6.2 - 2007-08-25
- Simplified the table-driven code. Closes issue 1727128.
- Changed the macro language syntax to a better format.
- Renamed
crc_code_gen.py
tocrc_parser.py
. - Documented the usage of the
crc_*
modules.
- The parameter to
--check-string
was ignored. Closes issue 1781637.
v0.6.1 - 2007-08-12
- Added test for C89 compilation.
- Added a test case to loop over the input bytes one by one.
- Deleted obsolete options.
- Tidied up the documentation. Code cleanup.
- Bugfix in the source code generator for C89:
Compilation error due to mismatch of parameters in the
crc_finalize
funtion. - Changes related to 919107: Code generator includes
reflect()
function even if not needed. - Fixed a typo in the C89 source code generator. Thanks to Helmut Bauer.
v0.6 - 2007-05-21
- Added the
--std
option to generate C89 (ANSI) compliant code. - Added a new check to the test script which validate all possible combination of undefined parameters.
- Made the generated main function cope with command line arguments.
- Added the
--generate
table option. - Added a template engine for the code generation. Split up
pycrc.py
into smaller modules. - Added obsolete options again tor legacy reasons.
- Added a better handling of the
--model
parameter.
- Reduced the size of the symbol table by re-arranging items.
- Changed licence to the MIT licence. This makes the additional clause for
generated source code obsolete.
Changed all command line options with underscores to hyphen (e.g.
table_driven
becomestable-driven
). Added the option--generate
which obsoletes the old options--generate_c
--generate_h
etc.
v0.5 - 2007-03-25
- Fixed bug 1686404: unhandled exception when called with both options
--table_idx_width
and--check_file
. - Eliminated useless declaration of
crc_reflect
, when not used. - Corrected typos in the documentation.
v0.4 - 2007-01-26
- Added more parameter sets (now supported:
crc-8
,crc-16
,citt
,kermit
,x-25
,xmodem
,zmodem
,crc-32
,crc-32c
,posix
,jam
,xfer
) from Greg Cook's Catalogue of parametrised CRC algorithms. - Added Doxygen documentation strings to the functions.
- Added the
--symbol_prefix
option. - Added the
--check_file
option. - Added a non-regression test on the generated C source.
- Eliminated needless documentation of not generated functions.
- Many corrections to the manual (thanks Francesca) Documented the new parameter sets.
- Added some new tests, disabled the random loop.
- Corrected many typos and bad phrasing (still a lot to do) Documented the
--symbol_prefix
option.
v0.3 - 2007-01-14
- First public release pycrc v0.3