TITLE cmll-586.asm IF @Version LT 800 ECHO MASM version 8.00 or later is strongly recommended. ENDIF .586 .MODEL FLAT OPTION DOTNAME IF @Version LT 800 .text$ SEGMENT PAGE 'CODE' ELSE .text$ SEGMENT ALIGN(64) 'CODE' ENDIF ALIGN 16 _Camellia_EncryptBlock_Rounds PROC PUBLIC $L_Camellia_EncryptBlock_Rounds_begin:: push ebp push ebx push esi push edi mov eax,DWORD PTR 20[esp] mov esi,DWORD PTR 24[esp] mov edi,DWORD PTR 28[esp] mov ebx,esp sub esp,28 and esp,-64 lea ecx,DWORD PTR [edi-127] sub ecx,esp neg ecx and ecx,960 sub esp,ecx add esp,4 shl eax,6 lea eax,DWORD PTR [eax*1+edi] mov DWORD PTR 20[esp],ebx mov DWORD PTR 16[esp],eax call $L000pic_point $L000pic_point: pop ebp lea ebp,DWORD PTR ($LCamellia_SBOX-$L000pic_point)[ebp] mov eax,DWORD PTR [esi] mov ebx,DWORD PTR 4[esi] mov ecx,DWORD PTR 8[esi] bswap eax mov edx,DWORD PTR 12[esi] bswap ebx bswap ecx bswap edx call __x86_Camellia_encrypt mov esp,DWORD PTR 20[esp] bswap eax mov esi,DWORD PTR 32[esp] bswap ebx bswap ecx bswap edx mov DWORD PTR [esi],eax mov DWORD PTR 4[esi],ebx mov DWORD PTR 8[esi],ecx mov DWORD PTR 12[esi],edx pop edi pop esi pop ebx pop ebp ret _Camellia_EncryptBlock_Rounds ENDP ALIGN 16 _Camellia_EncryptBlock PROC PUBLIC $L_Camellia_EncryptBlock_begin:: mov eax,128 sub eax,DWORD PTR 4[esp] mov eax,3 adc eax,0 mov DWORD PTR 4[esp],eax jmp $L_Camellia_EncryptBlock_Rounds_begin _Camellia_EncryptBlock ENDP ALIGN 16 _Camellia_encrypt PROC PUBLIC $L_Camellia_encrypt_begin:: push ebp push ebx push esi push edi mov esi,DWORD PTR 20[esp] mov edi,DWORD PTR 28[esp] mov ebx,esp sub esp,28 and esp,-64 mov eax,DWORD PTR 272[edi] lea ecx,DWORD PTR [edi-127] sub ecx,esp neg ecx and ecx,960 sub esp,ecx add esp,4 shl eax,6 lea eax,DWORD PTR [eax*1+edi] mov DWORD PTR 20[esp],ebx mov DWORD PTR 16[esp],eax call $L001pic_point $L001pic_point: pop ebp lea ebp,DWORD PTR ($LCamellia_SBOX-$L001pic_point)[ebp] mov eax,DWORD PTR [esi] mov ebx,DWORD PTR 4[esi] mov ecx,DWORD PTR 8[esi] bswap eax mov edx,DWORD PTR 12[esi] bswap ebx bswap ecx bswap edx call __x86_Camellia_encrypt mov esp,DWORD PTR 20[esp] bswap eax mov esi,DWORD PTR 24[esp] bswap ebx bswap ecx bswap edx mov DWORD PTR [esi],eax mov DWORD PTR 4[esi],ebx mov DWORD PTR 8[esi],ecx mov DWORD PTR 12[esi],edx pop edi pop esi pop ebx pop ebp ret _Camellia_encrypt ENDP ALIGN 16 __x86_Camellia_encrypt PROC PRIVATE xor eax,DWORD PTR [edi] xor ebx,DWORD PTR 4[edi] xor ecx,DWORD PTR 8[edi] xor edx,DWORD PTR 12[edi] mov esi,DWORD PTR 16[edi] mov DWORD PTR 4[esp],eax mov DWORD PTR 8[esp],ebx mov DWORD PTR 12[esp],ecx mov DWORD PTR 16[esp],edx ALIGN 16 $L002loop: xor eax,esi xor ebx,DWORD PTR 20[edi] movzx esi,ah mov edx,DWORD PTR 2052[esi*8+ebp] movzx esi,al xor edx,DWORD PTR 4[esi*8+ebp] shr eax,16 movzx esi,bl mov ecx,DWORD PTR [esi*8+ebp] movzx esi,ah xor edx,DWORD PTR [esi*8+ebp] movzx esi,bh xor ecx,DWORD PTR 4[esi*8+ebp] shr ebx,16 movzx eax,al xor edx,DWORD PTR 2048[eax*8+ebp] movzx esi,bh mov eax,DWORD PTR 16[esp] xor ecx,edx ror edx,8 xor ecx,DWORD PTR 2048[esi*8+ebp] movzx esi,bl mov ebx,DWORD PTR 12[esp] xor edx,eax xor ecx,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 24[edi] xor edx,ecx mov DWORD PTR 16[esp],edx xor ecx,ebx mov DWORD PTR 12[esp],ecx xor ecx,esi xor edx,DWORD PTR 28[edi] movzx esi,ch mov ebx,DWORD PTR 2052[esi*8+ebp] movzx esi,cl xor ebx,DWORD PTR 4[esi*8+ebp] shr ecx,16 movzx esi,dl mov eax,DWORD PTR [esi*8+ebp] movzx esi,ch xor ebx,DWORD PTR [esi*8+ebp] movzx esi,dh xor eax,DWORD PTR 4[esi*8+ebp] shr edx,16 movzx ecx,cl xor ebx,DWORD PTR 2048[ecx*8+ebp] movzx esi,dh mov ecx,DWORD PTR 8[esp] xor eax,ebx ror ebx,8 xor eax,DWORD PTR 2048[esi*8+ebp] movzx esi,dl mov edx,DWORD PTR 4[esp] xor ebx,ecx xor eax,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 32[edi] xor ebx,eax mov DWORD PTR 8[esp],ebx xor eax,edx mov DWORD PTR 4[esp],eax xor eax,esi xor ebx,DWORD PTR 36[edi] movzx esi,ah mov edx,DWORD PTR 2052[esi*8+ebp] movzx esi,al xor edx,DWORD PTR 4[esi*8+ebp] shr eax,16 movzx esi,bl mov ecx,DWORD PTR [esi*8+ebp] movzx esi,ah xor edx,DWORD PTR [esi*8+ebp] movzx esi,bh xor ecx,DWORD PTR 4[esi*8+ebp] shr ebx,16 movzx eax,al xor edx,DWORD PTR 2048[eax*8+ebp] movzx esi,bh mov eax,DWORD PTR 16[esp] xor ecx,edx ror edx,8 xor ecx,DWORD PTR 2048[esi*8+ebp] movzx esi,bl mov ebx,DWORD PTR 12[esp] xor edx,eax xor ecx,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 40[edi] xor edx,ecx mov DWORD PTR 16[esp],edx xor ecx,ebx mov DWORD PTR 12[esp],ecx xor ecx,esi xor edx,DWORD PTR 44[edi] movzx esi,ch mov ebx,DWORD PTR 2052[esi*8+ebp] movzx esi,cl xor ebx,DWORD PTR 4[esi*8+ebp] shr ecx,16 movzx esi,dl mov eax,DWORD PTR [esi*8+ebp] movzx esi,ch xor ebx,DWORD PTR [esi*8+ebp] movzx esi,dh xor eax,DWORD PTR 4[esi*8+ebp] shr edx,16 movzx ecx,cl xor ebx,DWORD PTR 2048[ecx*8+ebp] movzx esi,dh mov ecx,DWORD PTR 8[esp] xor eax,ebx ror ebx,8 xor eax,DWORD PTR 2048[esi*8+ebp] movzx esi,dl mov edx,DWORD PTR 4[esp] xor ebx,ecx xor eax,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 48[edi] xor ebx,eax mov DWORD PTR 8[esp],ebx xor eax,edx mov DWORD PTR 4[esp],eax xor eax,esi xor ebx,DWORD PTR 52[edi] movzx esi,ah mov edx,DWORD PTR 2052[esi*8+ebp] movzx esi,al xor edx,DWORD PTR 4[esi*8+ebp] shr eax,16 movzx esi,bl mov ecx,DWORD PTR [esi*8+ebp] movzx esi,ah xor edx,DWORD PTR [esi*8+ebp] movzx esi,bh xor ecx,DWORD PTR 4[esi*8+ebp] shr ebx,16 movzx eax,al xor edx,DWORD PTR 2048[eax*8+ebp] movzx esi,bh mov eax,DWORD PTR 16[esp] xor ecx,edx ror edx,8 xor ecx,DWORD PTR 2048[esi*8+ebp] movzx esi,bl mov ebx,DWORD PTR 12[esp] xor edx,eax xor ecx,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 56[edi] xor edx,ecx mov DWORD PTR 16[esp],edx xor ecx,ebx mov DWORD PTR 12[esp],ecx xor ecx,esi xor edx,DWORD PTR 60[edi] movzx esi,ch mov ebx,DWORD PTR 2052[esi*8+ebp] movzx esi,cl xor ebx,DWORD PTR 4[esi*8+ebp] shr ecx,16 movzx esi,dl mov eax,DWORD PTR [esi*8+ebp] movzx esi,ch xor ebx,DWORD PTR [esi*8+ebp] movzx esi,dh xor eax,DWORD PTR 4[esi*8+ebp] shr edx,16 movzx ecx,cl xor ebx,DWORD PTR 2048[ecx*8+ebp] movzx esi,dh mov ecx,DWORD PTR 8[esp] xor eax,ebx ror ebx,8 xor eax,DWORD PTR 2048[esi*8+ebp] movzx esi,dl mov edx,DWORD PTR 4[esp] xor ebx,ecx xor eax,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 64[edi] xor ebx,eax mov DWORD PTR 8[esp],ebx xor eax,edx mov DWORD PTR 4[esp],eax add edi,64 cmp edi,DWORD PTR 20[esp] je $L003done and esi,eax mov edx,DWORD PTR 16[esp] rol esi,1 mov ecx,edx xor ebx,esi or ecx,DWORD PTR 12[edi] mov DWORD PTR 8[esp],ebx xor ecx,DWORD PTR 12[esp] mov esi,DWORD PTR 4[edi] mov DWORD PTR 12[esp],ecx or esi,ebx and ecx,DWORD PTR 8[edi] xor eax,esi rol ecx,1 mov DWORD PTR 4[esp],eax xor edx,ecx mov esi,DWORD PTR 16[edi] mov DWORD PTR 16[esp],edx jmp $L002loop ALIGN 8 $L003done: mov ecx,eax mov edx,ebx mov eax,DWORD PTR 12[esp] mov ebx,DWORD PTR 16[esp] xor eax,esi xor ebx,DWORD PTR 4[edi] xor ecx,DWORD PTR 8[edi] xor edx,DWORD PTR 12[edi] ret __x86_Camellia_encrypt ENDP ALIGN 16 _Camellia_DecryptBlock_Rounds PROC PUBLIC $L_Camellia_DecryptBlock_Rounds_begin:: push ebp push ebx push esi push edi mov eax,DWORD PTR 20[esp] mov esi,DWORD PTR 24[esp] mov edi,DWORD PTR 28[esp] mov ebx,esp sub esp,28 and esp,-64 lea ecx,DWORD PTR [edi-127] sub ecx,esp neg ecx and ecx,960 sub esp,ecx add esp,4 shl eax,6 mov DWORD PTR 16[esp],edi lea edi,DWORD PTR [eax*1+edi] mov DWORD PTR 20[esp],ebx call $L004pic_point $L004pic_point: pop ebp lea ebp,DWORD PTR ($LCamellia_SBOX-$L004pic_point)[ebp] mov eax,DWORD PTR [esi] mov ebx,DWORD PTR 4[esi] mov ecx,DWORD PTR 8[esi] bswap eax mov edx,DWORD PTR 12[esi] bswap ebx bswap ecx bswap edx call __x86_Camellia_decrypt mov esp,DWORD PTR 20[esp] bswap eax mov esi,DWORD PTR 32[esp] bswap ebx bswap ecx bswap edx mov DWORD PTR [esi],eax mov DWORD PTR 4[esi],ebx mov DWORD PTR 8[esi],ecx mov DWORD PTR 12[esi],edx pop edi pop esi pop ebx pop ebp ret _Camellia_DecryptBlock_Rounds ENDP ALIGN 16 _Camellia_DecryptBlock PROC PUBLIC $L_Camellia_DecryptBlock_begin:: mov eax,128 sub eax,DWORD PTR 4[esp] mov eax,3 adc eax,0 mov DWORD PTR 4[esp],eax jmp $L_Camellia_DecryptBlock_Rounds_begin _Camellia_DecryptBlock ENDP ALIGN 16 _Camellia_decrypt PROC PUBLIC $L_Camellia_decrypt_begin:: push ebp push ebx push esi push edi mov esi,DWORD PTR 20[esp] mov edi,DWORD PTR 28[esp] mov ebx,esp sub esp,28 and esp,-64 mov eax,DWORD PTR 272[edi] lea ecx,DWORD PTR [edi-127] sub ecx,esp neg ecx and ecx,960 sub esp,ecx add esp,4 shl eax,6 mov DWORD PTR 16[esp],edi lea edi,DWORD PTR [eax*1+edi] mov DWORD PTR 20[esp],ebx call $L005pic_point $L005pic_point: pop ebp lea ebp,DWORD PTR ($LCamellia_SBOX-$L005pic_point)[ebp] mov eax,DWORD PTR [esi] mov ebx,DWORD PTR 4[esi] mov ecx,DWORD PTR 8[esi] bswap eax mov edx,DWORD PTR 12[esi] bswap ebx bswap ecx bswap edx call __x86_Camellia_decrypt mov esp,DWORD PTR 20[esp] bswap eax mov esi,DWORD PTR 24[esp] bswap ebx bswap ecx bswap edx mov DWORD PTR [esi],eax mov DWORD PTR 4[esi],ebx mov DWORD PTR 8[esi],ecx mov DWORD PTR 12[esi],edx pop edi pop esi pop ebx pop ebp ret _Camellia_decrypt ENDP ALIGN 16 __x86_Camellia_decrypt PROC PRIVATE xor eax,DWORD PTR [edi] xor ebx,DWORD PTR 4[edi] xor ecx,DWORD PTR 8[edi] xor edx,DWORD PTR 12[edi] mov esi,DWORD PTR [edi-8] mov DWORD PTR 4[esp],eax mov DWORD PTR 8[esp],ebx mov DWORD PTR 12[esp],ecx mov DWORD PTR 16[esp],edx ALIGN 16 $L006loop: xor eax,esi xor ebx,DWORD PTR [edi-4] movzx esi,ah mov edx,DWORD PTR 2052[esi*8+ebp] movzx esi,al xor edx,DWORD PTR 4[esi*8+ebp] shr eax,16 movzx esi,bl mov ecx,DWORD PTR [esi*8+ebp] movzx esi,ah xor edx,DWORD PTR [esi*8+ebp] movzx esi,bh xor ecx,DWORD PTR 4[esi*8+ebp] shr ebx,16 movzx eax,al xor edx,DWORD PTR 2048[eax*8+ebp] movzx esi,bh mov eax,DWORD PTR 16[esp] xor ecx,edx ror edx,8 xor ecx,DWORD PTR 2048[esi*8+ebp] movzx esi,bl mov ebx,DWORD PTR 12[esp] xor edx,eax xor ecx,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR [edi-16] xor edx,ecx mov DWORD PTR 16[esp],edx xor ecx,ebx mov DWORD PTR 12[esp],ecx xor ecx,esi xor edx,DWORD PTR [edi-12] movzx esi,ch mov ebx,DWORD PTR 2052[esi*8+ebp] movzx esi,cl xor ebx,DWORD PTR 4[esi*8+ebp] shr ecx,16 movzx esi,dl mov eax,DWORD PTR [esi*8+ebp] movzx esi,ch xor ebx,DWORD PTR [esi*8+ebp] movzx esi,dh xor eax,DWORD PTR 4[esi*8+ebp] shr edx,16 movzx ecx,cl xor ebx,DWORD PTR 2048[ecx*8+ebp] movzx esi,dh mov ecx,DWORD PTR 8[esp] xor eax,ebx ror ebx,8 xor eax,DWORD PTR 2048[esi*8+ebp] movzx esi,dl mov edx,DWORD PTR 4[esp] xor ebx,ecx xor eax,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR [edi-24] xor ebx,eax mov DWORD PTR 8[esp],ebx xor eax,edx mov DWORD PTR 4[esp],eax xor eax,esi xor ebx,DWORD PTR [edi-20] movzx esi,ah mov edx,DWORD PTR 2052[esi*8+ebp] movzx esi,al xor edx,DWORD PTR 4[esi*8+ebp] shr eax,16 movzx esi,bl mov ecx,DWORD PTR [esi*8+ebp] movzx esi,ah xor edx,DWORD PTR [esi*8+ebp] movzx esi,bh xor ecx,DWORD PTR 4[esi*8+ebp] shr ebx,16 movzx eax,al xor edx,DWORD PTR 2048[eax*8+ebp] movzx esi,bh mov eax,DWORD PTR 16[esp] xor ecx,edx ror edx,8 xor ecx,DWORD PTR 2048[esi*8+ebp] movzx esi,bl mov ebx,DWORD PTR 12[esp] xor edx,eax xor ecx,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR [edi-32] xor edx,ecx mov DWORD PTR 16[esp],edx xor ecx,ebx mov DWORD PTR 12[esp],ecx xor ecx,esi xor edx,DWORD PTR [edi-28] movzx esi,ch mov ebx,DWORD PTR 2052[esi*8+ebp] movzx esi,cl xor ebx,DWORD PTR 4[esi*8+ebp] shr ecx,16 movzx esi,dl mov eax,DWORD PTR [esi*8+ebp] movzx esi,ch xor ebx,DWORD PTR [esi*8+ebp] movzx esi,dh xor eax,DWORD PTR 4[esi*8+ebp] shr edx,16 movzx ecx,cl xor ebx,DWORD PTR 2048[ecx*8+ebp] movzx esi,dh mov ecx,DWORD PTR 8[esp] xor eax,ebx ror ebx,8 xor eax,DWORD PTR 2048[esi*8+ebp] movzx esi,dl mov edx,DWORD PTR 4[esp] xor ebx,ecx xor eax,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR [edi-40] xor ebx,eax mov DWORD PTR 8[esp],ebx xor eax,edx mov DWORD PTR 4[esp],eax xor eax,esi xor ebx,DWORD PTR [edi-36] movzx esi,ah mov edx,DWORD PTR 2052[esi*8+ebp] movzx esi,al xor edx,DWORD PTR 4[esi*8+ebp] shr eax,16 movzx esi,bl mov ecx,DWORD PTR [esi*8+ebp] movzx esi,ah xor edx,DWORD PTR [esi*8+ebp] movzx esi,bh xor ecx,DWORD PTR 4[esi*8+ebp] shr ebx,16 movzx eax,al xor edx,DWORD PTR 2048[eax*8+ebp] movzx esi,bh mov eax,DWORD PTR 16[esp] xor ecx,edx ror edx,8 xor ecx,DWORD PTR 2048[esi*8+ebp] movzx esi,bl mov ebx,DWORD PTR 12[esp] xor edx,eax xor ecx,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR [edi-48] xor edx,ecx mov DWORD PTR 16[esp],edx xor ecx,ebx mov DWORD PTR 12[esp],ecx xor ecx,esi xor edx,DWORD PTR [edi-44] movzx esi,ch mov ebx,DWORD PTR 2052[esi*8+ebp] movzx esi,cl xor ebx,DWORD PTR 4[esi*8+ebp] shr ecx,16 movzx esi,dl mov eax,DWORD PTR [esi*8+ebp] movzx esi,ch xor ebx,DWORD PTR [esi*8+ebp] movzx esi,dh xor eax,DWORD PTR 4[esi*8+ebp] shr edx,16 movzx ecx,cl xor ebx,DWORD PTR 2048[ecx*8+ebp] movzx esi,dh mov ecx,DWORD PTR 8[esp] xor eax,ebx ror ebx,8 xor eax,DWORD PTR 2048[esi*8+ebp] movzx esi,dl mov edx,DWORD PTR 4[esp] xor ebx,ecx xor eax,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR [edi-56] xor ebx,eax mov DWORD PTR 8[esp],ebx xor eax,edx mov DWORD PTR 4[esp],eax sub edi,64 cmp edi,DWORD PTR 20[esp] je $L007done and esi,eax mov edx,DWORD PTR 16[esp] rol esi,1 mov ecx,edx xor ebx,esi or ecx,DWORD PTR 4[edi] mov DWORD PTR 8[esp],ebx xor ecx,DWORD PTR 12[esp] mov esi,DWORD PTR 12[edi] mov DWORD PTR 12[esp],ecx or esi,ebx and ecx,DWORD PTR [edi] xor eax,esi rol ecx,1 mov DWORD PTR 4[esp],eax xor edx,ecx mov esi,DWORD PTR [edi-8] mov DWORD PTR 16[esp],edx jmp $L006loop ALIGN 8 $L007done: mov ecx,eax mov edx,ebx mov eax,DWORD PTR 12[esp] mov ebx,DWORD PTR 16[esp] xor ecx,esi xor edx,DWORD PTR 12[edi] xor eax,DWORD PTR [edi] xor ebx,DWORD PTR 4[edi] ret __x86_Camellia_decrypt ENDP ALIGN 16 _Camellia_Ekeygen PROC PUBLIC $L_Camellia_Ekeygen_begin:: push ebp push ebx push esi push edi sub esp,16 mov ebp,DWORD PTR 36[esp] mov esi,DWORD PTR 40[esp] mov edi,DWORD PTR 44[esp] mov eax,DWORD PTR [esi] mov ebx,DWORD PTR 4[esi] mov ecx,DWORD PTR 8[esi] mov edx,DWORD PTR 12[esi] bswap eax bswap ebx bswap ecx bswap edx mov DWORD PTR [edi],eax mov DWORD PTR 4[edi],ebx mov DWORD PTR 8[edi],ecx mov DWORD PTR 12[edi],edx cmp ebp,128 je $L0081st128 mov eax,DWORD PTR 16[esi] mov ebx,DWORD PTR 20[esi] cmp ebp,192 je $L0091st192 mov ecx,DWORD PTR 24[esi] mov edx,DWORD PTR 28[esi] jmp $L0101st256 ALIGN 4 $L0091st192: mov ecx,eax mov edx,ebx not ecx not edx ALIGN 4 $L0101st256: bswap eax bswap ebx bswap ecx bswap edx mov DWORD PTR 32[edi],eax mov DWORD PTR 36[edi],ebx mov DWORD PTR 40[edi],ecx mov DWORD PTR 44[edi],edx xor eax,DWORD PTR [edi] xor ebx,DWORD PTR 4[edi] xor ecx,DWORD PTR 8[edi] xor edx,DWORD PTR 12[edi] ALIGN 4 $L0081st128: call $L011pic_point $L011pic_point: pop ebp lea ebp,DWORD PTR ($LCamellia_SBOX-$L011pic_point)[ebp] lea edi,DWORD PTR ($LCamellia_SIGMA-$LCamellia_SBOX)[ebp] mov esi,DWORD PTR [edi] mov DWORD PTR [esp],eax mov DWORD PTR 4[esp],ebx mov DWORD PTR 8[esp],ecx mov DWORD PTR 12[esp],edx xor eax,esi xor ebx,DWORD PTR 4[edi] movzx esi,ah mov edx,DWORD PTR 2052[esi*8+ebp] movzx esi,al xor edx,DWORD PTR 4[esi*8+ebp] shr eax,16 movzx esi,bl mov ecx,DWORD PTR [esi*8+ebp] movzx esi,ah xor edx,DWORD PTR [esi*8+ebp] movzx esi,bh xor ecx,DWORD PTR 4[esi*8+ebp] shr ebx,16 movzx eax,al xor edx,DWORD PTR 2048[eax*8+ebp] movzx esi,bh mov eax,DWORD PTR 12[esp] xor ecx,edx ror edx,8 xor ecx,DWORD PTR 2048[esi*8+ebp] movzx esi,bl mov ebx,DWORD PTR 8[esp] xor edx,eax xor ecx,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 8[edi] xor edx,ecx mov DWORD PTR 12[esp],edx xor ecx,ebx mov DWORD PTR 8[esp],ecx xor ecx,esi xor edx,DWORD PTR 12[edi] movzx esi,ch mov ebx,DWORD PTR 2052[esi*8+ebp] movzx esi,cl xor ebx,DWORD PTR 4[esi*8+ebp] shr ecx,16 movzx esi,dl mov eax,DWORD PTR [esi*8+ebp] movzx esi,ch xor ebx,DWORD PTR [esi*8+ebp] movzx esi,dh xor eax,DWORD PTR 4[esi*8+ebp] shr edx,16 movzx ecx,cl xor ebx,DWORD PTR 2048[ecx*8+ebp] movzx esi,dh mov ecx,DWORD PTR 4[esp] xor eax,ebx ror ebx,8 xor eax,DWORD PTR 2048[esi*8+ebp] movzx esi,dl mov edx,DWORD PTR [esp] xor ebx,ecx xor eax,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 16[edi] xor ebx,eax mov DWORD PTR 4[esp],ebx xor eax,edx mov DWORD PTR [esp],eax mov ecx,DWORD PTR 8[esp] mov edx,DWORD PTR 12[esp] mov esi,DWORD PTR 44[esp] xor eax,DWORD PTR [esi] xor ebx,DWORD PTR 4[esi] xor ecx,DWORD PTR 8[esi] xor edx,DWORD PTR 12[esi] mov esi,DWORD PTR 16[edi] mov DWORD PTR [esp],eax mov DWORD PTR 4[esp],ebx mov DWORD PTR 8[esp],ecx mov DWORD PTR 12[esp],edx xor eax,esi xor ebx,DWORD PTR 20[edi] movzx esi,ah mov edx,DWORD PTR 2052[esi*8+ebp] movzx esi,al xor edx,DWORD PTR 4[esi*8+ebp] shr eax,16 movzx esi,bl mov ecx,DWORD PTR [esi*8+ebp] movzx esi,ah xor edx,DWORD PTR [esi*8+ebp] movzx esi,bh xor ecx,DWORD PTR 4[esi*8+ebp] shr ebx,16 movzx eax,al xor edx,DWORD PTR 2048[eax*8+ebp] movzx esi,bh mov eax,DWORD PTR 12[esp] xor ecx,edx ror edx,8 xor ecx,DWORD PTR 2048[esi*8+ebp] movzx esi,bl mov ebx,DWORD PTR 8[esp] xor edx,eax xor ecx,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 24[edi] xor edx,ecx mov DWORD PTR 12[esp],edx xor ecx,ebx mov DWORD PTR 8[esp],ecx xor ecx,esi xor edx,DWORD PTR 28[edi] movzx esi,ch mov ebx,DWORD PTR 2052[esi*8+ebp] movzx esi,cl xor ebx,DWORD PTR 4[esi*8+ebp] shr ecx,16 movzx esi,dl mov eax,DWORD PTR [esi*8+ebp] movzx esi,ch xor ebx,DWORD PTR [esi*8+ebp] movzx esi,dh xor eax,DWORD PTR 4[esi*8+ebp] shr edx,16 movzx ecx,cl xor ebx,DWORD PTR 2048[ecx*8+ebp] movzx esi,dh mov ecx,DWORD PTR 4[esp] xor eax,ebx ror ebx,8 xor eax,DWORD PTR 2048[esi*8+ebp] movzx esi,dl mov edx,DWORD PTR [esp] xor ebx,ecx xor eax,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 32[edi] xor ebx,eax mov DWORD PTR 4[esp],ebx xor eax,edx mov DWORD PTR [esp],eax mov ecx,DWORD PTR 8[esp] mov edx,DWORD PTR 12[esp] mov esi,DWORD PTR 36[esp] cmp esi,128 jne $L0122nd256 mov edi,DWORD PTR 44[esp] lea edi,DWORD PTR 128[edi] mov DWORD PTR [edi-112],eax mov DWORD PTR [edi-108],ebx mov DWORD PTR [edi-104],ecx mov DWORD PTR [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 PTR [edi-80],eax shr esi,17 or ebx,esi shr ebp,17 mov esi,edx shr esi,17 mov DWORD PTR [edi-76],ebx shl edx,15 or ecx,esi or edx,ebp mov DWORD PTR [edi-72],ecx mov DWORD PTR [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 PTR [edi-64],eax shr esi,17 or ebx,esi shr ebp,17 mov esi,edx shr esi,17 mov DWORD PTR [edi-60],ebx shl edx,15 or ecx,esi or edx,ebp mov DWORD PTR [edi-56],ecx mov DWORD PTR [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 PTR [edi-32],eax shr esi,17 or ebx,esi shr ebp,17 mov esi,edx shr esi,17 mov DWORD PTR [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 PTR [edi-16],eax shr esi,17 or ebx,esi shr ebp,17 mov esi,edx shr esi,17 mov DWORD PTR [edi-12],ebx shl edx,15 or ecx,esi or edx,ebp mov DWORD PTR [edi-8],ecx mov DWORD PTR [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 PTR 32[edi],ebx shr esi,30 or ecx,esi shr ebp,30 mov esi,eax shr esi,30 mov DWORD PTR 36[edi],ecx shl eax,2 or edx,esi or eax,ebp mov DWORD PTR 40[edi],edx mov DWORD PTR 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 PTR 64[edi],ebx shr esi,15 or ecx,esi shr ebp,15 mov esi,eax shr esi,15 mov DWORD PTR 68[edi],ecx shl eax,17 or edx,esi or eax,ebp mov DWORD PTR 72[edi],edx mov DWORD PTR 76[edi],eax mov ebx,DWORD PTR [edi-128] mov ecx,DWORD PTR [edi-124] mov edx,DWORD PTR [edi-120] mov eax,DWORD PTR [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 PTR [edi-96],ebx shr esi,17 or ecx,esi shr ebp,17 mov esi,eax shr esi,17 mov DWORD PTR [edi-92],ecx shl eax,15 or edx,esi or eax,ebp mov DWORD PTR [edi-88],edx mov DWORD PTR [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 PTR [edi-48],ebx shr esi,2 or ecx,esi shr ebp,2 mov esi,eax shr esi,2 mov DWORD PTR [edi-44],ecx shl eax,30 or edx,esi or eax,ebp mov DWORD PTR [edi-40],edx mov DWORD PTR [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 PTR [edi-24],edx mov DWORD PTR [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 PTR [edi],ebx shr esi,15 or ecx,esi shr ebp,15 mov esi,eax shr esi,15 mov DWORD PTR 4[edi],ecx shl eax,17 or edx,esi or eax,ebp mov DWORD PTR 8[edi],edx mov DWORD PTR 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 PTR 16[edi],ebx shr esi,15 or ecx,esi shr ebp,15 mov esi,eax shr esi,15 mov DWORD PTR 20[edi],ecx shl eax,17 or edx,esi or eax,ebp mov DWORD PTR 24[edi],edx mov DWORD PTR 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 PTR 48[edi],ebx shr esi,15 or ecx,esi shr ebp,15 mov esi,eax shr esi,15 mov DWORD PTR 52[edi],ecx shl eax,17 or edx,esi or eax,ebp mov DWORD PTR 56[edi],edx mov DWORD PTR 60[edi],eax mov eax,3 jmp $L013done ALIGN 16 $L0122nd256: mov esi,DWORD PTR 44[esp] mov DWORD PTR 48[esi],eax mov DWORD PTR 52[esi],ebx mov DWORD PTR 56[esi],ecx mov DWORD PTR 60[esi],edx xor eax,DWORD PTR 32[esi] xor ebx,DWORD PTR 36[esi] xor ecx,DWORD PTR 40[esi] xor edx,DWORD PTR 44[esi] mov esi,DWORD PTR 32[edi] mov DWORD PTR [esp],eax mov DWORD PTR 4[esp],ebx mov DWORD PTR 8[esp],ecx mov DWORD PTR 12[esp],edx xor eax,esi xor ebx,DWORD PTR 36[edi] movzx esi,ah mov edx,DWORD PTR 2052[esi*8+ebp] movzx esi,al xor edx,DWORD PTR 4[esi*8+ebp] shr eax,16 movzx esi,bl mov ecx,DWORD PTR [esi*8+ebp] movzx esi,ah xor edx,DWORD PTR [esi*8+ebp] movzx esi,bh xor ecx,DWORD PTR 4[esi*8+ebp] shr ebx,16 movzx eax,al xor edx,DWORD PTR 2048[eax*8+ebp] movzx esi,bh mov eax,DWORD PTR 12[esp] xor ecx,edx ror edx,8 xor ecx,DWORD PTR 2048[esi*8+ebp] movzx esi,bl mov ebx,DWORD PTR 8[esp] xor edx,eax xor ecx,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 40[edi] xor edx,ecx mov DWORD PTR 12[esp],edx xor ecx,ebx mov DWORD PTR 8[esp],ecx xor ecx,esi xor edx,DWORD PTR 44[edi] movzx esi,ch mov ebx,DWORD PTR 2052[esi*8+ebp] movzx esi,cl xor ebx,DWORD PTR 4[esi*8+ebp] shr ecx,16 movzx esi,dl mov eax,DWORD PTR [esi*8+ebp] movzx esi,ch xor ebx,DWORD PTR [esi*8+ebp] movzx esi,dh xor eax,DWORD PTR 4[esi*8+ebp] shr edx,16 movzx ecx,cl xor ebx,DWORD PTR 2048[ecx*8+ebp] movzx esi,dh mov ecx,DWORD PTR 4[esp] xor eax,ebx ror ebx,8 xor eax,DWORD PTR 2048[esi*8+ebp] movzx esi,dl mov edx,DWORD PTR [esp] xor ebx,ecx xor eax,DWORD PTR 2052[esi*8+ebp] mov esi,DWORD PTR 48[edi] xor ebx,eax mov DWORD PTR 4[esp],ebx xor eax,edx mov DWORD PTR [esp],eax mov ecx,DWORD PTR 8[esp] mov edx,DWORD PTR 12[esp] mov edi,DWORD PTR 44[esp] lea edi,DWORD PTR 128[edi] mov DWORD PTR [edi-112],eax mov DWORD PTR [edi-108],ebx mov DWORD PTR [edi-104],ecx mov DWORD PTR [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 PTR [edi-48],eax shr esi,2 or ebx,esi shr ebp,2 mov esi,edx shr esi,2 mov DWORD PTR [edi-44],ebx shl edx,30 or ecx,esi or edx,ebp mov DWORD PTR [edi-40],ecx mov DWORD PTR [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 PTR 32[edi],eax shr esi,2 or ebx,esi shr ebp,2 mov esi,edx shr esi,2 mov DWORD PTR 36[edi],ebx shl edx,30 or ecx,esi or edx,ebp mov DWORD PTR 40[edi],ecx mov DWORD PTR 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 PTR 128[edi],ebx shr esi,13 or ecx,esi shr ebp,13 mov esi,eax shr esi,13 mov DWORD PTR 132[edi],ecx shl eax,19 or edx,esi or eax,ebp mov DWORD PTR 136[edi],edx mov DWORD PTR 140[edi],eax mov ebx,DWORD PTR [edi-96] mov ecx,DWORD PTR [edi-92] mov edx,DWORD PTR [edi-88] mov eax,DWORD PTR [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 PTR [edi-96],ebx shr esi,17 or ecx,esi shr ebp,17 mov esi,eax shr esi,17 mov DWORD PTR [edi-92],ecx shl eax,15 or edx,esi or eax,ebp mov DWORD PTR [edi-88],edx mov DWORD PTR [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 PTR [edi-64],ebx shr esi,17 or ecx,esi shr ebp,17 mov esi,eax shr esi,17 mov DWORD PTR [edi-60],ecx shl eax,15 or edx,esi or eax,ebp mov DWORD PTR [edi-56],edx mov DWORD PTR [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 PTR 16[edi],ebx shr esi,2 or ecx,esi shr ebp,2 mov esi,eax shr esi,2 mov DWORD PTR 20[edi],ecx shl eax,30 or edx,esi or eax,ebp mov DWORD PTR 24[edi],edx mov DWORD PTR 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 PTR 80[edi],ecx shr esi,30 or edx,esi shr ebp,30 mov esi,ebx shr esi,30 mov DWORD PTR 84[edi],edx shl ebx,2 or eax,esi or ebx,ebp mov DWORD PTR 88[edi],eax mov DWORD PTR 92[edi],ebx mov ecx,DWORD PTR [edi-80] mov edx,DWORD PTR [edi-76] mov eax,DWORD PTR [edi-72] mov ebx,DWORD PTR [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 PTR [edi-80],ecx shr esi,17 or edx,esi shr ebp,17 mov esi,ebx shr esi,17 mov DWORD PTR [edi-76],edx shl ebx,15 or eax,esi or ebx,ebp mov DWORD PTR [edi-72],eax mov DWORD PTR [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 PTR [edi-16],ecx shr esi,2 or edx,esi shr ebp,2 mov esi,ebx shr esi,2 mov DWORD PTR [edi-12],edx shl ebx,30 or eax,esi or ebx,ebp mov DWORD PTR [edi-8],eax mov DWORD PTR [edi-4],ebx mov DWORD PTR 64[edi],edx mov DWORD PTR 68[edi],eax mov DWORD PTR 72[edi],ebx mov DWORD PTR 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 PTR 96[edi],edx shr esi,15 or eax,esi shr ebp,15 mov esi,ecx shr esi,15 mov DWORD PTR 100[edi],eax shl ecx,17 or ebx,esi or ecx,ebp mov DWORD PTR 104[edi],ebx mov DWORD PTR 108[edi],ecx mov edx,DWORD PTR [edi-128] mov eax,DWORD PTR [edi-124] mov ebx,DWORD PTR [edi-120] mov ecx,DWORD PTR [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 PTR [edi-32],eax shr esi,19 or ebx,esi shr ebp,19 mov esi,edx shr esi,19 mov DWORD PTR [edi-28],ebx shl edx,13 or ecx,esi or edx,ebp mov DWORD PTR [edi-24],ecx mov DWORD PTR [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 PTR [edi],eax shr esi,17 or ebx,esi shr ebp,17 mov esi,edx shr esi,17 mov DWORD PTR 4[edi],ebx shl edx,15 or ecx,esi or edx,ebp mov DWORD PTR 8[edi],ecx mov DWORD PTR 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 PTR 48[edi],eax shr esi,15 or ebx,esi shr ebp,15 mov esi,edx shr esi,15 mov DWORD PTR 52[edi],ebx shl edx,17 or ecx,esi or edx,ebp mov DWORD PTR 56[edi],ecx mov DWORD PTR 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 PTR 112[edi],ebx shr esi,30 or ecx,esi shr ebp,30 mov esi,eax shr esi,30 mov DWORD PTR 116[edi],ecx shl eax,2 or edx,esi or eax,ebp mov DWORD PTR 120[edi],edx mov DWORD PTR 124[edi],eax mov eax,4 $L013done: lea edx,DWORD PTR 144[edi] add esp,16 pop edi pop esi pop ebx pop ebp ret _Camellia_Ekeygen ENDP ALIGN 16 _Camellia_set_key PROC PUBLIC $L_Camellia_set_key_begin:: push ebx mov ecx,DWORD PTR 8[esp] mov ebx,DWORD PTR 12[esp] mov edx,DWORD PTR 16[esp] mov eax,-1 test ecx,ecx jz $L014done test edx,edx jz $L014done mov eax,-2 cmp ebx,256 je $L015arg_ok cmp ebx,192 je $L015arg_ok cmp ebx,128 jne $L014done ALIGN 4 $L015arg_ok: push edx push ecx push ebx call $L_Camellia_Ekeygen_begin add esp,12 mov DWORD PTR [edx],eax xor eax,eax ALIGN 4 $L014done: pop ebx ret _Camellia_set_key ENDP ALIGN 64 $LCamellia_SIGMA:: DD 2694735487,1003262091,3061508184,1286239154,3337565999,3914302142,1426019237,4057165596,283453434,3731369245,2958461122,3018244605,0,0,0,0 ALIGN 64 $LCamellia_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 ALIGN 16 _Camellia_cbc_encrypt PROC PUBLIC $L_Camellia_cbc_encrypt_begin:: push ebp push ebx push esi push edi mov ecx,DWORD PTR 28[esp] cmp ecx,0 je $L016enc_out pushfd cld mov eax,DWORD PTR 24[esp] mov ebx,DWORD PTR 28[esp] mov edx,DWORD PTR 36[esp] mov ebp,DWORD PTR 40[esp] lea esi,DWORD PTR [esp-64] and esi,-64 lea edi,DWORD PTR [edx-127] sub edi,esi neg edi and edi,960 sub esi,edi mov edi,DWORD PTR 44[esp] xchg esp,esi add esp,4 mov DWORD PTR 20[esp],esi mov DWORD PTR 24[esp],eax mov DWORD PTR 28[esp],ebx mov DWORD PTR 32[esp],ecx mov DWORD PTR 36[esp],edx mov DWORD PTR 40[esp],ebp call $L017pic_point $L017pic_point: pop ebp lea ebp,DWORD PTR ($LCamellia_SBOX-$L017pic_point)[ebp] mov esi,32 ALIGN 4 $L018prefetch_sbox: mov eax,DWORD PTR [ebp] mov ebx,DWORD PTR 32[ebp] mov ecx,DWORD PTR 64[ebp] mov edx,DWORD PTR 96[ebp] lea ebp,DWORD PTR 128[ebp] dec esi jnz $L018prefetch_sbox mov eax,DWORD PTR 36[esp] sub ebp,4096 mov esi,DWORD PTR 24[esp] mov edx,DWORD PTR 272[eax] cmp edi,0 je $L019DECRYPT mov ecx,DWORD PTR 32[esp] mov edi,DWORD PTR 40[esp] shl edx,6 lea edx,DWORD PTR [edx*1+eax] mov DWORD PTR 16[esp],edx test ecx,4294967280 jz $L020enc_tail mov eax,DWORD PTR [edi] mov ebx,DWORD PTR 4[edi] ALIGN 4 $L021enc_loop: mov ecx,DWORD PTR 8[edi] mov edx,DWORD PTR 12[edi] xor eax,DWORD PTR [esi] xor ebx,DWORD PTR 4[esi] xor ecx,DWORD PTR 8[esi] bswap eax xor edx,DWORD PTR 12[esi] bswap ebx mov edi,DWORD PTR 36[esp] bswap ecx bswap edx call __x86_Camellia_encrypt mov esi,DWORD PTR 24[esp] mov edi,DWORD PTR 28[esp] bswap eax bswap ebx bswap ecx mov DWORD PTR [edi],eax bswap edx mov DWORD PTR 4[edi],ebx mov DWORD PTR 8[edi],ecx mov DWORD PTR 12[edi],edx mov ecx,DWORD PTR 32[esp] lea esi,DWORD PTR 16[esi] mov DWORD PTR 24[esp],esi lea edx,DWORD PTR 16[edi] mov DWORD PTR 28[esp],edx sub ecx,16 test ecx,4294967280 mov DWORD PTR 32[esp],ecx jnz $L021enc_loop test ecx,15 jnz $L020enc_tail mov esi,DWORD PTR 40[esp] mov ecx,DWORD PTR 8[edi] mov edx,DWORD PTR 12[edi] mov DWORD PTR [esi],eax mov DWORD PTR 4[esi],ebx mov DWORD PTR 8[esi],ecx mov DWORD PTR 12[esi],edx mov esp,DWORD PTR 20[esp] popfd $L016enc_out: pop edi pop esi pop ebx pop ebp ret pushfd ALIGN 4 $L020enc_tail: mov eax,edi mov edi,DWORD PTR 28[esp] push eax mov ebx,16 sub ebx,ecx cmp edi,esi je $L022enc_in_place ALIGN 4 DD 2767451785 jmp $L023enc_skip_in_place $L022enc_in_place: lea edi,DWORD PTR [ecx*1+edi] $L023enc_skip_in_place: mov ecx,ebx xor eax,eax ALIGN 4 DD 2868115081 pop edi mov esi,DWORD PTR 28[esp] mov eax,DWORD PTR [edi] mov ebx,DWORD PTR 4[edi] mov DWORD PTR 32[esp],16 jmp $L021enc_loop ALIGN 16 $L019DECRYPT: shl edx,6 lea edx,DWORD PTR [edx*1+eax] mov DWORD PTR 16[esp],eax mov DWORD PTR 36[esp],edx cmp esi,DWORD PTR 28[esp] je $L024dec_in_place mov edi,DWORD PTR 40[esp] mov DWORD PTR 44[esp],edi ALIGN 4 $L025dec_loop: mov eax,DWORD PTR [esi] mov ebx,DWORD PTR 4[esi] mov ecx,DWORD PTR 8[esi] bswap eax mov edx,DWORD PTR 12[esi] bswap ebx mov edi,DWORD PTR 36[esp] bswap ecx bswap edx call __x86_Camellia_decrypt mov edi,DWORD PTR 44[esp] mov esi,DWORD PTR 32[esp] bswap eax bswap ebx bswap ecx xor eax,DWORD PTR [edi] bswap edx xor ebx,DWORD PTR 4[edi] xor ecx,DWORD PTR 8[edi] xor edx,DWORD PTR 12[edi] sub esi,16 jc $L026dec_partial mov DWORD PTR 32[esp],esi mov esi,DWORD PTR 24[esp] mov edi,DWORD PTR 28[esp] mov DWORD PTR [edi],eax mov DWORD PTR 4[edi],ebx mov DWORD PTR 8[edi],ecx mov DWORD PTR 12[edi],edx mov DWORD PTR 44[esp],esi lea esi,DWORD PTR 16[esi] mov DWORD PTR 24[esp],esi lea edi,DWORD PTR 16[edi] mov DWORD PTR 28[esp],edi jnz $L025dec_loop mov edi,DWORD PTR 44[esp] $L027dec_end: mov esi,DWORD PTR 40[esp] mov eax,DWORD PTR [edi] mov ebx,DWORD PTR 4[edi] mov ecx,DWORD PTR 8[edi] mov edx,DWORD PTR 12[edi] mov DWORD PTR [esi],eax mov DWORD PTR 4[esi],ebx mov DWORD PTR 8[esi],ecx mov DWORD PTR 12[esi],edx jmp $L028dec_out ALIGN 4 $L026dec_partial: lea edi,DWORD PTR 44[esp] mov DWORD PTR [edi],eax mov DWORD PTR 4[edi],ebx mov DWORD PTR 8[edi],ecx mov DWORD PTR 12[edi],edx lea ecx,DWORD PTR 16[esi] mov esi,edi mov edi,DWORD PTR 28[esp] DD 2767451785 mov edi,DWORD PTR 24[esp] jmp $L027dec_end ALIGN 4 $L024dec_in_place: $L029dec_in_place_loop: lea edi,DWORD PTR 44[esp] mov eax,DWORD PTR [esi] mov ebx,DWORD PTR 4[esi] mov ecx,DWORD PTR 8[esi] mov edx,DWORD PTR 12[esi] mov DWORD PTR [edi],eax mov DWORD PTR 4[edi],ebx mov DWORD PTR 8[edi],ecx bswap eax mov DWORD PTR 12[edi],edx bswap ebx mov edi,DWORD PTR 36[esp] bswap ecx bswap edx call __x86_Camellia_decrypt mov edi,DWORD PTR 40[esp] mov esi,DWORD PTR 28[esp] bswap eax bswap ebx bswap ecx xor eax,DWORD PTR [edi] bswap edx xor ebx,DWORD PTR 4[edi] xor ecx,DWORD PTR 8[edi] xor edx,DWORD PTR 12[edi] mov DWORD PTR [esi],eax mov DWORD PTR 4[esi],ebx mov DWORD PTR 8[esi],ecx mov DWORD PTR 12[esi],edx lea esi,DWORD PTR 16[esi] mov DWORD PTR 28[esp],esi lea esi,DWORD PTR 44[esp] mov eax,DWORD PTR [esi] mov ebx,DWORD PTR 4[esi] mov ecx,DWORD PTR 8[esi] mov edx,DWORD PTR 12[esi] mov DWORD PTR [edi],eax mov DWORD PTR 4[edi],ebx mov DWORD PTR 8[edi],ecx mov DWORD PTR 12[edi],edx mov esi,DWORD PTR 24[esp] lea esi,DWORD PTR 16[esi] mov DWORD PTR 24[esp],esi mov ecx,DWORD PTR 32[esp] sub ecx,16 jc $L030dec_in_place_partial mov DWORD PTR 32[esp],ecx jnz $L029dec_in_place_loop jmp $L028dec_out ALIGN 4 $L030dec_in_place_partial: mov edi,DWORD PTR 28[esp] lea esi,DWORD PTR 44[esp] lea edi,DWORD PTR [ecx*1+edi] lea esi,DWORD PTR 16[ecx*1+esi] neg ecx DD 2767451785 ALIGN 4 $L028dec_out: mov esp,DWORD PTR 20[esp] popfd pop edi pop esi pop ebx pop ebp ret _Camellia_cbc_encrypt ENDP 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 .text$ ENDS END