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