1 ; Don't even think of reading this code
2 ; It was automatically generated by cast-586.pl
3 ; Which is a perl program used to generate the x86 assember for
4 ; any of elf, a.out, BSDI,Win32, or Solaris
5 ; eric <eay@cryptsoft.com>
12 EXTERN _CAST_S_table0:DWORD
13 EXTERN _CAST_S_table1:DWORD
14 EXTERN _CAST_S_table2:DWORD
15 EXTERN _CAST_S_table3:DWORD
17 _CAST_encrypt PROC NEAR
21 mov ebx, DWORD PTR 12[esp]
22 mov ebp, DWORD PTR 16[esp]
26 mov edi, DWORD PTR [ebx]
27 mov esi, DWORD PTR 4[ebx]
29 mov eax, DWORD PTR 128[ebp]
33 mov edx, DWORD PTR [ebp]
34 mov ecx, DWORD PTR 4[ebp]
45 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
46 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
48 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
50 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
54 mov edx, DWORD PTR 8[ebp]
55 mov ecx, DWORD PTR 12[ebp]
66 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
67 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
69 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
71 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
75 mov edx, DWORD PTR 16[ebp]
76 mov ecx, DWORD PTR 20[ebp]
87 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
88 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
90 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
92 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
96 mov edx, DWORD PTR 24[ebp]
97 mov ecx, DWORD PTR 28[ebp]
108 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
109 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
111 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
113 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
117 mov edx, DWORD PTR 32[ebp]
118 mov ecx, DWORD PTR 36[ebp]
129 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
130 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
132 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
134 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
138 mov edx, DWORD PTR 40[ebp]
139 mov ecx, DWORD PTR 44[ebp]
150 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
151 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
153 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
155 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
159 mov edx, DWORD PTR 48[ebp]
160 mov ecx, DWORD PTR 52[ebp]
171 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
172 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
174 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
176 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
180 mov edx, DWORD PTR 56[ebp]
181 mov ecx, DWORD PTR 60[ebp]
192 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
193 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
195 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
197 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
201 mov edx, DWORD PTR 64[ebp]
202 mov ecx, DWORD PTR 68[ebp]
213 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
214 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
216 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
218 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
222 mov edx, DWORD PTR 72[ebp]
223 mov ecx, DWORD PTR 76[ebp]
234 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
235 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
237 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
239 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
243 mov edx, DWORD PTR 80[ebp]
244 mov ecx, DWORD PTR 84[ebp]
255 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
256 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
258 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
260 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
264 mov edx, DWORD PTR 88[ebp]
265 mov ecx, DWORD PTR 92[ebp]
276 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
277 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
279 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
281 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
284 ; test short key flag
287 jnz $L000cast_enc_done
289 mov edx, DWORD PTR 96[ebp]
290 mov ecx, DWORD PTR 100[ebp]
301 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
302 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
304 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
306 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
310 mov edx, DWORD PTR 104[ebp]
311 mov ecx, DWORD PTR 108[ebp]
322 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
323 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
325 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
327 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
331 mov edx, DWORD PTR 112[ebp]
332 mov ecx, DWORD PTR 116[ebp]
343 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
344 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
346 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
348 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
352 mov edx, DWORD PTR 120[ebp]
353 mov ecx, DWORD PTR 124[ebp]
364 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
365 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
367 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
369 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
374 mov eax, DWORD PTR 20[esp]
375 mov DWORD PTR 4[eax],edi
376 mov DWORD PTR [eax],esi
386 EXTERN _CAST_S_table0:DWORD
387 EXTERN _CAST_S_table1:DWORD
388 EXTERN _CAST_S_table2:DWORD
389 EXTERN _CAST_S_table3:DWORD
391 _CAST_decrypt PROC NEAR
395 mov ebx, DWORD PTR 12[esp]
396 mov ebp, DWORD PTR 16[esp]
400 mov edi, DWORD PTR [ebx]
401 mov esi, DWORD PTR 4[ebx]
403 mov eax, DWORD PTR 128[ebp]
405 jnz $L001cast_dec_skip
408 mov edx, DWORD PTR 120[ebp]
409 mov ecx, DWORD PTR 124[ebp]
420 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
421 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
423 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
425 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
429 mov edx, DWORD PTR 112[ebp]
430 mov ecx, DWORD PTR 116[ebp]
441 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
442 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
444 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
446 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
450 mov edx, DWORD PTR 104[ebp]
451 mov ecx, DWORD PTR 108[ebp]
462 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
463 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
465 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
467 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
471 mov edx, DWORD PTR 96[ebp]
472 mov ecx, DWORD PTR 100[ebp]
483 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
484 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
486 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
488 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
493 mov edx, DWORD PTR 88[ebp]
494 mov ecx, DWORD PTR 92[ebp]
505 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
506 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
508 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
510 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
514 mov edx, DWORD PTR 80[ebp]
515 mov ecx, DWORD PTR 84[ebp]
526 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
527 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
529 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
531 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
535 mov edx, DWORD PTR 72[ebp]
536 mov ecx, DWORD PTR 76[ebp]
547 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
548 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
550 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
552 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
556 mov edx, DWORD PTR 64[ebp]
557 mov ecx, DWORD PTR 68[ebp]
568 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
569 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
571 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
573 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
577 mov edx, DWORD PTR 56[ebp]
578 mov ecx, DWORD PTR 60[ebp]
589 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
590 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
592 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
594 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
598 mov edx, DWORD PTR 48[ebp]
599 mov ecx, DWORD PTR 52[ebp]
610 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
611 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
613 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
615 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
619 mov edx, DWORD PTR 40[ebp]
620 mov ecx, DWORD PTR 44[ebp]
631 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
632 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
634 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
636 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
640 mov edx, DWORD PTR 32[ebp]
641 mov ecx, DWORD PTR 36[ebp]
652 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
653 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
655 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
657 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
661 mov edx, DWORD PTR 24[ebp]
662 mov ecx, DWORD PTR 28[ebp]
673 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
674 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
676 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
678 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
682 mov edx, DWORD PTR 16[ebp]
683 mov ecx, DWORD PTR 20[ebp]
694 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
695 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
697 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
699 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
703 mov edx, DWORD PTR 8[ebp]
704 mov ecx, DWORD PTR 12[ebp]
715 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
716 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
718 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
720 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
724 mov edx, DWORD PTR [ebp]
725 mov ecx, DWORD PTR 4[ebp]
736 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
737 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
739 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
741 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
745 mov eax, DWORD PTR 20[esp]
746 mov DWORD PTR 4[eax],edi
747 mov DWORD PTR [eax],esi
756 PUBLIC _CAST_cbc_encrypt
758 _CAST_cbc_encrypt PROC NEAR
764 mov ebp, DWORD PTR 28[esp]
765 ; getting iv ptr from parameter 4
766 mov ebx, DWORD PTR 36[esp]
767 mov esi, DWORD PTR [ebx]
768 mov edi, DWORD PTR 4[ebx]
774 mov esi, DWORD PTR 36[esp]
775 mov edi, DWORD PTR 40[esp]
776 ; getting encrypt flag from parameter 5
777 mov ecx, DWORD PTR 56[esp]
778 ; get and push parameter 3
779 mov eax, DWORD PTR 48[esp]
785 mov eax, DWORD PTR 8[esp]
786 mov ebx, DWORD PTR 12[esp]
787 jz $L003encrypt_finish
789 mov ecx, DWORD PTR [esi]
790 mov edx, DWORD PTR 4[esi]
795 mov DWORD PTR 8[esp],eax
796 mov DWORD PTR 12[esp],ebx
798 mov eax, DWORD PTR 8[esp]
799 mov ebx, DWORD PTR 12[esp]
802 mov DWORD PTR [edi],eax
803 mov DWORD PTR 4[edi],ebx
809 mov ebp, DWORD PTR 52[esp]
814 mov ebp, DWORD PTR $L006cbc_enc_jmp_table[ebp*4]
818 mov dh, BYTE PTR 6[esi]
821 mov dh, BYTE PTR 5[esi]
823 mov dl, BYTE PTR 4[esi]
825 mov ecx, DWORD PTR [esi]
828 mov ch, BYTE PTR 2[esi]
832 mov ch, BYTE PTR 1[esi]
834 mov cl, BYTE PTR [esi]
840 mov DWORD PTR 8[esp],eax
841 mov DWORD PTR 12[esp],ebx
843 mov eax, DWORD PTR 8[esp]
844 mov ebx, DWORD PTR 12[esp]
847 mov DWORD PTR [edi],eax
848 mov DWORD PTR 4[edi],ebx
852 mov eax, DWORD PTR 16[esp]
853 mov ebx, DWORD PTR 20[esp]
854 jz $L015decrypt_finish
856 mov eax, DWORD PTR [esi]
857 mov ebx, DWORD PTR 4[esi]
860 mov DWORD PTR 8[esp],eax
861 mov DWORD PTR 12[esp],ebx
863 mov eax, DWORD PTR 8[esp]
864 mov ebx, DWORD PTR 12[esp]
867 mov ecx, DWORD PTR 16[esp]
868 mov edx, DWORD PTR 20[esp]
871 mov eax, DWORD PTR [esi]
872 mov ebx, DWORD PTR 4[esi]
873 mov DWORD PTR [edi],ecx
874 mov DWORD PTR 4[edi],edx
875 mov DWORD PTR 16[esp],eax
876 mov DWORD PTR 20[esp],ebx
882 mov ebp, DWORD PTR 52[esp]
885 mov eax, DWORD PTR [esi]
886 mov ebx, DWORD PTR 4[esi]
889 mov DWORD PTR 8[esp],eax
890 mov DWORD PTR 12[esp],ebx
892 mov eax, DWORD PTR 8[esp]
893 mov ebx, DWORD PTR 12[esp]
896 mov ecx, DWORD PTR 16[esp]
897 mov edx, DWORD PTR 20[esp]
900 mov eax, DWORD PTR [esi]
901 mov ebx, DWORD PTR 4[esi]
904 mov BYTE PTR 6[edi],dl
907 mov BYTE PTR 5[edi],dh
909 mov BYTE PTR 4[edi],dl
911 mov DWORD PTR [edi],ecx
915 mov BYTE PTR 2[edi],cl
918 mov BYTE PTR 1[esi],ch
920 mov BYTE PTR [esi], cl
924 mov ecx, DWORD PTR 60[esp]
926 mov DWORD PTR [ecx],eax
927 mov DWORD PTR 4[ecx],ebx
933 $L006cbc_enc_jmp_table:
942 L025cbc_dec_jmp_table:
951 _CAST_cbc_encrypt ENDP