| 190 | |
| 191 | #ifdef USE_SSE |
| 192 | void Rijndael::blockEncryptSSE(const byte *input,size_t numBlocks,byte *outBuffer) |
| 193 | { |
| 194 | __m128i v = _mm_loadu_si128((__m128i*)m_initVector); |
| 195 | __m128i *src=(__m128i*)input; |
| 196 | __m128i *dest=(__m128i*)outBuffer; |
| 197 | __m128i *rkey=(__m128i*)m_expandedKey; |
| 198 | while (numBlocks > 0) |
| 199 | { |
| 200 | __m128i d = _mm_loadu_si128(src++); |
| 201 | if (CBCMode) |
| 202 | v = _mm_xor_si128(v, d); |
| 203 | else |
| 204 | v = d; |
| 205 | __m128i r0 = _mm_loadu_si128(rkey); |
| 206 | v = _mm_xor_si128(v, r0); |
| 207 | |
| 208 | for (int i=1; i<m_uRounds; i++) |
| 209 | { |
| 210 | __m128i ri = _mm_loadu_si128(rkey + i); |
| 211 | v = _mm_aesenc_si128(v, ri); |
| 212 | } |
| 213 | |
| 214 | __m128i rl = _mm_loadu_si128(rkey + m_uRounds); |
| 215 | v = _mm_aesenclast_si128(v, rl); |
| 216 | _mm_storeu_si128(dest++,v); |
| 217 | numBlocks--; |
| 218 | } |
| 219 | _mm_storeu_si128((__m128i*)m_initVector,v); |
| 220 | } |
| 221 | #endif |
| 222 | |
| 223 |
nothing calls this directly
no outgoing calls
no test coverage detected