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

Method blockEncryptSSE

Libraries/unrar/rijndael.cpp:192–220  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

190
191#ifdef USE_SSE
192void 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

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected