8#include <botan/shacal2.h>
9#include <botan/internal/simd_32.h>
16void SHACAL2_Fwd(
const SIMD_4x32& A,
const SIMD_4x32& B,
const SIMD_4x32& C, SIMD_4x32& D,
17 const SIMD_4x32& E,
const SIMD_4x32& F,
const SIMD_4x32& G, SIMD_4x32& H,
22 H += A.rho<2,13,22>() + ((A & B) | ((A | B) & C));
26void SHACAL2_Rev(
const SIMD_4x32& A,
const SIMD_4x32& B,
const SIMD_4x32& C, SIMD_4x32& D,
27 const SIMD_4x32& E,
const SIMD_4x32& F,
const SIMD_4x32& G, SIMD_4x32& H,
30 H -= A.rho<2,13,22>() + ((A & B) | ((A | B) & C));
37void SHACAL2::simd_encrypt_4(
const uint8_t in[], uint8_t out[])
const
52 for(
size_t r = 0; r != 64; r += 8)
54 SHACAL2_Fwd(A, B, C, D, E, F, G, H, m_RK[r+0]);
55 SHACAL2_Fwd(H, A, B, C, D, E, F, G, m_RK[r+1]);
56 SHACAL2_Fwd(G, H, A, B, C, D, E, F, m_RK[r+2]);
57 SHACAL2_Fwd(F, G, H, A, B, C, D, E, m_RK[r+3]);
58 SHACAL2_Fwd(E, F, G, H, A, B, C, D, m_RK[r+4]);
59 SHACAL2_Fwd(D, E, F, G, H, A, B, C, m_RK[r+5]);
60 SHACAL2_Fwd(C, D, E, F, G, H, A, B, m_RK[r+6]);
61 SHACAL2_Fwd(B, C, D, E, F, G, H, A, m_RK[r+7]);
78void SHACAL2::simd_decrypt_4(
const uint8_t in[], uint8_t out[])
const
93 for(
size_t r = 0; r != 64; r += 8)
95 SHACAL2_Rev(B, C, D, E, F, G, H, A, m_RK[63-r]);
96 SHACAL2_Rev(C, D, E, F, G, H, A, B, m_RK[62-r]);
97 SHACAL2_Rev(D, E, F, G, H, A, B, C, m_RK[61-r]);
98 SHACAL2_Rev(E, F, G, H, A, B, C, D, m_RK[60-r]);
99 SHACAL2_Rev(F, G, H, A, B, C, D, E, m_RK[59-r]);
100 SHACAL2_Rev(G, H, A, B, C, D, E, F, m_RK[58-r]);
101 SHACAL2_Rev(H, A, B, C, D, E, F, G, m_RK[57-r]);
102 SHACAL2_Rev(A, B, C, D, E, F, G, H, m_RK[56-r]);
static SIMD_4x32 splat(uint32_t B)
static void transpose(SIMD_4x32 &B0, SIMD_4x32 &B1, SIMD_4x32 &B2, SIMD_4x32 &B3)
static SIMD_4x32 load_be(const void *in)