xref: /netbsd-src/sys/crypto/blowfish/arch/i386/bf_enc_586.S (revision 06d6cbc0d9824bbaf9f32962f0c3ec97b0d9fe71)
1/*	$NetBSD: bf_enc_586.S,v 1.5 2007/12/11 23:13:57 lukem 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__KERNEL_RCSID(1, "$NetBSD: bf_enc_586.S,v 1.5 2007/12/11 23:13:57 lukem Exp $");
68
69ENTRY(BF_encrypt)
70	pushl	%ebp
71	pushl	%ebx
72	movl	12(%esp),	%ebx
73	movl	16(%esp),	%ebp
74	pushl	%esi
75	pushl	%edi
76	/* Load the 2 words */
77	movl	(%ebx),		%edi
78	movl	4(%ebx),	%esi
79	xorl	%eax,		%eax
80	movl	(%ebp),		%ebx
81	xorl	%ecx,		%ecx
82	xorl	%ebx,		%edi
83
84	/* Round 0 */
85	movl	4(%ebp),	%edx
86	movl	%edi,		%ebx
87	xorl	%edx,		%esi
88	shrl	$16,		%ebx
89	movl	%edi,		%edx
90	movb	%bh,		%al
91	andl	$255,		%ebx
92	movb	%dh,		%cl
93	andl	$255,		%edx
94	movl	72(%ebp,%eax,4),%eax
95	movl	1096(%ebp,%ebx,4),%ebx
96	addl	%eax,		%ebx
97	movl	2120(%ebp,%ecx,4),%eax
98	xorl	%eax,		%ebx
99	movl	3144(%ebp,%edx,4),%edx
100	addl	%edx,		%ebx
101	xorl	%eax,		%eax
102	xorl	%ebx,		%esi
103
104	/* Round 1 */
105	movl	8(%ebp),	%edx
106	movl	%esi,		%ebx
107	xorl	%edx,		%edi
108	shrl	$16,		%ebx
109	movl	%esi,		%edx
110	movb	%bh,		%al
111	andl	$255,		%ebx
112	movb	%dh,		%cl
113	andl	$255,		%edx
114	movl	72(%ebp,%eax,4),%eax
115	movl	1096(%ebp,%ebx,4),%ebx
116	addl	%eax,		%ebx
117	movl	2120(%ebp,%ecx,4),%eax
118	xorl	%eax,		%ebx
119	movl	3144(%ebp,%edx,4),%edx
120	addl	%edx,		%ebx
121	xorl	%eax,		%eax
122	xorl	%ebx,		%edi
123
124	/* Round 2 */
125	movl	12(%ebp),	%edx
126	movl	%edi,		%ebx
127	xorl	%edx,		%esi
128	shrl	$16,		%ebx
129	movl	%edi,		%edx
130	movb	%bh,		%al
131	andl	$255,		%ebx
132	movb	%dh,		%cl
133	andl	$255,		%edx
134	movl	72(%ebp,%eax,4),%eax
135	movl	1096(%ebp,%ebx,4),%ebx
136	addl	%eax,		%ebx
137	movl	2120(%ebp,%ecx,4),%eax
138	xorl	%eax,		%ebx
139	movl	3144(%ebp,%edx,4),%edx
140	addl	%edx,		%ebx
141	xorl	%eax,		%eax
142	xorl	%ebx,		%esi
143
144	/* Round 3 */
145	movl	16(%ebp),	%edx
146	movl	%esi,		%ebx
147	xorl	%edx,		%edi
148	shrl	$16,		%ebx
149	movl	%esi,		%edx
150	movb	%bh,		%al
151	andl	$255,		%ebx
152	movb	%dh,		%cl
153	andl	$255,		%edx
154	movl	72(%ebp,%eax,4),%eax
155	movl	1096(%ebp,%ebx,4),%ebx
156	addl	%eax,		%ebx
157	movl	2120(%ebp,%ecx,4),%eax
158	xorl	%eax,		%ebx
159	movl	3144(%ebp,%edx,4),%edx
160	addl	%edx,		%ebx
161	xorl	%eax,		%eax
162	xorl	%ebx,		%edi
163
164	/* Round 4 */
165	movl	20(%ebp),	%edx
166	movl	%edi,		%ebx
167	xorl	%edx,		%esi
168	shrl	$16,		%ebx
169	movl	%edi,		%edx
170	movb	%bh,		%al
171	andl	$255,		%ebx
172	movb	%dh,		%cl
173	andl	$255,		%edx
174	movl	72(%ebp,%eax,4),%eax
175	movl	1096(%ebp,%ebx,4),%ebx
176	addl	%eax,		%ebx
177	movl	2120(%ebp,%ecx,4),%eax
178	xorl	%eax,		%ebx
179	movl	3144(%ebp,%edx,4),%edx
180	addl	%edx,		%ebx
181	xorl	%eax,		%eax
182	xorl	%ebx,		%esi
183
184	/* Round 5 */
185	movl	24(%ebp),	%edx
186	movl	%esi,		%ebx
187	xorl	%edx,		%edi
188	shrl	$16,		%ebx
189	movl	%esi,		%edx
190	movb	%bh,		%al
191	andl	$255,		%ebx
192	movb	%dh,		%cl
193	andl	$255,		%edx
194	movl	72(%ebp,%eax,4),%eax
195	movl	1096(%ebp,%ebx,4),%ebx
196	addl	%eax,		%ebx
197	movl	2120(%ebp,%ecx,4),%eax
198	xorl	%eax,		%ebx
199	movl	3144(%ebp,%edx,4),%edx
200	addl	%edx,		%ebx
201	xorl	%eax,		%eax
202	xorl	%ebx,		%edi
203
204	/* Round 6 */
205	movl	28(%ebp),	%edx
206	movl	%edi,		%ebx
207	xorl	%edx,		%esi
208	shrl	$16,		%ebx
209	movl	%edi,		%edx
210	movb	%bh,		%al
211	andl	$255,		%ebx
212	movb	%dh,		%cl
213	andl	$255,		%edx
214	movl	72(%ebp,%eax,4),%eax
215	movl	1096(%ebp,%ebx,4),%ebx
216	addl	%eax,		%ebx
217	movl	2120(%ebp,%ecx,4),%eax
218	xorl	%eax,		%ebx
219	movl	3144(%ebp,%edx,4),%edx
220	addl	%edx,		%ebx
221	xorl	%eax,		%eax
222	xorl	%ebx,		%esi
223
224	/* Round 7 */
225	movl	32(%ebp),	%edx
226	movl	%esi,		%ebx
227	xorl	%edx,		%edi
228	shrl	$16,		%ebx
229	movl	%esi,		%edx
230	movb	%bh,		%al
231	andl	$255,		%ebx
232	movb	%dh,		%cl
233	andl	$255,		%edx
234	movl	72(%ebp,%eax,4),%eax
235	movl	1096(%ebp,%ebx,4),%ebx
236	addl	%eax,		%ebx
237	movl	2120(%ebp,%ecx,4),%eax
238	xorl	%eax,		%ebx
239	movl	3144(%ebp,%edx,4),%edx
240	addl	%edx,		%ebx
241	xorl	%eax,		%eax
242	xorl	%ebx,		%edi
243
244	/* Round 8 */
245	movl	36(%ebp),	%edx
246	movl	%edi,		%ebx
247	xorl	%edx,		%esi
248	shrl	$16,		%ebx
249	movl	%edi,		%edx
250	movb	%bh,		%al
251	andl	$255,		%ebx
252	movb	%dh,		%cl
253	andl	$255,		%edx
254	movl	72(%ebp,%eax,4),%eax
255	movl	1096(%ebp,%ebx,4),%ebx
256	addl	%eax,		%ebx
257	movl	2120(%ebp,%ecx,4),%eax
258	xorl	%eax,		%ebx
259	movl	3144(%ebp,%edx,4),%edx
260	addl	%edx,		%ebx
261	xorl	%eax,		%eax
262	xorl	%ebx,		%esi
263
264	/* Round 9 */
265	movl	40(%ebp),	%edx
266	movl	%esi,		%ebx
267	xorl	%edx,		%edi
268	shrl	$16,		%ebx
269	movl	%esi,		%edx
270	movb	%bh,		%al
271	andl	$255,		%ebx
272	movb	%dh,		%cl
273	andl	$255,		%edx
274	movl	72(%ebp,%eax,4),%eax
275	movl	1096(%ebp,%ebx,4),%ebx
276	addl	%eax,		%ebx
277	movl	2120(%ebp,%ecx,4),%eax
278	xorl	%eax,		%ebx
279	movl	3144(%ebp,%edx,4),%edx
280	addl	%edx,		%ebx
281	xorl	%eax,		%eax
282	xorl	%ebx,		%edi
283
284	/* Round 10 */
285	movl	44(%ebp),	%edx
286	movl	%edi,		%ebx
287	xorl	%edx,		%esi
288	shrl	$16,		%ebx
289	movl	%edi,		%edx
290	movb	%bh,		%al
291	andl	$255,		%ebx
292	movb	%dh,		%cl
293	andl	$255,		%edx
294	movl	72(%ebp,%eax,4),%eax
295	movl	1096(%ebp,%ebx,4),%ebx
296	addl	%eax,		%ebx
297	movl	2120(%ebp,%ecx,4),%eax
298	xorl	%eax,		%ebx
299	movl	3144(%ebp,%edx,4),%edx
300	addl	%edx,		%ebx
301	xorl	%eax,		%eax
302	xorl	%ebx,		%esi
303
304	/* Round 11 */
305	movl	48(%ebp),	%edx
306	movl	%esi,		%ebx
307	xorl	%edx,		%edi
308	shrl	$16,		%ebx
309	movl	%esi,		%edx
310	movb	%bh,		%al
311	andl	$255,		%ebx
312	movb	%dh,		%cl
313	andl	$255,		%edx
314	movl	72(%ebp,%eax,4),%eax
315	movl	1096(%ebp,%ebx,4),%ebx
316	addl	%eax,		%ebx
317	movl	2120(%ebp,%ecx,4),%eax
318	xorl	%eax,		%ebx
319	movl	3144(%ebp,%edx,4),%edx
320	addl	%edx,		%ebx
321	xorl	%eax,		%eax
322	xorl	%ebx,		%edi
323
324	/* Round 12 */
325	movl	52(%ebp),	%edx
326	movl	%edi,		%ebx
327	xorl	%edx,		%esi
328	shrl	$16,		%ebx
329	movl	%edi,		%edx
330	movb	%bh,		%al
331	andl	$255,		%ebx
332	movb	%dh,		%cl
333	andl	$255,		%edx
334	movl	72(%ebp,%eax,4),%eax
335	movl	1096(%ebp,%ebx,4),%ebx
336	addl	%eax,		%ebx
337	movl	2120(%ebp,%ecx,4),%eax
338	xorl	%eax,		%ebx
339	movl	3144(%ebp,%edx,4),%edx
340	addl	%edx,		%ebx
341	xorl	%eax,		%eax
342	xorl	%ebx,		%esi
343
344	/* Round 13 */
345	movl	56(%ebp),	%edx
346	movl	%esi,		%ebx
347	xorl	%edx,		%edi
348	shrl	$16,		%ebx
349	movl	%esi,		%edx
350	movb	%bh,		%al
351	andl	$255,		%ebx
352	movb	%dh,		%cl
353	andl	$255,		%edx
354	movl	72(%ebp,%eax,4),%eax
355	movl	1096(%ebp,%ebx,4),%ebx
356	addl	%eax,		%ebx
357	movl	2120(%ebp,%ecx,4),%eax
358	xorl	%eax,		%ebx
359	movl	3144(%ebp,%edx,4),%edx
360	addl	%edx,		%ebx
361	xorl	%eax,		%eax
362	xorl	%ebx,		%edi
363
364	/* Round 14 */
365	movl	60(%ebp),	%edx
366	movl	%edi,		%ebx
367	xorl	%edx,		%esi
368	shrl	$16,		%ebx
369	movl	%edi,		%edx
370	movb	%bh,		%al
371	andl	$255,		%ebx
372	movb	%dh,		%cl
373	andl	$255,		%edx
374	movl	72(%ebp,%eax,4),%eax
375	movl	1096(%ebp,%ebx,4),%ebx
376	addl	%eax,		%ebx
377	movl	2120(%ebp,%ecx,4),%eax
378	xorl	%eax,		%ebx
379	movl	3144(%ebp,%edx,4),%edx
380	addl	%edx,		%ebx
381	xorl	%eax,		%eax
382	xorl	%ebx,		%esi
383
384	/* Round 15 */
385	movl	64(%ebp),	%edx
386	movl	%esi,		%ebx
387	xorl	%edx,		%edi
388	shrl	$16,		%ebx
389	movl	%esi,		%edx
390	movb	%bh,		%al
391	andl	$255,		%ebx
392	movb	%dh,		%cl
393	andl	$255,		%edx
394	movl	72(%ebp,%eax,4),%eax
395	movl	1096(%ebp,%ebx,4),%ebx
396	addl	%eax,		%ebx
397	movl	2120(%ebp,%ecx,4),%eax
398	xorl	%eax,		%ebx
399	movl	3144(%ebp,%edx,4),%edx
400	addl	%edx,		%ebx
401	# Load parameter 0 (16) enc=1
402	movl	20(%esp),	%eax
403	xorl	%ebx,		%edi
404	movl	68(%ebp),	%edx
405	xorl	%edx,		%esi
406	movl	%edi,		4(%eax)
407	movl	%esi,		(%eax)
408	popl	%edi
409	popl	%esi
410	popl	%ebx
411	popl	%ebp
412	ret
413.L_BF_encrypt_end:
414	.size   _C_LABEL(BF_encrypt),.L_BF_encrypt_end-_C_LABEL(BF_encrypt)
415
416ENTRY(BF_decrypt)
417	pushl	%ebp
418	pushl	%ebx
419	movl	12(%esp),	%ebx
420	movl	16(%esp),	%ebp
421	pushl	%esi
422	pushl	%edi
423	# Load the 2 words
424	movl	(%ebx),		%edi
425	movl	4(%ebx),	%esi
426	xorl	%eax,		%eax
427	movl	68(%ebp),	%ebx
428	xorl	%ecx,		%ecx
429	xorl	%ebx,		%edi
430
431	/* Round 16 */
432	movl	64(%ebp),	%edx
433	movl	%edi,		%ebx
434	xorl	%edx,		%esi
435	shrl	$16,		%ebx
436	movl	%edi,		%edx
437	movb	%bh,		%al
438	andl	$255,		%ebx
439	movb	%dh,		%cl
440	andl	$255,		%edx
441	movl	72(%ebp,%eax,4),%eax
442	movl	1096(%ebp,%ebx,4),%ebx
443	addl	%eax,		%ebx
444	movl	2120(%ebp,%ecx,4),%eax
445	xorl	%eax,		%ebx
446	movl	3144(%ebp,%edx,4),%edx
447	addl	%edx,		%ebx
448	xorl	%eax,		%eax
449	xorl	%ebx,		%esi
450
451	/* Round 15 */
452	movl	60(%ebp),	%edx
453	movl	%esi,		%ebx
454	xorl	%edx,		%edi
455	shrl	$16,		%ebx
456	movl	%esi,		%edx
457	movb	%bh,		%al
458	andl	$255,		%ebx
459	movb	%dh,		%cl
460	andl	$255,		%edx
461	movl	72(%ebp,%eax,4),%eax
462	movl	1096(%ebp,%ebx,4),%ebx
463	addl	%eax,		%ebx
464	movl	2120(%ebp,%ecx,4),%eax
465	xorl	%eax,		%ebx
466	movl	3144(%ebp,%edx,4),%edx
467	addl	%edx,		%ebx
468	xorl	%eax,		%eax
469	xorl	%ebx,		%edi
470
471	/* Round 14 */
472	movl	56(%ebp),	%edx
473	movl	%edi,		%ebx
474	xorl	%edx,		%esi
475	shrl	$16,		%ebx
476	movl	%edi,		%edx
477	movb	%bh,		%al
478	andl	$255,		%ebx
479	movb	%dh,		%cl
480	andl	$255,		%edx
481	movl	72(%ebp,%eax,4),%eax
482	movl	1096(%ebp,%ebx,4),%ebx
483	addl	%eax,		%ebx
484	movl	2120(%ebp,%ecx,4),%eax
485	xorl	%eax,		%ebx
486	movl	3144(%ebp,%edx,4),%edx
487	addl	%edx,		%ebx
488	xorl	%eax,		%eax
489	xorl	%ebx,		%esi
490
491	/* Round 13 */
492	movl	52(%ebp),	%edx
493	movl	%esi,		%ebx
494	xorl	%edx,		%edi
495	shrl	$16,		%ebx
496	movl	%esi,		%edx
497	movb	%bh,		%al
498	andl	$255,		%ebx
499	movb	%dh,		%cl
500	andl	$255,		%edx
501	movl	72(%ebp,%eax,4),%eax
502	movl	1096(%ebp,%ebx,4),%ebx
503	addl	%eax,		%ebx
504	movl	2120(%ebp,%ecx,4),%eax
505	xorl	%eax,		%ebx
506	movl	3144(%ebp,%edx,4),%edx
507	addl	%edx,		%ebx
508	xorl	%eax,		%eax
509	xorl	%ebx,		%edi
510
511	/* Round 12 */
512	movl	48(%ebp),	%edx
513	movl	%edi,		%ebx
514	xorl	%edx,		%esi
515	shrl	$16,		%ebx
516	movl	%edi,		%edx
517	movb	%bh,		%al
518	andl	$255,		%ebx
519	movb	%dh,		%cl
520	andl	$255,		%edx
521	movl	72(%ebp,%eax,4),%eax
522	movl	1096(%ebp,%ebx,4),%ebx
523	addl	%eax,		%ebx
524	movl	2120(%ebp,%ecx,4),%eax
525	xorl	%eax,		%ebx
526	movl	3144(%ebp,%edx,4),%edx
527	addl	%edx,		%ebx
528	xorl	%eax,		%eax
529	xorl	%ebx,		%esi
530
531	/* Round 11 */
532	movl	44(%ebp),	%edx
533	movl	%esi,		%ebx
534	xorl	%edx,		%edi
535	shrl	$16,		%ebx
536	movl	%esi,		%edx
537	movb	%bh,		%al
538	andl	$255,		%ebx
539	movb	%dh,		%cl
540	andl	$255,		%edx
541	movl	72(%ebp,%eax,4),%eax
542	movl	1096(%ebp,%ebx,4),%ebx
543	addl	%eax,		%ebx
544	movl	2120(%ebp,%ecx,4),%eax
545	xorl	%eax,		%ebx
546	movl	3144(%ebp,%edx,4),%edx
547	addl	%edx,		%ebx
548	xorl	%eax,		%eax
549	xorl	%ebx,		%edi
550
551	/* Round 10 */
552	movl	40(%ebp),	%edx
553	movl	%edi,		%ebx
554	xorl	%edx,		%esi
555	shrl	$16,		%ebx
556	movl	%edi,		%edx
557	movb	%bh,		%al
558	andl	$255,		%ebx
559	movb	%dh,		%cl
560	andl	$255,		%edx
561	movl	72(%ebp,%eax,4),%eax
562	movl	1096(%ebp,%ebx,4),%ebx
563	addl	%eax,		%ebx
564	movl	2120(%ebp,%ecx,4),%eax
565	xorl	%eax,		%ebx
566	movl	3144(%ebp,%edx,4),%edx
567	addl	%edx,		%ebx
568	xorl	%eax,		%eax
569	xorl	%ebx,		%esi
570
571	/* Round 9 */
572	movl	36(%ebp),	%edx
573	movl	%esi,		%ebx
574	xorl	%edx,		%edi
575	shrl	$16,		%ebx
576	movl	%esi,		%edx
577	movb	%bh,		%al
578	andl	$255,		%ebx
579	movb	%dh,		%cl
580	andl	$255,		%edx
581	movl	72(%ebp,%eax,4),%eax
582	movl	1096(%ebp,%ebx,4),%ebx
583	addl	%eax,		%ebx
584	movl	2120(%ebp,%ecx,4),%eax
585	xorl	%eax,		%ebx
586	movl	3144(%ebp,%edx,4),%edx
587	addl	%edx,		%ebx
588	xorl	%eax,		%eax
589	xorl	%ebx,		%edi
590
591	/* Round 8 */
592	movl	32(%ebp),	%edx
593	movl	%edi,		%ebx
594	xorl	%edx,		%esi
595	shrl	$16,		%ebx
596	movl	%edi,		%edx
597	movb	%bh,		%al
598	andl	$255,		%ebx
599	movb	%dh,		%cl
600	andl	$255,		%edx
601	movl	72(%ebp,%eax,4),%eax
602	movl	1096(%ebp,%ebx,4),%ebx
603	addl	%eax,		%ebx
604	movl	2120(%ebp,%ecx,4),%eax
605	xorl	%eax,		%ebx
606	movl	3144(%ebp,%edx,4),%edx
607	addl	%edx,		%ebx
608	xorl	%eax,		%eax
609	xorl	%ebx,		%esi
610
611	/* Round 7 */
612	movl	28(%ebp),	%edx
613	movl	%esi,		%ebx
614	xorl	%edx,		%edi
615	shrl	$16,		%ebx
616	movl	%esi,		%edx
617	movb	%bh,		%al
618	andl	$255,		%ebx
619	movb	%dh,		%cl
620	andl	$255,		%edx
621	movl	72(%ebp,%eax,4),%eax
622	movl	1096(%ebp,%ebx,4),%ebx
623	addl	%eax,		%ebx
624	movl	2120(%ebp,%ecx,4),%eax
625	xorl	%eax,		%ebx
626	movl	3144(%ebp,%edx,4),%edx
627	addl	%edx,		%ebx
628	xorl	%eax,		%eax
629	xorl	%ebx,		%edi
630
631	/* Round 6 */
632	movl	24(%ebp),	%edx
633	movl	%edi,		%ebx
634	xorl	%edx,		%esi
635	shrl	$16,		%ebx
636	movl	%edi,		%edx
637	movb	%bh,		%al
638	andl	$255,		%ebx
639	movb	%dh,		%cl
640	andl	$255,		%edx
641	movl	72(%ebp,%eax,4),%eax
642	movl	1096(%ebp,%ebx,4),%ebx
643	addl	%eax,		%ebx
644	movl	2120(%ebp,%ecx,4),%eax
645	xorl	%eax,		%ebx
646	movl	3144(%ebp,%edx,4),%edx
647	addl	%edx,		%ebx
648	xorl	%eax,		%eax
649	xorl	%ebx,		%esi
650
651	/* Round 5 */
652	movl	20(%ebp),	%edx
653	movl	%esi,		%ebx
654	xorl	%edx,		%edi
655	shrl	$16,		%ebx
656	movl	%esi,		%edx
657	movb	%bh,		%al
658	andl	$255,		%ebx
659	movb	%dh,		%cl
660	andl	$255,		%edx
661	movl	72(%ebp,%eax,4),%eax
662	movl	1096(%ebp,%ebx,4),%ebx
663	addl	%eax,		%ebx
664	movl	2120(%ebp,%ecx,4),%eax
665	xorl	%eax,		%ebx
666	movl	3144(%ebp,%edx,4),%edx
667	addl	%edx,		%ebx
668	xorl	%eax,		%eax
669	xorl	%ebx,		%edi
670
671	/* Round 4 */
672	movl	16(%ebp),	%edx
673	movl	%edi,		%ebx
674	xorl	%edx,		%esi
675	shrl	$16,		%ebx
676	movl	%edi,		%edx
677	movb	%bh,		%al
678	andl	$255,		%ebx
679	movb	%dh,		%cl
680	andl	$255,		%edx
681	movl	72(%ebp,%eax,4),%eax
682	movl	1096(%ebp,%ebx,4),%ebx
683	addl	%eax,		%ebx
684	movl	2120(%ebp,%ecx,4),%eax
685	xorl	%eax,		%ebx
686	movl	3144(%ebp,%edx,4),%edx
687	addl	%edx,		%ebx
688	xorl	%eax,		%eax
689	xorl	%ebx,		%esi
690
691	/* Round 3 */
692	movl	12(%ebp),	%edx
693	movl	%esi,		%ebx
694	xorl	%edx,		%edi
695	shrl	$16,		%ebx
696	movl	%esi,		%edx
697	movb	%bh,		%al
698	andl	$255,		%ebx
699	movb	%dh,		%cl
700	andl	$255,		%edx
701	movl	72(%ebp,%eax,4),%eax
702	movl	1096(%ebp,%ebx,4),%ebx
703	addl	%eax,		%ebx
704	movl	2120(%ebp,%ecx,4),%eax
705	xorl	%eax,		%ebx
706	movl	3144(%ebp,%edx,4),%edx
707	addl	%edx,		%ebx
708	xorl	%eax,		%eax
709	xorl	%ebx,		%edi
710
711	/* Round 2 */
712	movl	8(%ebp),	%edx
713	movl	%edi,		%ebx
714	xorl	%edx,		%esi
715	shrl	$16,		%ebx
716	movl	%edi,		%edx
717	movb	%bh,		%al
718	andl	$255,		%ebx
719	movb	%dh,		%cl
720	andl	$255,		%edx
721	movl	72(%ebp,%eax,4),%eax
722	movl	1096(%ebp,%ebx,4),%ebx
723	addl	%eax,		%ebx
724	movl	2120(%ebp,%ecx,4),%eax
725	xorl	%eax,		%ebx
726	movl	3144(%ebp,%edx,4),%edx
727	addl	%edx,		%ebx
728	xorl	%eax,		%eax
729	xorl	%ebx,		%esi
730
731	/* Round 1 */
732	movl	4(%ebp),	%edx
733	movl	%esi,		%ebx
734	xorl	%edx,		%edi
735	shrl	$16,		%ebx
736	movl	%esi,		%edx
737	movb	%bh,		%al
738	andl	$255,		%ebx
739	movb	%dh,		%cl
740	andl	$255,		%edx
741	movl	72(%ebp,%eax,4),%eax
742	movl	1096(%ebp,%ebx,4),%ebx
743	addl	%eax,		%ebx
744	movl	2120(%ebp,%ecx,4),%eax
745	xorl	%eax,		%ebx
746	movl	3144(%ebp,%edx,4),%edx
747	addl	%edx,		%ebx
748	# Load parameter 0 (1) enc=0
749	movl	20(%esp),	%eax
750	xorl	%ebx,		%edi
751	movl	(%ebp),		%edx
752	xorl	%edx,		%esi
753	movl	%edi,		4(%eax)
754	movl	%esi,		(%eax)
755	popl	%edi
756	popl	%esi
757	popl	%ebx
758	popl	%ebp
759	ret
760.L_BF_decrypt_end:
761	.size   _C_LABEL(BF_decrypt),.L_BF_decrypt_end-_C_LABEL(BF_decrypt)
762