Function at 0x590b70
Capabilities:
Encode data using xor
Hash data with crc32

Disassembly:
push rsi
push rdi
push rbp
push rbx
test rdx, rdx
je 0x590899
not ecx
test r8, r8
je 0x590b59
lea rsi, [r8 - 0x20]
xor r11d, r11d
lea r9, [0x0083c6a0]
nop word cs:[rax + rax]
lea rdi, [rdx + r11]
test dil, 3
je 0x5908a0
movzx eax, byte [rdi]
movzx edi, cl
xor edi, eax
shr ecx, 8
xor ecx, dword [r9 + rdi*4]
inc r11
dec rsi
cmp r8, r11
jne 0x590870
jmp 0x590b59
xor ecx, ecx
jmp 0x590b5b
mov r10, r8
sub r10, r11
cmp r10, 0x20
jae 0x5908e0
cmp r10, 4
jae 0x590a94
test r10, r10
je 0x590b59
test r10b, 1
jne 0x590b05
mov rdx, r10
cmp r10, 1
jne 0x590b30
jmp 0x590b59
xor ecx, dword [rdi]
movzx ebx, cl
movzx eax, ch
mov eax, dword [r9 + rax*4 + 0x800]
xor eax, dword [r9 + rbx*4 + 0xc00]
mov ebx, ecx
shr ebx, 0x10
movzx ebx, bl
xor eax, dword [r9 + rbx*4 + 0x400]
shr ecx, 0x18
xor eax, dword [r9 + rcx*4]
xor eax, dword [rdi + 4]
movzx ebx, al
movzx ecx, ah
mov ecx, dword [r9 + rcx*4 + 0x800]
xor ecx, dword [r9 + rbx*4 + 0xc00]
mov ebx, eax
shr ebx, 0x10
movzx ebx, bl
xor ecx, dword [r9 + rbx*4 + 0x400]
shr eax, 0x18
xor ecx, dword [r9 + rax*4]
xor ecx, dword [rdi + 8]
movzx ebx, cl
movzx eax, ch
mov eax, dword [r9 + rax*4 + 0x800]
xor eax, dword [r9 + rbx*4 + 0xc00]
mov ebx, ecx
shr ebx, 0x10
movzx ebx, bl
xor eax, dword [r9 + rbx*4 + 0x400]
shr ecx, 0x18
xor eax, dword [r9 + rcx*4]
xor eax, dword [rdi + 0xc]
movzx ebx, al
movzx ecx, ah
mov ecx, dword [r9 + rcx*4 + 0x800]
xor ecx, dword [r9 + rbx*4 + 0xc00]
mov ebx, eax
shr ebx, 0x10
movzx ebx, bl
xor ecx, dword [r9 + rbx*4 + 0x400]
shr eax, 0x18
xor ecx, dword [r9 + rax*4]
xor ecx, dword [rdi + 0x10]
movzx ebx, cl
movzx eax, ch
mov eax, dword [r9 + rax*4 + 0x800]
xor eax, dword [r9 + rbx*4 + 0xc00]
mov ebx, ecx
shr ebx, 0x10
movzx ebx, bl
xor eax, dword [r9 + rbx*4 + 0x400]
shr ecx, 0x18
xor eax, dword [r9 + rcx*4]
xor eax, dword [rdi + 0x14]
movzx ebx, al
movzx ecx, ah
mov ecx, dword [r9 + rcx*4 + 0x800]
xor ecx, dword [r9 + rbx*4 + 0xc00]
mov ebx, eax
shr ebx, 0x10
movzx ebx, bl
xor ecx, dword [r9 + rbx*4 + 0x400]
shr eax, 0x18
xor ecx, dword [r9 + rax*4]
xor ecx, dword [rdi + 0x18]
movzx ebx, cl
movzx eax, ch
mov eax, dword [r9 + rax*4 + 0x800]
xor eax, dword [r9 + rbx*4 + 0xc00]
mov ebx, ecx
shr ebx, 0x10
movzx ebx, bl
xor eax, dword [r9 + rbx*4 + 0x400]
shr ecx, 0x18
xor eax, dword [r9 + rcx*4]
xor eax, dword [rdi + 0x1c]
movzx ebx, al
movzx ecx, ah
mov ecx, dword [r9 + rcx*4 + 0x800]
xor ecx, dword [r9 + rbx*4 + 0xc00]
mov ebx, eax
shr ebx, 0x10
movzx ebx, bl
xor ecx, dword [r9 + rbx*4 + 0x400]
shr eax, 0x18
xor ecx, dword [r9 + rax*4]
add r10, 0xffffffffffffffe0
add rdi, 0x20
cmp r10, 0x1f
ja 0x5908e0
and rsi, 0xffffffffffffffe0
add rdx, rsi
lea rdi, [r11 + rdx + 0x20]
add r8, 0xffffffffffffffe0
sub r8, rsi
sub r8, r11
mov r10, r8
cmp r10, 4
jb 0x5908b6
lea rdx, [r10 - 4]
mov r8, rdx
shr r8, 2
mov rax, rdi
nop word cs:[rax + rax]
xor ecx, dword [rax]
movzx ebx, cl
movzx ebp, ch
mov esi, ecx
mov ebp, dword [r9 + rbp*4 + 0x800]
xor ebp, dword [r9 + rbx*4 + 0xc00]
add rax, 4
shr ecx, 0x10
movzx ecx, cl
xor ebp, dword [r9 + rcx*4 + 0x400]
shr esi, 0x18
mov ecx, ebp
xor ecx, dword [r9 + rsi*4]
add r10, 0xfffffffffffffffc
cmp r10, 3
ja 0x590ab0
lea rdi, [rdi + r8*4 + 4]
and edx, 3
mov r10, rdx
test r10, r10
jne 0x5908bf
jmp 0x590b59
movzx eax, byte [rdi]
inc rdi
movzx edx, cl
xor edx, eax
shr ecx, 8
xor ecx, dword [r9 + rdx*4]
lea rdx, [r10 - 1]
cmp r10, 1
je 0x590b59
nop word cs:[rax + rax]
movzx eax, byte [rdi]
movzx ebp, cl
xor ebp, eax
shr ecx, 8
xor ecx, dword [r9 + rbp*4]
movzx eax, byte [rdi + 1]
movzx ebp, cl
xor ebp, eax
shr ecx, 8
xor ecx, dword [r9 + rbp*4]
add rdi, 2
add rdx, 0xfffffffffffffffe
jne 0x590b30
not ecx
mov eax, ecx
pop rbx
pop rbp
pop rdi
pop rsi
ret
mov r8d, r8d
jmp 0x590840