Sync usage with man page.
[netbsd-mini2440.git] / sys / crypto / blowfish / arch / i386 / bf_enc_586.S
blob0653f3b7e2425706f2760468eaa382130fa2fdc1
1 /*      $NetBSD: bf_enc_586.S,v 1.4 2005/12/11 12:20:52 christos Exp $  */
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  */
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  */
66 #include <i386/include/asm.h>
67 __KERNEL_RCSID(1, "$NetBSD$");
69 ENTRY(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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)
416 ENTRY(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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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)