2360 lines
44 KiB
NASM
2360 lines
44 KiB
NASM
|
%ifidn __OUTPUT_FORMAT__,obj
|
||
|
section code use32 class=code align=64
|
||
|
%elifidn __OUTPUT_FORMAT__,win32
|
||
|
$@feat.00 equ 1
|
||
|
section .text code align=64
|
||
|
%else
|
||
|
section .text code
|
||
|
%endif
|
||
|
global _Camellia_EncryptBlock_Rounds
|
||
|
align 16
|
||
|
_Camellia_EncryptBlock_Rounds:
|
||
|
L$_Camellia_EncryptBlock_Rounds_begin:
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov eax,DWORD [20+esp]
|
||
|
mov esi,DWORD [24+esp]
|
||
|
mov edi,DWORD [28+esp]
|
||
|
mov ebx,esp
|
||
|
sub esp,28
|
||
|
and esp,-64
|
||
|
lea ecx,[edi-127]
|
||
|
sub ecx,esp
|
||
|
neg ecx
|
||
|
and ecx,960
|
||
|
sub esp,ecx
|
||
|
add esp,4
|
||
|
shl eax,6
|
||
|
lea eax,[eax*1+edi]
|
||
|
mov DWORD [20+esp],ebx
|
||
|
mov DWORD [16+esp],eax
|
||
|
call L$000pic_point
|
||
|
L$000pic_point:
|
||
|
pop ebp
|
||
|
lea ebp,[(L$Camellia_SBOX-L$000pic_point)+ebp]
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov ecx,DWORD [8+esi]
|
||
|
bswap eax
|
||
|
mov edx,DWORD [12+esi]
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
call __x86_Camellia_encrypt
|
||
|
mov esp,DWORD [20+esp]
|
||
|
bswap eax
|
||
|
mov esi,DWORD [32+esp]
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
mov DWORD [esi],eax
|
||
|
mov DWORD [4+esi],ebx
|
||
|
mov DWORD [8+esi],ecx
|
||
|
mov DWORD [12+esi],edx
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
global _Camellia_EncryptBlock
|
||
|
align 16
|
||
|
_Camellia_EncryptBlock:
|
||
|
L$_Camellia_EncryptBlock_begin:
|
||
|
mov eax,128
|
||
|
sub eax,DWORD [4+esp]
|
||
|
mov eax,3
|
||
|
adc eax,0
|
||
|
mov DWORD [4+esp],eax
|
||
|
jmp NEAR L$_Camellia_EncryptBlock_Rounds_begin
|
||
|
global _Camellia_encrypt
|
||
|
align 16
|
||
|
_Camellia_encrypt:
|
||
|
L$_Camellia_encrypt_begin:
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov esi,DWORD [20+esp]
|
||
|
mov edi,DWORD [28+esp]
|
||
|
mov ebx,esp
|
||
|
sub esp,28
|
||
|
and esp,-64
|
||
|
mov eax,DWORD [272+edi]
|
||
|
lea ecx,[edi-127]
|
||
|
sub ecx,esp
|
||
|
neg ecx
|
||
|
and ecx,960
|
||
|
sub esp,ecx
|
||
|
add esp,4
|
||
|
shl eax,6
|
||
|
lea eax,[eax*1+edi]
|
||
|
mov DWORD [20+esp],ebx
|
||
|
mov DWORD [16+esp],eax
|
||
|
call L$001pic_point
|
||
|
L$001pic_point:
|
||
|
pop ebp
|
||
|
lea ebp,[(L$Camellia_SBOX-L$001pic_point)+ebp]
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov ecx,DWORD [8+esi]
|
||
|
bswap eax
|
||
|
mov edx,DWORD [12+esi]
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
call __x86_Camellia_encrypt
|
||
|
mov esp,DWORD [20+esp]
|
||
|
bswap eax
|
||
|
mov esi,DWORD [24+esp]
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
mov DWORD [esi],eax
|
||
|
mov DWORD [4+esi],ebx
|
||
|
mov DWORD [8+esi],ecx
|
||
|
mov DWORD [12+esi],edx
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
align 16
|
||
|
__x86_Camellia_encrypt:
|
||
|
xor eax,DWORD [edi]
|
||
|
xor ebx,DWORD [4+edi]
|
||
|
xor ecx,DWORD [8+edi]
|
||
|
xor edx,DWORD [12+edi]
|
||
|
mov esi,DWORD [16+edi]
|
||
|
mov DWORD [4+esp],eax
|
||
|
mov DWORD [8+esp],ebx
|
||
|
mov DWORD [12+esp],ecx
|
||
|
mov DWORD [16+esp],edx
|
||
|
align 16
|
||
|
L$002loop:
|
||
|
xor eax,esi
|
||
|
xor ebx,DWORD [20+edi]
|
||
|
movzx esi,ah
|
||
|
mov edx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,al
|
||
|
xor edx,DWORD [4+esi*8+ebp]
|
||
|
shr eax,16
|
||
|
movzx esi,bl
|
||
|
mov ecx,DWORD [esi*8+ebp]
|
||
|
movzx esi,ah
|
||
|
xor edx,DWORD [esi*8+ebp]
|
||
|
movzx esi,bh
|
||
|
xor ecx,DWORD [4+esi*8+ebp]
|
||
|
shr ebx,16
|
||
|
movzx eax,al
|
||
|
xor edx,DWORD [2048+eax*8+ebp]
|
||
|
movzx esi,bh
|
||
|
mov eax,DWORD [16+esp]
|
||
|
xor ecx,edx
|
||
|
ror edx,8
|
||
|
xor ecx,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,bl
|
||
|
mov ebx,DWORD [12+esp]
|
||
|
xor edx,eax
|
||
|
xor ecx,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [24+edi]
|
||
|
xor edx,ecx
|
||
|
mov DWORD [16+esp],edx
|
||
|
xor ecx,ebx
|
||
|
mov DWORD [12+esp],ecx
|
||
|
xor ecx,esi
|
||
|
xor edx,DWORD [28+edi]
|
||
|
movzx esi,ch
|
||
|
mov ebx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,cl
|
||
|
xor ebx,DWORD [4+esi*8+ebp]
|
||
|
shr ecx,16
|
||
|
movzx esi,dl
|
||
|
mov eax,DWORD [esi*8+ebp]
|
||
|
movzx esi,ch
|
||
|
xor ebx,DWORD [esi*8+ebp]
|
||
|
movzx esi,dh
|
||
|
xor eax,DWORD [4+esi*8+ebp]
|
||
|
shr edx,16
|
||
|
movzx ecx,cl
|
||
|
xor ebx,DWORD [2048+ecx*8+ebp]
|
||
|
movzx esi,dh
|
||
|
mov ecx,DWORD [8+esp]
|
||
|
xor eax,ebx
|
||
|
ror ebx,8
|
||
|
xor eax,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,dl
|
||
|
mov edx,DWORD [4+esp]
|
||
|
xor ebx,ecx
|
||
|
xor eax,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [32+edi]
|
||
|
xor ebx,eax
|
||
|
mov DWORD [8+esp],ebx
|
||
|
xor eax,edx
|
||
|
mov DWORD [4+esp],eax
|
||
|
xor eax,esi
|
||
|
xor ebx,DWORD [36+edi]
|
||
|
movzx esi,ah
|
||
|
mov edx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,al
|
||
|
xor edx,DWORD [4+esi*8+ebp]
|
||
|
shr eax,16
|
||
|
movzx esi,bl
|
||
|
mov ecx,DWORD [esi*8+ebp]
|
||
|
movzx esi,ah
|
||
|
xor edx,DWORD [esi*8+ebp]
|
||
|
movzx esi,bh
|
||
|
xor ecx,DWORD [4+esi*8+ebp]
|
||
|
shr ebx,16
|
||
|
movzx eax,al
|
||
|
xor edx,DWORD [2048+eax*8+ebp]
|
||
|
movzx esi,bh
|
||
|
mov eax,DWORD [16+esp]
|
||
|
xor ecx,edx
|
||
|
ror edx,8
|
||
|
xor ecx,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,bl
|
||
|
mov ebx,DWORD [12+esp]
|
||
|
xor edx,eax
|
||
|
xor ecx,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [40+edi]
|
||
|
xor edx,ecx
|
||
|
mov DWORD [16+esp],edx
|
||
|
xor ecx,ebx
|
||
|
mov DWORD [12+esp],ecx
|
||
|
xor ecx,esi
|
||
|
xor edx,DWORD [44+edi]
|
||
|
movzx esi,ch
|
||
|
mov ebx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,cl
|
||
|
xor ebx,DWORD [4+esi*8+ebp]
|
||
|
shr ecx,16
|
||
|
movzx esi,dl
|
||
|
mov eax,DWORD [esi*8+ebp]
|
||
|
movzx esi,ch
|
||
|
xor ebx,DWORD [esi*8+ebp]
|
||
|
movzx esi,dh
|
||
|
xor eax,DWORD [4+esi*8+ebp]
|
||
|
shr edx,16
|
||
|
movzx ecx,cl
|
||
|
xor ebx,DWORD [2048+ecx*8+ebp]
|
||
|
movzx esi,dh
|
||
|
mov ecx,DWORD [8+esp]
|
||
|
xor eax,ebx
|
||
|
ror ebx,8
|
||
|
xor eax,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,dl
|
||
|
mov edx,DWORD [4+esp]
|
||
|
xor ebx,ecx
|
||
|
xor eax,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [48+edi]
|
||
|
xor ebx,eax
|
||
|
mov DWORD [8+esp],ebx
|
||
|
xor eax,edx
|
||
|
mov DWORD [4+esp],eax
|
||
|
xor eax,esi
|
||
|
xor ebx,DWORD [52+edi]
|
||
|
movzx esi,ah
|
||
|
mov edx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,al
|
||
|
xor edx,DWORD [4+esi*8+ebp]
|
||
|
shr eax,16
|
||
|
movzx esi,bl
|
||
|
mov ecx,DWORD [esi*8+ebp]
|
||
|
movzx esi,ah
|
||
|
xor edx,DWORD [esi*8+ebp]
|
||
|
movzx esi,bh
|
||
|
xor ecx,DWORD [4+esi*8+ebp]
|
||
|
shr ebx,16
|
||
|
movzx eax,al
|
||
|
xor edx,DWORD [2048+eax*8+ebp]
|
||
|
movzx esi,bh
|
||
|
mov eax,DWORD [16+esp]
|
||
|
xor ecx,edx
|
||
|
ror edx,8
|
||
|
xor ecx,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,bl
|
||
|
mov ebx,DWORD [12+esp]
|
||
|
xor edx,eax
|
||
|
xor ecx,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [56+edi]
|
||
|
xor edx,ecx
|
||
|
mov DWORD [16+esp],edx
|
||
|
xor ecx,ebx
|
||
|
mov DWORD [12+esp],ecx
|
||
|
xor ecx,esi
|
||
|
xor edx,DWORD [60+edi]
|
||
|
movzx esi,ch
|
||
|
mov ebx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,cl
|
||
|
xor ebx,DWORD [4+esi*8+ebp]
|
||
|
shr ecx,16
|
||
|
movzx esi,dl
|
||
|
mov eax,DWORD [esi*8+ebp]
|
||
|
movzx esi,ch
|
||
|
xor ebx,DWORD [esi*8+ebp]
|
||
|
movzx esi,dh
|
||
|
xor eax,DWORD [4+esi*8+ebp]
|
||
|
shr edx,16
|
||
|
movzx ecx,cl
|
||
|
xor ebx,DWORD [2048+ecx*8+ebp]
|
||
|
movzx esi,dh
|
||
|
mov ecx,DWORD [8+esp]
|
||
|
xor eax,ebx
|
||
|
ror ebx,8
|
||
|
xor eax,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,dl
|
||
|
mov edx,DWORD [4+esp]
|
||
|
xor ebx,ecx
|
||
|
xor eax,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [64+edi]
|
||
|
xor ebx,eax
|
||
|
mov DWORD [8+esp],ebx
|
||
|
xor eax,edx
|
||
|
mov DWORD [4+esp],eax
|
||
|
add edi,64
|
||
|
cmp edi,DWORD [20+esp]
|
||
|
je NEAR L$003done
|
||
|
and esi,eax
|
||
|
mov edx,DWORD [16+esp]
|
||
|
rol esi,1
|
||
|
mov ecx,edx
|
||
|
xor ebx,esi
|
||
|
or ecx,DWORD [12+edi]
|
||
|
mov DWORD [8+esp],ebx
|
||
|
xor ecx,DWORD [12+esp]
|
||
|
mov esi,DWORD [4+edi]
|
||
|
mov DWORD [12+esp],ecx
|
||
|
or esi,ebx
|
||
|
and ecx,DWORD [8+edi]
|
||
|
xor eax,esi
|
||
|
rol ecx,1
|
||
|
mov DWORD [4+esp],eax
|
||
|
xor edx,ecx
|
||
|
mov esi,DWORD [16+edi]
|
||
|
mov DWORD [16+esp],edx
|
||
|
jmp NEAR L$002loop
|
||
|
align 8
|
||
|
L$003done:
|
||
|
mov ecx,eax
|
||
|
mov edx,ebx
|
||
|
mov eax,DWORD [12+esp]
|
||
|
mov ebx,DWORD [16+esp]
|
||
|
xor eax,esi
|
||
|
xor ebx,DWORD [4+edi]
|
||
|
xor ecx,DWORD [8+edi]
|
||
|
xor edx,DWORD [12+edi]
|
||
|
ret
|
||
|
global _Camellia_DecryptBlock_Rounds
|
||
|
align 16
|
||
|
_Camellia_DecryptBlock_Rounds:
|
||
|
L$_Camellia_DecryptBlock_Rounds_begin:
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov eax,DWORD [20+esp]
|
||
|
mov esi,DWORD [24+esp]
|
||
|
mov edi,DWORD [28+esp]
|
||
|
mov ebx,esp
|
||
|
sub esp,28
|
||
|
and esp,-64
|
||
|
lea ecx,[edi-127]
|
||
|
sub ecx,esp
|
||
|
neg ecx
|
||
|
and ecx,960
|
||
|
sub esp,ecx
|
||
|
add esp,4
|
||
|
shl eax,6
|
||
|
mov DWORD [16+esp],edi
|
||
|
lea edi,[eax*1+edi]
|
||
|
mov DWORD [20+esp],ebx
|
||
|
call L$004pic_point
|
||
|
L$004pic_point:
|
||
|
pop ebp
|
||
|
lea ebp,[(L$Camellia_SBOX-L$004pic_point)+ebp]
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov ecx,DWORD [8+esi]
|
||
|
bswap eax
|
||
|
mov edx,DWORD [12+esi]
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
call __x86_Camellia_decrypt
|
||
|
mov esp,DWORD [20+esp]
|
||
|
bswap eax
|
||
|
mov esi,DWORD [32+esp]
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
mov DWORD [esi],eax
|
||
|
mov DWORD [4+esi],ebx
|
||
|
mov DWORD [8+esi],ecx
|
||
|
mov DWORD [12+esi],edx
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
global _Camellia_DecryptBlock
|
||
|
align 16
|
||
|
_Camellia_DecryptBlock:
|
||
|
L$_Camellia_DecryptBlock_begin:
|
||
|
mov eax,128
|
||
|
sub eax,DWORD [4+esp]
|
||
|
mov eax,3
|
||
|
adc eax,0
|
||
|
mov DWORD [4+esp],eax
|
||
|
jmp NEAR L$_Camellia_DecryptBlock_Rounds_begin
|
||
|
global _Camellia_decrypt
|
||
|
align 16
|
||
|
_Camellia_decrypt:
|
||
|
L$_Camellia_decrypt_begin:
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov esi,DWORD [20+esp]
|
||
|
mov edi,DWORD [28+esp]
|
||
|
mov ebx,esp
|
||
|
sub esp,28
|
||
|
and esp,-64
|
||
|
mov eax,DWORD [272+edi]
|
||
|
lea ecx,[edi-127]
|
||
|
sub ecx,esp
|
||
|
neg ecx
|
||
|
and ecx,960
|
||
|
sub esp,ecx
|
||
|
add esp,4
|
||
|
shl eax,6
|
||
|
mov DWORD [16+esp],edi
|
||
|
lea edi,[eax*1+edi]
|
||
|
mov DWORD [20+esp],ebx
|
||
|
call L$005pic_point
|
||
|
L$005pic_point:
|
||
|
pop ebp
|
||
|
lea ebp,[(L$Camellia_SBOX-L$005pic_point)+ebp]
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov ecx,DWORD [8+esi]
|
||
|
bswap eax
|
||
|
mov edx,DWORD [12+esi]
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
call __x86_Camellia_decrypt
|
||
|
mov esp,DWORD [20+esp]
|
||
|
bswap eax
|
||
|
mov esi,DWORD [24+esp]
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
mov DWORD [esi],eax
|
||
|
mov DWORD [4+esi],ebx
|
||
|
mov DWORD [8+esi],ecx
|
||
|
mov DWORD [12+esi],edx
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
align 16
|
||
|
__x86_Camellia_decrypt:
|
||
|
xor eax,DWORD [edi]
|
||
|
xor ebx,DWORD [4+edi]
|
||
|
xor ecx,DWORD [8+edi]
|
||
|
xor edx,DWORD [12+edi]
|
||
|
mov esi,DWORD [edi-8]
|
||
|
mov DWORD [4+esp],eax
|
||
|
mov DWORD [8+esp],ebx
|
||
|
mov DWORD [12+esp],ecx
|
||
|
mov DWORD [16+esp],edx
|
||
|
align 16
|
||
|
L$006loop:
|
||
|
xor eax,esi
|
||
|
xor ebx,DWORD [edi-4]
|
||
|
movzx esi,ah
|
||
|
mov edx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,al
|
||
|
xor edx,DWORD [4+esi*8+ebp]
|
||
|
shr eax,16
|
||
|
movzx esi,bl
|
||
|
mov ecx,DWORD [esi*8+ebp]
|
||
|
movzx esi,ah
|
||
|
xor edx,DWORD [esi*8+ebp]
|
||
|
movzx esi,bh
|
||
|
xor ecx,DWORD [4+esi*8+ebp]
|
||
|
shr ebx,16
|
||
|
movzx eax,al
|
||
|
xor edx,DWORD [2048+eax*8+ebp]
|
||
|
movzx esi,bh
|
||
|
mov eax,DWORD [16+esp]
|
||
|
xor ecx,edx
|
||
|
ror edx,8
|
||
|
xor ecx,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,bl
|
||
|
mov ebx,DWORD [12+esp]
|
||
|
xor edx,eax
|
||
|
xor ecx,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [edi-16]
|
||
|
xor edx,ecx
|
||
|
mov DWORD [16+esp],edx
|
||
|
xor ecx,ebx
|
||
|
mov DWORD [12+esp],ecx
|
||
|
xor ecx,esi
|
||
|
xor edx,DWORD [edi-12]
|
||
|
movzx esi,ch
|
||
|
mov ebx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,cl
|
||
|
xor ebx,DWORD [4+esi*8+ebp]
|
||
|
shr ecx,16
|
||
|
movzx esi,dl
|
||
|
mov eax,DWORD [esi*8+ebp]
|
||
|
movzx esi,ch
|
||
|
xor ebx,DWORD [esi*8+ebp]
|
||
|
movzx esi,dh
|
||
|
xor eax,DWORD [4+esi*8+ebp]
|
||
|
shr edx,16
|
||
|
movzx ecx,cl
|
||
|
xor ebx,DWORD [2048+ecx*8+ebp]
|
||
|
movzx esi,dh
|
||
|
mov ecx,DWORD [8+esp]
|
||
|
xor eax,ebx
|
||
|
ror ebx,8
|
||
|
xor eax,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,dl
|
||
|
mov edx,DWORD [4+esp]
|
||
|
xor ebx,ecx
|
||
|
xor eax,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [edi-24]
|
||
|
xor ebx,eax
|
||
|
mov DWORD [8+esp],ebx
|
||
|
xor eax,edx
|
||
|
mov DWORD [4+esp],eax
|
||
|
xor eax,esi
|
||
|
xor ebx,DWORD [edi-20]
|
||
|
movzx esi,ah
|
||
|
mov edx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,al
|
||
|
xor edx,DWORD [4+esi*8+ebp]
|
||
|
shr eax,16
|
||
|
movzx esi,bl
|
||
|
mov ecx,DWORD [esi*8+ebp]
|
||
|
movzx esi,ah
|
||
|
xor edx,DWORD [esi*8+ebp]
|
||
|
movzx esi,bh
|
||
|
xor ecx,DWORD [4+esi*8+ebp]
|
||
|
shr ebx,16
|
||
|
movzx eax,al
|
||
|
xor edx,DWORD [2048+eax*8+ebp]
|
||
|
movzx esi,bh
|
||
|
mov eax,DWORD [16+esp]
|
||
|
xor ecx,edx
|
||
|
ror edx,8
|
||
|
xor ecx,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,bl
|
||
|
mov ebx,DWORD [12+esp]
|
||
|
xor edx,eax
|
||
|
xor ecx,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [edi-32]
|
||
|
xor edx,ecx
|
||
|
mov DWORD [16+esp],edx
|
||
|
xor ecx,ebx
|
||
|
mov DWORD [12+esp],ecx
|
||
|
xor ecx,esi
|
||
|
xor edx,DWORD [edi-28]
|
||
|
movzx esi,ch
|
||
|
mov ebx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,cl
|
||
|
xor ebx,DWORD [4+esi*8+ebp]
|
||
|
shr ecx,16
|
||
|
movzx esi,dl
|
||
|
mov eax,DWORD [esi*8+ebp]
|
||
|
movzx esi,ch
|
||
|
xor ebx,DWORD [esi*8+ebp]
|
||
|
movzx esi,dh
|
||
|
xor eax,DWORD [4+esi*8+ebp]
|
||
|
shr edx,16
|
||
|
movzx ecx,cl
|
||
|
xor ebx,DWORD [2048+ecx*8+ebp]
|
||
|
movzx esi,dh
|
||
|
mov ecx,DWORD [8+esp]
|
||
|
xor eax,ebx
|
||
|
ror ebx,8
|
||
|
xor eax,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,dl
|
||
|
mov edx,DWORD [4+esp]
|
||
|
xor ebx,ecx
|
||
|
xor eax,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [edi-40]
|
||
|
xor ebx,eax
|
||
|
mov DWORD [8+esp],ebx
|
||
|
xor eax,edx
|
||
|
mov DWORD [4+esp],eax
|
||
|
xor eax,esi
|
||
|
xor ebx,DWORD [edi-36]
|
||
|
movzx esi,ah
|
||
|
mov edx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,al
|
||
|
xor edx,DWORD [4+esi*8+ebp]
|
||
|
shr eax,16
|
||
|
movzx esi,bl
|
||
|
mov ecx,DWORD [esi*8+ebp]
|
||
|
movzx esi,ah
|
||
|
xor edx,DWORD [esi*8+ebp]
|
||
|
movzx esi,bh
|
||
|
xor ecx,DWORD [4+esi*8+ebp]
|
||
|
shr ebx,16
|
||
|
movzx eax,al
|
||
|
xor edx,DWORD [2048+eax*8+ebp]
|
||
|
movzx esi,bh
|
||
|
mov eax,DWORD [16+esp]
|
||
|
xor ecx,edx
|
||
|
ror edx,8
|
||
|
xor ecx,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,bl
|
||
|
mov ebx,DWORD [12+esp]
|
||
|
xor edx,eax
|
||
|
xor ecx,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [edi-48]
|
||
|
xor edx,ecx
|
||
|
mov DWORD [16+esp],edx
|
||
|
xor ecx,ebx
|
||
|
mov DWORD [12+esp],ecx
|
||
|
xor ecx,esi
|
||
|
xor edx,DWORD [edi-44]
|
||
|
movzx esi,ch
|
||
|
mov ebx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,cl
|
||
|
xor ebx,DWORD [4+esi*8+ebp]
|
||
|
shr ecx,16
|
||
|
movzx esi,dl
|
||
|
mov eax,DWORD [esi*8+ebp]
|
||
|
movzx esi,ch
|
||
|
xor ebx,DWORD [esi*8+ebp]
|
||
|
movzx esi,dh
|
||
|
xor eax,DWORD [4+esi*8+ebp]
|
||
|
shr edx,16
|
||
|
movzx ecx,cl
|
||
|
xor ebx,DWORD [2048+ecx*8+ebp]
|
||
|
movzx esi,dh
|
||
|
mov ecx,DWORD [8+esp]
|
||
|
xor eax,ebx
|
||
|
ror ebx,8
|
||
|
xor eax,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,dl
|
||
|
mov edx,DWORD [4+esp]
|
||
|
xor ebx,ecx
|
||
|
xor eax,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [edi-56]
|
||
|
xor ebx,eax
|
||
|
mov DWORD [8+esp],ebx
|
||
|
xor eax,edx
|
||
|
mov DWORD [4+esp],eax
|
||
|
sub edi,64
|
||
|
cmp edi,DWORD [20+esp]
|
||
|
je NEAR L$007done
|
||
|
and esi,eax
|
||
|
mov edx,DWORD [16+esp]
|
||
|
rol esi,1
|
||
|
mov ecx,edx
|
||
|
xor ebx,esi
|
||
|
or ecx,DWORD [4+edi]
|
||
|
mov DWORD [8+esp],ebx
|
||
|
xor ecx,DWORD [12+esp]
|
||
|
mov esi,DWORD [12+edi]
|
||
|
mov DWORD [12+esp],ecx
|
||
|
or esi,ebx
|
||
|
and ecx,DWORD [edi]
|
||
|
xor eax,esi
|
||
|
rol ecx,1
|
||
|
mov DWORD [4+esp],eax
|
||
|
xor edx,ecx
|
||
|
mov esi,DWORD [edi-8]
|
||
|
mov DWORD [16+esp],edx
|
||
|
jmp NEAR L$006loop
|
||
|
align 8
|
||
|
L$007done:
|
||
|
mov ecx,eax
|
||
|
mov edx,ebx
|
||
|
mov eax,DWORD [12+esp]
|
||
|
mov ebx,DWORD [16+esp]
|
||
|
xor ecx,esi
|
||
|
xor edx,DWORD [12+edi]
|
||
|
xor eax,DWORD [edi]
|
||
|
xor ebx,DWORD [4+edi]
|
||
|
ret
|
||
|
global _Camellia_Ekeygen
|
||
|
align 16
|
||
|
_Camellia_Ekeygen:
|
||
|
L$_Camellia_Ekeygen_begin:
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
sub esp,16
|
||
|
mov ebp,DWORD [36+esp]
|
||
|
mov esi,DWORD [40+esp]
|
||
|
mov edi,DWORD [44+esp]
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov ecx,DWORD [8+esi]
|
||
|
mov edx,DWORD [12+esi]
|
||
|
bswap eax
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
mov DWORD [edi],eax
|
||
|
mov DWORD [4+edi],ebx
|
||
|
mov DWORD [8+edi],ecx
|
||
|
mov DWORD [12+edi],edx
|
||
|
cmp ebp,128
|
||
|
je NEAR L$0081st128
|
||
|
mov eax,DWORD [16+esi]
|
||
|
mov ebx,DWORD [20+esi]
|
||
|
cmp ebp,192
|
||
|
je NEAR L$0091st192
|
||
|
mov ecx,DWORD [24+esi]
|
||
|
mov edx,DWORD [28+esi]
|
||
|
jmp NEAR L$0101st256
|
||
|
align 4
|
||
|
L$0091st192:
|
||
|
mov ecx,eax
|
||
|
mov edx,ebx
|
||
|
not ecx
|
||
|
not edx
|
||
|
align 4
|
||
|
L$0101st256:
|
||
|
bswap eax
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
mov DWORD [32+edi],eax
|
||
|
mov DWORD [36+edi],ebx
|
||
|
mov DWORD [40+edi],ecx
|
||
|
mov DWORD [44+edi],edx
|
||
|
xor eax,DWORD [edi]
|
||
|
xor ebx,DWORD [4+edi]
|
||
|
xor ecx,DWORD [8+edi]
|
||
|
xor edx,DWORD [12+edi]
|
||
|
align 4
|
||
|
L$0081st128:
|
||
|
call L$011pic_point
|
||
|
L$011pic_point:
|
||
|
pop ebp
|
||
|
lea ebp,[(L$Camellia_SBOX-L$011pic_point)+ebp]
|
||
|
lea edi,[(L$Camellia_SIGMA-L$Camellia_SBOX)+ebp]
|
||
|
mov esi,DWORD [edi]
|
||
|
mov DWORD [esp],eax
|
||
|
mov DWORD [4+esp],ebx
|
||
|
mov DWORD [8+esp],ecx
|
||
|
mov DWORD [12+esp],edx
|
||
|
xor eax,esi
|
||
|
xor ebx,DWORD [4+edi]
|
||
|
movzx esi,ah
|
||
|
mov edx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,al
|
||
|
xor edx,DWORD [4+esi*8+ebp]
|
||
|
shr eax,16
|
||
|
movzx esi,bl
|
||
|
mov ecx,DWORD [esi*8+ebp]
|
||
|
movzx esi,ah
|
||
|
xor edx,DWORD [esi*8+ebp]
|
||
|
movzx esi,bh
|
||
|
xor ecx,DWORD [4+esi*8+ebp]
|
||
|
shr ebx,16
|
||
|
movzx eax,al
|
||
|
xor edx,DWORD [2048+eax*8+ebp]
|
||
|
movzx esi,bh
|
||
|
mov eax,DWORD [12+esp]
|
||
|
xor ecx,edx
|
||
|
ror edx,8
|
||
|
xor ecx,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,bl
|
||
|
mov ebx,DWORD [8+esp]
|
||
|
xor edx,eax
|
||
|
xor ecx,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [8+edi]
|
||
|
xor edx,ecx
|
||
|
mov DWORD [12+esp],edx
|
||
|
xor ecx,ebx
|
||
|
mov DWORD [8+esp],ecx
|
||
|
xor ecx,esi
|
||
|
xor edx,DWORD [12+edi]
|
||
|
movzx esi,ch
|
||
|
mov ebx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,cl
|
||
|
xor ebx,DWORD [4+esi*8+ebp]
|
||
|
shr ecx,16
|
||
|
movzx esi,dl
|
||
|
mov eax,DWORD [esi*8+ebp]
|
||
|
movzx esi,ch
|
||
|
xor ebx,DWORD [esi*8+ebp]
|
||
|
movzx esi,dh
|
||
|
xor eax,DWORD [4+esi*8+ebp]
|
||
|
shr edx,16
|
||
|
movzx ecx,cl
|
||
|
xor ebx,DWORD [2048+ecx*8+ebp]
|
||
|
movzx esi,dh
|
||
|
mov ecx,DWORD [4+esp]
|
||
|
xor eax,ebx
|
||
|
ror ebx,8
|
||
|
xor eax,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,dl
|
||
|
mov edx,DWORD [esp]
|
||
|
xor ebx,ecx
|
||
|
xor eax,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [16+edi]
|
||
|
xor ebx,eax
|
||
|
mov DWORD [4+esp],ebx
|
||
|
xor eax,edx
|
||
|
mov DWORD [esp],eax
|
||
|
mov ecx,DWORD [8+esp]
|
||
|
mov edx,DWORD [12+esp]
|
||
|
mov esi,DWORD [44+esp]
|
||
|
xor eax,DWORD [esi]
|
||
|
xor ebx,DWORD [4+esi]
|
||
|
xor ecx,DWORD [8+esi]
|
||
|
xor edx,DWORD [12+esi]
|
||
|
mov esi,DWORD [16+edi]
|
||
|
mov DWORD [esp],eax
|
||
|
mov DWORD [4+esp],ebx
|
||
|
mov DWORD [8+esp],ecx
|
||
|
mov DWORD [12+esp],edx
|
||
|
xor eax,esi
|
||
|
xor ebx,DWORD [20+edi]
|
||
|
movzx esi,ah
|
||
|
mov edx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,al
|
||
|
xor edx,DWORD [4+esi*8+ebp]
|
||
|
shr eax,16
|
||
|
movzx esi,bl
|
||
|
mov ecx,DWORD [esi*8+ebp]
|
||
|
movzx esi,ah
|
||
|
xor edx,DWORD [esi*8+ebp]
|
||
|
movzx esi,bh
|
||
|
xor ecx,DWORD [4+esi*8+ebp]
|
||
|
shr ebx,16
|
||
|
movzx eax,al
|
||
|
xor edx,DWORD [2048+eax*8+ebp]
|
||
|
movzx esi,bh
|
||
|
mov eax,DWORD [12+esp]
|
||
|
xor ecx,edx
|
||
|
ror edx,8
|
||
|
xor ecx,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,bl
|
||
|
mov ebx,DWORD [8+esp]
|
||
|
xor edx,eax
|
||
|
xor ecx,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [24+edi]
|
||
|
xor edx,ecx
|
||
|
mov DWORD [12+esp],edx
|
||
|
xor ecx,ebx
|
||
|
mov DWORD [8+esp],ecx
|
||
|
xor ecx,esi
|
||
|
xor edx,DWORD [28+edi]
|
||
|
movzx esi,ch
|
||
|
mov ebx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,cl
|
||
|
xor ebx,DWORD [4+esi*8+ebp]
|
||
|
shr ecx,16
|
||
|
movzx esi,dl
|
||
|
mov eax,DWORD [esi*8+ebp]
|
||
|
movzx esi,ch
|
||
|
xor ebx,DWORD [esi*8+ebp]
|
||
|
movzx esi,dh
|
||
|
xor eax,DWORD [4+esi*8+ebp]
|
||
|
shr edx,16
|
||
|
movzx ecx,cl
|
||
|
xor ebx,DWORD [2048+ecx*8+ebp]
|
||
|
movzx esi,dh
|
||
|
mov ecx,DWORD [4+esp]
|
||
|
xor eax,ebx
|
||
|
ror ebx,8
|
||
|
xor eax,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,dl
|
||
|
mov edx,DWORD [esp]
|
||
|
xor ebx,ecx
|
||
|
xor eax,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [32+edi]
|
||
|
xor ebx,eax
|
||
|
mov DWORD [4+esp],ebx
|
||
|
xor eax,edx
|
||
|
mov DWORD [esp],eax
|
||
|
mov ecx,DWORD [8+esp]
|
||
|
mov edx,DWORD [12+esp]
|
||
|
mov esi,DWORD [36+esp]
|
||
|
cmp esi,128
|
||
|
jne NEAR L$0122nd256
|
||
|
mov edi,DWORD [44+esp]
|
||
|
lea edi,[128+edi]
|
||
|
mov DWORD [edi-112],eax
|
||
|
mov DWORD [edi-108],ebx
|
||
|
mov DWORD [edi-104],ecx
|
||
|
mov DWORD [edi-100],edx
|
||
|
mov ebp,eax
|
||
|
shl eax,15
|
||
|
mov esi,ebx
|
||
|
shr esi,17
|
||
|
shl ebx,15
|
||
|
or eax,esi
|
||
|
mov esi,ecx
|
||
|
shl ecx,15
|
||
|
mov DWORD [edi-80],eax
|
||
|
shr esi,17
|
||
|
or ebx,esi
|
||
|
shr ebp,17
|
||
|
mov esi,edx
|
||
|
shr esi,17
|
||
|
mov DWORD [edi-76],ebx
|
||
|
shl edx,15
|
||
|
or ecx,esi
|
||
|
or edx,ebp
|
||
|
mov DWORD [edi-72],ecx
|
||
|
mov DWORD [edi-68],edx
|
||
|
mov ebp,eax
|
||
|
shl eax,15
|
||
|
mov esi,ebx
|
||
|
shr esi,17
|
||
|
shl ebx,15
|
||
|
or eax,esi
|
||
|
mov esi,ecx
|
||
|
shl ecx,15
|
||
|
mov DWORD [edi-64],eax
|
||
|
shr esi,17
|
||
|
or ebx,esi
|
||
|
shr ebp,17
|
||
|
mov esi,edx
|
||
|
shr esi,17
|
||
|
mov DWORD [edi-60],ebx
|
||
|
shl edx,15
|
||
|
or ecx,esi
|
||
|
or edx,ebp
|
||
|
mov DWORD [edi-56],ecx
|
||
|
mov DWORD [edi-52],edx
|
||
|
mov ebp,eax
|
||
|
shl eax,15
|
||
|
mov esi,ebx
|
||
|
shr esi,17
|
||
|
shl ebx,15
|
||
|
or eax,esi
|
||
|
mov esi,ecx
|
||
|
shl ecx,15
|
||
|
mov DWORD [edi-32],eax
|
||
|
shr esi,17
|
||
|
or ebx,esi
|
||
|
shr ebp,17
|
||
|
mov esi,edx
|
||
|
shr esi,17
|
||
|
mov DWORD [edi-28],ebx
|
||
|
shl edx,15
|
||
|
or ecx,esi
|
||
|
or edx,ebp
|
||
|
mov ebp,eax
|
||
|
shl eax,15
|
||
|
mov esi,ebx
|
||
|
shr esi,17
|
||
|
shl ebx,15
|
||
|
or eax,esi
|
||
|
mov esi,ecx
|
||
|
shl ecx,15
|
||
|
mov DWORD [edi-16],eax
|
||
|
shr esi,17
|
||
|
or ebx,esi
|
||
|
shr ebp,17
|
||
|
mov esi,edx
|
||
|
shr esi,17
|
||
|
mov DWORD [edi-12],ebx
|
||
|
shl edx,15
|
||
|
or ecx,esi
|
||
|
or edx,ebp
|
||
|
mov DWORD [edi-8],ecx
|
||
|
mov DWORD [edi-4],edx
|
||
|
mov ebp,ebx
|
||
|
shl ebx,2
|
||
|
mov esi,ecx
|
||
|
shr esi,30
|
||
|
shl ecx,2
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,2
|
||
|
mov DWORD [32+edi],ebx
|
||
|
shr esi,30
|
||
|
or ecx,esi
|
||
|
shr ebp,30
|
||
|
mov esi,eax
|
||
|
shr esi,30
|
||
|
mov DWORD [36+edi],ecx
|
||
|
shl eax,2
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [40+edi],edx
|
||
|
mov DWORD [44+edi],eax
|
||
|
mov ebp,ebx
|
||
|
shl ebx,17
|
||
|
mov esi,ecx
|
||
|
shr esi,15
|
||
|
shl ecx,17
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,17
|
||
|
mov DWORD [64+edi],ebx
|
||
|
shr esi,15
|
||
|
or ecx,esi
|
||
|
shr ebp,15
|
||
|
mov esi,eax
|
||
|
shr esi,15
|
||
|
mov DWORD [68+edi],ecx
|
||
|
shl eax,17
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [72+edi],edx
|
||
|
mov DWORD [76+edi],eax
|
||
|
mov ebx,DWORD [edi-128]
|
||
|
mov ecx,DWORD [edi-124]
|
||
|
mov edx,DWORD [edi-120]
|
||
|
mov eax,DWORD [edi-116]
|
||
|
mov ebp,ebx
|
||
|
shl ebx,15
|
||
|
mov esi,ecx
|
||
|
shr esi,17
|
||
|
shl ecx,15
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,15
|
||
|
mov DWORD [edi-96],ebx
|
||
|
shr esi,17
|
||
|
or ecx,esi
|
||
|
shr ebp,17
|
||
|
mov esi,eax
|
||
|
shr esi,17
|
||
|
mov DWORD [edi-92],ecx
|
||
|
shl eax,15
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [edi-88],edx
|
||
|
mov DWORD [edi-84],eax
|
||
|
mov ebp,ebx
|
||
|
shl ebx,30
|
||
|
mov esi,ecx
|
||
|
shr esi,2
|
||
|
shl ecx,30
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,30
|
||
|
mov DWORD [edi-48],ebx
|
||
|
shr esi,2
|
||
|
or ecx,esi
|
||
|
shr ebp,2
|
||
|
mov esi,eax
|
||
|
shr esi,2
|
||
|
mov DWORD [edi-44],ecx
|
||
|
shl eax,30
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [edi-40],edx
|
||
|
mov DWORD [edi-36],eax
|
||
|
mov ebp,ebx
|
||
|
shl ebx,15
|
||
|
mov esi,ecx
|
||
|
shr esi,17
|
||
|
shl ecx,15
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,15
|
||
|
shr esi,17
|
||
|
or ecx,esi
|
||
|
shr ebp,17
|
||
|
mov esi,eax
|
||
|
shr esi,17
|
||
|
shl eax,15
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [edi-24],edx
|
||
|
mov DWORD [edi-20],eax
|
||
|
mov ebp,ebx
|
||
|
shl ebx,17
|
||
|
mov esi,ecx
|
||
|
shr esi,15
|
||
|
shl ecx,17
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,17
|
||
|
mov DWORD [edi],ebx
|
||
|
shr esi,15
|
||
|
or ecx,esi
|
||
|
shr ebp,15
|
||
|
mov esi,eax
|
||
|
shr esi,15
|
||
|
mov DWORD [4+edi],ecx
|
||
|
shl eax,17
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [8+edi],edx
|
||
|
mov DWORD [12+edi],eax
|
||
|
mov ebp,ebx
|
||
|
shl ebx,17
|
||
|
mov esi,ecx
|
||
|
shr esi,15
|
||
|
shl ecx,17
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,17
|
||
|
mov DWORD [16+edi],ebx
|
||
|
shr esi,15
|
||
|
or ecx,esi
|
||
|
shr ebp,15
|
||
|
mov esi,eax
|
||
|
shr esi,15
|
||
|
mov DWORD [20+edi],ecx
|
||
|
shl eax,17
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [24+edi],edx
|
||
|
mov DWORD [28+edi],eax
|
||
|
mov ebp,ebx
|
||
|
shl ebx,17
|
||
|
mov esi,ecx
|
||
|
shr esi,15
|
||
|
shl ecx,17
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,17
|
||
|
mov DWORD [48+edi],ebx
|
||
|
shr esi,15
|
||
|
or ecx,esi
|
||
|
shr ebp,15
|
||
|
mov esi,eax
|
||
|
shr esi,15
|
||
|
mov DWORD [52+edi],ecx
|
||
|
shl eax,17
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [56+edi],edx
|
||
|
mov DWORD [60+edi],eax
|
||
|
mov eax,3
|
||
|
jmp NEAR L$013done
|
||
|
align 16
|
||
|
L$0122nd256:
|
||
|
mov esi,DWORD [44+esp]
|
||
|
mov DWORD [48+esi],eax
|
||
|
mov DWORD [52+esi],ebx
|
||
|
mov DWORD [56+esi],ecx
|
||
|
mov DWORD [60+esi],edx
|
||
|
xor eax,DWORD [32+esi]
|
||
|
xor ebx,DWORD [36+esi]
|
||
|
xor ecx,DWORD [40+esi]
|
||
|
xor edx,DWORD [44+esi]
|
||
|
mov esi,DWORD [32+edi]
|
||
|
mov DWORD [esp],eax
|
||
|
mov DWORD [4+esp],ebx
|
||
|
mov DWORD [8+esp],ecx
|
||
|
mov DWORD [12+esp],edx
|
||
|
xor eax,esi
|
||
|
xor ebx,DWORD [36+edi]
|
||
|
movzx esi,ah
|
||
|
mov edx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,al
|
||
|
xor edx,DWORD [4+esi*8+ebp]
|
||
|
shr eax,16
|
||
|
movzx esi,bl
|
||
|
mov ecx,DWORD [esi*8+ebp]
|
||
|
movzx esi,ah
|
||
|
xor edx,DWORD [esi*8+ebp]
|
||
|
movzx esi,bh
|
||
|
xor ecx,DWORD [4+esi*8+ebp]
|
||
|
shr ebx,16
|
||
|
movzx eax,al
|
||
|
xor edx,DWORD [2048+eax*8+ebp]
|
||
|
movzx esi,bh
|
||
|
mov eax,DWORD [12+esp]
|
||
|
xor ecx,edx
|
||
|
ror edx,8
|
||
|
xor ecx,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,bl
|
||
|
mov ebx,DWORD [8+esp]
|
||
|
xor edx,eax
|
||
|
xor ecx,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [40+edi]
|
||
|
xor edx,ecx
|
||
|
mov DWORD [12+esp],edx
|
||
|
xor ecx,ebx
|
||
|
mov DWORD [8+esp],ecx
|
||
|
xor ecx,esi
|
||
|
xor edx,DWORD [44+edi]
|
||
|
movzx esi,ch
|
||
|
mov ebx,DWORD [2052+esi*8+ebp]
|
||
|
movzx esi,cl
|
||
|
xor ebx,DWORD [4+esi*8+ebp]
|
||
|
shr ecx,16
|
||
|
movzx esi,dl
|
||
|
mov eax,DWORD [esi*8+ebp]
|
||
|
movzx esi,ch
|
||
|
xor ebx,DWORD [esi*8+ebp]
|
||
|
movzx esi,dh
|
||
|
xor eax,DWORD [4+esi*8+ebp]
|
||
|
shr edx,16
|
||
|
movzx ecx,cl
|
||
|
xor ebx,DWORD [2048+ecx*8+ebp]
|
||
|
movzx esi,dh
|
||
|
mov ecx,DWORD [4+esp]
|
||
|
xor eax,ebx
|
||
|
ror ebx,8
|
||
|
xor eax,DWORD [2048+esi*8+ebp]
|
||
|
movzx esi,dl
|
||
|
mov edx,DWORD [esp]
|
||
|
xor ebx,ecx
|
||
|
xor eax,DWORD [2052+esi*8+ebp]
|
||
|
mov esi,DWORD [48+edi]
|
||
|
xor ebx,eax
|
||
|
mov DWORD [4+esp],ebx
|
||
|
xor eax,edx
|
||
|
mov DWORD [esp],eax
|
||
|
mov ecx,DWORD [8+esp]
|
||
|
mov edx,DWORD [12+esp]
|
||
|
mov edi,DWORD [44+esp]
|
||
|
lea edi,[128+edi]
|
||
|
mov DWORD [edi-112],eax
|
||
|
mov DWORD [edi-108],ebx
|
||
|
mov DWORD [edi-104],ecx
|
||
|
mov DWORD [edi-100],edx
|
||
|
mov ebp,eax
|
||
|
shl eax,30
|
||
|
mov esi,ebx
|
||
|
shr esi,2
|
||
|
shl ebx,30
|
||
|
or eax,esi
|
||
|
mov esi,ecx
|
||
|
shl ecx,30
|
||
|
mov DWORD [edi-48],eax
|
||
|
shr esi,2
|
||
|
or ebx,esi
|
||
|
shr ebp,2
|
||
|
mov esi,edx
|
||
|
shr esi,2
|
||
|
mov DWORD [edi-44],ebx
|
||
|
shl edx,30
|
||
|
or ecx,esi
|
||
|
or edx,ebp
|
||
|
mov DWORD [edi-40],ecx
|
||
|
mov DWORD [edi-36],edx
|
||
|
mov ebp,eax
|
||
|
shl eax,30
|
||
|
mov esi,ebx
|
||
|
shr esi,2
|
||
|
shl ebx,30
|
||
|
or eax,esi
|
||
|
mov esi,ecx
|
||
|
shl ecx,30
|
||
|
mov DWORD [32+edi],eax
|
||
|
shr esi,2
|
||
|
or ebx,esi
|
||
|
shr ebp,2
|
||
|
mov esi,edx
|
||
|
shr esi,2
|
||
|
mov DWORD [36+edi],ebx
|
||
|
shl edx,30
|
||
|
or ecx,esi
|
||
|
or edx,ebp
|
||
|
mov DWORD [40+edi],ecx
|
||
|
mov DWORD [44+edi],edx
|
||
|
mov ebp,ebx
|
||
|
shl ebx,19
|
||
|
mov esi,ecx
|
||
|
shr esi,13
|
||
|
shl ecx,19
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,19
|
||
|
mov DWORD [128+edi],ebx
|
||
|
shr esi,13
|
||
|
or ecx,esi
|
||
|
shr ebp,13
|
||
|
mov esi,eax
|
||
|
shr esi,13
|
||
|
mov DWORD [132+edi],ecx
|
||
|
shl eax,19
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [136+edi],edx
|
||
|
mov DWORD [140+edi],eax
|
||
|
mov ebx,DWORD [edi-96]
|
||
|
mov ecx,DWORD [edi-92]
|
||
|
mov edx,DWORD [edi-88]
|
||
|
mov eax,DWORD [edi-84]
|
||
|
mov ebp,ebx
|
||
|
shl ebx,15
|
||
|
mov esi,ecx
|
||
|
shr esi,17
|
||
|
shl ecx,15
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,15
|
||
|
mov DWORD [edi-96],ebx
|
||
|
shr esi,17
|
||
|
or ecx,esi
|
||
|
shr ebp,17
|
||
|
mov esi,eax
|
||
|
shr esi,17
|
||
|
mov DWORD [edi-92],ecx
|
||
|
shl eax,15
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [edi-88],edx
|
||
|
mov DWORD [edi-84],eax
|
||
|
mov ebp,ebx
|
||
|
shl ebx,15
|
||
|
mov esi,ecx
|
||
|
shr esi,17
|
||
|
shl ecx,15
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,15
|
||
|
mov DWORD [edi-64],ebx
|
||
|
shr esi,17
|
||
|
or ecx,esi
|
||
|
shr ebp,17
|
||
|
mov esi,eax
|
||
|
shr esi,17
|
||
|
mov DWORD [edi-60],ecx
|
||
|
shl eax,15
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [edi-56],edx
|
||
|
mov DWORD [edi-52],eax
|
||
|
mov ebp,ebx
|
||
|
shl ebx,30
|
||
|
mov esi,ecx
|
||
|
shr esi,2
|
||
|
shl ecx,30
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,30
|
||
|
mov DWORD [16+edi],ebx
|
||
|
shr esi,2
|
||
|
or ecx,esi
|
||
|
shr ebp,2
|
||
|
mov esi,eax
|
||
|
shr esi,2
|
||
|
mov DWORD [20+edi],ecx
|
||
|
shl eax,30
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [24+edi],edx
|
||
|
mov DWORD [28+edi],eax
|
||
|
mov ebp,ecx
|
||
|
shl ecx,2
|
||
|
mov esi,edx
|
||
|
shr esi,30
|
||
|
shl edx,2
|
||
|
or ecx,esi
|
||
|
mov esi,eax
|
||
|
shl eax,2
|
||
|
mov DWORD [80+edi],ecx
|
||
|
shr esi,30
|
||
|
or edx,esi
|
||
|
shr ebp,30
|
||
|
mov esi,ebx
|
||
|
shr esi,30
|
||
|
mov DWORD [84+edi],edx
|
||
|
shl ebx,2
|
||
|
or eax,esi
|
||
|
or ebx,ebp
|
||
|
mov DWORD [88+edi],eax
|
||
|
mov DWORD [92+edi],ebx
|
||
|
mov ecx,DWORD [edi-80]
|
||
|
mov edx,DWORD [edi-76]
|
||
|
mov eax,DWORD [edi-72]
|
||
|
mov ebx,DWORD [edi-68]
|
||
|
mov ebp,ecx
|
||
|
shl ecx,15
|
||
|
mov esi,edx
|
||
|
shr esi,17
|
||
|
shl edx,15
|
||
|
or ecx,esi
|
||
|
mov esi,eax
|
||
|
shl eax,15
|
||
|
mov DWORD [edi-80],ecx
|
||
|
shr esi,17
|
||
|
or edx,esi
|
||
|
shr ebp,17
|
||
|
mov esi,ebx
|
||
|
shr esi,17
|
||
|
mov DWORD [edi-76],edx
|
||
|
shl ebx,15
|
||
|
or eax,esi
|
||
|
or ebx,ebp
|
||
|
mov DWORD [edi-72],eax
|
||
|
mov DWORD [edi-68],ebx
|
||
|
mov ebp,ecx
|
||
|
shl ecx,30
|
||
|
mov esi,edx
|
||
|
shr esi,2
|
||
|
shl edx,30
|
||
|
or ecx,esi
|
||
|
mov esi,eax
|
||
|
shl eax,30
|
||
|
mov DWORD [edi-16],ecx
|
||
|
shr esi,2
|
||
|
or edx,esi
|
||
|
shr ebp,2
|
||
|
mov esi,ebx
|
||
|
shr esi,2
|
||
|
mov DWORD [edi-12],edx
|
||
|
shl ebx,30
|
||
|
or eax,esi
|
||
|
or ebx,ebp
|
||
|
mov DWORD [edi-8],eax
|
||
|
mov DWORD [edi-4],ebx
|
||
|
mov DWORD [64+edi],edx
|
||
|
mov DWORD [68+edi],eax
|
||
|
mov DWORD [72+edi],ebx
|
||
|
mov DWORD [76+edi],ecx
|
||
|
mov ebp,edx
|
||
|
shl edx,17
|
||
|
mov esi,eax
|
||
|
shr esi,15
|
||
|
shl eax,17
|
||
|
or edx,esi
|
||
|
mov esi,ebx
|
||
|
shl ebx,17
|
||
|
mov DWORD [96+edi],edx
|
||
|
shr esi,15
|
||
|
or eax,esi
|
||
|
shr ebp,15
|
||
|
mov esi,ecx
|
||
|
shr esi,15
|
||
|
mov DWORD [100+edi],eax
|
||
|
shl ecx,17
|
||
|
or ebx,esi
|
||
|
or ecx,ebp
|
||
|
mov DWORD [104+edi],ebx
|
||
|
mov DWORD [108+edi],ecx
|
||
|
mov edx,DWORD [edi-128]
|
||
|
mov eax,DWORD [edi-124]
|
||
|
mov ebx,DWORD [edi-120]
|
||
|
mov ecx,DWORD [edi-116]
|
||
|
mov ebp,eax
|
||
|
shl eax,13
|
||
|
mov esi,ebx
|
||
|
shr esi,19
|
||
|
shl ebx,13
|
||
|
or eax,esi
|
||
|
mov esi,ecx
|
||
|
shl ecx,13
|
||
|
mov DWORD [edi-32],eax
|
||
|
shr esi,19
|
||
|
or ebx,esi
|
||
|
shr ebp,19
|
||
|
mov esi,edx
|
||
|
shr esi,19
|
||
|
mov DWORD [edi-28],ebx
|
||
|
shl edx,13
|
||
|
or ecx,esi
|
||
|
or edx,ebp
|
||
|
mov DWORD [edi-24],ecx
|
||
|
mov DWORD [edi-20],edx
|
||
|
mov ebp,eax
|
||
|
shl eax,15
|
||
|
mov esi,ebx
|
||
|
shr esi,17
|
||
|
shl ebx,15
|
||
|
or eax,esi
|
||
|
mov esi,ecx
|
||
|
shl ecx,15
|
||
|
mov DWORD [edi],eax
|
||
|
shr esi,17
|
||
|
or ebx,esi
|
||
|
shr ebp,17
|
||
|
mov esi,edx
|
||
|
shr esi,17
|
||
|
mov DWORD [4+edi],ebx
|
||
|
shl edx,15
|
||
|
or ecx,esi
|
||
|
or edx,ebp
|
||
|
mov DWORD [8+edi],ecx
|
||
|
mov DWORD [12+edi],edx
|
||
|
mov ebp,eax
|
||
|
shl eax,17
|
||
|
mov esi,ebx
|
||
|
shr esi,15
|
||
|
shl ebx,17
|
||
|
or eax,esi
|
||
|
mov esi,ecx
|
||
|
shl ecx,17
|
||
|
mov DWORD [48+edi],eax
|
||
|
shr esi,15
|
||
|
or ebx,esi
|
||
|
shr ebp,15
|
||
|
mov esi,edx
|
||
|
shr esi,15
|
||
|
mov DWORD [52+edi],ebx
|
||
|
shl edx,17
|
||
|
or ecx,esi
|
||
|
or edx,ebp
|
||
|
mov DWORD [56+edi],ecx
|
||
|
mov DWORD [60+edi],edx
|
||
|
mov ebp,ebx
|
||
|
shl ebx,2
|
||
|
mov esi,ecx
|
||
|
shr esi,30
|
||
|
shl ecx,2
|
||
|
or ebx,esi
|
||
|
mov esi,edx
|
||
|
shl edx,2
|
||
|
mov DWORD [112+edi],ebx
|
||
|
shr esi,30
|
||
|
or ecx,esi
|
||
|
shr ebp,30
|
||
|
mov esi,eax
|
||
|
shr esi,30
|
||
|
mov DWORD [116+edi],ecx
|
||
|
shl eax,2
|
||
|
or edx,esi
|
||
|
or eax,ebp
|
||
|
mov DWORD [120+edi],edx
|
||
|
mov DWORD [124+edi],eax
|
||
|
mov eax,4
|
||
|
L$013done:
|
||
|
lea edx,[144+edi]
|
||
|
add esp,16
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
global _Camellia_set_key
|
||
|
align 16
|
||
|
_Camellia_set_key:
|
||
|
L$_Camellia_set_key_begin:
|
||
|
push ebx
|
||
|
mov ecx,DWORD [8+esp]
|
||
|
mov ebx,DWORD [12+esp]
|
||
|
mov edx,DWORD [16+esp]
|
||
|
mov eax,-1
|
||
|
test ecx,ecx
|
||
|
jz NEAR L$014done
|
||
|
test edx,edx
|
||
|
jz NEAR L$014done
|
||
|
mov eax,-2
|
||
|
cmp ebx,256
|
||
|
je NEAR L$015arg_ok
|
||
|
cmp ebx,192
|
||
|
je NEAR L$015arg_ok
|
||
|
cmp ebx,128
|
||
|
jne NEAR L$014done
|
||
|
align 4
|
||
|
L$015arg_ok:
|
||
|
push edx
|
||
|
push ecx
|
||
|
push ebx
|
||
|
call L$_Camellia_Ekeygen_begin
|
||
|
add esp,12
|
||
|
mov DWORD [edx],eax
|
||
|
xor eax,eax
|
||
|
align 4
|
||
|
L$014done:
|
||
|
pop ebx
|
||
|
ret
|
||
|
align 64
|
||
|
L$Camellia_SIGMA:
|
||
|
dd 2694735487,1003262091,3061508184,1286239154,3337565999,3914302142,1426019237,4057165596,283453434,3731369245,2958461122,3018244605,0,0,0,0
|
||
|
align 64
|
||
|
L$Camellia_SBOX:
|
||
|
dd 1886416896,1886388336
|
||
|
dd 2189591040,741081132
|
||
|
dd 741092352,3014852787
|
||
|
dd 3974949888,3233808576
|
||
|
dd 3014898432,3840147684
|
||
|
dd 656877312,1465319511
|
||
|
dd 3233857536,3941204202
|
||
|
dd 3857048832,2930639022
|
||
|
dd 3840205824,589496355
|
||
|
dd 2240120064,1802174571
|
||
|
dd 1465341696,1162149957
|
||
|
dd 892679424,2779054245
|
||
|
dd 3941263872,3991732461
|
||
|
dd 202116096,1330577487
|
||
|
dd 2930683392,488439837
|
||
|
dd 1094795520,2459041938
|
||
|
dd 589505280,2256928902
|
||
|
dd 4025478912,2947481775
|
||
|
dd 1802201856,2088501372
|
||
|
dd 2475922176,522125343
|
||
|
dd 1162167552,1044250686
|
||
|
dd 421075200,3705405660
|
||
|
dd 2779096320,1583218782
|
||
|
dd 555819264,185270283
|
||
|
dd 3991792896,2795896998
|
||
|
dd 235802112,960036921
|
||
|
dd 1330597632,3587506389
|
||
|
dd 1313754624,1566376029
|
||
|
dd 488447232,3654877401
|
||
|
dd 1701143808,1515847770
|
||
|
dd 2459079168,1364262993
|
||
|
dd 3183328512,1819017324
|
||
|
dd 2256963072,2341142667
|
||
|
dd 3099113472,2593783962
|
||
|
dd 2947526400,4227531003
|
||
|
dd 2408550144,2964324528
|
||
|
dd 2088532992,1953759348
|
||
|
dd 3958106880,724238379
|
||
|
dd 522133248,4042260720
|
||
|
dd 3469659648,2223243396
|
||
|
dd 1044266496,3755933919
|
||
|
dd 808464384,3419078859
|
||
|
dd 3705461760,875823156
|
||
|
dd 1600085760,1987444854
|
||
|
dd 1583242752,1835860077
|
||
|
dd 3318072576,2846425257
|
||
|
dd 185273088,3520135377
|
||
|
dd 437918208,67371012
|
||
|
dd 2795939328,336855060
|
||
|
dd 3789676800,976879674
|
||
|
dd 960051456,3739091166
|
||
|
dd 3402287616,286326801
|
||
|
dd 3587560704,842137650
|
||
|
dd 1195853568,2627469468
|
||
|
dd 1566399744,1397948499
|
||
|
dd 1027423488,4075946226
|
||
|
dd 3654932736,4278059262
|
||
|
dd 16843008,3486449871
|
||
|
dd 1515870720,3284336835
|
||
|
dd 3604403712,2054815866
|
||
|
dd 1364283648,606339108
|
||
|
dd 1448498688,3907518696
|
||
|
dd 1819044864,1616904288
|
||
|
dd 1296911616,1768489065
|
||
|
dd 2341178112,2863268010
|
||
|
dd 218959104,2694840480
|
||
|
dd 2593823232,2711683233
|
||
|
dd 1717986816,1650589794
|
||
|
dd 4227595008,1414791252
|
||
|
dd 3435973632,505282590
|
||
|
dd 2964369408,3772776672
|
||
|
dd 757935360,1684275300
|
||
|
dd 1953788928,269484048
|
||
|
dd 303174144,0
|
||
|
dd 724249344,2745368739
|
||
|
dd 538976256,1970602101
|
||
|
dd 4042321920,2324299914
|
||
|
dd 2981212416,3873833190
|
||
|
dd 2223277056,151584777
|
||
|
dd 2576980224,3722248413
|
||
|
dd 3755990784,2273771655
|
||
|
dd 1280068608,2206400643
|
||
|
dd 3419130624,3452764365
|
||
|
dd 3267543552,2425356432
|
||
|
dd 875836416,1936916595
|
||
|
dd 2122219008,4143317238
|
||
|
dd 1987474944,2644312221
|
||
|
dd 84215040,3216965823
|
||
|
dd 1835887872,1381105746
|
||
|
dd 3082270464,3638034648
|
||
|
dd 2846468352,3368550600
|
||
|
dd 825307392,3334865094
|
||
|
dd 3520188672,2172715137
|
||
|
dd 387389184,1869545583
|
||
|
dd 67372032,320012307
|
||
|
dd 3621246720,1667432547
|
||
|
dd 336860160,3924361449
|
||
|
dd 1482184704,2812739751
|
||
|
dd 976894464,2677997727
|
||
|
dd 1633771776,3166437564
|
||
|
dd 3739147776,690552873
|
||
|
dd 454761216,4193845497
|
||
|
dd 286331136,791609391
|
||
|
dd 471604224,3031695540
|
||
|
dd 842150400,2021130360
|
||
|
dd 252645120,101056518
|
||
|
dd 2627509248,3890675943
|
||
|
dd 370546176,1903231089
|
||
|
dd 1397969664,3570663636
|
||
|
dd 404232192,2880110763
|
||
|
dd 4076007936,2290614408
|
||
|
dd 572662272,2374828173
|
||
|
dd 4278124032,1920073842
|
||
|
dd 1145324544,3115909305
|
||
|
dd 3486502656,4177002744
|
||
|
dd 2998055424,2896953516
|
||
|
dd 3284386560,909508662
|
||
|
dd 3048584448,707395626
|
||
|
dd 2054846976,1010565180
|
||
|
dd 2442236160,4059103473
|
||
|
dd 606348288,1077936192
|
||
|
dd 134744064,3553820883
|
||
|
dd 3907577856,3149594811
|
||
|
dd 2829625344,1128464451
|
||
|
dd 1616928768,353697813
|
||
|
dd 4244438016,2913796269
|
||
|
dd 1768515840,2004287607
|
||
|
dd 1347440640,2155872384
|
||
|
dd 2863311360,2189557890
|
||
|
dd 3503345664,3974889708
|
||
|
dd 2694881280,656867367
|
||
|
dd 2105376000,3856990437
|
||
|
dd 2711724288,2240086149
|
||
|
dd 2307492096,892665909
|
||
|
dd 1650614784,202113036
|
||
|
dd 2543294208,1094778945
|
||
|
dd 1414812672,4025417967
|
||
|
dd 1532713728,2475884691
|
||
|
dd 505290240,421068825
|
||
|
dd 2509608192,555810849
|
||
|
dd 3772833792,235798542
|
||
|
dd 4294967040,1313734734
|
||
|
dd 1684300800,1701118053
|
||
|
dd 3537031680,3183280317
|
||
|
dd 269488128,3099066552
|
||
|
dd 3301229568,2408513679
|
||
|
dd 0,3958046955
|
||
|
dd 1212696576,3469607118
|
||
|
dd 2745410304,808452144
|
||
|
dd 4160222976,1600061535
|
||
|
dd 1970631936,3318022341
|
||
|
dd 3688618752,437911578
|
||
|
dd 2324335104,3789619425
|
||
|
dd 50529024,3402236106
|
||
|
dd 3873891840,1195835463
|
||
|
dd 3671775744,1027407933
|
||
|
dd 151587072,16842753
|
||
|
dd 1061109504,3604349142
|
||
|
dd 3722304768,1448476758
|
||
|
dd 2492765184,1296891981
|
||
|
dd 2273806080,218955789
|
||
|
dd 1549556736,1717960806
|
||
|
dd 2206434048,3435921612
|
||
|
dd 33686016,757923885
|
||
|
dd 3452816640,303169554
|
||
|
dd 1246382592,538968096
|
||
|
dd 2425393152,2981167281
|
||
|
dd 858993408,2576941209
|
||
|
dd 1936945920,1280049228
|
||
|
dd 1734829824,3267494082
|
||
|
dd 4143379968,2122186878
|
||
|
dd 4092850944,84213765
|
||
|
dd 2644352256,3082223799
|
||
|
dd 2139062016,825294897
|
||
|
dd 3217014528,387383319
|
||
|
dd 3806519808,3621191895
|
||
|
dd 1381126656,1482162264
|
||
|
dd 2610666240,1633747041
|
||
|
dd 3638089728,454754331
|
||
|
dd 640034304,471597084
|
||
|
dd 3368601600,252641295
|
||
|
dd 926365440,370540566
|
||
|
dd 3334915584,404226072
|
||
|
dd 993737472,572653602
|
||
|
dd 2172748032,1145307204
|
||
|
dd 2526451200,2998010034
|
||
|
dd 1869573888,3048538293
|
||
|
dd 1263225600,2442199185
|
||
|
dd 320017152,134742024
|
||
|
dd 3200171520,2829582504
|
||
|
dd 1667457792,4244373756
|
||
|
dd 774778368,1347420240
|
||
|
dd 3924420864,3503292624
|
||
|
dd 2038003968,2105344125
|
||
|
dd 2812782336,2307457161
|
||
|
dd 2358021120,2543255703
|
||
|
dd 2678038272,1532690523
|
||
|
dd 1852730880,2509570197
|
||
|
dd 3166485504,4294902015
|
||
|
dd 2391707136,3536978130
|
||
|
dd 690563328,3301179588
|
||
|
dd 4126536960,1212678216
|
||
|
dd 4193908992,4160159991
|
||
|
dd 3065427456,3688562907
|
||
|
dd 791621376,50528259
|
||
|
dd 4261281024,3671720154
|
||
|
dd 3031741440,1061093439
|
||
|
dd 1499027712,2492727444
|
||
|
dd 2021160960,1549533276
|
||
|
dd 2560137216,33685506
|
||
|
dd 101058048,1246363722
|
||
|
dd 1785358848,858980403
|
||
|
dd 3890734848,1734803559
|
||
|
dd 1179010560,4092788979
|
||
|
dd 1903259904,2139029631
|
||
|
dd 3132799488,3806462178
|
||
|
dd 3570717696,2610626715
|
||
|
dd 623191296,640024614
|
||
|
dd 2880154368,926351415
|
||
|
dd 1111638528,993722427
|
||
|
dd 2290649088,2526412950
|
||
|
dd 2728567296,1263206475
|
||
|
dd 2374864128,3200123070
|
||
|
dd 4210752000,774766638
|
||
|
dd 1920102912,2037973113
|
||
|
dd 117901056,2357985420
|
||
|
dd 3115956480,1852702830
|
||
|
dd 1431655680,2391670926
|
||
|
dd 4177065984,4126474485
|
||
|
dd 4008635904,3065381046
|
||
|
dd 2896997376,4261216509
|
||
|
dd 168430080,1499005017
|
||
|
dd 909522432,2560098456
|
||
|
dd 1229539584,1785331818
|
||
|
dd 707406336,1178992710
|
||
|
dd 1751672832,3132752058
|
||
|
dd 1010580480,623181861
|
||
|
dd 943208448,1111621698
|
||
|
dd 4059164928,2728525986
|
||
|
dd 2762253312,4210688250
|
||
|
dd 1077952512,117899271
|
||
|
dd 673720320,1431634005
|
||
|
dd 3553874688,4008575214
|
||
|
dd 2071689984,168427530
|
||
|
dd 3149642496,1229520969
|
||
|
dd 3385444608,1751646312
|
||
|
dd 1128481536,943194168
|
||
|
dd 3250700544,2762211492
|
||
|
dd 353703168,673710120
|
||
|
dd 3823362816,2071658619
|
||
|
dd 2913840384,3385393353
|
||
|
dd 4109693952,3250651329
|
||
|
dd 2004317952,3823304931
|
||
|
dd 3351758592,4109631732
|
||
|
dd 2155905024,3351707847
|
||
|
dd 2661195264,2661154974
|
||
|
dd 14737632,939538488
|
||
|
dd 328965,1090535745
|
||
|
dd 5789784,369104406
|
||
|
dd 14277081,1979741814
|
||
|
dd 6776679,3640711641
|
||
|
dd 5131854,2466288531
|
||
|
dd 8487297,1610637408
|
||
|
dd 13355979,4060148466
|
||
|
dd 13224393,1912631922
|
||
|
dd 723723,3254829762
|
||
|
dd 11447982,2868947883
|
||
|
dd 6974058,2583730842
|
||
|
dd 14013909,1962964341
|
||
|
dd 1579032,100664838
|
||
|
dd 6118749,1459640151
|
||
|
dd 8553090,2684395680
|
||
|
dd 4605510,2432733585
|
||
|
dd 14671839,4144035831
|
||
|
dd 14079702,3036722613
|
||
|
dd 2565927,3372272073
|
||
|
dd 9079434,2717950626
|
||
|
dd 3289650,2348846220
|
||
|
dd 4934475,3523269330
|
||
|
dd 4342338,2415956112
|
||
|
dd 14408667,4127258358
|
||
|
dd 1842204,117442311
|
||
|
dd 10395294,2801837991
|
||
|
dd 10263708,654321447
|
||
|
dd 3815994,2382401166
|
||
|
dd 13290186,2986390194
|
||
|
dd 2434341,1224755529
|
||
|
dd 8092539,3724599006
|
||
|
dd 855309,1124090691
|
||
|
dd 7434609,1543527516
|
||
|
dd 6250335,3607156695
|
||
|
dd 2039583,3338717127
|
||
|
dd 16316664,1040203326
|
||
|
dd 14145495,4110480885
|
||
|
dd 4079166,2399178639
|
||
|
dd 10329501,1728079719
|
||
|
dd 8158332,520101663
|
||
|
dd 6316128,402659352
|
||
|
dd 12171705,1845522030
|
||
|
dd 12500670,2936057775
|
||
|
dd 12369084,788541231
|
||
|
dd 9145227,3791708898
|
||
|
dd 1447446,2231403909
|
||
|
dd 3421236,218107149
|
||
|
dd 5066061,1392530259
|
||
|
dd 12829635,4026593520
|
||
|
dd 7500402,2617285788
|
||
|
dd 9803157,1694524773
|
||
|
dd 11250603,3925928682
|
||
|
dd 9342606,2734728099
|
||
|
dd 12237498,2919280302
|
||
|
dd 8026746,2650840734
|
||
|
dd 11776947,3959483628
|
||
|
dd 131586,2147516544
|
||
|
dd 11842740,754986285
|
||
|
dd 11382189,1795189611
|
||
|
dd 10658466,2818615464
|
||
|
dd 11316396,721431339
|
||
|
dd 14211288,905983542
|
||
|
dd 10132122,2785060518
|
||
|
dd 1513239,3305162181
|
||
|
dd 1710618,2248181382
|
||
|
dd 3487029,1291865421
|
||
|
dd 13421772,855651123
|
||
|
dd 16250871,4244700669
|
||
|
dd 10066329,1711302246
|
||
|
dd 6381921,1476417624
|
||
|
dd 5921370,2516620950
|
||
|
dd 15263976,973093434
|
||
|
dd 2368548,150997257
|
||
|
dd 5658198,2499843477
|
||
|
dd 4210752,268439568
|
||
|
dd 14803425,2013296760
|
||
|
dd 6513507,3623934168
|
||
|
dd 592137,1107313218
|
||
|
dd 3355443,3422604492
|
||
|
dd 12566463,4009816047
|
||
|
dd 10000536,637543974
|
||
|
dd 9934743,3842041317
|
||
|
dd 8750469,1627414881
|
||
|
dd 6842472,436214298
|
||
|
dd 16579836,1056980799
|
||
|
dd 15527148,989870907
|
||
|
dd 657930,2181071490
|
||
|
dd 14342874,3053500086
|
||
|
dd 7303023,3674266587
|
||
|
dd 5460819,3556824276
|
||
|
dd 6447714,2550175896
|
||
|
dd 10724259,3892373736
|
||
|
dd 3026478,2332068747
|
||
|
dd 526344,33554946
|
||
|
dd 11513775,3942706155
|
||
|
dd 2631720,167774730
|
||
|
dd 11579568,738208812
|
||
|
dd 7631988,486546717
|
||
|
dd 12763842,2952835248
|
||
|
dd 12434877,1862299503
|
||
|
dd 3552822,2365623693
|
||
|
dd 2236962,2281736328
|
||
|
dd 3684408,234884622
|
||
|
dd 6579300,419436825
|
||
|
dd 1973790,2264958855
|
||
|
dd 3750201,1308642894
|
||
|
dd 2894892,184552203
|
||
|
dd 10921638,2835392937
|
||
|
dd 3158064,201329676
|
||
|
dd 15066597,2030074233
|
||
|
dd 4473924,285217041
|
||
|
dd 16645629,2130739071
|
||
|
dd 8947848,570434082
|
||
|
dd 10461087,3875596263
|
||
|
dd 6645093,1493195097
|
||
|
dd 8882055,3774931425
|
||
|
dd 7039851,3657489114
|
||
|
dd 16053492,1023425853
|
||
|
dd 2302755,3355494600
|
||
|
dd 4737096,301994514
|
||
|
dd 1052688,67109892
|
||
|
dd 13750737,1946186868
|
||
|
dd 5329233,1409307732
|
||
|
dd 12632256,805318704
|
||
|
dd 16382457,2113961598
|
||
|
dd 13816530,3019945140
|
||
|
dd 10526880,671098920
|
||
|
dd 5592405,1426085205
|
||
|
dd 10592673,1744857192
|
||
|
dd 4276545,1342197840
|
||
|
dd 16448250,3187719870
|
||
|
dd 4408131,3489714384
|
||
|
dd 1250067,3288384708
|
||
|
dd 12895428,822096177
|
||
|
dd 3092271,3405827019
|
||
|
dd 11053224,704653866
|
||
|
dd 11974326,2902502829
|
||
|
dd 3947580,251662095
|
||
|
dd 2829099,3389049546
|
||
|
dd 12698049,1879076976
|
||
|
dd 16777215,4278255615
|
||
|
dd 13158600,838873650
|
||
|
dd 10855845,1761634665
|
||
|
dd 2105376,134219784
|
||
|
dd 9013641,1644192354
|
||
|
dd 0,0
|
||
|
dd 9474192,603989028
|
||
|
dd 4671303,3506491857
|
||
|
dd 15724527,4211145723
|
||
|
dd 15395562,3120609978
|
||
|
dd 12040119,3976261101
|
||
|
dd 1381653,1157645637
|
||
|
dd 394758,2164294017
|
||
|
dd 13487565,1929409395
|
||
|
dd 11908533,1828744557
|
||
|
dd 1184274,2214626436
|
||
|
dd 8289918,2667618207
|
||
|
dd 12303291,3993038574
|
||
|
dd 2697513,1241533002
|
||
|
dd 986895,3271607235
|
||
|
dd 12105912,771763758
|
||
|
dd 460551,3238052289
|
||
|
dd 263172,16777473
|
||
|
dd 10197915,3858818790
|
||
|
dd 9737364,620766501
|
||
|
dd 2171169,1207978056
|
||
|
dd 6710886,2566953369
|
||
|
dd 15132390,3103832505
|
||
|
dd 13553358,3003167667
|
||
|
dd 15592941,2063629179
|
||
|
dd 15198183,4177590777
|
||
|
dd 3881787,3456159438
|
||
|
dd 16711422,3204497343
|
||
|
dd 8355711,3741376479
|
||
|
dd 12961221,1895854449
|
||
|
dd 10790052,687876393
|
||
|
dd 3618615,3439381965
|
||
|
dd 11645361,1811967084
|
||
|
dd 5000268,318771987
|
||
|
dd 9539985,1677747300
|
||
|
dd 7237230,2600508315
|
||
|
dd 9276813,1660969827
|
||
|
dd 7763574,2634063261
|
||
|
dd 197379,3221274816
|
||
|
dd 2960685,1258310475
|
||
|
dd 14606046,3070277559
|
||
|
dd 9868950,2768283045
|
||
|
dd 2500134,2298513801
|
||
|
dd 8224125,1593859935
|
||
|
dd 13027014,2969612721
|
||
|
dd 6052956,385881879
|
||
|
dd 13882323,4093703412
|
||
|
dd 15921906,3154164924
|
||
|
dd 5197647,3540046803
|
||
|
dd 1644825,1174423110
|
||
|
dd 4144959,3472936911
|
||
|
dd 14474460,922761015
|
||
|
dd 7960953,1577082462
|
||
|
dd 1907997,1191200583
|
||
|
dd 5395026,2483066004
|
||
|
dd 15461355,4194368250
|
||
|
dd 15987699,4227923196
|
||
|
dd 7171437,1526750043
|
||
|
dd 6184542,2533398423
|
||
|
dd 16514043,4261478142
|
||
|
dd 6908265,1509972570
|
||
|
dd 11711154,2885725356
|
||
|
dd 15790320,1006648380
|
||
|
dd 3223857,1275087948
|
||
|
dd 789516,50332419
|
||
|
dd 13948116,889206069
|
||
|
dd 13619151,4076925939
|
||
|
dd 9211020,587211555
|
||
|
dd 14869218,3087055032
|
||
|
dd 7697781,1560304989
|
||
|
dd 11119017,1778412138
|
||
|
dd 4868682,2449511058
|
||
|
dd 5723991,3573601749
|
||
|
dd 8684676,553656609
|
||
|
dd 1118481,1140868164
|
||
|
dd 4539717,1358975313
|
||
|
dd 1776411,3321939654
|
||
|
dd 16119285,2097184125
|
||
|
dd 15000804,956315961
|
||
|
dd 921102,2197848963
|
||
|
dd 7566195,3691044060
|
||
|
dd 11184810,2852170410
|
||
|
dd 15856113,2080406652
|
||
|
dd 14540253,1996519287
|
||
|
dd 5855577,1442862678
|
||
|
dd 1315860,83887365
|
||
|
dd 7105644,452991771
|
||
|
dd 9605778,2751505572
|
||
|
dd 5526612,352326933
|
||
|
dd 13684944,872428596
|
||
|
dd 7895160,503324190
|
||
|
dd 7368816,469769244
|
||
|
dd 14935011,4160813304
|
||
|
dd 4802889,1375752786
|
||
|
dd 8421504,536879136
|
||
|
dd 5263440,335549460
|
||
|
dd 10987431,3909151209
|
||
|
dd 16185078,3170942397
|
||
|
dd 7829367,3707821533
|
||
|
dd 9671571,3825263844
|
||
|
dd 8816262,2701173153
|
||
|
dd 8618883,3758153952
|
||
|
dd 2763306,2315291274
|
||
|
dd 13092807,4043370993
|
||
|
dd 5987163,3590379222
|
||
|
dd 15329769,2046851706
|
||
|
dd 15658734,3137387451
|
||
|
dd 9408399,3808486371
|
||
|
dd 65793,1073758272
|
||
|
dd 4013373,1325420367
|
||
|
global _Camellia_cbc_encrypt
|
||
|
align 16
|
||
|
_Camellia_cbc_encrypt:
|
||
|
L$_Camellia_cbc_encrypt_begin:
|
||
|
push ebp
|
||
|
push ebx
|
||
|
push esi
|
||
|
push edi
|
||
|
mov ecx,DWORD [28+esp]
|
||
|
cmp ecx,0
|
||
|
je NEAR L$016enc_out
|
||
|
pushfd
|
||
|
cld
|
||
|
mov eax,DWORD [24+esp]
|
||
|
mov ebx,DWORD [28+esp]
|
||
|
mov edx,DWORD [36+esp]
|
||
|
mov ebp,DWORD [40+esp]
|
||
|
lea esi,[esp-64]
|
||
|
and esi,-64
|
||
|
lea edi,[edx-127]
|
||
|
sub edi,esi
|
||
|
neg edi
|
||
|
and edi,960
|
||
|
sub esi,edi
|
||
|
mov edi,DWORD [44+esp]
|
||
|
xchg esp,esi
|
||
|
add esp,4
|
||
|
mov DWORD [20+esp],esi
|
||
|
mov DWORD [24+esp],eax
|
||
|
mov DWORD [28+esp],ebx
|
||
|
mov DWORD [32+esp],ecx
|
||
|
mov DWORD [36+esp],edx
|
||
|
mov DWORD [40+esp],ebp
|
||
|
call L$017pic_point
|
||
|
L$017pic_point:
|
||
|
pop ebp
|
||
|
lea ebp,[(L$Camellia_SBOX-L$017pic_point)+ebp]
|
||
|
mov esi,32
|
||
|
align 4
|
||
|
L$018prefetch_sbox:
|
||
|
mov eax,DWORD [ebp]
|
||
|
mov ebx,DWORD [32+ebp]
|
||
|
mov ecx,DWORD [64+ebp]
|
||
|
mov edx,DWORD [96+ebp]
|
||
|
lea ebp,[128+ebp]
|
||
|
dec esi
|
||
|
jnz NEAR L$018prefetch_sbox
|
||
|
mov eax,DWORD [36+esp]
|
||
|
sub ebp,4096
|
||
|
mov esi,DWORD [24+esp]
|
||
|
mov edx,DWORD [272+eax]
|
||
|
cmp edi,0
|
||
|
je NEAR L$019DECRYPT
|
||
|
mov ecx,DWORD [32+esp]
|
||
|
mov edi,DWORD [40+esp]
|
||
|
shl edx,6
|
||
|
lea edx,[edx*1+eax]
|
||
|
mov DWORD [16+esp],edx
|
||
|
test ecx,4294967280
|
||
|
jz NEAR L$020enc_tail
|
||
|
mov eax,DWORD [edi]
|
||
|
mov ebx,DWORD [4+edi]
|
||
|
align 4
|
||
|
L$021enc_loop:
|
||
|
mov ecx,DWORD [8+edi]
|
||
|
mov edx,DWORD [12+edi]
|
||
|
xor eax,DWORD [esi]
|
||
|
xor ebx,DWORD [4+esi]
|
||
|
xor ecx,DWORD [8+esi]
|
||
|
bswap eax
|
||
|
xor edx,DWORD [12+esi]
|
||
|
bswap ebx
|
||
|
mov edi,DWORD [36+esp]
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
call __x86_Camellia_encrypt
|
||
|
mov esi,DWORD [24+esp]
|
||
|
mov edi,DWORD [28+esp]
|
||
|
bswap eax
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
mov DWORD [edi],eax
|
||
|
bswap edx
|
||
|
mov DWORD [4+edi],ebx
|
||
|
mov DWORD [8+edi],ecx
|
||
|
mov DWORD [12+edi],edx
|
||
|
mov ecx,DWORD [32+esp]
|
||
|
lea esi,[16+esi]
|
||
|
mov DWORD [24+esp],esi
|
||
|
lea edx,[16+edi]
|
||
|
mov DWORD [28+esp],edx
|
||
|
sub ecx,16
|
||
|
test ecx,4294967280
|
||
|
mov DWORD [32+esp],ecx
|
||
|
jnz NEAR L$021enc_loop
|
||
|
test ecx,15
|
||
|
jnz NEAR L$020enc_tail
|
||
|
mov esi,DWORD [40+esp]
|
||
|
mov ecx,DWORD [8+edi]
|
||
|
mov edx,DWORD [12+edi]
|
||
|
mov DWORD [esi],eax
|
||
|
mov DWORD [4+esi],ebx
|
||
|
mov DWORD [8+esi],ecx
|
||
|
mov DWORD [12+esi],edx
|
||
|
mov esp,DWORD [20+esp]
|
||
|
popfd
|
||
|
L$016enc_out:
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
pushfd
|
||
|
align 4
|
||
|
L$020enc_tail:
|
||
|
mov eax,edi
|
||
|
mov edi,DWORD [28+esp]
|
||
|
push eax
|
||
|
mov ebx,16
|
||
|
sub ebx,ecx
|
||
|
cmp edi,esi
|
||
|
je NEAR L$022enc_in_place
|
||
|
align 4
|
||
|
dd 2767451785
|
||
|
jmp NEAR L$023enc_skip_in_place
|
||
|
L$022enc_in_place:
|
||
|
lea edi,[ecx*1+edi]
|
||
|
L$023enc_skip_in_place:
|
||
|
mov ecx,ebx
|
||
|
xor eax,eax
|
||
|
align 4
|
||
|
dd 2868115081
|
||
|
pop edi
|
||
|
mov esi,DWORD [28+esp]
|
||
|
mov eax,DWORD [edi]
|
||
|
mov ebx,DWORD [4+edi]
|
||
|
mov DWORD [32+esp],16
|
||
|
jmp NEAR L$021enc_loop
|
||
|
align 16
|
||
|
L$019DECRYPT:
|
||
|
shl edx,6
|
||
|
lea edx,[edx*1+eax]
|
||
|
mov DWORD [16+esp],eax
|
||
|
mov DWORD [36+esp],edx
|
||
|
cmp esi,DWORD [28+esp]
|
||
|
je NEAR L$024dec_in_place
|
||
|
mov edi,DWORD [40+esp]
|
||
|
mov DWORD [44+esp],edi
|
||
|
align 4
|
||
|
L$025dec_loop:
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov ecx,DWORD [8+esi]
|
||
|
bswap eax
|
||
|
mov edx,DWORD [12+esi]
|
||
|
bswap ebx
|
||
|
mov edi,DWORD [36+esp]
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
call __x86_Camellia_decrypt
|
||
|
mov edi,DWORD [44+esp]
|
||
|
mov esi,DWORD [32+esp]
|
||
|
bswap eax
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
xor eax,DWORD [edi]
|
||
|
bswap edx
|
||
|
xor ebx,DWORD [4+edi]
|
||
|
xor ecx,DWORD [8+edi]
|
||
|
xor edx,DWORD [12+edi]
|
||
|
sub esi,16
|
||
|
jc NEAR L$026dec_partial
|
||
|
mov DWORD [32+esp],esi
|
||
|
mov esi,DWORD [24+esp]
|
||
|
mov edi,DWORD [28+esp]
|
||
|
mov DWORD [edi],eax
|
||
|
mov DWORD [4+edi],ebx
|
||
|
mov DWORD [8+edi],ecx
|
||
|
mov DWORD [12+edi],edx
|
||
|
mov DWORD [44+esp],esi
|
||
|
lea esi,[16+esi]
|
||
|
mov DWORD [24+esp],esi
|
||
|
lea edi,[16+edi]
|
||
|
mov DWORD [28+esp],edi
|
||
|
jnz NEAR L$025dec_loop
|
||
|
mov edi,DWORD [44+esp]
|
||
|
L$027dec_end:
|
||
|
mov esi,DWORD [40+esp]
|
||
|
mov eax,DWORD [edi]
|
||
|
mov ebx,DWORD [4+edi]
|
||
|
mov ecx,DWORD [8+edi]
|
||
|
mov edx,DWORD [12+edi]
|
||
|
mov DWORD [esi],eax
|
||
|
mov DWORD [4+esi],ebx
|
||
|
mov DWORD [8+esi],ecx
|
||
|
mov DWORD [12+esi],edx
|
||
|
jmp NEAR L$028dec_out
|
||
|
align 4
|
||
|
L$026dec_partial:
|
||
|
lea edi,[44+esp]
|
||
|
mov DWORD [edi],eax
|
||
|
mov DWORD [4+edi],ebx
|
||
|
mov DWORD [8+edi],ecx
|
||
|
mov DWORD [12+edi],edx
|
||
|
lea ecx,[16+esi]
|
||
|
mov esi,edi
|
||
|
mov edi,DWORD [28+esp]
|
||
|
dd 2767451785
|
||
|
mov edi,DWORD [24+esp]
|
||
|
jmp NEAR L$027dec_end
|
||
|
align 4
|
||
|
L$024dec_in_place:
|
||
|
L$029dec_in_place_loop:
|
||
|
lea edi,[44+esp]
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov ecx,DWORD [8+esi]
|
||
|
mov edx,DWORD [12+esi]
|
||
|
mov DWORD [edi],eax
|
||
|
mov DWORD [4+edi],ebx
|
||
|
mov DWORD [8+edi],ecx
|
||
|
bswap eax
|
||
|
mov DWORD [12+edi],edx
|
||
|
bswap ebx
|
||
|
mov edi,DWORD [36+esp]
|
||
|
bswap ecx
|
||
|
bswap edx
|
||
|
call __x86_Camellia_decrypt
|
||
|
mov edi,DWORD [40+esp]
|
||
|
mov esi,DWORD [28+esp]
|
||
|
bswap eax
|
||
|
bswap ebx
|
||
|
bswap ecx
|
||
|
xor eax,DWORD [edi]
|
||
|
bswap edx
|
||
|
xor ebx,DWORD [4+edi]
|
||
|
xor ecx,DWORD [8+edi]
|
||
|
xor edx,DWORD [12+edi]
|
||
|
mov DWORD [esi],eax
|
||
|
mov DWORD [4+esi],ebx
|
||
|
mov DWORD [8+esi],ecx
|
||
|
mov DWORD [12+esi],edx
|
||
|
lea esi,[16+esi]
|
||
|
mov DWORD [28+esp],esi
|
||
|
lea esi,[44+esp]
|
||
|
mov eax,DWORD [esi]
|
||
|
mov ebx,DWORD [4+esi]
|
||
|
mov ecx,DWORD [8+esi]
|
||
|
mov edx,DWORD [12+esi]
|
||
|
mov DWORD [edi],eax
|
||
|
mov DWORD [4+edi],ebx
|
||
|
mov DWORD [8+edi],ecx
|
||
|
mov DWORD [12+edi],edx
|
||
|
mov esi,DWORD [24+esp]
|
||
|
lea esi,[16+esi]
|
||
|
mov DWORD [24+esp],esi
|
||
|
mov ecx,DWORD [32+esp]
|
||
|
sub ecx,16
|
||
|
jc NEAR L$030dec_in_place_partial
|
||
|
mov DWORD [32+esp],ecx
|
||
|
jnz NEAR L$029dec_in_place_loop
|
||
|
jmp NEAR L$028dec_out
|
||
|
align 4
|
||
|
L$030dec_in_place_partial:
|
||
|
mov edi,DWORD [28+esp]
|
||
|
lea esi,[44+esp]
|
||
|
lea edi,[ecx*1+edi]
|
||
|
lea esi,[16+ecx*1+esi]
|
||
|
neg ecx
|
||
|
dd 2767451785
|
||
|
align 4
|
||
|
L$028dec_out:
|
||
|
mov esp,DWORD [20+esp]
|
||
|
popfd
|
||
|
pop edi
|
||
|
pop esi
|
||
|
pop ebx
|
||
|
pop ebp
|
||
|
ret
|
||
|
db 67,97,109,101,108,108,105,97,32,102,111,114,32,120,56,54
|
||
|
db 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
|
||
|
db 115,108,46,111,114,103,62,0
|