Function at 0x4070c0
Capabilities:
Hash data with md5

Disassembly:
sub esp, 0x6c
push ebx
push ebp
push esi
mov esi, dword [esp + 0x80]
push edi
mov dword [esp + 0x10], 0x67452301
lea ebx, [esi + 1]
mov dword [esp + 0x14], 0xefcdab89
mov eax, ebx
mov dword [esp + 0x18], 0x98badcfe
and eax, 0x3f
mov dword [esp + 0x1c], 0x10325476
cmp al, 0x38
mov dword [esp + 0x30], ebx
je 0x40710d
inc ebx
mov ecx, ebx
and ecx, 0x3f
cmp cl, 0x38
jne 0x4070fe
mov dword [esp + 0x30], ebx
lea edx, [ebx + 8]
push edx
call fcn.004136f7
mov ecx, esi
mov esi, dword [esp + 0x84]
mov ebp, eax
mov eax, ecx
mov edi, ebp
add esp, 4
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
mov dword [esp + 0x34], ebp
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov esi, dword [esp + 0x84]
lea eax, [esi + 1]
mov byte [esi + ebp], 0x80
cmp eax, ebx
jae 0x407161
mov ecx, ebx
lea edi, [eax + ebp]
sub ecx, eax
xor eax, eax
mov edx, ecx
shr ecx, 2
rep stosd dword es:[edi], eax
mov ecx, edx
and ecx, 3
rep stosb byte es:[edi], al
lea edi, [ebx + ebp]
lea eax, [esi*8]
push edi
push eax
call fcn.00407350
add edi, 4
shr esi, 0x1d
push edi
push esi
call fcn.00407350
add esp, 0x10
xor eax, eax
test ebx, ebx
mov dword [esp + 0x2c], eax
jbe 0x4072fb
lea edi, [esp + 0x3c]
lea esi, [eax + ebp]
mov ebx, 0x10
push esi
call fcn.00407380
mov dword [edi], eax
add esp, 4
add esi, 4
add edi, 4
dec ebx
jne 0x40719c
mov ecx, dword [esp + 0x10]
mov esi, dword [esp + 0x14]
mov edi, dword [esp + 0x18]
mov edx, dword [esp + 0x1c]
mov dword [esp + 0x20], ecx
xor ebx, ebx
mov ecx, 1
mov dword [esp + 0x24], ebx
mov dword [esp + 0x80], ebx
mov dword [esp + 0x84], 5
mov dword [esp + 0x28], ecx
cmp ecx, 0x51
jae 0x4071fa
mov eax, esi
mov ecx, edi
not eax
and eax, edx
and ecx, esi
or eax, ecx
mov ecx, ebx
jmp 0x407237
cmp ecx, 0xa1
jae 0x407210
mov eax, edx
mov ebp, edx
not eax
and eax, edi
and ebp, esi
or eax, ebp
jmp 0x407234
cmp ecx, 0xf1
mov eax, edx
jae 0x407227
mov ecx, dword [esp + 0x84]
xor eax, edi
xor eax, esi
jmp 0x407234
mov ecx, dword [esp + 0x80]
not eax
or eax, esi
xor eax, edi
and ecx, 0xf
mov ecx, dword [esp + ecx*4 + 0x3c]
mov ebp, dword [ebx*4 + 0x4368a8]
mov ebx, dword [ebx*4 + 0x4369a8]
add ecx, ebp
add ecx, eax
mov eax, dword [esp + 0x20]
add eax, ecx
mov ecx, 0x20
sub ecx, ebx
mov ebp, eax
shr ebp, cl
mov ecx, ebx
mov dword [esp + 0x38], edx
shl eax, cl
mov ecx, dword [esp + 0x28]
mov edx, edi
mov ebx, dword [esp + 0x24]
mov edi, esi
add ecx, 5
or ebp, eax
mov eax, dword [esp + 0x38]
add esi, ebp
mov ebp, dword [esp + 0x84]
add ebp, 3
inc ebx
mov dword [esp + 0x84], ebp
mov ebp, dword [esp + 0x80]
add ebp, 7
cmp ecx, 0x141
mov dword [esp + 0x20], eax
mov dword [esp + 0x24], ebx
mov dword [esp + 0x28], ecx
mov dword [esp + 0x80], ebp
jb 0x4071e5
mov ecx, dword [esp + 0x10]
mov ebp, dword [esp + 0x14]
mov ebx, dword [esp + 0x18]
add ecx, eax
mov eax, dword [esp + 0x2c]
add ebp, esi
mov esi, dword [esp + 0x1c]
mov dword [esp + 0x10], ecx
mov ecx, dword [esp + 0x30]
add eax, 0x40
add ebx, edi
add esi, edx
mov dword [esp + 0x14], ebp
mov ebp, dword [esp + 0x34]
cmp eax, ecx
mov dword [esp + 0x18], ebx
mov dword [esp + 0x1c], esi
mov dword [esp + 0x2c], eax
jb 0x407190
push ebp
call fcn.0041360e
mov esi, dword [esp + 0x8c]
mov ecx, dword [esp + 0x14]
push esi
push ecx
call fcn.00407350
mov eax, dword [esp + 0x20]
lea edx, [esi + 4]
push edx
push eax
call fcn.00407350
mov edx, dword [esp + 0x2c]
lea ecx, [esi + 8]
push ecx
push edx
call fcn.00407350
mov eax, dword [esp + 0x38]
add esi, 0xc
push esi
push eax
call fcn.00407350
add esp, 0x24
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x6c
ret