7#include <botan/internal/aes.h> 
    9#include <botan/internal/isa_extn.h> 
   10#include <botan/internal/loadstor.h> 
   11#include <botan/internal/simd_avx2.h> 
   26   B = 
SIMD_8x32(_mm256_aesenc_epi128(B.raw(), K.raw()));
 
   31   B0 = 
SIMD_8x32(_mm256_aesenc_epi128(B0.raw(), K.raw()));
 
   32   B1 = 
SIMD_8x32(_mm256_aesenc_epi128(B1.raw(), K.raw()));
 
   33   B2 = 
SIMD_8x32(_mm256_aesenc_epi128(B2.raw(), K.raw()));
 
   34   B3 = 
SIMD_8x32(_mm256_aesenc_epi128(B3.raw(), K.raw()));
 
   38   B = 
SIMD_8x32(_mm256_aesenclast_epi128(B.raw(), K.raw()));
 
   43   B0 = 
SIMD_8x32(_mm256_aesenclast_epi128(B0.raw(), K.raw()));
 
   44   B1 = 
SIMD_8x32(_mm256_aesenclast_epi128(B1.raw(), K.raw()));
 
   45   B2 = 
SIMD_8x32(_mm256_aesenclast_epi128(B2.raw(), K.raw()));
 
   46   B3 = 
SIMD_8x32(_mm256_aesenclast_epi128(B3.raw(), K.raw()));
 
   50   B = 
SIMD_8x32(_mm256_aesdec_epi128(B.raw(), K.raw()));
 
   55   B0 = 
SIMD_8x32(_mm256_aesdec_epi128(B0.raw(), K.raw()));
 
   56   B1 = 
SIMD_8x32(_mm256_aesdec_epi128(B1.raw(), K.raw()));
 
   57   B2 = 
SIMD_8x32(_mm256_aesdec_epi128(B2.raw(), K.raw()));
 
   58   B3 = 
SIMD_8x32(_mm256_aesdec_epi128(B3.raw(), K.raw()));
 
   62   B = 
SIMD_8x32(_mm256_aesdeclast_epi128(B.raw(), K.raw()));
 
   67   B0 = 
SIMD_8x32(_mm256_aesdeclast_epi128(B0.raw(), K.raw()));
 
   68   B1 = 
SIMD_8x32(_mm256_aesdeclast_epi128(B1.raw(), K.raw()));
 
   69   B2 = 
SIMD_8x32(_mm256_aesdeclast_epi128(B2.raw(), K.raw()));
 
   70   B3 = 
SIMD_8x32(_mm256_aesdeclast_epi128(B3.raw(), K.raw()));
 
   78BOTAN_FN_ISA_AVX2_VAES 
void AES_128::x86_vaes_encrypt_n(
const uint8_t in[], uint8_t out[], 
size_t blocks)
 const {
 
   97      keyxor(K0, B0, B1, B2, B3);
 
   98      aesenc(K1, B0, B1, B2, B3);
 
   99      aesenc(K2, B0, B1, B2, B3);
 
  100      aesenc(K3, B0, B1, B2, B3);
 
  101      aesenc(K4, B0, B1, B2, B3);
 
  102      aesenc(K5, B0, B1, B2, B3);
 
  103      aesenc(K6, B0, B1, B2, B3);
 
  104      aesenc(K7, B0, B1, B2, B3);
 
  105      aesenc(K8, B0, B1, B2, B3);
 
  106      aesenc(K9, B0, B1, B2, B3);
 
  107      aesenclast(K10, B0, B1, B2, B3);
 
  110      B1.store_le(out + 16 * 2);
 
  111      B2.store_le(out + 16 * 4);
 
  112      B3.store_le(out + 16 * 6);
 
  163BOTAN_FN_ISA_AVX2_VAES 
void AES_128::x86_vaes_decrypt_n(
const uint8_t in[], uint8_t out[], 
size_t blocks)
 const {
 
  182      keyxor(K0, B0, B1, B2, B3);
 
  183      aesdec(K1, B0, B1, B2, B3);
 
  184      aesdec(K2, B0, B1, B2, B3);
 
  185      aesdec(K3, B0, B1, B2, B3);
 
  186      aesdec(K4, B0, B1, B2, B3);
 
  187      aesdec(K5, B0, B1, B2, B3);
 
  188      aesdec(K6, B0, B1, B2, B3);
 
  189      aesdec(K7, B0, B1, B2, B3);
 
  190      aesdec(K8, B0, B1, B2, B3);
 
  191      aesdec(K9, B0, B1, B2, B3);
 
  192      aesdeclast(K10, B0, B1, B2, B3);
 
  194      B0.store_le(out + 16 * 0);
 
  195      B1.store_le(out + 16 * 2);
 
  196      B2.store_le(out + 16 * 4);
 
  197      B3.store_le(out + 16 * 6);
 
  248BOTAN_FN_ISA_AVX2_VAES 
void AES_192::x86_vaes_encrypt_n(
const uint8_t in[], uint8_t out[], 
size_t blocks)
 const {
 
  269      keyxor(K0, B0, B1, B2, B3);
 
  270      aesenc(K1, B0, B1, B2, B3);
 
  271      aesenc(K2, B0, B1, B2, B3);
 
  272      aesenc(K3, B0, B1, B2, B3);
 
  273      aesenc(K4, B0, B1, B2, B3);
 
  274      aesenc(K5, B0, B1, B2, B3);
 
  275      aesenc(K6, B0, B1, B2, B3);
 
  276      aesenc(K7, B0, B1, B2, B3);
 
  277      aesenc(K8, B0, B1, B2, B3);
 
  278      aesenc(K9, B0, B1, B2, B3);
 
  279      aesenc(K10, B0, B1, B2, B3);
 
  280      aesenc(K11, B0, B1, B2, B3);
 
  281      aesenclast(K12, B0, B1, B2, B3);
 
  283      B0.store_le(out + 16 * 0);
 
  284      B1.store_le(out + 16 * 2);
 
  285      B2.store_le(out + 16 * 4);
 
  286      B3.store_le(out + 16 * 6);
 
  341BOTAN_FN_ISA_AVX2_VAES 
void AES_192::x86_vaes_decrypt_n(
const uint8_t in[], uint8_t out[], 
size_t blocks)
 const {
 
  362      keyxor(K0, B0, B1, B2, B3);
 
  363      aesdec(K1, B0, B1, B2, B3);
 
  364      aesdec(K2, B0, B1, B2, B3);
 
  365      aesdec(K3, B0, B1, B2, B3);
 
  366      aesdec(K4, B0, B1, B2, B3);
 
  367      aesdec(K5, B0, B1, B2, B3);
 
  368      aesdec(K6, B0, B1, B2, B3);
 
  369      aesdec(K7, B0, B1, B2, B3);
 
  370      aesdec(K8, B0, B1, B2, B3);
 
  371      aesdec(K9, B0, B1, B2, B3);
 
  372      aesdec(K10, B0, B1, B2, B3);
 
  373      aesdec(K11, B0, B1, B2, B3);
 
  374      aesdeclast(K12, B0, B1, B2, B3);
 
  376      B0.store_le(out + 16 * 0);
 
  377      B1.store_le(out + 16 * 2);
 
  378      B2.store_le(out + 16 * 4);
 
  379      B3.store_le(out + 16 * 6);
 
  431BOTAN_FN_ISA_AVX2_VAES 
void AES_256::x86_vaes_encrypt_n(
const uint8_t in[], uint8_t out[], 
size_t blocks)
 const {
 
  454      keyxor(K0, B0, B1, B2, B3);
 
  455      aesenc(K1, B0, B1, B2, B3);
 
  456      aesenc(K2, B0, B1, B2, B3);
 
  457      aesenc(K3, B0, B1, B2, B3);
 
  458      aesenc(K4, B0, B1, B2, B3);
 
  459      aesenc(K5, B0, B1, B2, B3);
 
  460      aesenc(K6, B0, B1, B2, B3);
 
  461      aesenc(K7, B0, B1, B2, B3);
 
  462      aesenc(K8, B0, B1, B2, B3);
 
  463      aesenc(K9, B0, B1, B2, B3);
 
  464      aesenc(K10, B0, B1, B2, B3);
 
  465      aesenc(K11, B0, B1, B2, B3);
 
  466      aesenc(K12, B0, B1, B2, B3);
 
  467      aesenc(K13, B0, B1, B2, B3);
 
  468      aesenclast(K14, B0, B1, B2, B3);
 
  470      B0.store_le(out + 16 * 0);
 
  471      B1.store_le(out + 16 * 2);
 
  472      B2.store_le(out + 16 * 4);
 
  473      B3.store_le(out + 16 * 6);
 
  532BOTAN_FN_ISA_AVX2_VAES 
void AES_256::x86_vaes_decrypt_n(
const uint8_t in[], uint8_t out[], 
size_t blocks)
 const {
 
  555      keyxor(K0, B0, B1, B2, B3);
 
  556      aesdec(K1, B0, B1, B2, B3);
 
  557      aesdec(K2, B0, B1, B2, B3);
 
  558      aesdec(K3, B0, B1, B2, B3);
 
  559      aesdec(K4, B0, B1, B2, B3);
 
  560      aesdec(K5, B0, B1, B2, B3);
 
  561      aesdec(K6, B0, B1, B2, B3);
 
  562      aesdec(K7, B0, B1, B2, B3);
 
  563      aesdec(K8, B0, B1, B2, B3);
 
  564      aesdec(K9, B0, B1, B2, B3);
 
  565      aesdec(K10, B0, B1, B2, B3);
 
  566      aesdec(K11, B0, B1, B2, B3);
 
  567      aesdec(K12, B0, B1, B2, B3);
 
  568      aesdec(K13, B0, B1, B2, B3);
 
  569      aesdeclast(K14, B0, B1, B2, B3);
 
  571      B0.store_le(out + 16 * 0);
 
  572      B1.store_le(out + 16 * 2);
 
  573      B2.store_le(out + 16 * 4);
 
  574      B3.store_le(out + 16 * 6);
 
static BOTAN_FN_ISA_AVX2 SIMD_8x32 load_le128(const uint8_t *in) noexcept
 
static BOTAN_FN_ISA_AVX2 SIMD_8x32 load_le(const uint8_t *in) noexcept
 
#define BOTAN_FORCE_INLINE