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

📄 sha_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 4 页
字号:
<a name="l00270"></a>00270         W64LIT(0xb5c0fbcfec4d3b2f), W64LIT(0xe9b5dba58189dbbc),<a name="l00271"></a>00271         W64LIT(0x3956c25bf348b538), W64LIT(0x59f111f1b605d019),<a name="l00272"></a>00272         W64LIT(0x923f82a4af194f9b), W64LIT(0xab1c5ed5da6d8118),<a name="l00273"></a>00273         W64LIT(0xd807aa98a3030242), W64LIT(0x12835b0145706fbe),<a name="l00274"></a>00274         W64LIT(0x243185be4ee4b28c), W64LIT(0x550c7dc3d5ffb4e2),<a name="l00275"></a>00275         W64LIT(0x72be5d74f27b896f), W64LIT(0x80deb1fe3b1696b1),<a name="l00276"></a>00276         W64LIT(0x9bdc06a725c71235), W64LIT(0xc19bf174cf692694),<a name="l00277"></a>00277         W64LIT(0xe49b69c19ef14ad2), W64LIT(0xefbe4786384f25e3),<a name="l00278"></a>00278         W64LIT(0x0fc19dc68b8cd5b5), W64LIT(0x240ca1cc77ac9c65),<a name="l00279"></a>00279         W64LIT(0x2de92c6f592b0275), W64LIT(0x4a7484aa6ea6e483),<a name="l00280"></a>00280         W64LIT(0x5cb0a9dcbd41fbd4), W64LIT(0x76f988da831153b5),<a name="l00281"></a>00281         W64LIT(0x983e5152ee66dfab), W64LIT(0xa831c66d2db43210),<a name="l00282"></a>00282         W64LIT(0xb00327c898fb213f), W64LIT(0xbf597fc7beef0ee4),<a name="l00283"></a>00283         W64LIT(0xc6e00bf33da88fc2), W64LIT(0xd5a79147930aa725),<a name="l00284"></a>00284         W64LIT(0x06ca6351e003826f), W64LIT(0x142929670a0e6e70),<a name="l00285"></a>00285         W64LIT(0x27b70a8546d22ffc), W64LIT(0x2e1b21385c26c926),<a name="l00286"></a>00286         W64LIT(0x4d2c6dfc5ac42aed), W64LIT(0x53380d139d95b3df),<a name="l00287"></a>00287         W64LIT(0x650a73548baf63de), W64LIT(0x766a0abb3c77b2a8),<a name="l00288"></a>00288         W64LIT(0x81c2c92e47edaee6), W64LIT(0x92722c851482353b),<a name="l00289"></a>00289         W64LIT(0xa2bfe8a14cf10364), W64LIT(0xa81a664bbc423001),<a name="l00290"></a>00290         W64LIT(0xc24b8b70d0f89791), W64LIT(0xc76c51a30654be30),<a name="l00291"></a>00291         W64LIT(0xd192e819d6ef5218), W64LIT(0xd69906245565a910),<a name="l00292"></a>00292         W64LIT(0xf40e35855771202a), W64LIT(0x106aa07032bbd1b8),<a name="l00293"></a>00293         W64LIT(0x19a4c116b8d2d0c8), W64LIT(0x1e376c085141ab53),<a name="l00294"></a>00294         W64LIT(0x2748774cdf8eeb99), W64LIT(0x34b0bcb5e19b48a8),<a name="l00295"></a>00295         W64LIT(0x391c0cb3c5c95a63), W64LIT(0x4ed8aa4ae3418acb),<a name="l00296"></a>00296         W64LIT(0x5b9cca4f7763e373), W64LIT(0x682e6ff3d6b2b8a3),<a name="l00297"></a>00297         W64LIT(0x748f82ee5defb2fc), W64LIT(0x78a5636f43172f60),<a name="l00298"></a>00298         W64LIT(0x84c87814a1f0ab72), W64LIT(0x8cc702081a6439ec),<a name="l00299"></a>00299         W64LIT(0x90befffa23631e28), W64LIT(0xa4506cebde82bde9),<a name="l00300"></a>00300         W64LIT(0xbef9a3f7b2c67915), W64LIT(0xc67178f2e372532b),<a name="l00301"></a>00301         W64LIT(0xca273eceea26619c), W64LIT(0xd186b8c721c0c207),<a name="l00302"></a>00302         W64LIT(0xeada7dd6cde0eb1e), W64LIT(0xf57d4f7fee6ed178),<a name="l00303"></a>00303         W64LIT(0x06f067aa72176fba), W64LIT(0x0a637dc5a2c898a6),<a name="l00304"></a>00304         W64LIT(0x113f9804bef90dae), W64LIT(0x1b710b35131c471b),<a name="l00305"></a>00305         W64LIT(0x28db77f523047d84), W64LIT(0x32caab7b40c72493),<a name="l00306"></a>00306         W64LIT(0x3c9ebe0a15c9bebc), W64LIT(0x431d67c49c100d4c),<a name="l00307"></a>00307         W64LIT(0x4cc5d4becb3e42b6), W64LIT(0x597f299cfc657e2a),<a name="l00308"></a>00308         W64LIT(0x5fcb6fab3ad6faec), W64LIT(0x6c44198c4a475817)<a name="l00309"></a>00309 };<a name="l00310"></a>00310 <a name="l00311"></a>00311 <span class="preprocessor">#if CRYPTOPP_BOOL_SSE2_ASM_AVAILABLE &amp;&amp; CRYPTOPP_BOOL_X86</span><a name="l00312"></a>00312 <span class="preprocessor"></span><span class="comment">// put assembly version in separate function, otherwise MSVC 2005 SP1 doesn't generate correct code for the non-assembly version</span><a name="l00313"></a>00313 CRYPTOPP_NAKED <span class="keyword">static</span> <span class="keywordtype">void</span> CRYPTOPP_FASTCALL SHA512_SSE2_Transform(word64 *state, <span class="keyword">const</span> word64 *data)<a name="l00314"></a>00314 {<a name="l00315"></a>00315 <span class="preprocessor">#ifdef __GNUC__</span><a name="l00316"></a>00316 <span class="preprocessor"></span>        __asm__ __volatile__<a name="l00317"></a>00317         (<a name="l00318"></a>00318                 <span class="stringliteral">".intel_syntax noprefix;"</span><a name="l00319"></a>00319         AS1(    push    ebx)<a name="l00320"></a>00320         AS2(    mov             ebx, eax)<a name="l00321"></a>00321 #<span class="keywordflow">else</span><a name="l00322"></a>00322         AS1(    push    ebx)<a name="l00323"></a>00323         AS1(    push    esi)<a name="l00324"></a>00324         AS1(    push    edi)<a name="l00325"></a>00325         AS2(    lea             ebx, SHA512_K)<a name="l00326"></a>00326 #endif<a name="l00327"></a>00327 <a name="l00328"></a>00328         AS2(    mov             eax, esp)<a name="l00329"></a>00329         AS2(    and             esp, 0xfffffff0)<a name="l00330"></a>00330         AS2(    sub             esp, 27*16)                             <span class="comment">// 17*16 for expanded data, 20*8 for state</span><a name="l00331"></a>00331         AS1(    push    eax)<a name="l00332"></a>00332         AS2(    xor             eax, eax)<a name="l00333"></a>00333         AS2(    lea             edi, [esp+4+8*8])               <span class="comment">// start at middle of state buffer. will decrement pointer each round to avoid copying</span><a name="l00334"></a>00334         AS2(    lea             esi, [esp+4+20*8+8])    <span class="comment">// 16-byte alignment, then add 8</span><a name="l00335"></a>00335 <a name="l00336"></a>00336         AS2(    movq    mm4, [ecx+0*8])<a name="l00337"></a>00337         AS2(    movq    [edi+0*8], mm4)<a name="l00338"></a>00338         AS2(    movq    mm0, [ecx+1*8])<a name="l00339"></a>00339         AS2(    movq    [edi+1*8], mm0)<a name="l00340"></a>00340         AS2(    movq    mm0, [ecx+2*8])<a name="l00341"></a>00341         AS2(    movq    [edi+2*8], mm0)<a name="l00342"></a>00342         AS2(    movq    mm0, [ecx+3*8])<a name="l00343"></a>00343         AS2(    movq    [edi+3*8], mm0)<a name="l00344"></a>00344         AS2(    movq    mm5, [ecx+4*8])<a name="l00345"></a>00345         AS2(    movq    [edi+4*8], mm5)<a name="l00346"></a>00346         AS2(    movq    mm0, [ecx+5*8])<a name="l00347"></a>00347         AS2(    movq    [edi+5*8], mm0)<a name="l00348"></a>00348         AS2(    movq    mm0, [ecx+6*8])<a name="l00349"></a>00349         AS2(    movq    [edi+6*8], mm0)<a name="l00350"></a>00350         AS2(    movq    mm0, [ecx+7*8])<a name="l00351"></a>00351         AS2(    movq    [edi+7*8], mm0)<a name="l00352"></a>00352         ASJ(    jmp,    0, f)<a name="l00353"></a>00353 <a name="l00354"></a>00354 #define SSE2_S0_S1(r, a, b, c)  \<a name="l00355"></a>00355         AS2(    movq    mm6, r)\<a name="l00356"></a>00356         AS2(    psrlq   r, a)\<a name="l00357"></a>00357         AS2(    movq    mm7, r)\<a name="l00358"></a>00358         AS2(    psllq   mm6, 64-c)\<a name="l00359"></a>00359         AS2(    pxor    mm7, mm6)\<a name="l00360"></a>00360         AS2(    psrlq   r, b-a)\<a name="l00361"></a>00361         AS2(    pxor    mm7, r)\<a name="l00362"></a>00362         AS2(    psllq   mm6, c-b)\<a name="l00363"></a>00363         AS2(    pxor    mm7, mm6)\<a name="l00364"></a>00364         AS2(    psrlq   r, c-b)\<a name="l00365"></a>00365         AS2(    pxor    r, mm7)\<a name="l00366"></a>00366         AS2(    psllq   mm6, b-a)\<a name="l00367"></a>00367         AS2(    pxor    r, mm6)<a name="l00368"></a>00368 <a name="l00369"></a>00369 #define SSE2_s0(r, a, b, c)     \<a name="l00370"></a>00370         AS2(    movdqa  xmm6, r)\<a name="l00371"></a>00371         AS2(    psrlq   r, a)\<a name="l00372"></a>00372         AS2(    movdqa  xmm7, r)\<a name="l00373"></a>00373         AS2(    psllq   xmm6, 64-c)\<a name="l00374"></a>00374         AS2(    pxor    xmm7, xmm6)\<a name="l00375"></a>00375         AS2(    psrlq   r, b-a)\<a name="l00376"></a>00376         AS2(    pxor    xmm7, r)\<a name="l00377"></a>00377         AS2(    psrlq   r, c-b)\<a name="l00378"></a>00378         AS2(    pxor    r, xmm7)\<a name="l00379"></a>00379         AS2(    psllq   xmm6, c-a)\<a name="l00380"></a>00380         AS2(    pxor    r, xmm6)<a name="l00381"></a>00381 <a name="l00382"></a>00382 #define SSE2_s1(r, a, b, c)     \<a name="l00383"></a>00383         AS2(    movdqa  xmm6, r)\<a name="l00384"></a>00384         AS2(    psrlq   r, a)\<a name="l00385"></a>00385         AS2(    movdqa  xmm7, r)\<a name="l00386"></a>00386         AS2(    psllq   xmm6, 64-c)\<a name="l00387"></a>00387         AS2(    pxor    xmm7, xmm6)\<a name="l00388"></a>00388         AS2(    psrlq   r, b-a)\<a name="l00389"></a>00389         AS2(    pxor    xmm7, r)\<a name="l00390"></a>00390         AS2(    psllq   xmm6, c-b)\<a name="l00391"></a>00391         AS2(    pxor    xmm7, xmm6)\<a name="l00392"></a>00392         AS2(    psrlq   r, c-b)\<a name="l00393"></a>00393         AS2(    pxor    r, xmm7)<a name="l00394"></a>00394 <a name="l00395"></a>00395         ASL(SHA512_Round)<a name="l00396"></a>00396         <span class="comment">// k + w is in mm0, a is in mm4, e is in mm5</span><a name="l00397"></a>00397         AS2(    paddq   mm0, [edi+7*8])         <span class="comment">// h</span><a name="l00398"></a>00398         AS2(    movq    mm2, [edi+5*8])         <span class="comment">// f</span><a name="l00399"></a>00399         AS2(    movq    mm3, [edi+6*8])         <span class="comment">// g</span><a name="l00400"></a>00400         AS2(    pxor    mm2, mm3)<a name="l00401"></a>00401         AS2(    pand    mm2, mm5)<a name="l00402"></a>00402         SSE2_S0_S1(mm5,14,18,41)<a name="l00403"></a>00403         AS2(    pxor    mm2, mm3)<a name="l00404"></a>00404         AS2(    paddq   mm0, mm2)                       <span class="comment">// h += Ch(e,f,g)</span><a name="l00405"></a>00405         AS2(    paddq   mm5, mm0)                       <span class="comment">// h += S1(e)</span><a name="l00406"></a>00406         AS2(    movq    mm2, [edi+1*8])         <span class="comment">// b</span><a name="l00407"></a>00407         AS2(    movq    mm1, mm2)<a name="l00408"></a>00408         AS2(    por             mm2, mm4)<a name="l00409"></a>00409         AS2(    pand    mm2, [edi+2*8])         <span class="comment">// c</span><a name="l00410"></a>00410         AS2(    pand    mm1, mm4)<a name="l00411"></a>00411         AS2(    por             mm1, mm2)<a name="l00412"></a>00412         AS2(    paddq   mm1, mm5)                       <span class="comment">// temp = h + Maj(a,b,c)</span><a name="l00413"></a>00413         AS2(    paddq   mm5, [edi+3*8])         <span class="comment">// e = d + h</span><a name="l00414"></a>00414         AS2(    movq    [edi+3*8], mm5)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -