Function at 0x5f4640
Capabilities:
Encode data using xor

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x48
mov rsi, qword [rcx + 0x178]
mov rdi, qword [rcx + 0x180]
mov r15, rcx
mov r12, r8
xor ecx, ecx
mov qword [rsp + 0x98], rdx
movabs r8, 0xfffffffe0
mov rdx, r9
add rdx, qword [r15 + 0x38]
mov qword [rsp + 0xa8], r9
setb cl
cmp rdx, r8
ja 0x5f4cb0
test rcx, rcx
jne 0x5f4cb0
mov eax, dword [r15 + 0x174]
mov qword [r15 + 0x38], rdx
test eax, eax
jne 0x5f4ae0
mov r9d, dword [r15 + 0x170]
mov eax, dword [r15 + 0xc]
bswap eax
mov dword [rsp + 0x28], eax
mov eax, r9d
and eax, 0xf
je 0x5f4c9e
cmp qword [rsp + 0xa8], 0
je 0x5f4b97
mov r8, qword [rsp + 0x98]
mov r10, qword [rsp + 0xa8]
jmp 0x5f46f6
test r10, r10
je 0x5f4b7b
movzx edx, byte [r8]
mov ecx, r9d
add r12, 1
add r8, 1
add r9d, 1
sub r10, 1
mov byte [r15 + rcx + 0x188], dl
mov ecx, eax
add eax, 1
xor dl, byte [r15 + rcx + 0x10]
mov byte [r12 - 1], dl
and eax, 0xf
jne 0x5f46ed
mov dword [rsp + 0x2c], eax
mov qword [rsp + 0x98], r8
mov qword [rsp + 0xa8], r10
lea rdx, [r15 + 0x60]
lea rcx, [r15 + 0x40]
lea r8, [r15 + 0x188]
call sym.gcm_ghash_4bit
cmp qword [rsp + 0xa8], 0xbff
jbe 0x5f4831
lea rax, [r15 + 0x60]
mov qword [rsp + 0x30], rax
lea rax, [r15 + 0x40]
mov qword [rsp + 0x38], rax
lea rbp, [r15 + 0x10]
lea rbx, [r12 + 0xc00]
mov rdx, qword [rsp + 0x30]
mov r8, qword [rsp + 0x98]
mov r9d, 0xc00
lea r12, [rbx - 0xc00]
mov rcx, qword [rsp + 0x38]
call sym.gcm_ghash_4bit
mov r13d, dword [rsp + 0x28]
mov r14, qword [rsp + 0x98]
nop word [rax + rax]
add r13d, 1
mov r8, rdi
mov rdx, rbp
mov rcx, r15
call rsi
mov eax, r13d
add r12, 0x10
add r14, 0x10
bswap eax
mov dword [r15 + 0xc], eax
mov rax, qword [r14 - 0x10]
xor rax, qword [r15 + 0x10]
mov qword [r12 - 0x10], rax
mov rax, qword [r14 - 8]
xor rax, qword [r15 + 0x18]
mov qword [r12 - 8], rax
cmp r12, rbx
jne 0x5f47b8
add dword [rsp + 0x28], 0xc0
lea rbx, [r12 + 0xc00]
add qword [rsp + 0x98], 0xc00
sub qword [rsp + 0xa8], 0xc00
cmp qword [rsp + 0xa8], 0xbff
ja 0x5f4781
mov r9, qword [rsp + 0xa8]
and r9, 0xfffffffffffffff0
jne 0x5f4ba5
cmp qword [rsp + 0xa8], 0
je 0x5f4ac2
lea rdx, [r15 + 0x10]
mov r8, rdi
mov rcx, r15
call rsi
mov edx, dword [rsp + 0x28]
mov rbx, qword [rsp + 0x98]
mov r8d, dword [rsp + 0x2c]
add edx, 1
bswap edx
mov dword [r15 + 0xc], edx
movzx edx, byte [rbx]
mov rax, r8
lea ecx, [r8 + 1]
mov byte [r15 + r8 + 0x188], dl
mov r8, qword [rsp + 0xa8]
xor dl, byte [r15 + 0x10]
mov byte [r12], dl
sub r8, 1
je 0x5f4aba
movzx edx, byte [rbx + 1]
mov r11d, ecx
lea r9d, [rax + 2]
mov byte [r15 + r11 + 0x188], dl
xor dl, byte [r15 + 0x11]
cmp qword [rsp + 0xa8], 2
mov byte [r12 + 1], dl
je 0x5f4aba
movzx edx, byte [rbx + 2]
lea r11d, [rax + 3]
mov byte [r15 + r9 + 0x188], dl
xor dl, byte [r15 + 0x12]
cmp qword [rsp + 0xa8], 3
mov byte [r12 + 2], dl
je 0x5f4aba
movzx edx, byte [rbx + 3]
lea r9d, [rax + 4]
mov byte [r15 + r11 + 0x188], dl
xor dl, byte [r15 + 0x13]
cmp qword [rsp + 0xa8], 4
mov byte [r12 + 3], dl
je 0x5f4aba
movzx edx, byte [rbx + 4]
lea r11d, [rax + 5]
mov byte [r15 + r9 + 0x188], dl
xor dl, byte [r15 + 0x14]
cmp qword [rsp + 0xa8], 5
mov byte [r12 + 4], dl
je 0x5f4aba
movzx edx, byte [rbx + 5]
lea r9d, [rax + 6]
mov byte [r15 + r11 + 0x188], dl
xor dl, byte [r15 + 0x15]
cmp qword [rsp + 0xa8], 6
mov byte [r12 + 5], dl
je 0x5f4aba
movzx edx, byte [rbx + 6]
lea r11d, [rax + 7]
mov byte [r15 + r9 + 0x188], dl
xor dl, byte [r15 + 0x16]
cmp qword [rsp + 0xa8], 7
mov byte [r12 + 6], dl
je 0x5f4aba
movzx edx, byte [rbx + 7]
lea r9d, [rax + 8]
mov byte [r15 + r11 + 0x188], dl
xor dl, byte [r15 + 0x17]
cmp qword [rsp + 0xa8], 8
mov byte [r12 + 7], dl
je 0x5f4aba
movzx edx, byte [rbx + 8]
lea r11d, [rax + 9]
mov byte [r15 + r9 + 0x188], dl
xor dl, byte [r15 + 0x18]
cmp qword [rsp + 0xa8], 9
mov byte [r12 + 8], dl
je 0x5f4aba
movzx edx, byte [rbx + 9]
lea r9d, [rax + 0xa]
mov byte [r15 + r11 + 0x188], dl
xor dl, byte [r15 + 0x19]
cmp qword [rsp + 0xa8], 0xa
mov byte [r12 + 9], dl
je 0x5f4aba
movzx edx, byte [rbx + 0xa]
lea r11d, [rax + 0xb]
mov byte [r15 + r9 + 0x188], dl
xor dl, byte [r15 + 0x1a]
cmp qword [rsp + 0xa8], 0xb
mov byte [r12 + 0xa], dl
je 0x5f4aba
movzx edx, byte [rbx + 0xb]
lea r9d, [rax + 0xc]
mov byte [r15 + r11 + 0x188], dl
xor dl, byte [r15 + 0x1b]
cmp qword [rsp + 0xa8], 0xc
mov byte [r12 + 0xb], dl
je 0x5f4aba
movzx edx, byte [rbx + 0xc]
lea r11d, [rax + 0xd]
mov byte [r15 + r9 + 0x188], dl
xor dl, byte [r15 + 0x1c]
cmp qword [rsp + 0xa8], 0xd
mov byte [r12 + 0xc], dl
je 0x5f4aba
movzx edx, byte [rbx + 0xd]
add eax, 0xe
mov r9d, eax
mov byte [r15 + r11 + 0x188], dl
xor dl, byte [r15 + 0x1d]
cmp qword [rsp + 0xa8], 0xe
mov byte [r12 + 0xd], dl
je 0x5f4aba
movzx edx, byte [rbx + 0xe]
mov byte [r15 + r9 + 0x188], dl
xor dl, byte [r15 + 0x1e]
mov byte [r12 + 0xe], dl
lea eax, [rcx + r8]
mov dword [rsp + 0x2c], eax
mov eax, dword [rsp + 0x2c]
mov dword [r15 + 0x170], eax
xor eax, eax
add rsp, 0x48
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
test r9, r9
je 0x5f4c7f
mov eax, dword [r15 + 0xc]
movdqu xmm1, xmmword [r15 + 0x40]
mov dword [r15 + 0x174], 0
pxor xmm0, xmm0
mov dword [rsp + 0x2c], 0x10
mov edx, 1
bswap eax
mov dword [rsp + 0x28], eax
movups xmmword [r15 + 0x188], xmm1
movups xmmword [r15 + 0x40], xmm0
cmp qword [rsp + 0xa8], 0xf
jbe 0x5f4751
test dl, dl
je 0x5f4751
mov r9d, dword [rsp + 0x2c]
lea rdx, [r15 + 0x60]
lea rcx, [r15 + 0x40]
lea r8, [r15 + 0x188]
mov qword [rsp + 0x30], rdx
mov qword [rsp + 0x38], rcx
call sym.gcm_ghash_4bit
cmp qword [rsp + 0xa8], 0xbff
jbe 0x5f4cba
mov dword [rsp + 0x2c], 0
jmp 0x5f4775
mov dword [rsp + 0x2c], eax
mov qword [rsp + 0x98], r8
mov qword [rsp + 0xa8], r10
test eax, eax
je 0x5f473d
mov dword [r15 + 0x170], r9d
xor eax, eax
jmp 0x5f4acf
lea rax, [r15 + 0x60]
mov qword [rsp + 0x30], rax
lea rax, [r15 + 0x40]
mov qword [rsp + 0x38], rax
mov rcx, rax
mov r8, qword [rsp + 0x98]
mov rdx, qword [rsp + 0x30]
mov rbp, r12
call sym.gcm_ghash_4bit
mov rax, qword [rsp + 0xa8]
lea rdx, [r15 + 0x10]
mov r8, rdi
mov r11d, dword [rsp + 0x28]
mov r9, qword [rsp + 0x98]
lea rbx, [rax - 0x10]
shr rbx, 4
add r11d, 1
mov r13, r9
lea eax, [r11 + rbx]
mov rdi, rbx
mov r14d, r11d
mov rbx, rdx
mov dword [rsp + 0x28], eax
jmp 0x5f4c11
add r14d, 1
mov qword [rsp + 0x30], r8
mov rdx, rbx
mov rcx, r15
add rbp, 0x10
call rsi
mov eax, r14d
add r13, 0x10
mov r8, qword [rsp + 0x30]
bswap eax
mov dword [r15 + 0xc], eax
mov rax, qword [r13 - 0x10]
xor rax, qword [r15 + 0x10]
mov qword [rbp - 0x10], rax
mov rax, qword [r13 - 8]
xor rax, qword [r15 + 0x18]
mov qword [rbp - 8], rax
cmp r14d, dword [rsp + 0x28]
jne 0x5f4c0d
mov rbx, rdi
mov dword [rsp + 0x28], r14d
mov rdi, r8
and qword [rsp + 0xa8], 0xf
lea rdx, [rbx + 1]
shl rdx, 4
add qword [rsp + 0x98], rdx
add r12, rdx
jmp 0x5f4843
lea rdx, [r15 + 0x60]
lea rcx, [r15 + 0x40]
call sym.gcm_gmult_4bit
xor eax, eax
mov dword [r15 + 0x174], 0
jmp 0x5f4acf
test r9d, r9d
mov dword [rsp + 0x2c], r9d
setne dl
jmp 0x5f4b22
mov eax, 0xffffffff
jmp 0x5f4acf
mov r9, qword [rsp + 0xa8]
mov dword [rsp + 0x2c], 0
mov rcx, qword [rsp + 0x38]
and r9, 0xfffffffffffffff0
jmp 0x5f4bba