Function at 0x10021ca0
Capabilities:
Authenticate hmac

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x10055f80
mov eax, dword fs:[0]
push eax
sub esp, 0x5c
mov eax, dword [0x1006a018]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov ebx, ecx
mov dword [ebp - 0x68], ebx
push 0
lea eax, [ebp - 0x43]
mov word [ebp - 0x44], 0x4e
push eax
lea ecx, [ebp - 0x28]
mov byte [ebp - 0x43], 0
mov dword [ebp - 0x14], 0xf
mov dword [ebp - 0x18], 0
mov byte [ebp - 0x28], 0
call fcn.100052b0
mov dword [ebp - 4], 0
mov eax, 0xc22e4507
mov edi, dword [ebx + 0x2c]
mul edi
shr edx, 0x10
mov ecx, edx
call fcn.10022770
call fcn.10053c11
mov esi, eax
mov edx, edi
imul ecx, esi, 0x15180
mov eax, 0x91a2b3c5
mov dword [ebp - 0x30], esi
sub edx, ecx
mov ecx, 0x18
mul edx
shr edx, 0xb
mov eax, edx
xor edx, edx
div ecx
mov ecx, edx
call fcn.10022770
call fcn.10053c11
mov ebx, eax
lea ecx, [esi + esi*2]
mov edx, edi
mov dword [ebp - 0x4c], ebx
mov eax, 0x88888889
lea esi, [ebx + ecx*8]
imul ecx, esi, 0xe10
sub edx, ecx
mov ecx, 0x3c
mul edx
shr edx, 5
mov eax, edx
xor edx, edx
div ecx
mov ecx, edx
call fcn.10022770
call fcn.10053c11
mov ecx, esi
shl ecx, 4
sub ecx, esi
mov esi, eax
lea ecx, [esi + ecx*4]
mov edx, ecx
shl edx, 4
sub edx, ecx
mov ecx, 0x3c
shl edx, 2
sub edi, edx
xor edx, edx
mov eax, edi
div ecx
mov ecx, edx
call fcn.10022770
call fcn.10053c11
mov edx, dword [ebp - 0x30]
mov edi, eax
test edx, edx
je 0x10021e5d
cmp edx, 0xa
jae 0x10021dda
mov al, 0x2a
mov byte [ebp - 0x2a], 0
mov cl, 0x1a
mov byte [ebp - 0x2c], al
xor cl, al
mov byte [ebp - 0x2a], 0
mov byte [ebp - 0x2b], cl
lea eax, [ebp - 0x2b]
jmp 0x10021de7
mov word [ebp - 0x30], 0x36
lea eax, [ebp - 0x2f]
mov byte [ebp - 0x2f], 0
push edx
push eax
mov ch, 0x4a
mov byte [ebp - 0x3a], 0
mov al, 0x6f
mov byte [ebp - 0x40], ch
mov dl, al
mov byte [ebp - 0x3a], 0
mov ah, 0x70
xor al, ch
xor ah, ch
mov byte [ebp - 0x3f], al
mov cl, 0x39
mov byte [ebp - 0x3b], ah
sub esp, 0x18
lea eax, [ebp - 0x3f]
xor cl, ch
mov bl, 0x3f
xor dl, ch
mov byte [ebp - 0x3e], cl
xor bl, ch
mov byte [ebp - 0x3d], dl
mov ecx, esp
mov byte [ebp - 0x3c], bl
push eax
call fcn.100053b0
lea eax, [ebp - 0x64]
push eax
call fcn.1000be20
add esp, 0x24
push 0xffffffffffffffff
push 0
push eax
lea ecx, [ebp - 0x28]
mov byte [ebp - 4], 1
call fcn.10007900
mov byte [ebp - 4], 0
mov eax, dword [ebp - 0x50]
cmp eax, 0x10
jb 0x10021e5a
inc eax
push eax
push dword [ebp - 0x64]
call fcn.10005180
mov ebx, dword [ebp - 0x4c]
test ebx, ebx
je 0x10021f05
cmp ebx, 0xa
jae 0x10021e83
mov cl, 0x18
mov byte [ebp - 0x2a], 0
mov al, 0x28
mov byte [ebp - 0x2c], cl
xor al, cl
mov byte [ebp - 0x2a], 0
mov byte [ebp - 0x2b], al
lea eax, [ebp - 0x2b]
jmp 0x10021e90
mov word [ebp - 0x30], 0x64
lea eax, [ebp - 0x2f]
mov byte [ebp - 0x2f], 0
push ebx
push eax
mov ch, 0x45
mov byte [ebp - 0x3a], 0
mov al, 0x60
mov byte [ebp - 0x40], ch
mov dl, al
mov byte [ebp - 0x3a], 0
mov ah, 0x7f
xor al, ch
xor ah, ch
mov byte [ebp - 0x3f], al
mov cl, 0x36
mov byte [ebp - 0x3b], ah
sub esp, 0x18
lea eax, [ebp - 0x3f]
xor cl, ch
mov bl, 0x30
xor dl, ch
mov byte [ebp - 0x3e], cl
xor bl, ch
mov byte [ebp - 0x3d], dl
mov ecx, esp
mov byte [ebp - 0x3c], bl
push eax
call fcn.100053b0
lea eax, [ebp - 0x64]
push eax
call fcn.1000be20
add esp, 0x24
push 0xffffffffffffffff
push 0
push eax
lea ecx, [ebp - 0x28]
mov byte [ebp - 4], 2
call fcn.10007900
mov byte [ebp - 4], 0
mov eax, dword [ebp - 0x50]
cmp eax, 0x10
jb 0x10021f4b
inc eax
push eax
push dword [ebp - 0x64]
call fcn.10005180
jmp 0x10021f4b
mov bl, 0x13
mov byte [ebp - 0x34], 0
mov dl, 0x23
mov byte [ebp - 0x38], bl
mov al, dl
mov byte [ebp - 0x34], 0
mov cl, 0x29
xor dl, bl
xor al, bl
mov byte [ebp - 0x37], dl
xor cl, bl
mov byte [ebp - 0x36], al
mov byte [ebp - 0x35], cl
test dl, dl
jne 0x10021f2f
xor ecx, ecx
jmp 0x10021f3e
lea ecx, [ebp - 0x37]
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x10021f35
sub ecx, edx
push ecx
lea eax, [ebp - 0x37]
push eax
lea ecx, [ebp - 0x28]
call fcn.100077e0
test esi, esi
je 0x10021ff3
cmp esi, 0xa
jae 0x10021f71
mov cl, 0x63
mov byte [ebp - 0x2a], 0
mov al, 0x53
mov byte [ebp - 0x2c], cl
xor al, cl
mov byte [ebp - 0x2a], 0
mov byte [ebp - 0x2b], al
lea eax, [ebp - 0x2b]
jmp 0x10021f7e
mov word [ebp - 0x30], 0x1c
lea eax, [ebp - 0x2f]
mov byte [ebp - 0x2f], 0
push esi
push eax
mov ch, 0x1a
mov byte [ebp - 0x3a], 0
mov al, 0x3f
mov byte [ebp - 0x40], ch
mov dl, al
mov byte [ebp - 0x3a], 0
mov ah, 0x20
xor al, ch
xor ah, ch
mov byte [ebp - 0x3f], al
mov cl, 0x69
mov byte [ebp - 0x3b], ah
sub esp, 0x18
lea eax, [ebp - 0x3f]
xor cl, ch
mov bl, 0x6f
xor dl, ch
mov byte [ebp - 0x3e], cl
xor bl, ch
mov byte [ebp - 0x3d], dl
mov ecx, esp
mov byte [ebp - 0x3c], bl
push eax
call fcn.100053b0
lea eax, [ebp - 0x64]
push eax
call fcn.1000be20
add esp, 0x24
push 0xffffffffffffffff
push 0
push eax
lea ecx, [ebp - 0x28]
mov byte [ebp - 4], 3
call fcn.10007900
mov byte [ebp - 4], 0
mov eax, dword [ebp - 0x50]
cmp eax, 0x10
jb 0x10022039
inc eax
push eax
push dword [ebp - 0x64]
call fcn.10005180
jmp 0x10022039
mov bl, 0x61
mov byte [ebp - 0x34], 0
mov dl, 0x51
mov byte [ebp - 0x38], bl
mov al, dl
mov byte [ebp - 0x34], 0
mov cl, 0x5b
xor dl, bl
xor al, bl
mov byte [ebp - 0x37], dl
xor cl, bl
mov byte [ebp - 0x36], al
mov byte [ebp - 0x35], cl
test dl, dl
jne 0x1002201d
xor ecx, ecx
jmp 0x1002202c
lea ecx, [ebp - 0x37]
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x10022023
sub ecx, edx
push ecx
lea eax, [ebp - 0x37]
push eax
lea ecx, [ebp - 0x28]
call fcn.100077e0
test edi, edi
je 0x100220da
cmp edi, 0xa
jae 0x1002205f
mov cl, 0x11
mov byte [ebp - 0x2a], 0
mov al, 0x21
mov byte [ebp - 0x2c], cl
xor al, cl
mov byte [ebp - 0x2a], 0
mov byte [ebp - 0x2b], al
lea eax, [ebp - 0x2b]
jmp 0x1002206c
mov word [ebp - 0x30], 0x13
lea eax, [ebp - 0x2f]
mov byte [ebp - 0x2f], 0
push edi
push eax
mov ah, 0xb
mov byte [ebp - 0x47], 0
mov al, 0x2e
mov byte [ebp - 0x4c], ah
mov dl, al
mov byte [ebp - 0x47], 0
mov cl, 0x78
xor al, ah
xor cl, ah
mov byte [ebp - 0x4b], al
sub esp, 0x18
mov byte [ebp - 0x4a], cl
mov bl, 0x7e
xor dl, ah
xor bl, ah
mov byte [ebp - 0x49], dl
lea eax, [ebp - 0x4b]
mov byte [ebp - 0x48], bl
mov ecx, esp
push eax
call fcn.100053b0
lea eax, [ebp - 0x64]
push eax
call fcn.1000be20
add esp, 0x24
push 0xffffffffffffffff
push 0
push eax
lea ecx, [ebp - 0x28]
mov byte [ebp - 4], 4
call fcn.10007900
mov byte [ebp - 4], 0
mov eax, dword [ebp - 0x50]
cmp eax, 0x10
jb 0x10022119
inc eax
push eax
push dword [ebp - 0x64]
call fcn.10005180
jmp 0x10022119
mov dl, 0x7e
mov byte [ebp - 0x29], 0
mov cl, 0x4e
mov byte [ebp - 0x2c], dl
mov al, cl
mov byte [ebp - 0x29], 0
xor cl, dl
xor al, dl
mov byte [ebp - 0x2b], cl
mov byte [ebp - 0x2a], al
test cl, cl
jne 0x100220fd
xor ecx, ecx
jmp 0x1002210c
lea ecx, [ebp - 0x2b]
lea edx, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x10022103
sub ecx, edx
push ecx
lea eax, [ebp - 0x2b]
push eax
lea ecx, [ebp - 0x28]
call fcn.100077e0
cmp dword [ebp - 0x14], 0x10
lea edx, [ebp - 0x28]
mov dword [ebp - 0x50], 0xf
cmovae edx, dword [ebp - 0x28]
mov dword [ebp - 0x54], 0
mov byte [ebp - 0x64], 0
cmp byte [edx], 0
jne 0x1002213f
xor ecx, ecx
jmp 0x1002214d
mov ecx, edx
lea esi, [ecx + 1]
mov al, byte [ecx]
inc ecx
test al, al
jne 0x10022144
sub ecx, esi
push ecx
push edx
lea ecx, [ebp - 0x64]
call fcn.100052b0
mov esi, dword [ebp - 0x68]
mov byte [ebp - 4], 5
mov esi, dword [esi + 0x28]
test esi, esi
je 0x1002217e
push 4
push esi
call dword [sym.imp.KERNEL32.dll_IsBadReadPtr]
test eax, eax
jne 0x1002217e
lea eax, [ebp - 0x64]
mov ecx, esi
push eax
call dword [0x1006254c]
mov eax, dword [ebp - 0x50]
cmp eax, 0x10
jb 0x10022190
inc eax
push eax
push dword [ebp - 0x64]
call fcn.10005180
mov eax, dword [ebp - 0x14]
cmp eax, 0x10
jb 0x100221a2
inc eax
push eax
push dword [ebp - 0x28]
call fcn.10005180
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.10052ee0
mov esp, ebp
pop ebp
ret