📄 whrlpool_8cpp-source.html
字号:
<a name="l00349"></a>00349 W64LIT(0xc37eda3f3ffc3fe5), W64LIT(0x1caac75555495592), W64LIT(0x1059dba2a2b2a279), W64LIT(0x65c9e9eaea8fea03),<a name="l00350"></a>00350 W64LIT(0xecca6a656589650f), W64LIT(0x686903babad2bab9), W64LIT(0x935e4a2f2fbc2f65), W64LIT(0xe79d8ec0c027c04e),<a name="l00351"></a>00351 W64LIT(0x81a160dede5fdebe), W64LIT(0x6c38fc1c1c701ce0), W64LIT(0x2ee746fdfdd3fdbb), W64LIT(0x649a1f4d4d294d52),<a name="l00352"></a>00352 W64LIT(0xe0397692927292e4), W64LIT(0xbceafa7575c9758f), W64LIT(0x1e0c360606180630), W64LIT(0x9809ae8a8a128a24),<a name="l00353"></a>00353 W64LIT(0x40794bb2b2f2b2f9), W64LIT(0x59d185e6e6bfe663), W64LIT(0x361c7e0e0e380e70), W64LIT(0x633ee71f1f7c1ff8),<a name="l00354"></a>00354 W64LIT(0xf7c4556262956237), W64LIT(0xa3b53ad4d477d4ee), W64LIT(0x324d81a8a89aa829), W64LIT(0xf4315296966296c4),<a name="l00355"></a>00355 W64LIT(0x3aef62f9f9c3f99b), W64LIT(0xf697a3c5c533c566), W64LIT(0xb14a102525942535), W64LIT(0x20b2ab59597959f2),<a name="l00356"></a>00356 W64LIT(0xae15d084842a8454), W64LIT(0xa7e4c57272d572b7), W64LIT(0xdd72ec3939e439d5), W64LIT(0x6198164c4c2d4c5a),<a name="l00357"></a>00357 W64LIT(0x3bbc945e5e655eca), W64LIT(0x85f09f7878fd78e7), W64LIT(0xd870e53838e038dd), W64LIT(0x8605988c8c0a8c14),<a name="l00358"></a>00358 W64LIT(0xb2bf17d1d163d1c6), W64LIT(0x0b57e4a5a5aea541), W64LIT(0x4dd9a1e2e2afe243), W64LIT(0xf8c24e616199612f),<a name="l00359"></a>00359 W64LIT(0x457b42b3b3f6b3f1), W64LIT(0xa542342121842115), W64LIT(0xd625089c9c4a9c94), W64LIT(0x663cee1e1e781ef0),<a name="l00360"></a>00360 W64LIT(0x5286614343114322), W64LIT(0xfc93b1c7c73bc776), W64LIT(0x2be54ffcfcd7fcb3), W64LIT(0x1408240404100420),<a name="l00361"></a>00361 W64LIT(0x08a2e351515951b2), W64LIT(0xc72f2599995e99bc), W64LIT(0xc4da226d6da96d4f), W64LIT(0x391a650d0d340d68),<a name="l00362"></a>00362 W64LIT(0x35e979fafacffa83), W64LIT(0x84a369dfdf5bdfb6), W64LIT(0x9bfca97e7ee57ed7), W64LIT(0xb44819242490243d),<a name="l00363"></a>00363 W64LIT(0xd776fe3b3bec3bc5), W64LIT(0x3d4b9aabab96ab31), W64LIT(0xd181f0cece1fce3e), W64LIT(0x5522991111441188),<a name="l00364"></a>00364 W64LIT(0x8903838f8f068f0c), W64LIT(0x6b9c044e4e254e4a), W64LIT(0x517366b7b7e6b7d1), W64LIT(0x60cbe0ebeb8beb0b),<a name="l00365"></a>00365 W64LIT(0xcc78c13c3cf03cfd), W64LIT(0xbf1ffd81813e817c), W64LIT(0xfe354094946a94d4), W64LIT(0x0cf31cf7f7fbf7eb),<a name="l00366"></a>00366 W64LIT(0x676f18b9b9deb9a1), W64LIT(0x5f268b13134c1398), W64LIT(0x9c58512c2cb02c7d), W64LIT(0xb8bb05d3d36bd3d6),<a name="l00367"></a>00367 W64LIT(0x5cd38ce7e7bbe76b), W64LIT(0xcbdc396e6ea56e57), W64LIT(0xf395aac4c437c46e), W64LIT(0x0f061b03030c0318),<a name="l00368"></a>00368 W64LIT(0x13acdc565645568a), W64LIT(0x49885e44440d441a), W64LIT(0x9efea07f7fe17fdf), W64LIT(0x374f88a9a99ea921),<a name="l00369"></a>00369 W64LIT(0x8254672a2aa82a4d), W64LIT(0x6d6b0abbbbd6bbb1), W64LIT(0xe29f87c1c123c146), W64LIT(0x02a6f153535153a2),<a name="l00370"></a>00370 W64LIT(0x8ba572dcdc57dcae), W64LIT(0x2716530b0b2c0b58), W64LIT(0xd327019d9d4e9d9c), W64LIT(0xc1d82b6c6cad6c47),<a name="l00371"></a>00371 W64LIT(0xf562a43131c43195), W64LIT(0xb9e8f37474cd7487), W64LIT(0x09f115f6f6fff6e3), W64LIT(0x438c4c464605460a),<a name="l00372"></a>00372 W64LIT(0x2645a5acac8aac09), W64LIT(0x970fb589891e893c), W64LIT(0x4428b414145014a0), W64LIT(0x42dfbae1e1a3e15b),<a name="l00373"></a>00373 W64LIT(0x4e2ca616165816b0), W64LIT(0xd274f73a3ae83acd), W64LIT(0xd0d2066969b9696f), W64LIT(0x2d12410909240948),<a name="l00374"></a>00374 W64LIT(0xade0d77070dd70a7), W64LIT(0x54716fb6b6e2b6d9), W64LIT(0xb7bd1ed0d067d0ce), W64LIT(0x7ec7d6eded93ed3b),<a name="l00375"></a>00375 W64LIT(0xdb85e2cccc17cc2e), W64LIT(0x578468424215422a), W64LIT(0xc22d2c98985a98b4), W64LIT(0x0e55eda4a4aaa449),<a name="l00376"></a>00376 W64LIT(0x8850752828a0285d), W64LIT(0x31b8865c5c6d5cda), W64LIT(0x3fed6bf8f8c7f893), W64LIT(0xa411c28686228644),<a name="l00377"></a>00377 <a name="l00378"></a>00378 W64LIT(0x1823c6e887b8014f),<a name="l00379"></a>00379 W64LIT(0x36a6d2f5796f9152),<a name="l00380"></a>00380 W64LIT(0x60bc9b8ea30c7b35),<a name="l00381"></a>00381 W64LIT(0x1de0d7c22e4bfe57),<a name="l00382"></a>00382 W64LIT(0x157737e59ff04ada),<a name="l00383"></a>00383 W64LIT(0x58c9290ab1a06b85),<a name="l00384"></a>00384 W64LIT(0xbd5d10f4cb3e0567),<a name="l00385"></a>00385 W64LIT(0xe427418ba77d95d8),<a name="l00386"></a>00386 W64LIT(0xfbee7c66dd17479e),<a name="l00387"></a>00387 W64LIT(0xca2dbf07ad5a8333)<a name="l00388"></a>00388 };<a name="l00389"></a>00389 <a name="l00390"></a>00390 <span class="comment">// Whirlpool basic transformation. Transforms state based on block.</span><a name="l00391"></a><a class="code" href="class_whirlpool.html#49ecf7d398bb027dd4f2465c05f1b77f">00391</a> <span class="keywordtype">void</span> <a class="code" href="class_whirlpool.html#49ecf7d398bb027dd4f2465c05f1b77f">Whirlpool::Transform</a>(word64 *digest, <span class="keyword">const</span> word64 *block)<a name="l00392"></a>00392 {<a name="l00393"></a>00393 <span class="preprocessor">#if defined(CRYPTOPP_X86_ASM_AVAILABLE)</span><a name="l00394"></a>00394 <span class="preprocessor"></span> <span class="keywordflow">if</span> (HasMMX())<a name="l00395"></a>00395 {<a name="l00396"></a>00396 <span class="comment">// MMX version has the same structure as C version below</span><a name="l00397"></a>00397 <span class="preprocessor">#ifdef __GNUC__</span><a name="l00398"></a>00398 <span class="preprocessor"></span> __asm__ __volatile__<a name="l00399"></a>00399 (<a name="l00400"></a>00400 <span class="stringliteral">".intel_syntax noprefix;"</span><a name="l00401"></a>00401 AS_PUSH( bx)<a name="l00402"></a>00402 AS2( mov WORD_REG(bx), WORD_REG(ax))<a name="l00403"></a>00403 #<span class="keywordflow">else</span><a name="l00404"></a>00404 #<span class="keywordflow">if</span> _MSC_VER < 1300<a name="l00405"></a>00405 AS_PUSH( bx)<a name="l00406"></a>00406 #endif<a name="l00407"></a>00407 AS2( lea WORD_REG(bx), [Whirlpool_C])<a name="l00408"></a>00408 AS2( mov WORD_REG(cx), digest)<a name="l00409"></a>00409 AS2( mov WORD_REG(dx), block)<a name="l00410"></a>00410 #endif<a name="l00411"></a>00411 AS2( mov WORD_REG(ax), WORD_REG(sp))<a name="l00412"></a>00412 AS2( and WORD_REG(sp), -16)<a name="l00413"></a>00413 AS2( sub WORD_REG(sp), 16*8)<a name="l00414"></a>00414 AS_PUSH( ax)<a name="l00415"></a>00415 AS2( xor esi, esi)<a name="l00416"></a>00416 ASL(0)<a name="l00417"></a>00417 AS2( movq mm0, [WORD_REG(cx)+8*WORD_REG(si)])<a name="l00418"></a>00418 AS2( movq [WORD_REG(sp)+WORD_SZ+8*WORD_REG(si)], mm0) <span class="comment">// k</span><a name="l00419"></a>00419 AS2( pxor mm0, [WORD_REG(dx)+8*WORD_REG(si)])<a name="l00420"></a>00420 AS2( movq [WORD_REG(sp)+WORD_SZ+64+8*WORD_REG(si)], mm0) <span class="comment">// s</span><a name="l00421"></a>00421 AS2( movq [WORD_REG(cx)+8*WORD_REG(si)], mm0)<a name="l00422"></a>00422 AS1( inc WORD_REG(si))<a name="l00423"></a>00423 AS2( cmp WORD_REG(si), 8)<a name="l00424"></a>00424 ASJ( jne, 0, b)<a name="l00425"></a>00425 <a name="l00426"></a>00426 AS2( xor esi, esi)<a name="l00427"></a>00427 ASL(1)<a name="l00428"></a>00428 <a name="l00429"></a>00429 #define KSL0(a, b) AS2(movq mm##a, b)<a name="l00430"></a>00430 #define KSL1(a, b) AS2(pxor mm##a, b)<a name="l00431"></a>00431 <a name="l00432"></a>00432 #define KSL(op, i, a, b, c, d) \<a name="l00433"></a>00433 AS2(mov eax, [WORD_REG(sp)+WORD_SZ+8*i])\<a name="l00434"></a>00434 AS2(movzx edi, al)\<a name="l00435"></a>00435 KSL##op(a, [WORD_REG(bx)+3*2048+8*WORD_REG(di)])\<a name="l00436"></a>00436 AS2(movzx edi, ah)\<a name="l00437"></a>00437 KSL##op(b, [WORD_REG(bx)+2*2048+8*WORD_REG(di)])\<a name="l00438"></a>00438 AS2(shr eax, 16)\<a name="l00439"></a>00439 AS2(movzx edi, al)\<a name="l00440"></a>00440 AS2(shr eax, 8)\<a name="l00441"></a>00441 KSL##op(c, [WORD_REG(bx)+1*2048+8*WORD_REG(di)])\<a name="l00442"></a>00442 KSL##op(d, [WORD_REG(bx)+0*2048+8*WORD_REG(ax)])<a name="l00443"></a>00443 <a name="l00444"></a>00444 #define KSH0(a, b) \<a name="l00445"></a>00445 ASS(pshufw mm##a, mm##a, 1, 0, 3, 2)\<a name="l00446"></a>00446 AS2(pxor mm##a, b)<a name="l00447"></a>00447 #define KSH1(a, b) \<a name="l00448"></a>00448 AS2(pxor mm##a, b)<a name="l00449"></a>00449 #define KSH2(a, b) \<a name="l00450"></a>00450 AS2(pxor mm##a, b)\<a name="l00451"></a>00451 AS2(movq [WORD_REG(sp)+WORD_SZ+8*a], mm##a)<a name="l00452"></a>00452 <a name="l00453"></a>00453 #define KSH(op, i, a, b, c, d) \<a name="l00454"></a>00454 AS2(mov eax, [WORD_REG(sp)+WORD_SZ+8*((i+4)-8*((i+4)/8))+4])\<a name="l00455"></a>00455 AS2(movzx edi, al)\<a name="l00456"></a>00456 KSH##op(a, [WORD_REG(bx)+3*2048+8*WORD_REG(di)])\<a name="l00457"></a>00457 AS2(movzx edi, ah)\<a name="l00458"></a>00458 KSH##op(b, [WORD_REG(bx)+2*2048+8*WORD_REG(di)])\<a name="l00459"></a>00459 AS2(shr eax, 16)\<a name="l00460"></a>00460 AS2(movzx edi, al)\<a name="l00461"></a>00461 AS2(shr eax, 8)\<a name="l00462"></a>00462 KSH##op(c, [WORD_REG(bx)+1*2048+8*WORD_REG(di)])\<a name="l00463"></a>00463 KSH##op(d, [WORD_REG(bx)+0*2048+8*WORD_REG(ax)])<a name="l00464"></a>00464 <a name="l00465"></a>00465 #define TSL(op, i, a, b, c, d) \<a name="l00466"></a>00466 AS2(mov eax, [WORD_REG(sp)+WORD_SZ+64+8*i])\<a name="l00467"></a>00467 AS2(movzx edi, al)\<a name="l00468"></a>00468 KSL##op(a, [WORD_REG(bx)+3*2048+8*WORD_REG(di)])\<a name="l00469"></a>00469 AS2(movzx edi, ah)\<a name="l00470"></a>00470 KSL##op(b, [WORD_REG(bx)+2*2048+8*WORD_REG(di)])\<a name="l00471"></a>00471 AS2(shr eax, 16)\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -