diff options
Diffstat (limited to 'src/lib/libcrypto/cast/asm/c-win32.asm')
-rw-r--r-- | src/lib/libcrypto/cast/asm/c-win32.asm | 117 |
1 files changed, 65 insertions, 52 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 |