Botan 2.19.3
Crypto and TLS for C&
Namespaces | Macros
sha1_sse2.cpp File Reference
#include <botan/sha160.h>
#include <botan/rotate.h>
#include <emmintrin.h>

Go to the source code of this file.

Namespaces

namespace  Botan
 
namespace  Botan::SHA1_SSE2_F
 

Macros

#define GET_P_32(P, i)   P.u32[i]
 
#define prep(prep, XW0, XW1, XW2, XW3, K)
 
#define prep00_15(P, W)
 

Macro Definition Documentation

◆ GET_P_32

#define GET_P_32 (   P,
 
)    P.u32[i]

◆ prep

#define prep (   prep,
  XW0,
  XW1,
  XW2,
  XW3,
 
)

Definition at line 79 of file sha1_sse2.cpp.

80 { \
81 __m128i r0, r1, r2, r3; \
82 \
83 /* load W[t-4] 16-byte aligned, and shift */ \
84 r3 = _mm_srli_si128((XW3), 4); \
85 r0 = (XW0); \
86 /* get high 64-bits of XW0 into low 64-bits */ \
87 r1 = _mm_shuffle_epi32((XW0), _MM_SHUFFLE(1,0,3,2)); \
88 /* load high 64-bits of r1 */ \
89 r1 = _mm_unpacklo_epi64(r1, (XW1)); \
90 r2 = (XW2); \
91 \
92 r0 = _mm_xor_si128(r1, r0); \
93 r2 = _mm_xor_si128(r3, r2); \
94 r0 = _mm_xor_si128(r2, r0); \
95 /* unrotated W[t]..W[t+2] in r0 ... still need W[t+3] */ \
96 \
97 r2 = _mm_slli_si128(r0, 12); \
98 r1 = _mm_cmplt_epi32(r0, _mm_setzero_si128()); \
99 r0 = _mm_add_epi32(r0, r0); /* shift left by 1 */ \
100 r0 = _mm_sub_epi32(r0, r1); /* r0 has W[t]..W[t+2] */ \
101 \
102 r3 = _mm_srli_epi32(r2, 30); \
103 r2 = _mm_slli_epi32(r2, 2); \
104 \
105 r0 = _mm_xor_si128(r0, r3); \
106 r0 = _mm_xor_si128(r0, r2); /* r0 now has W[t+3] */ \
107 \
108 (XW0) = r0; \
109 (prep).u128 = _mm_add_epi32(r0, K); \
110 } while(0)
#define prep(prep, XW0, XW1, XW2, XW3, K)
Definition sha1_sse2.cpp:79

◆ prep00_15

#define prep00_15 (   P,
 
)
Value:
do { \
W = _mm_shufflehi_epi16(W, _MM_SHUFFLE(2, 3, 0, 1)); \
W = _mm_shufflelo_epi16(W, _MM_SHUFFLE(2, 3, 0, 1)); \
W = _mm_or_si128(_mm_slli_epi16(W, 8), \
_mm_srli_epi16(W, 8)); \
P.u128 = _mm_add_epi32(W, K00_19); \
} while(0)

Definition at line 25 of file sha1_sse2.cpp.

26 { \
27 W = _mm_shufflehi_epi16(W, _MM_SHUFFLE(2, 3, 0, 1)); \
28 W = _mm_shufflelo_epi16(W, _MM_SHUFFLE(2, 3, 0, 1)); \
29 W = _mm_or_si128(_mm_slli_epi16(W, 8), \
30 _mm_srli_epi16(W, 8)); \
31 P.u128 = _mm_add_epi32(W, K00_19); \
32 } while(0)