1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
//! # crc //! Rust implementation of CRC(16, 32, 64) //! //! ## Usage //! ### Compute CRC16 //! ```rust //! use crc::{Crc, Algorithm, CRC_16_IBM_SDLC, CRC_32_ISCSI}; //! //! pub const X25: Crc<u16> = Crc::<u16>::new(&CRC_16_IBM_SDLC); //! pub const CASTAGNOLI: Crc<u32> = Crc::<u32>::new(&CRC_32_ISCSI); //! //! assert_eq!(X25.checksum(b"123456789"), 0x906e); //! assert_eq!(CASTAGNOLI.checksum(b"123456789"), 0xe3069283); //! //! // use custom algorithm //! const CUSTOM_ALG: Algorithm<u16> = Algorithm { //! poly: 0x8005, //! init: 0xffff, //! refin: false, //! refout: false, //! xorout: 0x0000, //! check: 0xaee7, //! residue: 0x0000 //! }; //! let crc = Crc::<u16>::new(&CUSTOM_ALG); //! let mut digest = crc.digest(); //! digest.update(b"123456789"); //! assert_eq!(digest.finalize(), 0xaee7); //! ``` #![no_std] #![forbid(unsafe_code)] pub use crc_catalog::*; mod crc16; mod crc32; mod crc64; mod table; mod util; pub struct Crc<W: Width> { pub algorithm: &'static Algorithm<W>, table: [W; 256], } pub struct Digest<'a, W: Width> { crc: &'a Crc<W>, value: W, }