Botan 3.11.1
Crypto and TLS for C&
Botan::Gf2AffineTransformation Class Referencefinal

#include <simd_hwaes.h>

Public Member Functions

SIMD_4x32 BOTAN_FN_ISA_HWAES affine_transform (SIMD_4x32 x) const
consteval Gf2AffineTransformation (uint64_t M, uint8_t c)

Static Public Member Functions

static consteval Gf2AffineTransformation post_inv_sbox (uint64_t M, uint8_t c)
static consteval Gf2AffineTransformation post_sbox (uint64_t M, uint8_t c)

Detailed Description

Lookup tables for GF(2) affine transformations

Definition at line 122 of file simd_hwaes.h.

Constructor & Destructor Documentation

◆ Gf2AffineTransformation()

Botan::Gf2AffineTransformation::Gf2AffineTransformation ( uint64_t M,
uint8_t c )
inlineconsteval

Definition at line 124 of file simd_hwaes.h.

124 : lo{}, hi{} {
125 for(size_t i = 0; i != 16; ++i) {
126 // Low nibble table includes the constant addition
127 const uint8_t lo_val = detail::gf2_mat_vec(M, static_cast<uint8_t>(i)) ^ c;
128 const uint8_t hi_val = detail::gf2_mat_vec(M, static_cast<uint8_t>(i << 4));
129
130 lo[i / 4] |= static_cast<uint32_t>(lo_val) << (8 * (i % 4));
131 hi[i / 4] |= static_cast<uint32_t>(hi_val) << (8 * (i % 4));
132 }
133 }
consteval uint8_t gf2_mat_vec(uint64_t M, uint8_t x)
Definition simd_hwaes.h:58

References Botan::detail::gf2_mat_vec().

Referenced by post_inv_sbox(), and post_sbox().

Member Function Documentation

◆ affine_transform()

SIMD_4x32 BOTAN_FN_ISA_HWAES Botan::Gf2AffineTransformation::affine_transform ( SIMD_4x32 x) const
inline

Definition at line 155 of file simd_hwaes.h.

155 {
156 const SIMD_4x32 tbl_lo(lo[0], lo[1], lo[2], lo[3]);
157 const SIMD_4x32 tbl_hi(hi[0], hi[1], hi[2], hi[3]);
158 const auto lo_mask = SIMD_4x32::splat_u8(0x0F);
159
160 return SIMD_4x32::byte_shuffle(tbl_lo, lo_mask & x) ^ SIMD_4x32::byte_shuffle(tbl_hi, lo_mask & x.shr<4>());
161 }
static SIMD_4x32 BOTAN_FN_ISA_SIMD_4X32 byte_shuffle(const SIMD_4x32 &tbl, const SIMD_4x32 &idx)
Definition simd_4x32.h:803
static SIMD_4x32 BOTAN_FN_ISA_SIMD_4X32 splat_u8(uint8_t B) noexcept
Definition simd_4x32.h:144

References Botan::SIMD_4x32::byte_shuffle(), Botan::SIMD_4x32::shr(), and Botan::SIMD_4x32::splat_u8().

◆ post_inv_sbox()

consteval Gf2AffineTransformation Botan::Gf2AffineTransformation::post_inv_sbox ( uint64_t M,
uint8_t c )
inlinestaticconsteval

Derive tables used for computing an affine transform after the application of an AES inverse sbox.

Definition at line 149 of file simd_hwaes.h.

149 {
150 const auto comb_mat = detail::gf2_mat_mul(detail::AES_AFF, M);
151 const auto comb_c = detail::gf2_mat_vec(detail::AES_AFF, static_cast<uint8_t>(c ^ detail::AES_C_INV));
152 return Gf2AffineTransformation(comb_mat, comb_c);
153 }
consteval Gf2AffineTransformation(uint64_t M, uint8_t c)
Definition simd_hwaes.h:124
constexpr uint64_t AES_AFF
Definition simd_hwaes.h:94
consteval uint64_t gf2_mat_mul(uint64_t A, uint64_t B)
Definition simd_hwaes.h:75
constexpr uint8_t AES_C_INV
Definition simd_hwaes.h:115

References Botan::detail::AES_AFF, Botan::detail::AES_C_INV, Botan::detail::gf2_mat_mul(), Botan::detail::gf2_mat_vec(), and Gf2AffineTransformation().

◆ post_sbox()

consteval Gf2AffineTransformation Botan::Gf2AffineTransformation::post_sbox ( uint64_t M,
uint8_t c )
inlinestaticconsteval

Derive tables used for computing an affine transform after the application of an AES sbox.

Definition at line 139 of file simd_hwaes.h.

139 {
140 const auto comb_M = detail::gf2_mat_mul(M, detail::AES_AFF_INV);
141 const auto comb_c = static_cast<uint8_t>(detail::gf2_mat_vec(comb_M, detail::AES_C) ^ c);
142 return Gf2AffineTransformation(comb_M, comb_c);
143 }
constexpr uint64_t AES_AFF_INV
Definition simd_hwaes.h:106
constexpr uint8_t AES_C
Definition simd_hwaes.h:103

References Botan::detail::AES_AFF_INV, Botan::detail::AES_C, Botan::detail::gf2_mat_mul(), Botan::detail::gf2_mat_vec(), and Gf2AffineTransformation().


The documentation for this class was generated from the following file: