; Don't even think of reading this code ; It was automatically generated by rc5-586.pl ; Which is a perl program used to generate the x86 assember for ; any of elf, a.out, BSDI,Win32, or Solaris ; eric ; TITLE rc5-586.asm .386 .model FLAT _TEXT SEGMENT PUBLIC _RC5_32_encrypt _RC5_32_encrypt PROC NEAR ; push ebp push esi push edi mov edx, DWORD PTR 16[esp] mov ebp, DWORD PTR 20[esp] ; Load the 2 words mov edi, DWORD PTR [edx] mov esi, DWORD PTR 4[edx] push ebx mov ebx, DWORD PTR [ebp] add edi, DWORD PTR 4[ebp] add esi, DWORD PTR 8[ebp] xor edi, esi mov eax, DWORD PTR 12[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 16[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 20[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 24[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 28[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 32[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 36[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 40[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 44[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 48[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 52[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 56[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 60[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 64[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 68[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 72[ebp] mov ecx, edi rol esi, cl add esi, eax cmp ebx, 8 je $L000rc5_exit xor edi, esi mov eax, DWORD PTR 76[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 80[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 84[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 88[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 92[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 96[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 100[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 104[ebp] mov ecx, edi rol esi, cl add esi, eax cmp ebx, 12 je $L000rc5_exit xor edi, esi mov eax, DWORD PTR 108[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 112[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 116[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 120[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 124[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 128[ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, DWORD PTR 132[ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, DWORD PTR 136[ebp] mov ecx, edi rol esi, cl add esi, eax $L000rc5_exit: mov DWORD PTR [edx],edi mov DWORD PTR 4[edx],esi pop ebx pop edi pop esi pop ebp ret _RC5_32_encrypt ENDP _TEXT ENDS _TEXT SEGMENT PUBLIC _RC5_32_decrypt _RC5_32_decrypt PROC NEAR ; push ebp push esi push edi mov edx, DWORD PTR 16[esp] mov ebp, DWORD PTR 20[esp] ; Load the 2 words mov edi, DWORD PTR [edx] mov esi, DWORD PTR 4[edx] push ebx mov ebx, DWORD PTR [ebp] cmp ebx, 12 je $L001rc5_dec_12 cmp ebx, 8 je $L002rc5_dec_8 mov eax, DWORD PTR 136[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 132[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 128[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 124[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 120[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 116[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 112[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 108[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi $L001rc5_dec_12: mov eax, DWORD PTR 104[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 100[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 96[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 92[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 88[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 84[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 80[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 76[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi $L002rc5_dec_8: mov eax, DWORD PTR 72[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 68[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 64[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 60[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 56[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 52[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 48[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 44[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 40[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 36[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 32[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 28[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 24[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 20[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, DWORD PTR 16[ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, DWORD PTR 12[ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi sub esi, DWORD PTR 8[ebp] sub edi, DWORD PTR 4[ebp] L003rc5_exit: mov DWORD PTR [edx],edi mov DWORD PTR 4[edx],esi pop ebx pop edi pop esi pop ebp ret _RC5_32_decrypt ENDP _TEXT ENDS _TEXT SEGMENT PUBLIC _RC5_32_cbc_encrypt _RC5_32_cbc_encrypt PROC NEAR ; 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 3 mov eax, DWORD PTR 48[esp] push eax push ebx cmp ecx, 0 jz $L004decrypt and ebp, 4294967288 mov eax, DWORD PTR 8[esp] mov ebx, DWORD PTR 12[esp] jz $L005encrypt_finish L006encrypt_loop: mov ecx, DWORD PTR [esi] mov edx, DWORD PTR 4[esi] xor eax, ecx xor ebx, edx mov DWORD PTR 8[esp],eax mov DWORD PTR 12[esp],ebx call _RC5_32_encrypt mov eax, DWORD PTR 8[esp] mov ebx, DWORD PTR 12[esp] mov DWORD PTR [edi],eax mov DWORD PTR 4[edi],ebx add esi, 8 add edi, 8 sub ebp, 8 jnz L006encrypt_loop $L005encrypt_finish: mov ebp, DWORD PTR 52[esp] and ebp, 7 jz $L007finish xor ecx, ecx xor edx, edx mov ebp, DWORD PTR $L008cbc_enc_jmp_table[ebp*4] jmp ebp L009ej7: mov dh, BYTE PTR 6[esi] shl edx, 8 L010ej6: mov dh, BYTE PTR 5[esi] L011ej5: mov dl, BYTE PTR 4[esi] L012ej4: mov ecx, DWORD PTR [esi] jmp $L013ejend L014ej3: mov ch, BYTE PTR 2[esi] shl ecx, 8 L015ej2: mov ch, BYTE PTR 1[esi] L016ej1: mov cl, BYTE PTR [esi] $L013ejend: xor eax, ecx xor ebx, edx mov DWORD PTR 8[esp],eax mov DWORD PTR 12[esp],ebx call _RC5_32_encrypt mov eax, DWORD PTR 8[esp] mov ebx, DWORD PTR 12[esp] mov DWORD PTR [edi],eax mov DWORD PTR 4[edi],ebx jmp $L007finish $L004decrypt: and ebp, 4294967288 mov eax, DWORD PTR 16[esp] mov ebx, DWORD PTR 20[esp] jz $L017decrypt_finish L018decrypt_loop: mov eax, DWORD PTR [esi] mov ebx, DWORD PTR 4[esi] mov DWORD PTR 8[esp],eax mov DWORD PTR 12[esp],ebx call _RC5_32_decrypt mov eax, DWORD PTR 8[esp] mov ebx, DWORD PTR 12[esp] mov ecx, DWORD PTR 16[esp] mov edx, DWORD PTR 20[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 16[esp],eax mov DWORD PTR 20[esp],ebx add esi, 8 add edi, 8 sub ebp, 8 jnz L018decrypt_loop $L017decrypt_finish: mov ebp, DWORD PTR 52[esp] and ebp, 7 jz $L007finish mov eax, DWORD PTR [esi] mov ebx, DWORD PTR 4[esi] mov DWORD PTR 8[esp],eax mov DWORD PTR 12[esp],ebx call _RC5_32_decrypt mov eax, DWORD PTR 8[esp] mov ebx, DWORD PTR 12[esp] mov ecx, DWORD PTR 16[esp] mov edx, DWORD PTR 20[esp] xor ecx, eax xor edx, ebx mov eax, DWORD PTR [esi] mov ebx, DWORD PTR 4[esi] L019dj7: ror edx, 16 mov BYTE PTR 6[edi],dl shr edx, 16 L020dj6: mov BYTE PTR 5[edi],dh L021dj5: mov BYTE PTR 4[edi],dl L022dj4: mov DWORD PTR [edi],ecx jmp $L023djend L024dj3: ror ecx, 16 mov BYTE PTR 2[edi],cl shl ecx, 16 L025dj2: mov BYTE PTR 1[esi],ch L026dj1: mov BYTE PTR [esi], cl $L023djend: jmp $L007finish $L007finish: mov ecx, DWORD PTR 60[esp] add esp, 24 mov DWORD PTR [ecx],eax mov DWORD PTR 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 _RC5_32_cbc_encrypt ENDP _TEXT ENDS END