Function at 0x59e240
Capabilities:
Encode data using xor

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x88
mov r13, r9
mov qword [rsp + 0xd0], rcx
mov rcx, r9
mov r14, rdx
mov rsi, r8
call sym.BN_CTX_start
mov rcx, r13
call sym.BN_CTX_get
mov rbx, rax
test rax, rax
jne 0x59e28c
jmp 0x59e2ac
mov rcx, rbx
call sym.BN_is_zero
test eax, eax
je 0x59e2d0
mov rcx, rsi
call sym.BN_num_bits
xor r9d, r9d
mov r8d, 0xffffffff
mov rcx, rbx
lea edx, [rax - 1]
call sym.BN_priv_rand
test eax, eax
jne 0x59e280
xor r12d, r12d
mov rcx, r13
call sym.BN_CTX_end
mov eax, r12d
add rsp, 0x88
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
mov qword [rsp + 0x20], r13
mov r9, rsi
mov r8, rbx
mov rdx, r14
mov rcx, qword [rsp + 0xd0]
mov r12d, eax
call sym.BN_GF2m_mod_mul
test eax, eax
je 0x59e2ac
mov rcx, r13
call sym.BN_CTX_start
mov rcx, r13
call sym.BN_CTX_get
mov rcx, r13
mov qword [rsp + 0x38], rax
call sym.BN_CTX_get
mov rcx, r13
mov qword [rsp + 0x48], rax
call sym.BN_CTX_get
mov rcx, r13
mov qword [rsp + 0x30], rax
call sym.BN_CTX_get
mov qword [rsp + 0x40], rax
test rax, rax
je 0x59e360
mov rdi, qword [rsp + 0x30]
mov rdx, qword [rsp + 0xd0]
mov r8, rsi
mov rcx, rdi
call sym.BN_GF2m_mod
test eax, eax
je 0x59e360
mov rcx, rdi
call sym.BN_is_zero
test eax, eax
je 0x59e36d
nop dword [rax + rax]
mov rcx, r13
call sym.BN_CTX_end
jmp 0x59e2af
mov r15, qword [rsp + 0x40]
mov rdx, rsi
mov rcx, r15
call sym.BN_copy
test rax, rax
je 0x59e360
mov rcx, rdi
call sym.BN_num_bits
mov rcx, r15
mov dword [rsp + 0x54], eax
call sym.BN_num_bits
mov r15d, dword [rsi + 8]
mov rcx, rdi
mov dword [rsp + 0x58], eax
mov edx, r15d
mov dword [rsp + 0x50], r15d
call sym.bn_wexpand
test rax, rax
je 0x59e360
mov rax, rdi
mov r9d, dword [rsp + 0x54]
mov rdi, qword [rdi]
movsxd rdx, dword [rax + 8]
cmp r15d, edx
jle 0x59e3ef
mov eax, dword [rsp + 0x50]
mov dword [rsp + 0x54], r9d
lea ecx, [rax - 1]
mov eax, ecx
lea rcx, [rdi + rdx*8]
sub eax, edx
xor edx, edx
lea r8, [rax*8 + 8]
call sym.memset
mov r9d, dword [rsp + 0x54]
mov rdx, qword [rsp + 0x30]
mov eax, dword [rsp + 0x50]
mov dword [rsp + 0x54], r9d
mov rcx, qword [rsp + 0x38]
mov dword [rdx + 8], eax
mov edx, eax
call sym.bn_wexpand
mov r9d, dword [rsp + 0x54]
test rax, rax
je 0x59e360
mov r14, qword [rsp + 0x38]
mov r15d, dword [rsp + 0x50]
mov rbp, qword [r14]
mov qword [rbp], 1
cmp r15d, 1
jle 0x59e848
lea eax, [r15 - 2]
xor edx, edx
lea rcx, [rbp + 8]
mov dword [rsp + 0x54], r9d
lea r8, [rax*8 + 8]
call sym.memset
mov dword [r14 + 8], r15d
mov rcx, qword [rsp + 0x48]
mov edx, r15d
call sym.bn_wexpand
mov r9d, dword [rsp + 0x54]
test rax, rax
je 0x59e360
mov rax, qword [rsp + 0x48]
mov r10, qword [rax]
mov edx, dword [rsp + 0x50]
mov rcx, r10
mov dword [rsp + 0x78], r9d
lea eax, [rdx - 1]
test edx, edx
mov dword [rsp + 0x54], eax
lea r8, [rax*8 + 8]
mov eax, 8
cmovle r8, rax
xor edx, edx
call sym.memset
mov r9d, dword [rsp + 0x78]
mov r10, rax
mov edx, dword [rsp + 0x50]
mov rax, qword [rsp + 0x48]
mov qword [rsp + 0x70], rbx
mov dword [rsp + 0x7c], r12d
mov dword [rax + 8], edx
mov rax, qword [rsp + 0x40]
mov qword [rsp + 0xe8], r13
mov r13d, dword [rsp + 0x58]
mov r15, qword [rax]
mov eax, edx
mov qword [rsp + 0xe0], rsi
shr eax, 1
shl rax, 4
mov rcx, rax
mov eax, edx
and eax, 0xfffffffe
mov rsi, rcx
movsxd r14, eax
mov dword [rsp + 0x78], eax
movsxd rax, dword [rsp + 0x54]
shl r14, 3
shl rax, 3
mov qword [rsp + 0x60], rax
lea eax, [rdx - 2]
add rax, 2
mov qword [rsp + 0x68], rax
nop dword [rax]
mov rcx, qword [rdi]
test r9d, r9d
je 0x59e740
test cl, 1
je 0x59e78a
cmp r9d, 0x40
jle 0x59e6c0
cmp r9d, r13d
jge 0x59e587
mov rdx, qword [rsp + 0x30]
mov rbx, qword [rsp + 0x38]
mov eax, r9d
mov r9d, r13d
mov r13d, eax
mov rbp, r10
mov rdi, r15
mov rax, rdx
mov r10, qword [rbx]
mov r15, qword [rdx]
mov rdx, qword [rsp + 0x40]
mov qword [rsp + 0x40], rax
mov rax, rbx
mov rbx, qword [rsp + 0x48]
mov qword [rsp + 0x48], rax
mov qword [rsp + 0x30], rdx
mov qword [rsp + 0x38], rbx
mov eax, dword [rsp + 0x50]
test eax, eax
jle 0x59e644
lea rax, [rdi + 0xf]
mov rdx, rax
mov rcx, rax
sub rdx, r15
cmp rdx, 0x1e
seta dl
sub rcx, rbp
cmp rcx, 0x1e
seta cl
and ecx, edx
cmp dword [rsp + 0x54], 1
seta dl
sub rax, r10
and edx, ecx
cmp rax, 0x1e
lea rax, [r15 + 0xf]
seta cl
sub rax, rbp
and edx, ecx
cmp rax, 0x1e
seta al
test dl, al
je 0x59e75e
lea rax, [rbp + 0xf]
sub rax, r10
cmp rax, 0x1e
jbe 0x59e75e
xor eax, eax
nop word [rax + rax]
movdqu xmm0, xmmword [rdi + rax]
movdqu xmm1, xmmword [r15 + rax]
pxor xmm0, xmm1
movups xmmword [rdi + rax], xmm0
movdqu xmm0, xmmword [rbp + rax]
movdqu xmm2, xmmword [r10 + rax]
pxor xmm0, xmm2
movups xmmword [rbp + rax], xmm0
add rax, 0x10
cmp rax, rsi
jne 0x59e5f8
mov ebx, dword [rsp + 0x78]
cmp dword [rsp + 0x50], ebx
je 0x59e644
mov rax, qword [r15 + r14]
xor qword [rdi + r14], rax
mov rax, qword [r10 + r14]
xor qword [rbp + r14], rax
cmp r9d, r13d
jne 0x59e520
mov edx, r13d
lea eax, [r13 + 0x3e]
sub edx, 1
cmovns eax, edx
sar eax, 6
movsxd rdx, eax
mov ebx, eax
mov rcx, qword [rdi + rdx*8]
test rcx, rcx
jne 0x59e889
test eax, eax
je 0x59e6a3
lea ecx, [rax - 1]
sub rdx, 2
movsxd rax, ecx
mov ecx, ecx
sub rdx, rcx
jmp 0x59e695
sub rax, 1
cmp rax, rdx
je 0x59e839
mov rcx, qword [rdi + rax*8]
test rcx, rcx
je 0x59e688
mov ebx, eax
shl ebx, 6
mov qword [rsp + 0x58], r10
call sym.BN_num_bits_word
mov r10, qword [rsp + 0x58]
lea r9d, [rax + rbx]
jmp 0x59e520
cmp rcx, 1
jne 0x59e53f
mov rdi, qword [rsp + 0x38]
mov rbx, qword [rsp + 0x70]
mov r12d, dword [rsp + 0x7c]
mov rsi, qword [rsp + 0xe0]
mov rcx, rdi
mov r13, qword [rsp + 0xe8]
call sym.bn_correct_top
mov rcx, qword [rsp + 0xd0]
mov rdx, rdi
call sym.BN_copy
test rax, rax
je 0x59e360
mov rcx, r13
xor r12d, r12d
call sym.BN_CTX_end
mov qword [rsp + 0x20], r13
mov r9, rsi
mov r8, rbx
mov rdx, qword [rsp + 0xd0]
mov rcx, rdx
call sym.BN_GF2m_mod_mul
test eax, eax
setne r12b
jmp 0x59e2af
test rcx, rcx
jne 0x59e6c0
mov r13, qword [rsp + 0xe8]
mov rcx, r13
call sym.BN_CTX_end
jmp 0x59e2ac
mov ecx, dword [rsp + 0x54]
xor eax, eax
nop dword [rax]
mov rdx, qword [r15 + rax*8]
xor qword [rdi + rax*8], rdx
mov rdx, qword [r10 + rax*8]
xor qword [rbp + rax*8], rdx
mov rdx, rax
add rax, 1
cmp rdx, rcx
jne 0x59e768
jmp 0x59e644
mov rbx, qword [rsp + 0xe0]
mov rax, qword [rbp]
mov edx, dword [rsp + 0x54]
mov rbx, qword [rbx]
mov r11, rax
and r11d, 1
mov r8, qword [rbx]
neg r11
and r8, r11
xor r8, rax
test edx, edx
jle 0x59e840
mov qword [rsp + 0x58], r15
mov r12, qword [rsp + 0x68]
mov eax, 1
nop word [rax + rax]
mov rdx, rcx
mov rcx, qword [rdi + rax*8]
shr rdx, 1
mov r15, rcx
shl r15, 0x3f
or rdx, r15
mov qword [rdi + rax*8 - 8], rdx
mov rdx, r8
mov r8, qword [rbx + rax*8]
shr rdx, 1
and r8, r11
xor r8, qword [rbp + rax*8]
mov r15, r8
shl r15, 0x3f
or rdx, r15
mov qword [rbp + rax*8 - 8], rdx
add rax, 1
cmp rax, r12
jne 0x59e7d0
mov rax, qword [rsp + 0x60]
mov r15, qword [rsp + 0x58]
lea rdx, [rdi + rax]
add rax, rbp
shr rcx, 1
shr r8, 1
sub r9d, 1
mov qword [rdx], rcx
mov qword [rax], r8
jmp 0x59e520
xor ebx, ebx
jmp 0x59e6a3
mov rax, rbp
mov rdx, rdi
jmp 0x59e824
mov dword [r14 + 8], r15d
mov r14, qword [rsp + 0x48]
mov edx, r15d
mov dword [rsp + 0x54], r9d
mov rcx, r14
call sym.bn_wexpand
test rax, rax
je 0x59e360
cmp r15d, 1
mov r10, qword [r14]
mov r9d, dword [rsp + 0x54]
je 0x59e47c
lea eax, [r15 - 1]
mov dword [rsp + 0x54], eax
jmp 0x59e4b1
shl ebx, 6
jmp 0x59e6a3