Function at 0xe38570
Capabilities:
Hash data via wincrypt
Hash data with md5
Initialize hashing via wincrypt
Read file on windows

Disassembly:
sub esp, 0x420
push ebx
mov eax, dword [esp + 0x428]
push ebp
push esi
xor ebx, ebx
push edi
push ebx
push 0x8000000
push 3
push ebx
push 1
push 0x80000000
push eax
mov dword [esp + 0x30], ebx
mov dword [esp + 0x2c], ebx
mov dword [esp + 0x34], ebx
mov dword [esp + 0x38], ebx
call dword [sym.imp.KERNEL32.dll_CreateFileW]
mov ebp, eax
cmp ebp, 0xffffffff
je 0xe38774
push 0xf0000000
push 1
push ebx
lea ecx, [esp + 0x20]
push ebx
push ecx
call dword [sym.imp.ADVAPI32.dll_CryptAcquireContextA]
test eax, eax
jne 0xe385e7
call dword [sym.imp.KERNEL32.dll_GetLastError]
push ebp
call dword [sym.imp.KERNEL32.dll_CloseHandle]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x420
ret
mov eax, dword [esp + 0x14]
lea edx, [esp + 0x10]
push edx
push ebx
push ebx
push 0x8003
push eax
call dword [sym.imp.ADVAPI32.dll_CryptCreateHash]
test eax, eax
jne 0xe38628
call dword [sym.imp.KERNEL32.dll_GetLastError]
push ebp
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov ecx, dword [esp + 0x14]
push ebx
push ecx
call dword [sym.imp.ADVAPI32.dll_CryptReleaseContext]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x420
ret
mov esi, dword [sym.imp.KERNEL32.dll_ReadFile]
lea edx, [esp + 0x18]
push ebx
push edx
lea eax, [esp + 0x38]
push 0x400
push eax
push ebp
call esi
cmp eax, ebx
je 0xe386b3
mov edi, dword [sym.imp.ADVAPI32.dll_CryptHashData]
mov ecx, dword [esp + 0x18]
cmp ecx, ebx
je 0xe386af
mov edx, dword [esp + 0x10]
push ebx
push ecx
lea ecx, [esp + 0x38]
push ecx
push edx
call edi
test eax, eax
je 0xe3867e
lea eax, [esp + 0x18]
push ebx
push eax
lea ecx, [esp + 0x38]
push 0x400
push ecx
push ebp
call esi
cmp eax, ebx
jne 0xe3864b
jmp 0xe386b3
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, dword [esp + 0x14]
push ebx
push edx
call dword [sym.imp.ADVAPI32.dll_CryptReleaseContext]
mov eax, dword [esp + 0x10]
push eax
call dword [sym.imp.ADVAPI32.dll_CryptDestroyHash]
push ebp
call dword [sym.imp.KERNEL32.dll_CloseHandle]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x420
ret
cmp eax, ebx
jne 0xe386e4
call dword [sym.imp.KERNEL32.dll_GetLastError]
mov ecx, dword [esp + 0x14]
push ebx
push ecx
call dword [sym.imp.ADVAPI32.dll_CryptReleaseContext]
mov edx, dword [esp + 0x10]
push edx
call dword [sym.imp.ADVAPI32.dll_CryptDestroyHash]
push ebp
call dword [sym.imp.KERNEL32.dll_CloseHandle]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x420
ret
mov edx, dword [esp + 0x10]
lea eax, [esp + 0x1c]
push ebx
lea ecx, [esp + 0x24]
push eax
push ecx
push 2
push edx
mov dword [esp + 0x30], 0x10
call dword [sym.imp.ADVAPI32.dll_CryptGetHashParam]
test eax, eax
je 0xe38774
mov edi, dword [esp + 0x1c]
xor ecx, ecx
cmp edi, ebx
jbe 0xe3873f
mov esi, 0xe44b2d
xor eax, eax
add esi, 2
mov al, byte [esp + ecx + 0x20]
mov edx, eax
and eax, 0xf
shr edx, 4
mov al, byte [eax + str.0123456789ABCDEF]
inc ecx
mov dl, byte [edx + str.0123456789ABCDEF]
cmp ecx, edi
mov byte [esi - 3], dl
mov byte [esi - 2], al
jb 0xe38717
mov ecx, dword [esp + 0x10]
mov byte [edi*2 + 0xe44b2c], bl
push ecx
call dword [sym.imp.ADVAPI32.dll_CryptDestroyHash]
mov edx, dword [esp + 0x14]
push ebx
push edx
call dword [sym.imp.ADVAPI32.dll_CryptReleaseContext]
push ebp
call dword [sym.imp.KERNEL32.dll_CloseHandle]
pop edi
pop esi
pop ebp
mov eax, 0xe44b2c
pop ebx
add esp, 0x420
ret
call dword [sym.imp.KERNEL32.dll_GetLastError]
pop edi
pop esi
pop ebp
xor eax, eax
pop ebx
add esp, 0x420
ret