📄 salsa_8cpp-source.html
字号:
<a name="l00224"></a>00224 <a name="l00225"></a>00225 x1 = _mm_shuffle_epi32(x1, _MM_SHUFFLE(2, 1, 0, 3));<a name="l00226"></a>00226 x2 = _mm_shuffle_epi32(x2, _MM_SHUFFLE(1, 0, 3, 2));<a name="l00227"></a>00227 x3 = _mm_shuffle_epi32(x3, _MM_SHUFFLE(0, 3, 2, 1));<a name="l00228"></a>00228 <a name="l00229"></a>00229 SSE2_QUARTER_ROUND(x0, x3, x1, 7)<a name="l00230"></a>00230 SSE2_QUARTER_ROUND(x3, x2, x0, 9)<a name="l00231"></a>00231 SSE2_QUARTER_ROUND(x2, x1, x3, 13)<a name="l00232"></a>00232 SSE2_QUARTER_ROUND(x1, x0, x2, 18)<a name="l00233"></a>00233 <a name="l00234"></a>00234 x1 = _mm_shuffle_epi32(x1, _MM_SHUFFLE(0, 3, 2, 1));<a name="l00235"></a>00235 x2 = _mm_shuffle_epi32(x2, _MM_SHUFFLE(1, 0, 3, 2));<a name="l00236"></a>00236 x3 = _mm_shuffle_epi32(x3, _MM_SHUFFLE(2, 1, 0, 3));<a name="l00237"></a>00237 }<a name="l00238"></a>00238 <a name="l00239"></a>00239 x0 = _mm_add_epi32(x0, s[0]);<a name="l00240"></a>00240 x1 = _mm_add_epi32(x1, s[1]);<a name="l00241"></a>00241 x2 = _mm_add_epi32(x2, s[2]);<a name="l00242"></a>00242 x3 = _mm_add_epi32(x3, s[3]);<a name="l00243"></a>00243 <a name="l00244"></a>00244 <span class="keywordflow">if</span> (++m_state[8] == 0)<a name="l00245"></a>00245 ++m_state[5];<a name="l00246"></a>00246 <a name="l00247"></a>00247 __m128i k02 = _mm_or_si128(_mm_slli_epi64(x0, 32), _mm_srli_epi64(x3, 32));<a name="l00248"></a>00248 k02 = _mm_shuffle_epi32(k02, _MM_SHUFFLE(0, 1, 2, 3));<a name="l00249"></a>00249 __m128i k13 = _mm_or_si128(_mm_slli_epi64(x1, 32), _mm_srli_epi64(x0, 32));<a name="l00250"></a>00250 k13 = _mm_shuffle_epi32(k13, _MM_SHUFFLE(0, 1, 2, 3));<a name="l00251"></a>00251 __m128i k20 = _mm_or_si128(_mm_and_si128(x2, s_maskLo32), _mm_and_si128(x1, s_maskHi32));<a name="l00252"></a>00252 __m128i k31 = _mm_or_si128(_mm_and_si128(x3, s_maskLo32), _mm_and_si128(x2, s_maskHi32));<a name="l00253"></a>00253 <a name="l00254"></a>00254 __m128i k0 = _mm_unpackhi_epi64(k02, k20);<a name="l00255"></a>00255 __m128i k1 = _mm_unpackhi_epi64(k13, k31);<a name="l00256"></a>00256 __m128i k2 = _mm_unpacklo_epi64(k20, k02);<a name="l00257"></a>00257 __m128i k3 = _mm_unpacklo_epi64(k31, k13);<a name="l00258"></a>00258 <a name="l00259"></a>00259 <span class="preprocessor"> #define SSE2_OUTPUT(x) {\</span><a name="l00260"></a>00260 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_XMM(x, 0, k0)\</span><a name="l00261"></a>00261 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_XMM(x, 1, k1)\</span><a name="l00262"></a>00262 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_XMM(x, 2, k2)\</span><a name="l00263"></a>00263 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_XMM(x, 3, k3)}</span><a name="l00264"></a>00264 <span class="preprocessor"></span><a name="l00265"></a>00265 <a class="code" href="strciphr_8h.html#4f82514b5ab874259ac783ff9b96c4e5">CRYPTOPP_KEYSTREAM_OUTPUT_SWITCH</a>(SSE2_OUTPUT, <a class="code" href="struct_additive_cipher_concrete_policy.html#0c584b68c2f3a8208ff245cd8d09fcd5">BYTES_PER_ITERATION</a>);<a name="l00266"></a>00266 }<a name="l00267"></a>00267 }<a name="l00268"></a>00268 <span class="preprocessor">#endif</span><a name="l00269"></a>00269 <span class="preprocessor"></span><a name="l00270"></a>00270 word32 x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15;<a name="l00271"></a>00271 <a name="l00272"></a>00272 <span class="keywordflow">while</span> (iterationCount--)<a name="l00273"></a>00273 {<a name="l00274"></a>00274 x0 = m_state[0];<a name="l00275"></a>00275 x1 = m_state[1];<a name="l00276"></a>00276 x2 = m_state[2];<a name="l00277"></a>00277 x3 = m_state[3];<a name="l00278"></a>00278 x4 = m_state[4];<a name="l00279"></a>00279 x5 = m_state[5];<a name="l00280"></a>00280 x6 = m_state[6];<a name="l00281"></a>00281 x7 = m_state[7];<a name="l00282"></a>00282 x8 = m_state[8];<a name="l00283"></a>00283 x9 = m_state[9];<a name="l00284"></a>00284 x10 = m_state[10];<a name="l00285"></a>00285 x11 = m_state[11];<a name="l00286"></a>00286 x12 = m_state[12];<a name="l00287"></a>00287 x13 = m_state[13];<a name="l00288"></a>00288 x14 = m_state[14];<a name="l00289"></a>00289 x15 = m_state[15];<a name="l00290"></a>00290 <a name="l00291"></a>00291 <span class="keywordflow">for</span> (i=m_rounds; i>0; i-=2)<a name="l00292"></a>00292 {<a name="l00293"></a>00293 #define QUARTER_ROUND(a, b, c, d) \<a name="l00294"></a>00294 b = b ^ rotlFixed(a + d, 7); \<a name="l00295"></a>00295 c = c ^ rotlFixed(b + a, 9); \<a name="l00296"></a>00296 d = d ^ rotlFixed(c + b, 13); \<a name="l00297"></a>00297 a = a ^ rotlFixed(d + c, 18);<a name="l00298"></a>00298 <a name="l00299"></a>00299 QUARTER_ROUND(x0, x4, x8, x12)<a name="l00300"></a>00300 QUARTER_ROUND(x1, x5, x9, x13)<a name="l00301"></a>00301 QUARTER_ROUND(x2, x6, x10, x14)<a name="l00302"></a>00302 QUARTER_ROUND(x3, x7, x11, x15)<a name="l00303"></a>00303 <a name="l00304"></a>00304 QUARTER_ROUND(x0, x13, x10, x7)<a name="l00305"></a>00305 QUARTER_ROUND(x1, x14, x11, x4)<a name="l00306"></a>00306 QUARTER_ROUND(x2, x15, x8, x5)<a name="l00307"></a>00307 QUARTER_ROUND(x3, x12, x9, x6)<a name="l00308"></a>00308 }<a name="l00309"></a>00309 <a name="l00310"></a>00310 <span class="preprocessor"> #define SALSA_OUTPUT(x) {\</span><a name="l00311"></a>00311 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 0, x0 + m_state[0]);\</span><a name="l00312"></a>00312 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 1, x13 + m_state[13]);\</span><a name="l00313"></a>00313 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 2, x10 + m_state[10]);\</span><a name="l00314"></a>00314 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 3, x7 + m_state[7]);\</span><a name="l00315"></a>00315 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 4, x4 + m_state[4]);\</span><a name="l00316"></a>00316 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 5, x1 + m_state[1]);\</span><a name="l00317"></a>00317 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 6, x14 + m_state[14]);\</span><a name="l00318"></a>00318 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 7, x11 + m_state[11]);\</span><a name="l00319"></a>00319 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 8, x8 + m_state[8]);\</span><a name="l00320"></a>00320 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 9, x5 + m_state[5]);\</span><a name="l00321"></a>00321 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 10, x2 + m_state[2]);\</span><a name="l00322"></a>00322 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 11, x15 + m_state[15]);\</span><a name="l00323"></a>00323 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 12, x12 + m_state[12]);\</span><a name="l00324"></a>00324 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 13, x9 + m_state[9]);\</span><a name="l00325"></a>00325 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 14, x6 + m_state[6]);\</span><a name="l00326"></a>00326 <span class="preprocessor"> CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 15, x3 + m_state[3]);}</span><a name="l00327"></a>00327 <span class="preprocessor"></span><a name="l00328"></a>00328 <span class="preprocessor">#ifndef CRYPTOPP_DOXYGEN_PROCESSING</span><a name="l00329"></a>00329 <span class="preprocessor"></span> <a class="code" href="strciphr_8h.html#4f82514b5ab874259ac783ff9b96c4e5">CRYPTOPP_KEYSTREAM_OUTPUT_SWITCH</a>(SALSA_OUTPUT, <a class="code" href="struct_additive_cipher_concrete_policy.html#0c584b68c2f3a8208ff245cd8d09fcd5">BYTES_PER_ITERATION</a>);<a name="l00330"></a>00330 <span class="preprocessor">#endif</span><a name="l00331"></a>00331 <span class="preprocessor"></span><a name="l00332"></a>00332 <span class="keywordflow">if</span> (++m_state[8] == 0)<a name="l00333"></a>00333 ++m_state[5];<a name="l00334"></a>00334 }<a name="l00335"></a>00335 } <span class="comment">// see comment above if an internal compiler error occurs here</span><a name="l00336"></a>00336 <a name="l00337"></a>00337 NAMESPACE_END</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:24 2007 for Crypto++ by <a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.2 </small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -