crc/lib.rs
1//! # crc
2//! Rust implementation of CRC(16, 32, 64)
3//!
4//! ## Usage
5//! ### Compute CRC16
6//! ```rust
7//! use crc::{crc16, Hasher16};
8//!
9//! assert_eq!(crc16::checksum_x25(b"123456789"), 0x906e);
10//! assert_eq!(crc16::checksum_usb(b"123456789"), 0xb4c8);
11//!
12//! // use provided or custom polynomial
13//! let mut digest = crc16::Digest::new(crc16::X25);
14//! digest.write(b"123456789");
15//! assert_eq!(digest.sum16(), 0x906e);
16//!
17//! // with initial
18//! let mut digest = crc16::Digest::new_with_initial(crc16::X25, 0u16);
19//! digest.write(b"123456789");
20//! assert_eq!(digest.sum16(), 0x906e);
21//! ```
22//!
23//! ### Compute CRC32
24//! ```rust
25//! use crc::{crc32, Hasher32};
26//!
27//! // CRC-32-IEEE being the most commonly used one
28//! assert_eq!(crc32::checksum_ieee(b"123456789"), 0xcbf43926);
29//! assert_eq!(crc32::checksum_castagnoli(b"123456789"), 0xe3069283);
30//! assert_eq!(crc32::checksum_koopman(b"123456789"), 0x2d3dd0ae);
31//!
32//! // use provided or custom polynomial
33//! let mut digest = crc32::Digest::new(crc32::IEEE);
34//! digest.write(b"123456789");
35//! assert_eq!(digest.sum32(), 0xcbf43926);
36//!
37//! // with initial
38//! let mut digest = crc32::Digest::new_with_initial(crc32::IEEE, 0u32);
39//! digest.write(b"123456789");
40//! assert_eq!(digest.sum32(), 0xcbf43926);
41//! ```
42//!
43//! ### Compute CRC64
44//! ```rust
45//! use crc::{crc64, Hasher64};
46//!
47//! assert_eq!(crc64::checksum_ecma(b"123456789"), 0x995dc9bbdf1939fa);
48//! assert_eq!(crc64::checksum_iso(b"123456789"), 0xb90956c775a41001);
49//!
50//! // use provided or custom polynomial
51//! let mut digest = crc64::Digest::new(crc64::ECMA);
52//! digest.write(b"123456789");
53//! assert_eq!(digest.sum64(), 0x995dc9bbdf1939fa);
54//!
55//! // with initial
56//! let mut digest = crc64::Digest::new_with_initial(crc64::ECMA, 0u64);
57//! digest.write(b"123456789");
58//! assert_eq!(digest.sum64(), 0x995dc9bbdf1939fa);
59//! ```
60
61#![cfg_attr(not(feature = "std"), no_std)]
62
63pub mod crc16;
64pub mod crc32;
65pub mod crc64;
66mod util;
67
68pub use self::crc16::Hasher16;
69pub use self::crc32::Hasher32;
70pub use self::crc64::Hasher64;