; Don't even think of reading this code ; It was automatically generated by des-586.pl ; Which is a perl program used to generate the x86 assember for ; any of elf, a.out, BSDI, Win32, gaswin (for GNU as on Win32) or Solaris ; eric ; segment .text extern _des_SPtrans global _des_encrypt1 _des_encrypt1: push esi push edi ; ; Load the 2 words mov esi, [12+esp] xor ecx, ecx push ebx push ebp mov eax, [esi] mov ebx, [28+esp] mov edi, [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 mov ebp, [24+esp] cmp ebx, 0 je NEAR $L000start_decrypt ; ; Round 0 mov eax, [ebp] xor ebx, ebx mov edx, [4+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 1 mov eax, [8+ebp] xor ebx, ebx mov edx, [12+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 2 mov eax, [16+ebp] xor ebx, ebx mov edx, [20+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 3 mov eax, [24+ebp] xor ebx, ebx mov edx, [28+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 4 mov eax, [32+ebp] xor ebx, ebx mov edx, [36+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 5 mov eax, [40+ebp] xor ebx, ebx mov edx, [44+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 6 mov eax, [48+ebp] xor ebx, ebx mov edx, [52+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 7 mov eax, [56+ebp] xor ebx, ebx mov edx, [60+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 8 mov eax, [64+ebp] xor ebx, ebx mov edx, [68+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 9 mov eax, [72+ebp] xor ebx, ebx mov edx, [76+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 10 mov eax, [80+ebp] xor ebx, ebx mov edx, [84+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 11 mov eax, [88+ebp] xor ebx, ebx mov edx, [92+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 12 mov eax, [96+ebp] xor ebx, ebx mov edx, [100+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 13 mov eax, [104+ebp] xor ebx, ebx mov edx, [108+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 14 mov eax, [112+ebp] xor ebx, ebx mov edx, [116+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 15 mov eax, [120+ebp] xor ebx, ebx mov edx, [124+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx jmp $L001end $L000start_decrypt: ; ; Round 15 mov eax, [120+ebp] xor ebx, ebx mov edx, [124+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 14 mov eax, [112+ebp] xor ebx, ebx mov edx, [116+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 13 mov eax, [104+ebp] xor ebx, ebx mov edx, [108+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 12 mov eax, [96+ebp] xor ebx, ebx mov edx, [100+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 11 mov eax, [88+ebp] xor ebx, ebx mov edx, [92+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 10 mov eax, [80+ebp] xor ebx, ebx mov edx, [84+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 9 mov eax, [72+ebp] xor ebx, ebx mov edx, [76+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 8 mov eax, [64+ebp] xor ebx, ebx mov edx, [68+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 7 mov eax, [56+ebp] xor ebx, ebx mov edx, [60+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 6 mov eax, [48+ebp] xor ebx, ebx mov edx, [52+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 5 mov eax, [40+ebp] xor ebx, ebx mov edx, [44+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 4 mov eax, [32+ebp] xor ebx, ebx mov edx, [36+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 3 mov eax, [24+ebp] xor ebx, ebx mov edx, [28+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 2 mov eax, [16+ebp] xor ebx, ebx mov edx, [20+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 1 mov eax, [8+ebp] xor ebx, ebx mov edx, [12+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 0 mov eax, [ebp] xor ebx, ebx mov edx, [4+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx $L001end: ; ; FP mov edx, [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 [edx], eax mov [4+edx], esi pop ebp pop ebx pop edi pop esi ret global _des_encrypt2 _des_encrypt2: push esi push edi ; ; Load the 2 words mov eax, [12+esp] xor ecx, ecx push ebx push ebp mov esi, [eax] mov ebx, [28+esp] rol esi, 3 mov edi, [4+eax] rol edi, 3 mov ebp, [24+esp] cmp ebx, 0 je NEAR $L002start_decrypt ; ; Round 0 mov eax, [ebp] xor ebx, ebx mov edx, [4+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 1 mov eax, [8+ebp] xor ebx, ebx mov edx, [12+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 2 mov eax, [16+ebp] xor ebx, ebx mov edx, [20+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 3 mov eax, [24+ebp] xor ebx, ebx mov edx, [28+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 4 mov eax, [32+ebp] xor ebx, ebx mov edx, [36+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 5 mov eax, [40+ebp] xor ebx, ebx mov edx, [44+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 6 mov eax, [48+ebp] xor ebx, ebx mov edx, [52+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 7 mov eax, [56+ebp] xor ebx, ebx mov edx, [60+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 8 mov eax, [64+ebp] xor ebx, ebx mov edx, [68+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 9 mov eax, [72+ebp] xor ebx, ebx mov edx, [76+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 10 mov eax, [80+ebp] xor ebx, ebx mov edx, [84+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 11 mov eax, [88+ebp] xor ebx, ebx mov edx, [92+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 12 mov eax, [96+ebp] xor ebx, ebx mov edx, [100+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 13 mov eax, [104+ebp] xor ebx, ebx mov edx, [108+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 14 mov eax, [112+ebp] xor ebx, ebx mov edx, [116+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 15 mov eax, [120+ebp] xor ebx, ebx mov edx, [124+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx jmp $L003end $L002start_decrypt: ; ; Round 15 mov eax, [120+ebp] xor ebx, ebx mov edx, [124+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 14 mov eax, [112+ebp] xor ebx, ebx mov edx, [116+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 13 mov eax, [104+ebp] xor ebx, ebx mov edx, [108+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 12 mov eax, [96+ebp] xor ebx, ebx mov edx, [100+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 11 mov eax, [88+ebp] xor ebx, ebx mov edx, [92+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 10 mov eax, [80+ebp] xor ebx, ebx mov edx, [84+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 9 mov eax, [72+ebp] xor ebx, ebx mov edx, [76+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 8 mov eax, [64+ebp] xor ebx, ebx mov edx, [68+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 7 mov eax, [56+ebp] xor ebx, ebx mov edx, [60+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 6 mov eax, [48+ebp] xor ebx, ebx mov edx, [52+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 5 mov eax, [40+ebp] xor ebx, ebx mov edx, [44+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 4 mov eax, [32+ebp] xor ebx, ebx mov edx, [36+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 3 mov eax, [24+ebp] xor ebx, ebx mov edx, [28+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 2 mov eax, [16+ebp] xor ebx, ebx mov edx, [20+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx ; ; Round 1 mov eax, [8+ebp] xor ebx, ebx mov edx, [12+ebp] xor eax, esi xor edx, esi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor edi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor edi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor edi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor edi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor edi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor edi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor edi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor edi, ebx ; ; Round 0 mov eax, [ebp] xor ebx, ebx mov edx, [4+ebp] xor eax, edi xor edx, edi and eax, 0fcfcfcfch and edx, 0cfcfcfcfh mov bl, al mov cl, ah ror edx, 4 mov ebp, [_des_SPtrans+ebx] mov bl, dl xor esi, ebp mov ebp, [_des_SPtrans+0200h+ecx] xor esi, ebp mov cl, dh shr eax, 16 mov ebp, [_des_SPtrans+0100h+ebx] xor esi, ebp mov bl, ah shr edx, 16 mov ebp, [_des_SPtrans+0300h+ecx] xor esi, ebp mov ebp, [24+esp] mov cl, dh and eax, 0ffh and edx, 0ffh mov ebx, [_des_SPtrans+0600h+ebx] xor esi, ebx mov ebx, [_des_SPtrans+0700h+ecx] xor esi, ebx mov ebx, [_des_SPtrans+0400h+eax] xor esi, ebx mov ebx, [_des_SPtrans+0500h+edx] xor esi, ebx $L003end: ; ; Fixup ror edi, 3 mov eax, [20+esp] ror esi, 3 mov [eax], edi mov [4+eax], esi pop ebp pop ebx pop edi pop esi ret global _des_encrypt3 _des_encrypt3: push ebx mov ebx, [8+esp] push ebp push esi push edi ; ; Load the data words mov edi, [ebx] mov esi, [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 [4+ebx], esi mov eax, [36+esp] mov [ebx], edx mov edi, [40+esp] mov esi, [44+esp] mov [8+esp], DWORD 1 mov [4+esp], eax mov [esp], ebx call _des_encrypt2 mov [8+esp], DWORD 0 mov [4+esp], edi mov [esp], ebx call _des_encrypt2 mov [8+esp], DWORD 1 mov [4+esp], esi mov [esp], ebx call _des_encrypt2 add esp, 12 mov edi, [ebx] mov esi, [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 [ebx], eax mov [4+ebx], esi pop edi pop esi pop ebp pop ebx ret global _des_decrypt3 _des_decrypt3: push ebx mov ebx, [8+esp] push ebp push esi push edi ; ; Load the data words mov edi, [ebx] mov esi, [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 [4+ebx], esi mov esi, [36+esp] mov [ebx], edx mov edi, [40+esp] mov eax, [44+esp] mov [8+esp], DWORD 0 mov [4+esp], eax mov [esp], ebx call _des_encrypt2 mov [8+esp], DWORD 1 mov [4+esp], edi mov [esp], ebx call _des_encrypt2 mov [8+esp], DWORD 0 mov [4+esp], esi mov [esp], ebx call _des_encrypt2 add esp, 12 mov edi, [ebx] mov esi, [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 [ebx], eax mov [4+ebx], esi pop edi pop esi pop ebp pop ebx ret global _des_ncbc_encrypt _des_ncbc_encrypt: ; push ebp push ebx push esi push edi mov ebp, [28+esp] ; getting iv ptr from parameter 4 mov ebx, [36+esp] mov esi, [ebx] mov edi, [4+ebx] push edi push esi push edi push esi mov ebx, esp mov esi, [36+esp] mov edi, [40+esp] ; getting encrypt flag from parameter 5 mov ecx, [56+esp] ; get and push parameter 5 push ecx ; get and push parameter 3 mov eax, [52+esp] push eax push ebx cmp ecx, 0 jz NEAR $L004decrypt and ebp, 4294967288 mov eax, [12+esp] mov ebx, [16+esp] jz NEAR $L005encrypt_finish L006encrypt_loop: mov ecx, [esi] mov edx, [4+esi] xor eax, ecx xor ebx, edx mov [12+esp], eax mov [16+esp], ebx call _des_encrypt1 mov eax, [12+esp] mov ebx, [16+esp] mov [edi], eax mov [4+edi], ebx add esi, 8 add edi, 8 sub ebp, 8 jnz NEAR L006encrypt_loop $L005encrypt_finish: mov ebp, [56+esp] and ebp, 7 jz NEAR $L007finish xor ecx, ecx xor edx, edx mov ebp, [$L008cbc_enc_jmp_table+ebp*4] jmp ebp L009ej7: mov dh, [6+esi] shl edx, 8 L010ej6: mov dh, [5+esi] L011ej5: mov dl, [4+esi] L012ej4: mov ecx, [esi] jmp $L013ejend L014ej3: mov ch, [2+esi] shl ecx, 8 L015ej2: mov ch, [1+esi] L016ej1: mov cl, [esi] $L013ejend: xor eax, ecx xor ebx, edx mov [12+esp], eax mov [16+esp], ebx call _des_encrypt1 mov eax, [12+esp] mov ebx, [16+esp] mov [edi], eax mov [4+edi], ebx jmp $L007finish $L004decrypt: and ebp, 4294967288 mov eax, [20+esp] mov ebx, [24+esp] jz NEAR $L017decrypt_finish L018decrypt_loop: mov eax, [esi] mov ebx, [4+esi] mov [12+esp], eax mov [16+esp], ebx call _des_encrypt1 mov eax, [12+esp] mov ebx, [16+esp] mov ecx, [20+esp] mov edx, [24+esp] xor ecx, eax xor edx, ebx mov eax, [esi] mov ebx, [4+esi] mov [edi], ecx mov [4+edi], edx mov [20+esp], eax mov [24+esp], ebx add esi, 8 add edi, 8 sub ebp, 8 jnz NEAR L018decrypt_loop $L017decrypt_finish: mov ebp, [56+esp] and ebp, 7 jz NEAR $L007finish mov eax, [esi] mov ebx, [4+esi] mov [12+esp], eax mov [16+esp], ebx call _des_encrypt1 mov eax, [12+esp] mov ebx, [16+esp] mov ecx, [20+esp] mov edx, [24+esp] xor ecx, eax xor edx, ebx mov eax, [esi] mov ebx, [4+esi] L019dj7: ror edx, 16 mov [6+edi], dl shr edx, 16 L020dj6: mov [5+edi], dh L021dj5: mov [4+edi], dl L022dj4: mov [edi], ecx jmp $L023djend L024dj3: ror ecx, 16 mov [2+edi], cl shl ecx, 16 L025dj2: mov [1+esi], ch L026dj1: mov [esi], cl $L023djend: jmp $L007finish $L007finish: mov ecx, [64+esp] add esp, 28 mov [ecx], eax mov [4+ecx], ebx pop edi pop esi pop ebx pop ebp ret $L008cbc_enc_jmp_table: DD 0 DD L016ej1 DD L015ej2 DD L014ej3 DD L012ej4 DD L011ej5 DD L010ej6 DD L009ej7 L027cbc_dec_jmp_table: DD 0 DD L026dj1 DD L025dj2 DD L024dj3 DD L022dj4 DD L021dj5 DD L020dj6 DD L019dj7 global _des_ede3_cbc_encrypt _des_ede3_cbc_encrypt: ; push ebp push ebx push esi push edi mov ebp, [28+esp] ; getting iv ptr from parameter 6 mov ebx, [44+esp] mov esi, [ebx] mov edi, [4+ebx] push edi push esi push edi push esi mov ebx, esp mov esi, [36+esp] mov edi, [40+esp] ; getting encrypt flag from parameter 7 mov ecx, [64+esp] ; get and push parameter 5 mov eax, [56+esp] push eax ; get and push parameter 4 mov eax, [56+esp] push eax ; get and push parameter 3 mov eax, [56+esp] push eax push ebx cmp ecx, 0 jz NEAR $L028decrypt and ebp, 4294967288 mov eax, [16+esp] mov ebx, [20+esp] jz NEAR $L029encrypt_finish L030encrypt_loop: mov ecx, [esi] mov edx, [4+esi] xor eax, ecx xor ebx, edx mov [16+esp], eax mov [20+esp], ebx call _des_encrypt3 mov eax, [16+esp] mov ebx, [20+esp] mov [edi], eax mov [4+edi], ebx add esi, 8 add edi, 8 sub ebp, 8 jnz NEAR L030encrypt_loop $L029encrypt_finish: mov ebp, [60+esp] and ebp, 7 jz NEAR $L031finish xor ecx, ecx xor edx, edx mov ebp, [$L032cbc_enc_jmp_table+ebp*4] jmp ebp L033ej7: mov dh, [6+esi] shl edx, 8 L034ej6: mov dh, [5+esi] L035ej5: mov dl, [4+esi] L036ej4: mov ecx, [esi] jmp $L037ejend L038ej3: mov ch, [2+esi] shl ecx, 8 L039ej2: mov ch, [1+esi] L040ej1: mov cl, [esi] $L037ejend: xor eax, ecx xor ebx, edx mov [16+esp], eax mov [20+esp], ebx call _des_encrypt3 mov eax, [16+esp] mov ebx, [20+esp] mov [edi], eax mov [4+edi], ebx jmp $L031finish $L028decrypt: and ebp, 4294967288 mov eax, [24+esp] mov ebx, [28+esp] jz NEAR $L041decrypt_finish L042decrypt_loop: mov eax, [esi] mov ebx, [4+esi] mov [16+esp], eax mov [20+esp], ebx call _des_decrypt3 mov eax, [16+esp] mov ebx, [20+esp] mov ecx, [24+esp] mov edx, [28+esp] xor ecx, eax xor edx, ebx mov eax, [esi] mov ebx, [4+esi] mov [edi], ecx mov [4+edi], edx mov [24+esp], eax mov [28+esp], ebx add esi, 8 add edi, 8 sub ebp, 8 jnz NEAR L042decrypt_loop $L041decrypt_finish: mov ebp, [60+esp] and ebp, 7 jz NEAR $L031finish mov eax, [esi] mov ebx, [4+esi] mov [16+esp], eax mov [20+esp], ebx call _des_decrypt3 mov eax, [16+esp] mov ebx, [20+esp] mov ecx, [24+esp] mov edx, [28+esp] xor ecx, eax xor edx, ebx mov eax, [esi] mov ebx, [4+esi] L043dj7: ror edx, 16 mov [6+edi], dl shr edx, 16 L044dj6: mov [5+edi], dh L045dj5: mov [4+edi], dl L046dj4: mov [edi], ecx jmp $L047djend L048dj3: ror ecx, 16 mov [2+edi], cl shl ecx, 16 L049dj2: mov [1+esi], ch L050dj1: mov [esi], cl $L047djend: jmp $L031finish $L031finish: mov ecx, [76+esp] add esp, 32 mov [ecx], eax mov [4+ecx], ebx pop edi pop esi pop ebx pop ebp ret $L032cbc_enc_jmp_table: DD 0 DD L040ej1 DD L039ej2 DD L038ej3 DD L036ej4 DD L035ej5 DD L034ej6 DD L033ej7 L051cbc_dec_jmp_table: DD 0 DD L050dj1 DD L049dj2 DD L048dj3 DD L046dj4 DD L045dj5 DD L044dj6 DD L043dj7