📄 sha_8cpp-source.html
字号:
<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 && 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 + -