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