GitPedia

Crc rs

Rust implementation of CRC(16, 32, 64) with support of various standards

From mrhooray·Updated June 12, 2026·View on GitHub·

At a minimum, the MSRV will be ` uses a lookup table with 256 entries (e.g. for u32 thats 256 * 4 bytes). 3. `Table` uses a lookup table with 16 * 256 entries (e.g. for u32 thats 16 * 256 * 4 bytes). The project is written primarily in Rust, distributed under the Apache License 2.0 license, first published in 2015. Key topics include: checksum, crc, crc16, crc32, crc64.

crc

Rust implementation of CRC.

ci
Crate
Docs
License

Usage

Add crc to Cargo.toml

toml
[dependencies] crc = "3.4.0"

Examples

Using a well-known algorithm:

rust
const X25: crc::Crc<u16> = crc::Crc::<u16>::new(&crc::CRC_16_IBM_SDLC); assert_eq!(X25.checksum(b"123456789"), 0x906e);

Using a custom algorithm:

rust
const CUSTOM_ALG: crc::Algorithm<u16> = crc::Algorithm { width: 16, poly: 0x8005, init: 0xffff, refin: false, refout: false, xorout: 0x0000, check: 0xaee7, residue: 0x0000 }; let crc = crc::Crc::<u16>::new(&CUSTOM_ALG); let mut digest = crc.digest(); digest.update(b"123456789"); assert_eq!(digest.finalize(), 0xaee7);

Minimum supported Rust version (MSRV)

This crate's MSRV is 1.83.

At a minimum, the MSRV will be <= the oldest stable release in the last 12 months. MSRV may be bumped in minor version releases.

Implementations

This crate has several pluggable implementations:

  1. NoTable doesn't use a lookup table, and thus minimizes binary size and memory usage.
  2. Table<1> uses a lookup table with 256 entries (e.g. for u32 thats 256 * 4 bytes).
  3. Table<16> uses a lookup table with 16 * 256 entries (e.g. for u32 thats 16 * 256 * 4 bytes).

Table<1> is the default implementation, but this can be overridden by specifying I in Crc<W, I>. E.g.: Crc<u32, NoTable>, Crc<u64, Table<16>>, ...

NOTE: Lookup tables will increase binary size if they're generated at compile-time. Wrapping Crc initialization in a std::cell::OnceCell may be preferable if binary size is a concern.

Benchmark

cargo bench with AMD Ryzen 7 3800X (comparison).

Throughput (GiB/s)

WidthNoTableBytewiseSlice16
80.1130.5853.11
160.1050.4833.23
320.1110.5163.30
640.1390.5172.92
820.0910.4380.623

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any
additional terms or conditions.

Contributors

Showing top 12 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from mrhooray/crc-rs via the GitHub API.Last fetched: 6/24/2026