openssl/crypto/rc4/asm/r4-win32.asm
1998-12-21 10:56:39 +00:00

314 lines
6.1 KiB
NASM

; 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 <eay@cryptsoft.com>
;
TITLE rc4-586.asm
.386
.model FLAT
_TEXT SEGMENT
PUBLIC _RC4
_RC4 PROC NEAR
;
push ebp
push ebx
mov ebp, DWORD PTR 12[esp]
mov ebx, DWORD PTR 16[esp]
push esi
push edi
mov ecx, DWORD PTR [ebp]
mov edx, DWORD PTR 4[ebp]
mov esi, DWORD PTR 28[esp]
inc ecx
sub esp, 12
add ebp, 8
and ecx, 255
lea ebx, DWORD PTR [esi+ebx-8]
mov edi, DWORD PTR 44[esp]
mov DWORD PTR 8[esp],ebx
mov eax, DWORD PTR [ecx*4+ebp]
cmp ebx, esi
jl $L000end
L001start:
add esi, 8
; Round 0
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov BYTE PTR [esp], bl
; Round 1
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov BYTE PTR 1[esp],bl
; Round 2
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov BYTE PTR 2[esp],bl
; Round 3
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov BYTE PTR 3[esp],bl
; Round 4
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov BYTE PTR 4[esp],bl
; Round 5
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov BYTE PTR 5[esp],bl
; Round 6
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov BYTE PTR 6[esp],bl
; Round 7
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
add edi, 8
mov BYTE PTR 7[esp],bl
; apply the cipher text
mov eax, DWORD PTR [esp]
mov ebx, DWORD PTR [esi-8]
xor eax, ebx
mov ebx, DWORD PTR [esi-4]
mov DWORD PTR [edi-8],eax
mov eax, DWORD PTR 4[esp]
xor eax, ebx
mov ebx, DWORD PTR 8[esp]
mov DWORD PTR [edi-4],eax
mov eax, DWORD PTR [ecx*4+ebp]
cmp esi, ebx
jle L001start
$L000end:
; Round 0
add ebx, 8
inc esi
cmp ebx, esi
jl $L002finished
mov DWORD PTR 8[esp],ebx
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov bh, BYTE PTR [esi-1]
xor bl, bh
mov BYTE PTR [edi], bl
; Round 1
mov ebx, DWORD PTR 8[esp]
cmp ebx, esi
jle $L002finished
inc esi
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov bh, BYTE PTR [esi-1]
xor bl, bh
mov BYTE PTR 1[edi],bl
; Round 2
mov ebx, DWORD PTR 8[esp]
cmp ebx, esi
jle $L002finished
inc esi
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov bh, BYTE PTR [esi-1]
xor bl, bh
mov BYTE PTR 2[edi],bl
; Round 3
mov ebx, DWORD PTR 8[esp]
cmp ebx, esi
jle $L002finished
inc esi
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov bh, BYTE PTR [esi-1]
xor bl, bh
mov BYTE PTR 3[edi],bl
; Round 4
mov ebx, DWORD PTR 8[esp]
cmp ebx, esi
jle $L002finished
inc esi
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov bh, BYTE PTR [esi-1]
xor bl, bh
mov BYTE PTR 4[edi],bl
; Round 5
mov ebx, DWORD PTR 8[esp]
cmp ebx, esi
jle $L002finished
inc esi
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov eax, DWORD PTR [ecx*4+ebp]
mov bh, BYTE PTR [esi-1]
xor bl, bh
mov BYTE PTR 5[edi],bl
; Round 6
mov ebx, DWORD PTR 8[esp]
cmp ebx, esi
jle $L002finished
inc esi
add edx, eax
and edx, 255
inc ecx
mov ebx, DWORD PTR [edx*4+ebp]
mov DWORD PTR [ecx*4+ebp-4],ebx
add ebx, eax
and ecx, 255
and ebx, 255
mov DWORD PTR [edx*4+ebp],eax
nop
mov ebx, DWORD PTR [ebx*4+ebp]
mov bh, BYTE PTR [esi-1]
xor bl, bh
mov BYTE PTR 6[edi],bl
$L002finished:
dec ecx
add esp, 12
mov DWORD PTR [ebp-4],edx
mov BYTE PTR [ebp-8],cl
pop edi
pop esi
pop ebx
pop ebp
ret
_RC4 ENDP
_TEXT ENDS
END