cast-586.s revision 127326
1	# $FreeBSD: head/secure/lib/libcrypto/i386/cast-586.s 127326 2004-03-23 08:32:29Z markm $
2
3
4
5
6
7
8	.file	"cast-586.s"
9	.version	"01.01"
10gcc2_compiled.:
11.text
12	.align 16
13.globl CAST_encrypt
14	.type	CAST_encrypt,@function
15CAST_encrypt:
16
17	pushl	%ebp
18	pushl	%ebx
19	movl	12(%esp),	%ebx
20	movl	16(%esp),	%ebp
21	pushl	%esi
22	pushl	%edi
23
24	movl	(%ebx),		%edi
25	movl	4(%ebx),	%esi
26
27	movl	128(%ebp),	%eax
28	pushl	%eax
29	xorl	%eax,		%eax
30
31	movl	(%ebp),		%edx
32	movl	4(%ebp),	%ecx
33	addl	%esi,		%edx
34	roll	%cl,		%edx
35	movl	%edx,		%ebx
36	xorl	%ecx,		%ecx
37	movb	%dh,		%cl
38	andl	$255,		%ebx
39	shrl	$16,		%edx
40	xorl	%eax,		%eax
41	movb	%dh,		%al
42	andl	$255,		%edx
43	movl	CAST_S_table0(,%ecx,4),%ecx
44	movl	CAST_S_table1(,%ebx,4),%ebx
45	xorl	%ebx,		%ecx
46	movl	CAST_S_table2(,%eax,4),%ebx
47	subl	%ebx,		%ecx
48	movl	CAST_S_table3(,%edx,4),%ebx
49	addl	%ebx,		%ecx
50	xorl	%ecx,		%edi
51
52	movl	8(%ebp),	%edx
53	movl	12(%ebp),	%ecx
54	xorl	%edi,		%edx
55	roll	%cl,		%edx
56	movl	%edx,		%ebx
57	xorl	%ecx,		%ecx
58	movb	%dh,		%cl
59	andl	$255,		%ebx
60	shrl	$16,		%edx
61	xorl	%eax,		%eax
62	movb	%dh,		%al
63	andl	$255,		%edx
64	movl	CAST_S_table0(,%ecx,4),%ecx
65	movl	CAST_S_table1(,%ebx,4),%ebx
66	subl	%ebx,		%ecx
67	movl	CAST_S_table2(,%eax,4),%ebx
68	addl	%ebx,		%ecx
69	movl	CAST_S_table3(,%edx,4),%ebx
70	xorl	%ebx,		%ecx
71	xorl	%ecx,		%esi
72
73	movl	16(%ebp),	%edx
74	movl	20(%ebp),	%ecx
75	subl	%esi,		%edx
76	roll	%cl,		%edx
77	movl	%edx,		%ebx
78	xorl	%ecx,		%ecx
79	movb	%dh,		%cl
80	andl	$255,		%ebx
81	shrl	$16,		%edx
82	xorl	%eax,		%eax
83	movb	%dh,		%al
84	andl	$255,		%edx
85	movl	CAST_S_table0(,%ecx,4),%ecx
86	movl	CAST_S_table1(,%ebx,4),%ebx
87	addl	%ebx,		%ecx
88	movl	CAST_S_table2(,%eax,4),%ebx
89	xorl	%ebx,		%ecx
90	movl	CAST_S_table3(,%edx,4),%ebx
91	subl	%ebx,		%ecx
92	xorl	%ecx,		%edi
93
94	movl	24(%ebp),	%edx
95	movl	28(%ebp),	%ecx
96	addl	%edi,		%edx
97	roll	%cl,		%edx
98	movl	%edx,		%ebx
99	xorl	%ecx,		%ecx
100	movb	%dh,		%cl
101	andl	$255,		%ebx
102	shrl	$16,		%edx
103	xorl	%eax,		%eax
104	movb	%dh,		%al
105	andl	$255,		%edx
106	movl	CAST_S_table0(,%ecx,4),%ecx
107	movl	CAST_S_table1(,%ebx,4),%ebx
108	xorl	%ebx,		%ecx
109	movl	CAST_S_table2(,%eax,4),%ebx
110	subl	%ebx,		%ecx
111	movl	CAST_S_table3(,%edx,4),%ebx
112	addl	%ebx,		%ecx
113	xorl	%ecx,		%esi
114
115	movl	32(%ebp),	%edx
116	movl	36(%ebp),	%ecx
117	xorl	%esi,		%edx
118	roll	%cl,		%edx
119	movl	%edx,		%ebx
120	xorl	%ecx,		%ecx
121	movb	%dh,		%cl
122	andl	$255,		%ebx
123	shrl	$16,		%edx
124	xorl	%eax,		%eax
125	movb	%dh,		%al
126	andl	$255,		%edx
127	movl	CAST_S_table0(,%ecx,4),%ecx
128	movl	CAST_S_table1(,%ebx,4),%ebx
129	subl	%ebx,		%ecx
130	movl	CAST_S_table2(,%eax,4),%ebx
131	addl	%ebx,		%ecx
132	movl	CAST_S_table3(,%edx,4),%ebx
133	xorl	%ebx,		%ecx
134	xorl	%ecx,		%edi
135
136	movl	40(%ebp),	%edx
137	movl	44(%ebp),	%ecx
138	subl	%edi,		%edx
139	roll	%cl,		%edx
140	movl	%edx,		%ebx
141	xorl	%ecx,		%ecx
142	movb	%dh,		%cl
143	andl	$255,		%ebx
144	shrl	$16,		%edx
145	xorl	%eax,		%eax
146	movb	%dh,		%al
147	andl	$255,		%edx
148	movl	CAST_S_table0(,%ecx,4),%ecx
149	movl	CAST_S_table1(,%ebx,4),%ebx
150	addl	%ebx,		%ecx
151	movl	CAST_S_table2(,%eax,4),%ebx
152	xorl	%ebx,		%ecx
153	movl	CAST_S_table3(,%edx,4),%ebx
154	subl	%ebx,		%ecx
155	xorl	%ecx,		%esi
156
157	movl	48(%ebp),	%edx
158	movl	52(%ebp),	%ecx
159	addl	%esi,		%edx
160	roll	%cl,		%edx
161	movl	%edx,		%ebx
162	xorl	%ecx,		%ecx
163	movb	%dh,		%cl
164	andl	$255,		%ebx
165	shrl	$16,		%edx
166	xorl	%eax,		%eax
167	movb	%dh,		%al
168	andl	$255,		%edx
169	movl	CAST_S_table0(,%ecx,4),%ecx
170	movl	CAST_S_table1(,%ebx,4),%ebx
171	xorl	%ebx,		%ecx
172	movl	CAST_S_table2(,%eax,4),%ebx
173	subl	%ebx,		%ecx
174	movl	CAST_S_table3(,%edx,4),%ebx
175	addl	%ebx,		%ecx
176	xorl	%ecx,		%edi
177
178	movl	56(%ebp),	%edx
179	movl	60(%ebp),	%ecx
180	xorl	%edi,		%edx
181	roll	%cl,		%edx
182	movl	%edx,		%ebx
183	xorl	%ecx,		%ecx
184	movb	%dh,		%cl
185	andl	$255,		%ebx
186	shrl	$16,		%edx
187	xorl	%eax,		%eax
188	movb	%dh,		%al
189	andl	$255,		%edx
190	movl	CAST_S_table0(,%ecx,4),%ecx
191	movl	CAST_S_table1(,%ebx,4),%ebx
192	subl	%ebx,		%ecx
193	movl	CAST_S_table2(,%eax,4),%ebx
194	addl	%ebx,		%ecx
195	movl	CAST_S_table3(,%edx,4),%ebx
196	xorl	%ebx,		%ecx
197	xorl	%ecx,		%esi
198
199	movl	64(%ebp),	%edx
200	movl	68(%ebp),	%ecx
201	subl	%esi,		%edx
202	roll	%cl,		%edx
203	movl	%edx,		%ebx
204	xorl	%ecx,		%ecx
205	movb	%dh,		%cl
206	andl	$255,		%ebx
207	shrl	$16,		%edx
208	xorl	%eax,		%eax
209	movb	%dh,		%al
210	andl	$255,		%edx
211	movl	CAST_S_table0(,%ecx,4),%ecx
212	movl	CAST_S_table1(,%ebx,4),%ebx
213	addl	%ebx,		%ecx
214	movl	CAST_S_table2(,%eax,4),%ebx
215	xorl	%ebx,		%ecx
216	movl	CAST_S_table3(,%edx,4),%ebx
217	subl	%ebx,		%ecx
218	xorl	%ecx,		%edi
219
220	movl	72(%ebp),	%edx
221	movl	76(%ebp),	%ecx
222	addl	%edi,		%edx
223	roll	%cl,		%edx
224	movl	%edx,		%ebx
225	xorl	%ecx,		%ecx
226	movb	%dh,		%cl
227	andl	$255,		%ebx
228	shrl	$16,		%edx
229	xorl	%eax,		%eax
230	movb	%dh,		%al
231	andl	$255,		%edx
232	movl	CAST_S_table0(,%ecx,4),%ecx
233	movl	CAST_S_table1(,%ebx,4),%ebx
234	xorl	%ebx,		%ecx
235	movl	CAST_S_table2(,%eax,4),%ebx
236	subl	%ebx,		%ecx
237	movl	CAST_S_table3(,%edx,4),%ebx
238	addl	%ebx,		%ecx
239	xorl	%ecx,		%esi
240
241	movl	80(%ebp),	%edx
242	movl	84(%ebp),	%ecx
243	xorl	%esi,		%edx
244	roll	%cl,		%edx
245	movl	%edx,		%ebx
246	xorl	%ecx,		%ecx
247	movb	%dh,		%cl
248	andl	$255,		%ebx
249	shrl	$16,		%edx
250	xorl	%eax,		%eax
251	movb	%dh,		%al
252	andl	$255,		%edx
253	movl	CAST_S_table0(,%ecx,4),%ecx
254	movl	CAST_S_table1(,%ebx,4),%ebx
255	subl	%ebx,		%ecx
256	movl	CAST_S_table2(,%eax,4),%ebx
257	addl	%ebx,		%ecx
258	movl	CAST_S_table3(,%edx,4),%ebx
259	xorl	%ebx,		%ecx
260	xorl	%ecx,		%edi
261
262	movl	88(%ebp),	%edx
263	movl	92(%ebp),	%ecx
264	subl	%edi,		%edx
265	roll	%cl,		%edx
266	movl	%edx,		%ebx
267	xorl	%ecx,		%ecx
268	movb	%dh,		%cl
269	andl	$255,		%ebx
270	shrl	$16,		%edx
271	xorl	%eax,		%eax
272	movb	%dh,		%al
273	andl	$255,		%edx
274	movl	CAST_S_table0(,%ecx,4),%ecx
275	movl	CAST_S_table1(,%ebx,4),%ebx
276	addl	%ebx,		%ecx
277	movl	CAST_S_table2(,%eax,4),%ebx
278	xorl	%ebx,		%ecx
279	movl	CAST_S_table3(,%edx,4),%ebx
280	subl	%ebx,		%ecx
281	xorl	%ecx,		%esi
282
283	popl	%edx
284	orl	%edx,		%edx
285	jnz	.L000cast_enc_done
286
287	movl	96(%ebp),	%edx
288	movl	100(%ebp),	%ecx
289	addl	%esi,		%edx
290	roll	%cl,		%edx
291	movl	%edx,		%ebx
292	xorl	%ecx,		%ecx
293	movb	%dh,		%cl
294	andl	$255,		%ebx
295	shrl	$16,		%edx
296	xorl	%eax,		%eax
297	movb	%dh,		%al
298	andl	$255,		%edx
299	movl	CAST_S_table0(,%ecx,4),%ecx
300	movl	CAST_S_table1(,%ebx,4),%ebx
301	xorl	%ebx,		%ecx
302	movl	CAST_S_table2(,%eax,4),%ebx
303	subl	%ebx,		%ecx
304	movl	CAST_S_table3(,%edx,4),%ebx
305	addl	%ebx,		%ecx
306	xorl	%ecx,		%edi
307
308	movl	104(%ebp),	%edx
309	movl	108(%ebp),	%ecx
310	xorl	%edi,		%edx
311	roll	%cl,		%edx
312	movl	%edx,		%ebx
313	xorl	%ecx,		%ecx
314	movb	%dh,		%cl
315	andl	$255,		%ebx
316	shrl	$16,		%edx
317	xorl	%eax,		%eax
318	movb	%dh,		%al
319	andl	$255,		%edx
320	movl	CAST_S_table0(,%ecx,4),%ecx
321	movl	CAST_S_table1(,%ebx,4),%ebx
322	subl	%ebx,		%ecx
323	movl	CAST_S_table2(,%eax,4),%ebx
324	addl	%ebx,		%ecx
325	movl	CAST_S_table3(,%edx,4),%ebx
326	xorl	%ebx,		%ecx
327	xorl	%ecx,		%esi
328
329	movl	112(%ebp),	%edx
330	movl	116(%ebp),	%ecx
331	subl	%esi,		%edx
332	roll	%cl,		%edx
333	movl	%edx,		%ebx
334	xorl	%ecx,		%ecx
335	movb	%dh,		%cl
336	andl	$255,		%ebx
337	shrl	$16,		%edx
338	xorl	%eax,		%eax
339	movb	%dh,		%al
340	andl	$255,		%edx
341	movl	CAST_S_table0(,%ecx,4),%ecx
342	movl	CAST_S_table1(,%ebx,4),%ebx
343	addl	%ebx,		%ecx
344	movl	CAST_S_table2(,%eax,4),%ebx
345	xorl	%ebx,		%ecx
346	movl	CAST_S_table3(,%edx,4),%ebx
347	subl	%ebx,		%ecx
348	xorl	%ecx,		%edi
349
350	movl	120(%ebp),	%edx
351	movl	124(%ebp),	%ecx
352	addl	%edi,		%edx
353	roll	%cl,		%edx
354	movl	%edx,		%ebx
355	xorl	%ecx,		%ecx
356	movb	%dh,		%cl
357	andl	$255,		%ebx
358	shrl	$16,		%edx
359	xorl	%eax,		%eax
360	movb	%dh,		%al
361	andl	$255,		%edx
362	movl	CAST_S_table0(,%ecx,4),%ecx
363	movl	CAST_S_table1(,%ebx,4),%ebx
364	xorl	%ebx,		%ecx
365	movl	CAST_S_table2(,%eax,4),%ebx
366	subl	%ebx,		%ecx
367	movl	CAST_S_table3(,%edx,4),%ebx
368	addl	%ebx,		%ecx
369	xorl	%ecx,		%esi
370.L000cast_enc_done:
371	nop
372	movl	20(%esp),	%eax
373	movl	%edi,		4(%eax)
374	movl	%esi,		(%eax)
375	popl	%edi
376	popl	%esi
377	popl	%ebx
378	popl	%ebp
379	ret
380.L_CAST_encrypt_end:
381	.size	CAST_encrypt,.L_CAST_encrypt_end-CAST_encrypt
382.ident	"CAST_encrypt"
383.text
384	.align 16
385.globl CAST_decrypt
386	.type	CAST_decrypt,@function
387CAST_decrypt:
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	movl	%edx,		%ebx
409	xorl	%ecx,		%ecx
410	movb	%dh,		%cl
411	andl	$255,		%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	movl	%edx,		%ebx
430	xorl	%ecx,		%ecx
431	movb	%dh,		%cl
432	andl	$255,		%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	movl	%edx,		%ebx
451	xorl	%ecx,		%ecx
452	movb	%dh,		%cl
453	andl	$255,		%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	movl	%edx,		%ebx
472	xorl	%ecx,		%ecx
473	movb	%dh,		%cl
474	andl	$255,		%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	movl	%edx,		%ebx
494	xorl	%ecx,		%ecx
495	movb	%dh,		%cl
496	andl	$255,		%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	movl	%edx,		%ebx
515	xorl	%ecx,		%ecx
516	movb	%dh,		%cl
517	andl	$255,		%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	movl	%edx,		%ebx
536	xorl	%ecx,		%ecx
537	movb	%dh,		%cl
538	andl	$255,		%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	movl	%edx,		%ebx
557	xorl	%ecx,		%ecx
558	movb	%dh,		%cl
559	andl	$255,		%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	movl	%edx,		%ebx
578	xorl	%ecx,		%ecx
579	movb	%dh,		%cl
580	andl	$255,		%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	movl	%edx,		%ebx
599	xorl	%ecx,		%ecx
600	movb	%dh,		%cl
601	andl	$255,		%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	movl	%edx,		%ebx
620	xorl	%ecx,		%ecx
621	movb	%dh,		%cl
622	andl	$255,		%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	movl	%edx,		%ebx
641	xorl	%ecx,		%ecx
642	movb	%dh,		%cl
643	andl	$255,		%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	movl	%edx,		%ebx
662	xorl	%ecx,		%ecx
663	movb	%dh,		%cl
664	andl	$255,		%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	movl	%edx,		%ebx
683	xorl	%ecx,		%ecx
684	movb	%dh,		%cl
685	andl	$255,		%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	movl	%edx,		%ebx
704	xorl	%ecx,		%ecx
705	movb	%dh,		%cl
706	andl	$255,		%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	movl	%edx,		%ebx
725	xorl	%ecx,		%ecx
726	movb	%dh,		%cl
727	andl	$255,		%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.L_CAST_decrypt_end:
750	.size	CAST_decrypt,.L_CAST_decrypt_end-CAST_decrypt
751.ident	"CAST_decrypt"
752.text
753	.align 16
754.globl CAST_cbc_encrypt
755	.type	CAST_cbc_encrypt,@function
756CAST_cbc_encrypt:
757
758	pushl	%ebp
759	pushl	%ebx
760	pushl	%esi
761	pushl	%edi
762	movl	28(%esp),	%ebp
763
764	movl	36(%esp),	%ebx
765	movl	(%ebx),		%esi
766	movl	4(%ebx),	%edi
767	pushl	%edi
768	pushl	%esi
769	pushl	%edi
770	pushl	%esi
771	movl	%esp,		%ebx
772	movl	36(%esp),	%esi
773	movl	40(%esp),	%edi
774
775	movl	56(%esp),	%ecx
776
777	movl	48(%esp),	%eax
778	pushl	%eax
779	pushl	%ebx
780	cmpl	$0,		%ecx
781	jz	.L002decrypt
782	andl	$4294967288,	%ebp
783	movl	8(%esp),	%eax
784	movl	12(%esp),	%ebx
785	jz	.L003encrypt_finish
786.L004encrypt_loop:
787	movl	(%esi),		%ecx
788	movl	4(%esi),	%edx
789	xorl	%ecx,		%eax
790	xorl	%edx,		%ebx
791.byte 15
792.byte 200
793.byte 15
794.byte 203
795	movl	%eax,		8(%esp)
796	movl	%ebx,		12(%esp)
797	call	CAST_encrypt
798	movl	8(%esp),	%eax
799	movl	12(%esp),	%ebx
800.byte 15
801.byte 200
802.byte 15
803.byte 203
804	movl	%eax,		(%edi)
805	movl	%ebx,		4(%edi)
806	addl	$8,		%esi
807	addl	$8,		%edi
808	subl	$8,		%ebp
809	jnz	.L004encrypt_loop
810.L003encrypt_finish:
811	movl	52(%esp),	%ebp
812	andl	$7,		%ebp
813	jz	.L005finish
814	call	.L006PIC_point
815.L006PIC_point:
816	popl	%edx
817	leal	.L007cbc_enc_jmp_table-.L006PIC_point(%edx),%ecx
818	movl	(%ecx,%ebp,4),	%ebp
819	addl	%edx,		%ebp
820	xorl	%ecx,		%ecx
821	xorl	%edx,		%edx
822	jmp	*%ebp
823.L008ej7:
824	xorl	%edx,		%edx
825	movb	6(%esi),	%dh
826	sall	$8,		%edx
827.L009ej6:
828	movb	5(%esi),	%dh
829.L010ej5:
830	movb	4(%esi),	%dl
831.L011ej4:
832	movl	(%esi),		%ecx
833	jmp	.L012ejend
834.L013ej3:
835	movb	2(%esi),	%ch
836	xorl	%ecx,		%ecx
837	sall	$8,		%ecx
838.L014ej2:
839	movb	1(%esi),	%ch
840.L015ej1:
841	movb	(%esi),		%cl
842.L012ejend:
843	xorl	%ecx,		%eax
844	xorl	%edx,		%ebx
845.byte 15
846.byte 200
847.byte 15
848.byte 203
849	movl	%eax,		8(%esp)
850	movl	%ebx,		12(%esp)
851	call	CAST_encrypt
852	movl	8(%esp),	%eax
853	movl	12(%esp),	%ebx
854.byte 15
855.byte 200
856.byte 15
857.byte 203
858	movl	%eax,		(%edi)
859	movl	%ebx,		4(%edi)
860	jmp	.L005finish
861.align 16
862.L002decrypt:
863	andl	$4294967288,	%ebp
864	movl	16(%esp),	%eax
865	movl	20(%esp),	%ebx
866	jz	.L016decrypt_finish
867.L017decrypt_loop:
868	movl	(%esi),		%eax
869	movl	4(%esi),	%ebx
870.byte 15
871.byte 200
872.byte 15
873.byte 203
874	movl	%eax,		8(%esp)
875	movl	%ebx,		12(%esp)
876	call	CAST_decrypt
877	movl	8(%esp),	%eax
878	movl	12(%esp),	%ebx
879.byte 15
880.byte 200
881.byte 15
882.byte 203
883	movl	16(%esp),	%ecx
884	movl	20(%esp),	%edx
885	xorl	%eax,		%ecx
886	xorl	%ebx,		%edx
887	movl	(%esi),		%eax
888	movl	4(%esi),	%ebx
889	movl	%ecx,		(%edi)
890	movl	%edx,		4(%edi)
891	movl	%eax,		16(%esp)
892	movl	%ebx,		20(%esp)
893	addl	$8,		%esi
894	addl	$8,		%edi
895	subl	$8,		%ebp
896	jnz	.L017decrypt_loop
897.L016decrypt_finish:
898	movl	52(%esp),	%ebp
899	andl	$7,		%ebp
900	jz	.L005finish
901	movl	(%esi),		%eax
902	movl	4(%esi),	%ebx
903.byte 15
904.byte 200
905.byte 15
906.byte 203
907	movl	%eax,		8(%esp)
908	movl	%ebx,		12(%esp)
909	call	CAST_decrypt
910	movl	8(%esp),	%eax
911	movl	12(%esp),	%ebx
912.byte 15
913.byte 200
914.byte 15
915.byte 203
916	movl	16(%esp),	%ecx
917	movl	20(%esp),	%edx
918	xorl	%eax,		%ecx
919	xorl	%ebx,		%edx
920	movl	(%esi),		%eax
921	movl	4(%esi),	%ebx
922.L018dj7:
923	rorl	$16,		%edx
924	movb	%dl,		6(%edi)
925	shrl	$16,		%edx
926.L019dj6:
927	movb	%dh,		5(%edi)
928.L020dj5:
929	movb	%dl,		4(%edi)
930.L021dj4:
931	movl	%ecx,		(%edi)
932	jmp	.L022djend
933.L023dj3:
934	rorl	$16,		%ecx
935	movb	%cl,		2(%edi)
936	sall	$16,		%ecx
937.L024dj2:
938	movb	%ch,		1(%esi)
939.L025dj1:
940	movb	%cl,		(%esi)
941.L022djend:
942	jmp	.L005finish
943.align 16
944.L005finish:
945	movl	60(%esp),	%ecx
946	addl	$24,		%esp
947	movl	%eax,		(%ecx)
948	movl	%ebx,		4(%ecx)
949	popl	%edi
950	popl	%esi
951	popl	%ebx
952	popl	%ebp
953	ret
954.align 16
955.L007cbc_enc_jmp_table:
956	.long 0
957	.long .L015ej1-.L006PIC_point
958	.long .L014ej2-.L006PIC_point
959	.long .L013ej3-.L006PIC_point
960	.long .L011ej4-.L006PIC_point
961	.long .L010ej5-.L006PIC_point
962	.long .L009ej6-.L006PIC_point
963	.long .L008ej7-.L006PIC_point
964.L_CAST_cbc_encrypt_end:
965	.size	CAST_cbc_encrypt,.L_CAST_cbc_encrypt_end-CAST_cbc_encrypt
966.ident	"desasm.pl"
967