Merge from vendor branch LIBARCHIVE:
[dragonfly.git] / secure / lib / libcrypto / i386 / cast-586.s
1         # $FreeBSD: src/secure/lib/libcrypto/i386/cast-586.s,v 1.1.4.1 2003/02/14 22:38:15 nectar Exp $
2         # $DragonFly: src/secure/lib/libcrypto/i386/Attic/cast-586.s,v 1.2 2003/06/17 04:27:48 dillon Exp $
3         # Dont even think of reading this code 
4         # It was automatically generated by cast-586.pl 
5         # Which is a perl program used to generate the x86 assember for 
6         # any of elf, a.out, BSDI, Win32, gaswin (for GNU as on Win32) or Solaris 
7         # eric <eay@cryptsoft.com> 
8
9         .file   "cast-586.s"
10         .version        "01.01"
11 gcc2_compiled.:
12 .text
13         .align 16
14 .globl CAST_encrypt
15         .type   CAST_encrypt,@function
16 CAST_encrypt:
17
18         pushl   %ebp
19         pushl   %ebx
20         movl    12(%esp),       %ebx
21         movl    16(%esp),       %ebp
22         pushl   %esi
23         pushl   %edi
24         # Load the 2 words 
25         movl    (%ebx),         %edi
26         movl    4(%ebx),        %esi
27         # Get short key flag 
28         movl    128(%ebp),      %eax
29         pushl   %eax
30         xorl    %eax,           %eax
31         # round 0 
32         movl    (%ebp),         %edx
33         movl    4(%ebp),        %ecx
34         addl    %esi,           %edx
35         roll    %cl,            %edx
36         movl    %edx,           %ebx
37         xorl    %ecx,           %ecx
38         movb    %dh,            %cl
39         andl    $255,           %ebx
40         shrl    $16,            %edx
41         xorl    %eax,           %eax
42         movb    %dh,            %al
43         andl    $255,           %edx
44         movl    CAST_S_table0(,%ecx,4),%ecx
45         movl    CAST_S_table1(,%ebx,4),%ebx
46         xorl    %ebx,           %ecx
47         movl    CAST_S_table2(,%eax,4),%ebx
48         subl    %ebx,           %ecx
49         movl    CAST_S_table3(,%edx,4),%ebx
50         addl    %ebx,           %ecx
51         xorl    %ecx,           %edi
52         # round 1 
53         movl    8(%ebp),        %edx
54         movl    12(%ebp),       %ecx
55         xorl    %edi,           %edx
56         roll    %cl,            %edx
57         movl    %edx,           %ebx
58         xorl    %ecx,           %ecx
59         movb    %dh,            %cl
60         andl    $255,           %ebx
61         shrl    $16,            %edx
62         xorl    %eax,           %eax
63         movb    %dh,            %al
64         andl    $255,           %edx
65         movl    CAST_S_table0(,%ecx,4),%ecx
66         movl    CAST_S_table1(,%ebx,4),%ebx
67         subl    %ebx,           %ecx
68         movl    CAST_S_table2(,%eax,4),%ebx
69         addl    %ebx,           %ecx
70         movl    CAST_S_table3(,%edx,4),%ebx
71         xorl    %ebx,           %ecx
72         xorl    %ecx,           %esi
73         # round 2 
74         movl    16(%ebp),       %edx
75         movl    20(%ebp),       %ecx
76         subl    %esi,           %edx
77         roll    %cl,            %edx
78         movl    %edx,           %ebx
79         xorl    %ecx,           %ecx
80         movb    %dh,            %cl
81         andl    $255,           %ebx
82         shrl    $16,            %edx
83         xorl    %eax,           %eax
84         movb    %dh,            %al
85         andl    $255,           %edx
86         movl    CAST_S_table0(,%ecx,4),%ecx
87         movl    CAST_S_table1(,%ebx,4),%ebx
88         addl    %ebx,           %ecx
89         movl    CAST_S_table2(,%eax,4),%ebx
90         xorl    %ebx,           %ecx
91         movl    CAST_S_table3(,%edx,4),%ebx
92         subl    %ebx,           %ecx
93         xorl    %ecx,           %edi
94         # round 3 
95         movl    24(%ebp),       %edx
96         movl    28(%ebp),       %ecx
97         addl    %edi,           %edx
98         roll    %cl,            %edx
99         movl    %edx,           %ebx
100         xorl    %ecx,           %ecx
101         movb    %dh,            %cl
102         andl    $255,           %ebx
103         shrl    $16,            %edx
104         xorl    %eax,           %eax
105         movb    %dh,            %al
106         andl    $255,           %edx
107         movl    CAST_S_table0(,%ecx,4),%ecx
108         movl    CAST_S_table1(,%ebx,4),%ebx
109         xorl    %ebx,           %ecx
110         movl    CAST_S_table2(,%eax,4),%ebx
111         subl    %ebx,           %ecx
112         movl    CAST_S_table3(,%edx,4),%ebx
113         addl    %ebx,           %ecx
114         xorl    %ecx,           %esi
115         # round 4 
116         movl    32(%ebp),       %edx
117         movl    36(%ebp),       %ecx
118         xorl    %esi,           %edx
119         roll    %cl,            %edx
120         movl    %edx,           %ebx
121         xorl    %ecx,           %ecx
122         movb    %dh,            %cl
123         andl    $255,           %ebx
124         shrl    $16,            %edx
125         xorl    %eax,           %eax
126         movb    %dh,            %al
127         andl    $255,           %edx
128         movl    CAST_S_table0(,%ecx,4),%ecx
129         movl    CAST_S_table1(,%ebx,4),%ebx
130         subl    %ebx,           %ecx
131         movl    CAST_S_table2(,%eax,4),%ebx
132         addl    %ebx,           %ecx
133         movl    CAST_S_table3(,%edx,4),%ebx
134         xorl    %ebx,           %ecx
135         xorl    %ecx,           %edi
136         # round 5 
137         movl    40(%ebp),       %edx
138         movl    44(%ebp),       %ecx
139         subl    %edi,           %edx
140         roll    %cl,            %edx
141         movl    %edx,           %ebx
142         xorl    %ecx,           %ecx
143         movb    %dh,            %cl
144         andl    $255,           %ebx
145         shrl    $16,            %edx
146         xorl    %eax,           %eax
147         movb    %dh,            %al
148         andl    $255,           %edx
149         movl    CAST_S_table0(,%ecx,4),%ecx
150         movl    CAST_S_table1(,%ebx,4),%ebx
151         addl    %ebx,           %ecx
152         movl    CAST_S_table2(,%eax,4),%ebx
153         xorl    %ebx,           %ecx
154         movl    CAST_S_table3(,%edx,4),%ebx
155         subl    %ebx,           %ecx
156         xorl    %ecx,           %esi
157         # round 6 
158         movl    48(%ebp),       %edx
159         movl    52(%ebp),       %ecx
160         addl    %esi,           %edx
161         roll    %cl,            %edx
162         movl    %edx,           %ebx
163         xorl    %ecx,           %ecx
164         movb    %dh,            %cl
165         andl    $255,           %ebx
166         shrl    $16,            %edx
167         xorl    %eax,           %eax
168         movb    %dh,            %al
169         andl    $255,           %edx
170         movl    CAST_S_table0(,%ecx,4),%ecx
171         movl    CAST_S_table1(,%ebx,4),%ebx
172         xorl    %ebx,           %ecx
173         movl    CAST_S_table2(,%eax,4),%ebx
174         subl    %ebx,           %ecx
175         movl    CAST_S_table3(,%edx,4),%ebx
176         addl    %ebx,           %ecx
177         xorl    %ecx,           %edi
178         # round 7 
179         movl    56(%ebp),       %edx
180         movl    60(%ebp),       %ecx
181         xorl    %edi,           %edx
182         roll    %cl,            %edx
183         movl    %edx,           %ebx
184         xorl    %ecx,           %ecx
185         movb    %dh,            %cl
186         andl    $255,           %ebx
187         shrl    $16,            %edx
188         xorl    %eax,           %eax
189         movb    %dh,            %al
190         andl    $255,           %edx
191         movl    CAST_S_table0(,%ecx,4),%ecx
192         movl    CAST_S_table1(,%ebx,4),%ebx
193         subl    %ebx,           %ecx
194         movl    CAST_S_table2(,%eax,4),%ebx
195         addl    %ebx,           %ecx
196         movl    CAST_S_table3(,%edx,4),%ebx
197         xorl    %ebx,           %ecx
198         xorl    %ecx,           %esi
199         # round 8 
200         movl    64(%ebp),       %edx
201         movl    68(%ebp),       %ecx
202         subl    %esi,           %edx
203         roll    %cl,            %edx
204         movl    %edx,           %ebx
205         xorl    %ecx,           %ecx
206         movb    %dh,            %cl
207         andl    $255,           %ebx
208         shrl    $16,            %edx
209         xorl    %eax,           %eax
210         movb    %dh,            %al
211         andl    $255,           %edx
212         movl    CAST_S_table0(,%ecx,4),%ecx
213         movl    CAST_S_table1(,%ebx,4),%ebx
214         addl    %ebx,           %ecx
215         movl    CAST_S_table2(,%eax,4),%ebx
216         xorl    %ebx,           %ecx
217         movl    CAST_S_table3(,%edx,4),%ebx
218         subl    %ebx,           %ecx
219         xorl    %ecx,           %edi
220         # round 9 
221         movl    72(%ebp),       %edx
222         movl    76(%ebp),       %ecx
223         addl    %edi,           %edx
224         roll    %cl,            %edx
225         movl    %edx,           %ebx
226         xorl    %ecx,           %ecx
227         movb    %dh,            %cl
228         andl    $255,           %ebx
229         shrl    $16,            %edx
230         xorl    %eax,           %eax
231         movb    %dh,            %al
232         andl    $255,           %edx
233         movl    CAST_S_table0(,%ecx,4),%ecx
234         movl    CAST_S_table1(,%ebx,4),%ebx
235         xorl    %ebx,           %ecx
236         movl    CAST_S_table2(,%eax,4),%ebx
237         subl    %ebx,           %ecx
238         movl    CAST_S_table3(,%edx,4),%ebx
239         addl    %ebx,           %ecx
240         xorl    %ecx,           %esi
241         # round 10 
242         movl    80(%ebp),       %edx
243         movl    84(%ebp),       %ecx
244         xorl    %esi,           %edx
245         roll    %cl,            %edx
246         movl    %edx,           %ebx
247         xorl    %ecx,           %ecx
248         movb    %dh,            %cl
249         andl    $255,           %ebx
250         shrl    $16,            %edx
251         xorl    %eax,           %eax
252         movb    %dh,            %al
253         andl    $255,           %edx
254         movl    CAST_S_table0(,%ecx,4),%ecx
255         movl    CAST_S_table1(,%ebx,4),%ebx
256         subl    %ebx,           %ecx
257         movl    CAST_S_table2(,%eax,4),%ebx
258         addl    %ebx,           %ecx
259         movl    CAST_S_table3(,%edx,4),%ebx
260         xorl    %ebx,           %ecx
261         xorl    %ecx,           %edi
262         # round 11 
263         movl    88(%ebp),       %edx
264         movl    92(%ebp),       %ecx
265         subl    %edi,           %edx
266         roll    %cl,            %edx
267         movl    %edx,           %ebx
268         xorl    %ecx,           %ecx
269         movb    %dh,            %cl
270         andl    $255,           %ebx
271         shrl    $16,            %edx
272         xorl    %eax,           %eax
273         movb    %dh,            %al
274         andl    $255,           %edx
275         movl    CAST_S_table0(,%ecx,4),%ecx
276         movl    CAST_S_table1(,%ebx,4),%ebx
277         addl    %ebx,           %ecx
278         movl    CAST_S_table2(,%eax,4),%ebx
279         xorl    %ebx,           %ecx
280         movl    CAST_S_table3(,%edx,4),%ebx
281         subl    %ebx,           %ecx
282         xorl    %ecx,           %esi
283         # test short key flag 
284         popl    %edx
285         orl     %edx,           %edx
286         jnz     .L000cast_enc_done
287         # round 12 
288         movl    96(%ebp),       %edx
289         movl    100(%ebp),      %ecx
290         addl    %esi,           %edx
291         roll    %cl,            %edx
292         movl    %edx,           %ebx
293         xorl    %ecx,           %ecx
294         movb    %dh,            %cl
295         andl    $255,           %ebx
296         shrl    $16,            %edx
297         xorl    %eax,           %eax
298         movb    %dh,            %al
299         andl    $255,           %edx
300         movl    CAST_S_table0(,%ecx,4),%ecx
301         movl    CAST_S_table1(,%ebx,4),%ebx
302         xorl    %ebx,           %ecx
303         movl    CAST_S_table2(,%eax,4),%ebx
304         subl    %ebx,           %ecx
305         movl    CAST_S_table3(,%edx,4),%ebx
306         addl    %ebx,           %ecx
307         xorl    %ecx,           %edi
308         # round 13 
309         movl    104(%ebp),      %edx
310         movl    108(%ebp),      %ecx
311         xorl    %edi,           %edx
312         roll    %cl,            %edx
313         movl    %edx,           %ebx
314         xorl    %ecx,           %ecx
315         movb    %dh,            %cl
316         andl    $255,           %ebx
317         shrl    $16,            %edx
318         xorl    %eax,           %eax
319         movb    %dh,            %al
320         andl    $255,           %edx
321         movl    CAST_S_table0(,%ecx,4),%ecx
322         movl    CAST_S_table1(,%ebx,4),%ebx
323         subl    %ebx,           %ecx
324         movl    CAST_S_table2(,%eax,4),%ebx
325         addl    %ebx,           %ecx
326         movl    CAST_S_table3(,%edx,4),%ebx
327         xorl    %ebx,           %ecx
328         xorl    %ecx,           %esi
329         # round 14 
330         movl    112(%ebp),      %edx
331         movl    116(%ebp),      %ecx
332         subl    %esi,           %edx
333         roll    %cl,            %edx
334         movl    %edx,           %ebx
335         xorl    %ecx,           %ecx
336         movb    %dh,            %cl
337         andl    $255,           %ebx
338         shrl    $16,            %edx
339         xorl    %eax,           %eax
340         movb    %dh,            %al
341         andl    $255,           %edx
342         movl    CAST_S_table0(,%ecx,4),%ecx
343         movl    CAST_S_table1(,%ebx,4),%ebx
344         addl    %ebx,           %ecx
345         movl    CAST_S_table2(,%eax,4),%ebx
346         xorl    %ebx,           %ecx
347         movl    CAST_S_table3(,%edx,4),%ebx
348         subl    %ebx,           %ecx
349         xorl    %ecx,           %edi
350         # round 15 
351         movl    120(%ebp),      %edx
352         movl    124(%ebp),      %ecx
353         addl    %edi,           %edx
354         roll    %cl,            %edx
355         movl    %edx,           %ebx
356         xorl    %ecx,           %ecx
357         movb    %dh,            %cl
358         andl    $255,           %ebx
359         shrl    $16,            %edx
360         xorl    %eax,           %eax
361         movb    %dh,            %al
362         andl    $255,           %edx
363         movl    CAST_S_table0(,%ecx,4),%ecx
364         movl    CAST_S_table1(,%ebx,4),%ebx
365         xorl    %ebx,           %ecx
366         movl    CAST_S_table2(,%eax,4),%ebx
367         subl    %ebx,           %ecx
368         movl    CAST_S_table3(,%edx,4),%ebx
369         addl    %ebx,           %ecx
370         xorl    %ecx,           %esi
371 .L000cast_enc_done:
372         nop
373         movl    20(%esp),       %eax
374         movl    %edi,           4(%eax)
375         movl    %esi,           (%eax)
376         popl    %edi
377         popl    %esi
378         popl    %ebx
379         popl    %ebp
380         ret
381 .CAST_encrypt_end:
382         .size   CAST_encrypt,.CAST_encrypt_end-CAST_encrypt
383 .ident  "CAST_encrypt"
384 .text
385         .align 16
386 .globl CAST_decrypt
387         .type   CAST_decrypt,@function
388 CAST_decrypt:
389
390         pushl   %ebp
391         pushl   %ebx
392         movl    12(%esp),       %ebx
393         movl    16(%esp),       %ebp
394         pushl   %esi
395         pushl   %edi
396         # Load the 2 words 
397         movl    (%ebx),         %edi
398         movl    4(%ebx),        %esi
399         # Get short key flag 
400         movl    128(%ebp),      %eax
401         orl     %eax,           %eax
402         jnz     .L001cast_dec_skip
403         xorl    %eax,           %eax
404         # round 15 
405         movl    120(%ebp),      %edx
406         movl    124(%ebp),      %ecx
407         addl    %esi,           %edx
408         roll    %cl,            %edx
409         movl    %edx,           %ebx
410         xorl    %ecx,           %ecx
411         movb    %dh,            %cl
412         andl    $255,           %ebx
413         shrl    $16,            %edx
414         xorl    %eax,           %eax
415         movb    %dh,            %al
416         andl    $255,           %edx
417         movl    CAST_S_table0(,%ecx,4),%ecx
418         movl    CAST_S_table1(,%ebx,4),%ebx
419         xorl    %ebx,           %ecx
420         movl    CAST_S_table2(,%eax,4),%ebx
421         subl    %ebx,           %ecx
422         movl    CAST_S_table3(,%edx,4),%ebx
423         addl    %ebx,           %ecx
424         xorl    %ecx,           %edi
425         # round 14 
426         movl    112(%ebp),      %edx
427         movl    116(%ebp),      %ecx
428         subl    %edi,           %edx
429         roll    %cl,            %edx
430         movl    %edx,           %ebx
431         xorl    %ecx,           %ecx
432         movb    %dh,            %cl
433         andl    $255,           %ebx
434         shrl    $16,            %edx
435         xorl    %eax,           %eax
436         movb    %dh,            %al
437         andl    $255,           %edx
438         movl    CAST_S_table0(,%ecx,4),%ecx
439         movl    CAST_S_table1(,%ebx,4),%ebx
440         addl    %ebx,           %ecx
441         movl    CAST_S_table2(,%eax,4),%ebx
442         xorl    %ebx,           %ecx
443         movl    CAST_S_table3(,%edx,4),%ebx
444         subl    %ebx,           %ecx
445         xorl    %ecx,           %esi
446         # round 13 
447         movl    104(%ebp),      %edx
448         movl    108(%ebp),      %ecx
449         xorl    %esi,           %edx
450         roll    %cl,            %edx
451         movl    %edx,           %ebx
452         xorl    %ecx,           %ecx
453         movb    %dh,            %cl
454         andl    $255,           %ebx
455         shrl    $16,            %edx
456         xorl    %eax,           %eax
457         movb    %dh,            %al
458         andl    $255,           %edx
459         movl    CAST_S_table0(,%ecx,4),%ecx
460         movl    CAST_S_table1(,%ebx,4),%ebx
461         subl    %ebx,           %ecx
462         movl    CAST_S_table2(,%eax,4),%ebx
463         addl    %ebx,           %ecx
464         movl    CAST_S_table3(,%edx,4),%ebx
465         xorl    %ebx,           %ecx
466         xorl    %ecx,           %edi
467         # round 12 
468         movl    96(%ebp),       %edx
469         movl    100(%ebp),      %ecx
470         addl    %edi,           %edx
471         roll    %cl,            %edx
472         movl    %edx,           %ebx
473         xorl    %ecx,           %ecx
474         movb    %dh,            %cl
475         andl    $255,           %ebx
476         shrl    $16,            %edx
477         xorl    %eax,           %eax
478         movb    %dh,            %al
479         andl    $255,           %edx
480         movl    CAST_S_table0(,%ecx,4),%ecx
481         movl    CAST_S_table1(,%ebx,4),%ebx
482         xorl    %ebx,           %ecx
483         movl    CAST_S_table2(,%eax,4),%ebx
484         subl    %ebx,           %ecx
485         movl    CAST_S_table3(,%edx,4),%ebx
486         addl    %ebx,           %ecx
487         xorl    %ecx,           %esi
488 .L001cast_dec_skip:
489         # round 11 
490         movl    88(%ebp),       %edx
491         movl    92(%ebp),       %ecx
492         subl    %esi,           %edx
493         roll    %cl,            %edx
494         movl    %edx,           %ebx
495         xorl    %ecx,           %ecx
496         movb    %dh,            %cl
497         andl    $255,           %ebx
498         shrl    $16,            %edx
499         xorl    %eax,           %eax
500         movb    %dh,            %al
501         andl    $255,           %edx
502         movl    CAST_S_table0(,%ecx,4),%ecx
503         movl    CAST_S_table1(,%ebx,4),%ebx
504         addl    %ebx,           %ecx
505         movl    CAST_S_table2(,%eax,4),%ebx
506         xorl    %ebx,           %ecx
507         movl    CAST_S_table3(,%edx,4),%ebx
508         subl    %ebx,           %ecx
509         xorl    %ecx,           %edi
510         # round 10 
511         movl    80(%ebp),       %edx
512         movl    84(%ebp),       %ecx
513         xorl    %edi,           %edx
514         roll    %cl,            %edx
515         movl    %edx,           %ebx
516         xorl    %ecx,           %ecx
517         movb    %dh,            %cl
518         andl    $255,           %ebx
519         shrl    $16,            %edx
520         xorl    %eax,           %eax
521         movb    %dh,            %al
522         andl    $255,           %edx
523         movl    CAST_S_table0(,%ecx,4),%ecx
524         movl    CAST_S_table1(,%ebx,4),%ebx
525         subl    %ebx,           %ecx
526         movl    CAST_S_table2(,%eax,4),%ebx
527         addl    %ebx,           %ecx
528         movl    CAST_S_table3(,%edx,4),%ebx
529         xorl    %ebx,           %ecx
530         xorl    %ecx,           %esi
531         # round 9 
532         movl    72(%ebp),       %edx
533         movl    76(%ebp),       %ecx
534         addl    %esi,           %edx
535         roll    %cl,            %edx
536         movl    %edx,           %ebx
537         xorl    %ecx,           %ecx
538         movb    %dh,            %cl
539         andl    $255,           %ebx
540         shrl    $16,            %edx
541         xorl    %eax,           %eax
542         movb    %dh,            %al
543         andl    $255,           %edx
544         movl    CAST_S_table0(,%ecx,4),%ecx
545         movl    CAST_S_table1(,%ebx,4),%ebx
546         xorl    %ebx,           %ecx
547         movl    CAST_S_table2(,%eax,4),%ebx
548         subl    %ebx,           %ecx
549         movl    CAST_S_table3(,%edx,4),%ebx
550         addl    %ebx,           %ecx
551         xorl    %ecx,           %edi
552         # round 8 
553         movl    64(%ebp),       %edx
554         movl    68(%ebp),       %ecx
555         subl    %edi,           %edx
556         roll    %cl,            %edx
557         movl    %edx,           %ebx
558         xorl    %ecx,           %ecx
559         movb    %dh,            %cl
560         andl    $255,           %ebx
561         shrl    $16,            %edx
562         xorl    %eax,           %eax
563         movb    %dh,            %al
564         andl    $255,           %edx
565         movl    CAST_S_table0(,%ecx,4),%ecx
566         movl    CAST_S_table1(,%ebx,4),%ebx
567         addl    %ebx,           %ecx
568         movl    CAST_S_table2(,%eax,4),%ebx
569         xorl    %ebx,           %ecx
570         movl    CAST_S_table3(,%edx,4),%ebx
571         subl    %ebx,           %ecx
572         xorl    %ecx,           %esi
573         # round 7 
574         movl    56(%ebp),       %edx
575         movl    60(%ebp),       %ecx
576         xorl    %esi,           %edx
577         roll    %cl,            %edx
578         movl    %edx,           %ebx
579         xorl    %ecx,           %ecx
580         movb    %dh,            %cl
581         andl    $255,           %ebx
582         shrl    $16,            %edx
583         xorl    %eax,           %eax
584         movb    %dh,            %al
585         andl    $255,           %edx
586         movl    CAST_S_table0(,%ecx,4),%ecx
587         movl    CAST_S_table1(,%ebx,4),%ebx
588         subl    %ebx,           %ecx
589         movl    CAST_S_table2(,%eax,4),%ebx
590         addl    %ebx,           %ecx
591         movl    CAST_S_table3(,%edx,4),%ebx
592         xorl    %ebx,           %ecx
593         xorl    %ecx,           %edi
594         # round 6 
595         movl    48(%ebp),       %edx
596         movl    52(%ebp),       %ecx
597         addl    %edi,           %edx
598         roll    %cl,            %edx
599         movl    %edx,           %ebx
600         xorl    %ecx,           %ecx
601         movb    %dh,            %cl
602         andl    $255,           %ebx
603         shrl    $16,            %edx
604         xorl    %eax,           %eax
605         movb    %dh,            %al
606         andl    $255,           %edx
607         movl    CAST_S_table0(,%ecx,4),%ecx
608         movl    CAST_S_table1(,%ebx,4),%ebx
609         xorl    %ebx,           %ecx
610         movl    CAST_S_table2(,%eax,4),%ebx
611         subl    %ebx,           %ecx
612         movl    CAST_S_table3(,%edx,4),%ebx
613         addl    %ebx,           %ecx
614         xorl    %ecx,           %esi
615         # round 5 
616         movl    40(%ebp),       %edx
617         movl    44(%ebp),       %ecx
618         subl    %esi,           %edx
619         roll    %cl,            %edx
620         movl    %edx,           %ebx
621         xorl    %ecx,           %ecx
622         movb    %dh,            %cl
623         andl    $255,           %ebx
624         shrl    $16,            %edx
625         xorl    %eax,           %eax
626         movb    %dh,            %al
627         andl    $255,           %edx
628         movl    CAST_S_table0(,%ecx,4),%ecx
629         movl    CAST_S_table1(,%ebx,4),%ebx
630         addl    %ebx,           %ecx
631         movl    CAST_S_table2(,%eax,4),%ebx
632         xorl    %ebx,           %ecx
633         movl    CAST_S_table3(,%edx,4),%ebx
634         subl    %ebx,           %ecx
635         xorl    %ecx,           %edi
636         # round 4 
637         movl    32(%ebp),       %edx
638         movl    36(%ebp),       %ecx
639         xorl    %edi,           %edx
640         roll    %cl,            %edx
641         movl    %edx,           %ebx
642         xorl    %ecx,           %ecx
643         movb    %dh,            %cl
644         andl    $255,           %ebx
645         shrl    $16,            %edx
646         xorl    %eax,           %eax
647         movb    %dh,            %al
648         andl    $255,           %edx
649         movl    CAST_S_table0(,%ecx,4),%ecx
650         movl    CAST_S_table1(,%ebx,4),%ebx
651         subl    %ebx,           %ecx
652         movl    CAST_S_table2(,%eax,4),%ebx
653         addl    %ebx,           %ecx
654         movl    CAST_S_table3(,%edx,4),%ebx
655         xorl    %ebx,           %ecx
656         xorl    %ecx,           %esi
657         # round 3 
658         movl    24(%ebp),       %edx
659         movl    28(%ebp),       %ecx
660         addl    %esi,           %edx
661         roll    %cl,            %edx
662         movl    %edx,           %ebx
663         xorl    %ecx,           %ecx
664         movb    %dh,            %cl
665         andl    $255,           %ebx
666         shrl    $16,            %edx
667         xorl    %eax,           %eax
668         movb    %dh,            %al
669         andl    $255,           %edx
670         movl    CAST_S_table0(,%ecx,4),%ecx
671         movl    CAST_S_table1(,%ebx,4),%ebx
672         xorl    %ebx,           %ecx
673         movl    CAST_S_table2(,%eax,4),%ebx
674         subl    %ebx,           %ecx
675         movl    CAST_S_table3(,%edx,4),%ebx
676         addl    %ebx,           %ecx
677         xorl    %ecx,           %edi
678         # round 2 
679         movl    16(%ebp),       %edx
680         movl    20(%ebp),       %ecx
681         subl    %edi,           %edx
682         roll    %cl,            %edx
683         movl    %edx,           %ebx
684         xorl    %ecx,           %ecx
685         movb    %dh,            %cl
686         andl    $255,           %ebx
687         shrl    $16,            %edx
688         xorl    %eax,           %eax
689         movb    %dh,            %al
690         andl    $255,           %edx
691         movl    CAST_S_table0(,%ecx,4),%ecx
692         movl    CAST_S_table1(,%ebx,4),%ebx
693         addl    %ebx,           %ecx
694         movl    CAST_S_table2(,%eax,4),%ebx
695         xorl    %ebx,           %ecx
696         movl    CAST_S_table3(,%edx,4),%ebx
697         subl    %ebx,           %ecx
698         xorl    %ecx,           %esi
699         # round 1 
700         movl    8(%ebp),        %edx
701         movl    12(%ebp),       %ecx
702         xorl    %esi,           %edx
703         roll    %cl,            %edx
704         movl    %edx,           %ebx
705         xorl    %ecx,           %ecx
706         movb    %dh,            %cl
707         andl    $255,           %ebx
708         shrl    $16,            %edx
709         xorl    %eax,           %eax
710         movb    %dh,            %al
711         andl    $255,           %edx
712         movl    CAST_S_table0(,%ecx,4),%ecx
713         movl    CAST_S_table1(,%ebx,4),%ebx
714         subl    %ebx,           %ecx
715         movl    CAST_S_table2(,%eax,4),%ebx
716         addl    %ebx,           %ecx
717         movl    CAST_S_table3(,%edx,4),%ebx
718         xorl    %ebx,           %ecx
719         xorl    %ecx,           %edi
720         # round 0 
721         movl    (%ebp),         %edx
722         movl    4(%ebp),        %ecx
723         addl    %edi,           %edx
724         roll    %cl,            %edx
725         movl    %edx,           %ebx
726         xorl    %ecx,           %ecx
727         movb    %dh,            %cl
728         andl    $255,           %ebx
729         shrl    $16,            %edx
730         xorl    %eax,           %eax
731         movb    %dh,            %al
732         andl    $255,           %edx
733         movl    CAST_S_table0(,%ecx,4),%ecx
734         movl    CAST_S_table1(,%ebx,4),%ebx
735         xorl    %ebx,           %ecx
736         movl    CAST_S_table2(,%eax,4),%ebx
737         subl    %ebx,           %ecx
738         movl    CAST_S_table3(,%edx,4),%ebx
739         addl    %ebx,           %ecx
740         xorl    %ecx,           %esi
741         nop
742         movl    20(%esp),       %eax
743         movl    %edi,           4(%eax)
744         movl    %esi,           (%eax)
745         popl    %edi
746         popl    %esi
747         popl    %ebx
748         popl    %ebp
749         ret
750 .CAST_decrypt_end:
751         .size   CAST_decrypt,.CAST_decrypt_end-CAST_decrypt
752 .ident  "CAST_decrypt"
753 .text
754         .align 16
755 .globl CAST_cbc_encrypt
756         .type   CAST_cbc_encrypt,@function
757 CAST_cbc_encrypt:
758
759         pushl   %ebp
760         pushl   %ebx
761         pushl   %esi
762         pushl   %edi
763         movl    28(%esp),       %ebp
764         # getting iv ptr from parameter 4 
765         movl    36(%esp),       %ebx
766         movl    (%ebx),         %esi
767         movl    4(%ebx),        %edi
768         pushl   %edi
769         pushl   %esi
770         pushl   %edi
771         pushl   %esi
772         movl    %esp,           %ebx
773         movl    36(%esp),       %esi
774         movl    40(%esp),       %edi
775         # getting encrypt flag from parameter 5 
776         movl    56(%esp),       %ecx
777         # get and push parameter 3 
778         movl    48(%esp),       %eax
779         pushl   %eax
780         pushl   %ebx
781         cmpl    $0,             %ecx
782         jz      .L002decrypt
783         andl    $4294967288,    %ebp
784         movl    8(%esp),        %eax
785         movl    12(%esp),       %ebx
786         jz      .L003encrypt_finish
787 .L004encrypt_loop:
788         movl    (%esi),         %ecx
789         movl    4(%esi),        %edx
790         xorl    %ecx,           %eax
791         xorl    %edx,           %ebx
792 .byte 15
793 .byte 200               # bswapl  %eax 
794 .byte 15
795 .byte 203               # bswapl  %ebx 
796         movl    %eax,           8(%esp)
797         movl    %ebx,           12(%esp)
798         call    CAST_encrypt
799         movl    8(%esp),        %eax
800         movl    12(%esp),       %ebx
801 .byte 15
802 .byte 200               # bswapl  %eax 
803 .byte 15
804 .byte 203               # bswapl  %ebx 
805         movl    %eax,           (%edi)
806         movl    %ebx,           4(%edi)
807         addl    $8,             %esi
808         addl    $8,             %edi
809         subl    $8,             %ebp
810         jnz     .L004encrypt_loop
811 .L003encrypt_finish:
812         movl    52(%esp),       %ebp
813         andl    $7,             %ebp
814         jz      .L005finish
815         xorl    %ecx,           %ecx
816         xorl    %edx,           %edx
817         movl    .L006cbc_enc_jmp_table(,%ebp,4),%ebp
818         jmp     *%ebp
819 .L007ej7:
820         xorl    %edx,           %edx
821         movb    6(%esi),        %dh
822         sall    $8,             %edx
823 .L008ej6:
824         movb    5(%esi),        %dh
825 .L009ej5:
826         movb    4(%esi),        %dl
827 .L010ej4:
828         movl    (%esi),         %ecx
829         jmp     .L011ejend
830 .L012ej3:
831         movb    2(%esi),        %ch
832         xorl    %ecx,           %ecx
833         sall    $8,             %ecx
834 .L013ej2:
835         movb    1(%esi),        %ch
836 .L014ej1:
837         movb    (%esi),         %cl
838 .L011ejend:
839         xorl    %ecx,           %eax
840         xorl    %edx,           %ebx
841 .byte 15
842 .byte 200               # bswapl  %eax 
843 .byte 15
844 .byte 203               # bswapl  %ebx 
845         movl    %eax,           8(%esp)
846         movl    %ebx,           12(%esp)
847         call    CAST_encrypt
848         movl    8(%esp),        %eax
849         movl    12(%esp),       %ebx
850 .byte 15
851 .byte 200               # bswapl  %eax 
852 .byte 15
853 .byte 203               # bswapl  %ebx 
854         movl    %eax,           (%edi)
855         movl    %ebx,           4(%edi)
856         jmp     .L005finish
857 .align 16
858 .L002decrypt:
859         andl    $4294967288,    %ebp
860         movl    16(%esp),       %eax
861         movl    20(%esp),       %ebx
862         jz      .L015decrypt_finish
863 .L016decrypt_loop:
864         movl    (%esi),         %eax
865         movl    4(%esi),        %ebx
866 .byte 15
867 .byte 200               # bswapl  %eax 
868 .byte 15
869 .byte 203               # bswapl  %ebx 
870         movl    %eax,           8(%esp)
871         movl    %ebx,           12(%esp)
872         call    CAST_decrypt
873         movl    8(%esp),        %eax
874         movl    12(%esp),       %ebx
875 .byte 15
876 .byte 200               # bswapl  %eax 
877 .byte 15
878 .byte 203               # bswapl  %ebx 
879         movl    16(%esp),       %ecx
880         movl    20(%esp),       %edx
881         xorl    %eax,           %ecx
882         xorl    %ebx,           %edx
883         movl    (%esi),         %eax
884         movl    4(%esi),        %ebx
885         movl    %ecx,           (%edi)
886         movl    %edx,           4(%edi)
887         movl    %eax,           16(%esp)
888         movl    %ebx,           20(%esp)
889         addl    $8,             %esi
890         addl    $8,             %edi
891         subl    $8,             %ebp
892         jnz     .L016decrypt_loop
893 .L015decrypt_finish:
894         movl    52(%esp),       %ebp
895         andl    $7,             %ebp
896         jz      .L005finish
897         movl    (%esi),         %eax
898         movl    4(%esi),        %ebx
899 .byte 15
900 .byte 200               # bswapl  %eax 
901 .byte 15
902 .byte 203               # bswapl  %ebx 
903         movl    %eax,           8(%esp)
904         movl    %ebx,           12(%esp)
905         call    CAST_decrypt
906         movl    8(%esp),        %eax
907         movl    12(%esp),       %ebx
908 .byte 15
909 .byte 200               # bswapl  %eax 
910 .byte 15
911 .byte 203               # bswapl  %ebx 
912         movl    16(%esp),       %ecx
913         movl    20(%esp),       %edx
914         xorl    %eax,           %ecx
915         xorl    %ebx,           %edx
916         movl    (%esi),         %eax
917         movl    4(%esi),        %ebx
918 .L017dj7:
919         rorl    $16,            %edx
920         movb    %dl,            6(%edi)
921         shrl    $16,            %edx
922 .L018dj6:
923         movb    %dh,            5(%edi)
924 .L019dj5:
925         movb    %dl,            4(%edi)
926 .L020dj4:
927         movl    %ecx,           (%edi)
928         jmp     .L021djend
929 .L022dj3:
930         rorl    $16,            %ecx
931         movb    %cl,            2(%edi)
932         sall    $16,            %ecx
933 .L023dj2:
934         movb    %ch,            1(%esi)
935 .L024dj1:
936         movb    %cl,            (%esi)
937 .L021djend:
938         jmp     .L005finish
939 .align 16
940 .L005finish:
941         movl    60(%esp),       %ecx
942         addl    $24,            %esp
943         movl    %eax,           (%ecx)
944         movl    %ebx,           4(%ecx)
945         popl    %edi
946         popl    %esi
947         popl    %ebx
948         popl    %ebp
949         ret
950 .align 16
951 .L006cbc_enc_jmp_table:
952         .long 0
953         .long .L014ej1
954         .long .L013ej2
955         .long .L012ej3
956         .long .L010ej4
957         .long .L009ej5
958         .long .L008ej6
959         .long .L007ej7
960 .align 16
961 .L025cbc_dec_jmp_table:
962         .long 0
963         .long .L024dj1
964         .long .L023dj2
965         .long .L022dj3
966         .long .L020dj4
967         .long .L019dj5
968         .long .L018dj6
969         .long .L017dj7
970 .L_CAST_cbc_encrypt_end:
971         .size   CAST_cbc_encrypt,.L_CAST_cbc_encrypt_end-CAST_cbc_encrypt
972 .ident  "desasm.pl"