Function at 0x1401f2520
Capabilities:
Authenticate hmac
Encode data using xor

Disassembly:
push rbx
push rbp
push rsi
push rdi
push r12
push r14
mov eax, 0xb8
call fcn.1400be950
sub rsp, rax
mov rax, qword [0x140396c80]
xor rax, rsp
mov qword [rsp + 0xa0], rax
mov r12, qword [rsp + 0x110]
mov rbx, rcx
xor r14d, r14d
movsxd rdi, r8d
mov rsi, r9
mov rbp, rdx
mov ecx, r14d
mov rax, qword [rbx]
test r9, r9
je 0x1401f258b
cmp r9, rax
je 0x1401f2581
test rdx, rdx
je 0x1401f2c7f
test r8d, r8d
js 0x1401f2c7f
mov ecx, 1
mov qword [rbx], r9
jmp 0x1401f2597
test rax, rax
je 0x1401f2c7f
mov rsi, rax
test rbp, rbp
je 0x1401f266d
mov rcx, rsi
mov qword [rsp + 0xb0], r15
call fcn.140012340
mov r15d, eax
cmp eax, 0x80
jle 0x1401f25d3
mov r8d, Ordinal_41
lea rdx, str.cryptohmachmac.c
lea rcx, str.assertion_failed:_j____int_sizeof_ctx__key_
call fcn.1401d5810
cmp r15d, edi
mov r15, qword [rsp + 0xb0]
jge 0x1401f262c
mov rcx, qword [rbx + 8]
mov r8, r12
mov rdx, rsi
call fcn.1401c4f50
test eax, eax
je 0x1401f2c7f
mov rcx, qword [rbx + 8]
mov r8, rdi
mov rdx, rbp
call fcn.1401c51b0
test eax, eax
je 0x1401f2c7f
mov rcx, qword [rbx + 8]
lea r8, [rbx + 0x20]
lea rdx, [rbx + 0x24]
call fcn.1401c4e70
test eax, eax
je 0x1401f2c7f
mov edi, dword [rbx + 0x20]
jmp 0x1401f264a
cmp edi, 0x80
ja 0x1401f2c7f
mov r8, rdi
lea rcx, [rbx + 0x24]
mov rdx, rbp
call sub.VCRUNTIME140.dll_memcpy
mov dword [rbx + 0x20], edi
cmp edi, 0x80
je 0x1401f2675
mov r8d, 0x80
mov eax, edi
lea rcx, [rbx + 0x24]
sub r8d, edi
add rcx, rax
xor edx, edx
call sub.VCRUNTIME140.dll_memset
jmp 0x1401f2675
test ecx, ecx
je 0x1401f2c67
lea rcx, [rsp + 0x20]
mov rdi, rbx
sub rdi, rcx
mov rdx, r14
nop dword [rax]
nop word [rax + rax]
lea rcx, [rsp + 0x20]
add rcx, rdx
movzx eax, byte [rcx + rdi + 0x24]
xor al, 0x36
mov byte [rcx], al
movzx eax, byte [rdx + rbx + 0x25]
xor al, 0x36
mov byte [rcx + 1], al
movzx eax, byte [rdx + rbx + 0x26]
xor al, 0x36
mov byte [rcx + 2], al
movzx eax, byte [rdx + rbx + 0x27]
xor al, 0x36
mov byte [rcx + 3], al
movzx eax, byte [rdx + rbx + 0x28]
xor al, 0x36
mov byte [rcx + 4], al
movzx eax, byte [rdx + rbx + 0x29]
xor al, 0x36
mov byte [rcx + 5], al
movzx eax, byte [rdx + rbx + 0x2a]
xor al, 0x36
mov byte [rcx + 6], al
movzx eax, byte [rdx + rbx + 0x2b]
xor al, 0x36
mov byte [rcx + 7], al
movzx eax, byte [rdx + rbx + 0x2c]
xor al, 0x36
mov byte [rcx + 8], al
movzx eax, byte [rdx + rbx + 0x2d]
xor al, 0x36
mov byte [rcx + 9], al
movzx eax, byte [rdx + rbx + 0x2e]
xor al, 0x36
mov byte [rcx + 0xa], al
movzx eax, byte [rdx + rbx + 0x2f]
xor al, 0x36
mov byte [rcx + 0xb], al
movzx eax, byte [rdx + rbx + 0x30]
xor al, 0x36
mov byte [rcx + 0xc], al
movzx eax, byte [rdx + rbx + 0x31]
xor al, 0x36
mov byte [rcx + 0xd], al
movzx eax, byte [rdx + rbx + 0x32]
xor al, 0x36
mov byte [rcx + 0xe], al
movzx eax, byte [rdx + rbx + 0x33]
xor al, 0x36
mov byte [rcx + 0xf], al
movzx eax, byte [rdx + rbx + 0x34]
xor al, 0x36
mov byte [rcx + 0x10], al
movzx eax, byte [rdx + rbx + 0x35]
xor al, 0x36
mov byte [rcx + 0x11], al
movzx eax, byte [rdx + rbx + 0x36]
xor al, 0x36
mov byte [rcx + 0x12], al
movzx eax, byte [rdx + rbx + 0x37]
xor al, 0x36
mov byte [rcx + 0x13], al
movzx eax, byte [rdx + rbx + 0x38]
xor al, 0x36
mov byte [rcx + 0x14], al
movzx eax, byte [rdx + rbx + 0x39]
xor al, 0x36
mov byte [rcx + 0x15], al
movzx eax, byte [rdx + rbx + 0x3a]
xor al, 0x36
mov byte [rcx + 0x16], al
movzx eax, byte [rdx + rbx + 0x3b]
xor al, 0x36
mov byte [rcx + 0x17], al
movzx eax, byte [rdx + rbx + 0x3c]
xor al, 0x36
mov byte [rcx + 0x18], al
movzx eax, byte [rdx + rbx + 0x3d]
xor al, 0x36
mov byte [rcx + 0x19], al
movzx eax, byte [rdx + rbx + 0x3e]
xor al, 0x36
mov byte [rcx + 0x1a], al
movzx eax, byte [rdx + rbx + 0x3f]
xor al, 0x36
mov byte [rcx + 0x1b], al
movzx eax, byte [rdx + rbx + 0x40]
xor al, 0x36
mov byte [rcx + 0x1c], al
movzx eax, byte [rdx + rbx + 0x41]
xor al, 0x36
mov byte [rcx + 0x1d], al
movzx eax, byte [rdx + rbx + 0x42]
xor al, 0x36
mov byte [rcx + 0x1e], al
movzx eax, byte [rdx + rbx + 0x43]
xor al, 0x36
mov byte [rcx + 0x1f], al
movzx eax, byte [rdx + rbx + 0x44]
xor al, 0x36
mov byte [rcx + 0x20], al
movzx eax, byte [rdx + rbx + 0x45]
xor al, 0x36
mov byte [rcx + 0x21], al
movzx eax, byte [rdx + rbx + 0x46]
xor al, 0x36
mov byte [rcx + 0x22], al
movzx eax, byte [rdx + rbx + 0x47]
xor al, 0x36
mov byte [rcx + 0x23], al
movzx eax, byte [rdx + rbx + 0x48]
xor al, 0x36
mov byte [rcx + 0x24], al
movzx eax, byte [rdx + rbx + 0x49]
xor al, 0x36
mov byte [rcx + 0x25], al
movzx eax, byte [rdx + rbx + 0x4a]
xor al, 0x36
mov byte [rcx + 0x26], al
movzx eax, byte [rdx + rbx + 0x4b]
xor al, 0x36
mov byte [rcx + 0x27], al
movzx eax, byte [rdx + rbx + 0x4c]
xor al, 0x36
mov byte [rcx + 0x28], al
movzx eax, byte [rdx + rbx + 0x4d]
xor al, 0x36
mov byte [rcx + 0x29], al
movzx eax, byte [rdx + rbx + 0x4e]
xor al, 0x36
mov byte [rcx + 0x2a], al
movzx eax, byte [rdx + rbx + 0x4f]
xor al, 0x36
mov byte [rcx + 0x2b], al
movzx eax, byte [rdx + rbx + 0x50]
xor al, 0x36
mov byte [rcx + 0x2c], al
movzx eax, byte [rdx + rbx + 0x51]
xor al, 0x36
mov byte [rcx + 0x2d], al
movzx eax, byte [rdx + rbx + 0x52]
xor al, 0x36
mov byte [rcx + 0x2e], al
movzx eax, byte [rdx + rbx + 0x53]
xor al, 0x36
mov byte [rcx + 0x2f], al
movzx eax, byte [rdx + rbx + 0x54]
xor al, 0x36
mov byte [rcx + 0x30], al
movzx eax, byte [rdx + rbx + 0x55]
xor al, 0x36
mov byte [rcx + 0x31], al
movzx eax, byte [rdx + rbx + 0x56]
xor al, 0x36
mov byte [rcx + 0x32], al
movzx eax, byte [rdx + rbx + 0x57]
xor al, 0x36
mov byte [rcx + 0x33], al
movzx eax, byte [rdx + rbx + 0x58]
xor al, 0x36
mov byte [rcx + 0x34], al
movzx eax, byte [rdx + rbx + 0x59]
xor al, 0x36
mov byte [rcx + 0x35], al
movzx eax, byte [rdx + rbx + 0x5a]
xor al, 0x36
mov byte [rcx + 0x36], al
movzx eax, byte [rdx + rbx + 0x5b]
xor al, 0x36
mov byte [rcx + 0x37], al
movzx eax, byte [rdx + rbx + 0x5c]
xor al, 0x36
mov byte [rcx + 0x38], al
movzx eax, byte [rdx + rbx + 0x5d]
xor al, 0x36
mov byte [rcx + 0x39], al
movzx eax, byte [rdx + rbx + 0x5e]
xor al, 0x36
mov byte [rcx + 0x3a], al
movzx eax, byte [rdx + rbx + 0x5f]
xor al, 0x36
mov byte [rcx + 0x3b], al
movzx eax, byte [rdx + rbx + 0x60]
xor al, 0x36
mov byte [rcx + 0x3c], al
movzx eax, byte [rdx + rbx + 0x61]
xor al, 0x36
mov byte [rcx + 0x3d], al
movzx eax, byte [rdx + rbx + 0x62]
xor al, 0x36
mov byte [rcx + 0x3e], al
movzx eax, byte [rdx + rbx + 0x63]
add rdx, 0x40
xor al, 0x36
mov byte [rcx + 0x3f], al
cmp rdx, 0x80
jl 0x1401f2690
mov rcx, qword [rbx + 0x10]
mov r8, r12
mov rdx, rsi
call fcn.1401c4f50
test eax, eax
je 0x1401f2c7f
mov rcx, rsi
call fcn.140012340
mov rcx, qword [rbx + 0x10]
lea rdx, [rsp + 0x20]
movsxd r8, eax
call fcn.1401c51b0
test eax, eax
je 0x1401f2c7f
lea rcx, [rsp + 0x20]
add rcx, r14
movzx eax, byte [rcx + rdi + 0x24]
xor al, 0x5c
mov byte [rcx], al
movzx eax, byte [r14 + rbx + 0x25]
xor al, 0x5c
mov byte [rcx + 1], al
movzx eax, byte [r14 + rbx + 0x26]
xor al, 0x5c
mov byte [rcx + 2], al
movzx eax, byte [r14 + rbx + 0x27]
xor al, 0x5c
mov byte [rcx + 3], al
movzx eax, byte [r14 + rbx + 0x28]
xor al, 0x5c
mov byte [rcx + 4], al
movzx eax, byte [r14 + rbx + 0x29]
xor al, 0x5c
mov byte [rcx + 5], al
movzx eax, byte [r14 + rbx + 0x2a]
xor al, 0x5c
mov byte [rcx + 6], al
movzx eax, byte [r14 + rbx + 0x2b]
xor al, 0x5c
mov byte [rcx + 7], al
movzx eax, byte [r14 + rbx + 0x2c]
xor al, 0x5c
mov byte [rcx + 8], al
movzx eax, byte [r14 + rbx + 0x2d]
xor al, 0x5c
mov byte [rcx + 9], al
movzx eax, byte [r14 + rbx + 0x2e]
xor al, 0x5c
mov byte [rcx + 0xa], al
movzx eax, byte [r14 + rbx + 0x2f]
xor al, 0x5c
mov byte [rcx + 0xb], al
movzx eax, byte [r14 + rbx + 0x30]
xor al, 0x5c
mov byte [rcx + 0xc], al
movzx eax, byte [r14 + rbx + 0x31]
xor al, 0x5c
mov byte [rcx + 0xd], al
movzx eax, byte [r14 + rbx + 0x32]
xor al, 0x5c
mov byte [rcx + 0xe], al
movzx eax, byte [r14 + rbx + 0x33]
xor al, 0x5c
mov byte [rcx + 0xf], al
movzx eax, byte [r14 + rbx + 0x34]
xor al, 0x5c
mov byte [rcx + 0x10], al
movzx eax, byte [r14 + rbx + 0x35]
xor al, 0x5c
mov byte [rcx + 0x11], al
movzx eax, byte [r14 + rbx + 0x36]
xor al, 0x5c
mov byte [rcx + 0x12], al
movzx eax, byte [r14 + rbx + 0x37]
xor al, 0x5c
mov byte [rcx + 0x13], al
movzx eax, byte [r14 + rbx + 0x38]
xor al, 0x5c
mov byte [rcx + 0x14], al
movzx eax, byte [r14 + rbx + 0x39]
xor al, 0x5c
mov byte [rcx + 0x15], al
movzx eax, byte [r14 + rbx + 0x3a]
xor al, 0x5c
mov byte [rcx + 0x16], al
movzx eax, byte [r14 + rbx + 0x3b]
xor al, 0x5c
mov byte [rcx + 0x17], al
movzx eax, byte [r14 + rbx + 0x3c]
xor al, 0x5c
mov byte [rcx + 0x18], al
movzx eax, byte [r14 + rbx + 0x3d]
xor al, 0x5c
mov byte [rcx + 0x19], al
movzx eax, byte [r14 + rbx + 0x3e]
xor al, 0x5c
mov byte [rcx + 0x1a], al
movzx eax, byte [r14 + rbx + 0x3f]
xor al, 0x5c
mov byte [rcx + 0x1b], al
movzx eax, byte [r14 + rbx + 0x40]
xor al, 0x5c
mov byte [rcx + 0x1c], al
movzx eax, byte [r14 + rbx + 0x41]
xor al, 0x5c
mov byte [rcx + 0x1d], al
movzx eax, byte [r14 + rbx + 0x42]
xor al, 0x5c
mov byte [rcx + 0x1e], al
movzx eax, byte [r14 + rbx + 0x43]
xor al, 0x5c
mov byte [rcx + 0x1f], al
movzx eax, byte [r14 + rbx + 0x44]
xor al, 0x5c
mov byte [rcx + 0x20], al
movzx eax, byte [r14 + rbx + 0x45]
xor al, 0x5c
mov byte [rcx + 0x21], al
movzx eax, byte [r14 + rbx + 0x46]
xor al, 0x5c
mov byte [rcx + 0x22], al
movzx eax, byte [r14 + rbx + 0x47]
xor al, 0x5c
mov byte [rcx + 0x23], al
movzx eax, byte [r14 + rbx + 0x48]
xor al, 0x5c
mov byte [rcx + 0x24], al
movzx eax, byte [r14 + rbx + 0x49]
xor al, 0x5c
mov byte [rcx + 0x25], al
movzx eax, byte [r14 + rbx + 0x4a]
xor al, 0x5c
mov byte [rcx + 0x26], al
movzx eax, byte [r14 + rbx + 0x4b]
xor al, 0x5c
mov byte [rcx + 0x27], al
movzx eax, byte [r14 + rbx + 0x4c]
xor al, 0x5c
mov byte [rcx + 0x28], al
movzx eax, byte [r14 + rbx + 0x4d]
xor al, 0x5c
mov byte [rcx + 0x29], al
movzx eax, byte [r14 + rbx + 0x4e]
xor al, 0x5c
mov byte [rcx + 0x2a], al
movzx eax, byte [r14 + rbx + 0x4f]
xor al, 0x5c
mov byte [rcx + 0x2b], al
movzx eax, byte [r14 + rbx + 0x50]
xor al, 0x5c
mov byte [rcx + 0x2c], al
movzx eax, byte [r14 + rbx + 0x51]
xor al, 0x5c
mov byte [rcx + 0x2d], al
movzx eax, byte [r14 + rbx + 0x52]
xor al, 0x5c
mov byte [rcx + 0x2e], al
movzx eax, byte [r14 + rbx + 0x53]
xor al, 0x5c
mov byte [rcx + 0x2f], al
movzx eax, byte [r14 + rbx + 0x54]
xor al, 0x5c
mov byte [rcx + 0x30], al
movzx eax, byte [r14 + rbx + 0x55]
xor al, 0x5c
mov byte [rcx + 0x31], al
movzx eax, byte [r14 + rbx + 0x56]
xor al, 0x5c
mov byte [rcx + 0x32], al
movzx eax, byte [r14 + rbx + 0x57]
xor al, 0x5c
mov byte [rcx + 0x33], al
movzx eax, byte [r14 + rbx + 0x58]
xor al, 0x5c
mov byte [rcx + 0x34], al
movzx eax, byte [r14 + rbx + 0x59]
xor al, 0x5c
mov byte [rcx + 0x35], al
movzx eax, byte [r14 + rbx + 0x5a]
xor al, 0x5c
mov byte [rcx + 0x36], al
movzx eax, byte [r14 + rbx + 0x5b]
xor al, 0x5c
mov byte [rcx + 0x37], al
movzx eax, byte [r14 + rbx + 0x5c]
xor al, 0x5c
mov byte [rcx + 0x38], al
movzx eax, byte [r14 + rbx + 0x5d]
xor al, 0x5c
mov byte [rcx + 0x39], al
movzx eax, byte [r14 + rbx + 0x5e]
xor al, 0x5c
mov byte [rcx + 0x3a], al
movzx eax, byte [r14 + rbx + 0x5f]
xor al, 0x5c
mov byte [rcx + 0x3b], al
movzx eax, byte [r14 + rbx + 0x60]
xor al, 0x5c
mov byte [rcx + 0x3c], al
movzx eax, byte [r14 + rbx + 0x61]
xor al, 0x5c
mov byte [rcx + 0x3d], al
movzx eax, byte [r14 + rbx + 0x62]
xor al, 0x5c
mov byte [rcx + 0x3e], al
movzx eax, byte [r14 + rbx + 0x63]
add r14, 0x40
xor al, 0x5c
mov byte [rcx + 0x3f], al
cmp r14, 0x80
jl 0x1401f2960
mov rcx, qword [rbx + 0x18]
mov r8, r12
mov rdx, rsi
call fcn.1401c4f50
test eax, eax
je 0x1401f2c7f
mov rcx, rsi
call fcn.140012340
mov rcx, qword [rbx + 0x18]
lea rdx, [rsp + 0x20]
movsxd r8, eax
call fcn.1401c51b0
test eax, eax
je 0x1401f2c7f
mov rdx, qword [rbx + 0x10]
mov rcx, qword [rbx + 8]
call fcn.1401c5210
test eax, eax
je 0x1401f2c7f
mov eax, 1
jmp 0x1401f2c81
xor eax, eax
mov rcx, qword [rsp + 0xa0]
xor rcx, rsp
call fcn.1400be7c0
add rsp, 0xb8
pop r14
pop r12
pop rdi
pop rsi
pop rbp
pop rbx
ret