| ; 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 <eay@cryptsoft.com> |
| ; |
| 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 |