bad4525fc28100131dc2d1e4777408d82b480e96
[dragonfly.git] / sys / crypto / blowfish / arch / i386 / bf_enc_586.S
1 /*      $NetBSD: bf_enc_586.S,v 1.1 2001/09/09 11:01:01 tls Exp $       */
2 /*      $FreeBSD: src/sys/crypto/blowfish/arch/i386/bf_enc_586.S,v 1.2 2003/04/21 16:30:12 obrien Exp $ */
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 <machine/asm.h>
68 #define _C_LABEL        CNAME
69
70 ENTRY(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
417 ENTRY(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)