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

Disassembly:
push rbx
push rbp
push rsi
push rdi
push r12
push r14
push r15
sub rsp, 0xc0
mov rax, qword [0x1801772b8]
xor rax, rsp
mov qword [rsp + 0xb0], rax
mov r12, qword [rsp + 0x120]
mov rbx, rcx
xor r15d, r15d
movsxd rdi, r8d
mov rsi, r9
mov rbp, rdx
mov ecx, r15d
mov rax, qword [rbx]
test r9, r9
je 0x180082faf
cmp r9, rax
je 0x180082fa5
test rdx, rdx
je 0x180082ff8
test r8d, r8d
js 0x180082ff8
mov ecx, 1
mov qword [rbx], r9
jmp 0x180082fb7
test rax, rax
je 0x180082ff8
mov rsi, rax
test rbp, rbp
je 0x1800830d8
mov rcx, rsi
call sym.version.dll_EVP_MD_block_size
movsxd rcx, eax
cmp rcx, 0x80
jbe 0x18008301c
mov dword [rsp + 0x20], 0x59
lea r9, str.________________________________________C:LibreSS5cryptohmachmac.c
mov edx, 0xfff
mov ecx, 6
mov r8d, 0x88
call sym.version.dll_ERR_put_error
xor eax, eax
mov rcx, qword [rsp + 0xb0]
xor rcx, rsp
call fcn.1800d61c0
add rsp, 0xc0
pop r15
pop r14
pop r12
pop rdi
pop rsi
pop rbp
pop rbx
ret
cmp ecx, edi
jge 0x180083069
mov r8, r12
lea rcx, [rbx + 8]
mov rdx, rsi
call sym.version.dll_EVP_DigestInit_ex
test eax, eax
je 0x180082ff8
mov r8, rdi
lea rcx, [rbx + 8]
mov rdx, rbp
call sym.version.dll_EVP_DigestUpdate
test eax, eax
je 0x180082ff8
lea r8, [rbx + 0x98]
lea rdx, [rbx + 0x9c]
lea rcx, [rbx + 8]
call sym.version.dll_EVP_DigestFinal_ex
test eax, eax
je 0x180082ff8
mov edi, dword [rbx + 0x98]
jmp 0x18008308e
test edi, edi
js 0x1800830b4
mov r8, rdi
cmp rdi, 0x80
ja 0x1800830b4
lea rcx, [rbx + 0x9c]
mov rdx, rbp
call fcn.1800d7020
mov dword [rbx + 0x98], edi
cmp edi, 0x80
je 0x1800830e0
mov r8d, 0x80
mov eax, edi
lea rcx, [rbx + 0x9c]
sub r8d, edi
add rcx, rax
xor edx, edx
call fcn.1800d7430
jmp 0x1800830e0
mov dword [rsp + 0x20], 0x66
lea r9, str.________________________________________C:LibreSS5cryptohmachmac.c
mov edx, 0xfff
mov ecx, 6
mov r8d, 0x89
jmp 0x180082ff3
test ecx, ecx
je 0x18008384f
lea rcx, [rsp + 0x30]
mov rbp, rbx
sub rbp, rcx
mov rdx, r15
nop
lea rcx, [rsp + 0x30]
add rcx, rdx
movzx eax, byte [rcx + rbp + 0x9c]
xor al, 0x36
mov byte [rcx], al
movzx eax, byte [rdx + rbx + 0x9d]
xor al, 0x36
mov byte [rcx + 1], al
movzx eax, byte [rdx + rbx + 0x9e]
xor al, 0x36
mov byte [rcx + 2], al
movzx eax, byte [rdx + rbx + 0x9f]
xor al, 0x36
mov byte [rcx + 3], al
movzx eax, byte [rdx + rbx + 0xa0]
xor al, 0x36
mov byte [rcx + 4], al
movzx eax, byte [rdx + rbx + 0xa1]
xor al, 0x36
mov byte [rcx + 5], al
movzx eax, byte [rdx + rbx + 0xa2]
xor al, 0x36
mov byte [rcx + 6], al
movzx eax, byte [rdx + rbx + 0xa3]
xor al, 0x36
mov byte [rcx + 7], al
movzx eax, byte [rdx + rbx + 0xa4]
xor al, 0x36
mov byte [rcx + 8], al
movzx eax, byte [rdx + rbx + 0xa5]
xor al, 0x36
mov byte [rcx + 9], al
movzx eax, byte [rdx + rbx + 0xa6]
xor al, 0x36
mov byte [rcx + 0xa], al
movzx eax, byte [rdx + rbx + 0xa7]
xor al, 0x36
mov byte [rcx + 0xb], al
movzx eax, byte [rdx + rbx + 0xa8]
xor al, 0x36
mov byte [rcx + 0xc], al
movzx eax, byte [rdx + rbx + 0xa9]
xor al, 0x36
mov byte [rcx + 0xd], al
movzx eax, byte [rdx + rbx + 0xaa]
xor al, 0x36
mov byte [rcx + 0xe], al
movzx eax, byte [rdx + rbx + 0xab]
xor al, 0x36
mov byte [rcx + 0xf], al
movzx eax, byte [rdx + rbx + 0xac]
xor al, 0x36
mov byte [rcx + 0x10], al
movzx eax, byte [rdx + rbx + 0xad]
xor al, 0x36
mov byte [rcx + 0x11], al
movzx eax, byte [rdx + rbx + 0xae]
xor al, 0x36
mov byte [rcx + 0x12], al
movzx eax, byte [rdx + rbx + 0xaf]
xor al, 0x36
mov byte [rcx + 0x13], al
movzx eax, byte [rdx + rbx + 0xb0]
xor al, 0x36
mov byte [rcx + 0x14], al
movzx eax, byte [rdx + rbx + 0xb1]
xor al, 0x36
mov byte [rcx + 0x15], al
movzx eax, byte [rdx + rbx + 0xb2]
xor al, 0x36
mov byte [rcx + 0x16], al
movzx eax, byte [rdx + rbx + 0xb3]
xor al, 0x36
mov byte [rcx + 0x17], al
movzx eax, byte [rdx + rbx + 0xb4]
xor al, 0x36
mov byte [rcx + 0x18], al
movzx eax, byte [rdx + rbx + 0xb5]
xor al, 0x36
mov byte [rcx + 0x19], al
movzx eax, byte [rdx + rbx + 0xb6]
xor al, 0x36
mov byte [rcx + 0x1a], al
movzx eax, byte [rdx + rbx + 0xb7]
xor al, 0x36
mov byte [rcx + 0x1b], al
movzx eax, byte [rdx + rbx + 0xb8]
xor al, 0x36
mov byte [rcx + 0x1c], al
movzx eax, byte [rdx + rbx + 0xb9]
xor al, 0x36
mov byte [rcx + 0x1d], al
movzx eax, byte [rdx + rbx + 0xba]
xor al, 0x36
mov byte [rcx + 0x1e], al
movzx eax, byte [rdx + rbx + 0xbb]
xor al, 0x36
mov byte [rcx + 0x1f], al
movzx eax, byte [rdx + rbx + 0xbc]
xor al, 0x36
mov byte [rcx + 0x20], al
movzx eax, byte [rdx + rbx + 0xbd]
xor al, 0x36
mov byte [rcx + 0x21], al
movzx eax, byte [rdx + rbx + 0xbe]
xor al, 0x36
mov byte [rcx + 0x22], al
movzx eax, byte [rdx + rbx + 0xbf]
xor al, 0x36
mov byte [rcx + 0x23], al
movzx eax, byte [rdx + rbx + 0xc0]
xor al, 0x36
mov byte [rcx + 0x24], al
movzx eax, byte [rdx + rbx + 0xc1]
xor al, 0x36
mov byte [rcx + 0x25], al
movzx eax, byte [rdx + rbx + 0xc2]
xor al, 0x36
mov byte [rcx + 0x26], al
movzx eax, byte [rdx + rbx + 0xc3]
xor al, 0x36
mov byte [rcx + 0x27], al
movzx eax, byte [rdx + rbx + 0xc4]
xor al, 0x36
mov byte [rcx + 0x28], al
movzx eax, byte [rdx + rbx + 0xc5]
xor al, 0x36
mov byte [rcx + 0x29], al
movzx eax, byte [rdx + rbx + 0xc6]
xor al, 0x36
mov byte [rcx + 0x2a], al
movzx eax, byte [rdx + rbx + 0xc7]
xor al, 0x36
mov byte [rcx + 0x2b], al
movzx eax, byte [rdx + rbx + 0xc8]
xor al, 0x36
mov byte [rcx + 0x2c], al
movzx eax, byte [rdx + rbx + 0xc9]
xor al, 0x36
mov byte [rcx + 0x2d], al
movzx eax, byte [rdx + rbx + 0xca]
xor al, 0x36
mov byte [rcx + 0x2e], al
movzx eax, byte [rdx + rbx + 0xcb]
xor al, 0x36
mov byte [rcx + 0x2f], al
movzx eax, byte [rdx + rbx + 0xcc]
xor al, 0x36
mov byte [rcx + 0x30], al
movzx eax, byte [rdx + rbx + 0xcd]
xor al, 0x36
mov byte [rcx + 0x31], al
movzx eax, byte [rdx + rbx + 0xce]
xor al, 0x36
mov byte [rcx + 0x32], al
movzx eax, byte [rdx + rbx + 0xcf]
xor al, 0x36
mov byte [rcx + 0x33], al
movzx eax, byte [rdx + rbx + 0xd0]
xor al, 0x36
mov byte [rcx + 0x34], al
movzx eax, byte [rdx + rbx + 0xd1]
xor al, 0x36
mov byte [rcx + 0x35], al
movzx eax, byte [rdx + rbx + 0xd2]
xor al, 0x36
mov byte [rcx + 0x36], al
movzx eax, byte [rdx + rbx + 0xd3]
xor al, 0x36
mov byte [rcx + 0x37], al
movzx eax, byte [rdx + rbx + 0xd4]
xor al, 0x36
mov byte [rcx + 0x38], al
movzx eax, byte [rdx + rbx + 0xd5]
xor al, 0x36
mov byte [rcx + 0x39], al
movzx eax, byte [rdx + rbx + 0xd6]
xor al, 0x36
mov byte [rcx + 0x3a], al
movzx eax, byte [rdx + rbx + 0xd7]
xor al, 0x36
mov byte [rcx + 0x3b], al
movzx eax, byte [rdx + rbx + 0xd8]
xor al, 0x36
mov byte [rcx + 0x3c], al
movzx eax, byte [rdx + rbx + 0xd9]
xor al, 0x36
mov byte [rcx + 0x3d], al
movzx eax, byte [rdx + rbx + 0xda]
xor al, 0x36
mov byte [rcx + 0x3e], al
movzx eax, byte [rdx + rbx + 0xdb]
add rdx, 0x40
xor al, 0x36
mov byte [rcx + 0x3f], al
cmp rdx, 0x80
jl 0x1800830f0
mov r8, r12
lea rcx, [rbx + 0x38]
mov rdx, rsi
call sym.version.dll_EVP_DigestInit_ex
test eax, eax
je 0x180082ff8
mov rcx, rsi
call sym.version.dll_EVP_MD_block_size
movsxd r8, eax
lea rdx, [rsp + 0x30]
lea rcx, [rbx + 0x38]
call sym.version.dll_EVP_DigestUpdate
test eax, eax
je 0x180082ff8
lea rcx, [rsp + 0x30]
add rcx, r15
movzx eax, byte [rcx + rbp + 0x9c]
xor al, 0x5c
mov byte [rcx], al
movzx eax, byte [r15 + rbx + 0x9d]
xor al, 0x5c
mov byte [rcx + 1], al
movzx eax, byte [r15 + rbx + 0x9e]
xor al, 0x5c
mov byte [rcx + 2], al
movzx eax, byte [r15 + rbx + 0x9f]
xor al, 0x5c
mov byte [rcx + 3], al
movzx eax, byte [r15 + rbx + 0xa0]
xor al, 0x5c
mov byte [rcx + 4], al
movzx eax, byte [r15 + rbx + 0xa1]
xor al, 0x5c
mov byte [rcx + 5], al
movzx eax, byte [r15 + rbx + 0xa2]
xor al, 0x5c
mov byte [rcx + 6], al
movzx eax, byte [r15 + rbx + 0xa3]
xor al, 0x5c
mov byte [rcx + 7], al
movzx eax, byte [r15 + rbx + 0xa4]
xor al, 0x5c
mov byte [rcx + 8], al
movzx eax, byte [r15 + rbx + 0xa5]
xor al, 0x5c
mov byte [rcx + 9], al
movzx eax, byte [r15 + rbx + 0xa6]
xor al, 0x5c
mov byte [rcx + 0xa], al
movzx eax, byte [r15 + rbx + 0xa7]
xor al, 0x5c
mov byte [rcx + 0xb], al
movzx eax, byte [r15 + rbx + 0xa8]
xor al, 0x5c
mov byte [rcx + 0xc], al
movzx eax, byte [r15 + rbx + 0xa9]
xor al, 0x5c
mov byte [rcx + 0xd], al
movzx eax, byte [r15 + rbx + 0xaa]
xor al, 0x5c
mov byte [rcx + 0xe], al
movzx eax, byte [r15 + rbx + 0xab]
xor al, 0x5c
mov byte [rcx + 0xf], al
movzx eax, byte [r15 + rbx + 0xac]
xor al, 0x5c
mov byte [rcx + 0x10], al
movzx eax, byte [r15 + rbx + 0xad]
xor al, 0x5c
mov byte [rcx + 0x11], al
movzx eax, byte [r15 + rbx + 0xae]
xor al, 0x5c
mov byte [rcx + 0x12], al
movzx eax, byte [r15 + rbx + 0xaf]
xor al, 0x5c
mov byte [rcx + 0x13], al
movzx eax, byte [r15 + rbx + 0xb0]
xor al, 0x5c
mov byte [rcx + 0x14], al
movzx eax, byte [r15 + rbx + 0xb1]
xor al, 0x5c
mov byte [rcx + 0x15], al
movzx eax, byte [r15 + rbx + 0xb2]
xor al, 0x5c
mov byte [rcx + 0x16], al
movzx eax, byte [r15 + rbx + 0xb3]
xor al, 0x5c
mov byte [rcx + 0x17], al
movzx eax, byte [r15 + rbx + 0xb4]
xor al, 0x5c
mov byte [rcx + 0x18], al
movzx eax, byte [r15 + rbx + 0xb5]
xor al, 0x5c
mov byte [rcx + 0x19], al
movzx eax, byte [r15 + rbx + 0xb6]
xor al, 0x5c
mov byte [rcx + 0x1a], al
movzx eax, byte [r15 + rbx + 0xb7]
xor al, 0x5c
mov byte [rcx + 0x1b], al
movzx eax, byte [r15 + rbx + 0xb8]
xor al, 0x5c
mov byte [rcx + 0x1c], al
movzx eax, byte [r15 + rbx + 0xb9]
xor al, 0x5c
mov byte [rcx + 0x1d], al
movzx eax, byte [r15 + rbx + 0xba]
xor al, 0x5c
mov byte [rcx + 0x1e], al
movzx eax, byte [r15 + rbx + 0xbb]
xor al, 0x5c
mov byte [rcx + 0x1f], al
movzx eax, byte [r15 + rbx + 0xbc]
xor al, 0x5c
mov byte [rcx + 0x20], al
movzx eax, byte [r15 + rbx + 0xbd]
xor al, 0x5c
mov byte [rcx + 0x21], al
movzx eax, byte [r15 + rbx + 0xbe]
xor al, 0x5c
mov byte [rcx + 0x22], al
movzx eax, byte [r15 + rbx + 0xbf]
xor al, 0x5c
mov byte [rcx + 0x23], al
movzx eax, byte [r15 + rbx + 0xc0]
xor al, 0x5c
mov byte [rcx + 0x24], al
movzx eax, byte [r15 + rbx + 0xc1]
xor al, 0x5c
mov byte [rcx + 0x25], al
movzx eax, byte [r15 + rbx + 0xc2]
xor al, 0x5c
mov byte [rcx + 0x26], al
movzx eax, byte [r15 + rbx + 0xc3]
xor al, 0x5c
mov byte [rcx + 0x27], al
movzx eax, byte [r15 + rbx + 0xc4]
xor al, 0x5c
mov byte [rcx + 0x28], al
movzx eax, byte [r15 + rbx + 0xc5]
xor al, 0x5c
mov byte [rcx + 0x29], al
movzx eax, byte [r15 + rbx + 0xc6]
xor al, 0x5c
mov byte [rcx + 0x2a], al
movzx eax, byte [r15 + rbx + 0xc7]
xor al, 0x5c
mov byte [rcx + 0x2b], al
movzx eax, byte [r15 + rbx + 0xc8]
xor al, 0x5c
mov byte [rcx + 0x2c], al
movzx eax, byte [r15 + rbx + 0xc9]
xor al, 0x5c
mov byte [rcx + 0x2d], al
movzx eax, byte [r15 + rbx + 0xca]
xor al, 0x5c
mov byte [rcx + 0x2e], al
movzx eax, byte [r15 + rbx + 0xcb]
xor al, 0x5c
mov byte [rcx + 0x2f], al
movzx eax, byte [r15 + rbx + 0xcc]
xor al, 0x5c
mov byte [rcx + 0x30], al
movzx eax, byte [r15 + rbx + 0xcd]
xor al, 0x5c
mov byte [rcx + 0x31], al
movzx eax, byte [r15 + rbx + 0xce]
xor al, 0x5c
mov byte [rcx + 0x32], al
movzx eax, byte [r15 + rbx + 0xcf]
xor al, 0x5c
mov byte [rcx + 0x33], al
movzx eax, byte [r15 + rbx + 0xd0]
xor al, 0x5c
mov byte [rcx + 0x34], al
movzx eax, byte [r15 + rbx + 0xd1]
xor al, 0x5c
mov byte [rcx + 0x35], al
movzx eax, byte [r15 + rbx + 0xd2]
xor al, 0x5c
mov byte [rcx + 0x36], al
movzx eax, byte [r15 + rbx + 0xd3]
xor al, 0x5c
mov byte [rcx + 0x37], al
movzx eax, byte [r15 + rbx + 0xd4]
xor al, 0x5c
mov byte [rcx + 0x38], al
movzx eax, byte [r15 + rbx + 0xd5]
xor al, 0x5c
mov byte [rcx + 0x39], al
movzx eax, byte [r15 + rbx + 0xd6]
xor al, 0x5c
mov byte [rcx + 0x3a], al
movzx eax, byte [r15 + rbx + 0xd7]
xor al, 0x5c
mov byte [rcx + 0x3b], al
movzx eax, byte [r15 + rbx + 0xd8]
xor al, 0x5c
mov byte [rcx + 0x3c], al
movzx eax, byte [r15 + rbx + 0xd9]
xor al, 0x5c
mov byte [rcx + 0x3d], al
movzx eax, byte [r15 + rbx + 0xda]
xor al, 0x5c
mov byte [rcx + 0x3e], al
movzx eax, byte [r15 + rbx + 0xdb]
add r15, 0x40
xor al, 0x5c
mov byte [rcx + 0x3f], al
cmp r15, 0x80
jl 0x180083480
mov r8, r12
lea rcx, [rbx + 0x68]
mov rdx, rsi
call sym.version.dll_EVP_DigestInit_ex
test eax, eax
je 0x180082ff8
mov rcx, rsi
call sym.version.dll_EVP_MD_block_size
movsxd r8, eax
lea rdx, [rsp + 0x30]
lea rcx, [rbx + 0x68]
call sym.version.dll_EVP_DigestUpdate
test eax, eax
je 0x180082ff8
lea rdx, [rbx + 0x38]
lea rcx, [rbx + 8]
call sym.version.dll_EVP_MD_CTX_copy_ex
test eax, eax
je 0x180082ff8
mov eax, 1
jmp 0x180082ffa