Function at 0x5212a6
Capabilities:
Authenticate hmac
Encode data using xor
Hash data with md5

Disassembly:
push ebp
xor eax, eax
cld
push edi
mov ecx, 8
push esi
push ebx
sub esp, 0x5dc
lea edi, [esp + 0x190]
mov esi, dword [esp + 0x5f4]
rep stosd dword es:[edi], eax
stosb byte es:[edi], al
mov edx, dword [esp + 0x5f8]
test edx, edx
jle 0x5214dc
cmp dword [esp + 0x5f8], 0x40
jle 0x521383
mov ebx, dword [esp + 0x5f8]
mov ebp, dword [esp + 0x5f8]
lea edi, [esp + 0x20]
shr ebx, 0x1d
shl ebp, 3
mov dword [esp + 0x20], 0x67452301
mov dword [esp + 0x34], ebx
xor ebx, ebx
cmp dword [esp + 0x5f8], 0x40
mov dword [esp + 0x24], 0xefcdab89
mov dword [esp + 0x28], 0x98badcfe
mov dword [esp + 0x2c], 0x10325476
mov dword [esp + 0x30], ebp
jae 0x52187c
cmp dword [esp + 0x5f8], ebx
je 0x521363
sub dword [esp + 0x5f8], ebx
lea eax, [ebx + esi]
lea ebp, [edi + 0x18]
mov esi, dword [esp + 0x5f8]
mov dword [esp + 4], eax
mov dword [esp], ebp
mov dword [esp + 8], esi
call fcn.00a5b5c0
mov dword [esp + 4], edi
lea edi, [esp + 0xe0]
mov dword [esp], edi
mov esi, edi
call fcn.00521076
mov dword [esp + 0x5f8], 0x10
lea edi, [esp + 0x140]
lea ebx, [esp + 0xf0]
mov dword [esp + 8], 0x41
mov dword [esp + 4], 0
mov dword [esp], edi
call fcn.00a5b648
mov dword [esp + 8], 0x41
mov dword [esp + 4], 0
mov dword [esp], ebx
call fcn.00a5b648
mov edx, dword [esp + 0x5f8]
mov dword [esp + 4], esi
mov dword [esp + 8], edx
mov dword [esp], edi
call fcn.00a5b5c0
mov ecx, dword [esp + 0x5f8]
mov dword [esp + 4], esi
mov dword [esp], ebx
mov dword [esp + 8], ecx
call fcn.00a5b5c0
xor eax, eax
xor byte [esp + eax + 0x140], 0x36
xor byte [esp + eax + 0xf0], 0x5c
add eax, 1
cmp eax, 0x3f
jle 0x5213f1
lea esi, [esp + 0x98]
lea ebp, [esp + 0x80]
mov dword [esp + 0x80], 0x67452301
mov dword [esp + 0x84], 0xefcdab89
mov dword [esp + 0x88], 0x98badcfe
mov dword [esp + 0x8c], 0x10325476
mov dword [esp + 0x90], 0x200
mov dword [esp + 0x94], 0
mov dword [esp + 8], 0x40
mov dword [esp + 4], edi
mov dword [esp], esi
call fcn.00a5b5c0
mov edx, esi
mov eax, ebp
call fcn.005207ec
mov dword [esp + 4], 0xc3a0b4
mov eax, dword [esp + 0x5f0]
mov dword [esp], eax
call fcn.00a5b588
test eax, eax
mov dword [esp + 0x1c], eax
jne 0x521542
xor ebx, ebx
jmp 0x5214b6
add al, 0x37
mov ecx, dword [esp + 0x5fc]
mov byte [ebx + ecx], al
add ebx, 1
cmp ebx, 0x1f
jg 0x5217b4
call fcn.00a5b728
cmp eax, 0xffffffff
lea edi, [eax + 0xf]
cmovg edi, eax
and edi, 0xfffffff0
sub eax, edi
cmp eax, 9
jg 0x52149e
add al, 0x30
mov esi, dword [esp + 0x5fc]
mov byte [ebx + esi], al
jmp 0x5214aa
mov eax, dword [esp + 0x5f0]
mov dword [esp + 0x94], 0
mov dword [esp + 0x90], 0
mov dword [esp + 0x80], 0x67452301
mov dword [esp + 0x84], 0xefcdab89
mov dword [esp + 0x88], 0x98badcfe
mov dword [esp + 0x8c], 0x10325476
mov dword [esp + 4], 0xc3a0b4
mov dword [esp], eax
call fcn.00a5b588
test eax, eax
mov dword [esp + 0x1c], eax
je 0x52149a
test byte [eax + 0xc], 0x10
jne 0x5215f9
mov esi, dword [esp + 0x1c]
lea edi, [esp + 0x1c0]
mov dword [esp + 8], 0x400
mov dword [esp + 0xc], esi
mov dword [esp], edi
mov dword [esp + 4], 1
call fcn.00a5b6a8
mov edx, dword [esp + 0x90]
mov ebp, dword [esp + 0x94]
mov edi, edx
lea ecx, [eax*8]
mov ebx, eax
shr edi, 3
add edx, ecx
mov esi, eax
and edi, 0x3f
cmp edx, ecx
mov dword [esp + 0x90], edx
adc ebp, 0
shr ebx, 0x1d
mov dword [esp + 0x94], ebp
mov ebp, 0x40
sub ebp, edi
add dword [esp + 0x94], ebx
xor ebx, ebx
cmp eax, ebp
jae 0x5217bf
cmp esi, ebx
je 0x5215eb
lea ecx, [esp + 0x1c0]
lea edx, [esp + edi + 0x98]
sub esi, ebx
lea edi, [ebx + ecx]
mov dword [esp + 8], esi
mov dword [esp], edx
mov dword [esp + 4], edi
call fcn.00a5b5c0
mov eax, dword [esp + 0x1c]
test byte [eax + 0xc], 0x10
je 0x52154c
mov ebp, dword [esp + 0x1c]
lea ebx, [esp + 0x80]
mov dword [esp], ebp
and al, 0xe8
insb byte es:[edi], dx
lahf
push ebx
add byte [ebx + 0x5fc2484], cl
add byte [eax], al
mov dword [esp + 4], ebx
mov dword [esp], eax
call fcn.00521076
mov esi, dword [esp + 0x5f8]
test esi, esi
jle 0x521727
lea ebp, [esp + 0x98]
lea edi, [esp + 0xf0]
mov dword [esp + 0x80], 0x67452301
mov dword [esp + 0x84], 0xefcdab89
mov dword [esp + 0x88], 0x98badcfe
mov dword [esp + 0x8c], 0x10325476
mov dword [esp + 0x90], 0x200
mov dword [esp + 0x94], 0
mov dword [esp + 8], 0x40
mov dword [esp + 4], edi
mov dword [esp], ebp
call fcn.00a5b5c0
mov edx, ebp
lea eax, [esp + 0x80]
mov esi, 0x40
call fcn.005207ec
mov edi, 0x10
mov edx, dword [esp + 0x90]
mov eax, dword [esp + 0x94]
mov ecx, edx
sub edx, 0xffffff80
shr ecx, 3
mov dword [esp + 0x90], edx
and ecx, 0x3f
cmp edx, 0x80
adc eax, 0
sub esi, ecx
xor ebx, ebx
cmp edi, esi
mov dword [esp + 0x94], eax
jae 0x52181f
cmp edi, ebx
je 0x52170d
mov edx, dword [esp + 0x5fc]
sub edi, ebx
lea ebp, [esp + ecx + 0x98]
lea eax, [ebx + edx]
mov dword [esp + 8], edi
mov dword [esp], ebp
mov dword [esp + 4], eax
call fcn.00a5b5c0
lea ebx, [esp + 0x80]
mov edi, dword [esp + 0x5fc]
mov dword [esp + 4], ebx
mov dword [esp], edi
call fcn.00521076
cld
xor eax, eax
mov ecx, 8
lea edi, [esp + 0x190]
xor edx, edx
rep stosd dword es:[edi], eax
stosb byte es:[edi], al
jmp 0x521761
add al, 0x37
mov byte [esp + edx*2 + 0x190], al
mov eax, ecx
and eax, 0xf
cmp eax, 9
jle 0x521789
add al, 0x37
mov byte [esp + edx*2 + 0x191], al
add edx, 1
cmp edx, 0xf
jg 0x52179a
mov esi, dword [esp + 0x5fc]
movzx ecx, byte [edx + esi]
mov eax, ecx
shr eax, 4
cmp eax, 9
jg 0x52173d
add al, 0x30
mov byte [esp + edx*2 + 0x190], al
mov eax, ecx
and eax, 0xf
cmp eax, 9
jg 0x521750
add al, 0x30
mov byte [esp + edx*2 + 0x191], al
add edx, 1
cmp edx, 0xf
jle 0x521761
lea edx, [esp + 0x190]
mov ebp, dword [esp + 0x5fc]
mov dword [esp + 4], edx
mov dword [esp], ebp
call fcn.00a5b628
add esp, 0x5dc
pop ebx
pop esi
pop edi
pop ebp
ret
lea ebx, [esp + 0x1c0]
lea eax, [esp + edi + 0x98]
mov dword [esp + 8], ebp
mov dword [esp + 4], ebx
mov ebx, ebp
mov dword [esp], eax
lea ebp, [ebx + 0x3f]
call fcn.00a5b5c0
lea edx, [esp + 0x98]
lea eax, [esp + 0x80]
call fcn.005207ec
cmp ebp, esi
jae 0x521818
lea edx, [esp + 0x1c0]
lea eax, [esp + 0x80]
add edx, ebx
add ebx, 0x40
call fcn.005207ec
lea ebp, [ebx + 0x3f]
cmp ebp, esi
jb 0x5217f9
xor edi, edi
jmp 0x5215c4
lea ebx, [esp + ecx + 0x98]
mov ecx, dword [esp + 0x5fc]
mov dword [esp + 8], esi
mov dword [esp], ebx
mov ebx, esi
mov dword [esp + 4], ecx
lea esi, [ebx + 0x3f]
call fcn.00a5b5c0
mov edx, ebp
lea eax, [esp + 0x80]
call fcn.005207ec
cmp esi, 0x10
jae 0x521875
mov edx, dword [esp + 0x5fc]
lea eax, [esp + 0x80]
add edx, ebx
add ebx, 0x40
call fcn.005207ec
lea esi, [ebx + 0x3f]
cmp esi, 0x10
jb 0x521855
xor ecx, ecx
jmp 0x5216e6
lea ebx, [esp + 0x38]
mov dword [esp + 8], 0x40
mov dword [esp + 4], esi
mov dword [esp], ebx
call fcn.00a5b5c0
mov edx, ebx
mov eax, edi
mov ebx, 0x40
call fcn.005207ec
cmp dword [esp + 0x5f8], 0x7f
jbe 0x521336
lea edx, [esi + ebx]
mov eax, edi
add ebx, 0x40
call fcn.005207ec
lea edx, [ebx + 0x3f]
cmp edx, dword [esp + 0x5f8]
jb 0x5218b0
jmp 0x521336