bf_enc_586.S revision 1.4.58.1 1 /* $NetBSD: bf_enc_586.S,v 1.4.58.1 2007/12/13 05:05:30 yamt 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.4.58.1 2007/12/13 05:05:30 yamt 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