88 lines
940 B
NASM
88 lines
940 B
NASM
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
|