You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1879 lines
36 KiB

TITLE des-586.asm
IF @Version LT 800
ECHO MASM version 8.00 or later is strongly recommended.
ENDIF
.686
.MODEL FLAT
OPTION DOTNAME
IF @Version LT 800
.text$ SEGMENT PAGE 'CODE'
ELSE
.text$ SEGMENT ALIGN(64) 'CODE'
ENDIF
PUBLIC _DES_SPtrans
ALIGN 16
__x86_DES_encrypt PROC PRIVATE
push ecx
; Round 0
mov eax,DWORD PTR [ecx]
xor ebx,ebx
mov edx,DWORD PTR 4[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 1
mov eax,DWORD PTR 8[ecx]
xor ebx,ebx
mov edx,DWORD PTR 12[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 2
mov eax,DWORD PTR 16[ecx]
xor ebx,ebx
mov edx,DWORD PTR 20[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 3
mov eax,DWORD PTR 24[ecx]
xor ebx,ebx
mov edx,DWORD PTR 28[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 4
mov eax,DWORD PTR 32[ecx]
xor ebx,ebx
mov edx,DWORD PTR 36[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 5
mov eax,DWORD PTR 40[ecx]
xor ebx,ebx
mov edx,DWORD PTR 44[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 6
mov eax,DWORD PTR 48[ecx]
xor ebx,ebx
mov edx,DWORD PTR 52[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 7
mov eax,DWORD PTR 56[ecx]
xor ebx,ebx
mov edx,DWORD PTR 60[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 8
mov eax,DWORD PTR 64[ecx]
xor ebx,ebx
mov edx,DWORD PTR 68[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 9
mov eax,DWORD PTR 72[ecx]
xor ebx,ebx
mov edx,DWORD PTR 76[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 10
mov eax,DWORD PTR 80[ecx]
xor ebx,ebx
mov edx,DWORD PTR 84[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 11
mov eax,DWORD PTR 88[ecx]
xor ebx,ebx
mov edx,DWORD PTR 92[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 12
mov eax,DWORD PTR 96[ecx]
xor ebx,ebx
mov edx,DWORD PTR 100[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 13
mov eax,DWORD PTR 104[ecx]
xor ebx,ebx
mov edx,DWORD PTR 108[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 14
mov eax,DWORD PTR 112[ecx]
xor ebx,ebx
mov edx,DWORD PTR 116[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 15
mov eax,DWORD PTR 120[ecx]
xor ebx,ebx
mov edx,DWORD PTR 124[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
add esp,4
ret
__x86_DES_encrypt ENDP
ALIGN 16
__x86_DES_decrypt PROC PRIVATE
push ecx
; Round 15
mov eax,DWORD PTR 120[ecx]
xor ebx,ebx
mov edx,DWORD PTR 124[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 14
mov eax,DWORD PTR 112[ecx]
xor ebx,ebx
mov edx,DWORD PTR 116[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 13
mov eax,DWORD PTR 104[ecx]
xor ebx,ebx
mov edx,DWORD PTR 108[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 12
mov eax,DWORD PTR 96[ecx]
xor ebx,ebx
mov edx,DWORD PTR 100[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 11
mov eax,DWORD PTR 88[ecx]
xor ebx,ebx
mov edx,DWORD PTR 92[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 10
mov eax,DWORD PTR 80[ecx]
xor ebx,ebx
mov edx,DWORD PTR 84[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 9
mov eax,DWORD PTR 72[ecx]
xor ebx,ebx
mov edx,DWORD PTR 76[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 8
mov eax,DWORD PTR 64[ecx]
xor ebx,ebx
mov edx,DWORD PTR 68[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 7
mov eax,DWORD PTR 56[ecx]
xor ebx,ebx
mov edx,DWORD PTR 60[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 6
mov eax,DWORD PTR 48[ecx]
xor ebx,ebx
mov edx,DWORD PTR 52[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 5
mov eax,DWORD PTR 40[ecx]
xor ebx,ebx
mov edx,DWORD PTR 44[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 4
mov eax,DWORD PTR 32[ecx]
xor ebx,ebx
mov edx,DWORD PTR 36[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 3
mov eax,DWORD PTR 24[ecx]
xor ebx,ebx
mov edx,DWORD PTR 28[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 2
mov eax,DWORD PTR 16[ecx]
xor ebx,ebx
mov edx,DWORD PTR 20[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
; Round 1
mov eax,DWORD PTR 8[ecx]
xor ebx,ebx
mov edx,DWORD PTR 12[ecx]
xor eax,esi
xor ecx,ecx
xor edx,esi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor edi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor edi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor edi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor edi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor edi,DWORD PTR 0600h[ebx*1+ebp]
xor edi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor edi,DWORD PTR 0400h[eax*1+ebp]
xor edi,DWORD PTR 0500h[edx*1+ebp]
; Round 0
mov eax,DWORD PTR [ecx]
xor ebx,ebx
mov edx,DWORD PTR 4[ecx]
xor eax,edi
xor ecx,ecx
xor edx,edi
and eax,0fcfcfcfch
and edx,0cfcfcfcfh
mov bl,al
mov cl,ah
ror edx,4
xor esi,DWORD PTR [ebx*1+ebp]
mov bl,dl
xor esi,DWORD PTR 0200h[ecx*1+ebp]
mov cl,dh
shr eax,16
xor esi,DWORD PTR 0100h[ebx*1+ebp]
mov bl,ah
shr edx,16
xor esi,DWORD PTR 0300h[ecx*1+ebp]
mov cl,dh
and eax,0ffh
and edx,0ffh
xor esi,DWORD PTR 0600h[ebx*1+ebp]
xor esi,DWORD PTR 0700h[ecx*1+ebp]
mov ecx,DWORD PTR [esp]
xor esi,DWORD PTR 0400h[eax*1+ebp]
xor esi,DWORD PTR 0500h[edx*1+ebp]
add esp,4
ret
__x86_DES_decrypt ENDP
ALIGN 16
_DES_encrypt1 PROC PUBLIC
$L_DES_encrypt1_begin::
push esi
push edi
;
; Load the 2 words
mov esi,DWORD PTR 12[esp]
xor ecx,ecx
push ebx
push ebp
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 28[esp]
mov edi,DWORD PTR 4[esi]
;
; IP
rol eax,4
mov esi,eax
xor eax,edi
and eax,0f0f0f0f0h
xor esi,eax
xor edi,eax
;
rol edi,20
mov eax,edi
xor edi,esi
and edi,0fff0000fh
xor eax,edi
xor esi,edi
;
rol eax,14
mov edi,eax
xor eax,esi
and eax,033333333h
xor edi,eax
xor esi,eax
;
rol esi,22
mov eax,esi
xor esi,edi
and esi,003fc03fch
xor eax,esi
xor edi,esi
;
rol eax,9
mov esi,eax
xor eax,edi
and eax,0aaaaaaaah
xor esi,eax
xor edi,eax
;
rol edi,1
call $L000pic_point
$L000pic_point:
pop ebp
lea ebp,DWORD PTR (_DES_SPtrans-$L000pic_point)[ebp]
mov ecx,DWORD PTR 24[esp]
cmp ebx,0
je $L001decrypt
call __x86_DES_encrypt
jmp $L002done
$L001decrypt:
call __x86_DES_decrypt
$L002done:
;
; FP
mov edx,DWORD PTR 20[esp]
ror esi,1
mov eax,edi
xor edi,esi
and edi,0aaaaaaaah
xor eax,edi
xor esi,edi
;
rol eax,23
mov edi,eax
xor eax,esi
and eax,003fc03fch
xor edi,eax
xor esi,eax
;
rol edi,10
mov eax,edi
xor edi,esi
and edi,033333333h
xor eax,edi
xor esi,edi
;
rol esi,18
mov edi,esi
xor esi,eax
and esi,0fff0000fh
xor edi,esi
xor eax,esi
;
rol edi,12
mov esi,edi
xor edi,eax
and edi,0f0f0f0f0h
xor esi,edi
xor eax,edi
;
ror eax,4
mov DWORD PTR [edx],eax
mov DWORD PTR 4[edx],esi
pop ebp
pop ebx
pop edi
pop esi
ret
_DES_encrypt1 ENDP
ALIGN 16
_DES_encrypt2 PROC PUBLIC
$L_DES_encrypt2_begin::
push esi
push edi
;
; Load the 2 words
mov eax,DWORD PTR 12[esp]
xor ecx,ecx
push ebx
push ebp
mov esi,DWORD PTR [eax]
mov ebx,DWORD PTR 28[esp]
rol esi,3
mov edi,DWORD PTR 4[eax]
rol edi,3
call $L003pic_point
$L003pic_point:
pop ebp
lea ebp,DWORD PTR (_DES_SPtrans-$L003pic_point)[ebp]
mov ecx,DWORD PTR 24[esp]
cmp ebx,0
je $L004decrypt
call __x86_DES_encrypt
jmp $L005done
$L004decrypt:
call __x86_DES_decrypt
$L005done:
;
; Fixup
ror edi,3
mov eax,DWORD PTR 20[esp]
ror esi,3
mov DWORD PTR [eax],edi
mov DWORD PTR 4[eax],esi
pop ebp
pop ebx
pop edi
pop esi
ret
_DES_encrypt2 ENDP
ALIGN 16
_DES_encrypt3 PROC PUBLIC
$L_DES_encrypt3_begin::
push ebx
mov ebx,DWORD PTR 8[esp]
push ebp
push esi
push edi
;
; Load the data words
mov edi,DWORD PTR [ebx]
mov esi,DWORD PTR 4[ebx]
sub esp,12
;
; IP
rol edi,4
mov edx,edi
xor edi,esi
and edi,0f0f0f0f0h
xor edx,edi
xor esi,edi
;
rol esi,20
mov edi,esi
xor esi,edx
and esi,0fff0000fh
xor edi,esi
xor edx,esi
;
rol edi,14
mov esi,edi
xor edi,edx
and edi,033333333h
xor esi,edi
xor edx,edi
;
rol edx,22
mov edi,edx
xor edx,esi
and edx,003fc03fch
xor edi,edx
xor esi,edx
;
rol edi,9
mov edx,edi
xor edi,esi
and edi,0aaaaaaaah
xor edx,edi
xor esi,edi
;
ror edx,3
ror esi,2
mov DWORD PTR 4[ebx],esi
mov eax,DWORD PTR 36[esp]
mov DWORD PTR [ebx],edx
mov edi,DWORD PTR 40[esp]
mov esi,DWORD PTR 44[esp]
mov DWORD PTR 8[esp],1
mov DWORD PTR 4[esp],eax
mov DWORD PTR [esp],ebx
call $L_DES_encrypt2_begin
mov DWORD PTR 8[esp],0
mov DWORD PTR 4[esp],edi
mov DWORD PTR [esp],ebx
call $L_DES_encrypt2_begin
mov DWORD PTR 8[esp],1
mov DWORD PTR 4[esp],esi
mov DWORD PTR [esp],ebx
call $L_DES_encrypt2_begin
add esp,12
mov edi,DWORD PTR [ebx]
mov esi,DWORD PTR 4[ebx]
;
; FP
rol esi,2
rol edi,3
mov eax,edi
xor edi,esi
and edi,0aaaaaaaah
xor eax,edi
xor esi,edi
;
rol eax,23
mov edi,eax
xor eax,esi
and eax,003fc03fch
xor edi,eax
xor esi,eax
;
rol edi,10
mov eax,edi
xor edi,esi
and edi,033333333h
xor eax,edi
xor esi,edi
;
rol esi,18
mov edi,esi
xor esi,eax
and esi,0fff0000fh
xor edi,esi
xor eax,esi
;
rol edi,12
mov esi,edi
xor edi,eax
and edi,0f0f0f0f0h
xor esi,edi
xor eax,edi
;
ror eax,4
mov DWORD PTR [ebx],eax
mov DWORD PTR 4[ebx],esi
pop edi
pop esi
pop ebp
pop ebx
ret
_DES_encrypt3 ENDP
ALIGN 16
_DES_decrypt3 PROC PUBLIC
$L_DES_decrypt3_begin::
push ebx
mov ebx,DWORD PTR 8[esp]
push ebp
push esi
push edi
;
; Load the data words
mov edi,DWORD PTR [ebx]
mov esi,DWORD PTR 4[ebx]
sub esp,12
;
; IP
rol edi,4
mov edx,edi
xor edi,esi
and edi,0f0f0f0f0h
xor edx,edi
xor esi,edi
;
rol esi,20
mov edi,esi
xor esi,edx
and esi,0fff0000fh
xor edi,esi
xor edx,esi
;
rol edi,14
mov esi,edi
xor edi,edx
and edi,033333333h
xor esi,edi
xor edx,edi
;
rol edx,22
mov edi,edx
xor edx,esi
and edx,003fc03fch
xor edi,edx
xor esi,edx
;
rol edi,9
mov edx,edi
xor edi,esi
and edi,0aaaaaaaah
xor edx,edi
xor esi,edi
;
ror edx,3
ror esi,2
mov DWORD PTR 4[ebx],esi
mov esi,DWORD PTR 36[esp]
mov DWORD PTR [ebx],edx
mov edi,DWORD PTR 40[esp]
mov eax,DWORD PTR 44[esp]
mov DWORD PTR 8[esp],0
mov DWORD PTR 4[esp],eax
mov DWORD PTR [esp],ebx
call $L_DES_encrypt2_begin
mov DWORD PTR 8[esp],1
mov DWORD PTR 4[esp],edi
mov DWORD PTR [esp],ebx
call $L_DES_encrypt2_begin
mov DWORD PTR 8[esp],0
mov DWORD PTR 4[esp],esi
mov DWORD PTR [esp],ebx
call $L_DES_encrypt2_begin
add esp,12
mov edi,DWORD PTR [ebx]
mov esi,DWORD PTR 4[ebx]
;
; FP
rol esi,2
rol edi,3
mov eax,edi
xor edi,esi
and edi,0aaaaaaaah
xor eax,edi
xor esi,edi
;
rol eax,23
mov edi,eax
xor eax,esi
and eax,003fc03fch
xor edi,eax
xor esi,eax
;
rol edi,10
mov eax,edi
xor edi,esi
and edi,033333333h
xor eax,edi
xor esi,edi
;
rol esi,18
mov edi,esi
xor esi,eax
and esi,0fff0000fh
xor edi,esi
xor eax,esi
;
rol edi,12
mov esi,edi
xor edi,eax
and edi,0f0f0f0f0h
xor esi,edi
xor eax,edi
;
ror eax,4
mov DWORD PTR [ebx],eax
mov DWORD PTR 4[ebx],esi
pop edi
pop esi
pop ebp
pop ebx
ret
_DES_decrypt3 ENDP
ALIGN 16
_DES_ncbc_encrypt PROC PUBLIC
$L_DES_ncbc_encrypt_begin::
;
push ebp
push ebx
push esi
push edi
mov ebp,DWORD PTR 28[esp]
; getting iv ptr from parameter 4
mov ebx,DWORD PTR 36[esp]
mov esi,DWORD PTR [ebx]
mov edi,DWORD PTR 4[ebx]
push edi
push esi
push edi
push esi
mov ebx,esp
mov esi,DWORD PTR 36[esp]
mov edi,DWORD PTR 40[esp]
; getting encrypt flag from parameter 5
mov ecx,DWORD PTR 56[esp]
; get and push parameter 5
push ecx
; get and push parameter 3
mov eax,DWORD PTR 52[esp]
push eax
push ebx
cmp ecx,0
jz $L006decrypt
and ebp,4294967288
mov eax,DWORD PTR 12[esp]
mov ebx,DWORD PTR 16[esp]
jz $L007encrypt_finish
$L008encrypt_loop:
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR 4[esi]
xor eax,ecx
xor ebx,edx
mov DWORD PTR 12[esp],eax
mov DWORD PTR 16[esp],ebx
call $L_DES_encrypt1_begin
mov eax,DWORD PTR 12[esp]
mov ebx,DWORD PTR 16[esp]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
add esi,8
add edi,8
sub ebp,8
jnz $L008encrypt_loop
$L007encrypt_finish:
mov ebp,DWORD PTR 56[esp]
and ebp,7
jz $L009finish
call $L010PIC_point
$L010PIC_point:
pop edx
lea ecx,DWORD PTR ($L011cbc_enc_jmp_table-$L010PIC_point)[edx]
mov ebp,DWORD PTR [ebp*4+ecx]
add ebp,edx
xor ecx,ecx
xor edx,edx
jmp ebp
$L012ej7:
mov dh,BYTE PTR 6[esi]
shl edx,8
$L013ej6:
mov dh,BYTE PTR 5[esi]
$L014ej5:
mov dl,BYTE PTR 4[esi]
$L015ej4:
mov ecx,DWORD PTR [esi]
jmp $L016ejend
$L017ej3:
mov ch,BYTE PTR 2[esi]
shl ecx,8
$L018ej2:
mov ch,BYTE PTR 1[esi]
$L019ej1:
mov cl,BYTE PTR [esi]
$L016ejend:
xor eax,ecx
xor ebx,edx
mov DWORD PTR 12[esp],eax
mov DWORD PTR 16[esp],ebx
call $L_DES_encrypt1_begin
mov eax,DWORD PTR 12[esp]
mov ebx,DWORD PTR 16[esp]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
jmp $L009finish
$L006decrypt:
and ebp,4294967288
mov eax,DWORD PTR 20[esp]
mov ebx,DWORD PTR 24[esp]
jz $L020decrypt_finish
$L021decrypt_loop:
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov DWORD PTR 12[esp],eax
mov DWORD PTR 16[esp],ebx
call $L_DES_encrypt1_begin
mov eax,DWORD PTR 12[esp]
mov ebx,DWORD PTR 16[esp]
mov ecx,DWORD PTR 20[esp]
mov edx,DWORD PTR 24[esp]
xor ecx,eax
xor edx,ebx
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov DWORD PTR [edi],ecx
mov DWORD PTR 4[edi],edx
mov DWORD PTR 20[esp],eax
mov DWORD PTR 24[esp],ebx
add esi,8
add edi,8
sub ebp,8
jnz $L021decrypt_loop
$L020decrypt_finish:
mov ebp,DWORD PTR 56[esp]
and ebp,7
jz $L009finish
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov DWORD PTR 12[esp],eax
mov DWORD PTR 16[esp],ebx
call $L_DES_encrypt1_begin
mov eax,DWORD PTR 12[esp]
mov ebx,DWORD PTR 16[esp]
mov ecx,DWORD PTR 20[esp]
mov edx,DWORD PTR 24[esp]
xor ecx,eax
xor edx,ebx
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
$L022dj7:
ror edx,16
mov BYTE PTR 6[edi],dl
shr edx,16
$L023dj6:
mov BYTE PTR 5[edi],dh
$L024dj5:
mov BYTE PTR 4[edi],dl
$L025dj4:
mov DWORD PTR [edi],ecx
jmp $L026djend
$L027dj3:
ror ecx,16
mov BYTE PTR 2[edi],cl
shl ecx,16
$L028dj2:
mov BYTE PTR 1[esi],ch
$L029dj1:
mov BYTE PTR [esi],cl
$L026djend:
jmp $L009finish
$L009finish:
mov ecx,DWORD PTR 64[esp]
add esp,28
mov DWORD PTR [ecx],eax
mov DWORD PTR 4[ecx],ebx
pop edi
pop esi
pop ebx
pop ebp
ret
ALIGN 64
$L011cbc_enc_jmp_table:
DD 0
DD $L019ej1-$L010PIC_point
DD $L018ej2-$L010PIC_point
DD $L017ej3-$L010PIC_point
DD $L015ej4-$L010PIC_point
DD $L014ej5-$L010PIC_point
DD $L013ej6-$L010PIC_point
DD $L012ej7-$L010PIC_point
ALIGN 64
_DES_ncbc_encrypt ENDP
ALIGN 16
_DES_ede3_cbc_encrypt PROC PUBLIC
$L_DES_ede3_cbc_encrypt_begin::
;
push ebp
push ebx
push esi
push edi
mov ebp,DWORD PTR 28[esp]
; getting iv ptr from parameter 6
mov ebx,DWORD PTR 44[esp]
mov esi,DWORD PTR [ebx]
mov edi,DWORD PTR 4[ebx]
push edi
push esi
push edi
push esi
mov ebx,esp
mov esi,DWORD PTR 36[esp]
mov edi,DWORD PTR 40[esp]
; getting encrypt flag from parameter 7
mov ecx,DWORD PTR 64[esp]
; get and push parameter 5
mov eax,DWORD PTR 56[esp]
push eax
; get and push parameter 4
mov eax,DWORD PTR 56[esp]
push eax
; get and push parameter 3
mov eax,DWORD PTR 56[esp]
push eax
push ebx
cmp ecx,0
jz $L030decrypt
and ebp,4294967288
mov eax,DWORD PTR 16[esp]
mov ebx,DWORD PTR 20[esp]
jz $L031encrypt_finish
$L032encrypt_loop:
mov ecx,DWORD PTR [esi]
mov edx,DWORD PTR 4[esi]
xor eax,ecx
xor ebx,edx
mov DWORD PTR 16[esp],eax
mov DWORD PTR 20[esp],ebx
call $L_DES_encrypt3_begin
mov eax,DWORD PTR 16[esp]
mov ebx,DWORD PTR 20[esp]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
add esi,8
add edi,8
sub ebp,8
jnz $L032encrypt_loop
$L031encrypt_finish:
mov ebp,DWORD PTR 60[esp]
and ebp,7
jz $L033finish
call $L034PIC_point
$L034PIC_point:
pop edx
lea ecx,DWORD PTR ($L035cbc_enc_jmp_table-$L034PIC_point)[edx]
mov ebp,DWORD PTR [ebp*4+ecx]
add ebp,edx
xor ecx,ecx
xor edx,edx
jmp ebp
$L036ej7:
mov dh,BYTE PTR 6[esi]
shl edx,8
$L037ej6:
mov dh,BYTE PTR 5[esi]
$L038ej5:
mov dl,BYTE PTR 4[esi]
$L039ej4:
mov ecx,DWORD PTR [esi]
jmp $L040ejend
$L041ej3:
mov ch,BYTE PTR 2[esi]
shl ecx,8
$L042ej2:
mov ch,BYTE PTR 1[esi]
$L043ej1:
mov cl,BYTE PTR [esi]
$L040ejend:
xor eax,ecx
xor ebx,edx
mov DWORD PTR 16[esp],eax
mov DWORD PTR 20[esp],ebx
call $L_DES_encrypt3_begin
mov eax,DWORD PTR 16[esp]
mov ebx,DWORD PTR 20[esp]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
jmp $L033finish
$L030decrypt:
and ebp,4294967288
mov eax,DWORD PTR 24[esp]
mov ebx,DWORD PTR 28[esp]
jz $L044decrypt_finish
$L045decrypt_loop:
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov DWORD PTR 16[esp],eax
mov DWORD PTR 20[esp],ebx
call $L_DES_decrypt3_begin
mov eax,DWORD PTR 16[esp]
mov ebx,DWORD PTR 20[esp]
mov ecx,DWORD PTR 24[esp]
mov edx,DWORD PTR 28[esp]
xor ecx,eax
xor edx,ebx
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov DWORD PTR [edi],ecx
mov DWORD PTR 4[edi],edx
mov DWORD PTR 24[esp],eax
mov DWORD PTR 28[esp],ebx
add esi,8
add edi,8
sub ebp,8
jnz $L045decrypt_loop
$L044decrypt_finish:
mov ebp,DWORD PTR 60[esp]
and ebp,7
jz $L033finish
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov DWORD PTR 16[esp],eax
mov DWORD PTR 20[esp],ebx
call $L_DES_decrypt3_begin
mov eax,DWORD PTR 16[esp]
mov ebx,DWORD PTR 20[esp]
mov ecx,DWORD PTR 24[esp]
mov edx,DWORD PTR 28[esp]
xor ecx,eax
xor edx,ebx
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
$L046dj7:
ror edx,16
mov BYTE PTR 6[edi],dl
shr edx,16
$L047dj6:
mov BYTE PTR 5[edi],dh
$L048dj5:
mov BYTE PTR 4[edi],dl
$L049dj4:
mov DWORD PTR [edi],ecx
jmp $L050djend
$L051dj3:
ror ecx,16
mov BYTE PTR 2[edi],cl
shl ecx,16
$L052dj2:
mov BYTE PTR 1[esi],ch
$L053dj1:
mov BYTE PTR [esi],cl
$L050djend:
jmp $L033finish
$L033finish:
mov ecx,DWORD PTR 76[esp]
add esp,32
mov DWORD PTR [ecx],eax
mov DWORD PTR 4[ecx],ebx
pop edi
pop esi
pop ebx
pop ebp
ret
ALIGN 64
$L035cbc_enc_jmp_table:
DD 0
DD $L043ej1-$L034PIC_point
DD $L042ej2-$L034PIC_point
DD $L041ej3-$L034PIC_point
DD $L039ej4-$L034PIC_point
DD $L038ej5-$L034PIC_point
DD $L037ej6-$L034PIC_point
DD $L036ej7-$L034PIC_point
ALIGN 64
_DES_ede3_cbc_encrypt ENDP
ALIGN 64
_DES_SPtrans::
DD 34080768,524288,33554434,34080770
DD 33554432,526338,524290,33554434
DD 526338,34080768,34078720,2050
DD 33556482,33554432,0,524290
DD 524288,2,33556480,526336
DD 34080770,34078720,2050,33556480
DD 2,2048,526336,34078722
DD 2048,33556482,34078722,0
DD 0,34080770,33556480,524290
DD 34080768,524288,2050,33556480
DD 34078722,2048,526336,33554434
DD 526338,2,33554434,34078720
DD 34080770,526336,34078720,33556482
DD 33554432,2050,524290,0
DD 524288,33554432,33556482,34080768
DD 2,34078722,2048,526338
DD 1074823184,0,1081344,1074790400
DD 1073741840,32784,1073774592,1081344
DD 32768,1074790416,16,1073774592
DD 1048592,1074823168,1074790400,16
DD 1048576,1073774608,1074790416,32768
DD 1081360,1073741824,0,1048592
DD 1073774608,1081360,1074823168,1073741840
DD 1073741824,1048576,32784,1074823184
DD 1048592,1074823168,1073774592,1081360
DD 1074823184,1048592,1073741840,0
DD 1073741824,32784,1048576,1074790416
DD 32768,1073741824,1081360,1073774608
DD 1074823168,32768,0,1073741840
DD 16,1074823184,1081344,1074790400
DD 1074790416,1048576,32784,1073774592
DD 1073774608,16,1074790400,1081344
DD 67108865,67371264,256,67109121
DD 262145,67108864,67109121,262400
DD 67109120,262144,67371008,1
DD 67371265,257,1,67371009
DD 0,262145,67371264,256
DD 257,67371265,262144,67108865
DD 67371009,67109120,262401,67371008
DD 262400,0,67108864,262401
DD 67371264,256,1,262144
DD 257,262145,67371008,67109121
DD 0,67371264,262400,67371009
DD 262145,67108864,67371265,1
DD 262401,67108865,67108864,67371265
DD 262144,67109120,67109121,262400
DD 67109120,0,67371009,257
DD 67108865,262401,256,67371008
DD 4198408,268439552,8,272633864
DD 0,272629760,268439560,4194312
DD 272633856,268435464,268435456,4104
DD 268435464,4198408,4194304,268435456
DD 272629768,4198400,4096,8
DD 4198400,268439560,272629760,4096
DD 4104,0,4194312,272633856
DD 268439552,272629768,272633864,4194304
DD 272629768,4104,4194304,268435464
DD 4198400,268439552,8,272629760
DD 268439560,0,4096,4194312
DD 0,272629768,272633856,4096
DD 268435456,272633864,4198408,4194304
DD 272633864,8,268439552,4198408
DD 4194312,4198400,272629760,268439560
DD 4104,268435456,268435464,272633856
DD 134217728,65536,1024,134284320
DD 134283296,134218752,66592,134283264
DD 65536,32,134217760,66560
DD 134218784,134283296,134284288,0
DD 66560,134217728,65568,1056
DD 134218752,66592,0,134217760
DD 32,134218784,134284320,65568
DD 134283264,1024,1056,134284288
DD 134284288,134218784,65568,134283264
DD 65536,32,134217760,134218752
DD 134217728,66560,134284320,0
DD 66592,134217728,1024,65568
DD 134218784,1024,0,134284320
DD 134283296,134284288,1056,65536
DD 66560,134283296,134218752,1056
DD 32,66592,134283264,134217760
DD 2147483712,2097216,0,2149588992
DD 2097216,8192,2147491904,2097152
DD 8256,2149589056,2105344,2147483648
DD 2147491840,2147483712,2149580800,2105408
DD 2097152,2147491904,2149580864,0
DD 8192,64,2149588992,2149580864
DD 2149589056,2149580800,2147483648,8256
DD 64,2105344,2105408,2147491840
DD 8256,2147483648,2147491840,2105408
DD 2149588992,2097216,0,2147491840
DD 2147483648,8192,2149580864,2097152
DD 2097216,2149589056,2105344,64
DD 2149589056,2105344,2097152,2147491904
DD 2147483712,2149580800,2105408,0
DD 8192,2147483712,2147491904,2149588992
DD 2149580800,8256,64,2149580864
DD 16384,512,16777728,16777220
DD 16794116,16388,16896,0
DD 16777216,16777732,516,16793600
DD 4,16794112,16793600,516
DD 16777732,16384,16388,16794116
DD 0,16777728,16777220,16896
DD 16793604,16900,16794112,4
DD 16900,16793604,512,16777216
DD 16900,16793600,16793604,516
DD 16384,512,16777216,16793604
DD 16777732,16900,16896,0
DD 512,16777220,4,16777728
DD 0,16777732,16777728,16896
DD 516,16384,16794116,16777216
DD 16794112,4,16388,16794116
DD 16777220,16794112,16793600,16388
DD 545259648,545390592,131200,0
DD 537001984,8388736,545259520,545390720
DD 128,536870912,8519680,131200
DD 8519808,537002112,536871040,545259520
DD 131072,8519808,8388736,537001984
DD 545390720,536871040,0,8519680
DD 536870912,8388608,537002112,545259648
DD 8388608,131072,545390592,128
DD 8388608,131072,536871040,545390720
DD 131200,536870912,0,8519680
DD 545259648,537002112,537001984,8388736
DD 545390592,128,8388736,537001984
DD 545390720,8388608,545259520,536871040
DD 8519680,131200,537002112,545259520
DD 128,545390592,8519808,0
DD 536870912,545259648,131072,8519808
.text$ ENDS
END