|
native 0.0.1
Vectors, masks and wide register packs for C++26
|
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. | |
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.
|
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.