Coverage Report

Created: 2026-08-05 07:37

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/sha2-0.11.0/src/sha512.rs
Line
Count
Source
1
cfg_if::cfg_if! {
2
    if #[cfg(any(sha2_backend = "soft", sha2_256_backend = "soft"))] {
3
        mod soft;
4
        use soft::compress;
5
    } else if #[cfg(any(sha2_backend = "riscv-zknh", sha2_256_backend = "riscv-zknh"))] {
6
        mod riscv_zknh;
7
8
        #[cfg(not(all(
9
            target_feature = "zknh",
10
            any(target_feature = "zbb", target_feature = "zbkb")
11
        )))]
12
        compile_error!("riscv-zknh backend requires zknh and zbkb (or zbb) target features");
13
14
        fn compress(state: &mut [u64; 8], blocks: &[[u8; 128]]) {
15
            // SAFETY: we checked above that the required target features are enabled
16
            unsafe { riscv_zknh::compress(state, blocks) }
17
        }
18
    } else if #[cfg(sha2_512_backend = "x86-avx2")] {
19
        mod x86_avx2;
20
21
        #[cfg(not(target_feature = "avx2"))]
22
        compile_error!("x86-avx2 backend requires avx2 target feature");
23
24
        fn compress(state: &mut [u32; 8], blocks: &[[u8; 64]]) {
25
            // SAFETY: we checked above that the required target features are enabled
26
            unsafe { x86_avx2::compress(state, blocks) }
27
        }
28
    } else if #[cfg(sha2_512_backend = "aarch64-sha3")]  {
29
        mod aarch64_sha3;
30
31
        #[cfg(not(target_feature = "sha3"))]
32
        compile_error!("aarch64-sha3 backend requires sha3 target feature");
33
34
        fn compress(state: &mut [u64; 8], blocks: &[[u8; 128]]) {
35
            // SAFETY: we checked above that the required target features are enabled
36
            unsafe { aarch64_sha3::compress(state, blocks) }
37
        }
38
    } else if #[cfg(target_arch = "loongarch64")] {
39
        mod loongarch64_asm;
40
        use loongarch64_asm::compress;
41
    } else if #[cfg(all(target_arch = "wasm32", target_feature = "simd128"))] {
42
        mod wasm32_simd128;
43
        use wasm32_simd128::compress;
44
    } else {
45
        mod soft;
46
47
        cfg_if::cfg_if! {
48
            if #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] {
49
                mod x86_avx2;
50
                cpufeatures::new!(avx2_cpuid, "avx2");
51
            } else if #[cfg(target_arch = "aarch64")] {
52
                mod aarch64_sha3;
53
                cpufeatures::new!(sha3_hwcap, "sha3");
54
            }
55
        }
56
57
0
        fn compress(state: &mut [u64; 8], blocks: &[[u8; 128]]) {
58
            cfg_if::cfg_if! {
59
                if #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] {
60
0
                    if avx2_cpuid::get() {
61
                        // SAFETY: we checked that required target features are available
62
0
                        return unsafe { x86_avx2::compress(state, blocks) };
63
0
                    }
64
                } else if #[cfg(target_arch = "aarch64")] {
65
                    if sha3_hwcap::get() {
66
                        // SAFETY: we checked that `sha3` target feature is available
67
                        return unsafe { aarch64_sha3::compress(state, blocks) };
68
                    }
69
                }
70
            }
71
72
0
            soft::compress(state, blocks);
73
0
        }
74
    }
75
}
76
77
/// Raw SHA-512 compression function.
78
///
79
/// This is a low-level "hazmat" API which provides direct access to the core
80
/// functionality of SHA-512.
81
0
pub fn compress512(state: &mut [u64; 8], blocks: &[[u8; 128]]) {
82
0
    compress(state, blocks)
83
0
}