diff options
Diffstat (limited to 'deps/openssl/config/archs/VC-WIN32/asm/crypto/camellia/cmll-x86.asm')
-rw-r--r-- | deps/openssl/config/archs/VC-WIN32/asm/crypto/camellia/cmll-x86.asm | 2359 |
1 files changed, 2359 insertions, 0 deletions
diff --git a/deps/openssl/config/archs/VC-WIN32/asm/crypto/camellia/cmll-x86.asm b/deps/openssl/config/archs/VC-WIN32/asm/crypto/camellia/cmll-x86.asm new file mode 100644 index 0000000000..e4aa41bf46 --- /dev/null +++ b/deps/openssl/config/archs/VC-WIN32/asm/crypto/camellia/cmll-x86.asm @@ -0,0 +1,2359 @@ +%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 |