diff options
| author | beck <> | 1999-09-29 04:37:45 +0000 |
|---|---|---|
| committer | beck <> | 1999-09-29 04:37:45 +0000 |
| commit | de8f24ea083384bb66b32ec105dc4743c5663cdf (patch) | |
| tree | 1412176ae62a3cab2cf2b0b92150fcbceaac6092 /src/lib/libcrypto/cast/asm | |
| parent | cb929d29896bcb87c2a97417fbd03e50078fc178 (diff) | |
| download | openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.gz openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.tar.bz2 openbsd-de8f24ea083384bb66b32ec105dc4743c5663cdf.zip | |
OpenSSL 0.9.4 merge
Diffstat (limited to 'src/lib/libcrypto/cast/asm')
| -rw-r--r-- | src/lib/libcrypto/cast/asm/c-win32.asm | 117 | ||||
| -rw-r--r-- | src/lib/libcrypto/cast/asm/cast-586.pl | 267 | ||||
| -rw-r--r-- | src/lib/libcrypto/cast/asm/cx86unix.cpp | 1010 |
3 files changed, 203 insertions, 1191 deletions
diff --git a/src/lib/libcrypto/cast/asm/c-win32.asm b/src/lib/libcrypto/cast/asm/c-win32.asm index a1d8a2671a..ba78a3c69c 100644 --- a/src/lib/libcrypto/cast/asm/c-win32.asm +++ b/src/lib/libcrypto/cast/asm/c-win32.asm | |||
| @@ -25,6 +25,9 @@ _CAST_encrypt PROC NEAR | |||
| 25 | ; Load the 2 words | 25 | ; Load the 2 words |
| 26 | mov edi, DWORD PTR [ebx] | 26 | mov edi, DWORD PTR [ebx] |
| 27 | mov esi, DWORD PTR 4[ebx] | 27 | mov esi, DWORD PTR 4[ebx] |
| 28 | ; Get short key flag | ||
| 29 | mov eax, DWORD PTR 128[ebp] | ||
| 30 | push eax | ||
| 28 | xor eax, eax | 31 | xor eax, eax |
| 29 | ; round 0 | 32 | ; round 0 |
| 30 | mov edx, DWORD PTR [ebp] | 33 | mov edx, DWORD PTR [ebp] |
| @@ -278,6 +281,10 @@ _CAST_encrypt PROC NEAR | |||
| 278 | mov ebx, DWORD PTR _CAST_S_table3[edx*4] | 281 | mov ebx, DWORD PTR _CAST_S_table3[edx*4] |
| 279 | sub ecx, ebx | 282 | sub ecx, ebx |
| 280 | xor esi, ecx | 283 | xor esi, ecx |
| 284 | ; test short key flag | ||
| 285 | pop edx | ||
| 286 | or edx, edx | ||
| 287 | jnz $L000cast_enc_done | ||
| 281 | ; round 12 | 288 | ; round 12 |
| 282 | mov edx, DWORD PTR 96[ebp] | 289 | mov edx, DWORD PTR 96[ebp] |
| 283 | mov ecx, DWORD PTR 100[ebp] | 290 | mov ecx, DWORD PTR 100[ebp] |
| @@ -361,9 +368,10 @@ _CAST_encrypt PROC NEAR | |||
| 361 | sub ecx, ebx | 368 | sub ecx, ebx |
| 362 | mov ebx, DWORD PTR _CAST_S_table3[edx*4] | 369 | mov ebx, DWORD PTR _CAST_S_table3[edx*4] |
| 363 | add ecx, ebx | 370 | add ecx, ebx |
| 364 | mov eax, DWORD PTR 20[esp] | ||
| 365 | xor esi, ecx | 371 | xor esi, ecx |
| 372 | $L000cast_enc_done: | ||
| 366 | nop | 373 | nop |
| 374 | mov eax, DWORD PTR 20[esp] | ||
| 367 | mov DWORD PTR 4[eax],edi | 375 | mov DWORD PTR 4[eax],edi |
| 368 | mov DWORD PTR [eax],esi | 376 | mov DWORD PTR [eax],esi |
| 369 | pop edi | 377 | pop edi |
| @@ -391,6 +399,10 @@ _CAST_decrypt PROC NEAR | |||
| 391 | ; Load the 2 words | 399 | ; Load the 2 words |
| 392 | mov edi, DWORD PTR [ebx] | 400 | mov edi, DWORD PTR [ebx] |
| 393 | mov esi, DWORD PTR 4[ebx] | 401 | mov esi, DWORD PTR 4[ebx] |
| 402 | ; Get short key flag | ||
| 403 | mov eax, DWORD PTR 128[ebp] | ||
| 404 | or eax, eax | ||
| 405 | jnz $L001cast_dec_skip | ||
| 394 | xor eax, eax | 406 | xor eax, eax |
| 395 | ; round 15 | 407 | ; round 15 |
| 396 | mov edx, DWORD PTR 120[ebp] | 408 | mov edx, DWORD PTR 120[ebp] |
| @@ -476,6 +488,7 @@ _CAST_decrypt PROC NEAR | |||
| 476 | mov ebx, DWORD PTR _CAST_S_table3[edx*4] | 488 | mov ebx, DWORD PTR _CAST_S_table3[edx*4] |
| 477 | add ecx, ebx | 489 | add ecx, ebx |
| 478 | xor esi, ecx | 490 | xor esi, ecx |
| 491 | $L001cast_dec_skip: | ||
| 479 | ; round 11 | 492 | ; round 11 |
| 480 | mov edx, DWORD PTR 88[ebp] | 493 | mov edx, DWORD PTR 88[ebp] |
| 481 | mov ecx, DWORD PTR 92[ebp] | 494 | mov ecx, DWORD PTR 92[ebp] |
| @@ -727,9 +740,9 @@ _CAST_decrypt PROC NEAR | |||
| 727 | sub ecx, ebx | 740 | sub ecx, ebx |
| 728 | mov ebx, DWORD PTR _CAST_S_table3[edx*4] | 741 | mov ebx, DWORD PTR _CAST_S_table3[edx*4] |
| 729 | add ecx, ebx | 742 | add ecx, ebx |
| 730 | mov eax, DWORD PTR 20[esp] | ||
| 731 | xor esi, ecx | 743 | xor esi, ecx |
| 732 | nop | 744 | nop |
| 745 | mov eax, DWORD PTR 20[esp] | ||
| 733 | mov DWORD PTR 4[eax],edi | 746 | mov DWORD PTR 4[eax],edi |
| 734 | mov DWORD PTR [eax],esi | 747 | mov DWORD PTR [eax],esi |
| 735 | pop edi | 748 | pop edi |
| @@ -767,12 +780,12 @@ _CAST_cbc_encrypt PROC NEAR | |||
| 767 | push eax | 780 | push eax |
| 768 | push ebx | 781 | push ebx |
| 769 | cmp ecx, 0 | 782 | cmp ecx, 0 |
| 770 | jz $L000decrypt | 783 | jz $L002decrypt |
| 771 | and ebp, 4294967288 | 784 | and ebp, 4294967288 |
| 772 | mov eax, DWORD PTR 8[esp] | 785 | mov eax, DWORD PTR 8[esp] |
| 773 | mov ebx, DWORD PTR 12[esp] | 786 | mov ebx, DWORD PTR 12[esp] |
| 774 | jz $L001encrypt_finish | 787 | jz $L003encrypt_finish |
| 775 | L002encrypt_loop: | 788 | L004encrypt_loop: |
| 776 | mov ecx, DWORD PTR [esi] | 789 | mov ecx, DWORD PTR [esi] |
| 777 | mov edx, DWORD PTR 4[esi] | 790 | mov edx, DWORD PTR 4[esi] |
| 778 | xor eax, ecx | 791 | xor eax, ecx |
| @@ -791,35 +804,35 @@ L002encrypt_loop: | |||
| 791 | add esi, 8 | 804 | add esi, 8 |
| 792 | add edi, 8 | 805 | add edi, 8 |
| 793 | sub ebp, 8 | 806 | sub ebp, 8 |
| 794 | jnz L002encrypt_loop | 807 | jnz L004encrypt_loop |
| 795 | $L001encrypt_finish: | 808 | $L003encrypt_finish: |
| 796 | mov ebp, DWORD PTR 52[esp] | 809 | mov ebp, DWORD PTR 52[esp] |
| 797 | and ebp, 7 | 810 | and ebp, 7 |
| 798 | jz $L003finish | 811 | jz $L005finish |
| 799 | xor ecx, ecx | 812 | xor ecx, ecx |
| 800 | xor edx, edx | 813 | xor edx, edx |
| 801 | mov ebp, DWORD PTR $L004cbc_enc_jmp_table[ebp*4] | 814 | mov ebp, DWORD PTR $L006cbc_enc_jmp_table[ebp*4] |
| 802 | jmp ebp | 815 | jmp ebp |
| 803 | L005ej7: | 816 | L007ej7: |
| 804 | xor edx, edx | 817 | xor edx, edx |
| 805 | mov dh, BYTE PTR 6[esi] | 818 | mov dh, BYTE PTR 6[esi] |
| 806 | shl edx, 8 | 819 | shl edx, 8 |
| 807 | L006ej6: | 820 | L008ej6: |
| 808 | mov dh, BYTE PTR 5[esi] | 821 | mov dh, BYTE PTR 5[esi] |
| 809 | L007ej5: | 822 | L009ej5: |
| 810 | mov dl, BYTE PTR 4[esi] | 823 | mov dl, BYTE PTR 4[esi] |
| 811 | L008ej4: | 824 | L010ej4: |
| 812 | mov ecx, DWORD PTR [esi] | 825 | mov ecx, DWORD PTR [esi] |
| 813 | jmp $L009ejend | 826 | jmp $L011ejend |
| 814 | L010ej3: | 827 | L012ej3: |
| 815 | mov ch, BYTE PTR 2[esi] | 828 | mov ch, BYTE PTR 2[esi] |
| 816 | xor ecx, ecx | 829 | xor ecx, ecx |
| 817 | shl ecx, 8 | 830 | shl ecx, 8 |
| 818 | L011ej2: | 831 | L013ej2: |
| 819 | mov ch, BYTE PTR 1[esi] | 832 | mov ch, BYTE PTR 1[esi] |
| 820 | L012ej1: | 833 | L014ej1: |
| 821 | mov cl, BYTE PTR [esi] | 834 | mov cl, BYTE PTR [esi] |
| 822 | $L009ejend: | 835 | $L011ejend: |
| 823 | xor eax, ecx | 836 | xor eax, ecx |
| 824 | xor ebx, edx | 837 | xor ebx, edx |
| 825 | bswap eax | 838 | bswap eax |
| @@ -833,13 +846,13 @@ $L009ejend: | |||
| 833 | bswap ebx | 846 | bswap ebx |
| 834 | mov DWORD PTR [edi],eax | 847 | mov DWORD PTR [edi],eax |
| 835 | mov DWORD PTR 4[edi],ebx | 848 | mov DWORD PTR 4[edi],ebx |
| 836 | jmp $L003finish | 849 | jmp $L005finish |
| 837 | $L000decrypt: | 850 | $L002decrypt: |
| 838 | and ebp, 4294967288 | 851 | and ebp, 4294967288 |
| 839 | mov eax, DWORD PTR 16[esp] | 852 | mov eax, DWORD PTR 16[esp] |
| 840 | mov ebx, DWORD PTR 20[esp] | 853 | mov ebx, DWORD PTR 20[esp] |
| 841 | jz $L013decrypt_finish | 854 | jz $L015decrypt_finish |
| 842 | L014decrypt_loop: | 855 | L016decrypt_loop: |
| 843 | mov eax, DWORD PTR [esi] | 856 | mov eax, DWORD PTR [esi] |
| 844 | mov ebx, DWORD PTR 4[esi] | 857 | mov ebx, DWORD PTR 4[esi] |
| 845 | bswap eax | 858 | bswap eax |
| @@ -864,11 +877,11 @@ L014decrypt_loop: | |||
| 864 | add esi, 8 | 877 | add esi, 8 |
| 865 | add edi, 8 | 878 | add edi, 8 |
| 866 | sub ebp, 8 | 879 | sub ebp, 8 |
| 867 | jnz L014decrypt_loop | 880 | jnz L016decrypt_loop |
| 868 | $L013decrypt_finish: | 881 | $L015decrypt_finish: |
| 869 | mov ebp, DWORD PTR 52[esp] | 882 | mov ebp, DWORD PTR 52[esp] |
| 870 | and ebp, 7 | 883 | and ebp, 7 |
| 871 | jz $L003finish | 884 | jz $L005finish |
| 872 | mov eax, DWORD PTR [esi] | 885 | mov eax, DWORD PTR [esi] |
| 873 | mov ebx, DWORD PTR 4[esi] | 886 | mov ebx, DWORD PTR 4[esi] |
| 874 | bswap eax | 887 | bswap eax |
| @@ -886,28 +899,28 @@ $L013decrypt_finish: | |||
| 886 | xor edx, ebx | 899 | xor edx, ebx |
| 887 | mov eax, DWORD PTR [esi] | 900 | mov eax, DWORD PTR [esi] |
| 888 | mov ebx, DWORD PTR 4[esi] | 901 | mov ebx, DWORD PTR 4[esi] |
| 889 | L015dj7: | 902 | L017dj7: |
| 890 | ror edx, 16 | 903 | ror edx, 16 |
| 891 | mov BYTE PTR 6[edi],dl | 904 | mov BYTE PTR 6[edi],dl |
| 892 | shr edx, 16 | 905 | shr edx, 16 |
| 893 | L016dj6: | 906 | L018dj6: |
| 894 | mov BYTE PTR 5[edi],dh | 907 | mov BYTE PTR 5[edi],dh |
| 895 | L017dj5: | 908 | L019dj5: |
| 896 | mov BYTE PTR 4[edi],dl | 909 | mov BYTE PTR 4[edi],dl |
| 897 | L018dj4: | 910 | L020dj4: |
| 898 | mov DWORD PTR [edi],ecx | 911 | mov DWORD PTR [edi],ecx |
| 899 | jmp $L019djend | 912 | jmp $L021djend |
| 900 | L020dj3: | 913 | L022dj3: |
| 901 | ror ecx, 16 | 914 | ror ecx, 16 |
| 902 | mov BYTE PTR 2[edi],cl | 915 | mov BYTE PTR 2[edi],cl |
| 903 | shl ecx, 16 | 916 | shl ecx, 16 |
| 904 | L021dj2: | 917 | L023dj2: |
| 905 | mov BYTE PTR 1[esi],ch | 918 | mov BYTE PTR 1[esi],ch |
| 906 | L022dj1: | 919 | L024dj1: |
| 907 | mov BYTE PTR [esi], cl | 920 | mov BYTE PTR [esi], cl |
| 908 | $L019djend: | 921 | $L021djend: |
| 909 | jmp $L003finish | 922 | jmp $L005finish |
| 910 | $L003finish: | 923 | $L005finish: |
| 911 | mov ecx, DWORD PTR 60[esp] | 924 | mov ecx, DWORD PTR 60[esp] |
| 912 | add esp, 24 | 925 | add esp, 24 |
| 913 | mov DWORD PTR [ecx],eax | 926 | mov DWORD PTR [ecx],eax |
| @@ -917,24 +930,24 @@ $L003finish: | |||
| 917 | pop ebx | 930 | pop ebx |
| 918 | pop ebp | 931 | pop ebp |
| 919 | ret | 932 | ret |
| 920 | $L004cbc_enc_jmp_table: | 933 | $L006cbc_enc_jmp_table: |
| 921 | DD 0 | 934 | DD 0 |
| 922 | DD L012ej1 | 935 | DD L014ej1 |
| 923 | DD L011ej2 | 936 | DD L013ej2 |
| 924 | DD L010ej3 | 937 | DD L012ej3 |
| 925 | DD L008ej4 | 938 | DD L010ej4 |
| 926 | DD L007ej5 | 939 | DD L009ej5 |
| 927 | DD L006ej6 | 940 | DD L008ej6 |
| 928 | DD L005ej7 | 941 | DD L007ej7 |
| 929 | L023cbc_dec_jmp_table: | 942 | L025cbc_dec_jmp_table: |
| 930 | DD 0 | 943 | DD 0 |
| 931 | DD L022dj1 | 944 | DD L024dj1 |
| 932 | DD L021dj2 | 945 | DD L023dj2 |
| 933 | DD L020dj3 | 946 | DD L022dj3 |
| 934 | DD L018dj4 | 947 | DD L020dj4 |
| 935 | DD L017dj5 | 948 | DD L019dj5 |
| 936 | DD L016dj6 | 949 | DD L018dj6 |
| 937 | DD L015dj7 | 950 | DD L017dj7 |
| 938 | _CAST_cbc_encrypt ENDP | 951 | _CAST_cbc_encrypt ENDP |
| 939 | _TEXT ENDS | 952 | _TEXT ENDS |
| 940 | END | 953 | END |
diff --git a/src/lib/libcrypto/cast/asm/cast-586.pl b/src/lib/libcrypto/cast/asm/cast-586.pl index d0be004c99..6be0bfe572 100644 --- a/src/lib/libcrypto/cast/asm/cast-586.pl +++ b/src/lib/libcrypto/cast/asm/cast-586.pl | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | #!/usr/bin/perl | 1 | #!/usr/local/bin/perl |
| 2 | 2 | ||
| 3 | # define for pentium pro friendly version | 3 | # define for pentium pro friendly version |
| 4 | $ppro=1; | 4 | $ppro=1; |
| @@ -7,7 +7,7 @@ push(@INC,"perlasm","../../perlasm"); | |||
| 7 | require "x86asm.pl"; | 7 | require "x86asm.pl"; |
| 8 | require "cbc.pl"; | 8 | require "cbc.pl"; |
| 9 | 9 | ||
| 10 | &asm_init($ARGV[0],"cast-586.pl"); | 10 | &asm_init($ARGV[0],"cast-586.pl",$ARGV[$#ARGV] eq "386"); |
| 11 | 11 | ||
| 12 | $CAST_ROUNDS=16; | 12 | $CAST_ROUNDS=16; |
| 13 | $L="edi"; | 13 | $L="edi"; |
| @@ -32,136 +32,145 @@ $S4="CAST_S_table3"; | |||
| 32 | 32 | ||
| 33 | &asm_finish(); | 33 | &asm_finish(); |
| 34 | 34 | ||
| 35 | sub CAST_encrypt | 35 | sub CAST_encrypt { |
| 36 | { | 36 | local($name,$enc)=@_; |
| 37 | local($name,$enc)=@_; | ||
| 38 | 37 | ||
| 39 | local($win_ex)=<<"EOF"; | 38 | local($win_ex)=<<"EOF"; |
| 40 | EXTERN _CAST_S_table0:DWORD | 39 | EXTERN _CAST_S_table0:DWORD |
| 41 | EXTERN _CAST_S_table1:DWORD | 40 | EXTERN _CAST_S_table1:DWORD |
| 42 | EXTERN _CAST_S_table2:DWORD | 41 | EXTERN _CAST_S_table2:DWORD |
| 43 | EXTERN _CAST_S_table3:DWORD | 42 | EXTERN _CAST_S_table3:DWORD |
| 44 | EOF | 43 | EOF |
| 45 | &main'external_label( | 44 | &main::external_label( |
| 46 | "CAST_S_table0", | 45 | "CAST_S_table0", |
| 47 | "CAST_S_table1", | 46 | "CAST_S_table1", |
| 48 | "CAST_S_table2", | 47 | "CAST_S_table2", |
| 49 | "CAST_S_table3", | 48 | "CAST_S_table3", |
| 50 | ); | 49 | ); |
| 51 | 50 | ||
| 52 | &function_begin_B($name,$win_ex); | 51 | &function_begin_B($name,$win_ex); |
| 53 | 52 | ||
| 54 | &comment(""); | 53 | &comment(""); |
| 55 | 54 | ||
| 56 | &push("ebp"); | 55 | &push("ebp"); |
| 57 | &push("ebx"); | 56 | &push("ebx"); |
| 58 | &mov($tmp2,&wparam(0)); | 57 | &mov($tmp2,&wparam(0)); |
| 59 | &mov($K,&wparam(1)); | 58 | &mov($K,&wparam(1)); |
| 60 | &push("esi"); | 59 | &push("esi"); |
| 61 | &push("edi"); | 60 | &push("edi"); |
| 62 | 61 | ||
| 63 | &comment("Load the 2 words"); | 62 | &comment("Load the 2 words"); |
| 64 | &mov($L,&DWP(0,$tmp2,"",0)); | 63 | &mov($L,&DWP(0,$tmp2,"",0)); |
| 65 | &mov($R,&DWP(4,$tmp2,"",0)); | 64 | &mov($R,&DWP(4,$tmp2,"",0)); |
| 66 | 65 | ||
| 67 | &xor( $tmp3, $tmp3); | 66 | &comment('Get short key flag'); |
| 68 | 67 | &mov($tmp3,&DWP(128,$K,"",0)); | |
| 69 | # encrypting part | 68 | if($enc) { |
| 70 | 69 | &push($tmp3); | |
| 71 | if ($enc) | 70 | } else { |
| 72 | { | 71 | &or($tmp3,$tmp3); |
| 73 | &E_CAST( 0,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | 72 | &jnz(&label('cast_dec_skip')); |
| 74 | &E_CAST( 1,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); | 73 | } |
| 75 | &E_CAST( 2,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); | 74 | |
| 76 | &E_CAST( 3,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | 75 | &xor($tmp3, $tmp3); |
| 77 | &E_CAST( 4,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); | 76 | |
| 78 | &E_CAST( 5,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); | 77 | # encrypting part |
| 79 | &E_CAST( 6,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | 78 | |
| 80 | &E_CAST( 7,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); | 79 | if ($enc) { |
| 81 | &E_CAST( 8,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); | 80 | &E_CAST( 0,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); |
| 82 | &E_CAST( 9,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | 81 | &E_CAST( 1,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); |
| 83 | &E_CAST(10,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); | 82 | &E_CAST( 2,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); |
| 84 | &E_CAST(11,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); | 83 | &E_CAST( 3,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); |
| 85 | &E_CAST(12,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | 84 | &E_CAST( 4,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); |
| 86 | &E_CAST(13,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); | 85 | &E_CAST( 5,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); |
| 87 | &E_CAST(14,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); | 86 | &E_CAST( 6,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); |
| 88 | &E_CAST(15,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4,1); | 87 | &E_CAST( 7,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); |
| 89 | } | 88 | &E_CAST( 8,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); |
| 90 | else | 89 | &E_CAST( 9,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); |
| 91 | { | 90 | &E_CAST(10,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); |
| 92 | &E_CAST(15,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | 91 | &E_CAST(11,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); |
| 93 | &E_CAST(14,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); | 92 | &comment('test short key flag'); |
| 94 | &E_CAST(13,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); | 93 | &pop($tmp4); |
| 95 | &E_CAST(12,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | 94 | &or($tmp4,$tmp4); |
| 96 | &E_CAST(11,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); | 95 | &jnz(&label('cast_enc_done')); |
| 97 | &E_CAST(10,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); | 96 | &E_CAST(12,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); |
| 98 | &E_CAST( 9,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | 97 | &E_CAST(13,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); |
| 99 | &E_CAST( 8,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); | 98 | &E_CAST(14,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); |
| 100 | &E_CAST( 7,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); | 99 | &E_CAST(15,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); |
| 101 | &E_CAST( 6,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | 100 | } else { |
| 102 | &E_CAST( 5,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); | 101 | &E_CAST(15,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); |
| 103 | &E_CAST( 4,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); | 102 | &E_CAST(14,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); |
| 104 | &E_CAST( 3,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | 103 | &E_CAST(13,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); |
| 105 | &E_CAST( 2,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); | 104 | &E_CAST(12,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); |
| 106 | &E_CAST( 1,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); | 105 | &set_label('cast_dec_skip'); |
| 107 | &E_CAST( 0,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4,1); | 106 | &E_CAST(11,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); |
| 108 | } | 107 | &E_CAST(10,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); |
| 109 | 108 | &E_CAST( 9,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | |
| 110 | &nop(); | 109 | &E_CAST( 8,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); |
| 111 | &mov(&DWP(4,$tmp3,"",0),$L); | 110 | &E_CAST( 7,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); |
| 112 | &mov(&DWP(0,$tmp3,"",0),$R); | 111 | &E_CAST( 6,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); |
| 113 | &function_end($name); | 112 | &E_CAST( 5,$S,$L,$R,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); |
| 114 | } | 113 | &E_CAST( 4,$S,$R,$L,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); |
| 115 | 114 | &E_CAST( 3,$S,$L,$R,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); | |
| 116 | sub E_CAST | 115 | &E_CAST( 2,$S,$R,$L,$K,@F3,$tmp1,$tmp2,$tmp3,$tmp4); |
| 117 | { | 116 | &E_CAST( 1,$S,$L,$R,$K,@F2,$tmp1,$tmp2,$tmp3,$tmp4); |
| 118 | local($i,$S,$L,$R,$K,$OP1,$OP2,$OP3,$tmp1,$tmp2,$tmp3,$tmp4,$lst)=@_; | 117 | &E_CAST( 0,$S,$R,$L,$K,@F1,$tmp1,$tmp2,$tmp3,$tmp4); |
| 119 | # Ri needs to have 16 pre added. | 118 | } |
| 120 | 119 | ||
| 121 | &comment("round $i"); | 120 | &set_label('cast_enc_done') if $enc; |
| 122 | &mov( $tmp4, &DWP($i*8,$K,"",1)); | 121 | # Why the nop? - Ben 17/1/99 |
| 123 | 122 | &nop(); | |
| 124 | &mov( $tmp1, &DWP($i*8+4,$K,"",1));# must be word | 123 | &mov($tmp3,&wparam(0)); |
| 125 | &$OP1( $tmp4, $R); | 124 | &mov(&DWP(4,$tmp3,"",0),$L); |
| 126 | 125 | &mov(&DWP(0,$tmp3,"",0),$R); | |
| 127 | &rotl( $tmp4, &LB($tmp1)); | 126 | &function_end($name); |
| 128 | 127 | } | |
| 129 | if ($ppro) | 128 | |
| 130 | { | 129 | sub E_CAST { |
| 131 | &mov( $tmp2, $tmp4); # B | 130 | local($i,$S,$L,$R,$K,$OP1,$OP2,$OP3,$tmp1,$tmp2,$tmp3,$tmp4)=@_; |
| 132 | &xor( $tmp1, $tmp1); | 131 | # Ri needs to have 16 pre added. |
| 133 | 132 | ||
| 134 | &movb( &LB($tmp1), &HB($tmp4)); # A | 133 | &comment("round $i"); |
| 135 | &and( $tmp2, 0xff); | 134 | &mov( $tmp4, &DWP($i*8,$K,"",1)); |
| 136 | 135 | ||
| 137 | &shr( $tmp4, 16); # | 136 | &mov( $tmp1, &DWP($i*8+4,$K,"",1)); |
| 138 | &xor( $tmp3, $tmp3); | 137 | &$OP1( $tmp4, $R); |
| 139 | } | 138 | |
| 140 | else | 139 | &rotl( $tmp4, &LB($tmp1)); |
| 141 | { | 140 | |
| 142 | &mov( $tmp2, $tmp4); # B | 141 | if ($ppro) { |
| 143 | &movb( &LB($tmp1), &HB($tmp4)); # A # BAD BAD BAD | 142 | &mov( $tmp2, $tmp4); # B |
| 144 | 143 | &xor( $tmp1, $tmp1); | |
| 145 | &shr( $tmp4, 16); # | 144 | |
| 146 | &and( $tmp2, 0xff); | 145 | &movb( &LB($tmp1), &HB($tmp4)); # A |
| 147 | } | 146 | &and( $tmp2, 0xff); |
| 148 | 147 | ||
| 149 | &movb( &LB($tmp3), &HB($tmp4)); # C # BAD BAD BAD | 148 | &shr( $tmp4, 16); # |
| 150 | &and( $tmp4, 0xff); # D | 149 | &xor( $tmp3, $tmp3); |
| 151 | 150 | } else { | |
| 152 | &mov( $tmp1, &DWP($S1,"",$tmp1,4)); | 151 | &mov( $tmp2, $tmp4); # B |
| 153 | &mov( $tmp2, &DWP($S2,"",$tmp2,4)); | 152 | &movb( &LB($tmp1), &HB($tmp4)); # A # BAD BAD BAD |
| 154 | 153 | ||
| 155 | &$OP2( $tmp1, $tmp2); | 154 | &shr( $tmp4, 16); # |
| 156 | &mov( $tmp2, &DWP($S3,"",$tmp3,4)); | 155 | &and( $tmp2, 0xff); |
| 157 | 156 | } | |
| 158 | &$OP3( $tmp1, $tmp2); | 157 | |
| 159 | &mov( $tmp2, &DWP($S4,"",$tmp4,4)); | 158 | &movb( &LB($tmp3), &HB($tmp4)); # C # BAD BAD BAD |
| 160 | 159 | &and( $tmp4, 0xff); # D | |
| 161 | &$OP1( $tmp1, $tmp2); | 160 | |
| 162 | &mov($tmp3,&wparam(0)) if $lst; | 161 | &mov( $tmp1, &DWP($S1,"",$tmp1,4)); |
| 163 | # XXX | 162 | &mov( $tmp2, &DWP($S2,"",$tmp2,4)); |
| 164 | 163 | ||
| 165 | &xor( $L, $tmp1); | 164 | &$OP2( $tmp1, $tmp2); |
| 166 | # XXX | 165 | &mov( $tmp2, &DWP($S3,"",$tmp3,4)); |
| 167 | } | 166 | |
| 167 | &$OP3( $tmp1, $tmp2); | ||
| 168 | &mov( $tmp2, &DWP($S4,"",$tmp4,4)); | ||
| 169 | |||
| 170 | &$OP1( $tmp1, $tmp2); | ||
| 171 | # XXX | ||
| 172 | |||
| 173 | &xor( $L, $tmp1); | ||
| 174 | # XXX | ||
| 175 | } | ||
| 176 | |||
diff --git a/src/lib/libcrypto/cast/asm/cx86unix.cpp b/src/lib/libcrypto/cast/asm/cx86unix.cpp deleted file mode 100644 index 035692a5af..0000000000 --- a/src/lib/libcrypto/cast/asm/cx86unix.cpp +++ /dev/null | |||
| @@ -1,1010 +0,0 @@ | |||
| 1 | /* Run the C pre-processor over this file with one of the following defined | ||
| 2 | * ELF - elf object files, | ||
| 3 | * OUT - a.out object files, | ||
| 4 | * BSDI - BSDI style a.out object files | ||
| 5 | * SOL - Solaris style elf | ||
| 6 | */ | ||
| 7 | |||
| 8 | #define TYPE(a,b) .type a,b | ||
| 9 | #define SIZE(a,b) .size a,b | ||
| 10 | |||
| 11 | #if defined(OUT) || defined(BSDI) | ||
| 12 | #define CAST_S_table0 _CAST_S_table0 | ||
| 13 | #define CAST_S_table1 _CAST_S_table1 | ||
| 14 | #define CAST_S_table2 _CAST_S_table2 | ||
| 15 | #define CAST_S_table3 _CAST_S_table3 | ||
| 16 | #define CAST_encrypt _CAST_encrypt | ||
| 17 | #define CAST_S_table0 _CAST_S_table0 | ||
| 18 | #define CAST_S_table1 _CAST_S_table1 | ||
| 19 | #define CAST_S_table2 _CAST_S_table2 | ||
| 20 | #define CAST_S_table3 _CAST_S_table3 | ||
| 21 | #define CAST_decrypt _CAST_decrypt | ||
| 22 | #define CAST_cbc_encrypt _CAST_cbc_encrypt | ||
| 23 | |||
| 24 | #endif | ||
| 25 | |||
| 26 | #ifdef OUT | ||
| 27 | #define OK 1 | ||
| 28 | #define ALIGN 4 | ||
| 29 | #endif | ||
| 30 | |||
| 31 | #ifdef BSDI | ||
| 32 | #define OK 1 | ||
| 33 | #define ALIGN 4 | ||
| 34 | #undef SIZE | ||
| 35 | #undef TYPE | ||
| 36 | #define SIZE(a,b) | ||
| 37 | #define TYPE(a,b) | ||
| 38 | #endif | ||
| 39 | |||
| 40 | #if defined(ELF) || defined(SOL) | ||
| 41 | #define OK 1 | ||
| 42 | #define ALIGN 16 | ||
| 43 | #endif | ||
| 44 | |||
| 45 | #ifndef OK | ||
| 46 | You need to define one of | ||
| 47 | ELF - elf systems - linux-elf, NetBSD and DG-UX | ||
| 48 | OUT - a.out systems - linux-a.out and FreeBSD | ||
| 49 | SOL - solaris systems, which are elf with strange comment lines | ||
| 50 | BSDI - a.out with a very primative version of as. | ||
| 51 | #endif | ||
| 52 | |||
| 53 | /* Let the Assembler begin :-) */ | ||
| 54 | /* Don't even think of reading this code */ | ||
| 55 | /* It was automatically generated by cast-586.pl */ | ||
| 56 | /* Which is a perl program used to generate the x86 assember for */ | ||
| 57 | /* any of elf, a.out, BSDI,Win32, or Solaris */ | ||
| 58 | /* eric <eay@cryptsoft.com> */ | ||
| 59 | |||
| 60 | .file "cast-586.s" | ||
| 61 | .version "01.01" | ||
| 62 | gcc2_compiled.: | ||
| 63 | .text | ||
| 64 | .align ALIGN | ||
| 65 | .globl CAST_encrypt | ||
| 66 | TYPE(CAST_encrypt,@function) | ||
| 67 | CAST_encrypt: | ||
| 68 | |||
| 69 | pushl %ebp | ||
| 70 | pushl %ebx | ||
| 71 | movl 12(%esp), %ebx | ||
| 72 | movl 16(%esp), %ebp | ||
| 73 | pushl %esi | ||
| 74 | pushl %edi | ||
| 75 | /* Load the 2 words */ | ||
| 76 | movl (%ebx), %edi | ||
| 77 | movl 4(%ebx), %esi | ||
| 78 | xorl %eax, %eax | ||
| 79 | /* round 0 */ | ||
| 80 | movl (%ebp), %edx | ||
| 81 | movl 4(%ebp), %ecx | ||
| 82 | addl %esi, %edx | ||
| 83 | roll %cl, %edx | ||
| 84 | movl %edx, %ebx | ||
| 85 | xorl %ecx, %ecx | ||
| 86 | movb %dh, %cl | ||
| 87 | andl $255, %ebx | ||
| 88 | shrl $16, %edx | ||
| 89 | xorl %eax, %eax | ||
| 90 | movb %dh, %al | ||
| 91 | andl $255, %edx | ||
| 92 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 93 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 94 | xorl %ebx, %ecx | ||
| 95 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 96 | subl %ebx, %ecx | ||
| 97 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 98 | addl %ebx, %ecx | ||
| 99 | xorl %ecx, %edi | ||
| 100 | /* round 1 */ | ||
| 101 | movl 8(%ebp), %edx | ||
| 102 | movl 12(%ebp), %ecx | ||
| 103 | xorl %edi, %edx | ||
| 104 | roll %cl, %edx | ||
| 105 | movl %edx, %ebx | ||
| 106 | xorl %ecx, %ecx | ||
| 107 | movb %dh, %cl | ||
| 108 | andl $255, %ebx | ||
| 109 | shrl $16, %edx | ||
| 110 | xorl %eax, %eax | ||
| 111 | movb %dh, %al | ||
| 112 | andl $255, %edx | ||
| 113 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 114 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 115 | subl %ebx, %ecx | ||
| 116 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 117 | addl %ebx, %ecx | ||
| 118 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 119 | xorl %ebx, %ecx | ||
| 120 | xorl %ecx, %esi | ||
| 121 | /* round 2 */ | ||
| 122 | movl 16(%ebp), %edx | ||
| 123 | movl 20(%ebp), %ecx | ||
| 124 | subl %esi, %edx | ||
| 125 | roll %cl, %edx | ||
| 126 | movl %edx, %ebx | ||
| 127 | xorl %ecx, %ecx | ||
| 128 | movb %dh, %cl | ||
| 129 | andl $255, %ebx | ||
| 130 | shrl $16, %edx | ||
| 131 | xorl %eax, %eax | ||
| 132 | movb %dh, %al | ||
| 133 | andl $255, %edx | ||
| 134 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 135 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 136 | addl %ebx, %ecx | ||
| 137 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 138 | xorl %ebx, %ecx | ||
| 139 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 140 | subl %ebx, %ecx | ||
| 141 | xorl %ecx, %edi | ||
| 142 | /* round 3 */ | ||
| 143 | movl 24(%ebp), %edx | ||
| 144 | movl 28(%ebp), %ecx | ||
| 145 | addl %edi, %edx | ||
| 146 | roll %cl, %edx | ||
| 147 | movl %edx, %ebx | ||
| 148 | xorl %ecx, %ecx | ||
| 149 | movb %dh, %cl | ||
| 150 | andl $255, %ebx | ||
| 151 | shrl $16, %edx | ||
| 152 | xorl %eax, %eax | ||
| 153 | movb %dh, %al | ||
| 154 | andl $255, %edx | ||
| 155 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 156 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 157 | xorl %ebx, %ecx | ||
| 158 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 159 | subl %ebx, %ecx | ||
| 160 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 161 | addl %ebx, %ecx | ||
| 162 | xorl %ecx, %esi | ||
| 163 | /* round 4 */ | ||
| 164 | movl 32(%ebp), %edx | ||
| 165 | movl 36(%ebp), %ecx | ||
| 166 | xorl %esi, %edx | ||
| 167 | roll %cl, %edx | ||
| 168 | movl %edx, %ebx | ||
| 169 | xorl %ecx, %ecx | ||
| 170 | movb %dh, %cl | ||
| 171 | andl $255, %ebx | ||
| 172 | shrl $16, %edx | ||
| 173 | xorl %eax, %eax | ||
| 174 | movb %dh, %al | ||
| 175 | andl $255, %edx | ||
| 176 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 177 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 178 | subl %ebx, %ecx | ||
| 179 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 180 | addl %ebx, %ecx | ||
| 181 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 182 | xorl %ebx, %ecx | ||
| 183 | xorl %ecx, %edi | ||
| 184 | /* round 5 */ | ||
| 185 | movl 40(%ebp), %edx | ||
| 186 | movl 44(%ebp), %ecx | ||
| 187 | subl %edi, %edx | ||
| 188 | roll %cl, %edx | ||
| 189 | movl %edx, %ebx | ||
| 190 | xorl %ecx, %ecx | ||
| 191 | movb %dh, %cl | ||
| 192 | andl $255, %ebx | ||
| 193 | shrl $16, %edx | ||
| 194 | xorl %eax, %eax | ||
| 195 | movb %dh, %al | ||
| 196 | andl $255, %edx | ||
| 197 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 198 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 199 | addl %ebx, %ecx | ||
| 200 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 201 | xorl %ebx, %ecx | ||
| 202 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 203 | subl %ebx, %ecx | ||
| 204 | xorl %ecx, %esi | ||
| 205 | /* round 6 */ | ||
| 206 | movl 48(%ebp), %edx | ||
| 207 | movl 52(%ebp), %ecx | ||
| 208 | addl %esi, %edx | ||
| 209 | roll %cl, %edx | ||
| 210 | movl %edx, %ebx | ||
| 211 | xorl %ecx, %ecx | ||
| 212 | movb %dh, %cl | ||
| 213 | andl $255, %ebx | ||
| 214 | shrl $16, %edx | ||
| 215 | xorl %eax, %eax | ||
| 216 | movb %dh, %al | ||
| 217 | andl $255, %edx | ||
| 218 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 219 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 220 | xorl %ebx, %ecx | ||
| 221 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 222 | subl %ebx, %ecx | ||
| 223 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 224 | addl %ebx, %ecx | ||
| 225 | xorl %ecx, %edi | ||
| 226 | /* round 7 */ | ||
| 227 | movl 56(%ebp), %edx | ||
| 228 | movl 60(%ebp), %ecx | ||
| 229 | xorl %edi, %edx | ||
| 230 | roll %cl, %edx | ||
| 231 | movl %edx, %ebx | ||
| 232 | xorl %ecx, %ecx | ||
| 233 | movb %dh, %cl | ||
| 234 | andl $255, %ebx | ||
| 235 | shrl $16, %edx | ||
| 236 | xorl %eax, %eax | ||
| 237 | movb %dh, %al | ||
| 238 | andl $255, %edx | ||
| 239 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 240 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 241 | subl %ebx, %ecx | ||
| 242 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 243 | addl %ebx, %ecx | ||
| 244 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 245 | xorl %ebx, %ecx | ||
| 246 | xorl %ecx, %esi | ||
| 247 | /* round 8 */ | ||
| 248 | movl 64(%ebp), %edx | ||
| 249 | movl 68(%ebp), %ecx | ||
| 250 | subl %esi, %edx | ||
| 251 | roll %cl, %edx | ||
| 252 | movl %edx, %ebx | ||
| 253 | xorl %ecx, %ecx | ||
| 254 | movb %dh, %cl | ||
| 255 | andl $255, %ebx | ||
| 256 | shrl $16, %edx | ||
| 257 | xorl %eax, %eax | ||
| 258 | movb %dh, %al | ||
| 259 | andl $255, %edx | ||
| 260 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 261 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 262 | addl %ebx, %ecx | ||
| 263 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 264 | xorl %ebx, %ecx | ||
| 265 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 266 | subl %ebx, %ecx | ||
| 267 | xorl %ecx, %edi | ||
| 268 | /* round 9 */ | ||
| 269 | movl 72(%ebp), %edx | ||
| 270 | movl 76(%ebp), %ecx | ||
| 271 | addl %edi, %edx | ||
| 272 | roll %cl, %edx | ||
| 273 | movl %edx, %ebx | ||
| 274 | xorl %ecx, %ecx | ||
| 275 | movb %dh, %cl | ||
| 276 | andl $255, %ebx | ||
| 277 | shrl $16, %edx | ||
| 278 | xorl %eax, %eax | ||
| 279 | movb %dh, %al | ||
| 280 | andl $255, %edx | ||
| 281 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 282 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 283 | xorl %ebx, %ecx | ||
| 284 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 285 | subl %ebx, %ecx | ||
| 286 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 287 | addl %ebx, %ecx | ||
| 288 | xorl %ecx, %esi | ||
| 289 | /* round 10 */ | ||
| 290 | movl 80(%ebp), %edx | ||
| 291 | movl 84(%ebp), %ecx | ||
| 292 | xorl %esi, %edx | ||
| 293 | roll %cl, %edx | ||
| 294 | movl %edx, %ebx | ||
| 295 | xorl %ecx, %ecx | ||
| 296 | movb %dh, %cl | ||
| 297 | andl $255, %ebx | ||
| 298 | shrl $16, %edx | ||
| 299 | xorl %eax, %eax | ||
| 300 | movb %dh, %al | ||
| 301 | andl $255, %edx | ||
| 302 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 303 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 304 | subl %ebx, %ecx | ||
| 305 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 306 | addl %ebx, %ecx | ||
| 307 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 308 | xorl %ebx, %ecx | ||
| 309 | xorl %ecx, %edi | ||
| 310 | /* round 11 */ | ||
| 311 | movl 88(%ebp), %edx | ||
| 312 | movl 92(%ebp), %ecx | ||
| 313 | subl %edi, %edx | ||
| 314 | roll %cl, %edx | ||
| 315 | movl %edx, %ebx | ||
| 316 | xorl %ecx, %ecx | ||
| 317 | movb %dh, %cl | ||
| 318 | andl $255, %ebx | ||
| 319 | shrl $16, %edx | ||
| 320 | xorl %eax, %eax | ||
| 321 | movb %dh, %al | ||
| 322 | andl $255, %edx | ||
| 323 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 324 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 325 | addl %ebx, %ecx | ||
| 326 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 327 | xorl %ebx, %ecx | ||
| 328 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 329 | subl %ebx, %ecx | ||
| 330 | xorl %ecx, %esi | ||
| 331 | /* round 12 */ | ||
| 332 | movl 96(%ebp), %edx | ||
| 333 | movl 100(%ebp), %ecx | ||
| 334 | addl %esi, %edx | ||
| 335 | roll %cl, %edx | ||
| 336 | movl %edx, %ebx | ||
| 337 | xorl %ecx, %ecx | ||
| 338 | movb %dh, %cl | ||
| 339 | andl $255, %ebx | ||
| 340 | shrl $16, %edx | ||
| 341 | xorl %eax, %eax | ||
| 342 | movb %dh, %al | ||
| 343 | andl $255, %edx | ||
| 344 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 345 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 346 | xorl %ebx, %ecx | ||
| 347 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 348 | subl %ebx, %ecx | ||
| 349 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 350 | addl %ebx, %ecx | ||
| 351 | xorl %ecx, %edi | ||
| 352 | /* round 13 */ | ||
| 353 | movl 104(%ebp), %edx | ||
| 354 | movl 108(%ebp), %ecx | ||
| 355 | xorl %edi, %edx | ||
| 356 | roll %cl, %edx | ||
| 357 | movl %edx, %ebx | ||
| 358 | xorl %ecx, %ecx | ||
| 359 | movb %dh, %cl | ||
| 360 | andl $255, %ebx | ||
| 361 | shrl $16, %edx | ||
| 362 | xorl %eax, %eax | ||
| 363 | movb %dh, %al | ||
| 364 | andl $255, %edx | ||
| 365 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 366 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 367 | subl %ebx, %ecx | ||
| 368 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 369 | addl %ebx, %ecx | ||
| 370 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 371 | xorl %ebx, %ecx | ||
| 372 | xorl %ecx, %esi | ||
| 373 | /* round 14 */ | ||
| 374 | movl 112(%ebp), %edx | ||
| 375 | movl 116(%ebp), %ecx | ||
| 376 | subl %esi, %edx | ||
| 377 | roll %cl, %edx | ||
| 378 | movl %edx, %ebx | ||
| 379 | xorl %ecx, %ecx | ||
| 380 | movb %dh, %cl | ||
| 381 | andl $255, %ebx | ||
| 382 | shrl $16, %edx | ||
| 383 | xorl %eax, %eax | ||
| 384 | movb %dh, %al | ||
| 385 | andl $255, %edx | ||
| 386 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 387 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 388 | addl %ebx, %ecx | ||
| 389 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 390 | xorl %ebx, %ecx | ||
| 391 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 392 | subl %ebx, %ecx | ||
| 393 | xorl %ecx, %edi | ||
| 394 | /* round 15 */ | ||
| 395 | movl 120(%ebp), %edx | ||
| 396 | movl 124(%ebp), %ecx | ||
| 397 | addl %edi, %edx | ||
| 398 | roll %cl, %edx | ||
| 399 | movl %edx, %ebx | ||
| 400 | xorl %ecx, %ecx | ||
| 401 | movb %dh, %cl | ||
| 402 | andl $255, %ebx | ||
| 403 | shrl $16, %edx | ||
| 404 | xorl %eax, %eax | ||
| 405 | movb %dh, %al | ||
| 406 | andl $255, %edx | ||
| 407 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 408 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 409 | xorl %ebx, %ecx | ||
| 410 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 411 | subl %ebx, %ecx | ||
| 412 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 413 | addl %ebx, %ecx | ||
| 414 | movl 20(%esp), %eax | ||
| 415 | xorl %ecx, %esi | ||
| 416 | nop | ||
| 417 | movl %edi, 4(%eax) | ||
| 418 | movl %esi, (%eax) | ||
| 419 | popl %edi | ||
| 420 | popl %esi | ||
| 421 | popl %ebx | ||
| 422 | popl %ebp | ||
| 423 | ret | ||
| 424 | .CAST_encrypt_end: | ||
| 425 | SIZE(CAST_encrypt,.CAST_encrypt_end-CAST_encrypt) | ||
| 426 | .ident "CAST_encrypt" | ||
| 427 | .text | ||
| 428 | .align ALIGN | ||
| 429 | .globl CAST_decrypt | ||
| 430 | TYPE(CAST_decrypt,@function) | ||
| 431 | CAST_decrypt: | ||
| 432 | |||
| 433 | pushl %ebp | ||
| 434 | pushl %ebx | ||
| 435 | movl 12(%esp), %ebx | ||
| 436 | movl 16(%esp), %ebp | ||
| 437 | pushl %esi | ||
| 438 | pushl %edi | ||
| 439 | /* Load the 2 words */ | ||
| 440 | movl (%ebx), %edi | ||
| 441 | movl 4(%ebx), %esi | ||
| 442 | xorl %eax, %eax | ||
| 443 | /* round 15 */ | ||
| 444 | movl 120(%ebp), %edx | ||
| 445 | movl 124(%ebp), %ecx | ||
| 446 | addl %esi, %edx | ||
| 447 | roll %cl, %edx | ||
| 448 | movl %edx, %ebx | ||
| 449 | xorl %ecx, %ecx | ||
| 450 | movb %dh, %cl | ||
| 451 | andl $255, %ebx | ||
| 452 | shrl $16, %edx | ||
| 453 | xorl %eax, %eax | ||
| 454 | movb %dh, %al | ||
| 455 | andl $255, %edx | ||
| 456 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 457 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 458 | xorl %ebx, %ecx | ||
| 459 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 460 | subl %ebx, %ecx | ||
| 461 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 462 | addl %ebx, %ecx | ||
| 463 | xorl %ecx, %edi | ||
| 464 | /* round 14 */ | ||
| 465 | movl 112(%ebp), %edx | ||
| 466 | movl 116(%ebp), %ecx | ||
| 467 | subl %edi, %edx | ||
| 468 | roll %cl, %edx | ||
| 469 | movl %edx, %ebx | ||
| 470 | xorl %ecx, %ecx | ||
| 471 | movb %dh, %cl | ||
| 472 | andl $255, %ebx | ||
| 473 | shrl $16, %edx | ||
| 474 | xorl %eax, %eax | ||
| 475 | movb %dh, %al | ||
| 476 | andl $255, %edx | ||
| 477 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 478 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 479 | addl %ebx, %ecx | ||
| 480 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 481 | xorl %ebx, %ecx | ||
| 482 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 483 | subl %ebx, %ecx | ||
| 484 | xorl %ecx, %esi | ||
| 485 | /* round 13 */ | ||
| 486 | movl 104(%ebp), %edx | ||
| 487 | movl 108(%ebp), %ecx | ||
| 488 | xorl %esi, %edx | ||
| 489 | roll %cl, %edx | ||
| 490 | movl %edx, %ebx | ||
| 491 | xorl %ecx, %ecx | ||
| 492 | movb %dh, %cl | ||
| 493 | andl $255, %ebx | ||
| 494 | shrl $16, %edx | ||
| 495 | xorl %eax, %eax | ||
| 496 | movb %dh, %al | ||
| 497 | andl $255, %edx | ||
| 498 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 499 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 500 | subl %ebx, %ecx | ||
| 501 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 502 | addl %ebx, %ecx | ||
| 503 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 504 | xorl %ebx, %ecx | ||
| 505 | xorl %ecx, %edi | ||
| 506 | /* round 12 */ | ||
| 507 | movl 96(%ebp), %edx | ||
| 508 | movl 100(%ebp), %ecx | ||
| 509 | addl %edi, %edx | ||
| 510 | roll %cl, %edx | ||
| 511 | movl %edx, %ebx | ||
| 512 | xorl %ecx, %ecx | ||
| 513 | movb %dh, %cl | ||
| 514 | andl $255, %ebx | ||
| 515 | shrl $16, %edx | ||
| 516 | xorl %eax, %eax | ||
| 517 | movb %dh, %al | ||
| 518 | andl $255, %edx | ||
| 519 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 520 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 521 | xorl %ebx, %ecx | ||
| 522 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 523 | subl %ebx, %ecx | ||
| 524 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 525 | addl %ebx, %ecx | ||
| 526 | xorl %ecx, %esi | ||
| 527 | /* round 11 */ | ||
| 528 | movl 88(%ebp), %edx | ||
| 529 | movl 92(%ebp), %ecx | ||
| 530 | subl %esi, %edx | ||
| 531 | roll %cl, %edx | ||
| 532 | movl %edx, %ebx | ||
| 533 | xorl %ecx, %ecx | ||
| 534 | movb %dh, %cl | ||
| 535 | andl $255, %ebx | ||
| 536 | shrl $16, %edx | ||
| 537 | xorl %eax, %eax | ||
| 538 | movb %dh, %al | ||
| 539 | andl $255, %edx | ||
| 540 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 541 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 542 | addl %ebx, %ecx | ||
| 543 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 544 | xorl %ebx, %ecx | ||
| 545 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 546 | subl %ebx, %ecx | ||
| 547 | xorl %ecx, %edi | ||
| 548 | /* round 10 */ | ||
| 549 | movl 80(%ebp), %edx | ||
| 550 | movl 84(%ebp), %ecx | ||
| 551 | xorl %edi, %edx | ||
| 552 | roll %cl, %edx | ||
| 553 | movl %edx, %ebx | ||
| 554 | xorl %ecx, %ecx | ||
| 555 | movb %dh, %cl | ||
| 556 | andl $255, %ebx | ||
| 557 | shrl $16, %edx | ||
| 558 | xorl %eax, %eax | ||
| 559 | movb %dh, %al | ||
| 560 | andl $255, %edx | ||
| 561 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 562 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 563 | subl %ebx, %ecx | ||
| 564 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 565 | addl %ebx, %ecx | ||
| 566 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 567 | xorl %ebx, %ecx | ||
| 568 | xorl %ecx, %esi | ||
| 569 | /* round 9 */ | ||
| 570 | movl 72(%ebp), %edx | ||
| 571 | movl 76(%ebp), %ecx | ||
| 572 | addl %esi, %edx | ||
| 573 | roll %cl, %edx | ||
| 574 | movl %edx, %ebx | ||
| 575 | xorl %ecx, %ecx | ||
| 576 | movb %dh, %cl | ||
| 577 | andl $255, %ebx | ||
| 578 | shrl $16, %edx | ||
| 579 | xorl %eax, %eax | ||
| 580 | movb %dh, %al | ||
| 581 | andl $255, %edx | ||
| 582 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 583 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 584 | xorl %ebx, %ecx | ||
| 585 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 586 | subl %ebx, %ecx | ||
| 587 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 588 | addl %ebx, %ecx | ||
| 589 | xorl %ecx, %edi | ||
| 590 | /* round 8 */ | ||
| 591 | movl 64(%ebp), %edx | ||
| 592 | movl 68(%ebp), %ecx | ||
| 593 | subl %edi, %edx | ||
| 594 | roll %cl, %edx | ||
| 595 | movl %edx, %ebx | ||
| 596 | xorl %ecx, %ecx | ||
| 597 | movb %dh, %cl | ||
| 598 | andl $255, %ebx | ||
| 599 | shrl $16, %edx | ||
| 600 | xorl %eax, %eax | ||
| 601 | movb %dh, %al | ||
| 602 | andl $255, %edx | ||
| 603 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 604 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 605 | addl %ebx, %ecx | ||
| 606 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 607 | xorl %ebx, %ecx | ||
| 608 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 609 | subl %ebx, %ecx | ||
| 610 | xorl %ecx, %esi | ||
| 611 | /* round 7 */ | ||
| 612 | movl 56(%ebp), %edx | ||
| 613 | movl 60(%ebp), %ecx | ||
| 614 | xorl %esi, %edx | ||
| 615 | roll %cl, %edx | ||
| 616 | movl %edx, %ebx | ||
| 617 | xorl %ecx, %ecx | ||
| 618 | movb %dh, %cl | ||
| 619 | andl $255, %ebx | ||
| 620 | shrl $16, %edx | ||
| 621 | xorl %eax, %eax | ||
| 622 | movb %dh, %al | ||
| 623 | andl $255, %edx | ||
| 624 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 625 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 626 | subl %ebx, %ecx | ||
| 627 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 628 | addl %ebx, %ecx | ||
| 629 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 630 | xorl %ebx, %ecx | ||
| 631 | xorl %ecx, %edi | ||
| 632 | /* round 6 */ | ||
| 633 | movl 48(%ebp), %edx | ||
| 634 | movl 52(%ebp), %ecx | ||
| 635 | addl %edi, %edx | ||
| 636 | roll %cl, %edx | ||
| 637 | movl %edx, %ebx | ||
| 638 | xorl %ecx, %ecx | ||
| 639 | movb %dh, %cl | ||
| 640 | andl $255, %ebx | ||
| 641 | shrl $16, %edx | ||
| 642 | xorl %eax, %eax | ||
| 643 | movb %dh, %al | ||
| 644 | andl $255, %edx | ||
| 645 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 646 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 647 | xorl %ebx, %ecx | ||
| 648 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 649 | subl %ebx, %ecx | ||
| 650 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 651 | addl %ebx, %ecx | ||
| 652 | xorl %ecx, %esi | ||
| 653 | /* round 5 */ | ||
| 654 | movl 40(%ebp), %edx | ||
| 655 | movl 44(%ebp), %ecx | ||
| 656 | subl %esi, %edx | ||
| 657 | roll %cl, %edx | ||
| 658 | movl %edx, %ebx | ||
| 659 | xorl %ecx, %ecx | ||
| 660 | movb %dh, %cl | ||
| 661 | andl $255, %ebx | ||
| 662 | shrl $16, %edx | ||
| 663 | xorl %eax, %eax | ||
| 664 | movb %dh, %al | ||
| 665 | andl $255, %edx | ||
| 666 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 667 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 668 | addl %ebx, %ecx | ||
| 669 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 670 | xorl %ebx, %ecx | ||
| 671 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 672 | subl %ebx, %ecx | ||
| 673 | xorl %ecx, %edi | ||
| 674 | /* round 4 */ | ||
| 675 | movl 32(%ebp), %edx | ||
| 676 | movl 36(%ebp), %ecx | ||
| 677 | xorl %edi, %edx | ||
| 678 | roll %cl, %edx | ||
| 679 | movl %edx, %ebx | ||
| 680 | xorl %ecx, %ecx | ||
| 681 | movb %dh, %cl | ||
| 682 | andl $255, %ebx | ||
| 683 | shrl $16, %edx | ||
| 684 | xorl %eax, %eax | ||
| 685 | movb %dh, %al | ||
| 686 | andl $255, %edx | ||
| 687 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 688 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 689 | subl %ebx, %ecx | ||
| 690 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 691 | addl %ebx, %ecx | ||
| 692 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 693 | xorl %ebx, %ecx | ||
| 694 | xorl %ecx, %esi | ||
| 695 | /* round 3 */ | ||
| 696 | movl 24(%ebp), %edx | ||
| 697 | movl 28(%ebp), %ecx | ||
| 698 | addl %esi, %edx | ||
| 699 | roll %cl, %edx | ||
| 700 | movl %edx, %ebx | ||
| 701 | xorl %ecx, %ecx | ||
| 702 | movb %dh, %cl | ||
| 703 | andl $255, %ebx | ||
| 704 | shrl $16, %edx | ||
| 705 | xorl %eax, %eax | ||
| 706 | movb %dh, %al | ||
| 707 | andl $255, %edx | ||
| 708 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 709 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 710 | xorl %ebx, %ecx | ||
| 711 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 712 | subl %ebx, %ecx | ||
| 713 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 714 | addl %ebx, %ecx | ||
| 715 | xorl %ecx, %edi | ||
| 716 | /* round 2 */ | ||
| 717 | movl 16(%ebp), %edx | ||
| 718 | movl 20(%ebp), %ecx | ||
| 719 | subl %edi, %edx | ||
| 720 | roll %cl, %edx | ||
| 721 | movl %edx, %ebx | ||
| 722 | xorl %ecx, %ecx | ||
| 723 | movb %dh, %cl | ||
| 724 | andl $255, %ebx | ||
| 725 | shrl $16, %edx | ||
| 726 | xorl %eax, %eax | ||
| 727 | movb %dh, %al | ||
| 728 | andl $255, %edx | ||
| 729 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 730 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 731 | addl %ebx, %ecx | ||
| 732 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 733 | xorl %ebx, %ecx | ||
| 734 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 735 | subl %ebx, %ecx | ||
| 736 | xorl %ecx, %esi | ||
| 737 | /* round 1 */ | ||
| 738 | movl 8(%ebp), %edx | ||
| 739 | movl 12(%ebp), %ecx | ||
| 740 | xorl %esi, %edx | ||
| 741 | roll %cl, %edx | ||
| 742 | movl %edx, %ebx | ||
| 743 | xorl %ecx, %ecx | ||
| 744 | movb %dh, %cl | ||
| 745 | andl $255, %ebx | ||
| 746 | shrl $16, %edx | ||
| 747 | xorl %eax, %eax | ||
| 748 | movb %dh, %al | ||
| 749 | andl $255, %edx | ||
| 750 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 751 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 752 | subl %ebx, %ecx | ||
| 753 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 754 | addl %ebx, %ecx | ||
| 755 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 756 | xorl %ebx, %ecx | ||
| 757 | xorl %ecx, %edi | ||
| 758 | /* round 0 */ | ||
| 759 | movl (%ebp), %edx | ||
| 760 | movl 4(%ebp), %ecx | ||
| 761 | addl %edi, %edx | ||
| 762 | roll %cl, %edx | ||
| 763 | movl %edx, %ebx | ||
| 764 | xorl %ecx, %ecx | ||
| 765 | movb %dh, %cl | ||
| 766 | andl $255, %ebx | ||
| 767 | shrl $16, %edx | ||
| 768 | xorl %eax, %eax | ||
| 769 | movb %dh, %al | ||
| 770 | andl $255, %edx | ||
| 771 | movl CAST_S_table0(,%ecx,4),%ecx | ||
| 772 | movl CAST_S_table1(,%ebx,4),%ebx | ||
| 773 | xorl %ebx, %ecx | ||
| 774 | movl CAST_S_table2(,%eax,4),%ebx | ||
| 775 | subl %ebx, %ecx | ||
| 776 | movl CAST_S_table3(,%edx,4),%ebx | ||
| 777 | addl %ebx, %ecx | ||
| 778 | movl 20(%esp), %eax | ||
| 779 | xorl %ecx, %esi | ||
| 780 | nop | ||
| 781 | movl %edi, 4(%eax) | ||
| 782 | movl %esi, (%eax) | ||
| 783 | popl %edi | ||
| 784 | popl %esi | ||
| 785 | popl %ebx | ||
| 786 | popl %ebp | ||
| 787 | ret | ||
| 788 | .CAST_decrypt_end: | ||
| 789 | SIZE(CAST_decrypt,.CAST_decrypt_end-CAST_decrypt) | ||
| 790 | .ident "CAST_decrypt" | ||
| 791 | .text | ||
| 792 | .align ALIGN | ||
| 793 | .globl CAST_cbc_encrypt | ||
| 794 | TYPE(CAST_cbc_encrypt,@function) | ||
| 795 | CAST_cbc_encrypt: | ||
| 796 | |||
| 797 | pushl %ebp | ||
| 798 | pushl %ebx | ||
| 799 | pushl %esi | ||
| 800 | pushl %edi | ||
| 801 | movl 28(%esp), %ebp | ||
| 802 | /* getting iv ptr from parameter 4 */ | ||
| 803 | movl 36(%esp), %ebx | ||
| 804 | movl (%ebx), %esi | ||
| 805 | movl 4(%ebx), %edi | ||
| 806 | pushl %edi | ||
| 807 | pushl %esi | ||
| 808 | pushl %edi | ||
| 809 | pushl %esi | ||
| 810 | movl %esp, %ebx | ||
| 811 | movl 36(%esp), %esi | ||
| 812 | movl 40(%esp), %edi | ||
| 813 | /* getting encrypt flag from parameter 5 */ | ||
| 814 | movl 56(%esp), %ecx | ||
| 815 | /* get and push parameter 3 */ | ||
| 816 | movl 48(%esp), %eax | ||
| 817 | pushl %eax | ||
| 818 | pushl %ebx | ||
| 819 | cmpl $0, %ecx | ||
| 820 | jz .L000decrypt | ||
| 821 | andl $4294967288, %ebp | ||
| 822 | movl 8(%esp), %eax | ||
| 823 | movl 12(%esp), %ebx | ||
| 824 | jz .L001encrypt_finish | ||
| 825 | .L002encrypt_loop: | ||
| 826 | movl (%esi), %ecx | ||
| 827 | movl 4(%esi), %edx | ||
| 828 | xorl %ecx, %eax | ||
| 829 | xorl %edx, %ebx | ||
| 830 | .byte 15 | ||
| 831 | .byte 200 /* bswapl %eax */ | ||
| 832 | .byte 15 | ||
| 833 | .byte 203 /* bswapl %ebx */ | ||
| 834 | movl %eax, 8(%esp) | ||
| 835 | movl %ebx, 12(%esp) | ||
| 836 | call CAST_encrypt | ||
| 837 | movl 8(%esp), %eax | ||
| 838 | movl 12(%esp), %ebx | ||
| 839 | .byte 15 | ||
| 840 | .byte 200 /* bswapl %eax */ | ||
| 841 | .byte 15 | ||
| 842 | .byte 203 /* bswapl %ebx */ | ||
| 843 | movl %eax, (%edi) | ||
| 844 | movl %ebx, 4(%edi) | ||
| 845 | addl $8, %esi | ||
| 846 | addl $8, %edi | ||
| 847 | subl $8, %ebp | ||
| 848 | jnz .L002encrypt_loop | ||
| 849 | .L001encrypt_finish: | ||
| 850 | movl 52(%esp), %ebp | ||
| 851 | andl $7, %ebp | ||
| 852 | jz .L003finish | ||
| 853 | xorl %ecx, %ecx | ||
| 854 | xorl %edx, %edx | ||
| 855 | movl .L004cbc_enc_jmp_table(,%ebp,4),%ebp | ||
| 856 | jmp *%ebp | ||
| 857 | .L005ej7: | ||
| 858 | xorl %edx, %edx | ||
| 859 | movb 6(%esi), %dh | ||
| 860 | sall $8, %edx | ||
| 861 | .L006ej6: | ||
| 862 | movb 5(%esi), %dh | ||
| 863 | .L007ej5: | ||
| 864 | movb 4(%esi), %dl | ||
| 865 | .L008ej4: | ||
| 866 | movl (%esi), %ecx | ||
| 867 | jmp .L009ejend | ||
| 868 | .L010ej3: | ||
| 869 | movb 2(%esi), %ch | ||
| 870 | xorl %ecx, %ecx | ||
| 871 | sall $8, %ecx | ||
| 872 | .L011ej2: | ||
| 873 | movb 1(%esi), %ch | ||
| 874 | .L012ej1: | ||
| 875 | movb (%esi), %cl | ||
| 876 | .L009ejend: | ||
| 877 | xorl %ecx, %eax | ||
| 878 | xorl %edx, %ebx | ||
| 879 | .byte 15 | ||
| 880 | .byte 200 /* bswapl %eax */ | ||
| 881 | .byte 15 | ||
| 882 | .byte 203 /* bswapl %ebx */ | ||
| 883 | movl %eax, 8(%esp) | ||
| 884 | movl %ebx, 12(%esp) | ||
| 885 | call CAST_encrypt | ||
| 886 | movl 8(%esp), %eax | ||
| 887 | movl 12(%esp), %ebx | ||
| 888 | .byte 15 | ||
| 889 | .byte 200 /* bswapl %eax */ | ||
| 890 | .byte 15 | ||
| 891 | .byte 203 /* bswapl %ebx */ | ||
| 892 | movl %eax, (%edi) | ||
| 893 | movl %ebx, 4(%edi) | ||
| 894 | jmp .L003finish | ||
| 895 | .align ALIGN | ||
| 896 | .L000decrypt: | ||
| 897 | andl $4294967288, %ebp | ||
| 898 | movl 16(%esp), %eax | ||
| 899 | movl 20(%esp), %ebx | ||
| 900 | jz .L013decrypt_finish | ||
| 901 | .L014decrypt_loop: | ||
| 902 | movl (%esi), %eax | ||
| 903 | movl 4(%esi), %ebx | ||
| 904 | .byte 15 | ||
| 905 | .byte 200 /* bswapl %eax */ | ||
| 906 | .byte 15 | ||
| 907 | .byte 203 /* bswapl %ebx */ | ||
| 908 | movl %eax, 8(%esp) | ||
| 909 | movl %ebx, 12(%esp) | ||
| 910 | call CAST_decrypt | ||
| 911 | movl 8(%esp), %eax | ||
| 912 | movl 12(%esp), %ebx | ||
| 913 | .byte 15 | ||
| 914 | .byte 200 /* bswapl %eax */ | ||
| 915 | .byte 15 | ||
| 916 | .byte 203 /* bswapl %ebx */ | ||
| 917 | movl 16(%esp), %ecx | ||
| 918 | movl 20(%esp), %edx | ||
| 919 | xorl %eax, %ecx | ||
| 920 | xorl %ebx, %edx | ||
| 921 | movl (%esi), %eax | ||
| 922 | movl 4(%esi), %ebx | ||
| 923 | movl %ecx, (%edi) | ||
| 924 | movl %edx, 4(%edi) | ||
| 925 | movl %eax, 16(%esp) | ||
| 926 | movl %ebx, 20(%esp) | ||
| 927 | addl $8, %esi | ||
| 928 | addl $8, %edi | ||
| 929 | subl $8, %ebp | ||
| 930 | jnz .L014decrypt_loop | ||
| 931 | .L013decrypt_finish: | ||
| 932 | movl 52(%esp), %ebp | ||
| 933 | andl $7, %ebp | ||
| 934 | jz .L003finish | ||
| 935 | movl (%esi), %eax | ||
| 936 | movl 4(%esi), %ebx | ||
| 937 | .byte 15 | ||
| 938 | .byte 200 /* bswapl %eax */ | ||
| 939 | .byte 15 | ||
| 940 | .byte 203 /* bswapl %ebx */ | ||
| 941 | movl %eax, 8(%esp) | ||
| 942 | movl %ebx, 12(%esp) | ||
| 943 | call CAST_decrypt | ||
| 944 | movl 8(%esp), %eax | ||
| 945 | movl 12(%esp), %ebx | ||
| 946 | .byte 15 | ||
| 947 | .byte 200 /* bswapl %eax */ | ||
| 948 | .byte 15 | ||
| 949 | .byte 203 /* bswapl %ebx */ | ||
| 950 | movl 16(%esp), %ecx | ||
| 951 | movl 20(%esp), %edx | ||
| 952 | xorl %eax, %ecx | ||
| 953 | xorl %ebx, %edx | ||
| 954 | movl (%esi), %eax | ||
| 955 | movl 4(%esi), %ebx | ||
| 956 | .L015dj7: | ||
| 957 | rorl $16, %edx | ||
| 958 | movb %dl, 6(%edi) | ||
| 959 | shrl $16, %edx | ||
| 960 | .L016dj6: | ||
| 961 | movb %dh, 5(%edi) | ||
| 962 | .L017dj5: | ||
| 963 | movb %dl, 4(%edi) | ||
| 964 | .L018dj4: | ||
| 965 | movl %ecx, (%edi) | ||
| 966 | jmp .L019djend | ||
| 967 | .L020dj3: | ||
| 968 | rorl $16, %ecx | ||
| 969 | movb %cl, 2(%edi) | ||
| 970 | sall $16, %ecx | ||
| 971 | .L021dj2: | ||
| 972 | movb %ch, 1(%esi) | ||
| 973 | .L022dj1: | ||
| 974 | movb %cl, (%esi) | ||
| 975 | .L019djend: | ||
| 976 | jmp .L003finish | ||
| 977 | .align ALIGN | ||
| 978 | .L003finish: | ||
| 979 | movl 60(%esp), %ecx | ||
| 980 | addl $24, %esp | ||
| 981 | movl %eax, (%ecx) | ||
| 982 | movl %ebx, 4(%ecx) | ||
| 983 | popl %edi | ||
| 984 | popl %esi | ||
| 985 | popl %ebx | ||
| 986 | popl %ebp | ||
| 987 | ret | ||
| 988 | .align ALIGN | ||
| 989 | .L004cbc_enc_jmp_table: | ||
| 990 | .long 0 | ||
| 991 | .long .L012ej1 | ||
| 992 | .long .L011ej2 | ||
| 993 | .long .L010ej3 | ||
| 994 | .long .L008ej4 | ||
| 995 | .long .L007ej5 | ||
| 996 | .long .L006ej6 | ||
| 997 | .long .L005ej7 | ||
| 998 | .align ALIGN | ||
| 999 | .L023cbc_dec_jmp_table: | ||
| 1000 | .long 0 | ||
| 1001 | .long .L022dj1 | ||
| 1002 | .long .L021dj2 | ||
| 1003 | .long .L020dj3 | ||
| 1004 | .long .L018dj4 | ||
| 1005 | .long .L017dj5 | ||
| 1006 | .long .L016dj6 | ||
| 1007 | .long .L015dj7 | ||
| 1008 | .CAST_cbc_encrypt_end: | ||
| 1009 | SIZE(CAST_cbc_encrypt,.CAST_cbc_encrypt_end-CAST_cbc_encrypt) | ||
| 1010 | .ident "desasm.pl" | ||
