Coverage Report

Created: 2025-06-04 06:23

/rust/registry/src/index.crates.io-6f17d22bba15001f/aes-0.8.4/src/ni/utils.rs
Line
Count
Source (jump to first uncovered line)
1
//! Utility functions
2
3
// TODO(tarcieri): check performance impact / generated assembly changes
4
#![allow(clippy::needless_range_loop)]
5
6
use super::arch::*;
7
use crate::{Block, Block8};
8
9
pub type U128x8 = [__m128i; 8];
10
11
#[cfg(test)]
12
pub(crate) fn check(a: &[__m128i], b: &[[u64; 2]]) {
13
    for (v1, v2) in a.iter().zip(b) {
14
        let t1: [u64; 2] = unsafe { core::mem::transmute(*v1) };
15
        let t2 = [v2[0].to_be(), v2[1].to_be()];
16
        assert_eq!(t1, t2);
17
    }
18
}
19
20
#[inline(always)]
21
0
pub(crate) fn load8(blocks: *const Block8) -> U128x8 {
22
0
    unsafe {
23
0
        let p = blocks as *const Block;
24
0
        [
25
0
            _mm_loadu_si128(p.add(0) as *const __m128i),
26
0
            _mm_loadu_si128(p.add(1) as *const __m128i),
27
0
            _mm_loadu_si128(p.add(2) as *const __m128i),
28
0
            _mm_loadu_si128(p.add(3) as *const __m128i),
29
0
            _mm_loadu_si128(p.add(4) as *const __m128i),
30
0
            _mm_loadu_si128(p.add(5) as *const __m128i),
31
0
            _mm_loadu_si128(p.add(6) as *const __m128i),
32
0
            _mm_loadu_si128(p.add(7) as *const __m128i),
33
0
        ]
34
0
    }
35
0
}
36
37
#[inline(always)]
38
0
pub(crate) fn store8(blocks: *mut Block8, b: U128x8) {
39
0
    unsafe {
40
0
        let p = blocks as *mut Block;
41
0
        _mm_storeu_si128(p.add(0) as *mut __m128i, b[0]);
42
0
        _mm_storeu_si128(p.add(1) as *mut __m128i, b[1]);
43
0
        _mm_storeu_si128(p.add(2) as *mut __m128i, b[2]);
44
0
        _mm_storeu_si128(p.add(3) as *mut __m128i, b[3]);
45
0
        _mm_storeu_si128(p.add(4) as *mut __m128i, b[4]);
46
0
        _mm_storeu_si128(p.add(5) as *mut __m128i, b[5]);
47
0
        _mm_storeu_si128(p.add(6) as *mut __m128i, b[6]);
48
0
        _mm_storeu_si128(p.add(7) as *mut __m128i, b[7]);
49
0
    }
50
0
}
51
52
#[inline(always)]
53
0
pub(crate) fn xor8(b: &mut U128x8, key: __m128i) {
54
0
    unsafe {
55
0
        b[0] = _mm_xor_si128(b[0], key);
56
0
        b[1] = _mm_xor_si128(b[1], key);
57
0
        b[2] = _mm_xor_si128(b[2], key);
58
0
        b[3] = _mm_xor_si128(b[3], key);
59
0
        b[4] = _mm_xor_si128(b[4], key);
60
0
        b[5] = _mm_xor_si128(b[5], key);
61
0
        b[6] = _mm_xor_si128(b[6], key);
62
0
        b[7] = _mm_xor_si128(b[7], key);
63
0
    }
64
0
}
65
66
#[inline(always)]
67
0
pub(crate) fn aesenc8(buffer: &mut U128x8, key: __m128i) {
68
0
    for i in 0..8 {
69
0
        buffer[i] = unsafe { _mm_aesenc_si128(buffer[i], key) };
70
0
    }
71
0
}
72
73
#[inline(always)]
74
0
pub(crate) fn aesenclast8(buffer: &mut U128x8, key: __m128i) {
75
0
    for i in 0..8 {
76
0
        buffer[i] = unsafe { _mm_aesenclast_si128(buffer[i], key) };
77
0
    }
78
0
}
79
80
#[inline(always)]
81
0
pub(crate) fn aesdec8(buffer: &mut U128x8, key: __m128i) {
82
0
    for i in 0..8 {
83
0
        buffer[i] = unsafe { _mm_aesdec_si128(buffer[i], key) };
84
0
    }
85
0
}
86
87
#[inline(always)]
88
0
pub(crate) fn aesdeclast8(buffer: &mut U128x8, key: __m128i) {
89
0
    for i in 0..8 {
90
0
        buffer[i] = unsafe { _mm_aesdeclast_si128(buffer[i], key) };
91
0
    }
92
0
}