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