/* Run the C pre-processor over this file with one of the following defined * ELF - elf object files, * OUT - a.out object files, * BSDI - BSDI style a.out object files * SOL - Solaris style elf */ #define TYPE(a,b) .type a,b #define SIZE(a,b) .size a,b #if defined(OUT) || defined(BSDI) #define RC4 _RC4 #endif #ifdef OUT #define OK 1 #define ALIGN 4 #endif #ifdef BSDI #define OK 1 #define ALIGN 4 #undef SIZE #undef TYPE #define SIZE(a,b) #define TYPE(a,b) #endif #if defined(ELF) || defined(SOL) #define OK 1 #define ALIGN 16 #endif #ifndef OK You need to define one of ELF - elf systems - linux-elf, NetBSD and DG-UX OUT - a.out systems - linux-a.out and FreeBSD SOL - solaris systems, which are elf with strange comment lines BSDI - a.out with a very primative version of as. #endif /* Let the Assembler begin :-) */ /* Don't even think of reading this code */ /* It was automatically generated by rc4-586.pl */ /* Which is a perl program used to generate the x86 assember for */ /* any of elf, a.out, BSDI,Win32, or Solaris */ /* eric */ .file "rc4-586.s" .version "01.01" gcc2_compiled.: .text .align ALIGN .globl RC4 TYPE(RC4,@function) RC4: pushl %ebp pushl %ebx movl 12(%esp), %ebp movl 16(%esp), %ebx pushl %esi pushl %edi movl (%ebp), %ecx movl 4(%ebp), %edx movl 28(%esp), %esi incl %ecx subl $12, %esp addl $8, %ebp andl $255, %ecx leal -8(%ebx,%esi,), %ebx movl 44(%esp), %edi movl %ebx, 8(%esp) movl (%ebp,%ecx,4), %eax cmpl %esi, %ebx jl .L000end .L001start: addl $8, %esi /* Round 0 */ addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb %bl, (%esp) /* Round 1 */ addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb %bl, 1(%esp) /* Round 2 */ addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb %bl, 2(%esp) /* Round 3 */ addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb %bl, 3(%esp) /* Round 4 */ addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb %bl, 4(%esp) /* Round 5 */ addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb %bl, 5(%esp) /* Round 6 */ addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb %bl, 6(%esp) /* Round 7 */ addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx addl $8, %edi movb %bl, 7(%esp) /* apply the cipher text */ movl (%esp), %eax movl -8(%esi), %ebx xorl %ebx, %eax movl -4(%esi), %ebx movl %eax, -8(%edi) movl 4(%esp), %eax xorl %ebx, %eax movl 8(%esp), %ebx movl %eax, -4(%edi) movl (%ebp,%ecx,4), %eax cmpl %ebx, %esi jle .L001start .L000end: /* Round 0 */ addl $8, %ebx incl %esi cmpl %esi, %ebx jl .L002finished movl %ebx, 8(%esp) addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb -1(%esi), %bh xorb %bh, %bl movb %bl, (%edi) /* Round 1 */ movl 8(%esp), %ebx cmpl %esi, %ebx jle .L002finished incl %esi addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb -1(%esi), %bh xorb %bh, %bl movb %bl, 1(%edi) /* Round 2 */ movl 8(%esp), %ebx cmpl %esi, %ebx jle .L002finished incl %esi addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb -1(%esi), %bh xorb %bh, %bl movb %bl, 2(%edi) /* Round 3 */ movl 8(%esp), %ebx cmpl %esi, %ebx jle .L002finished incl %esi addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb -1(%esi), %bh xorb %bh, %bl movb %bl, 3(%edi) /* Round 4 */ movl 8(%esp), %ebx cmpl %esi, %ebx jle .L002finished incl %esi addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb -1(%esi), %bh xorb %bh, %bl movb %bl, 4(%edi) /* Round 5 */ movl 8(%esp), %ebx cmpl %esi, %ebx jle .L002finished incl %esi addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movl (%ebp,%ecx,4), %eax movb -1(%esi), %bh xorb %bh, %bl movb %bl, 5(%edi) /* Round 6 */ movl 8(%esp), %ebx cmpl %esi, %ebx jle .L002finished incl %esi addl %eax, %edx andl $255, %edx incl %ecx movl (%ebp,%edx,4), %ebx movl %ebx, -4(%ebp,%ecx,4) addl %eax, %ebx andl $255, %ecx andl $255, %ebx movl %eax, (%ebp,%edx,4) nop movl (%ebp,%ebx,4), %ebx movb -1(%esi), %bh xorb %bh, %bl movb %bl, 6(%edi) .L002finished: decl %ecx addl $12, %esp movl %edx, -4(%ebp) movb %cl, -8(%ebp) popl %edi popl %esi popl %ebx popl %ebp ret .RC4_end: SIZE(RC4,.RC4_end-RC4) .ident "RC4"