8 #include <botan/noekeon_simd.h>
9 #include <botan/internal/simd_32.h>
16 #define NOK_SIMD_THETA(A0, A1, A2, A3, K0, K1, K2, K3) \
18 SIMD_32 T = A0 ^ A2; \
21 T_l8.rotate_left(8); \
22 T_r8.rotate_right(8); \
36 T_l8.rotate_left(8); \
37 T_r8.rotate_right(8); \
47 #define NOK_SIMD_GAMMA(A0, A1, A2, A3) \
70 SIMD_32 K0 = SIMD_32(EK[0]);
71 SIMD_32 K1 = SIMD_32(EK[1]);
72 SIMD_32 K2 = SIMD_32(EK[2]);
73 SIMD_32 K3 = SIMD_32(EK[3]);
82 SIMD_32::transpose(A0, A1, A2, A3);
84 for(
size_t i = 0; i != 16; ++i)
101 A0 ^= SIMD_32(
RC[16]);
104 SIMD_32::transpose(A0, A1, A2, A3);
107 A1.store_be(out + 16);
108 A2.store_be(out + 32);
109 A3.store_be(out + 48);
127 SIMD_32 K0 = SIMD_32(DK[0]);
128 SIMD_32 K1 = SIMD_32(DK[1]);
129 SIMD_32 K2 = SIMD_32(DK[2]);
130 SIMD_32 K3 = SIMD_32(DK[3]);
139 SIMD_32::transpose(A0, A1, A2, A3);
141 for(
size_t i = 0; i != 16; ++i)
145 A0 ^= SIMD_32(
RC[16-i]);
159 A0 ^= SIMD_32(
RC[0]);
161 SIMD_32::transpose(A0, A1, A2, A3);
164 A1.store_be(out + 16);
165 A2.store_be(out + 32);
166 A3.store_be(out + 48);
T load_be(const byte in[], size_t off)
void encrypt_n(const byte in[], byte out[], size_t blocks) const
void encrypt_n(const byte in[], byte out[], size_t blocks) const
#define NOK_SIMD_GAMMA(A0, A1, A2, A3)
const SecureVector< u32bit > & get_EK() const
#define NOK_SIMD_THETA(A0, A1, A2, A3, K0, K1, K2, K3)
void decrypt_n(const byte in[], byte out[], size_t blocks) const
void decrypt_n(const byte in[], byte out[], size_t blocks) const
const SecureVector< u32bit > & get_DK() const