native 0.0.1
Vectors, masks and wide register packs for C++26
Loading...
Searching...
No Matches
AES
Collaboration diagram for AES:

Functions

template<isa< x86 > Arch>
requires (Arch.has(x86_feature::aes))
constexpr simd< std::uint8_t, 16, Arch > native::aesenc (simd< std::uint8_t, 16, Arch > state, simd< std::uint8_t, 16, Arch > round_key) noexcept
 Apply ShiftRows, SubBytes, MixColumns and then AddRoundKey.
template<isa< x86 > Arch>
requires (Arch.has(x86_feature::aes))
constexpr simd< std::uint8_t, 16, Arch > native::aesenclast (simd< std::uint8_t, 16, Arch > state, simd< std::uint8_t, 16, Arch > round_key) noexcept
 Apply ShiftRows, SubBytes and then AddRoundKey for the final encryption round.
template<isa< x86 > Arch>
requires (Arch.has(x86_feature::aes))
constexpr simd< std::uint8_t, 16, Arch > native::aesdec (simd< std::uint8_t, 16, Arch > state, simd< std::uint8_t, 16, Arch > round_key) noexcept
 Apply inverse ShiftRows, inverse SubBytes, inverse MixColumns and then AddRoundKey.
template<isa< x86 > Arch>
requires (Arch.has(x86_feature::aes))
constexpr simd< std::uint8_t, 16, Arch > native::aesdeclast (simd< std::uint8_t, 16, Arch > state, simd< std::uint8_t, 16, Arch > round_key) noexcept
 Apply inverse ShiftRows, inverse SubBytes and then AddRoundKey for the final decryption round.
template<isa< x86 > Arch>
requires (Arch.has(x86_feature::aes))
constexpr simd< std::uint8_t, 16, Arch > native::aesimc (simd< std::uint8_t, 16, Arch > state) noexcept
 Apply inverse MixColumns to the four state columns.
template<isa< x86 > Arch, unsigned Imm8>
requires (Arch.has(x86_feature::aes) && Imm8 <= 255)
constexpr simd< std::uint8_t, 16, Arch > native::aeskeygenassist (simd< std::uint8_t, 16, Arch > state) noexcept
template<isa< x86 > Arch, class... Args>
void native::aesenc (Args...)=delete
 Reject mixed tags, wrong element types and implicit register conversions.
template<isa< x86 > Arch, class... Args>
void native::aesenclast (Args...)=delete
 Reject mixed tags, wrong element types and implicit register conversions.
template<isa< x86 > Arch, class... Args>
void native::aesdec (Args...)=delete
 Reject mixed tags, wrong element types and implicit register conversions.
template<isa< x86 > Arch, class... Args>
void native::aesdeclast (Args...)=delete
 Reject mixed tags, wrong element types and implicit register conversions.
template<isa< x86 > Arch, class... Args>
void native::aesimc (Args...)=delete
 Reject mixed tags, wrong element types and implicit register conversions.
template<isa< x86 > Arch, unsigned Imm8, class... Args>
void native::aeskeygenassist (Args...)=delete
 Reject mixed tags, wrong element types and implicit register conversions.

Detailed Description

AES-NI transformations of one 16-byte state in little-endian register order. Bytes 4 * column + row form the AES state matrix. Encryption and decryption rounds add the key last, unlike ARM AESE/AESD. AESDEC uses inverse-mixed intermediate round keys; AESDECLAST uses the original initial key. Each runtime operation requires AES; the SIMD storage requires SSE2. Arch records requirements; the caller must separately enable and admit its target. These integer operations do not modify floating-point status. Constant evaluation computes the same values. Feature-absent tags are accepted only at compile time and still require complete SIMD storage.

Function Documentation

◆ aeskeygenassist()

template<isa< x86 > Arch, unsigned Imm8>
requires (Arch.has(x86_feature::aes) && Imm8 <= 255)
simd< std::uint8_t, 16, Arch > native::aeskeygenassist ( simd< std::uint8_t, 16, Arch > state)
inlineconstexprexportnoexcept

Substitute the odd words and return their substituted and rotated forms with the round constant. Imm8 is an unsigned byte in [0,255], XORed into the rotated words.

Definition at line 136 of file native.x86.aes.ccm.

Here is the caller graph for this function: