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

📄 sosemanuk_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00544"></a>00544                 AS2(    movd    xmm0, [WORD_REG(ax)+1*4])<a name="l00545"></a>00545                 AS2(    pxor    xmm3, xmm0)<a name="l00546"></a>00546                 AS2(    movd    xmm0, [WORD_REG(ax)+2*4])<a name="l00547"></a>00547                 AS2(    pxor    xmm1, xmm0)<a name="l00548"></a>00548                 AS2(    movd    xmm0, [WORD_REG(ax)+3*4])<a name="l00549"></a>00549                 AS2(    pxor    xmm4, xmm0)<a name="l00550"></a>00550                 AS2(    <span class="keyword">add</span>             WORD_REG(ax), 16)<a name="l00551"></a>00551                 ASL(5)<a name="l00552"></a>00552                 AS2(    movd    [WORD_REG(bp)+0*4], xmm2)<a name="l00553"></a>00553                 AS2(    movd    [WORD_REG(bp)+1*4], xmm3)<a name="l00554"></a>00554                 AS2(    movd    [WORD_REG(bp)+2*4], xmm1)<a name="l00555"></a>00555                 AS2(    movd    [WORD_REG(bp)+3*4], xmm4)<a name="l00556"></a>00556                 AS2(    sub             WORD_REG(si), 4)<a name="l00557"></a>00557                 ASJ(    jz,             6, f)<a name="l00558"></a>00558                 AS2(    <span class="keyword">add</span>             WORD_REG(bp), 16)<a name="l00559"></a>00559                 AS2(    psrldq  xmm2, 4)<a name="l00560"></a>00560                 AS2(    psrldq  xmm3, 4)<a name="l00561"></a>00561                 AS2(    psrldq  xmm1, 4)<a name="l00562"></a>00562                 AS2(    psrldq  xmm4, 4)<a name="l00563"></a>00563                 ASJ(    jmp,    4, b)<a name="l00564"></a>00564 <a name="l00565"></a>00565                 ASL(6)  <span class="comment">// save state</span><a name="l00566"></a>00566                 AS2(    mov             WORD_REG(bx), SSE2_state)<a name="l00567"></a>00567                 AS2(    movdqa  xmm0, [SSE2_stateCopy+0*16])<a name="l00568"></a>00568                 AS2(    movdqa  [WORD_REG(bx)+0*16], xmm0)<a name="l00569"></a>00569                 AS2(    movdqa  xmm0, [SSE2_stateCopy+1*16])<a name="l00570"></a>00570                 AS2(    movdqa  [WORD_REG(bx)+1*16], xmm0)<a name="l00571"></a>00571                 AS2(    movq    xmm0, QWORD PTR [SSE2_stateCopy+2*16])<a name="l00572"></a>00572                 AS2(    movq    QWORD PTR [WORD_REG(bx)+2*16], xmm0)<a name="l00573"></a>00573                 AS2(    mov             [WORD_REG(bx)+10*4], ecx)<a name="l00574"></a>00574                 AS2(    mov             [WORD_REG(bx)+11*4], edx)<a name="l00575"></a>00575 <a name="l00576"></a>00576                 AS_POP(                 sp)<a name="l00577"></a>00577                 AS_POP(                 bp)<a name="l00578"></a>00578 <a name="l00579"></a>00579 <span class="preprocessor">#ifdef __GNUC__</span><a name="l00580"></a>00580 <span class="preprocessor"></span>                AS_POP(                 bx)<a name="l00581"></a>00581                 <span class="stringliteral">".att_syntax prefix;"</span><a name="l00582"></a>00582                         :<a name="l00583"></a>00583                         : <span class="stringliteral">"a"</span> (<a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>.<a class="code" href="class_sec_block.html#9b8182b17492ab3098087c17fc3ea40e">m_ptr</a>), <span class="stringliteral">"c"</span> (iterationCount), <span class="stringliteral">"S"</span> (s_mulTables), <span class="stringliteral">"D"</span> (output), <span class="stringliteral">"d"</span> (input)<a name="l00584"></a>00584                         : <span class="stringliteral">"memory"</span>, <span class="stringliteral">"cc"</span><a name="l00585"></a>00585                 );<a name="l00586"></a>00586 <span class="preprocessor">#endif</span><a name="l00587"></a>00587 <span class="preprocessor"></span>        }<a name="l00588"></a>00588         <span class="keywordflow">else</span><a name="l00589"></a>00589 <span class="preprocessor">#endif</span><a name="l00590"></a>00590 <span class="preprocessor"></span>        {<a name="l00591"></a>00591 <span class="preprocessor">#if CRYPTOPP_BOOL_X86 | CRYPTOPP_BOOL_X64</span><a name="l00592"></a>00592 <span class="preprocessor"></span><span class="preprocessor">#define MUL_A(x)    (x = rotlFixed(x, 8), x ^ s_mulTables[byte(x)])</span><a name="l00593"></a>00593 <span class="preprocessor"></span><span class="preprocessor">#else</span><a name="l00594"></a>00594 <span class="preprocessor"></span><span class="preprocessor">#define MUL_A(x)    (((x) &lt;&lt; 8) ^ s_mulTables[(x) &gt;&gt; 24])</span><a name="l00595"></a>00595 <span class="preprocessor"></span><span class="preprocessor">#endif</span><a name="l00596"></a>00596 <span class="preprocessor"></span><a name="l00597"></a>00597 <span class="preprocessor">#define DIV_A(x)    (((x) &gt;&gt; 8) ^ s_mulTables[256 + byte(x)])</span><a name="l00598"></a>00598 <span class="preprocessor"></span><a name="l00599"></a>00599 <span class="preprocessor">#define r1(i) ((i%2) ? reg2 : reg1)</span><a name="l00600"></a>00600 <span class="preprocessor"></span><span class="preprocessor">#define r2(i) ((i%2) ? reg1 : reg2)</span><a name="l00601"></a>00601 <span class="preprocessor"></span><a name="l00602"></a>00602 <span class="preprocessor">#define STEP(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, v, u)      \</span><a name="l00603"></a>00603 <span class="preprocessor">                u = (s##x9 + r2(x0)) ^ r1(x0);\</span><a name="l00604"></a>00604 <span class="preprocessor">                v = s##x0;\</span><a name="l00605"></a>00605 <span class="preprocessor">                s##x0 = MUL_A(s##x0) ^ DIV_A(s##x3) ^ s##x9;\</span><a name="l00606"></a>00606 <span class="preprocessor">                r1(x0) += XMUX(r2(x0), s##x2, s##x9);\</span><a name="l00607"></a>00607 <span class="preprocessor">                r2(x0) = rotlFixed(r2(x0) * 0x54655307, 7);\</span><a name="l00608"></a>00608 <span class="preprocessor"></span><a name="l00609"></a>00609 <span class="preprocessor"></span><span class="preprocessor">#define SOSEMANUK_OUTPUT(x)     \</span><a name="l00610"></a>00610 <span class="preprocessor">        CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 0, u2 ^ v0);\</span><a name="l00611"></a>00611 <span class="preprocessor">        CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 1, u3 ^ v1);\</span><a name="l00612"></a>00612 <span class="preprocessor">        CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 2, u1 ^ v2);\</span><a name="l00613"></a>00613 <span class="preprocessor">        CRYPTOPP_KEYSTREAM_OUTPUT_WORD(x, LITTLE_ENDIAN_ORDER, 3, u4 ^ v3);</span><a name="l00614"></a>00614 <span class="preprocessor"></span><a name="l00615"></a>00615 <span class="preprocessor">#define OUTPUT4 \</span><a name="l00616"></a>00616 <span class="preprocessor">        S2(0, u0, u1, u2, u3, u4);\</span><a name="l00617"></a>00617 <span class="preprocessor">        CRYPTOPP_KEYSTREAM_OUTPUT_SWITCH(SOSEMANUK_OUTPUT, 4*4);</span><a name="l00618"></a>00618 <span class="preprocessor"></span><a name="l00619"></a>00619         word32 s0 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[0];<a name="l00620"></a>00620         word32 s1 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[1];<a name="l00621"></a>00621         word32 s2 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[2];<a name="l00622"></a>00622         word32 s3 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[3];<a name="l00623"></a>00623         word32 s4 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[4];<a name="l00624"></a>00624         word32 s5 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[5];<a name="l00625"></a>00625         word32 s6 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[6];<a name="l00626"></a>00626         word32 s7 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[7];<a name="l00627"></a>00627         word32 s8 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[8];<a name="l00628"></a>00628         word32 s9 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[9];<a name="l00629"></a>00629         word32 reg1 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[10];<a name="l00630"></a>00630         word32 reg2 = <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[11];<a name="l00631"></a>00631         word32 u0, u1, u2, u3, u4, v0, v1, v2, v3;<a name="l00632"></a>00632 <a name="l00633"></a>00633         <span class="keywordflow">do</span><a name="l00634"></a>00634         {<a name="l00635"></a>00635                 STEP(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, v0, u0)<a name="l00636"></a>00636                 STEP(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, v1, u1)<a name="l00637"></a>00637                 STEP(2, 3, 4, 5, 6, 7, 8, 9, 0, 1, v2, u2)<a name="l00638"></a>00638                 STEP(3, 4, 5, 6, 7, 8, 9, 0, 1, 2, v3, u3)<a name="l00639"></a>00639                 OUTPUT4<a name="l00640"></a>00640                 STEP(4, 5, 6, 7, 8, 9, 0, 1, 2, 3, v0, u0)<a name="l00641"></a>00641                 STEP(5, 6, 7, 8, 9, 0, 1, 2, 3, 4, v1, u1)<a name="l00642"></a>00642                 STEP(6, 7, 8, 9, 0, 1, 2, 3, 4, 5, v2, u2)<a name="l00643"></a>00643                 STEP(7, 8, 9, 0, 1, 2, 3, 4, 5, 6, v3, u3)<a name="l00644"></a>00644                 OUTPUT4<a name="l00645"></a>00645                 STEP(8, 9, 0, 1, 2, 3, 4, 5, 6, 7, v0, u0)<a name="l00646"></a>00646                 STEP(9, 0, 1, 2, 3, 4, 5, 6, 7, 8, v1, u1)<a name="l00647"></a>00647                 STEP(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, v2, u2)<a name="l00648"></a>00648                 STEP(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, v3, u3)<a name="l00649"></a>00649                 OUTPUT4<a name="l00650"></a>00650                 STEP(2, 3, 4, 5, 6, 7, 8, 9, 0, 1, v0, u0)<a name="l00651"></a>00651                 STEP(3, 4, 5, 6, 7, 8, 9, 0, 1, 2, v1, u1)<a name="l00652"></a>00652                 STEP(4, 5, 6, 7, 8, 9, 0, 1, 2, 3, v2, u2)<a name="l00653"></a>00653                 STEP(5, 6, 7, 8, 9, 0, 1, 2, 3, 4, v3, u3)<a name="l00654"></a>00654                 OUTPUT4<a name="l00655"></a>00655                 STEP(6, 7, 8, 9, 0, 1, 2, 3, 4, 5, v0, u0)<a name="l00656"></a>00656                 STEP(7, 8, 9, 0, 1, 2, 3, 4, 5, 6, v1, u1)<a name="l00657"></a>00657                 STEP(8, 9, 0, 1, 2, 3, 4, 5, 6, 7, v2, u2)<a name="l00658"></a>00658                 STEP(9, 0, 1, 2, 3, 4, 5, 6, 7, 8, v3, u3)<a name="l00659"></a>00659                 OUTPUT4<a name="l00660"></a>00660         }<a name="l00661"></a>00661         <span class="keywordflow">while</span> (--iterationCount);<a name="l00662"></a>00662 <a name="l00663"></a>00663         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[0] = s0;<a name="l00664"></a>00664         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[1] = s1;<a name="l00665"></a>00665         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[2] = s2;<a name="l00666"></a>00666         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[3] = s3;<a name="l00667"></a>00667         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[4] = s4;<a name="l00668"></a>00668         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[5] = s5;<a name="l00669"></a>00669         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[6] = s6;<a name="l00670"></a>00670         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[7] = s7;<a name="l00671"></a>00671         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[8] = s8;<a name="l00672"></a>00672         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[9] = s9;<a name="l00673"></a>00673         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[10] = reg1;<a name="l00674"></a>00674         <a class="code" href="class_sosemanuk_policy.html#996c06115c9de685f45a11789d3f3b76">m_state</a>[11] = reg2;<a name="l00675"></a>00675         }<a name="l00676"></a>00676 }<a name="l00677"></a>00677 <a name="l00678"></a>00678 NAMESPACE_END</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:25 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 + -