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
#define NOK_SIMD_GAMMA(A0, A1, A2, A3)
void encrypt_n(const byte in[], byte out[], size_t blocks) 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
const SecureVector< u32bit > & get_EK() const