        ; Don't even think of reading this code
        ; It was automatically generated by bf586.pl
        ; Which is a perl program used to generate the x86 assember for
        ; any of elf, a.out, Win32, or Solaris
        ; It can be found in SSLeay 0.7.0+
        ; eric <eay@mincom.oz.au>
        ; 
        TITLE   bfx86xxxx.asm
        .386
.model FLAT
_TEXT   SEGMENT
PUBLIC  _BF_encrypt
EXTRN   _des_SPtrans:DWORD
_BF_encrypt PROC NEAR
        push    ebp
        push    ebx
        push    esi
        push    edi
        ; 
        ; Load the 2 words
        mov     eax,            DWORD PTR 20[esp]
        mov     ecx,            DWORD PTR [eax]
        mov     edx,            DWORD PTR 4[eax]
        ; 
        ; P pointer, s and enc flag
        mov     edi,            DWORD PTR 24[esp]
        xor     eax,            eax
        xor     ebx,            ebx
        mov     ebp,            DWORD PTR 28[esp]
        cmp     ebp,            0
        je      $L000start_decrypt
        xor     ecx,            DWORD PTR [edi]
        ; 
        ; Round 0
        ror     ecx,            16
        mov     esi,            DWORD PTR 4[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 1
        ror     edx,            16
        mov     esi,            DWORD PTR 8[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 2
        ror     ecx,            16
        mov     esi,            DWORD PTR 12[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 3
        ror     edx,            16
        mov     esi,            DWORD PTR 16[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 4
        ror     ecx,            16
        mov     esi,            DWORD PTR 20[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 5
        ror     edx,            16
        mov     esi,            DWORD PTR 24[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 6
        ror     ecx,            16
        mov     esi,            DWORD PTR 28[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 7
        ror     edx,            16
        mov     esi,            DWORD PTR 32[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 8
        ror     ecx,            16
        mov     esi,            DWORD PTR 36[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 9
        ror     edx,            16
        mov     esi,            DWORD PTR 40[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 10
        ror     ecx,            16
        mov     esi,            DWORD PTR 44[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 11
        ror     edx,            16
        mov     esi,            DWORD PTR 48[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 12
        ror     ecx,            16
        mov     esi,            DWORD PTR 52[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 13
        ror     edx,            16
        mov     esi,            DWORD PTR 56[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 14
        ror     ecx,            16
        mov     esi,            DWORD PTR 60[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 15
        ror     edx,            16
        mov     esi,            DWORD PTR 64[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        xor     edx,            DWORD PTR 68[edi]
        mov     eax,            DWORD PTR 20[esp]
        mov     DWORD PTR [eax],edx
        mov     DWORD PTR 4[eax],ecx
        pop     edi
        pop     esi
        pop     ebx
        pop     ebp
        ret
$L000start_decrypt:
        xor     ecx,            DWORD PTR 68[edi]
        ; 
        ; Round 16
        ror     ecx,            16
        mov     esi,            DWORD PTR 64[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 15
        ror     edx,            16
        mov     esi,            DWORD PTR 60[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 14
        ror     ecx,            16
        mov     esi,            DWORD PTR 56[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 13
        ror     edx,            16
        mov     esi,            DWORD PTR 52[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 12
        ror     ecx,            16
        mov     esi,            DWORD PTR 48[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 11
        ror     edx,            16
        mov     esi,            DWORD PTR 44[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 10
        ror     ecx,            16
        mov     esi,            DWORD PTR 40[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 9
        ror     edx,            16
        mov     esi,            DWORD PTR 36[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 8
        ror     ecx,            16
        mov     esi,            DWORD PTR 32[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 7
        ror     edx,            16
        mov     esi,            DWORD PTR 28[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 6
        ror     ecx,            16
        mov     esi,            DWORD PTR 24[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 5
        ror     edx,            16
        mov     esi,            DWORD PTR 20[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 4
        ror     ecx,            16
        mov     esi,            DWORD PTR 16[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 3
        ror     edx,            16
        mov     esi,            DWORD PTR 12[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        ; 
        ; Round 2
        ror     ecx,            16
        mov     esi,            DWORD PTR 8[edi]
        mov     al,             ch
        mov     bl,             cl
        ror     ecx,            16
        xor     edx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             ch
        mov     bl,             cl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     edx,            esi
        ; 
        ; Round 1
        ror     edx,            16
        mov     esi,            DWORD PTR 4[edi]
        mov     al,             dh
        mov     bl,             dl
        ror     edx,            16
        xor     ecx,            esi
        mov     esi,            DWORD PTR 72[eax*4+edi]
        mov     ebp,            DWORD PTR 1096[ebx*4+edi]
        mov     al,             dh
        mov     bl,             dl
        add     esi,            ebp
        mov     eax,            DWORD PTR 2120[eax*4+edi]
        xor     esi,            eax
        mov     ebp,            DWORD PTR 3144[ebx*4+edi]
        add     esi,            ebp
        xor     eax,            eax
        xor     ecx,            esi
        xor     edx,            DWORD PTR [edi]
        mov     eax,            DWORD PTR 20[esp]
        mov     DWORD PTR [eax],edx
        mov     DWORD PTR 4[eax],ecx
        pop     edi
        pop     esi
        pop     ebx
        pop     ebp
        ret
_BF_encrypt ENDP
_TEXT   ENDS
END
