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