Function at 0x18002e020
Capabilities:
Create new key via cryptacquirecontext
Encode data using xor
Hash data via wincrypt
Hash data with md5
Initialize hashing via wincrypt

Disassembly:
mov qword [rsp + 0x20], rbx
push rsi
push rdi
push r12
push r14
push r15
sub rsp, 0x80
mov rax, qword [0x180080920]
xor rax, rsp
mov qword [rsp + 0x70], rax
movzx r12d, r9b
mov rdi, r8
mov esi, edx
mov r14, rcx
xor ebx, ebx
mov qword [rsp + 0x48], rbx
mov qword [rsp + 0x40], rbx
mov r8d, 0xffffffff
mov edx, r8d
mov r15d, dword [rsp + 0xd0]
cmp r15d, 3
je 0x18002e2d8
mov dword [rsp + 0x20], ebx
lea r9d, [rbx + 1]
xor r8d, r8d
xor edx, edx
lea rcx, [rsp + 0x48]
call qword [sym.imp.ADVAPI32.dll_CryptAcquireContextW]
test eax, eax
jne 0x18002e0b2
mov dword [rsp + 0x20], 8
lea r9d, [rbx + 1]
xor r8d, r8d
xor edx, edx
lea rcx, [rsp + 0x48]
call qword [sym.imp.ADVAPI32.dll_CryptAcquireContextW]
test eax, eax
je 0x18002e110
mov edx, ebx
cmp r15d, 1
setne dl
add edx, 0x8003
lea rax, [rsp + 0x40]
mov qword [rsp + 0x20], rax
xor r9d, r9d
xor r8d, r8d
mov rcx, qword [rsp + 0x48]
call qword [sym.imp.ADVAPI32.dll_CryptCreateHash]
test eax, eax
je 0x18002e155
xor r9d, r9d
mov r8d, esi
mov rdx, r14
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.ADVAPI32.dll_CryptHashData]
test eax, eax
jne 0x18002e117
xor edx, edx
mov rcx, qword [rsp + 0x48]
call qword [sym.imp.ADVAPI32.dll_CryptReleaseContext]
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.ADVAPI32.dll_CryptDestroyHash]
xor al, al
jmp 0x18002e31f
cmp r15d, 1
jne 0x18002e218
mov dword [rsp + 0x50], 0x10
mov dword [rsp + 0x20], ebx
lea r9, [rsp + 0x50]
lea r8, [rsp + 0x58]
lea edx, [r15 + 1]
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.ADVAPI32.dll_CryptGetHashParam]
test eax, eax
jne 0x18002e169
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.ADVAPI32.dll_CryptDestroyHash]
xor edx, edx
mov rcx, qword [rsp + 0x48]
call qword [sym.imp.ADVAPI32.dll_CryptReleaseContext]
xor al, al
jmp 0x18002e31f
cmp dword [0x180080928], 2
jl 0x18002e18c
movdqu xmm0, xmmword [rsp + 0x58]
pshufb xmm0, xmmword [0x18006e230]
movdqu xmmword [rsp + 0x58], xmm0
mov ebx, 4
cmp rbx, 4
jae 0x18002e1a5
mov eax, dword [rsp + rbx*4 + 0x58]
bswap eax
mov dword [rsp + rbx*4 + 0x58], eax
inc rbx
cmp rbx, 4
jl 0x18002e192
test r12b, r12b
je 0x18002e1d6
mov eax, dword [rsp + 0x64]
mov dword [rsp + 0x28], eax
mov eax, dword [rsp + 0x60]
mov dword [rsp + 0x20], eax
mov r9d, dword [rsp + 0x5c]
mov r8d, dword [rsp + 0x58]
lea rdx, [0x18006db30]
mov rcx, rdi
call qword [sym.imp.USER32.dll_wsprintfA]
jmp 0x18002e1dc
mov eax, dword [rsp + 0x58]
mov dword [rdi], eax
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.ADVAPI32.dll_CryptDestroyHash]
xor edx, edx
mov rcx, qword [rsp + 0x48]
call qword [sym.imp.ADVAPI32.dll_CryptReleaseContext]
jmp 0x18002e31d
cmp r15d, 2
jne 0x18002e110
mov dword [rsp + 0x50], 0x14
mov dword [rsp + 0x20], ebx
lea r9, [rsp + 0x50]
lea r8, [rsp + 0x58]
mov edx, r15d
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.ADVAPI32.dll_CryptGetHashParam]
test eax, eax
je 0x18002e14a
mov eax, dword [rsp + 0x58]
bswap eax
mov dword [rsp + 0x58], eax
mov r9d, dword [rsp + 0x5c]
bswap r9d
mov dword [rsp + 0x5c], r9d
mov ecx, dword [rsp + 0x60]
bswap ecx
mov dword [rsp + 0x60], ecx
mov edx, dword [rsp + 0x64]
bswap edx
mov dword [rsp + 0x64], edx
mov r8d, dword [rsp + 0x68]
bswap r8d
mov dword [rsp + 0x68], r8d
test r12b, r12b
je 0x18002e2ad
mov dword [rsp + 0x30], r8d
mov dword [rsp + 0x28], edx
mov dword [rsp + 0x20], ecx
mov r8d, eax
lea rdx, [0x18006db48]
mov rcx, rdi
call qword [sym.imp.USER32.dll_wsprintfA]
jmp 0x18002e2b7
mov dword [rdi], eax
movzx eax, byte [rsp + 0x5c]
mov byte [rdi + 4], al
jmp 0x18002e1dc
test esi, esi
je 0x18002e300
lea r9, [0x180090b10]
movzx ecx, dl
movzx eax, byte [r14]
xor rcx, rax
shr edx, 8
xor edx, dword [r9 + rcx*4]
lea r14, [r14 + 1]
add esi, r8d
jne 0x18002e2e3
mov r8d, edx
not r8d
test r12b, r12b
je 0x18002e31a
lea rdx, [0x18006db60]
mov rcx, rdi
call qword [sym.imp.USER32.dll_wsprintfA]
jmp 0x18002e31d
mov dword [rdi], r8d
mov al, 1
mov rcx, qword [rsp + 0x70]
xor rcx, rsp
call fcn.180049ad0
mov rbx, qword [rsp + 0xc8]
add rsp, 0x80
pop r15
pop r14
pop r12
pop rdi
pop rsi
ret