📄 ripemd.cpp
字号:
AS1( emms ) \ AS1( ret 8 ) #endif PROLOG() #ifdef OLD_GCC_OFFSET AS2( lea esi, [ecx + 20] ) // digest_[0] #else AS2( lea esi, [ecx + 16] ) // digest_[0] #endif AS2( sub esp, 24 ) // make room for tmp a1 - e1 AS2( movd mm1, esi ) // store digest_ AS1( loopStart: ) AS2( movd mm2, edx ) // store times_ AS2( mov eax, [esi] ) // a1 AS2( mov ebx, [esi + 4] ) // b1 AS2( mov ecx, [esi + 8] ) // c1 AS2( mov edx, [esi + 12] ) // d1 AS2( mov ebp, [esi + 16] ) // e1 // setup AS2( mov esi, ecx ) ASMSubroundF( eax, ebx, ecx, edx, ebp, 0, 11) ASMSubroundF( ebp, eax, ebx, ecx, edx, 1, 14) ASMSubroundF( edx, ebp, eax, ebx, ecx, 2, 15) ASMSubroundF( ecx, edx, ebp, eax, ebx, 3, 12) ASMSubroundF( ebx, ecx, edx, ebp, eax, 4, 5) ASMSubroundF( eax, ebx, ecx, edx, ebp, 5, 8) ASMSubroundF( ebp, eax, ebx, ecx, edx, 6, 7) ASMSubroundF( edx, ebp, eax, ebx, ecx, 7, 9) ASMSubroundF( ecx, edx, ebp, eax, ebx, 8, 11) ASMSubroundF( ebx, ecx, edx, ebp, eax, 9, 13) ASMSubroundF( eax, ebx, ecx, edx, ebp, 10, 14) ASMSubroundF( ebp, eax, ebx, ecx, edx, 11, 15) ASMSubroundF( edx, ebp, eax, ebx, ecx, 12, 6) ASMSubroundF( ecx, edx, ebp, eax, ebx, 13, 7) ASMSubroundF( ebx, ecx, edx, ebp, eax, 14, 9) ASMSubroundF( eax, ebx, ecx, edx, ebp, 15, 8) ASMSubroundG( ebp, eax, ebx, ecx, edx, 7, 7, k1) ASMSubroundG( edx, ebp, eax, ebx, ecx, 4, 6, k1) ASMSubroundG( ecx, edx, ebp, eax, ebx, 13, 8, k1) ASMSubroundG( ebx, ecx, edx, ebp, eax, 1, 13, k1) ASMSubroundG( eax, ebx, ecx, edx, ebp, 10, 11, k1) ASMSubroundG( ebp, eax, ebx, ecx, edx, 6, 9, k1) ASMSubroundG( edx, ebp, eax, ebx, ecx, 15, 7, k1) ASMSubroundG( ecx, edx, ebp, eax, ebx, 3, 15, k1) ASMSubroundG( ebx, ecx, edx, ebp, eax, 12, 7, k1) ASMSubroundG( eax, ebx, ecx, edx, ebp, 0, 12, k1) ASMSubroundG( ebp, eax, ebx, ecx, edx, 9, 15, k1) ASMSubroundG( edx, ebp, eax, ebx, ecx, 5, 9, k1) ASMSubroundG( ecx, edx, ebp, eax, ebx, 2, 11, k1) ASMSubroundG( ebx, ecx, edx, ebp, eax, 14, 7, k1) ASMSubroundG( eax, ebx, ecx, edx, ebp, 11, 13, k1) ASMSubroundG( ebp, eax, ebx, ecx, edx, 8, 12, k1) ASMSubroundH( edx, ebp, eax, ebx, ecx, 3, 11, k2) ASMSubroundH( ecx, edx, ebp, eax, ebx, 10, 13, k2) ASMSubroundH( ebx, ecx, edx, ebp, eax, 14, 6, k2) ASMSubroundH( eax, ebx, ecx, edx, ebp, 4, 7, k2) ASMSubroundH( ebp, eax, ebx, ecx, edx, 9, 14, k2) ASMSubroundH( edx, ebp, eax, ebx, ecx, 15, 9, k2) ASMSubroundH( ecx, edx, ebp, eax, ebx, 8, 13, k2) ASMSubroundH( ebx, ecx, edx, ebp, eax, 1, 15, k2) ASMSubroundH( eax, ebx, ecx, edx, ebp, 2, 14, k2) ASMSubroundH( ebp, eax, ebx, ecx, edx, 7, 8, k2) ASMSubroundH( edx, ebp, eax, ebx, ecx, 0, 13, k2) ASMSubroundH( ecx, edx, ebp, eax, ebx, 6, 6, k2) ASMSubroundH( ebx, ecx, edx, ebp, eax, 13, 5, k2) ASMSubroundH( eax, ebx, ecx, edx, ebp, 11, 12, k2) ASMSubroundH( ebp, eax, ebx, ecx, edx, 5, 7, k2) ASMSubroundH( edx, ebp, eax, ebx, ecx, 12, 5, k2) ASMSubroundI( ecx, edx, ebp, eax, ebx, 1, 11, k3) ASMSubroundI( ebx, ecx, edx, ebp, eax, 9, 12, k3) ASMSubroundI( eax, ebx, ecx, edx, ebp, 11, 14, k3) ASMSubroundI( ebp, eax, ebx, ecx, edx, 10, 15, k3) ASMSubroundI( edx, ebp, eax, ebx, ecx, 0, 14, k3) ASMSubroundI( ecx, edx, ebp, eax, ebx, 8, 15, k3) ASMSubroundI( ebx, ecx, edx, ebp, eax, 12, 9, k3) ASMSubroundI( eax, ebx, ecx, edx, ebp, 4, 8, k3) ASMSubroundI( ebp, eax, ebx, ecx, edx, 13, 9, k3) ASMSubroundI( edx, ebp, eax, ebx, ecx, 3, 14, k3) ASMSubroundI( ecx, edx, ebp, eax, ebx, 7, 5, k3) ASMSubroundI( ebx, ecx, edx, ebp, eax, 15, 6, k3) ASMSubroundI( eax, ebx, ecx, edx, ebp, 14, 8, k3) ASMSubroundI( ebp, eax, ebx, ecx, edx, 5, 6, k3) ASMSubroundI( edx, ebp, eax, ebx, ecx, 6, 5, k3) ASMSubroundI( ecx, edx, ebp, eax, ebx, 2, 12, k3) // setup AS2( mov esi, ebp ) ASMSubroundJ( ebx, ecx, edx, ebp, eax, 4, 9, k4) ASMSubroundJ( eax, ebx, ecx, edx, ebp, 0, 15, k4) ASMSubroundJ( ebp, eax, ebx, ecx, edx, 5, 5, k4) ASMSubroundJ( edx, ebp, eax, ebx, ecx, 9, 11, k4) ASMSubroundJ( ecx, edx, ebp, eax, ebx, 7, 6, k4) ASMSubroundJ( ebx, ecx, edx, ebp, eax, 12, 8, k4) ASMSubroundJ( eax, ebx, ecx, edx, ebp, 2, 13, k4) ASMSubroundJ( ebp, eax, ebx, ecx, edx, 10, 12, k4) ASMSubroundJ( edx, ebp, eax, ebx, ecx, 14, 5, k4) ASMSubroundJ( ecx, edx, ebp, eax, ebx, 1, 12, k4) ASMSubroundJ( ebx, ecx, edx, ebp, eax, 3, 13, k4) ASMSubroundJ( eax, ebx, ecx, edx, ebp, 8, 14, k4) ASMSubroundJ( ebp, eax, ebx, ecx, edx, 11, 11, k4) ASMSubroundJ( edx, ebp, eax, ebx, ecx, 6, 8, k4) ASMSubroundJ( ecx, edx, ebp, eax, ebx, 15, 5, k4) ASMSubroundJ( ebx, ecx, edx, ebp, eax, 13, 6, k4) // store a1 - e1 on stack AS2( movd esi, mm1 ) // digest_ AS2( mov [esp], eax ) AS2( mov [esp + 4], ebx ) AS2( mov [esp + 8], ecx ) AS2( mov [esp + 12], edx ) AS2( mov [esp + 16], ebp ) AS2( mov eax, [esi] ) // a2 AS2( mov ebx, [esi + 4] ) // b2 AS2( mov ecx, [esi + 8] ) // c2 AS2( mov edx, [esi + 12] ) // d2 AS2( mov ebp, [esi + 16] ) // e2 // setup AS2( mov esi, edx ) ASMSubroundJ( eax, ebx, ecx, edx, ebp, 5, 8, k5) ASMSubroundJ( ebp, eax, ebx, ecx, edx, 14, 9, k5) ASMSubroundJ( edx, ebp, eax, ebx, ecx, 7, 9, k5) ASMSubroundJ( ecx, edx, ebp, eax, ebx, 0, 11, k5) ASMSubroundJ( ebx, ecx, edx, ebp, eax, 9, 13, k5) ASMSubroundJ( eax, ebx, ecx, edx, ebp, 2, 15, k5) ASMSubroundJ( ebp, eax, ebx, ecx, edx, 11, 15, k5) ASMSubroundJ( edx, ebp, eax, ebx, ecx, 4, 5, k5) ASMSubroundJ( ecx, edx, ebp, eax, ebx, 13, 7, k5) ASMSubroundJ( ebx, ecx, edx, ebp, eax, 6, 7, k5) ASMSubroundJ( eax, ebx, ecx, edx, ebp, 15, 8, k5) ASMSubroundJ( ebp, eax, ebx, ecx, edx, 8, 11, k5) ASMSubroundJ( edx, ebp, eax, ebx, ecx, 1, 14, k5) ASMSubroundJ( ecx, edx, ebp, eax, ebx, 10, 14, k5) ASMSubroundJ( ebx, ecx, edx, ebp, eax, 3, 12, k5) ASMSubroundJ( eax, ebx, ecx, edx, ebp, 12, 6, k5) // setup AS2( mov esi, ebx ) ASMSubroundI( ebp, eax, ebx, ecx, edx, 6, 9, k6) ASMSubroundI( edx, ebp, eax, ebx, ecx, 11, 13, k6) ASMSubroundI( ecx, edx, ebp, eax, ebx, 3, 15, k6) ASMSubroundI( ebx, ecx, edx, ebp, eax, 7, 7, k6) ASMSubroundI( eax, ebx, ecx, edx, ebp, 0, 12, k6) ASMSubroundI( ebp, eax, ebx, ecx, edx, 13, 8, k6) ASMSubroundI( edx, ebp, eax, ebx, ecx, 5, 9, k6) ASMSubroundI( ecx, edx, ebp, eax, ebx, 10, 11, k6) ASMSubroundI( ebx, ecx, edx, ebp, eax, 14, 7, k6) ASMSubroundI( eax, ebx, ecx, edx, ebp, 15, 7, k6) ASMSubroundI( ebp, eax, ebx, ecx, edx, 8, 12, k6) ASMSubroundI( edx, ebp, eax, ebx, ecx, 12, 7, k6) ASMSubroundI( ecx, edx, ebp, eax, ebx, 4, 6, k6) ASMSubroundI( ebx, ecx, edx, ebp, eax, 9, 15, k6) ASMSubroundI( eax, ebx, ecx, edx, ebp, 1, 13, k6) ASMSubroundI( ebp, eax, ebx, ecx, edx, 2, 11, k6) ASMSubroundH( edx, ebp, eax, ebx, ecx, 15, 9, k7) ASMSubroundH( ecx, edx, ebp, eax, ebx, 5, 7, k7) ASMSubroundH( ebx, ecx, edx, ebp, eax, 1, 15, k7) ASMSubroundH( eax, ebx, ecx, edx, ebp, 3, 11, k7) ASMSubroundH( ebp, eax, ebx, ecx, edx, 7, 8, k7) ASMSubroundH( edx, ebp, eax, ebx, ecx, 14, 6, k7) ASMSubroundH( ecx, edx, ebp, eax, ebx, 6, 6, k7) ASMSubroundH( ebx, ecx, edx, ebp, eax, 9, 14, k7) ASMSubroundH( eax, ebx, ecx, edx, ebp, 11, 12, k7) ASMSubroundH( ebp, eax, ebx, ecx, edx, 8, 13, k7) ASMSubroundH( edx, ebp, eax, ebx, ecx, 12, 5, k7) ASMSubroundH( ecx, edx, ebp, eax, ebx, 2, 14, k7) ASMSubroundH( ebx, ecx, edx, ebp, eax, 10, 13, k7) ASMSubroundH( eax, ebx, ecx, edx, ebp, 0, 13, k7) ASMSubroundH( ebp, eax, ebx, ecx, edx, 4, 7, k7) ASMSubroundH( edx, ebp, eax, ebx, ecx, 13, 5, k7) ASMSubroundG( ecx, edx, ebp, eax, ebx, 8, 15, k8) ASMSubroundG( ebx, ecx, edx, ebp, eax, 6, 5, k8) ASMSubroundG( eax, ebx, ecx, edx, ebp, 4, 8, k8) ASMSubroundG( ebp, eax, ebx, ecx, edx, 1, 11, k8) ASMSubroundG( edx, ebp, eax, ebx, ecx, 3, 14, k8) ASMSubroundG( ecx, edx, ebp, eax, ebx, 11, 14, k8) ASMSubroundG( ebx, ecx, edx, ebp, eax, 15, 6, k8) ASMSubroundG( eax, ebx, ecx, edx, ebp, 0, 14, k8) ASMSubroundG( ebp, eax, ebx, ecx, edx, 5, 6, k8) ASMSubroundG( edx, ebp, eax, ebx, ecx, 12, 9, k8) ASMSubroundG( ecx, edx, ebp, eax, ebx, 2, 12, k8) ASMSubroundG( ebx, ecx, edx, ebp, eax, 13, 9, k8) ASMSubroundG( eax, ebx, ecx, edx, ebp, 9, 12, k8) ASMSubroundG( ebp, eax, ebx, ecx, edx, 7, 5, k8) ASMSubroundG( edx, ebp, eax, ebx, ecx, 10, 15, k8) ASMSubroundG( ecx, edx, ebp, eax, ebx, 14, 8, k8) ASMSubroundF( ebx, ecx, edx, ebp, eax, 12, 8) ASMSubroundF( eax, ebx, ecx, edx, ebp, 15, 5) ASMSubroundF( ebp, eax, ebx, ecx, edx, 10, 12) ASMSubroundF( edx, ebp, eax, ebx, ecx, 4, 9) ASMSubroundF( ecx, edx, ebp, eax, ebx, 1, 12) ASMSubroundF( ebx, ecx, edx, ebp, eax, 5, 5) ASMSubroundF( eax, ebx, ecx, edx, ebp, 8, 14) ASMSubroundF( ebp, eax, ebx, ecx, edx, 7, 6) ASMSubroundF( edx, ebp, eax, ebx, ecx, 6, 8) ASMSubroundF( ecx, edx, ebp, eax, ebx, 2, 13) ASMSubroundF( ebx, ecx, edx, ebp, eax, 13, 6) ASMSubroundF( eax, ebx, ecx, edx, ebp, 14, 5) ASMSubroundF( ebp, eax, ebx, ecx, edx, 0, 15) ASMSubroundF( edx, ebp, eax, ebx, ecx, 3, 13) ASMSubroundF( ecx, edx, ebp, eax, ebx, 9, 11) ASMSubroundF( ebx, ecx, edx, ebp, eax, 11, 11) // advance data and store for next round AS2( add edi, 64 ) AS2( movd esi, mm1 ) // digest_ AS2( movd mm0, edi ) // store // now edi as tmp // c1 = digest_[1] + c1 + d2; AS2( add [esp + 8], edx ) // + d2 AS2( mov edi, [esi + 4] ) // digest_[1] AS2( add [esp + 8], edi ) // digest_[1] = digest_[2] + d1 + e2; AS2( mov [esi + 4], ebp ) // e2 AS2( mov edi, [esp + 12] ) // d1 AS2( add edi, [esi + 8] ) // digest_[2] AS2( add [esi + 4], edi ) // digest_[2] = digest_[3] + e1 + a2; AS2( mov [esi + 8], eax ) // a2 AS2( mov edi, [esp + 16] ) // e1 AS2( add edi, [esi + 12] ) // digest_[3] AS2( add [esi + 8], edi ) // digest_[3] = digest_[4] + a1 + b2; AS2( mov [esi + 12], ebx ) // b2 AS2( mov edi, [esp] ) // a1 AS2( add edi, [esi + 16] ) // digest_[4] AS2( add [esi + 12], edi ) // digest_[4] = digest_[0] + b1 + c2; AS2( mov [esi + 16], ecx ) // c2 AS2( mov edi, [esp + 4] ) // b1 AS2( add edi, [esi] ) // digest_[0] AS2( add [esi + 16], edi ) // digest_[0] = c1; AS2( mov edi, [esp + 8] ) // c1 AS2( mov [esi], edi ) // setup for loop back AS2( movd edx, mm2 ) // times AS2( movd edi, mm0 ) // data, already advanced AS1( dec edx ) AS1( jnz loopStart ) EPILOG()}#endif // DO_RIPEMD_ASM} // namespace TaoCrypt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -