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

📄 ripemd.cpp

📁 一个不错的关于手机模块程序This page contains everything that has changed in the history of DC++. Read this to fin
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        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 + -