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