cx86unix.cpp
来自「一个用于点对点传输加密的工具包源码」· C++ 代码 · 共 1,024 行 · 第 1/2 页
CPP
1,024 行
/* Run the C pre-processor over this file with one of the following defined * ELF - elf object files, * OUT - a.out object files, * BSDI - BSDI style a.out object files * SOL - Solaris style elf */#define TYPE(a,b) .type a,b#define SIZE(a,b) .size a,b#if defined(OUT) || (defined(BSDI) && !defined(ELF))#define CAST_S_table0 _CAST_S_table0#define CAST_S_table1 _CAST_S_table1#define CAST_S_table2 _CAST_S_table2#define CAST_S_table3 _CAST_S_table3#define CAST_encrypt _CAST_encrypt#define CAST_S_table0 _CAST_S_table0#define CAST_S_table1 _CAST_S_table1#define CAST_S_table2 _CAST_S_table2#define CAST_S_table3 _CAST_S_table3#define CAST_decrypt _CAST_decrypt#define CAST_cbc_encrypt _CAST_cbc_encrypt#endif#ifdef OUT#define OK 1#define ALIGN 4#endif#if defined(BSDI) && !defined(ELF)#define OK 1#define ALIGN 4#undef SIZE#undef TYPE#define SIZE(a,b)#define TYPE(a,b)#endif#if defined(ELF) || defined(SOL)#define OK 1#define ALIGN 16#endif#ifndef OKYou need to define one ofELF - elf systems - linux-elf, NetBSD and DG-UXOUT - a.out systems - linux-a.out and FreeBSDSOL - solaris systems, which are elf with strange comment linesBSDI - a.out with a very primative version of as.#endif/* Let the Assembler begin :-) */ /* 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> */ .file "cast-586.s" .version "01.01"gcc2_compiled.:.text .align ALIGN.globl CAST_encrypt TYPE(CAST_encrypt,@function)CAST_encrypt: pushl %ebp pushl %ebx movl 12(%esp), %ebx movl 16(%esp), %ebp pushl %esi pushl %edi /* Load the 2 words */ movl (%ebx), %edi movl 4(%ebx), %esi /* Get short key flag */ movl 128(%ebp), %eax pushl %eax xorl %eax, %eax /* round 0 */ movl (%ebp), %edx movl 4(%ebp), %ecx addl %esi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx xorl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx subl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx addl %ebx, %ecx xorl %ecx, %edi /* round 1 */ movl 8(%ebp), %edx movl 12(%ebp), %ecx xorl %edi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx subl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx addl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx xorl %ebx, %ecx xorl %ecx, %esi /* round 2 */ movl 16(%ebp), %edx movl 20(%ebp), %ecx subl %esi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx addl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx xorl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx subl %ebx, %ecx xorl %ecx, %edi /* round 3 */ movl 24(%ebp), %edx movl 28(%ebp), %ecx addl %edi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx xorl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx subl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx addl %ebx, %ecx xorl %ecx, %esi /* round 4 */ movl 32(%ebp), %edx movl 36(%ebp), %ecx xorl %esi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx subl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx addl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx xorl %ebx, %ecx xorl %ecx, %edi /* round 5 */ movl 40(%ebp), %edx movl 44(%ebp), %ecx subl %edi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx addl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx xorl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx subl %ebx, %ecx xorl %ecx, %esi /* round 6 */ movl 48(%ebp), %edx movl 52(%ebp), %ecx addl %esi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx xorl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx subl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx addl %ebx, %ecx xorl %ecx, %edi /* round 7 */ movl 56(%ebp), %edx movl 60(%ebp), %ecx xorl %edi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx subl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx addl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx xorl %ebx, %ecx xorl %ecx, %esi /* round 8 */ movl 64(%ebp), %edx movl 68(%ebp), %ecx subl %esi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx addl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx xorl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx subl %ebx, %ecx xorl %ecx, %edi /* round 9 */ movl 72(%ebp), %edx movl 76(%ebp), %ecx addl %edi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx xorl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx subl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx addl %ebx, %ecx xorl %ecx, %esi /* round 10 */ movl 80(%ebp), %edx movl 84(%ebp), %ecx xorl %esi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx subl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx addl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx xorl %ebx, %ecx xorl %ecx, %edi /* round 11 */ movl 88(%ebp), %edx movl 92(%ebp), %ecx subl %edi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx addl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx xorl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx subl %ebx, %ecx xorl %ecx, %esi /* test short key flag */ popl %edx orl %edx, %edx jnz .L000cast_enc_done /* round 12 */ movl 96(%ebp), %edx movl 100(%ebp), %ecx addl %esi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx xorl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx subl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx addl %ebx, %ecx xorl %ecx, %edi /* round 13 */ movl 104(%ebp), %edx movl 108(%ebp), %ecx xorl %edi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx subl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx addl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx xorl %ebx, %ecx xorl %ecx, %esi /* round 14 */ movl 112(%ebp), %edx movl 116(%ebp), %ecx subl %esi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx addl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx xorl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx subl %ebx, %ecx xorl %ecx, %edi /* round 15 */ movl 120(%ebp), %edx movl 124(%ebp), %ecx addl %edi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx xorl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx subl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx addl %ebx, %ecx xorl %ecx, %esi.L000cast_enc_done: nop movl 20(%esp), %eax movl %edi, 4(%eax) movl %esi, (%eax) popl %edi popl %esi popl %ebx popl %ebp ret.CAST_encrypt_end: SIZE(CAST_encrypt,.CAST_encrypt_end-CAST_encrypt).ident "CAST_encrypt".text .align ALIGN.globl CAST_decrypt TYPE(CAST_decrypt,@function)CAST_decrypt: pushl %ebp pushl %ebx movl 12(%esp), %ebx movl 16(%esp), %ebp pushl %esi pushl %edi /* Load the 2 words */ movl (%ebx), %edi movl 4(%ebx), %esi /* Get short key flag */ movl 128(%ebp), %eax orl %eax, %eax jnz .L001cast_dec_skip xorl %eax, %eax /* round 15 */ movl 120(%ebp), %edx movl 124(%ebp), %ecx addl %esi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx xorl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx subl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx addl %ebx, %ecx xorl %ecx, %edi /* round 14 */ movl 112(%ebp), %edx movl 116(%ebp), %ecx subl %edi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx addl %ebx, %ecx movl CAST_S_table2(,%eax,4),%ebx xorl %ebx, %ecx movl CAST_S_table3(,%edx,4),%ebx subl %ebx, %ecx xorl %ecx, %esi /* round 13 */ movl 104(%ebp), %edx movl 108(%ebp), %ecx xorl %esi, %edx roll %cl, %edx movl %edx, %ebx xorl %ecx, %ecx movb %dh, %cl andl $255, %ebx shrl $16, %edx xorl %eax, %eax movb %dh, %al andl $255, %edx movl CAST_S_table0(,%ecx,4),%ecx movl CAST_S_table1(,%ebx,4),%ebx subl %ebx, %ecx
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?