⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 salsa_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<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&gt;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&nbsp;<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 + -