📄 c-win32.asm
字号:
; Don't even think of reading this code ; It was automatically generated by cast-586.pl ; Which is a perl program used to generate the x86 assember for ; any of elf, a.out, BSDI, Win32, gaswin (for GNU as on Win32) or Solaris ; eric <eay@cryptsoft.com> ; segment .textextern _CAST_S_table0extern _CAST_S_table1extern _CAST_S_table2extern _CAST_S_table3global _CAST_encrypt_CAST_encrypt: ; push ebp push ebx mov ebx, [12+esp] mov ebp, [16+esp] push esi push edi ; Load the 2 words mov edi, [ebx] mov esi, [4+ebx] ; Get short key flag mov eax, [128+ebp] push eax xor eax, eax ; round 0 mov edx, [ebp] mov ecx, [4+ebp] add edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] xor ecx, ebx mov ebx, [_CAST_S_table2+eax*4] sub ecx, ebx mov ebx, [_CAST_S_table3+edx*4] add ecx, ebx xor edi, ecx ; round 1 mov edx, [8+ebp] mov ecx, [12+ebp] xor edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] sub ecx, ebx mov ebx, [_CAST_S_table2+eax*4] add ecx, ebx mov ebx, [_CAST_S_table3+edx*4] xor ecx, ebx xor esi, ecx ; round 2 mov edx, [16+ebp] mov ecx, [20+ebp] sub edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] add ecx, ebx mov ebx, [_CAST_S_table2+eax*4] xor ecx, ebx mov ebx, [_CAST_S_table3+edx*4] sub ecx, ebx xor edi, ecx ; round 3 mov edx, [24+ebp] mov ecx, [28+ebp] add edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] xor ecx, ebx mov ebx, [_CAST_S_table2+eax*4] sub ecx, ebx mov ebx, [_CAST_S_table3+edx*4] add ecx, ebx xor esi, ecx ; round 4 mov edx, [32+ebp] mov ecx, [36+ebp] xor edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] sub ecx, ebx mov ebx, [_CAST_S_table2+eax*4] add ecx, ebx mov ebx, [_CAST_S_table3+edx*4] xor ecx, ebx xor edi, ecx ; round 5 mov edx, [40+ebp] mov ecx, [44+ebp] sub edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] add ecx, ebx mov ebx, [_CAST_S_table2+eax*4] xor ecx, ebx mov ebx, [_CAST_S_table3+edx*4] sub ecx, ebx xor esi, ecx ; round 6 mov edx, [48+ebp] mov ecx, [52+ebp] add edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] xor ecx, ebx mov ebx, [_CAST_S_table2+eax*4] sub ecx, ebx mov ebx, [_CAST_S_table3+edx*4] add ecx, ebx xor edi, ecx ; round 7 mov edx, [56+ebp] mov ecx, [60+ebp] xor edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] sub ecx, ebx mov ebx, [_CAST_S_table2+eax*4] add ecx, ebx mov ebx, [_CAST_S_table3+edx*4] xor ecx, ebx xor esi, ecx ; round 8 mov edx, [64+ebp] mov ecx, [68+ebp] sub edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] add ecx, ebx mov ebx, [_CAST_S_table2+eax*4] xor ecx, ebx mov ebx, [_CAST_S_table3+edx*4] sub ecx, ebx xor edi, ecx ; round 9 mov edx, [72+ebp] mov ecx, [76+ebp] add edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] xor ecx, ebx mov ebx, [_CAST_S_table2+eax*4] sub ecx, ebx mov ebx, [_CAST_S_table3+edx*4] add ecx, ebx xor esi, ecx ; round 10 mov edx, [80+ebp] mov ecx, [84+ebp] xor edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] sub ecx, ebx mov ebx, [_CAST_S_table2+eax*4] add ecx, ebx mov ebx, [_CAST_S_table3+edx*4] xor ecx, ebx xor edi, ecx ; round 11 mov edx, [88+ebp] mov ecx, [92+ebp] sub edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] add ecx, ebx mov ebx, [_CAST_S_table2+eax*4] xor ecx, ebx mov ebx, [_CAST_S_table3+edx*4] sub ecx, ebx xor esi, ecx ; test short key flag pop edx or edx, edx jnz NEAR $L000cast_enc_done ; round 12 mov edx, [96+ebp] mov ecx, [100+ebp] add edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] xor ecx, ebx mov ebx, [_CAST_S_table2+eax*4] sub ecx, ebx mov ebx, [_CAST_S_table3+edx*4] add ecx, ebx xor edi, ecx ; round 13 mov edx, [104+ebp] mov ecx, [108+ebp] xor edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] sub ecx, ebx mov ebx, [_CAST_S_table2+eax*4] add ecx, ebx mov ebx, [_CAST_S_table3+edx*4] xor ecx, ebx xor esi, ecx ; round 14 mov edx, [112+ebp] mov ecx, [116+ebp] sub edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] add ecx, ebx mov ebx, [_CAST_S_table2+eax*4] xor ecx, ebx mov ebx, [_CAST_S_table3+edx*4] sub ecx, ebx xor edi, ecx ; round 15 mov edx, [120+ebp] mov ecx, [124+ebp] add edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] xor ecx, ebx mov ebx, [_CAST_S_table2+eax*4] sub ecx, ebx mov ebx, [_CAST_S_table3+edx*4] add ecx, ebx xor esi, ecx$L000cast_enc_done: nop mov eax, [20+esp] mov [4+eax], edi mov [eax], esi pop edi pop esi pop ebx pop ebp retextern _CAST_S_table0extern _CAST_S_table1extern _CAST_S_table2extern _CAST_S_table3global _CAST_decrypt_CAST_decrypt: ; push ebp push ebx mov ebx, [12+esp] mov ebp, [16+esp] push esi push edi ; Load the 2 words mov edi, [ebx] mov esi, [4+ebx] ; Get short key flag mov eax, [128+ebp] or eax, eax jnz NEAR $L001cast_dec_skip xor eax, eax ; round 15 mov edx, [120+ebp] mov ecx, [124+ebp] add edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] xor ecx, ebx mov ebx, [_CAST_S_table2+eax*4] sub ecx, ebx mov ebx, [_CAST_S_table3+edx*4] add ecx, ebx xor edi, ecx ; round 14 mov edx, [112+ebp] mov ecx, [116+ebp] sub edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] add ecx, ebx mov ebx, [_CAST_S_table2+eax*4] xor ecx, ebx mov ebx, [_CAST_S_table3+edx*4] sub ecx, ebx xor esi, ecx ; round 13 mov edx, [104+ebp] mov ecx, [108+ebp] xor edx, esi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255 shr edx, 16 xor eax, eax mov al, dh and edx, 255 mov ecx, [_CAST_S_table0+ecx*4] mov ebx, [_CAST_S_table1+ebx*4] sub ecx, ebx mov ebx, [_CAST_S_table2+eax*4] add ecx, ebx mov ebx, [_CAST_S_table3+edx*4] xor ecx, ebx xor edi, ecx ; round 12 mov edx, [96+ebp] mov ecx, [100+ebp] add edx, edi rol edx, cl mov ebx, edx xor ecx, ecx mov cl, dh and ebx, 255
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -