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]
30 mov edx, DWORD PTR [ebp]
31 mov ecx, DWORD PTR 4[ebp]
42 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
43 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
45 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
47 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
51 mov edx, DWORD PTR 8[ebp]
52 mov ecx, DWORD PTR 12[ebp]
63 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
64 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
66 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
68 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
72 mov edx, DWORD PTR 16[ebp]
73 mov ecx, DWORD PTR 20[ebp]
84 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
85 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
87 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
89 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
93 mov edx, DWORD PTR 24[ebp]
94 mov ecx, DWORD PTR 28[ebp]
105 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
106 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
108 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
110 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
114 mov edx, DWORD PTR 32[ebp]
115 mov ecx, DWORD PTR 36[ebp]
126 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
127 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
129 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
131 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
135 mov edx, DWORD PTR 40[ebp]
136 mov ecx, DWORD PTR 44[ebp]
147 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
148 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
150 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
152 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
156 mov edx, DWORD PTR 48[ebp]
157 mov ecx, DWORD PTR 52[ebp]
168 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
169 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
171 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
173 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
177 mov edx, DWORD PTR 56[ebp]
178 mov ecx, DWORD PTR 60[ebp]
189 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
190 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
192 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
194 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
198 mov edx, DWORD PTR 64[ebp]
199 mov ecx, DWORD PTR 68[ebp]
210 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
211 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
213 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
215 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
219 mov edx, DWORD PTR 72[ebp]
220 mov ecx, DWORD PTR 76[ebp]
231 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
232 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
234 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
236 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
240 mov edx, DWORD PTR 80[ebp]
241 mov ecx, DWORD PTR 84[ebp]
252 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
253 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
255 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
257 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
261 mov edx, DWORD PTR 88[ebp]
262 mov ecx, DWORD PTR 92[ebp]
273 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
274 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
276 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
278 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
282 mov edx, DWORD PTR 96[ebp]
283 mov ecx, DWORD PTR 100[ebp]
294 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
295 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
297 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
299 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
303 mov edx, DWORD PTR 104[ebp]
304 mov ecx, DWORD PTR 108[ebp]
315 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
316 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
318 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
320 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
324 mov edx, DWORD PTR 112[ebp]
325 mov ecx, DWORD PTR 116[ebp]
336 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
337 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
339 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
341 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
345 mov edx, DWORD PTR 120[ebp]
346 mov ecx, DWORD PTR 124[ebp]
357 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
358 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
360 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
362 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
364 mov eax, DWORD PTR 20[esp]
367 mov DWORD PTR 4[eax],edi
368 mov DWORD PTR [eax],esi
378 EXTERN _CAST_S_table0:DWORD
379 EXTERN _CAST_S_table1:DWORD
380 EXTERN _CAST_S_table2:DWORD
381 EXTERN _CAST_S_table3:DWORD
383 _CAST_decrypt PROC NEAR
387 mov ebx, DWORD PTR 12[esp]
388 mov ebp, DWORD PTR 16[esp]
392 mov edi, DWORD PTR [ebx]
393 mov esi, DWORD PTR 4[ebx]
396 mov edx, DWORD PTR 120[ebp]
397 mov ecx, DWORD PTR 124[ebp]
408 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
409 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
411 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
413 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
417 mov edx, DWORD PTR 112[ebp]
418 mov ecx, DWORD PTR 116[ebp]
429 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
430 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
432 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
434 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
438 mov edx, DWORD PTR 104[ebp]
439 mov ecx, DWORD PTR 108[ebp]
450 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
451 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
453 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
455 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
459 mov edx, DWORD PTR 96[ebp]
460 mov ecx, DWORD PTR 100[ebp]
471 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
472 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
474 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
476 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
480 mov edx, DWORD PTR 88[ebp]
481 mov ecx, DWORD PTR 92[ebp]
492 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
493 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
495 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
497 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
501 mov edx, DWORD PTR 80[ebp]
502 mov ecx, DWORD PTR 84[ebp]
513 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
514 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
516 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
518 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
522 mov edx, DWORD PTR 72[ebp]
523 mov ecx, DWORD PTR 76[ebp]
534 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
535 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
537 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
539 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
543 mov edx, DWORD PTR 64[ebp]
544 mov ecx, DWORD PTR 68[ebp]
555 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
556 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
558 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
560 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
564 mov edx, DWORD PTR 56[ebp]
565 mov ecx, DWORD PTR 60[ebp]
576 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
577 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
579 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
581 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
585 mov edx, DWORD PTR 48[ebp]
586 mov ecx, DWORD PTR 52[ebp]
597 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
598 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
600 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
602 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
606 mov edx, DWORD PTR 40[ebp]
607 mov ecx, DWORD PTR 44[ebp]
618 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
619 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
621 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
623 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
627 mov edx, DWORD PTR 32[ebp]
628 mov ecx, DWORD PTR 36[ebp]
639 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
640 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
642 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
644 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
648 mov edx, DWORD PTR 24[ebp]
649 mov ecx, DWORD PTR 28[ebp]
660 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
661 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
663 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
665 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
669 mov edx, DWORD PTR 16[ebp]
670 mov ecx, DWORD PTR 20[ebp]
681 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
682 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
684 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
686 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
690 mov edx, DWORD PTR 8[ebp]
691 mov ecx, DWORD PTR 12[ebp]
702 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
703 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
705 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
707 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
711 mov edx, DWORD PTR [ebp]
712 mov ecx, DWORD PTR 4[ebp]
723 mov ecx, DWORD PTR _CAST_S_table0[ecx*4]
724 mov ebx, DWORD PTR _CAST_S_table1[ebx*4]
726 mov ebx, DWORD PTR _CAST_S_table2[eax*4]
728 mov ebx, DWORD PTR _CAST_S_table3[edx*4]
730 mov eax, DWORD PTR 20[esp]
733 mov DWORD PTR 4[eax],edi
734 mov DWORD PTR [eax],esi
743 PUBLIC _CAST_cbc_encrypt
745 _CAST_cbc_encrypt PROC NEAR
751 mov ebp, DWORD PTR 28[esp]
752 ; getting iv ptr from parameter 4
753 mov ebx, DWORD PTR 36[esp]
754 mov esi, DWORD PTR [ebx]
755 mov edi, DWORD PTR 4[ebx]
761 mov esi, DWORD PTR 36[esp]
762 mov edi, DWORD PTR 40[esp]
763 ; getting encrypt flag from parameter 5
764 mov ecx, DWORD PTR 56[esp]
765 ; get and push parameter 3
766 mov eax, DWORD PTR 48[esp]
772 mov eax, DWORD PTR 8[esp]
773 mov ebx, DWORD PTR 12[esp]
774 jz $L001encrypt_finish
776 mov ecx, DWORD PTR [esi]
777 mov edx, DWORD PTR 4[esi]
782 mov DWORD PTR 8[esp],eax
783 mov DWORD PTR 12[esp],ebx
785 mov eax, DWORD PTR 8[esp]
786 mov ebx, DWORD PTR 12[esp]
789 mov DWORD PTR [edi],eax
790 mov DWORD PTR 4[edi],ebx
796 mov ebp, DWORD PTR 52[esp]
801 mov ebp, DWORD PTR $L004cbc_enc_jmp_table[ebp*4]
805 mov dh, BYTE PTR 6[esi]
808 mov dh, BYTE PTR 5[esi]
810 mov dl, BYTE PTR 4[esi]
812 mov ecx, DWORD PTR [esi]
815 mov ch, BYTE PTR 2[esi]
819 mov ch, BYTE PTR 1[esi]
821 mov cl, BYTE PTR [esi]
827 mov DWORD PTR 8[esp],eax
828 mov DWORD PTR 12[esp],ebx
830 mov eax, DWORD PTR 8[esp]
831 mov ebx, DWORD PTR 12[esp]
834 mov DWORD PTR [edi],eax
835 mov DWORD PTR 4[edi],ebx
839 mov eax, DWORD PTR 16[esp]
840 mov ebx, DWORD PTR 20[esp]
841 jz $L013decrypt_finish
843 mov eax, DWORD PTR [esi]
844 mov ebx, DWORD PTR 4[esi]
847 mov DWORD PTR 8[esp],eax
848 mov DWORD PTR 12[esp],ebx
850 mov eax, DWORD PTR 8[esp]
851 mov ebx, DWORD PTR 12[esp]
854 mov ecx, DWORD PTR 16[esp]
855 mov edx, DWORD PTR 20[esp]
858 mov eax, DWORD PTR [esi]
859 mov ebx, DWORD PTR 4[esi]
860 mov DWORD PTR [edi],ecx
861 mov DWORD PTR 4[edi],edx
862 mov DWORD PTR 16[esp],eax
863 mov DWORD PTR 20[esp],ebx
869 mov ebp, DWORD PTR 52[esp]
872 mov eax, DWORD PTR [esi]
873 mov ebx, DWORD PTR 4[esi]
876 mov DWORD PTR 8[esp],eax
877 mov DWORD PTR 12[esp],ebx
879 mov eax, DWORD PTR 8[esp]
880 mov ebx, DWORD PTR 12[esp]
883 mov ecx, DWORD PTR 16[esp]
884 mov edx, DWORD PTR 20[esp]
887 mov eax, DWORD PTR [esi]
888 mov ebx, DWORD PTR 4[esi]
891 mov BYTE PTR 6[edi],dl
894 mov BYTE PTR 5[edi],dh
896 mov BYTE PTR 4[edi],dl
898 mov DWORD PTR [edi],ecx
902 mov BYTE PTR 2[edi],cl
905 mov BYTE PTR 1[esi],ch
907 mov BYTE PTR [esi], cl
911 mov ecx, DWORD PTR 60[esp]
913 mov DWORD PTR [ecx],eax
914 mov DWORD PTR 4[ecx],ebx
920 $L004cbc_enc_jmp_table:
929 L023cbc_dec_jmp_table:
938 _CAST_cbc_encrypt ENDP