Function at 0x431d93
Capabilities:
Encrypt data using speck

Disassembly:
mov dword [0x45fce0], edi
mov byte [0x45fda2], 0
cmp byte [esi], 0
je 0x432b3d
cmp byte [esi], 0x2e
je 0x43293a
mov eax, dword [0x45fcd4]
sub eax, 0xc
cmp eax, edi
jbe 0x423010
lodsb al, byte [esi]
cmp al, 1
je 0x431ed5
cmp al, 2
je 0x431ef1
cmp al, 4
je 0x431efc
cmp al, 8
je 0x431f02
cmp al, 0xf
je 0x42312a
cmp al, 0x10
je 0x431f06
cmp al, 0x11
je 0x431f26
cmp al, 0x29
je 0x431ebe
cmp al, 0x5d
je 0x431ebe
cmp al, 0x21
je 0x42310c
sub edi, 0x14
mov ebx, edi
sub ebx, 0x14
cmp al, 0xf0
je 0x4326c0
cmp al, 0xf1
je 0x432799
cmp al, 0xd0
je 0x4325d7
cmp al, 0xe0
je 0x4325fd
cmp al, 0xe1
je 0x432638
cmp al, 0x83
je 0x43267a
mov dx, word [ebx + 8]
or dx, word [edi + 8]
cmp al, 0x80
je 0x43216b
cmp al, 0x81
je 0x432229
mov ah, byte [ebx + 0xc]
or ah, byte [edi + 0xc]
je 0x431e70
call fcn.00432bcd
cmp al, 0x90
je 0x4322b8
cmp al, 0x91
je 0x43242b
or dx, dx
jne 0x42310c
cmp al, 0xa0
je 0x43248a
cmp al, 0xb0
je 0x4324a0
cmp al, 0xb1
je 0x4324b5
cmp al, 0xb2
je 0x4324ca
cmp al, 0xc0
je 0x4324f1
cmp al, 0xc1
je 0x432581
jmp 0x42310c
sub edi, 0x14
cmp byte [0x45fda2], 0
je 0x431ed4
xor eax, eax
mov dword [edi], eax
mov dword [edi + 4], eax
mov dword [edi + 0xc], eax
ret
xor eax, eax
lodsb al, byte [esi]
stosd dword es:[edi], eax
xor al, al
stosd dword es:[edi], eax
and word [edi], 0
and word [edi + 4], 0
and dword [edi + 8], 0
add edi, 0xc
jmp 0x431db2
xor eax, eax
lodsw ax, word [esi]
stosd dword es:[edi], eax
xor ax, ax
stosd dword es:[edi], eax
jmp 0x431edc
movsd dword es:[edi], dword [esi]
xor eax, eax
stosd dword es:[edi], eax
jmp 0x431edc
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
jmp 0x431edc
mov byte [edi + 9], 0
and word [edi + 0xc], 0
lodsb al, byte [esi]
mov byte [edi + 8], al
mov byte [edi + 0xa], 1
xor eax, eax
mov dword [edi + 0x10], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
add edi, 0xc
jmp 0x431db2
xor eax, eax
mov dword [edi + 8], eax
mov dword [edi + 0xc], eax
mov dword [edi + 0x14], eax
lodsd eax, dword [esi]
cmp eax, 0xf
jb 0x4320e7
je 0x4231e3
mov ebx, eax
mov ax, word [0x45fc42]
mov word [ebx + 0x12], ax
mov cl, byte [ebx + 9]
shr cl, 1
and cl, 1
neg cl
or byte [ebx + 8], 8
test byte [ebx + 8], 1
je 0x43211a
cmp ax, word [ebx + 0x10]
je 0x431fb3
test byte [ebx + 8], 4
jne 0x432113
test byte [ebx + 9], 1
je 0x431fb3
mov eax, dword [ebx]
sub eax, dword [0x45fd0c]
stosd dword es:[edi], eax
mov eax, dword [ebx + 4]
sbb eax, dword [0x45fd10]
stosd dword es:[edi], eax
sbb cl, byte [0x45fdaf]
mov byte [edi + 5], cl
mov eax, dword [0x45fd0c]
or al, byte [0x45fdaf]
or eax, dword [0x45fd10]
je 0x431fbd
or byte [0x45fdac], 0xff
jmp 0x431fbd
mov eax, dword [ebx]
stosd dword es:[edi], eax
mov eax, dword [ebx + 4]
stosd dword es:[edi], eax
mov byte [edi + 5], cl
test byte [ebx + 9], 4
jne 0x4231ce
call fcn.00432902
mov al, byte [ebx + 0xb]
mov byte [edi + 4], al
mov eax, dword [ebx + 0xc]
mov dword [edi], eax
cmp al, ah
jne 0x431feb
shr eax, 0x10
add al, ah
jo 0x431feb
xor ah, ah
mov word [edi + 2], ax
mov byte [edi + 1], ah
mov eax, dword [ebx + 0x14]
mov dword [edi + 8], eax
add edi, 0xc
mov al, byte [ebx + 0xa]
or al, al
je 0x431db2
test byte [0x45fd89], 1
jne 0x431db2
xchg byte [0x45fd88], al
or al, al
je 0x431db2
cmp al, byte [0x45fd88]
jne 0x4230d0
jmp 0x431db2
mov eax, dword [0x45fcbc]
mov ebp, dword [0x45fcb4]
test byte ds:[ebp + 0xa], 1
jne 0x432045
cmp eax, dword [0x45fce0]
jne 0x432060
mov eax, dword [0x45fcb8]
jmp 0x432065
mov ebp, dword [0x45fcb4]
test byte ds:[ebp + 0xa], 1
je 0x432060
mov eax, dword [0x45fcbc]
jmp 0x432065
mov eax, dword [0x45fce0]
cmp byte [0x45fdad], 2
jae 0x4231ce
sub eax, dword [0x45fc50]
jmp 0x4320ca
mov eax, dword [0x45fce0]
xor edx, edx
xor ch, ch
mov ebp, dword [0x45fcb4]
sub eax, dword ds:[ebp]
sbb edx, dword ds:[ebp + 4]
sbb ch, byte ds:[ebp + 8]
jp 0x43209c
call fcn.00432ba6
stosd dword es:[edi], eax
mov eax, edx
stosd dword es:[edi], eax
mov eax, dword ds:[ebp + 0x10]
stosd dword es:[edi], eax
mov cl, byte ds:[ebp + 9]
mov word [edi], cx
mov eax, dword ds:[ebp + 0x14]
mov dword [edi + 4], eax
add edi, 8
jmp 0x431db2
mov eax, dword [0x45fcb4]
mov eax, dword [eax + 0x18]
jmp 0x43207f
mov eax, dword [0x45fcc0]
stosd dword es:[edi], eax
xor eax, eax
stosd dword es:[edi], eax
add edi, 0xc
jmp 0x431db2
call fcn.00401e27
stosd dword es:[edi], eax
mov eax, edx
stosd dword es:[edi], eax
add edi, 0xc
jmp 0x431db2
or eax, eax
je 0x43207a
cmp eax, 1
je 0x4320c5
cmp eax, 2
je 0x4320d6
cmp eax, 3
je 0x4320bb
cmp eax, 4
je 0x43204c
cmp eax, 5
je 0x43202b
mov edx, 0x423120
jmp 0x43211f
mov edx, 0x42318b
jmp 0x43211f
mov edx, 0x423134
cmp word [0x45fc42], 1
ja 0x432130
or byte [0x45fdac], 0xff
or byte [0x45fda2], 0xff
and word [edi + 0xc], 0
xor eax, eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
add edi, 0xc
cmp dword [0x45fccc], 0
jne 0x431db2
mov eax, dword [0x45fc64]
mov dword [0x45fccc], eax
mov dword [0x45fcd0], edx
mov dword [0x45fcc8], ebx
jmp 0x431db2
xor ah, ah
mov ah, byte [ebx + 0xc]
mov al, byte [edi + 0xc]
or al, al
je 0x432196
or ah, ah
je 0x43218e
add ah, al
jne 0x432187
mov ecx, dword [edi + 0x10]
cmp ecx, dword [ebx + 0x10]
je 0x432196
call fcn.00432bcd
jmp 0x432196
mov ah, al
mov ecx, dword [edi + 0x10]
mov dword [ebx + 0x10], ecx
mov byte [ebx + 0xc], ah
mov eax, dword [edi]
add dword [ebx], eax
mov eax, dword [edi + 4]
adc dword [ebx + 4], eax
mov al, byte [edi + 0xd]
adc byte [ebx + 0xd], al
jp 0x4321b0
call fcn.00432ba6
or dx, dx
je 0x431db2
push esi
mov esi, ebx
mov cl, byte [edi + 0xa]
mov al, byte [edi + 8]
call fcn.004321d8
mov cl, byte [edi + 0xb]
mov al, byte [edi + 9]
call fcn.004321d8
pop esi
jmp 0x431db2
xor ah, ah
mov ah, byte [ebx + 0xc]
mov al, byte [edi + 0xc]
or al, al
je 0x432258
or ah, ah
je 0x43224e
cmp al, ah
jne 0x432247
xor ah, ah
mov ecx, dword [edi + 0x10]
cmp ecx, dword [ebx + 0x10]
je 0x432258
call fcn.00432bcd
jmp 0x432258
neg al
mov ah, al
mov ecx, dword [edi + 0x10]
mov dword [ebx + 0x10], ecx
mov byte [ebx + 0xc], ah
mov eax, dword [edi]
sub dword [ebx], eax
mov eax, dword [edi + 4]
sbb dword [ebx + 4], eax
mov al, byte [edi + 0xd]
sbb byte [ebx + 0xd], al
jp 0x43227b
cmp dword [0x45fccc], 0
jne 0x43227b
call fcn.00432ba6
or dx, dx
je 0x431db2
push esi
mov esi, ebx
mov cl, byte [edi + 0xa]
mov al, byte [edi + 8]
call fcn.004322a3
mov cl, byte [edi + 0xb]
mov al, byte [edi + 9]
call fcn.004322a3
pop esi
jmp 0x431db2
or dx, dx
je 0x4322d7
cmp word [ebx + 8], 0
jne 0x4322d7
xor ecx, ecx
mov eax, dword [ebx + ecx]
xchg dword [edi + ecx], eax
mov dword [ebx + ecx], eax
add ecx, 4
cmp ecx, 0x10
jb 0x4322c6
push esi
push edx
mov esi, ebx
xor bl, bl
cmp byte [esi + 0xd], 0
je 0x432302
xor bl, 0xff
mov eax, dword [esi]
mov edx, dword [esi + 4]
not eax
not edx
add eax, 1
adc edx, 0
mov dword [esi], eax
mov dword [esi + 4], edx
or eax, edx
je 0x432407
cmp byte [edi + 0xd], 0
je 0x432345
xor bl, 0xff
cmp byte [esi + 8], 0
je 0x43231a
neg byte [esi + 0xa]
jo 0x42310c
cmp byte [esi + 9], 0
je 0x432329
neg byte [esi + 0xb]
jo 0x42310c
mov eax, dword [edi]
mov edx, dword [edi + 4]
not eax
not edx
add eax, 1
adc edx, 0
mov dword [edi], eax
mov dword [edi + 4], edx
or eax, edx
je 0x432407
cmp dword [esi + 4], 0
je 0x432357
cmp dword [edi + 4], 0
je 0x432357
jne 0x432407
mov eax, dword [esi + 4]
mul dword [edi]
or edx, edx
jne 0x432407
mov ecx, eax
mov eax, dword [esi]
mul dword [edi + 4]
or edx, edx
jne 0x432407
add ecx, eax
jb 0x432407
mov eax, dword [esi]
mul dword [edi]
add edx, ecx
jb 0x432407
mov dword [esi], eax
mov dword [esi + 4], edx
or bl, bl
je 0x4323a5
not eax
not edx
add eax, 1
adc edx, 0
mov dword [esi], eax
mov dword [esi + 4], edx
or eax, edx
jne 0x4323a5
not bl
mov byte [esi + 0xd], bl
pop edx
or dx, dx
je 0x432401
cmp word [edi + 8], 0
jne 0x423120
cmp byte [esi + 8], 0
je 0x4323dd
call fcn.00432413
imul byte [esi + 0xa]
mov dl, ah
cbw
cmp ah, dl
jne 0x42312a
mov byte [esi + 0xa], al
or al, al
jne 0x4323dd
mov byte [esi + 8], al
cmp byte [esi + 9], 0
je 0x432401
call fcn.00432413
imul byte [esi + 0xb]
mov dl, ah
cbw
cmp ah, dl
jne 0x42312a
mov byte [esi + 0xb], al
or al, al
jne 0x432401
mov byte [esi + 9], al
pop esi
jmp 0x431db2
pop edx
pop esi
call fcn.00432ba6
jmp 0x431db2
push esi
push edx
mov esi, ebx
call fcn.004327e9
pop edx
or dx, dx
je 0x432484
cmp byte [esi + 8], 0
je 0x43245f
call fcn.00432413
or al, al
je 0x42312a
mov al, byte [esi + 0xa]
cbw
idiv byte [edi]
or ah, ah
jne 0x4231ce
mov byte [esi + 0xa], al
cmp byte [esi + 9], 0
je 0x432484
call fcn.00432413
or al, al
je 0x42312a
mov al, byte [esi + 0xb]
cbw
idiv byte [edi]
or ah, ah
jne 0x4231ce
mov byte [esi + 0xb], al
pop esi
jmp 0x431db2
push esi
mov esi, ebx
call fcn.004327e9
mov dword [esi], eax
mov dword [esi + 4], edx
mov byte [esi + 0xd], bh
pop esi
jmp 0x431db2
mov eax, dword [edi]
mov edx, dword [edi + 4]
mov cl, byte [edi + 0xd]
and dword [ebx], eax
and dword [ebx + 4], edx
and byte [ebx + 0xd], cl
jmp 0x431db2
mov eax, dword [edi]
mov edx, dword [edi + 4]
mov cl, byte [edi + 0xd]
or dword [ebx], eax
or dword [ebx + 4], edx
or byte [ebx + 0xd], cl
jmp 0x431db2
mov eax, dword [edi]
mov edx, dword [edi + 4]
mov cl, byte [edi + 0xd]
xor dword [ebx], eax
xor dword [ebx + 4], edx
xor byte [ebx + 0xd], cl
jmp 0x431db2
mov byte [edi + 0xd], 0
not dword [edi]
not dword [edi + 4]
add dword [edi], 1
adc dword [edi + 4], 0
jb 0x432523
cmp byte [edi + 0xd], 0
jne 0x43256c
mov edx, dword [ebx + 4]
mov eax, dword [ebx]
cmp dword [edi + 4], 0
jne 0x432523
movsx ecx, byte [ebx + 0xd]
xchg dword [edi], ecx
cmp ecx, 0x40
je 0x432529
ja 0x432523
cmp ecx, 0x20
jae 0x432541
shld dword [edi], edx, cl
shld edx, eax, cl
shl eax, cl
mov dword [ebx], eax
mov dword [ebx + 4], edx
jmp 0x432556
cmp byte [ebx + 0xd], 0
jne 0x432562
movsx ecx, byte [ebx + 0xd]
cmp eax, ecx
jne 0x432562
cmp edx, ecx
jne 0x432562
xor eax, eax
mov dword [ebx], eax
mov dword [ebx + 4], eax
jmp 0x431db2
sub cl, 0x20
shld dword [edi], edx, cl
shld edx, eax, cl
shl eax, cl
mov dword [ebx + 4], eax
and dword [ebx], 0
cmp edx, dword [edi]
jne 0x432562
movsx eax, byte [ebx + 0xd]
cmp eax, dword [edi]
je 0x431db2
call fcn.00432ba6
jmp 0x431db2
mov byte [edi + 0xd], 0
not dword [edi]
not dword [edi + 4]
add dword [edi], 1
adc dword [edi + 4], 0
jae 0x432581
dec dword [edi + 4]
cmp byte [edi + 0xd], 0
jne 0x4324df
mov edx, dword [ebx + 4]
mov eax, dword [ebx]
cmp dword [edi + 4], 0
jne 0x4325c9
mov ecx, dword [edi]
cmp ecx, 0x40
jae 0x4325c9
push esi
movsx esi, byte [ebx + 0xd]
cmp ecx, 0x20
jae 0x4325b8
shrd eax, edx, cl
shrd edx, esi, cl
mov dword [ebx], eax
mov dword [ebx + 4], edx
pop esi
jmp 0x431db2
sub cl, 0x20
shrd edx, esi, cl
mov dword [ebx], edx
mov dword [ebx + 4], esi
pop esi
jmp 0x431db2
movsx eax, byte [ebx + 0xd]
mov dword [ebx], eax
mov dword [ebx + 4], eax
jmp 0x431db2
cmp word [edi + 8], 0
jne 0x42310c
cmp byte [edi + 0xc], 0
je 0x4325ed
call fcn.00432bcd
not dword [edi]
not dword [edi + 4]
not byte [edi + 0xd]
add edi, 0x14
jmp 0x431db2
cmp word [edi + 8], 0
jne 0x42310c
cmp byte [edi + 0xc], 0
je 0x432613
call fcn.00432bcd
xor ecx, ecx
bsf eax, dword [edi]
jne 0x432666
mov ecx, 0x20
bsf eax, dword [edi + 4]
jne 0x432666
cmp byte [edi + 0xd], 0
jne 0x432666
call fcn.00432ba6
add edi, 0x14
jmp 0x431db2
cmp word [edi + 8], 0
jne 0x42310c
cmp byte [edi + 0xc], 0
je 0x43264e
call fcn.00432bcd
cmp byte [edi + 0xd], 0
jne 0x43262b
mov ecx, 0x20
bsr eax, dword [edi + 4]
jne 0x432666
xor ecx, ecx
bsr eax, dword [edi]
je 0x43262b
add eax, ecx
xor edx, edx
mov dword [edi], eax
mov dword [edi + 4], edx
mov byte [edi + 0xd], dl
add edi, 0x14
jmp 0x431db2
cmp byte [edi + 8], 0
je 0x432689
neg byte [edi + 0xa]
jo 0x42310c
cmp byte [edi + 9], 0
je 0x432698
neg byte [edi + 0xb]
jo 0x42310c
neg byte [edi + 0xc]
xor eax, eax
xor edx, edx
xor cl, cl
xchg dword [edi], eax
xchg dword [edi + 4], edx
xchg byte [edi + 0xd], cl
sub dword [edi], eax
sbb dword [edi + 4], edx
sbb byte [edi + 0xd], cl
jp 0x4326b8
call fcn.00432ba6
add edi, 0x14
jmp 0x431db2
cmp word [edi + 8], 0
jne 0x42310c
mov al, byte [0x45fdad]
cmp al, 5
je 0x43275b
cmp al, 4
je 0x432777
cmp al, 3
jne 0x42310c
test dword [0x45fd24], 8
jne 0x432732
mov al, 2
bt dword [0x45fd28], 0
jb 0x432702
xor al, al
cmp byte [edi + 0xc], al
je 0x43270c
call fcn.00432bcd
mov byte [edi + 0xc], 0
mov eax, dword [0x45fc50]
mov eax, dword [eax + 0x34]
xor edx, edx
sub dword [edi], eax
sbb dword [edi + 4], edx
sbb byte [edi + 0xd], 0
jp 0x43272a
call fcn.00432ba6
add edi, 0x14
jmp 0x431db2
mov al, 4
bt dword [0x45fd28], 0
jb 0x432740
xor al, al
cmp byte [edi + 0xc], al
je 0x43274a
call fcn.00432bcd
mov byte [edi + 0xc], 0
mov eax, dword [0x45fc50]
mov edx, dword [eax + 0x34]
mov eax, dword [eax + 0x30]
jmp 0x43271a
test dword [0x45fd24], 1
jne 0x43278f
test dword [0x45fd24], 8
jne 0x42310c
mov dl, 5
cmp byte [edi + 0xc], 2
je 0x432784
call fcn.00432bcd
mov byte [edi + 0xc], dl
add edi, 0x14
jmp 0x431db2
xor dl, dl
test byte [edi + 0xc], 1
jne 0x43277f
jmp 0x432784
cmp word [edi + 8], 0
jne 0x42310c
cmp byte [0x45fdad], 5
jne 0x42310c
test dword [0x45fd24], 1
jne 0x42310c
mov dl, 6
mov dh, 2
test dword [0x45fd24], 8
je 0x4327d3
mov dh, 4
mov eax, dword [edi]
or eax, dword [edi + 4]
jne 0x43277f
cmp byte [edi + 0xc], dh
jne 0x43277f
mov eax, dword [edi + 0x10]
cmp byte [eax], 0x80
jne 0x43277f
jmp 0x432784
inc esi
and word [edi + 8], 0
and word [edi + 0xc], 0
mov al, byte [0x45fd9c]
cmp al, 2
je 0x432a26
cmp al, 4
je 0x432ab5
test al, 0xf7
je 0x432963
call fcn.00432bcd
xor eax, eax
xor edx, edx
cmp word [esi + 8], 0x8000
je 0x432a15
mov bx, word [esi + 8]
mov eax, dword [esi]
mov edx, dword [esi + 4]
add eax, eax
adc edx, edx
mov ecx, edx
shr edx, 0xc
shrd eax, ecx, 0xc
jae 0x4329a3
add eax, 1
adc edx, 0
bt edx, 0x14
jae 0x4329a3
and edx, 0xfffff
inc bx
shr edx, 1
rcr eax, 1
add bx, 0x3ff
cmp bx, 0x7ff
jge 0x42312a
cmp bx, 0
jg 0x432a06
or edx, 0x100000
mov cx, bx
neg cx
inc cx
cmp cx, 0x35
ja 0x42312a
cmp cx, 0x20
jb 0x4329e3
sub cx, 0x20
mov eax, edx
xor edx, edx
shr eax, cl
jmp 0x4329ea
mov ebx, edx
shr edx, cl
shrd eax, ebx, cl
mov bx, 0
jae 0x432a06
add eax, 1
adc edx, 0
test edx, 0x100000
je 0x432a06
and edx, 0xfffff
inc bx
shl ebx, 0x14
or edx, ebx
jne 0x432a15
or eax, eax
je 0x42312a
mov bl, byte [esi + 0xb]
shl ebx, 0x1f
or edx, ebx
mov dword [edi], eax
mov dword [edi + 4], edx
add esi, 0xd
ret
xor eax, eax
cmp word [esi + 8], 0x8000
je 0x432aa0
mov bx, word [esi + 8]
mov ax, word [esi + 6]
shl ax, 1
shr ax, 6
jae 0x432a53
inc ax
bt ax, 0xa
jae 0x432a53
and ax, 0x3ff
inc bx
shr ax, 1
add bx, 0xf
cmp bx, 0x1f
jge 0x42312a
cmp bx, 0
jg 0x432a93
or ax, 0x400
mov cx, bx
neg cx
inc cx
cmp cx, 0xb
ja 0x42312a
xor bx, bx
shr ax, cl
jae 0x432a93
inc ax
test ax, 0x400
je 0x432a93
and ax, 0x3ff
inc bx
shl bx, 0xa
or ax, bx
je 0x42312a
mov bl, byte [esi + 0xb]
shl bx, 0xf
or ax, bx
mov dword [edi], eax
xor eax, eax
mov dword [edi + 4], eax
add esi, 0xd
ret
xor eax, eax
cmp word [esi + 8], 0x8000
je 0x432b2a
mov bx, word [esi + 8]
mov eax, dword [esi + 4]
shl eax, 1
shr eax, 9
jae 0x432add
inc eax
bt eax, 0x17
jae 0x432add
and eax, 0x7fffff
inc bx
shr eax, 1
add bx, 0x7f
cmp bx, 0xff
jge 0x42312a
cmp bx, 0
jg 0x432b1f
or eax, 0x800000
mov cx, bx
neg cx
inc cx
cmp cx, 0x18
ja 0x42312a
xor bx, bx
shr eax, cl
jae 0x432b1f
inc eax
test eax, 0x800000
je 0x432b1f
and eax, 0x7fffff
inc bx
shl ebx, 0x17
or eax, ebx
je 0x42312a
mov bl, byte [esi + 0xb]
shl ebx, 0x1f
or eax, ebx
mov dword [edi], eax
xor eax, eax
mov dword [edi + 4], eax
add esi, 0xd
ret
inc esi
lodsd eax, dword [esi]
mov ecx, eax
cmp ecx, 8
ja 0x42312a
mov edx, edi
xor eax, eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
mov edi, edx
rep movsb byte es:[edi], byte [esi]
mov edi, edx
inc esi
and word [edi + 8], 0
and word [edi + 0xc], 0
ret