Function at 0x66d200
Capabilities:
Authenticate hmac

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x5c
lea esi, [ebp + 8]
mov dword [ebp - 0x1c], esp
mov dword [ebp - 0x10], 0xffffffff
lea eax, [ebp - 0x18]
mov dword [ebp - 0x14], 0x681db0
mov ecx, dword fs:[0]
mov dword [ebp - 0x18], ecx
mov dword fs:[0], eax
mov eax, dword [ebp + 8]
mov dword [ebp - 0x40], eax
mov eax, dword [ebp + 0x24]
lea ecx, [ebp + 0x14]
mov dword [ebp - 0x24], ecx
test eax, eax
je 0x66d305
nop
mov ecx, dword [esi + 0x20]
mov edx, ecx
sub edx, eax
cmp edx, 2
jae 0x66d282
nop
movzx eax, byte [0xa071b3]
cmp al, 0xbc
je 0x66d2c8
mov cl, 0xd6
nop word cs:[eax + eax]
mov al, 0x64
lock cmpxchg byte [0xa071b3], cl
je 0x66d2a3
cmp al, 0xbc
jne 0x66d270
jmp 0x66d2c8
lea edx, [eax + 2]
mov dword [esi + 0x1c], edx
lea edx, [ebp + 0x14]
cmp ecx, 0x10
jb 0x66d296
lea ecx, [ebp + 8]
mov edx, dword [ecx + 0xc]
mov word [edx + eax], 0x203a
mov byte [edx + eax + 2], 0
jmp 0x66d2fa
nop
xor byte [0xa071b0], 0xaf
xor byte [0xa071b1], 0x36
xor byte [0xa071b2], 0xc4
mov al, 0xbc
xchg byte [0xa071b3], al
mov dword [ebp - 0x10], 1
nop
mov dword [ebp - 0x10], 1
movzx eax, byte [ebp - 0x58]
mov byte [esp + 4], al
mov dword [esp + 0xc], 2
mov dword [esp + 8], 0xa071b0
mov dword [esp], 2
lea ecx, [ebp + 0x14]
call fcn.0066d8c0
sub esp, 0x10
nop
mov dword [ebp - 0x10], 0xffffffff
lea esi, [ebp + 8]
nop
mov ebx, dword [esi + 4]
mov esi, dword [esi + 8]
mov eax, dword [esi]
mov edi, dword [eax + 8]
mov ecx, edi
call dword [0xa0535c]
mov dword [ebp - 0x10], 1
mov dword [esp + 4], ebx
lea ecx, [ebp - 0x58]
mov dword [ebp - 0x20], ecx
mov dword [esp], ecx
mov ecx, esi
call edi
sub esp, 8
nop
mov eax, dword [ebp - 0x48]
cmp dword [ebp - 0x44], 0x10
jb 0x66d344
mov ecx, dword [ebp - 0x58]
mov dword [ebp - 0x20], ecx
lea esi, [ebp + 8]
mov ebx, dword [esi + 0x1c]
mov ecx, dword [esi + 0x20]
mov edx, ecx
sub edx, ebx
cmp edx, eax
jae 0x66d383
nop
mov dword [ebp - 0x10], 2
movzx ecx, byte [ebp - 0x34]
mov byte [esp + 4], cl
mov dword [esp + 0xc], eax
mov ecx, dword [ebp - 0x20]
mov dword [esp + 8], ecx
mov dword [esp], eax
lea ecx, [ebp + 0x14]
call fcn.0066d8c0
sub esp, 0x10
jmp 0x66d566
lea edi, [ebx + eax]
mov edx, edi
mov dword [ebp - 0x30], edi
mov dword [esi + 0x1c], edi
cmp ecx, 0x10
jb 0x66d39c
lea ecx, [ebp + 8]
mov ecx, dword [ecx + 0xc]
mov dword [ebp - 0x24], ecx
mov ecx, dword [ebp - 0x24]
mov dword [ebp - 0x28], ebx
lea esi, [ecx + ebx]
mov ecx, esi
sub ecx, dword [ebp - 0x20]
jae 0x66d3c3
test eax, eax
je 0x66d55b
xor ebx, ebx
cmp eax, 8
jae 0x66d41f
mov edi, dword [ebp - 0x20]
jmp 0x66d49a
test eax, eax
je 0x66d55b
cmp eax, 4
jb 0x66d3de
mov ecx, dword [ebp - 0x20]
sub ecx, esi
cmp ecx, 0x10
jae 0x66d674
mov edi, eax
lea eax, [edi - 1]
mov dword [ebp - 0x2c], eax
mov eax, edi
and eax, 3
je 0x66d50c
mov ecx, dword [ebp - 0x24]
mov edx, dword [ebp - 0x28]
lea ebx, [edx + ecx]
dec ebx
mov esi, dword [ebp - 0x20]
nop
lea edx, [edi - 1]
movzx ecx, byte [esi + edi - 1]
mov byte [ebx + edi], cl
dec eax
mov edi, edx
jne 0x66d400
cmp dword [ebp - 0x2c], 3
jae 0x66d517
jmp 0x66d55b
cmp ecx, 0x20
mov edi, dword [ebp - 0x20]
jb 0x66d49a
xor ebx, ebx
cmp eax, 0x20
jb 0x66d478
mov ebx, eax
and ebx, 0xffffffe0
mov ecx, dword [ebp - 0x24]
mov edx, dword [ebp - 0x28]
add edx, ecx
add edx, 0x10
mov ecx, ebx
xor ebx, ebx
nop word cs:[eax + eax]
nop
movups xmm0, xmmword [edi + ebx]
movups xmm1, xmmword [edi + ebx + 0x10]
movups xmmword [edx + ebx - 0x10], xmm0
movups xmmword [edx + ebx], xmm1
add ebx, 0x20
cmp ecx, ebx
jne 0x66d450
cmp eax, ecx
je 0x66d55b
mov ebx, ecx
test al, 0x18
je 0x66d49a
mov edx, ebx
mov ebx, eax
and ebx, 0xfffffff8
nop
nop
movsd xmm0, qword [edi + edx]
movsd qword [esi + edx], xmm0
add edx, 8
cmp ebx, edx
jne 0x66d480
cmp eax, ebx
je 0x66d55b
mov edx, eax
mov dword [ebp - 0x20], ebx
and edx, 3
je 0x66d4bc
mov ebx, dword [ebp - 0x20]
nop word [eax + eax]
nop
movzx ecx, byte [edi + ebx]
mov byte [esi + ebx], cl
inc ebx
dec edx
jne 0x66d4b0
mov ecx, dword [ebp - 0x20]
sub ecx, eax
cmp ecx, 0xfffffffc
ja 0x66d55b
mov ecx, dword [ebp - 0x24]
mov edx, dword [ebp - 0x28]
add ecx, edx
add ecx, 3
nop word cs:[eax + eax]
nop
movzx edx, byte [edi + ebx]
mov byte [ecx + ebx - 3], dl
movzx edx, byte [edi + ebx + 1]
mov byte [ecx + ebx - 2], dl
movzx edx, byte [edi + ebx + 2]
mov byte [ecx + ebx - 1], dl
movzx edx, byte [edi + ebx + 3]
mov byte [ecx + ebx], dl
add ebx, 4
cmp eax, ebx
jne 0x66d4e0
jmp 0x66d55b
mov edx, edi
mov esi, dword [ebp - 0x20]
cmp dword [ebp - 0x2c], 3
jb 0x66d55b
mov eax, dword [ebp - 0x24]
mov ecx, dword [ebp - 0x28]
add eax, ecx
dec eax
mov ecx, edx
nop word cs:[eax + eax]
nop
movzx ebx, byte [esi + edx - 1]
mov byte [eax + edx], bl
movzx ebx, byte [esi + edx - 2]
mov byte [eax + edx - 1], bl
movzx ebx, byte [esi + edx - 3]
mov byte [eax + edx - 2], bl
add ecx, 0xfffffffc
movzx ebx, byte [esi + edx - 4]
mov byte [eax + edx - 3], bl
mov edx, ecx
jne 0x66d530
nop
mov eax, dword [ebp - 0x24]
mov ecx, dword [ebp - 0x30]
mov byte [eax + ecx], 0
nop
mov eax, dword [ebp - 0x44]
cmp eax, 0x10
jb 0x66d5a4
nop
mov ecx, dword [ebp - 0x58]
lea edx, [eax + 1]
cmp edx, 0x1000
jb 0x66d597
nop
mov esi, dword [ecx - 4]
add ecx, 0xfffffffc
sub ecx, esi
cmp ecx, 0x20
jae 0x66d71a
add eax, 0x24
mov edx, eax
mov ecx, esi
nop
mov dword [esp + 4], edx
mov dword [esp], ecx
call fcn.008ea1ad
nop
mov edx, dword [ebp - 0x40]
mov dword [edx + 0x10], 0
mov dword [edx + 0x14], 0
lea ecx, [ebp + 8]
movzx eax, byte [ecx + 0xc]
mov byte [edx], al
movzx eax, byte [ecx + 0xd]
mov byte [edx + 1], al
movzx eax, byte [ecx + 0xe]
mov byte [edx + 2], al
movzx eax, byte [ecx + 0xf]
mov byte [edx + 3], al
movzx eax, byte [ecx + 0x10]
mov byte [edx + 4], al
movzx eax, byte [ecx + 0x11]
mov byte [edx + 5], al
movzx eax, byte [ecx + 0x12]
mov byte [edx + 6], al
movzx eax, byte [ecx + 0x13]
mov byte [edx + 7], al
movzx eax, byte [ecx + 0x14]
mov byte [edx + 8], al
movzx eax, byte [ecx + 0x15]
mov byte [edx + 9], al
movzx eax, byte [ecx + 0x16]
mov byte [edx + 0xa], al
movzx eax, byte [ecx + 0x17]
mov byte [edx + 0xb], al
movzx eax, byte [ecx + 0x18]
mov byte [edx + 0xc], al
movzx eax, byte [ecx + 0x19]
mov byte [edx + 0xd], al
movzx eax, byte [ecx + 0x1a]
mov byte [edx + 0xe], al
movzx eax, byte [ecx + 0x1b]
mov byte [edx + 0xf], al
movzx eax, byte [ecx + 0x1c]
mov byte [edx + 0x10], al
movzx eax, byte [ecx + 0x1d]
mov byte [edx + 0x11], al
movzx eax, byte [ecx + 0x1e]
mov byte [edx + 0x12], al
movzx eax, byte [ecx + 0x1f]
mov byte [edx + 0x13], al
movzx eax, byte [ecx + 0x20]
mov byte [edx + 0x14], al
movzx eax, byte [ecx + 0x21]
mov byte [edx + 0x15], al
movzx eax, byte [ecx + 0x22]
mov byte [edx + 0x16], al
movzx eax, byte [ecx + 0x23]
mov byte [edx + 0x17], al
mov eax, dword [ecx]
mov ecx, dword [ebp - 0x18]
mov dword fs:[0], ecx
add esp, 0x5c
pop esi
pop edi
pop ebx
pop ebp
ret
xor esi, esi
cmp eax, 0x10
jb 0x66d6bc
mov esi, eax
and esi, 0xfffffff0
mov ecx, dword [ebp - 0x24]
mov edx, dword [ebp - 0x30]
add edx, ecx
add edx, 0xfffffff0
mov ecx, dword [ebp - 0x20]
lea edi, [eax + ecx]
add edi, 0xfffffff0
mov ebx, esi
neg ebx
xor ecx, ecx
nop word [eax + eax]
nop
movups xmm0, xmmword [edi + ecx]
movups xmmword [edx + ecx], xmm0
add ecx, 0xfffffff0
cmp ebx, ecx
jne 0x66d6a0
cmp eax, esi
je 0x66d55b
test al, 0xc
je 0x66d712
mov ebx, eax
and ebx, 0xfffffffc
mov edi, eax
and edi, 3
mov ecx, dword [ebp - 0x24]
mov edx, dword [ebp - 0x30]
add ecx, edx
add ecx, 0xfffffffc
mov dword [ebp - 0x2c], ecx
neg esi
mov ecx, dword [ebp - 0x20]
add ecx, eax
add ecx, 0xfffffffc
mov dword [ebp - 0x3c], ecx
mov dword [ebp - 0x38], ebx
mov ecx, ebx
neg ecx
nop dword [eax + eax]
nop
mov edx, dword [ebp - 0x3c]
mov ebx, dword [edx + esi]
mov edx, dword [ebp - 0x2c]
mov dword [edx + esi], ebx
add esi, 0xfffffffc
cmp ecx, esi
jne 0x66d6f0
cmp eax, dword [ebp - 0x38]
jne 0x66d3e0
jmp 0x66d55b
and eax, 0xf
jmp 0x66d3de
nop
mov dword [ebp - 0x10], 0
call fcn.008cd651
nop word [eax + eax]
push ebp
sub esp, 0x10
add ebp, 0xc
call fcn.00901a00
nop dword [eax]
push ebp
sub esp, 0x10
add ebp, 0xc
lea ecx, [ebp - 0x58]
call fcn.006675b0
add esp, 0x10
pop ebp
ret