summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/cast/asm/c-win32.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/cast/asm/c-win32.asm')
-rw-r--r--src/lib/libcrypto/cast/asm/c-win32.asm117
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
775L002encrypt_loop: 788L004encrypt_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
803L005ej7: 816L007ej7:
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
807L006ej6: 820L008ej6:
808 mov dh, BYTE PTR 5[esi] 821 mov dh, BYTE PTR 5[esi]
809L007ej5: 822L009ej5:
810 mov dl, BYTE PTR 4[esi] 823 mov dl, BYTE PTR 4[esi]
811L008ej4: 824L010ej4:
812 mov ecx, DWORD PTR [esi] 825 mov ecx, DWORD PTR [esi]
813 jmp $L009ejend 826 jmp $L011ejend
814L010ej3: 827L012ej3:
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
818L011ej2: 831L013ej2:
819 mov ch, BYTE PTR 1[esi] 832 mov ch, BYTE PTR 1[esi]
820L012ej1: 833L014ej1:
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
842L014decrypt_loop: 855L016decrypt_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]
889L015dj7: 902L017dj7:
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
893L016dj6: 906L018dj6:
894 mov BYTE PTR 5[edi],dh 907 mov BYTE PTR 5[edi],dh
895L017dj5: 908L019dj5:
896 mov BYTE PTR 4[edi],dl 909 mov BYTE PTR 4[edi],dl
897L018dj4: 910L020dj4:
898 mov DWORD PTR [edi],ecx 911 mov DWORD PTR [edi],ecx
899 jmp $L019djend 912 jmp $L021djend
900L020dj3: 913L022dj3:
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
904L021dj2: 917L023dj2:
905 mov BYTE PTR 1[esi],ch 918 mov BYTE PTR 1[esi],ch
906L022dj1: 919L024dj1:
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
929L023cbc_dec_jmp_table: 942L025cbc_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
940END 953END