/rust/registry/src/index.crates.io-6f17d22bba15001f/sha1-0.10.6/src/compress.rs
Line | Count | Source (jump to first uncovered line) |
1 | | use crate::{Block, BlockSizeUser, Sha1Core}; |
2 | | use digest::typenum::Unsigned; |
3 | | |
4 | | cfg_if::cfg_if! { |
5 | | if #[cfg(feature = "force-soft")] { |
6 | | mod soft; |
7 | | use soft::compress as compress_inner; |
8 | | } else if #[cfg(all(feature = "asm", target_arch = "aarch64"))] { |
9 | | mod soft; |
10 | | mod aarch64; |
11 | | use aarch64::compress as compress_inner; |
12 | | } else if #[cfg(all(feature = "loongarch64_asm", target_arch = "loongarch64"))] { |
13 | | mod loongarch64_asm; |
14 | | use loongarch64_asm::compress as compress_inner; |
15 | | } else if #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] { |
16 | | #[cfg(not(feature = "asm"))] |
17 | | mod soft; |
18 | | #[cfg(feature = "asm")] |
19 | | mod soft { |
20 | | pub use sha1_asm::compress; |
21 | | } |
22 | | mod x86; |
23 | | use x86::compress as compress_inner; |
24 | | } else { |
25 | | mod soft; |
26 | | use soft::compress as compress_inner; |
27 | | } |
28 | | } |
29 | | |
30 | | const BLOCK_SIZE: usize = <Sha1Core as BlockSizeUser>::BlockSize::USIZE; |
31 | | |
32 | | /// SHA-1 compression function |
33 | | #[cfg_attr(docsrs, doc(cfg(feature = "compress")))] |
34 | 0 | pub fn compress(state: &mut [u32; 5], blocks: &[Block<Sha1Core>]) { |
35 | 0 | // SAFETY: GenericArray<u8, U64> and [u8; 64] have |
36 | 0 | // exactly the same memory layout |
37 | 0 | let blocks: &[[u8; BLOCK_SIZE]] = |
38 | 0 | unsafe { &*(blocks as *const _ as *const [[u8; BLOCK_SIZE]]) }; |
39 | 0 | compress_inner(state, blocks); |
40 | 0 | } |