
Company News
Jerod Santo Joins Socket as Head of Media
Allow myself to introduce... myself.
Fast, SIMD-accelerated CRC32 (IEEE) checksum computation
For simple use-cases, you can call the hash convenience function to
directly compute the CRC32 checksum for a given byte slice:
let checksum = crc32fast::hash(b"foo bar baz");
For use-cases that require more flexibility or performance, for example when
processing large amounts of data, you can create and manipulate a Hasher:
use crc32fast::Hasher;
let mut hasher = Hasher::new();
hasher.update(b"foo bar baz");
let checksum = hasher.finalize();
This crate contains multiple CRC32 implementations:
x86 using sse and pclmulqdq instructionsx86 implementations using vpclmulqdq on 256-bit (avx2) and 512-bit (avx512f)
registers, folding many independent streams per instruction (compiled with Rust 1.89+; the
crate's minimum supported Rust version is otherwise unchanged)aarch64 using crc32 instructions, with a 3-way interleaved
variant that hides instruction latency on larger inputsCalling the Hasher::new constructor at runtime will perform a feature detection to select the most
optimal implementation for the current CPU feature set.
| crate | version | variant | ns/iter | MB/s |
|---|---|---|---|---|
| crc | 1.8.1 | n/a | 4,926 | 207 |
| crc32fast (this crate) | 1.0.0 | baseline | 683 | 1499 |
| crc32fast (this crate) | 1.0.0 | pclmulqdq | 140 | 7314 |
Due to the use of SIMD intrinsics for the optimized implementations, this crate contains some amount of unsafe code.
In order to ensure memory safety, the relevant code has been fuzz tested using libFuzzer (via cargo-fuzz) with millions of iterations in both debug and release build settings. You can inspect the test setup in the fuzz sub-directory, which also has instructions on how to run the tests yourself.
On top of that, every commit is tested using an address sanitizer in CI to catch any out of bounds memory accesses.
Even though neither fuzzing nor sanitization has revealed any safety bugs yet, please don't hesitate to file an issue if you run into any crashes or other unexpected behaviour.
std (default: enabled)This library supports being built without the Rust std library, which is useful for low-level use-cases such as embedded where no operating system is available. To build the crate in a no_std context, disable the default std feature.
Note: Because runtime CPU feature detection requires OS support, the specialized SIMD implementations will be unavailable when the std feature is disabled.
nightly (default: disabled)This feature flag enables unstable features that are only available on the nightly channel. Keep in mind that when enabling this feature flag, you
might experience breaking changes when updating compiler versions.
This project is licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
FAQs
Unknown package
We found that crc32fast demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Company News
Allow myself to introduce... myself.

Research
/Security News
A Twitch browser extension on Chrome and Firefox forwards users’ live OAuth session tokens through proxies controlled by a Russian bot service.

Security News
Anthropic found biased reasoning and recklessness drove Claude Mythos 5 to publish malware on PyPI and compromise a security vendor.