Function at 0x41ac48
Capabilities:
Encrypt data using aes
Reference aes constants

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x10
push ebx
push edi
mov edi, ecx
cmp edi, 0x10
mov ebx, eax
je 0x41ac7a
cmp edi, 0x18
je 0x41ac7a
cmp edi, 0x20
je 0x41ac7a
push 0x3b2
push str..._sshaes.c
push str.blocklen__16__blocklen__24__blocklen__32
call fcn.0043f7f4
add esp, 0xc
cmp ebx, 0x10
je 0x41aca0
cmp ebx, 0x18
je 0x41aca0
cmp ebx, 0x20
je 0x41aca0
push 0x3b3
push str..._sshaes.c
push str.keylen__16__keylen__24__keylen__32
call fcn.0043f7f4
add esp, 0xc
mov eax, ebx
cdq
push 4
pop ecx
idiv ecx
mov ebx, eax
mov eax, edi
cdq
idiv ecx
mov dword [ebp - 8], ebx
cmp eax, ebx
mov dword [esi + 0x3e8], eax
mov ecx, eax
jg 0x41acc0
mov ecx, ebx
add ecx, 6
cmp eax, 8
mov dword [esi + 0x3ec], ecx
jne 0x41ace4
mov dword [esi + 0x3c0], 0x419d22
mov dword [esi + 0x3c4], 0x41a7a8
jmp 0x41ad18
cmp eax, 6
jne 0x41acff
mov dword [esi + 0x3c0], 0x4199a4
mov dword [esi + 0x3c4], 0x41a424
jmp 0x41ad18
cmp eax, 4
jne 0x41ad18
mov dword [esi + 0x3c0], 0x419742
mov dword [esi + 0x3c4], 0x41a1bc
xor edi, edi
inc ecx
imul ecx, eax
test ecx, ecx
mov dword [ebp - 4], 1
jle 0x41ae3a
mov eax, ebx
mov ebx, dword [ebp + 8]
shl eax, 2
mov ecx, eax
mov eax, esi
sub eax, ecx
mov dword [ebp - 0xc], eax
add ebx, 2
cmp edi, dword [ebp - 8]
jge 0x41ad64
movzx ecx, byte [ebx]
xor eax, eax
mov ah, byte [ebx - 2]
mov al, byte [ebx - 1]
shl eax, 8
or eax, ecx
movzx ecx, byte [ebx + 1]
shl eax, 8
or eax, ecx
jmp 0x41ae19
mov eax, edi
cdq
idiv dword [ebp - 8]
mov ecx, dword [esi + edi*4 - 4]
mov dword [ebp - 0x10], ecx
test edx, edx
jne 0x41add0
movzx eax, byte [ebp - 0xe]
movzx eax, byte [eax + str.cw]
xor eax, dword [ebp - 4]
movzx edx, ch
movzx edx, byte [edx + str.cw]
shl eax, 8
or eax, edx
mov edx, ecx
and edx, 0xff
movzx edx, byte [edx + str.cw]
shl eax, 8
or eax, edx
mov edx, dword [ebp - 4]
shr ecx, 0x18
movzx ecx, byte [ecx + str.cw]
shl eax, 8
or ecx, eax
mov eax, dword [ebp - 4]
and al, 0x80
neg al
sbb eax, eax
and edx, 0x7f
and eax, 0x1b
shl edx, 1
xor eax, edx
mov dword [ebp - 4], eax
jmp 0x41ae12
cmp edx, 4
jne 0x41ae12
cmp dword [ebp - 8], 6
jle 0x41ae12
movzx eax, byte [ebp - 0xe]
movzx eax, byte [eax + str.cw]
mov edx, ecx
shr edx, 0x18
mov ah, byte [edx + str.cw]
movzx edx, ch
movzx edx, byte [edx + str.cw]
shl eax, 8
and ecx, 0xff
movzx ecx, byte [ecx + str.cw]
or eax, edx
shl eax, 8
or ecx, eax
mov eax, dword [ebp - 0xc]
mov eax, dword [eax]
xor eax, ecx
add dword [ebp - 0xc], 4
mov dword [esi + edi*4], eax
mov eax, dword [esi + 0x3ec]
inc edi
add ebx, 4
inc eax
imul eax, dword [esi + 0x3e8]
cmp edi, eax
jl 0x41ad41
and dword [ebp - 4], 0
cmp dword [esi + 0x3ec], 0
jl 0x41aef8
xor edx, edx
cmp dword [esi + 0x3e8], edx
jle 0x41aee6
mov edi, dword [esi + 0x3ec]
mov eax, dword [esi + 0x3e8]
mov ecx, edi
sub ecx, dword [ebp - 4]
imul ecx, eax
add ecx, edx
cmp dword [ebp - 4], 0
mov ecx, dword [esi + ecx*4]
mov dword [ebp - 0x10], ecx
je 0x41aecc
cmp dword [ebp - 4], edi
je 0x41aecc
movzx edi, byte [ebp - 0xe]
movzx edi, byte [edi + str.cw]
mov edi, dword [edi*4 + 0x4561a0]
movzx ebx, ch
movzx ebx, byte [ebx + str.cw]
xor edi, dword [ebx*4 + 0x4565a0]
mov ebx, ecx
shr ebx, 0x18
movzx ebx, byte [ebx + str.cw]
xor edi, dword [ebx*4 + 0x455da0]
and ecx, 0xff
movzx ecx, byte [ecx + str.cw]
xor edi, dword [ecx*4 + 0x4569a0]
mov ecx, edi
imul eax, dword [ebp - 4]
add eax, edx
inc edx
mov dword [esi + eax*4 + 0x1e0], ecx
cmp edx, dword [esi + 0x3e8]
jl 0x41ae59
inc dword [ebp - 4]
mov eax, dword [ebp - 4]
cmp eax, dword [esi + 0x3ec]
jle 0x41ae4b
pop edi
pop ebx
leave
ret