SHA clean-up Intel assembler companion.
authorAndy Polyakov <appro@openssl.org>
Sun, 5 Sep 1999 14:17:42 +0000 (14:17 +0000)
committerAndy Polyakov <appro@openssl.org>
Sun, 5 Sep 1999 14:17:42 +0000 (14:17 +0000)
I've chosen to nest two functions in order to save about 4K. As a result
s1-win32.asm doesn't look right (nested PROC/ENDP SEGMENT/ENDS) and it's
probably impossible to compile. I assume I have to reconsider... But not
today...

crypto/sha/asm/s1-win32.asm
crypto/sha/asm/sha1-586.pl

index 61335666b9ca94995577565ea5525a9f684d8581..699afdb02231838e130aaf0bb13e590ae5eaed95 100644 (file)
         .486
 .model FLAT
 _TEXT  SEGMENT
-PUBLIC _sha1_block_x86
+PUBLIC _sha1_block_asm_data_order
 
-_sha1_block_x86 PROC NEAR
+_sha1_block_asm_data_order PROC NEAR
+       mov     ecx,            DWORD PTR 12[esp]
        push    esi
+       shl     ecx,            6
+       mov     esi,            DWORD PTR 12[esp]
        push    ebp
-       mov     eax,            DWORD PTR 20[esp]
-       mov     esi,            DWORD PTR 16[esp]
-       add     eax,            esi
-       mov     ebp,            DWORD PTR 12[esp]
+       add     ecx,            esi
        push    ebx
-       sub     eax,            64
+       mov     ebp,            DWORD PTR 16[esp]
        push    edi
-       mov     ebx,            DWORD PTR 4[ebp]
-       sub     esp,            72
        mov     edx,            DWORD PTR 12[ebp]
+       sub     esp,            108
        mov     edi,            DWORD PTR 16[ebp]
-       mov     ecx,            DWORD PTR 8[ebp]
-       mov     DWORD PTR 68[esp],eax
+       mov     ebx,            DWORD PTR 8[ebp]
+       mov     DWORD PTR 68[esp],ecx
        ; First we need to setup the X array
-       mov     eax,            DWORD PTR [esi]
 L000start:
        ; First, load the words onto the stack in network byte order
+       mov     eax,            DWORD PTR [esi]
+       mov     ecx,            DWORD PTR 4[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR [esp],eax
-       mov     eax,            DWORD PTR 4[esi]
-       bswap   eax
-       mov     DWORD PTR 4[esp],eax
+       mov     DWORD PTR 4[esp],ecx
        mov     eax,            DWORD PTR 8[esi]
+       mov     ecx,            DWORD PTR 12[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 8[esp],eax
-       mov     eax,            DWORD PTR 12[esi]
-       bswap   eax
-       mov     DWORD PTR 12[esp],eax
+       mov     DWORD PTR 12[esp],ecx
        mov     eax,            DWORD PTR 16[esi]
+       mov     ecx,            DWORD PTR 20[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 16[esp],eax
-       mov     eax,            DWORD PTR 20[esi]
-       bswap   eax
-       mov     DWORD PTR 20[esp],eax
+       mov     DWORD PTR 20[esp],ecx
        mov     eax,            DWORD PTR 24[esi]
+       mov     ecx,            DWORD PTR 28[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 24[esp],eax
-       mov     eax,            DWORD PTR 28[esi]
-       bswap   eax
-       mov     DWORD PTR 28[esp],eax
+       mov     DWORD PTR 28[esp],ecx
        mov     eax,            DWORD PTR 32[esi]
+       mov     ecx,            DWORD PTR 36[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 32[esp],eax
-       mov     eax,            DWORD PTR 36[esi]
-       bswap   eax
-       mov     DWORD PTR 36[esp],eax
+       mov     DWORD PTR 36[esp],ecx
        mov     eax,            DWORD PTR 40[esi]
+       mov     ecx,            DWORD PTR 44[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 40[esp],eax
-       mov     eax,            DWORD PTR 44[esi]
-       bswap   eax
-       mov     DWORD PTR 44[esp],eax
+       mov     DWORD PTR 44[esp],ecx
        mov     eax,            DWORD PTR 48[esi]
+       mov     ecx,            DWORD PTR 52[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 48[esp],eax
-       mov     eax,            DWORD PTR 52[esi]
-       bswap   eax
-       mov     DWORD PTR 52[esp],eax
+       mov     DWORD PTR 52[esp],ecx
        mov     eax,            DWORD PTR 56[esi]
+       mov     ecx,            DWORD PTR 60[esi]
        bswap   eax
+       bswap   ecx
        mov     DWORD PTR 56[esp],eax
-       mov     eax,            DWORD PTR 60[esi]
-       bswap   eax
-       mov     DWORD PTR 60[esp],eax
+       mov     DWORD PTR 60[esp],ecx
        ; We now have the X array on the stack
        ; starting at sp-4
-       mov     DWORD PTR 64[esp],esi
+       mov     DWORD PTR 132[esp],esi
+L001shortcut:
        ; 
        ; Start processing
        mov     eax,            DWORD PTR [ebp]
+       mov     ecx,            DWORD PTR 4[ebp]
        ; 00_15 0
-       mov     esi,            ecx
+       mov     esi,            ebx
        mov     ebp,            eax
        xor     esi,            edx
        rol     ebp,            5
-       and     esi,            ebx
+       and     esi,            ecx
        add     ebp,            edi
-       ror     ebx,            1
+       ror     ecx,            1
        mov     edi,            DWORD PTR [esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     esi,            edx
        lea     ebp,            DWORD PTR 1518500249[edi*1+ebp]
-       mov     edi,            ebx
+       mov     edi,            ecx
        add     esi,            ebp
-       xor     edi,            ecx
+       xor     edi,            ebx
        mov     ebp,            esi
        and     edi,            eax
        rol     ebp,            5
        add     ebp,            edx
        mov     edx,            DWORD PTR 4[esp]
        ror     eax,            1
-       xor     edi,            ecx
+       xor     edi,            ebx
        ror     eax,            1
        lea     ebp,            DWORD PTR 1518500249[edx*1+ebp]
        add     edi,            ebp
        ; 00_15 2
        mov     edx,            eax
        mov     ebp,            edi
-       xor     edx,            ebx
+       xor     edx,            ecx
        rol     ebp,            5
        and     edx,            esi
-       add     ebp,            ecx
+       add     ebp,            ebx
        ror     esi,            1
-       mov     ecx,            DWORD PTR 8[esp]
+       mov     ebx,            DWORD PTR 8[esp]
        ror     esi,            1
-       xor     edx,            ebx
-       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
-       mov     ecx,            esi
+       xor     edx,            ecx
+       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
+       mov     ebx,            esi
        add     edx,            ebp
-       xor     ecx,            eax
+       xor     ebx,            eax
        mov     ebp,            edx
-       and     ecx,            edi
+       and     ebx,            edi
        rol     ebp,            5
-       add     ebp,            ebx
-       mov     ebx,            DWORD PTR 12[esp]
+       add     ebp,            ecx
+       mov     ecx,            DWORD PTR 12[esp]
        ror     edi,            1
-       xor     ecx,            eax
+       xor     ebx,            eax
        ror     edi,            1
-       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
-       add     ecx,            ebp
+       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
+       add     ebx,            ebp
        ; 00_15 4
-       mov     ebx,            edi
-       mov     ebp,            ecx
-       xor     ebx,            esi
+       mov     ecx,            edi
+       mov     ebp,            ebx
+       xor     ecx,            esi
        rol     ebp,            5
-       and     ebx,            edx
+       and     ecx,            edx
        add     ebp,            eax
        ror     edx,            1
        mov     eax,            DWORD PTR 16[esp]
        ror     edx,            1
-       xor     ebx,            esi
+       xor     ecx,            esi
        lea     ebp,            DWORD PTR 1518500249[eax*1+ebp]
        mov     eax,            edx
-       add     ebx,            ebp
+       add     ecx,            ebp
        xor     eax,            edi
-       mov     ebp,            ebx
-       and     eax,            ecx
+       mov     ebp,            ecx
+       and     eax,            ebx
        rol     ebp,            5
        add     ebp,            esi
        mov     esi,            DWORD PTR 20[esp]
-       ror     ecx,            1
+       ror     ebx,            1
        xor     eax,            edi
-       ror     ecx,            1
+       ror     ebx,            1
        lea     ebp,            DWORD PTR 1518500249[esi*1+ebp]
        add     eax,            ebp
        ; 00_15 6
-       mov     esi,            ecx
+       mov     esi,            ebx
        mov     ebp,            eax
        xor     esi,            edx
        rol     ebp,            5
-       and     esi,            ebx
+       and     esi,            ecx
        add     ebp,            edi
-       ror     ebx,            1
+       ror     ecx,            1
        mov     edi,            DWORD PTR 24[esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     esi,            edx
        lea     ebp,            DWORD PTR 1518500249[edi*1+ebp]
-       mov     edi,            ebx
+       mov     edi,            ecx
        add     esi,            ebp
-       xor     edi,            ecx
+       xor     edi,            ebx
        mov     ebp,            esi
        and     edi,            eax
        rol     ebp,            5
        add     ebp,            edx
        mov     edx,            DWORD PTR 28[esp]
        ror     eax,            1
-       xor     edi,            ecx
+       xor     edi,            ebx
        ror     eax,            1
        lea     ebp,            DWORD PTR 1518500249[edx*1+ebp]
        add     edi,            ebp
        ; 00_15 8
        mov     edx,            eax
        mov     ebp,            edi
-       xor     edx,            ebx
+       xor     edx,            ecx
        rol     ebp,            5
        and     edx,            esi
-       add     ebp,            ecx
+       add     ebp,            ebx
        ror     esi,            1
-       mov     ecx,            DWORD PTR 32[esp]
+       mov     ebx,            DWORD PTR 32[esp]
        ror     esi,            1
-       xor     edx,            ebx
-       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
-       mov     ecx,            esi
+       xor     edx,            ecx
+       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
+       mov     ebx,            esi
        add     edx,            ebp
-       xor     ecx,            eax
+       xor     ebx,            eax
        mov     ebp,            edx
-       and     ecx,            edi
+       and     ebx,            edi
        rol     ebp,            5
-       add     ebp,            ebx
-       mov     ebx,            DWORD PTR 36[esp]
+       add     ebp,            ecx
+       mov     ecx,            DWORD PTR 36[esp]
        ror     edi,            1
-       xor     ecx,            eax
+       xor     ebx,            eax
        ror     edi,            1
-       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
-       add     ecx,            ebp
+       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
+       add     ebx,            ebp
        ; 00_15 10
-       mov     ebx,            edi
-       mov     ebp,            ecx
-       xor     ebx,            esi
+       mov     ecx,            edi
+       mov     ebp,            ebx
+       xor     ecx,            esi
        rol     ebp,            5
-       and     ebx,            edx
+       and     ecx,            edx
        add     ebp,            eax
        ror     edx,            1
        mov     eax,            DWORD PTR 40[esp]
        ror     edx,            1
-       xor     ebx,            esi
+       xor     ecx,            esi
        lea     ebp,            DWORD PTR 1518500249[eax*1+ebp]
        mov     eax,            edx
-       add     ebx,            ebp
+       add     ecx,            ebp
        xor     eax,            edi
-       mov     ebp,            ebx
-       and     eax,            ecx
+       mov     ebp,            ecx
+       and     eax,            ebx
        rol     ebp,            5
        add     ebp,            esi
        mov     esi,            DWORD PTR 44[esp]
-       ror     ecx,            1
+       ror     ebx,            1
        xor     eax,            edi
-       ror     ecx,            1
+       ror     ebx,            1
        lea     ebp,            DWORD PTR 1518500249[esi*1+ebp]
        add     eax,            ebp
        ; 00_15 12
-       mov     esi,            ecx
+       mov     esi,            ebx
        mov     ebp,            eax
        xor     esi,            edx
        rol     ebp,            5
-       and     esi,            ebx
+       and     esi,            ecx
        add     ebp,            edi
-       ror     ebx,            1
+       ror     ecx,            1
        mov     edi,            DWORD PTR 48[esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     esi,            edx
        lea     ebp,            DWORD PTR 1518500249[edi*1+ebp]
-       mov     edi,            ebx
+       mov     edi,            ecx
        add     esi,            ebp
-       xor     edi,            ecx
+       xor     edi,            ebx
        mov     ebp,            esi
        and     edi,            eax
        rol     ebp,            5
        add     ebp,            edx
        mov     edx,            DWORD PTR 52[esp]
        ror     eax,            1
-       xor     edi,            ecx
+       xor     edi,            ebx
        ror     eax,            1
        lea     ebp,            DWORD PTR 1518500249[edx*1+ebp]
        add     edi,            ebp
        ; 00_15 14
        mov     edx,            eax
        mov     ebp,            edi
-       xor     edx,            ebx
+       xor     edx,            ecx
        rol     ebp,            5
        and     edx,            esi
-       add     ebp,            ecx
+       add     ebp,            ebx
        ror     esi,            1
-       mov     ecx,            DWORD PTR 56[esp]
+       mov     ebx,            DWORD PTR 56[esp]
        ror     esi,            1
-       xor     edx,            ebx
-       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
-       mov     ecx,            esi
+       xor     edx,            ecx
+       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
+       mov     ebx,            esi
        add     edx,            ebp
-       xor     ecx,            eax
+       xor     ebx,            eax
        mov     ebp,            edx
-       and     ecx,            edi
+       and     ebx,            edi
        rol     ebp,            5
-       add     ebp,            ebx
-       mov     ebx,            DWORD PTR 60[esp]
+       add     ebp,            ecx
+       mov     ecx,            DWORD PTR 60[esp]
        ror     edi,            1
-       xor     ecx,            eax
+       xor     ebx,            eax
        ror     edi,            1
-       lea     ebp,            DWORD PTR 1518500249[ebx*1+ebp]
-       add     ecx,            ebp
+       lea     ebp,            DWORD PTR 1518500249[ecx*1+ebp]
+       add     ebx,            ebp
        ; 16_19 16
        nop
        mov     ebp,            DWORD PTR [esp]
-       mov     ebx,            DWORD PTR 8[esp]
-       xor     ebx,            ebp
+       mov     ecx,            DWORD PTR 8[esp]
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edi
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            esi
-       mov     DWORD PTR [esp],ebx
+       mov     DWORD PTR [esp],ecx
        and     ebp,            edx
-       lea     ebx,            DWORD PTR 1518500249[eax*1+ebx]
+       lea     ecx,            DWORD PTR 1518500249[eax*1+ecx]
        xor     ebp,            esi
-       mov     eax,            ecx
-       add     ebx,            ebp
+       mov     eax,            ebx
+       add     ecx,            ebp
        rol     eax,            5
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        mov     eax,            DWORD PTR 4[esp]
        mov     ebp,            DWORD PTR 12[esp]
        xor     eax,            ebp
@@ -316,14 +317,14 @@ L000start:
        mov     ebp,            edx
        xor     ebp,            edi
        mov     DWORD PTR 4[esp],eax
-       and     ebp,            ecx
+       and     ebp,            ebx
        lea     eax,            DWORD PTR 1518500249[esi*1+eax]
        xor     ebp,            edi
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            ebp
        ; 16_19 18
        mov     ebp,            DWORD PTR 8[esp]
@@ -333,17 +334,17 @@ L000start:
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 60[esp]
        xor     esi,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     esi,            1
        xor     ebp,            edx
        mov     DWORD PTR 8[esp],esi
-       and     ebp,            ebx
+       and     ebp,            ecx
        lea     esi,            DWORD PTR 1518500249[edi*1+esi]
        xor     ebp,            edx
        mov     edi,            eax
        add     esi,            ebp
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        mov     edi,            DWORD PTR 12[esp]
        mov     ebp,            DWORD PTR 20[esp]
@@ -351,15 +352,15 @@ L000start:
        mov     ebp,            DWORD PTR 44[esp]
        xor     edi,            ebp
        mov     ebp,            DWORD PTR [esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     edi,            ebp
        rol     edi,            1
-       mov     ebp,            ebx
-       xor     ebp,            ecx
+       mov     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 12[esp],edi
        and     ebp,            eax
        lea     edi,            DWORD PTR 1518500249[edx*1+edi]
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     edx,            esi
        rol     edx,            5
        ror     eax,            1
@@ -378,54 +379,54 @@ L000start:
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 16[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 1859775393[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 1859775393[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 21
-       mov     ecx,            DWORD PTR 20[esp]
+       mov     ebx,            DWORD PTR 20[esp]
        mov     ebp,            DWORD PTR 28[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 8[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 20[esp],ecx
+       mov     DWORD PTR 20[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 1859775393[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 1859775393[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 22
-       mov     ebx,            DWORD PTR 24[esp]
+       mov     ecx,            DWORD PTR 24[esp]
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 56[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 12[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR 24[esp],ebx
+       mov     DWORD PTR 24[esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 1859775393[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 1859775393[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 23
        mov     eax,            DWORD PTR 28[esp]
        mov     ebp,            DWORD PTR 36[esp]
@@ -434,17 +435,17 @@ L000start:
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 16[esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 28[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 1859775393[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 24
        mov     esi,            DWORD PTR 32[esp]
@@ -454,17 +455,17 @@ L000start:
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 20[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 32[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 1859775393[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 25
        mov     edi,            DWORD PTR 36[esp]
@@ -476,9 +477,9 @@ L000start:
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 36[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 36[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 1859775393[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -498,54 +499,54 @@ L000start:
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 40[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 1859775393[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 1859775393[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 27
-       mov     ecx,            DWORD PTR 44[esp]
+       mov     ebx,            DWORD PTR 44[esp]
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 12[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 44[esp],ecx
+       mov     DWORD PTR 44[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 1859775393[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 1859775393[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 28
-       mov     ebx,            DWORD PTR 48[esp]
+       mov     ecx,            DWORD PTR 48[esp]
        mov     ebp,            DWORD PTR 56[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 16[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 36[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR 48[esp],ebx
+       mov     DWORD PTR 48[esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 1859775393[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 1859775393[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 29
        mov     eax,            DWORD PTR 52[esp]
        mov     ebp,            DWORD PTR 60[esp]
@@ -554,17 +555,17 @@ L000start:
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 40[esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 52[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 1859775393[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 30
        mov     esi,            DWORD PTR 56[esp]
@@ -574,17 +575,17 @@ L000start:
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 44[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 56[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 1859775393[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 31
        mov     edi,            DWORD PTR 60[esp]
@@ -596,9 +597,9 @@ L000start:
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 60[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 60[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 1859775393[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -618,54 +619,54 @@ L000start:
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR [esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 1859775393[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 1859775393[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 33
-       mov     ecx,            DWORD PTR 4[esp]
+       mov     ebx,            DWORD PTR 4[esp]
        mov     ebp,            DWORD PTR 12[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 36[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 56[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 4[esp],ecx
+       mov     DWORD PTR 4[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 1859775393[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 1859775393[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 34
-       mov     ebx,            DWORD PTR 8[esp]
+       mov     ecx,            DWORD PTR 8[esp]
        mov     ebp,            DWORD PTR 16[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 40[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 60[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR 8[esp],ebx
+       mov     DWORD PTR 8[esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 1859775393[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 1859775393[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 35
        mov     eax,            DWORD PTR 12[esp]
        mov     ebp,            DWORD PTR 20[esp]
@@ -674,17 +675,17 @@ L000start:
        xor     eax,            ebp
        mov     ebp,            DWORD PTR [esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 12[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 1859775393[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 36
        mov     esi,            DWORD PTR 16[esp]
@@ -694,17 +695,17 @@ L000start:
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 4[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 16[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 1859775393[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 37
        mov     edi,            DWORD PTR 20[esp]
@@ -716,9 +717,9 @@ L000start:
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 20[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 20[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 1859775393[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -738,57 +739,57 @@ L000start:
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 24[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 1859775393[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 1859775393[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 39
-       mov     ecx,            DWORD PTR 28[esp]
+       mov     ebx,            DWORD PTR 28[esp]
        mov     ebp,            DWORD PTR 36[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 60[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 16[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 28[esp],ecx
+       mov     DWORD PTR 28[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 1859775393[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 1859775393[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 40_59 40
-       mov     ebx,            DWORD PTR 32[esp]
+       mov     ecx,            DWORD PTR 32[esp]
        mov     ebp,            DWORD PTR 40[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR [esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 20[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        or      ebp,            edi
-       mov     DWORD PTR 32[esp],ebx
+       mov     DWORD PTR 32[esp],ecx
        and     ebp,            esi
-       lea     ebx,            DWORD PTR 2400959708[eax*1+ebx]
+       lea     ecx,            DWORD PTR 2400959708[eax*1+ecx]
        mov     eax,            edx
        ror     edx,            1
        and     eax,            edi
        or      ebp,            eax
-       mov     eax,            ecx
+       mov     eax,            ebx
        rol     eax,            5
        add     ebp,            eax
        mov     eax,            DWORD PTR 36[esp]
-       add     ebx,            ebp
+       add     ecx,            ebp
        mov     ebp,            DWORD PTR 44[esp]
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 4[esp]
@@ -797,19 +798,19 @@ L000start:
        ror     edx,            1
        xor     eax,            ebp
        rol     eax,            1
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        mov     DWORD PTR 36[esp],eax
        or      ebp,            edx
        lea     eax,            DWORD PTR 2400959708[esi*1+eax]
-       mov     esi,            ecx
+       mov     esi,            ebx
        and     ebp,            edi
        and     esi,            edx
        or      ebp,            esi
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     ebp,            esi
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            ebp
        ; 40_59 41
        ; 40_59 42
@@ -820,15 +821,15 @@ L000start:
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 28[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       or      ebp,            ecx
+       or      ebp,            ebx
        mov     DWORD PTR 40[esp],esi
        and     ebp,            edx
        lea     esi,            DWORD PTR 2400959708[edi*1+esi]
-       mov     edi,            ebx
-       ror     ebx,            1
-       and     edi,            ecx
+       mov     edi,            ecx
+       ror     ecx,            1
+       and     edi,            ebx
        or      ebp,            edi
        mov     edi,            eax
        rol     edi,            5
@@ -840,16 +841,16 @@ L000start:
        mov     ebp,            DWORD PTR 12[esp]
        xor     edi,            ebp
        mov     ebp,            DWORD PTR 32[esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     edi,            ebp
        rol     edi,            1
        mov     ebp,            eax
        mov     DWORD PTR 44[esp],edi
-       or      ebp,            ebx
+       or      ebp,            ecx
        lea     edi,            DWORD PTR 2400959708[edx*1+edi]
        mov     edx,            eax
-       and     ebp,            ecx
-       and     edx,            ebx
+       and     ebp,            ebx
+       and     edx,            ecx
        or      ebp,            edx
        mov     edx,            esi
        rol     edx,            5
@@ -870,63 +871,63 @@ L000start:
        rol     edx,            1
        or      ebp,            eax
        mov     DWORD PTR 48[esp],edx
-       and     ebp,            ebx
-       lea     edx,            DWORD PTR 2400959708[ecx*1+edx]
-       mov     ecx,            esi
+       and     ebp,            ecx
+       lea     edx,            DWORD PTR 2400959708[ebx*1+edx]
+       mov     ebx,            esi
        ror     esi,            1
-       and     ecx,            eax
-       or      ebp,            ecx
-       mov     ecx,            edi
-       rol     ecx,            5
-       add     ebp,            ecx
-       mov     ecx,            DWORD PTR 52[esp]
+       and     ebx,            eax
+       or      ebp,            ebx
+       mov     ebx,            edi
+       rol     ebx,            5
+       add     ebp,            ebx
+       mov     ebx,            DWORD PTR 52[esp]
        add     edx,            ebp
        mov     ebp,            DWORD PTR 60[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 20[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 40[esp]
        ror     esi,            1
-       xor     ecx,            ebp
-       rol     ecx,            1
+       xor     ebx,            ebp
+       rol     ebx,            1
        mov     ebp,            edi
-       mov     DWORD PTR 52[esp],ecx
+       mov     DWORD PTR 52[esp],ebx
        or      ebp,            esi
-       lea     ecx,            DWORD PTR 2400959708[ebx*1+ecx]
-       mov     ebx,            edi
+       lea     ebx,            DWORD PTR 2400959708[ecx*1+ebx]
+       mov     ecx,            edi
        and     ebp,            eax
-       and     ebx,            esi
-       or      ebp,            ebx
-       mov     ebx,            edx
-       rol     ebx,            5
+       and     ecx,            esi
+       or      ebp,            ecx
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebp,            ebx
+       add     ebp,            ecx
        ror     edi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ; 40_59 45
        ; 40_59 46
-       mov     ebx,            DWORD PTR 56[esp]
+       mov     ecx,            DWORD PTR 56[esp]
        mov     ebp,            DWORD PTR [esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 24[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 44[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        or      ebp,            edi
-       mov     DWORD PTR 56[esp],ebx
+       mov     DWORD PTR 56[esp],ecx
        and     ebp,            esi
-       lea     ebx,            DWORD PTR 2400959708[eax*1+ebx]
+       lea     ecx,            DWORD PTR 2400959708[eax*1+ecx]
        mov     eax,            edx
        ror     edx,            1
        and     eax,            edi
        or      ebp,            eax
-       mov     eax,            ecx
+       mov     eax,            ebx
        rol     eax,            5
        add     ebp,            eax
        mov     eax,            DWORD PTR 60[esp]
-       add     ebx,            ebp
+       add     ecx,            ebp
        mov     ebp,            DWORD PTR 4[esp]
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 28[esp]
@@ -935,19 +936,19 @@ L000start:
        ror     edx,            1
        xor     eax,            ebp
        rol     eax,            1
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        mov     DWORD PTR 60[esp],eax
        or      ebp,            edx
        lea     eax,            DWORD PTR 2400959708[esi*1+eax]
-       mov     esi,            ecx
+       mov     esi,            ebx
        and     ebp,            edi
        and     esi,            edx
        or      ebp,            esi
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     ebp,            esi
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            ebp
        ; 40_59 47
        ; 40_59 48
@@ -958,15 +959,15 @@ L000start:
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 52[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       or      ebp,            ecx
+       or      ebp,            ebx
        mov     DWORD PTR [esp],esi
        and     ebp,            edx
        lea     esi,            DWORD PTR 2400959708[edi*1+esi]
-       mov     edi,            ebx
-       ror     ebx,            1
-       and     edi,            ecx
+       mov     edi,            ecx
+       ror     ecx,            1
+       and     edi,            ebx
        or      ebp,            edi
        mov     edi,            eax
        rol     edi,            5
@@ -978,16 +979,16 @@ L000start:
        mov     ebp,            DWORD PTR 36[esp]
        xor     edi,            ebp
        mov     ebp,            DWORD PTR 56[esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     edi,            ebp
        rol     edi,            1
        mov     ebp,            eax
        mov     DWORD PTR 4[esp],edi
-       or      ebp,            ebx
+       or      ebp,            ecx
        lea     edi,            DWORD PTR 2400959708[edx*1+edi]
        mov     edx,            eax
-       and     ebp,            ecx
-       and     edx,            ebx
+       and     ebp,            ebx
+       and     edx,            ecx
        or      ebp,            edx
        mov     edx,            esi
        rol     edx,            5
@@ -1008,63 +1009,63 @@ L000start:
        rol     edx,            1
        or      ebp,            eax
        mov     DWORD PTR 8[esp],edx
-       and     ebp,            ebx
-       lea     edx,            DWORD PTR 2400959708[ecx*1+edx]
-       mov     ecx,            esi
+       and     ebp,            ecx
+       lea     edx,            DWORD PTR 2400959708[ebx*1+edx]
+       mov     ebx,            esi
        ror     esi,            1
-       and     ecx,            eax
-       or      ebp,            ecx
-       mov     ecx,            edi
-       rol     ecx,            5
-       add     ebp,            ecx
-       mov     ecx,            DWORD PTR 12[esp]
+       and     ebx,            eax
+       or      ebp,            ebx
+       mov     ebx,            edi
+       rol     ebx,            5
+       add     ebp,            ebx
+       mov     ebx,            DWORD PTR 12[esp]
        add     edx,            ebp
        mov     ebp,            DWORD PTR 20[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 44[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR [esp]
        ror     esi,            1
-       xor     ecx,            ebp
-       rol     ecx,            1
+       xor     ebx,            ebp
+       rol     ebx,            1
        mov     ebp,            edi
-       mov     DWORD PTR 12[esp],ecx
+       mov     DWORD PTR 12[esp],ebx
        or      ebp,            esi
-       lea     ecx,            DWORD PTR 2400959708[ebx*1+ecx]
-       mov     ebx,            edi
+       lea     ebx,            DWORD PTR 2400959708[ecx*1+ebx]
+       mov     ecx,            edi
        and     ebp,            eax
-       and     ebx,            esi
-       or      ebp,            ebx
-       mov     ebx,            edx
-       rol     ebx,            5
+       and     ecx,            esi
+       or      ebp,            ecx
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebp,            ebx
+       add     ebp,            ecx
        ror     edi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ; 40_59 51
        ; 40_59 52
-       mov     ebx,            DWORD PTR 16[esp]
+       mov     ecx,            DWORD PTR 16[esp]
        mov     ebp,            DWORD PTR 24[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 48[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 4[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        or      ebp,            edi
-       mov     DWORD PTR 16[esp],ebx
+       mov     DWORD PTR 16[esp],ecx
        and     ebp,            esi
-       lea     ebx,            DWORD PTR 2400959708[eax*1+ebx]
+       lea     ecx,            DWORD PTR 2400959708[eax*1+ecx]
        mov     eax,            edx
        ror     edx,            1
        and     eax,            edi
        or      ebp,            eax
-       mov     eax,            ecx
+       mov     eax,            ebx
        rol     eax,            5
        add     ebp,            eax
        mov     eax,            DWORD PTR 20[esp]
-       add     ebx,            ebp
+       add     ecx,            ebp
        mov     ebp,            DWORD PTR 28[esp]
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 52[esp]
@@ -1073,19 +1074,19 @@ L000start:
        ror     edx,            1
        xor     eax,            ebp
        rol     eax,            1
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        mov     DWORD PTR 20[esp],eax
        or      ebp,            edx
        lea     eax,            DWORD PTR 2400959708[esi*1+eax]
-       mov     esi,            ecx
+       mov     esi,            ebx
        and     ebp,            edi
        and     esi,            edx
        or      ebp,            esi
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     ebp,            esi
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            ebp
        ; 40_59 53
        ; 40_59 54
@@ -1096,15 +1097,15 @@ L000start:
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 12[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       or      ebp,            ecx
+       or      ebp,            ebx
        mov     DWORD PTR 24[esp],esi
        and     ebp,            edx
        lea     esi,            DWORD PTR 2400959708[edi*1+esi]
-       mov     edi,            ebx
-       ror     ebx,            1
-       and     edi,            ecx
+       mov     edi,            ecx
+       ror     ecx,            1
+       and     edi,            ebx
        or      ebp,            edi
        mov     edi,            eax
        rol     edi,            5
@@ -1116,16 +1117,16 @@ L000start:
        mov     ebp,            DWORD PTR 60[esp]
        xor     edi,            ebp
        mov     ebp,            DWORD PTR 16[esp]
-       ror     ebx,            1
+       ror     ecx,            1
        xor     edi,            ebp
        rol     edi,            1
        mov     ebp,            eax
        mov     DWORD PTR 28[esp],edi
-       or      ebp,            ebx
+       or      ebp,            ecx
        lea     edi,            DWORD PTR 2400959708[edx*1+edi]
        mov     edx,            eax
-       and     ebp,            ecx
-       and     edx,            ebx
+       and     ebp,            ebx
+       and     edx,            ecx
        or      ebp,            edx
        mov     edx,            esi
        rol     edx,            5
@@ -1146,63 +1147,63 @@ L000start:
        rol     edx,            1
        or      ebp,            eax
        mov     DWORD PTR 32[esp],edx
-       and     ebp,            ebx
-       lea     edx,            DWORD PTR 2400959708[ecx*1+edx]
-       mov     ecx,            esi
+       and     ebp,            ecx
+       lea     edx,            DWORD PTR 2400959708[ebx*1+edx]
+       mov     ebx,            esi
        ror     esi,            1
-       and     ecx,            eax
-       or      ebp,            ecx
-       mov     ecx,            edi
-       rol     ecx,            5
-       add     ebp,            ecx
-       mov     ecx,            DWORD PTR 36[esp]
+       and     ebx,            eax
+       or      ebp,            ebx
+       mov     ebx,            edi
+       rol     ebx,            5
+       add     ebp,            ebx
+       mov     ebx,            DWORD PTR 36[esp]
        add     edx,            ebp
        mov     ebp,            DWORD PTR 44[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 4[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 24[esp]
        ror     esi,            1
-       xor     ecx,            ebp
-       rol     ecx,            1
+       xor     ebx,            ebp
+       rol     ebx,            1
        mov     ebp,            edi
-       mov     DWORD PTR 36[esp],ecx
+       mov     DWORD PTR 36[esp],ebx
        or      ebp,            esi
-       lea     ecx,            DWORD PTR 2400959708[ebx*1+ecx]
-       mov     ebx,            edi
+       lea     ebx,            DWORD PTR 2400959708[ecx*1+ebx]
+       mov     ecx,            edi
        and     ebp,            eax
-       and     ebx,            esi
-       or      ebp,            ebx
-       mov     ebx,            edx
-       rol     ebx,            5
+       and     ecx,            esi
+       or      ebp,            ecx
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebp,            ebx
+       add     ebp,            ecx
        ror     edi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ; 40_59 57
        ; 40_59 58
-       mov     ebx,            DWORD PTR 40[esp]
+       mov     ecx,            DWORD PTR 40[esp]
        mov     ebp,            DWORD PTR 48[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 8[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 28[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        or      ebp,            edi
-       mov     DWORD PTR 40[esp],ebx
+       mov     DWORD PTR 40[esp],ecx
        and     ebp,            esi
-       lea     ebx,            DWORD PTR 2400959708[eax*1+ebx]
+       lea     ecx,            DWORD PTR 2400959708[eax*1+ecx]
        mov     eax,            edx
        ror     edx,            1
        and     eax,            edi
        or      ebp,            eax
-       mov     eax,            ecx
+       mov     eax,            ebx
        rol     eax,            5
        add     ebp,            eax
        mov     eax,            DWORD PTR 44[esp]
-       add     ebx,            ebp
+       add     ecx,            ebp
        mov     ebp,            DWORD PTR 52[esp]
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 12[esp]
@@ -1211,19 +1212,19 @@ L000start:
        ror     edx,            1
        xor     eax,            ebp
        rol     eax,            1
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        mov     DWORD PTR 44[esp],eax
        or      ebp,            edx
        lea     eax,            DWORD PTR 2400959708[esi*1+eax]
-       mov     esi,            ecx
+       mov     esi,            ebx
        and     ebp,            edi
        and     esi,            edx
        or      ebp,            esi
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     ebp,            esi
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            ebp
        ; 40_59 59
        ; 20_39 60
@@ -1234,17 +1235,17 @@ L000start:
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 36[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 48[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 3395469782[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 61
        mov     edi,            DWORD PTR 52[esp]
@@ -1256,9 +1257,9 @@ L000start:
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 52[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 52[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 3395469782[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -1278,54 +1279,54 @@ L000start:
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 56[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 3395469782[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 3395469782[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 63
-       mov     ecx,            DWORD PTR 60[esp]
+       mov     ebx,            DWORD PTR 60[esp]
        mov     ebp,            DWORD PTR 4[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 28[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 48[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 60[esp],ecx
+       mov     DWORD PTR 60[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 3395469782[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 3395469782[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 64
-       mov     ebx,            DWORD PTR [esp]
+       mov     ecx,            DWORD PTR [esp]
        mov     ebp,            DWORD PTR 8[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR [esp],ebx
+       mov     DWORD PTR [esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 3395469782[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 3395469782[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 65
        mov     eax,            DWORD PTR 4[esp]
        mov     ebp,            DWORD PTR 12[esp]
@@ -1334,17 +1335,17 @@ L000start:
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 56[esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 4[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 3395469782[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 66
        mov     esi,            DWORD PTR 8[esp]
@@ -1354,17 +1355,17 @@ L000start:
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 60[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 8[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 3395469782[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 67
        mov     edi,            DWORD PTR 12[esp]
@@ -1376,9 +1377,9 @@ L000start:
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 12[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 12[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 3395469782[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -1398,54 +1399,54 @@ L000start:
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 16[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 3395469782[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 3395469782[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 69
-       mov     ecx,            DWORD PTR 20[esp]
+       mov     ebx,            DWORD PTR 20[esp]
        mov     ebp,            DWORD PTR 28[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 8[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 20[esp],ecx
+       mov     DWORD PTR 20[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 3395469782[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 3395469782[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 70
-       mov     ebx,            DWORD PTR 24[esp]
+       mov     ecx,            DWORD PTR 24[esp]
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 56[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 12[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR 24[esp],ebx
+       mov     DWORD PTR 24[esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 3395469782[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 3395469782[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 71
        mov     eax,            DWORD PTR 28[esp]
        mov     ebp,            DWORD PTR 36[esp]
@@ -1454,17 +1455,17 @@ L000start:
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 16[esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 28[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 3395469782[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 72
        mov     esi,            DWORD PTR 32[esp]
@@ -1474,17 +1475,17 @@ L000start:
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 20[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 32[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 3395469782[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 73
        mov     edi,            DWORD PTR 36[esp]
@@ -1496,9 +1497,9 @@ L000start:
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 36[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 36[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 3395469782[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
@@ -1518,54 +1519,54 @@ L000start:
        rol     edx,            1
        xor     ebp,            eax
        mov     DWORD PTR 40[esp],edx
-       xor     ebp,            ebx
-       lea     edx,            DWORD PTR 3395469782[ecx*1+edx]
-       mov     ecx,            edi
-       rol     ecx,            5
+       xor     ebp,            ecx
+       lea     edx,            DWORD PTR 3395469782[ebx*1+edx]
+       mov     ebx,            edi
+       rol     ebx,            5
        ror     esi,            1
-       add     ecx,            ebp
+       add     ebx,            ebp
        ror     esi,            1
-       add     edx,            ecx
+       add     edx,            ebx
        ; 20_39 75
-       mov     ecx,            DWORD PTR 44[esp]
+       mov     ebx,            DWORD PTR 44[esp]
        mov     ebp,            DWORD PTR 52[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 12[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            DWORD PTR 32[esp]
-       xor     ecx,            ebp
+       xor     ebx,            ebp
        mov     ebp,            edi
-       rol     ecx,            1
+       rol     ebx,            1
        xor     ebp,            esi
-       mov     DWORD PTR 44[esp],ecx
+       mov     DWORD PTR 44[esp],ebx
        xor     ebp,            eax
-       lea     ecx,            DWORD PTR 3395469782[ebx*1+ecx]
-       mov     ebx,            edx
-       rol     ebx,            5
+       lea     ebx,            DWORD PTR 3395469782[ecx*1+ebx]
+       mov     ecx,            edx
+       rol     ecx,            5
        ror     edi,            1
-       add     ebx,            ebp
+       add     ecx,            ebp
        ror     edi,            1
-       add     ecx,            ebx
+       add     ebx,            ecx
        ; 20_39 76
-       mov     ebx,            DWORD PTR 48[esp]
+       mov     ecx,            DWORD PTR 48[esp]
        mov     ebp,            DWORD PTR 56[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 16[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            DWORD PTR 36[esp]
-       xor     ebx,            ebp
+       xor     ecx,            ebp
        mov     ebp,            edx
-       rol     ebx,            1
+       rol     ecx,            1
        xor     ebp,            edi
-       mov     DWORD PTR 48[esp],ebx
+       mov     DWORD PTR 48[esp],ecx
        xor     ebp,            esi
-       lea     ebx,            DWORD PTR 3395469782[eax*1+ebx]
-       mov     eax,            ecx
+       lea     ecx,            DWORD PTR 3395469782[eax*1+ecx]
+       mov     eax,            ebx
        rol     eax,            5
        ror     edx,            1
        add     eax,            ebp
        ror     edx,            1
-       add     ebx,            eax
+       add     ecx,            eax
        ; 20_39 77
        mov     eax,            DWORD PTR 52[esp]
        mov     ebp,            DWORD PTR 60[esp]
@@ -1574,17 +1575,17 @@ L000start:
        xor     eax,            ebp
        mov     ebp,            DWORD PTR 40[esp]
        xor     eax,            ebp
-       mov     ebp,            ecx
+       mov     ebp,            ebx
        rol     eax,            1
        xor     ebp,            edx
        mov     DWORD PTR 52[esp],eax
        xor     ebp,            edi
        lea     eax,            DWORD PTR 3395469782[esi*1+eax]
-       mov     esi,            ebx
+       mov     esi,            ecx
        rol     esi,            5
-       ror     ecx,            1
+       ror     ebx,            1
        add     esi,            ebp
-       ror     ecx,            1
+       ror     ebx,            1
        add     eax,            esi
        ; 20_39 78
        mov     esi,            DWORD PTR 56[esp]
@@ -1594,17 +1595,17 @@ L000start:
        xor     esi,            ebp
        mov     ebp,            DWORD PTR 44[esp]
        xor     esi,            ebp
-       mov     ebp,            ebx
+       mov     ebp,            ecx
        rol     esi,            1
-       xor     ebp,            ecx
+       xor     ebp,            ebx
        mov     DWORD PTR 56[esp],esi
        xor     ebp,            edx
        lea     esi,            DWORD PTR 3395469782[edi*1+esi]
        mov     edi,            eax
        rol     edi,            5
-       ror     ebx,            1
+       ror     ecx,            1
        add     edi,            ebp
-       ror     ebx,            1
+       ror     ecx,            1
        add     esi,            edi
        ; 20_39 79
        mov     edi,            DWORD PTR 60[esp]
@@ -1616,49 +1617,100 @@ L000start:
        xor     edi,            ebp
        mov     ebp,            eax
        rol     edi,            1
-       xor     ebp,            ebx
-       mov     DWORD PTR 60[esp],edi
        xor     ebp,            ecx
+       mov     DWORD PTR 60[esp],edi
+       xor     ebp,            ebx
        lea     edi,            DWORD PTR 3395469782[edx*1+edi]
        mov     edx,            esi
        rol     edx,            5
        add     edx,            ebp
-       mov     ebp,            DWORD PTR 92[esp]
+       mov     ebp,            DWORD PTR 128[esp]
        ror     eax,            1
        add     edi,            edx
        ror     eax,            1
        ; End processing
        ; 
        mov     edx,            DWORD PTR 12[ebp]
-       add     edx,            ebx
-       mov     ebx,            DWORD PTR 4[ebp]
-       add     ebx,            esi
+       add     edx,            ecx
+       mov     ecx,            DWORD PTR 4[ebp]
+       add     ecx,            esi
        mov     esi,            eax
        mov     eax,            DWORD PTR [ebp]
        mov     DWORD PTR 12[ebp],edx
        add     eax,            edi
        mov     edi,            DWORD PTR 16[ebp]
-       add     edi,            ecx
-       mov     ecx,            DWORD PTR 8[ebp]
-       add     ecx,            esi
+       add     edi,            ebx
+       mov     ebx,            DWORD PTR 8[ebp]
+       add     ebx,            esi
        mov     DWORD PTR [ebp],eax
-       mov     esi,            DWORD PTR 64[esp]
-       mov     DWORD PTR 8[ebp],ecx
+       mov     esi,            DWORD PTR 132[esp]
+       mov     DWORD PTR 8[ebp],ebx
        add     esi,            64
        mov     eax,            DWORD PTR 68[esp]
        mov     DWORD PTR 16[ebp],edi
-       cmp     eax,            esi
-       mov     DWORD PTR 4[ebp],ebx
-       jl      $L001end
-       mov     eax,            DWORD PTR [esi]
-       jmp     L000start
-$L001end:
-       add     esp,            72
+       cmp     esi,            eax
+       mov     DWORD PTR 4[ebp],ecx
+       jl      L000start
+       add     esp,            108
        pop     edi
        pop     ebx
        pop     ebp
        pop     esi
        ret
-_sha1_block_x86 ENDP
+_TEXT  SEGMENT
+PUBLIC _sha1_block_asm_host_order
+
+_sha1_block_asm_host_order PROC NEAR
+       mov     ecx,            DWORD PTR 12[esp]
+       push    esi
+       shl     ecx,            6
+       mov     esi,            DWORD PTR 12[esp]
+       push    ebp
+       add     ecx,            esi
+       push    ebx
+       mov     ebp,            DWORD PTR 16[esp]
+       push    edi
+       mov     edx,            DWORD PTR 12[ebp]
+       sub     esp,            108
+       mov     edi,            DWORD PTR 16[ebp]
+       mov     ebx,            DWORD PTR 8[ebp]
+       mov     DWORD PTR 68[esp],ecx
+       ; First we need to setup the X array
+       mov     eax,            DWORD PTR [esi]
+       mov     ecx,            DWORD PTR 4[esi]
+       mov     DWORD PTR [esp],eax
+       mov     DWORD PTR 4[esp],ecx
+       mov     eax,            DWORD PTR 8[esi]
+       mov     ecx,            DWORD PTR 12[esi]
+       mov     DWORD PTR 8[esp],eax
+       mov     DWORD PTR 12[esp],ecx
+       mov     eax,            DWORD PTR 16[esi]
+       mov     ecx,            DWORD PTR 20[esi]
+       mov     DWORD PTR 16[esp],eax
+       mov     DWORD PTR 20[esp],ecx
+       mov     eax,            DWORD PTR 24[esi]
+       mov     ecx,            DWORD PTR 28[esi]
+       mov     DWORD PTR 24[esp],eax
+       mov     DWORD PTR 28[esp],ecx
+       mov     eax,            DWORD PTR 32[esi]
+       mov     ecx,            DWORD PTR 36[esi]
+       mov     DWORD PTR 32[esp],eax
+       mov     DWORD PTR 36[esp],ecx
+       mov     eax,            DWORD PTR 40[esi]
+       mov     ecx,            DWORD PTR 44[esi]
+       mov     DWORD PTR 40[esp],eax
+       mov     DWORD PTR 44[esp],ecx
+       mov     eax,            DWORD PTR 48[esi]
+       mov     ecx,            DWORD PTR 52[esi]
+       mov     DWORD PTR 48[esp],eax
+       mov     DWORD PTR 52[esp],ecx
+       mov     eax,            DWORD PTR 56[esi]
+       mov     ecx,            DWORD PTR 60[esi]
+       mov     DWORD PTR 56[esp],eax
+       mov     DWORD PTR 60[esp],ecx
+       jmp     L001shortcut
+_sha1_block_asm_host_order ENDP
+_TEXT  ENDS
+_sha1_block_asm_data_order ENDP
 _TEXT  ENDS
 END
index 04e42ab09fdf9b543f33893acca1a09b3e111c74..3662c20acce186f16666c85c23e216ee098fb822 100644 (file)
@@ -8,8 +8,8 @@ require "x86asm.pl";
 &asm_init($ARGV[0],"sha1-586.pl",$ARGV[$#ARGV] eq "386");
 
 $A="eax";
-$B="ebx";
-$C="ecx";
+$B="ecx";
+$C="ebx";
 $D="edx";
 $E="edi";
 $T="esi";
@@ -19,7 +19,7 @@ $off=9*4;
 
 @K=(0x5a827999,0x6ed9eba1,0x8f1bbcdc,0xca62c1d6);
 
-&sha1_block("sha1_block_x86");
+&sha1_block_data("sha1_block_asm_data_order");
 
 &asm_finish();
 
@@ -53,11 +53,14 @@ sub X_expand
        local($in)=@_;
 
        &comment("First, load the words onto the stack in network byte order");
-       for ($i=0; $i<16; $i++)
+       for ($i=0; $i<16; $i+=2)
                {
-               &mov("eax",&DWP(($i+0)*4,$in,"",0)) unless $i == 0;
-               &bswap("eax");
-               &mov(&swtmp($i+0),"eax");
+               &mov($A,&DWP(($i+0)*4,$in,"",0));# unless $i == 0;
+                &mov($B,&DWP(($i+1)*4,$in,"",0));
+               &bswap($A);
+                &bswap($B);
+               &mov(&swtmp($i+0),$A);
+                &mov(&swtmp($i+1),$B);
                }
 
        &comment("We now have the X array on the stack");
@@ -312,7 +315,7 @@ sub BODY_60_79
        &BODY_20_39(@_);
        }
 
-sub sha1_block
+sub sha1_block_host
        {
        local($name)=@_;
 
@@ -325,35 +328,77 @@ sub sha1_block
        # D     12
        # E     16
 
-       &push("esi");
-        &push("ebp");
-       &mov("eax",     &wparam(2));
+       &mov("ecx",     &wparam(2));
+        &push("esi");
+       &shl("ecx",6);
         &mov("esi",    &wparam(1));
-       &add("eax",     "esi"); # offset to leave on
+       &push("ebp");
+        &add("ecx","esi");     # offset to leave on
+       &push("ebx");
         &mov("ebp",    &wparam(0));
+       &push("edi");
+        &mov($D,       &DWP(12,"ebp","",0));
+       &stack_push(18+9);
+        &mov($E,       &DWP(16,"ebp","",0));
+       &mov($C,        &DWP( 8,"ebp","",0));
+        &mov(&swtmp(17),"ecx");
+
+       &comment("First we need to setup the X array");
+
+       for ($i=0; $i<16; $i+=2)
+               {
+               &mov($A,&DWP(($i+0)*4,"esi","",0));# unless $i == 0;
+                &mov($B,&DWP(($i+1)*4,"esi","",0));
+               &mov(&swtmp($i+0),$A);
+                &mov(&swtmp($i+1),$B);
+               }
+       &jmp(&label("shortcut"));
+       &function_end_B($name);
+       }
+
+
+sub sha1_block_data
+       {
+       local($name)=@_;
+
+       &function_begin_B($name,"");
+
+       # parameter 1 is the MD5_CTX structure.
+       # A     0
+       # B     4
+       # C     8
+       # D     12
+       # E     16
+
+       &mov("ecx",     &wparam(2));
+        &push("esi");
+       &shl("ecx",6);
+        &mov("esi",    &wparam(1));
+       &push("ebp");
+        &add("ecx","esi");     # offset to leave on
        &push("ebx");
-        &sub("eax",    64);
+        &mov("ebp",    &wparam(0));
        &push("edi");
-        &mov($B,       &DWP( 4,"ebp","",0));
-       &stack_push(18);
         &mov($D,       &DWP(12,"ebp","",0));
-       &mov($E,        &DWP(16,"ebp","",0));
-        &mov($C,       &DWP( 8,"ebp","",0));
-       &mov(&swtmp(17),"eax");
+       &stack_push(18+9);
+        &mov($E,       &DWP(16,"ebp","",0));
+       &mov($C,        &DWP( 8,"ebp","",0));
+        &mov(&swtmp(17),"ecx");
 
        &comment("First we need to setup the X array");
-        &mov("eax",&DWP(0,"esi","",0)); # pulled out of X_expand
 
        &set_label("start") unless $normal;
 
        &X_expand("esi");
-        &mov(&swtmp(16),"esi");
+        &mov(&wparam(1),"esi");
 
+       &set_label("shortcut");
        &comment("");
        &comment("Start processing");
 
        # odd start
        &mov($A,        &DWP( 0,"ebp","",0));
+        &mov($B,       &DWP( 4,"ebp","",0));
        $X="esp";
        &BODY_00_15(-2,$K[0],$X, 0,$A,$B,$C,$D,$E,$T);
        &BODY_00_15( 0,$K[0],$X, 1,$T,$A,$B,$C,$D,$E);
@@ -468,24 +513,26 @@ sub sha1_block
        &add($C,$T);
 
         &mov(&DWP( 0,$tmp1,"",0),$A);
-       &mov("esi",&swtmp(16));
-        &mov(&DWP( 8,$tmp1,"",0),$C);  # This is for looping
+       &mov("esi",&wparam(1));
+        &mov(&DWP( 8,$tmp1,"",0),$C);
        &add("esi",64);
         &mov("eax",&swtmp(17));
        &mov(&DWP(16,$tmp1,"",0),$E);
-        &cmp("eax","esi");
-       &mov(&DWP( 4,$tmp1,"",0),$B);   # This is for looping
-        &jl(&label("end"));
-       &mov("eax",&DWP(0,"esi","",0)); # Pulled down from 
-        &jmp(&label("start"));
-
-       &set_label("end");
-       &stack_pop(18);
+        &cmp("esi","eax");
+       &mov(&DWP( 4,$tmp1,"",0),$B);
+        &jl(&label("start"));
+
+       &stack_pop(18+9);
         &pop("edi");
        &pop("ebx");
         &pop("ebp");
        &pop("esi");
         &ret();
+
+       # it has to reside within sha1_block_asm_host_order body
+       # because it calls &jmp(&label("shortcut"));
+       &sha1_block_host("sha1_block_asm_host_order");
+
        &function_end_B($name);
        }