MCPcopy Create free account
hub / github.com/abbeycode/UnrarKit / blockDecryptSSE

Method blockDecryptSSE

Libraries/unrar/rijndael.cpp:295–323  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

293
294#ifdef USE_SSE
295void Rijndael::blockDecryptSSE(const byte *input, size_t numBlocks, byte *outBuffer)
296{
297 __m128i initVector = _mm_loadu_si128((__m128i*)m_initVector);
298 __m128i *src=(__m128i*)input;
299 __m128i *dest=(__m128i*)outBuffer;
300 __m128i *rkey=(__m128i*)m_expandedKey;
301 while (numBlocks > 0)
302 {
303 __m128i rl = _mm_loadu_si128(rkey + m_uRounds);
304 __m128i d = _mm_loadu_si128(src++);
305 __m128i v = _mm_xor_si128(rl, d);
306
307 for (int i=m_uRounds-1; i>0; i--)
308 {
309 __m128i ri = _mm_loadu_si128(rkey + i);
310 v = _mm_aesdec_si128(v, ri);
311 }
312
313 __m128i r0 = _mm_loadu_si128(rkey);
314 v = _mm_aesdeclast_si128(v, r0);
315
316 if (CBCMode)
317 v = _mm_xor_si128(v, initVector);
318 initVector = d;
319 _mm_storeu_si128(dest++,v);
320 numBlocks--;
321 }
322 _mm_storeu_si128((__m128i*)m_initVector,initVector);
323}
324#endif
325
326

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected