; 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, gaswin (for GNU as on Win32) or Solaris ; eric ; segment .text global _RC5_32_encrypt _RC5_32_encrypt: ; push ebp push esi push edi mov edx, [16+esp] mov ebp, [20+esp] ; Load the 2 words mov edi, [edx] mov esi, [4+edx] push ebx mov ebx, [ebp] add edi, [4+ebp] add esi, [8+ebp] xor edi, esi mov eax, [12+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [16+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [20+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [24+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [28+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [32+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [36+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [40+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [44+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [48+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [52+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [56+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [60+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [64+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [68+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [72+ebp] mov ecx, edi rol esi, cl add esi, eax cmp ebx, 8 je NEAR $L000rc5_exit xor edi, esi mov eax, [76+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [80+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [84+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [88+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [92+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [96+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [100+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [104+ebp] mov ecx, edi rol esi, cl add esi, eax cmp ebx, 12 je NEAR $L000rc5_exit xor edi, esi mov eax, [108+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [112+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [116+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [120+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [124+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [128+ebp] mov ecx, edi rol esi, cl add esi, eax xor edi, esi mov eax, [132+ebp] mov ecx, esi rol edi, cl add edi, eax xor esi, edi mov eax, [136+ebp] mov ecx, edi rol esi, cl add esi, eax $L000rc5_exit: mov [edx], edi mov [4+edx], esi pop ebx pop edi pop esi pop ebp ret global _RC5_32_decrypt _RC5_32_decrypt: ; push ebp push esi push edi mov edx, [16+esp] mov ebp, [20+esp] ; Load the 2 words mov edi, [edx] mov esi, [4+edx] push ebx mov ebx, [ebp] cmp ebx, 12 je NEAR $L001rc5_dec_12 cmp ebx, 8 je NEAR $L002rc5_dec_8 mov eax, [136+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [132+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [128+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [124+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [120+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [116+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [112+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [108+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi $L001rc5_dec_12: mov eax, [104+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [100+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [96+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [92+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [88+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [84+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [80+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [76+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi $L002rc5_dec_8: mov eax, [72+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [68+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [64+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [60+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [56+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [52+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [48+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [44+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [40+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [36+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [32+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [28+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [24+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [20+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi mov eax, [16+ebp] sub esi, eax mov ecx, edi ror esi, cl xor esi, edi mov eax, [12+ebp] sub edi, eax mov ecx, esi ror edi, cl xor edi, esi sub esi, [8+ebp] sub edi, [4+ebp] L003rc5_exit: mov [edx], edi mov [4+edx], esi pop ebx pop edi pop esi pop ebp ret global _RC5_32_cbc_encrypt _RC5_32_cbc_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 3 mov eax, [48+esp] push eax push ebx cmp ecx, 0 jz NEAR $L004decrypt and ebp, 4294967288 mov eax, [8+esp] mov ebx, [12+esp] jz NEAR $L005encrypt_finish L006encrypt_loop: mov ecx, [esi] mov edx, [4+esi] xor eax, ecx xor ebx, edx mov [8+esp], eax mov [12+esp], ebx call _RC5_32_encrypt mov eax, [8+esp] mov ebx, [12+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, [52+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 [8+esp], eax mov [12+esp], ebx call _RC5_32_encrypt mov eax, [8+esp] mov ebx, [12+esp] mov [edi], eax mov [4+edi], ebx jmp $L007finish $L004decrypt: and ebp, 4294967288 mov eax, [16+esp] mov ebx, [20+esp] jz NEAR $L017decrypt_finish L018decrypt_loop: mov eax, [esi] mov ebx, [4+esi] mov [8+esp], eax mov [12+esp], ebx call _RC5_32_decrypt mov eax, [8+esp] mov ebx, [12+esp] mov ecx, [16+esp] mov edx, [20+esp] xor ecx, eax xor edx, ebx mov eax, [esi] mov ebx, [4+esi] mov [edi], ecx mov [4+edi], edx mov [16+esp], eax mov [20+esp], ebx add esi, 8 add edi, 8 sub ebp, 8 jnz NEAR L018decrypt_loop $L017decrypt_finish: mov ebp, [52+esp] and ebp, 7 jz NEAR $L007finish mov eax, [esi] mov ebx, [4+esi] mov [8+esp], eax mov [12+esp], ebx call _RC5_32_decrypt mov eax, [8+esp] mov ebx, [12+esp] mov ecx, [16+esp] mov edx, [20+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, [60+esp] add esp, 24 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