3
ECHO MASM version 8.00 or later is strongly recommended.
9
.text$ SEGMENT PAGE 'CODE'
11
.text$ SEGMENT ALIGN(64) 'CODE'
13
EXTERN _CAST_S_table0:NEAR
14
EXTERN _CAST_S_table1:NEAR
15
EXTERN _CAST_S_table2:NEAR
16
EXTERN _CAST_S_table3:NEAR
18
_CAST_encrypt PROC PUBLIC
19
$L_CAST_encrypt_begin::
23
mov ebx,DWORD PTR 12[esp]
24
mov ebp,DWORD PTR 16[esp]
28
mov edi,DWORD PTR [ebx]
29
mov esi,DWORD PTR 4[ebx]
31
mov eax,DWORD PTR 128[ebp]
35
mov edx,DWORD PTR [ebp]
36
mov ecx,DWORD PTR 4[ebp]
47
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
48
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
50
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
52
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
56
mov edx,DWORD PTR 8[ebp]
57
mov ecx,DWORD PTR 12[ebp]
68
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
69
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
71
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
73
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
77
mov edx,DWORD PTR 16[ebp]
78
mov ecx,DWORD PTR 20[ebp]
89
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
90
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
92
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
94
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
98
mov edx,DWORD PTR 24[ebp]
99
mov ecx,DWORD PTR 28[ebp]
110
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
111
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
113
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
115
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
119
mov edx,DWORD PTR 32[ebp]
120
mov ecx,DWORD PTR 36[ebp]
131
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
132
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
134
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
136
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
140
mov edx,DWORD PTR 40[ebp]
141
mov ecx,DWORD PTR 44[ebp]
152
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
153
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
155
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
157
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
161
mov edx,DWORD PTR 48[ebp]
162
mov ecx,DWORD PTR 52[ebp]
173
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
174
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
176
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
178
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
182
mov edx,DWORD PTR 56[ebp]
183
mov ecx,DWORD PTR 60[ebp]
194
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
195
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
197
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
199
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
203
mov edx,DWORD PTR 64[ebp]
204
mov ecx,DWORD PTR 68[ebp]
215
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
216
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
218
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
220
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
224
mov edx,DWORD PTR 72[ebp]
225
mov ecx,DWORD PTR 76[ebp]
236
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
237
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
239
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
241
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
245
mov edx,DWORD PTR 80[ebp]
246
mov ecx,DWORD PTR 84[ebp]
257
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
258
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
260
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
262
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
266
mov edx,DWORD PTR 88[ebp]
267
mov ecx,DWORD PTR 92[ebp]
278
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
279
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
281
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
283
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
286
; test short key flag
289
jnz $L000cast_enc_done
291
mov edx,DWORD PTR 96[ebp]
292
mov ecx,DWORD PTR 100[ebp]
303
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
304
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
306
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
308
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
312
mov edx,DWORD PTR 104[ebp]
313
mov ecx,DWORD PTR 108[ebp]
324
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
325
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
327
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
329
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
333
mov edx,DWORD PTR 112[ebp]
334
mov ecx,DWORD PTR 116[ebp]
345
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
346
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
348
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
350
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
354
mov edx,DWORD PTR 120[ebp]
355
mov ecx,DWORD PTR 124[ebp]
366
mov ecx,DWORD PTR _CAST_S_table0[ecx*4]
367
mov ebx,DWORD PTR _CAST_S_table1[ebx*4]
369
mov ebx,DWORD PTR _CAST_S_table2[eax*4]
371
mov ebx,DWORD PTR _CAST_S_table3[edx*4]
376
mov eax,DWORD PTR 20[esp]
377
mov DWORD PTR 4[eax],edi
378
mov DWORD PTR [eax],esi
385
EXTERN _CAST_S_table0:NEAR
386
EXTERN _CAST_S_table1:NEAR
387
EXTERN _CAST_S_table2:NEAR
388
EXTERN _CAST_S_table3:NEAR
390
_CAST_decrypt PROC PUBLIC
391
$L_CAST_decrypt_begin::
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
755
_CAST_cbc_encrypt PROC PUBLIC
756
$L_CAST_cbc_encrypt_begin::
762
mov ebp,DWORD PTR 28[esp]
763
; getting iv ptr from parameter 4
764
mov ebx,DWORD PTR 36[esp]
765
mov esi,DWORD PTR [ebx]
766
mov edi,DWORD PTR 4[ebx]
772
mov esi,DWORD PTR 36[esp]
773
mov edi,DWORD PTR 40[esp]
774
; getting encrypt flag from parameter 5
775
mov ecx,DWORD PTR 56[esp]
776
; get and push parameter 3
777
mov eax,DWORD PTR 48[esp]
783
mov eax,DWORD PTR 8[esp]
784
mov ebx,DWORD PTR 12[esp]
785
jz $L003encrypt_finish
787
mov ecx,DWORD PTR [esi]
788
mov edx,DWORD PTR 4[esi]
793
mov DWORD PTR 8[esp],eax
794
mov DWORD PTR 12[esp],ebx
795
call $L_CAST_encrypt_begin
796
mov eax,DWORD PTR 8[esp]
797
mov ebx,DWORD PTR 12[esp]
800
mov DWORD PTR [edi],eax
801
mov DWORD PTR 4[edi],ebx
805
jnz $L004encrypt_loop
807
mov ebp,DWORD PTR 52[esp]
813
lea ecx,DWORD PTR ($L007cbc_enc_jmp_table-$L006PIC_point)[edx]
814
mov ebp,DWORD PTR [ebp*4+ecx]
820
mov dh,BYTE PTR 6[esi]
823
mov dh,BYTE PTR 5[esi]
825
mov dl,BYTE PTR 4[esi]
827
mov ecx,DWORD PTR [esi]
830
mov ch,BYTE PTR 2[esi]
833
mov ch,BYTE PTR 1[esi]
835
mov cl,BYTE PTR [esi]
841
mov DWORD PTR 8[esp],eax
842
mov DWORD PTR 12[esp],ebx
843
call $L_CAST_encrypt_begin
844
mov eax,DWORD PTR 8[esp]
845
mov ebx,DWORD PTR 12[esp]
848
mov DWORD PTR [edi],eax
849
mov DWORD PTR 4[edi],ebx
853
mov eax,DWORD PTR 16[esp]
854
mov ebx,DWORD PTR 20[esp]
855
jz $L016decrypt_finish
857
mov eax,DWORD PTR [esi]
858
mov ebx,DWORD PTR 4[esi]
861
mov DWORD PTR 8[esp],eax
862
mov DWORD PTR 12[esp],ebx
863
call $L_CAST_decrypt_begin
864
mov eax,DWORD PTR 8[esp]
865
mov ebx,DWORD PTR 12[esp]
868
mov ecx,DWORD PTR 16[esp]
869
mov edx,DWORD PTR 20[esp]
872
mov eax,DWORD PTR [esi]
873
mov ebx,DWORD PTR 4[esi]
874
mov DWORD PTR [edi],ecx
875
mov DWORD PTR 4[edi],edx
876
mov DWORD PTR 16[esp],eax
877
mov DWORD PTR 20[esp],ebx
881
jnz $L017decrypt_loop
883
mov ebp,DWORD PTR 52[esp]
886
mov eax,DWORD PTR [esi]
887
mov ebx,DWORD PTR 4[esi]
890
mov DWORD PTR 8[esp],eax
891
mov DWORD PTR 12[esp],ebx
892
call $L_CAST_decrypt_begin
893
mov eax,DWORD PTR 8[esp]
894
mov ebx,DWORD PTR 12[esp]
897
mov ecx,DWORD PTR 16[esp]
898
mov edx,DWORD PTR 20[esp]
901
mov eax,DWORD PTR [esi]
902
mov ebx,DWORD PTR 4[esi]
905
mov BYTE PTR 6[edi],dl
908
mov BYTE PTR 5[edi],dh
910
mov BYTE PTR 4[edi],dl
912
mov DWORD PTR [edi],ecx
916
mov BYTE PTR 2[edi],cl
919
mov BYTE PTR 1[esi],ch
921
mov BYTE PTR [esi],cl
925
mov ecx,DWORD PTR 60[esp]
927
mov DWORD PTR [ecx],eax
928
mov DWORD PTR 4[ecx],ebx
935
$L007cbc_enc_jmp_table:
937
DD $L015ej1-$L006PIC_point
938
DD $L014ej2-$L006PIC_point
939
DD $L013ej3-$L006PIC_point
940
DD $L011ej4-$L006PIC_point
941
DD $L010ej5-$L006PIC_point
942
DD $L009ej6-$L006PIC_point
943
DD $L008ej7-$L006PIC_point
945
_CAST_cbc_encrypt ENDP