1/*	$NetBSD: bf_enc_586.S,v 1.1 2001/09/09 11:01:01 tls Exp $	*/
2
3/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
4 * All rights reserved.
5 *
6 * This package is an SSL implementation written
7 * by Eric Young (eay@cryptsoft.com).
8 * The implementation was written so as to conform with Netscapes SSL.
9 *
10 * This library is free for commercial and non-commercial use as long as
11 * the following conditions are aheared to.  The following conditions
12 * apply to all code found in this distribution, be it the RC4, RSA,
13 * lhash, DES, etc., code; not just the SSL code.  The SSL documentation
14 * included with this distribution is covered by the same copyright terms
15 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
16 *
17 * Copyright remains Eric Young's, and as such any Copyright notices in
18 * the code are not to be removed.
19 * If this package is used in a product, Eric Young should be given attribution
20 * as the author of the parts of the library used.
21 * This can be in the form of a textual message at program startup or
22 * in documentation (online or textual) provided with the package.
23 *
24 * Redistribution and use in source and binary forms, with or without
25 * modification, are permitted provided that the following conditions
26 * are met:
27 * 1. Redistributions of source code must retain the copyright
28 *    notice, this list of conditions and the following disclaimer.
29 * 2. Redistributions in binary form must reproduce the above copyright
30 *    notice, this list of conditions and the following disclaimer in the
31 *    documentation and/or other materials provided with the distribution.
32 * 3. All advertising materials mentioning features or use of this software
33 *    must display the following acknowledgement:
34 *    "This product includes cryptographic software written by
35 *     Eric Young (eay@cryptsoft.com)"
36 *    The word 'cryptographic' can be left out if the rouines from the library
37 *    being used are not cryptographic related :-).
38 * 4. If you include any Windows specific code (or a derivative thereof) from
39 *    the apps directory (application code) you must include an acknowledgement:
40 *    "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
41 *
42 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
43 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
44 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
45 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
46 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
47 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
48 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
49 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
50 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
51 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
52 * SUCH DAMAGE.
53 *
54 * The licence and distribution terms for any publically available version or
55 * derivative of this code cannot be changed.  i.e. this code cannot simply be
56 * copied and put under another distribution licence
57 * [including the GNU Public Licence.]
58 */
59
60/*
61 * Modified from the output of `perl bf-586.pl elf' by
62 * Jason R. Thorpe <thorpej@zembu.com> and Thor Lancelot Simon
63 * <tls@netbsd.org>
64 */
65
66#include <i386/include/asm.h>
67
68ENTRY(BF_encrypt)
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	movl	(%ebp),		%ebx
80	xorl	%ecx,		%ecx
81	xorl	%ebx,		%edi
82
83	/* Round 0 */
84	movl	4(%ebp),	%edx
85	movl	%edi,		%ebx
86	xorl	%edx,		%esi
87	shrl	$16,		%ebx
88	movl	%edi,		%edx
89	movb	%bh,		%al
90	andl	$255,		%ebx
91	movb	%dh,		%cl
92	andl	$255,		%edx
93	movl	72(%ebp,%eax,4),%eax
94	movl	1096(%ebp,%ebx,4),%ebx
95	addl	%eax,		%ebx
96	movl	2120(%ebp,%ecx,4),%eax
97	xorl	%eax,		%ebx
98	movl	3144(%ebp,%edx,4),%edx
99	addl	%edx,		%ebx
100	xorl	%eax,		%eax
101	xorl	%ebx,		%esi
102
103	/* Round 1 */
104	movl	8(%ebp),	%edx
105	movl	%esi,		%ebx
106	xorl	%edx,		%edi
107	shrl	$16,		%ebx
108	movl	%esi,		%edx
109	movb	%bh,		%al
110	andl	$255,		%ebx
111	movb	%dh,		%cl
112	andl	$255,		%edx
113	movl	72(%ebp,%eax,4),%eax
114	movl	1096(%ebp,%ebx,4),%ebx
115	addl	%eax,		%ebx
116	movl	2120(%ebp,%ecx,4),%eax
117	xorl	%eax,		%ebx
118	movl	3144(%ebp,%edx,4),%edx
119	addl	%edx,		%ebx
120	xorl	%eax,		%eax
121	xorl	%ebx,		%edi
122
123	/* Round 2 */
124	movl	12(%ebp),	%edx
125	movl	%edi,		%ebx
126	xorl	%edx,		%esi
127	shrl	$16,		%ebx
128	movl	%edi,		%edx
129	movb	%bh,		%al
130	andl	$255,		%ebx
131	movb	%dh,		%cl
132	andl	$255,		%edx
133	movl	72(%ebp,%eax,4),%eax
134	movl	1096(%ebp,%ebx,4),%ebx
135	addl	%eax,		%ebx
136	movl	2120(%ebp,%ecx,4),%eax
137	xorl	%eax,		%ebx
138	movl	3144(%ebp,%edx,4),%edx
139	addl	%edx,		%ebx
140	xorl	%eax,		%eax
141	xorl	%ebx,		%esi
142
143	/* Round 3 */
144	movl	16(%ebp),	%edx
145	movl	%esi,		%ebx
146	xorl	%edx,		%edi
147	shrl	$16,		%ebx
148	movl	%esi,		%edx
149	movb	%bh,		%al
150	andl	$255,		%ebx
151	movb	%dh,		%cl
152	andl	$255,		%edx
153	movl	72(%ebp,%eax,4),%eax
154	movl	1096(%ebp,%ebx,4),%ebx
155	addl	%eax,		%ebx
156	movl	2120(%ebp,%ecx,4),%eax
157	xorl	%eax,		%ebx
158	movl	3144(%ebp,%edx,4),%edx
159	addl	%edx,		%ebx
160	xorl	%eax,		%eax
161	xorl	%ebx,		%edi
162
163	/* Round 4 */
164	movl	20(%ebp),	%edx
165	movl	%edi,		%ebx
166	xorl	%edx,		%esi
167	shrl	$16,		%ebx
168	movl	%edi,		%edx
169	movb	%bh,		%al
170	andl	$255,		%ebx
171	movb	%dh,		%cl
172	andl	$255,		%edx
173	movl	72(%ebp,%eax,4),%eax
174	movl	1096(%ebp,%ebx,4),%ebx
175	addl	%eax,		%ebx
176	movl	2120(%ebp,%ecx,4),%eax
177	xorl	%eax,		%ebx
178	movl	3144(%ebp,%edx,4),%edx
179	addl	%edx,		%ebx
180	xorl	%eax,		%eax
181	xorl	%ebx,		%esi
182
183	/* Round 5 */
184	movl	24(%ebp),	%edx
185	movl	%esi,		%ebx
186	xorl	%edx,		%edi
187	shrl	$16,		%ebx
188	movl	%esi,		%edx
189	movb	%bh,		%al
190	andl	$255,		%ebx
191	movb	%dh,		%cl
192	andl	$255,		%edx
193	movl	72(%ebp,%eax,4),%eax
194	movl	1096(%ebp,%ebx,4),%ebx
195	addl	%eax,		%ebx
196	movl	2120(%ebp,%ecx,4),%eax
197	xorl	%eax,		%ebx
198	movl	3144(%ebp,%edx,4),%edx
199	addl	%edx,		%ebx
200	xorl	%eax,		%eax
201	xorl	%ebx,		%edi
202
203	/* Round 6 */
204	movl	28(%ebp),	%edx
205	movl	%edi,		%ebx
206	xorl	%edx,		%esi
207	shrl	$16,		%ebx
208	movl	%edi,		%edx
209	movb	%bh,		%al
210	andl	$255,		%ebx
211	movb	%dh,		%cl
212	andl	$255,		%edx
213	movl	72(%ebp,%eax,4),%eax
214	movl	1096(%ebp,%ebx,4),%ebx
215	addl	%eax,		%ebx
216	movl	2120(%ebp,%ecx,4),%eax
217	xorl	%eax,		%ebx
218	movl	3144(%ebp,%edx,4),%edx
219	addl	%edx,		%ebx
220	xorl	%eax,		%eax
221	xorl	%ebx,		%esi
222
223	/* Round 7 */
224	movl	32(%ebp),	%edx
225	movl	%esi,		%ebx
226	xorl	%edx,		%edi
227	shrl	$16,		%ebx
228	movl	%esi,		%edx
229	movb	%bh,		%al
230	andl	$255,		%ebx
231	movb	%dh,		%cl
232	andl	$255,		%edx
233	movl	72(%ebp,%eax,4),%eax
234	movl	1096(%ebp,%ebx,4),%ebx
235	addl	%eax,		%ebx
236	movl	2120(%ebp,%ecx,4),%eax
237	xorl	%eax,		%ebx
238	movl	3144(%ebp,%edx,4),%edx
239	addl	%edx,		%ebx
240	xorl	%eax,		%eax
241	xorl	%ebx,		%edi
242
243	/* Round 8 */
244	movl	36(%ebp),	%edx
245	movl	%edi,		%ebx
246	xorl	%edx,		%esi
247	shrl	$16,		%ebx
248	movl	%edi,		%edx
249	movb	%bh,		%al
250	andl	$255,		%ebx
251	movb	%dh,		%cl
252	andl	$255,		%edx
253	movl	72(%ebp,%eax,4),%eax
254	movl	1096(%ebp,%ebx,4),%ebx
255	addl	%eax,		%ebx
256	movl	2120(%ebp,%ecx,4),%eax
257	xorl	%eax,		%ebx
258	movl	3144(%ebp,%edx,4),%edx
259	addl	%edx,		%ebx
260	xorl	%eax,		%eax
261	xorl	%ebx,		%esi
262
263	/* Round 9 */
264	movl	40(%ebp),	%edx
265	movl	%esi,		%ebx
266	xorl	%edx,		%edi
267	shrl	$16,		%ebx
268	movl	%esi,		%edx
269	movb	%bh,		%al
270	andl	$255,		%ebx
271	movb	%dh,		%cl
272	andl	$255,		%edx
273	movl	72(%ebp,%eax,4),%eax
274	movl	1096(%ebp,%ebx,4),%ebx
275	addl	%eax,		%ebx
276	movl	2120(%ebp,%ecx,4),%eax
277	xorl	%eax,		%ebx
278	movl	3144(%ebp,%edx,4),%edx
279	addl	%edx,		%ebx
280	xorl	%eax,		%eax
281	xorl	%ebx,		%edi
282
283	/* Round 10 */
284	movl	44(%ebp),	%edx
285	movl	%edi,		%ebx
286	xorl	%edx,		%esi
287	shrl	$16,		%ebx
288	movl	%edi,		%edx
289	movb	%bh,		%al
290	andl	$255,		%ebx
291	movb	%dh,		%cl
292	andl	$255,		%edx
293	movl	72(%ebp,%eax,4),%eax
294	movl	1096(%ebp,%ebx,4),%ebx
295	addl	%eax,		%ebx
296	movl	2120(%ebp,%ecx,4),%eax
297	xorl	%eax,		%ebx
298	movl	3144(%ebp,%edx,4),%edx
299	addl	%edx,		%ebx
300	xorl	%eax,		%eax
301	xorl	%ebx,		%esi
302
303	/* Round 11 */
304	movl	48(%ebp),	%edx
305	movl	%esi,		%ebx
306	xorl	%edx,		%edi
307	shrl	$16,		%ebx
308	movl	%esi,		%edx
309	movb	%bh,		%al
310	andl	$255,		%ebx
311	movb	%dh,		%cl
312	andl	$255,		%edx
313	movl	72(%ebp,%eax,4),%eax
314	movl	1096(%ebp,%ebx,4),%ebx
315	addl	%eax,		%ebx
316	movl	2120(%ebp,%ecx,4),%eax
317	xorl	%eax,		%ebx
318	movl	3144(%ebp,%edx,4),%edx
319	addl	%edx,		%ebx
320	xorl	%eax,		%eax
321	xorl	%ebx,		%edi
322
323	/* Round 12 */
324	movl	52(%ebp),	%edx
325	movl	%edi,		%ebx
326	xorl	%edx,		%esi
327	shrl	$16,		%ebx
328	movl	%edi,		%edx
329	movb	%bh,		%al
330	andl	$255,		%ebx
331	movb	%dh,		%cl
332	andl	$255,		%edx
333	movl	72(%ebp,%eax,4),%eax
334	movl	1096(%ebp,%ebx,4),%ebx
335	addl	%eax,		%ebx
336	movl	2120(%ebp,%ecx,4),%eax
337	xorl	%eax,		%ebx
338	movl	3144(%ebp,%edx,4),%edx
339	addl	%edx,		%ebx
340	xorl	%eax,		%eax
341	xorl	%ebx,		%esi
342
343	/* Round 13 */
344	movl	56(%ebp),	%edx
345	movl	%esi,		%ebx
346	xorl	%edx,		%edi
347	shrl	$16,		%ebx
348	movl	%esi,		%edx
349	movb	%bh,		%al
350	andl	$255,		%ebx
351	movb	%dh,		%cl
352	andl	$255,		%edx
353	movl	72(%ebp,%eax,4),%eax
354	movl	1096(%ebp,%ebx,4),%ebx
355	addl	%eax,		%ebx
356	movl	2120(%ebp,%ecx,4),%eax
357	xorl	%eax,		%ebx
358	movl	3144(%ebp,%edx,4),%edx
359	addl	%edx,		%ebx
360	xorl	%eax,		%eax
361	xorl	%ebx,		%edi
362
363	/* Round 14 */
364	movl	60(%ebp),	%edx
365	movl	%edi,		%ebx
366	xorl	%edx,		%esi
367	shrl	$16,		%ebx
368	movl	%edi,		%edx
369	movb	%bh,		%al
370	andl	$255,		%ebx
371	movb	%dh,		%cl
372	andl	$255,		%edx
373	movl	72(%ebp,%eax,4),%eax
374	movl	1096(%ebp,%ebx,4),%ebx
375	addl	%eax,		%ebx
376	movl	2120(%ebp,%ecx,4),%eax
377	xorl	%eax,		%ebx
378	movl	3144(%ebp,%edx,4),%edx
379	addl	%edx,		%ebx
380	xorl	%eax,		%eax
381	xorl	%ebx,		%esi
382
383	/* Round 15 */
384	movl	64(%ebp),	%edx
385	movl	%esi,		%ebx
386	xorl	%edx,		%edi
387	shrl	$16,		%ebx
388	movl	%esi,		%edx
389	movb	%bh,		%al
390	andl	$255,		%ebx
391	movb	%dh,		%cl
392	andl	$255,		%edx
393	movl	72(%ebp,%eax,4),%eax
394	movl	1096(%ebp,%ebx,4),%ebx
395	addl	%eax,		%ebx
396	movl	2120(%ebp,%ecx,4),%eax
397	xorl	%eax,		%ebx
398	movl	3144(%ebp,%edx,4),%edx
399	addl	%edx,		%ebx
400	# Load parameter 0 (16) enc=1
401	movl	20(%esp),	%eax
402	xorl	%ebx,		%edi
403	movl	68(%ebp),	%edx
404	xorl	%edx,		%esi
405	movl	%edi,		4(%eax)
406	movl	%esi,		(%eax)
407	popl	%edi
408	popl	%esi
409	popl	%ebx
410	popl	%ebp
411	ret
412.L_BF_encrypt_end:
413	.size   _C_LABEL(BF_encrypt),.L_BF_encrypt_end-_C_LABEL(BF_encrypt)
414
415ENTRY(BF_decrypt)
416	pushl	%ebp
417	pushl	%ebx
418	movl	12(%esp),	%ebx
419	movl	16(%esp),	%ebp
420	pushl	%esi
421	pushl	%edi
422	# Load the 2 words
423	movl	(%ebx),		%edi
424	movl	4(%ebx),	%esi
425	xorl	%eax,		%eax
426	movl	68(%ebp),	%ebx
427	xorl	%ecx,		%ecx
428	xorl	%ebx,		%edi
429
430	/* Round 16 */
431	movl	64(%ebp),	%edx
432	movl	%edi,		%ebx
433	xorl	%edx,		%esi
434	shrl	$16,		%ebx
435	movl	%edi,		%edx
436	movb	%bh,		%al
437	andl	$255,		%ebx
438	movb	%dh,		%cl
439	andl	$255,		%edx
440	movl	72(%ebp,%eax,4),%eax
441	movl	1096(%ebp,%ebx,4),%ebx
442	addl	%eax,		%ebx
443	movl	2120(%ebp,%ecx,4),%eax
444	xorl	%eax,		%ebx
445	movl	3144(%ebp,%edx,4),%edx
446	addl	%edx,		%ebx
447	xorl	%eax,		%eax
448	xorl	%ebx,		%esi
449
450	/* Round 15 */
451	movl	60(%ebp),	%edx
452	movl	%esi,		%ebx
453	xorl	%edx,		%edi
454	shrl	$16,		%ebx
455	movl	%esi,		%edx
456	movb	%bh,		%al
457	andl	$255,		%ebx
458	movb	%dh,		%cl
459	andl	$255,		%edx
460	movl	72(%ebp,%eax,4),%eax
461	movl	1096(%ebp,%ebx,4),%ebx
462	addl	%eax,		%ebx
463	movl	2120(%ebp,%ecx,4),%eax
464	xorl	%eax,		%ebx
465	movl	3144(%ebp,%edx,4),%edx
466	addl	%edx,		%ebx
467	xorl	%eax,		%eax
468	xorl	%ebx,		%edi
469
470	/* Round 14 */
471	movl	56(%ebp),	%edx
472	movl	%edi,		%ebx
473	xorl	%edx,		%esi
474	shrl	$16,		%ebx
475	movl	%edi,		%edx
476	movb	%bh,		%al
477	andl	$255,		%ebx
478	movb	%dh,		%cl
479	andl	$255,		%edx
480	movl	72(%ebp,%eax,4),%eax
481	movl	1096(%ebp,%ebx,4),%ebx
482	addl	%eax,		%ebx
483	movl	2120(%ebp,%ecx,4),%eax
484	xorl	%eax,		%ebx
485	movl	3144(%ebp,%edx,4),%edx
486	addl	%edx,		%ebx
487	xorl	%eax,		%eax
488	xorl	%ebx,		%esi
489
490	/* Round 13 */
491	movl	52(%ebp),	%edx
492	movl	%esi,		%ebx
493	xorl	%edx,		%edi
494	shrl	$16,		%ebx
495	movl	%esi,		%edx
496	movb	%bh,		%al
497	andl	$255,		%ebx
498	movb	%dh,		%cl
499	andl	$255,		%edx
500	movl	72(%ebp,%eax,4),%eax
501	movl	1096(%ebp,%ebx,4),%ebx
502	addl	%eax,		%ebx
503	movl	2120(%ebp,%ecx,4),%eax
504	xorl	%eax,		%ebx
505	movl	3144(%ebp,%edx,4),%edx
506	addl	%edx,		%ebx
507	xorl	%eax,		%eax
508	xorl	%ebx,		%edi
509
510	/* Round 12 */
511	movl	48(%ebp),	%edx
512	movl	%edi,		%ebx
513	xorl	%edx,		%esi
514	shrl	$16,		%ebx
515	movl	%edi,		%edx
516	movb	%bh,		%al
517	andl	$255,		%ebx
518	movb	%dh,		%cl
519	andl	$255,		%edx
520	movl	72(%ebp,%eax,4),%eax
521	movl	1096(%ebp,%ebx,4),%ebx
522	addl	%eax,		%ebx
523	movl	2120(%ebp,%ecx,4),%eax
524	xorl	%eax,		%ebx
525	movl	3144(%ebp,%edx,4),%edx
526	addl	%edx,		%ebx
527	xorl	%eax,		%eax
528	xorl	%ebx,		%esi
529
530	/* Round 11 */
531	movl	44(%ebp),	%edx
532	movl	%esi,		%ebx
533	xorl	%edx,		%edi
534	shrl	$16,		%ebx
535	movl	%esi,		%edx
536	movb	%bh,		%al
537	andl	$255,		%ebx
538	movb	%dh,		%cl
539	andl	$255,		%edx
540	movl	72(%ebp,%eax,4),%eax
541	movl	1096(%ebp,%ebx,4),%ebx
542	addl	%eax,		%ebx
543	movl	2120(%ebp,%ecx,4),%eax
544	xorl	%eax,		%ebx
545	movl	3144(%ebp,%edx,4),%edx
546	addl	%edx,		%ebx
547	xorl	%eax,		%eax
548	xorl	%ebx,		%edi
549
550	/* Round 10 */
551	movl	40(%ebp),	%edx
552	movl	%edi,		%ebx
553	xorl	%edx,		%esi
554	shrl	$16,		%ebx
555	movl	%edi,		%edx
556	movb	%bh,		%al
557	andl	$255,		%ebx
558	movb	%dh,		%cl
559	andl	$255,		%edx
560	movl	72(%ebp,%eax,4),%eax
561	movl	1096(%ebp,%ebx,4),%ebx
562	addl	%eax,		%ebx
563	movl	2120(%ebp,%ecx,4),%eax
564	xorl	%eax,		%ebx
565	movl	3144(%ebp,%edx,4),%edx
566	addl	%edx,		%ebx
567	xorl	%eax,		%eax
568	xorl	%ebx,		%esi
569
570	/* Round 9 */
571	movl	36(%ebp),	%edx
572	movl	%esi,		%ebx
573	xorl	%edx,		%edi
574	shrl	$16,		%ebx
575	movl	%esi,		%edx
576	movb	%bh,		%al
577	andl	$255,		%ebx
578	movb	%dh,		%cl
579	andl	$255,		%edx
580	movl	72(%ebp,%eax,4),%eax
581	movl	1096(%ebp,%ebx,4),%ebx
582	addl	%eax,		%ebx
583	movl	2120(%ebp,%ecx,4),%eax
584	xorl	%eax,		%ebx
585	movl	3144(%ebp,%edx,4),%edx
586	addl	%edx,		%ebx
587	xorl	%eax,		%eax
588	xorl	%ebx,		%edi
589
590	/* Round 8 */
591	movl	32(%ebp),	%edx
592	movl	%edi,		%ebx
593	xorl	%edx,		%esi
594	shrl	$16,		%ebx
595	movl	%edi,		%edx
596	movb	%bh,		%al
597	andl	$255,		%ebx
598	movb	%dh,		%cl
599	andl	$255,		%edx
600	movl	72(%ebp,%eax,4),%eax
601	movl	1096(%ebp,%ebx,4),%ebx
602	addl	%eax,		%ebx
603	movl	2120(%ebp,%ecx,4),%eax
604	xorl	%eax,		%ebx
605	movl	3144(%ebp,%edx,4),%edx
606	addl	%edx,		%ebx
607	xorl	%eax,		%eax
608	xorl	%ebx,		%esi
609
610	/* Round 7 */
611	movl	28(%ebp),	%edx
612	movl	%esi,		%ebx
613	xorl	%edx,		%edi
614	shrl	$16,		%ebx
615	movl	%esi,		%edx
616	movb	%bh,		%al
617	andl	$255,		%ebx
618	movb	%dh,		%cl
619	andl	$255,		%edx
620	movl	72(%ebp,%eax,4),%eax
621	movl	1096(%ebp,%ebx,4),%ebx
622	addl	%eax,		%ebx
623	movl	2120(%ebp,%ecx,4),%eax
624	xorl	%eax,		%ebx
625	movl	3144(%ebp,%edx,4),%edx
626	addl	%edx,		%ebx
627	xorl	%eax,		%eax
628	xorl	%ebx,		%edi
629
630	/* Round 6 */
631	movl	24(%ebp),	%edx
632	movl	%edi,		%ebx
633	xorl	%edx,		%esi
634	shrl	$16,		%ebx
635	movl	%edi,		%edx
636	movb	%bh,		%al
637	andl	$255,		%ebx
638	movb	%dh,		%cl
639	andl	$255,		%edx
640	movl	72(%ebp,%eax,4),%eax
641	movl	1096(%ebp,%ebx,4),%ebx
642	addl	%eax,		%ebx
643	movl	2120(%ebp,%ecx,4),%eax
644	xorl	%eax,		%ebx
645	movl	3144(%ebp,%edx,4),%edx
646	addl	%edx,		%ebx
647	xorl	%eax,		%eax
648	xorl	%ebx,		%esi
649
650	/* Round 5 */
651	movl	20(%ebp),	%edx
652	movl	%esi,		%ebx
653	xorl	%edx,		%edi
654	shrl	$16,		%ebx
655	movl	%esi,		%edx
656	movb	%bh,		%al
657	andl	$255,		%ebx
658	movb	%dh,		%cl
659	andl	$255,		%edx
660	movl	72(%ebp,%eax,4),%eax
661	movl	1096(%ebp,%ebx,4),%ebx
662	addl	%eax,		%ebx
663	movl	2120(%ebp,%ecx,4),%eax
664	xorl	%eax,		%ebx
665	movl	3144(%ebp,%edx,4),%edx
666	addl	%edx,		%ebx
667	xorl	%eax,		%eax
668	xorl	%ebx,		%edi
669
670	/* Round 4 */
671	movl	16(%ebp),	%edx
672	movl	%edi,		%ebx
673	xorl	%edx,		%esi
674	shrl	$16,		%ebx
675	movl	%edi,		%edx
676	movb	%bh,		%al
677	andl	$255,		%ebx
678	movb	%dh,		%cl
679	andl	$255,		%edx
680	movl	72(%ebp,%eax,4),%eax
681	movl	1096(%ebp,%ebx,4),%ebx
682	addl	%eax,		%ebx
683	movl	2120(%ebp,%ecx,4),%eax
684	xorl	%eax,		%ebx
685	movl	3144(%ebp,%edx,4),%edx
686	addl	%edx,		%ebx
687	xorl	%eax,		%eax
688	xorl	%ebx,		%esi
689
690	/* Round 3 */
691	movl	12(%ebp),	%edx
692	movl	%esi,		%ebx
693	xorl	%edx,		%edi
694	shrl	$16,		%ebx
695	movl	%esi,		%edx
696	movb	%bh,		%al
697	andl	$255,		%ebx
698	movb	%dh,		%cl
699	andl	$255,		%edx
700	movl	72(%ebp,%eax,4),%eax
701	movl	1096(%ebp,%ebx,4),%ebx
702	addl	%eax,		%ebx
703	movl	2120(%ebp,%ecx,4),%eax
704	xorl	%eax,		%ebx
705	movl	3144(%ebp,%edx,4),%edx
706	addl	%edx,		%ebx
707	xorl	%eax,		%eax
708	xorl	%ebx,		%edi
709
710	/* Round 2 */
711	movl	8(%ebp),	%edx
712	movl	%edi,		%ebx
713	xorl	%edx,		%esi
714	shrl	$16,		%ebx
715	movl	%edi,		%edx
716	movb	%bh,		%al
717	andl	$255,		%ebx
718	movb	%dh,		%cl
719	andl	$255,		%edx
720	movl	72(%ebp,%eax,4),%eax
721	movl	1096(%ebp,%ebx,4),%ebx
722	addl	%eax,		%ebx
723	movl	2120(%ebp,%ecx,4),%eax
724	xorl	%eax,		%ebx
725	movl	3144(%ebp,%edx,4),%edx
726	addl	%edx,		%ebx
727	xorl	%eax,		%eax
728	xorl	%ebx,		%esi
729
730	/* Round 1 */
731	movl	4(%ebp),	%edx
732	movl	%esi,		%ebx
733	xorl	%edx,		%edi
734	shrl	$16,		%ebx
735	movl	%esi,		%edx
736	movb	%bh,		%al
737	andl	$255,		%ebx
738	movb	%dh,		%cl
739	andl	$255,		%edx
740	movl	72(%ebp,%eax,4),%eax
741	movl	1096(%ebp,%ebx,4),%ebx
742	addl	%eax,		%ebx
743	movl	2120(%ebp,%ecx,4),%eax
744	xorl	%eax,		%ebx
745	movl	3144(%ebp,%edx,4),%edx
746	addl	%edx,		%ebx
747	# Load parameter 0 (1) enc=0
748	movl	20(%esp),	%eax
749	xorl	%ebx,		%edi
750	movl	(%ebp),		%edx
751	xorl	%edx,		%esi
752	movl	%edi,		4(%eax)
753	movl	%esi,		(%eax)
754	popl	%edi
755	popl	%esi
756	popl	%ebx
757	popl	%ebp
758	ret
759.L_BF_decrypt_end:
760	.size   _C_LABEL(BF_decrypt),.L_BF_decrypt_end-_C_LABEL(BF_decrypt)
761