format COFF
	use32

	section '.text' code

	;; Function: rc4_init
	;;
	;; Parameters:
	;; 
	;;     [esp+8]  - state
	;;     [esp+12] - key
	;;     [esp+16] - key length
	;; 
rc4_init:
	push ebp
	mov ebp, esp

	mov eax, [ebp+8]
	xor cx, cx

@@:
	mov byte [eax], byte cx
	inc cx
	inc eax
	cmp cx, 255
	jne @b

	xor cx, cx
	mov eax, [ebp+8]
@@:
	


.end:
	leave
	ret

	;; Function: rc4
	;;
	;; Parameters:
	;;
	;;     [esp+8]  - state
	;;     [esp+12] - out buffer
	;;     [esp+16] - input buffer
	;;     [esp+20] - intput buffer size
rc4:
	push ebp
	mov ebp, esp

	push esi
	push edi
	push ebx

	xor esi, esi
	xor edi, edi
	xor ecx, ecx

.loop:
	cmp ecx, [esp+20]
	je .end

	inc esi
	mov eax, esi
	movzx esi, al

	add edi, esi
	mov eax, edi
	movzx edi, al

	mov edx, [esp+8]

	mov al, byte [edx+esi]
	mov bl, byte [edx+edi]

	mov byte [edx+esi], bl
	mov byte [edx+edi], al

	inc ecx
	jmp .loop
.end:

	pop ebx
	pop edi
	pop esi

	leave
	ret