Function at 0x40cc10
Capabilities:
Encode data using xor
Hash data using sha1

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x158
push ebx
push esi
push edi
mov edi, ecx
mov dword [ebp - 0x18], edi
xor ecx, ecx
lea eax, [edi + 0x15]
movzx edx, byte [eax - 1]
movzx esi, byte [eax]
shl edx, 8
or edx, esi
movzx esi, byte [eax + 1]
shl edx, 8
or edx, esi
movzx esi, byte [eax + 2]
shl edx, 8
or edx, esi
movzx esi, byte [eax + 4]
mov dword [ebp + ecx*4 - 0x158], edx
movzx edx, byte [eax + 3]
shl edx, 8
or edx, esi
movzx esi, byte [eax + 5]
shl edx, 8
or edx, esi
movzx esi, byte [eax + 6]
shl edx, 8
or edx, esi
movzx esi, byte [eax + 8]
mov dword [ebp + ecx*4 - 0x154], edx
movzx edx, byte [eax + 7]
shl edx, 8
or edx, esi
movzx esi, byte [eax + 9]
shl edx, 8
or edx, esi
movzx esi, byte [eax + 0xa]
shl edx, 8
or edx, esi
movzx esi, byte [eax + 0xc]
mov dword [ebp + ecx*4 - 0x150], edx
movzx edx, byte [eax + 0xb]
shl edx, 8
or edx, esi
movzx esi, byte [eax + 0xd]
shl edx, 8
or edx, esi
movzx esi, byte [eax + 0xe]
shl edx, 8
or edx, esi
mov dword [ebp + ecx*4 - 0x14c], edx
add ecx, 4
add eax, 0x10
cmp ecx, 0x10
jb 0x40cc26
lea eax, [ebp - 0x138]
mov dword [ebp - 0x10], 0x10
lea esp, [esp]
mov edx, dword [eax - 0x20]
xor edx, dword [eax + 0x14]
mov ecx, dword [eax - 0x18]
xor edx, ecx
xor edx, dword [eax]
add eax, 0x10
mov esi, edx
add edx, edx
shr esi, 0x1f
xor esi, edx
mov edx, dword [eax - 0x2c]
xor edx, dword [eax + 8]
mov dword [eax + 0x10], esi
xor edx, dword [eax - 0xc]
mov esi, dword [eax - 0x24]
xor edx, esi
mov ebx, edx
add edx, edx
shr ebx, 0x1f
xor ebx, edx
mov edx, dword [eax + 0xc]
xor edx, dword [eax - 0x20]
mov dword [eax + 0x14], ebx
xor edx, dword [eax - 8]
xor edx, ecx
mov ecx, edx
add edx, edx
shr ecx, 0x1f
xor ecx, edx
mov edx, dword [eax - 0x1c]
xor edx, dword [eax - 4]
mov dword [eax + 0x18], ecx
xor edx, esi
xor edx, dword [eax + 0x10]
mov ecx, edx
shr ecx, 0x1f
add edx, edx
xor ecx, edx
sub dword [ebp - 0x10], 1
mov dword [eax + 0x1c], ecx
jne 0x40cce0
mov edx, dword [edi + 0x10]
mov ebx, dword [edi]
mov esi, dword [edi + 4]
mov eax, dword [edi + 8]
mov ecx, dword [edi + 0xc]
mov dword [ebp - 8], edx
lea edx, [ebp - 0x154]
mov dword [ebp - 0xc], ebx
mov dword [ebp - 0x14], 2
mov dword [ebp - 0x10], edx
mov edi, edi
mov edx, dword [ebp - 0x14]
add edx, 0xfffffffe
cmp edx, 0x14
jae 0x40cd90
mov edi, esi
not edi
mov edx, eax
and edi, ecx
and edx, esi
or edi, edx
mov dword [ebp - 4], 0x5a827999
jmp 0x40cdc5
cmp edx, 0x28
jae 0x40cd9e
mov dword [ebp - 4], 0x6ed9eba1
jmp 0x40cdbf
cmp edx, 0x3c
jae 0x40cdb8
mov edi, eax
or edi, esi
mov edx, eax
and edi, ecx
and edx, esi
or edi, edx
mov dword [ebp - 4], 0x8f1bbcdc
jmp 0x40cdc5
mov dword [ebp - 4], 0xca62c1d6
mov edi, ecx
xor edi, eax
xor edi, esi
mov edx, ebx
shr edx, 0x1b
shl ebx, 5
xor edx, ebx
mov ebx, dword [ebp - 0x10]
add edx, dword [ebx - 4]
mov ebx, dword [ebp - 0xc]
add edx, dword [ebp - 4]
add edx, edi
add edx, dword [ebp - 8]
mov dword [ebp - 8], ecx
mov edi, eax
mov eax, dword [ebp - 0x14]
mov ecx, esi
shl ecx, 0x1e
shr esi, 2
dec eax
xor ecx, esi
mov dword [ebp - 0xc], edx
cmp eax, 0x14
jae 0x40ce10
mov esi, ebx
not esi
mov eax, ecx
and esi, edi
and eax, ebx
or esi, eax
mov dword [ebp - 4], 0x5a827999
jmp 0x40ce45
cmp eax, 0x28
jae 0x40ce1e
mov dword [ebp - 4], 0x6ed9eba1
jmp 0x40ce3f
cmp eax, 0x3c
jae 0x40ce38
mov esi, ecx
or esi, ebx
mov eax, ecx
and esi, edi
and eax, ebx
or esi, eax
mov dword [ebp - 4], 0x8f1bbcdc
jmp 0x40ce45
mov dword [ebp - 4], 0xca62c1d6
mov esi, edi
xor esi, ecx
xor esi, ebx
mov eax, edx
shr eax, 0x1b
shl edx, 5
xor eax, edx
mov edx, dword [ebp - 0x10]
add eax, dword [edx]
mov edx, ecx
add eax, dword [ebp - 4]
mov ecx, ebx
add eax, esi
add eax, dword [ebp - 8]
mov esi, dword [ebp - 0x14]
shl ecx, 0x1e
shr ebx, 2
mov dword [ebp - 8], edi
mov edi, dword [ebp - 0xc]
xor ecx, ebx
mov dword [ebp - 4], edx
mov dword [ebp - 0xc], eax
cmp esi, 0x14
jae 0x40ce8f
mov esi, edi
not esi
and esi, edx
mov edx, ecx
and edx, edi
or esi, edx
mov ebx, 0x5a827999
jmp 0x40cebe
cmp esi, 0x28
jae 0x40ce9b
mov ebx, 0x6ed9eba1
jmp 0x40ceb8
cmp esi, 0x3c
jae 0x40ceb3
mov esi, ecx
or esi, edi
and esi, edx
mov edx, ecx
and edx, edi
or esi, edx
mov ebx, 0x8f1bbcdc
jmp 0x40cebe
mov ebx, 0xca62c1d6
mov esi, edx
xor esi, ecx
xor esi, edi
mov edx, eax
shr edx, 0x1b
shl eax, 5
xor edx, eax
mov eax, dword [ebp - 0x10]
add edx, dword [eax + 4]
mov eax, dword [ebp - 4]
add edx, ebx
mov ebx, dword [ebp - 0xc]
add edx, esi
add edx, dword [ebp - 8]
mov esi, dword [ebp - 0x14]
mov dword [ebp - 8], eax
mov eax, ecx
mov ecx, edi
shl ecx, 0x1e
shr edi, 2
inc esi
xor ecx, edi
mov dword [ebp - 4], eax
mov dword [ebp - 0xc], edx
cmp esi, 0x14
jae 0x40cf0c
mov esi, ebx
not esi
and esi, eax
mov eax, ecx
and eax, ebx
or esi, eax
mov edi, 0x5a827999
jmp 0x40cf3b
cmp esi, 0x28
jae 0x40cf18
mov edi, 0x6ed9eba1
jmp 0x40cf35
cmp esi, 0x3c
jae 0x40cf30
mov esi, ecx
or esi, ebx
and esi, eax
mov eax, ecx
and eax, ebx
or esi, eax
mov edi, 0x8f1bbcdc
jmp 0x40cf3b
mov edi, 0xca62c1d6
mov esi, eax
xor esi, ecx
xor esi, ebx
mov eax, edx
shr eax, 0x1b
shl edx, 5
xor eax, edx
mov edx, dword [ebp - 0x10]
add eax, dword [edx + 8]
mov edx, dword [ebp - 4]
add eax, edi
mov edi, dword [ebp - 0xc]
add eax, esi
add eax, dword [ebp - 8]
mov dword [ebp - 8], edx
mov edx, dword [ebp - 0x14]
mov esi, ebx
shl esi, 0x1e
shr ebx, 2
add edx, 2
xor esi, ebx
mov dword [ebp - 0xc], eax
cmp edx, 0x14
jae 0x40cf88
mov ebx, edi
not ebx
mov edx, esi
and ebx, ecx
and edx, edi
or ebx, edx
mov dword [ebp - 4], 0x5a827999
jmp 0x40cfbd
cmp edx, 0x28
jae 0x40cf96
mov dword [ebp - 4], 0x6ed9eba1
jmp 0x40cfb7
cmp edx, 0x3c
jae 0x40cfb0
mov ebx, esi
or ebx, edi
mov edx, esi
and ebx, ecx
and edx, edi
or ebx, edx
mov dword [ebp - 4], 0x8f1bbcdc
jmp 0x40cfbd
mov dword [ebp - 4], 0xca62c1d6
mov ebx, ecx
xor ebx, esi
xor ebx, edi
add dword [ebp - 0x14], 5
mov edx, eax
shr edx, 0x1b
shl eax, 5
xor edx, eax
mov eax, dword [ebp - 0x10]
add edx, dword [eax + 0xc]
add dword [ebp - 0x10], 0x14
add edx, dword [ebp - 4]
mov eax, edi
shr edi, 2
add edx, ebx
add edx, dword [ebp - 8]
shl eax, 0x1e
xor eax, edi
mov edi, dword [ebp - 0x14]
mov dword [ebp - 8], ecx
add edi, 0xfffffffe
mov ecx, esi
mov esi, dword [ebp - 0xc]
mov ebx, edx
mov dword [ebp - 0xc], ebx
cmp edi, 0x50
jb 0x40cd70
mov edi, dword [ebp - 0x18]
mov edi, dword [edi]
add edi, edx
mov edx, dword [ebp - 0x18]
mov dword [edx], edi
mov edi, dword [edx + 4]
add edi, esi
mov esi, dword [edx + 8]
add esi, eax
mov eax, dword [edx + 0xc]
add eax, ecx
mov ecx, dword [ebp - 8]
mov dword [edx + 0xc], eax
mov eax, dword [edx + 0x10]
mov dword [edx + 4], edi
pop edi
mov dword [edx + 8], esi
add eax, ecx
pop esi
mov dword [edx + 0x10], eax
pop ebx
mov esp, ebp
pop ebp
ret