Home | History | Annotate | Line # | Download | only in i386
      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 (at) cryptsoft.com)
      4  * All rights reserved.
      5  *
      6  * This package is an SSL implementation written
      7  * by Eric Young (eay (at) 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 (at) 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 (at) 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 (at) 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 (at) zembu.com> and Thor Lancelot Simon
     63  * <tls (at) 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 
     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
     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 
    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
    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