Function at 0x409f70
Capabilities:
Hash data via wincrypt
Hash data with md5
Initialize hashing via wincrypt

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x18
mov eax, dword [0x43200c]
mov esi, dword [ebp + 8]
xor eax, ebp
mov dword [ebp - 0x10], eax
push esi
call fcn.00416709
add esp, 4
test eax, eax
je 0x40a149
mov edi, eax
movzx eax, word [esi + eax*2 - 2]
cmp ax, 0x5c
je 0x409faa
cmp ax, 0x2f
jne 0x409fab
dec edi
xor ecx, ecx
lea eax, [edi + 2]
dec ecx
add eax, eax
cmovb eax, ecx
push eax
call fcn.0040d784
add esp, 4
mov ebx, eax
lea eax, [edi + edi + 4]
xor esi, esi
push eax
push esi
push ebx
call fcn.0040fdd0
add esp, 0xc
lea eax, [edi + 1]
push eax
push dword [ebp + 8]
push ebx
call fcn.00416b82
add esp, 0xc
mov dword [ebp - 0x24], ebx
push ebx
call fcn.00414efc
add esp, 4
lea ebx, [ebp - 0x14]
mov dword [ebp - 0x20], esi
mov dword [ebp - 0x18], esi
mov dword [ebx], esi
push 0xf0000000
push 1
push esi
push esi
push ebx
call dword [sym.imp.ADVAPI32.dll_CryptAcquireContextA]
test eax, eax
je 0x40a0c2
lea eax, [ebp - 0x18]
push eax
push esi
push esi
push 0x8003
push dword [ebp - 0x14]
call dword [sym.imp.ADVAPI32.dll_CryptCreateHash]
test eax, eax
je 0x40a0ed
add edi, edi
push 0
push edi
mov esi, dword [ebp - 0x24]
push esi
push dword [ebp - 0x18]
call dword [sym.imp.ADVAPI32.dll_CryptHashData]
test eax, eax
je 0x40a0f4
mov eax, 4
lea ecx, [ebp - 0x1c]
lea edx, [ebp - 0x20]
mov dword [ecx], eax
push 0
push ecx
push edx
push eax
push dword [ebp - 0x18]
call dword [sym.imp.ADVAPI32.dll_CryptGetHashParam]
test eax, eax
je 0x40a0f8
mov edi, dword [ebp - 0x20]
push edi
call fcn.0040d784
add esp, 4
xor ebx, ebx
mov esi, eax
push edi
push ebx
push eax
call fcn.0040fdd0
add esp, 0xc
push ebx
lea eax, [ebp - 0x20]
push eax
mov edi, esi
push esi
push 2
push dword [ebp - 0x18]
call dword [sym.imp.ADVAPI32.dll_CryptGetHashParam]
test eax, eax
je 0x40a0ef
mov eax, dword [ebp - 0x18]
test eax, eax
je 0x40a0aa
push eax
call dword [sym.imp.ADVAPI32.dll_CryptDestroyHash]
mov eax, dword [ebp - 0x14]
mov esi, dword [ebp - 0x24]
xor ebx, ebx
inc ebx
test eax, eax
je 0x40a0fa
push 0
push eax
call dword [sym.imp.ADVAPI32.dll_CryptReleaseContext]
jmp 0x40a0fa
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0x80090016
jne 0x40a0ed
mov eax, ebx
xor ebx, ebx
push 0xf0000008
push 1
push ebx
push ebx
push eax
call dword [sym.imp.ADVAPI32.dll_CryptAcquireContextA]
test eax, eax
jne 0x40a011
jmp 0x40a0ef
xor ebx, ebx
mov esi, dword [ebp - 0x24]
jmp 0x40a0fa
xor ebx, ebx
jmp 0x40a0fa
xor ebx, ebx
push esi
call fcn.0040d78d
add esp, 4
test ebx, ebx
je 0x40a149
mov esi, dword [ebp + 0xc]
push 0x104
push 0x42cf40
push esi
call fcn.00416b82
add esp, 0xc
cmp dword [ebp - 0x20], 0
je 0x40a14d
add esi, 0x48
xor ebx, ebx
movzx eax, byte [edi + ebx]
push eax
push str._.2x
push esi
call dword [sym.imp.USER32.dll_wsprintfW]
mov eax, edi
add esp, 0xc
inc ebx
add esi, 4
cmp ebx, dword [ebp - 0x20]
jb 0x40a128
jmp 0x40a153
xor esi, esi
jmp 0x40a15f
mov eax, edi
test edi, edi
je 0x40a15c
push eax
call fcn.0040d78d
add esp, 4
xor esi, esi
inc esi
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.0040dec1
mov eax, esi
add esp, 0x18
pop esi
pop edi
pop ebx
pop ebp
ret