Coverage Report

Created: 2025-07-11 06:41

/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
}