1 .text
2 .globl	_BF_encrypt
3 .type	_BF_encrypt,@function
4 .align	4
5 _BF_encrypt:
6 L_BF_encrypt_begin:
7 	%ifdef __CET__
8 
9 .byte	243,15,30,251
10 	%endif
11 
12 
13 	pushl	%ebp
14 	pushl	%ebx
15 	movl	12(%esp),%ebx
16 	movl	16(%esp),%ebp
17 	pushl	%esi
18 	pushl	%edi
19 	# Load the 2 words
20 	movl	(%ebx),%edi
21 	movl	4(%ebx),%esi
22 	xorl	%eax,%eax
23 	movl	(%ebp),%ebx
24 	xorl	%ecx,%ecx
25 	xorl	%ebx,%edi
26 
27 	# Round 0
28 	movl	4(%ebp),%edx
29 	movl	%edi,%ebx
30 	xorl	%edx,%esi
31 	shrl	$16,%ebx
32 	movl	%edi,%edx
33 	movb	%bh,%al
34 	andl	$255,%ebx
35 	movb	%dh,%cl
36 	andl	$255,%edx
37 	movl	72(%ebp,%eax,4),%eax
38 	movl	1096(%ebp,%ebx,4),%ebx
39 	addl	%eax,%ebx
40 	movl	2120(%ebp,%ecx,4),%eax
41 	xorl	%eax,%ebx
42 	movl	3144(%ebp,%edx,4),%edx
43 	addl	%edx,%ebx
44 	xorl	%eax,%eax
45 	xorl	%ebx,%esi
46 
47 	# Round 1
48 	movl	8(%ebp),%edx
49 	movl	%esi,%ebx
50 	xorl	%edx,%edi
51 	shrl	$16,%ebx
52 	movl	%esi,%edx
53 	movb	%bh,%al
54 	andl	$255,%ebx
55 	movb	%dh,%cl
56 	andl	$255,%edx
57 	movl	72(%ebp,%eax,4),%eax
58 	movl	1096(%ebp,%ebx,4),%ebx
59 	addl	%eax,%ebx
60 	movl	2120(%ebp,%ecx,4),%eax
61 	xorl	%eax,%ebx
62 	movl	3144(%ebp,%edx,4),%edx
63 	addl	%edx,%ebx
64 	xorl	%eax,%eax
65 	xorl	%ebx,%edi
66 
67 	# Round 2
68 	movl	12(%ebp),%edx
69 	movl	%edi,%ebx
70 	xorl	%edx,%esi
71 	shrl	$16,%ebx
72 	movl	%edi,%edx
73 	movb	%bh,%al
74 	andl	$255,%ebx
75 	movb	%dh,%cl
76 	andl	$255,%edx
77 	movl	72(%ebp,%eax,4),%eax
78 	movl	1096(%ebp,%ebx,4),%ebx
79 	addl	%eax,%ebx
80 	movl	2120(%ebp,%ecx,4),%eax
81 	xorl	%eax,%ebx
82 	movl	3144(%ebp,%edx,4),%edx
83 	addl	%edx,%ebx
84 	xorl	%eax,%eax
85 	xorl	%ebx,%esi
86 
87 	# Round 3
88 	movl	16(%ebp),%edx
89 	movl	%esi,%ebx
90 	xorl	%edx,%edi
91 	shrl	$16,%ebx
92 	movl	%esi,%edx
93 	movb	%bh,%al
94 	andl	$255,%ebx
95 	movb	%dh,%cl
96 	andl	$255,%edx
97 	movl	72(%ebp,%eax,4),%eax
98 	movl	1096(%ebp,%ebx,4),%ebx
99 	addl	%eax,%ebx
100 	movl	2120(%ebp,%ecx,4),%eax
101 	xorl	%eax,%ebx
102 	movl	3144(%ebp,%edx,4),%edx
103 	addl	%edx,%ebx
104 	xorl	%eax,%eax
105 	xorl	%ebx,%edi
106 
107 	# Round 4
108 	movl	20(%ebp),%edx
109 	movl	%edi,%ebx
110 	xorl	%edx,%esi
111 	shrl	$16,%ebx
112 	movl	%edi,%edx
113 	movb	%bh,%al
114 	andl	$255,%ebx
115 	movb	%dh,%cl
116 	andl	$255,%edx
117 	movl	72(%ebp,%eax,4),%eax
118 	movl	1096(%ebp,%ebx,4),%ebx
119 	addl	%eax,%ebx
120 	movl	2120(%ebp,%ecx,4),%eax
121 	xorl	%eax,%ebx
122 	movl	3144(%ebp,%edx,4),%edx
123 	addl	%edx,%ebx
124 	xorl	%eax,%eax
125 	xorl	%ebx,%esi
126 
127 	# Round 5
128 	movl	24(%ebp),%edx
129 	movl	%esi,%ebx
130 	xorl	%edx,%edi
131 	shrl	$16,%ebx
132 	movl	%esi,%edx
133 	movb	%bh,%al
134 	andl	$255,%ebx
135 	movb	%dh,%cl
136 	andl	$255,%edx
137 	movl	72(%ebp,%eax,4),%eax
138 	movl	1096(%ebp,%ebx,4),%ebx
139 	addl	%eax,%ebx
140 	movl	2120(%ebp,%ecx,4),%eax
141 	xorl	%eax,%ebx
142 	movl	3144(%ebp,%edx,4),%edx
143 	addl	%edx,%ebx
144 	xorl	%eax,%eax
145 	xorl	%ebx,%edi
146 
147 	# Round 6
148 	movl	28(%ebp),%edx
149 	movl	%edi,%ebx
150 	xorl	%edx,%esi
151 	shrl	$16,%ebx
152 	movl	%edi,%edx
153 	movb	%bh,%al
154 	andl	$255,%ebx
155 	movb	%dh,%cl
156 	andl	$255,%edx
157 	movl	72(%ebp,%eax,4),%eax
158 	movl	1096(%ebp,%ebx,4),%ebx
159 	addl	%eax,%ebx
160 	movl	2120(%ebp,%ecx,4),%eax
161 	xorl	%eax,%ebx
162 	movl	3144(%ebp,%edx,4),%edx
163 	addl	%edx,%ebx
164 	xorl	%eax,%eax
165 	xorl	%ebx,%esi
166 
167 	# Round 7
168 	movl	32(%ebp),%edx
169 	movl	%esi,%ebx
170 	xorl	%edx,%edi
171 	shrl	$16,%ebx
172 	movl	%esi,%edx
173 	movb	%bh,%al
174 	andl	$255,%ebx
175 	movb	%dh,%cl
176 	andl	$255,%edx
177 	movl	72(%ebp,%eax,4),%eax
178 	movl	1096(%ebp,%ebx,4),%ebx
179 	addl	%eax,%ebx
180 	movl	2120(%ebp,%ecx,4),%eax
181 	xorl	%eax,%ebx
182 	movl	3144(%ebp,%edx,4),%edx
183 	addl	%edx,%ebx
184 	xorl	%eax,%eax
185 	xorl	%ebx,%edi
186 
187 	# Round 8
188 	movl	36(%ebp),%edx
189 	movl	%edi,%ebx
190 	xorl	%edx,%esi
191 	shrl	$16,%ebx
192 	movl	%edi,%edx
193 	movb	%bh,%al
194 	andl	$255,%ebx
195 	movb	%dh,%cl
196 	andl	$255,%edx
197 	movl	72(%ebp,%eax,4),%eax
198 	movl	1096(%ebp,%ebx,4),%ebx
199 	addl	%eax,%ebx
200 	movl	2120(%ebp,%ecx,4),%eax
201 	xorl	%eax,%ebx
202 	movl	3144(%ebp,%edx,4),%edx
203 	addl	%edx,%ebx
204 	xorl	%eax,%eax
205 	xorl	%ebx,%esi
206 
207 	# Round 9
208 	movl	40(%ebp),%edx
209 	movl	%esi,%ebx
210 	xorl	%edx,%edi
211 	shrl	$16,%ebx
212 	movl	%esi,%edx
213 	movb	%bh,%al
214 	andl	$255,%ebx
215 	movb	%dh,%cl
216 	andl	$255,%edx
217 	movl	72(%ebp,%eax,4),%eax
218 	movl	1096(%ebp,%ebx,4),%ebx
219 	addl	%eax,%ebx
220 	movl	2120(%ebp,%ecx,4),%eax
221 	xorl	%eax,%ebx
222 	movl	3144(%ebp,%edx,4),%edx
223 	addl	%edx,%ebx
224 	xorl	%eax,%eax
225 	xorl	%ebx,%edi
226 
227 	# Round 10
228 	movl	44(%ebp),%edx
229 	movl	%edi,%ebx
230 	xorl	%edx,%esi
231 	shrl	$16,%ebx
232 	movl	%edi,%edx
233 	movb	%bh,%al
234 	andl	$255,%ebx
235 	movb	%dh,%cl
236 	andl	$255,%edx
237 	movl	72(%ebp,%eax,4),%eax
238 	movl	1096(%ebp,%ebx,4),%ebx
239 	addl	%eax,%ebx
240 	movl	2120(%ebp,%ecx,4),%eax
241 	xorl	%eax,%ebx
242 	movl	3144(%ebp,%edx,4),%edx
243 	addl	%edx,%ebx
244 	xorl	%eax,%eax
245 	xorl	%ebx,%esi
246 
247 	# Round 11
248 	movl	48(%ebp),%edx
249 	movl	%esi,%ebx
250 	xorl	%edx,%edi
251 	shrl	$16,%ebx
252 	movl	%esi,%edx
253 	movb	%bh,%al
254 	andl	$255,%ebx
255 	movb	%dh,%cl
256 	andl	$255,%edx
257 	movl	72(%ebp,%eax,4),%eax
258 	movl	1096(%ebp,%ebx,4),%ebx
259 	addl	%eax,%ebx
260 	movl	2120(%ebp,%ecx,4),%eax
261 	xorl	%eax,%ebx
262 	movl	3144(%ebp,%edx,4),%edx
263 	addl	%edx,%ebx
264 	xorl	%eax,%eax
265 	xorl	%ebx,%edi
266 
267 	# Round 12
268 	movl	52(%ebp),%edx
269 	movl	%edi,%ebx
270 	xorl	%edx,%esi
271 	shrl	$16,%ebx
272 	movl	%edi,%edx
273 	movb	%bh,%al
274 	andl	$255,%ebx
275 	movb	%dh,%cl
276 	andl	$255,%edx
277 	movl	72(%ebp,%eax,4),%eax
278 	movl	1096(%ebp,%ebx,4),%ebx
279 	addl	%eax,%ebx
280 	movl	2120(%ebp,%ecx,4),%eax
281 	xorl	%eax,%ebx
282 	movl	3144(%ebp,%edx,4),%edx
283 	addl	%edx,%ebx
284 	xorl	%eax,%eax
285 	xorl	%ebx,%esi
286 
287 	# Round 13
288 	movl	56(%ebp),%edx
289 	movl	%esi,%ebx
290 	xorl	%edx,%edi
291 	shrl	$16,%ebx
292 	movl	%esi,%edx
293 	movb	%bh,%al
294 	andl	$255,%ebx
295 	movb	%dh,%cl
296 	andl	$255,%edx
297 	movl	72(%ebp,%eax,4),%eax
298 	movl	1096(%ebp,%ebx,4),%ebx
299 	addl	%eax,%ebx
300 	movl	2120(%ebp,%ecx,4),%eax
301 	xorl	%eax,%ebx
302 	movl	3144(%ebp,%edx,4),%edx
303 	addl	%edx,%ebx
304 	xorl	%eax,%eax
305 	xorl	%ebx,%edi
306 
307 	# Round 14
308 	movl	60(%ebp),%edx
309 	movl	%edi,%ebx
310 	xorl	%edx,%esi
311 	shrl	$16,%ebx
312 	movl	%edi,%edx
313 	movb	%bh,%al
314 	andl	$255,%ebx
315 	movb	%dh,%cl
316 	andl	$255,%edx
317 	movl	72(%ebp,%eax,4),%eax
318 	movl	1096(%ebp,%ebx,4),%ebx
319 	addl	%eax,%ebx
320 	movl	2120(%ebp,%ecx,4),%eax
321 	xorl	%eax,%ebx
322 	movl	3144(%ebp,%edx,4),%edx
323 	addl	%edx,%ebx
324 	xorl	%eax,%eax
325 	xorl	%ebx,%esi
326 
327 	# Round 15
328 	movl	64(%ebp),%edx
329 	movl	%esi,%ebx
330 	xorl	%edx,%edi
331 	shrl	$16,%ebx
332 	movl	%esi,%edx
333 	movb	%bh,%al
334 	andl	$255,%ebx
335 	movb	%dh,%cl
336 	andl	$255,%edx
337 	movl	72(%ebp,%eax,4),%eax
338 	movl	1096(%ebp,%ebx,4),%ebx
339 	addl	%eax,%ebx
340 	movl	2120(%ebp,%ecx,4),%eax
341 	xorl	%eax,%ebx
342 	movl	3144(%ebp,%edx,4),%edx
343 	addl	%edx,%ebx
344 	# Load parameter 0 (16) enc=1
345 	movl	20(%esp),%eax
346 	xorl	%ebx,%edi
347 	movl	68(%ebp),%edx
348 	xorl	%edx,%esi
349 	movl	%edi,4(%eax)
350 	movl	%esi,(%eax)
351 	popl	%edi
352 	popl	%esi
353 	popl	%ebx
354 	popl	%ebp
355 	ret
356 .globl	_BF_decrypt
357 .type	_BF_decrypt,@function
358 .align	4
359 _BF_decrypt:
360 L_BF_decrypt_begin:
361 	%ifdef __CET__
362 
363 .byte	243,15,30,251
364 	%endif
365 
366 
367 	pushl	%ebp
368 	pushl	%ebx
369 	movl	12(%esp),%ebx
370 	movl	16(%esp),%ebp
371 	pushl	%esi
372 	pushl	%edi
373 	# Load the 2 words
374 	movl	(%ebx),%edi
375 	movl	4(%ebx),%esi
376 	xorl	%eax,%eax
377 	movl	68(%ebp),%ebx
378 	xorl	%ecx,%ecx
379 	xorl	%ebx,%edi
380 
381 	# Round 16
382 	movl	64(%ebp),%edx
383 	movl	%edi,%ebx
384 	xorl	%edx,%esi
385 	shrl	$16,%ebx
386 	movl	%edi,%edx
387 	movb	%bh,%al
388 	andl	$255,%ebx
389 	movb	%dh,%cl
390 	andl	$255,%edx
391 	movl	72(%ebp,%eax,4),%eax
392 	movl	1096(%ebp,%ebx,4),%ebx
393 	addl	%eax,%ebx
394 	movl	2120(%ebp,%ecx,4),%eax
395 	xorl	%eax,%ebx
396 	movl	3144(%ebp,%edx,4),%edx
397 	addl	%edx,%ebx
398 	xorl	%eax,%eax
399 	xorl	%ebx,%esi
400 
401 	# Round 15
402 	movl	60(%ebp),%edx
403 	movl	%esi,%ebx
404 	xorl	%edx,%edi
405 	shrl	$16,%ebx
406 	movl	%esi,%edx
407 	movb	%bh,%al
408 	andl	$255,%ebx
409 	movb	%dh,%cl
410 	andl	$255,%edx
411 	movl	72(%ebp,%eax,4),%eax
412 	movl	1096(%ebp,%ebx,4),%ebx
413 	addl	%eax,%ebx
414 	movl	2120(%ebp,%ecx,4),%eax
415 	xorl	%eax,%ebx
416 	movl	3144(%ebp,%edx,4),%edx
417 	addl	%edx,%ebx
418 	xorl	%eax,%eax
419 	xorl	%ebx,%edi
420 
421 	# Round 14
422 	movl	56(%ebp),%edx
423 	movl	%edi,%ebx
424 	xorl	%edx,%esi
425 	shrl	$16,%ebx
426 	movl	%edi,%edx
427 	movb	%bh,%al
428 	andl	$255,%ebx
429 	movb	%dh,%cl
430 	andl	$255,%edx
431 	movl	72(%ebp,%eax,4),%eax
432 	movl	1096(%ebp,%ebx,4),%ebx
433 	addl	%eax,%ebx
434 	movl	2120(%ebp,%ecx,4),%eax
435 	xorl	%eax,%ebx
436 	movl	3144(%ebp,%edx,4),%edx
437 	addl	%edx,%ebx
438 	xorl	%eax,%eax
439 	xorl	%ebx,%esi
440 
441 	# Round 13
442 	movl	52(%ebp),%edx
443 	movl	%esi,%ebx
444 	xorl	%edx,%edi
445 	shrl	$16,%ebx
446 	movl	%esi,%edx
447 	movb	%bh,%al
448 	andl	$255,%ebx
449 	movb	%dh,%cl
450 	andl	$255,%edx
451 	movl	72(%ebp,%eax,4),%eax
452 	movl	1096(%ebp,%ebx,4),%ebx
453 	addl	%eax,%ebx
454 	movl	2120(%ebp,%ecx,4),%eax
455 	xorl	%eax,%ebx
456 	movl	3144(%ebp,%edx,4),%edx
457 	addl	%edx,%ebx
458 	xorl	%eax,%eax
459 	xorl	%ebx,%edi
460 
461 	# Round 12
462 	movl	48(%ebp),%edx
463 	movl	%edi,%ebx
464 	xorl	%edx,%esi
465 	shrl	$16,%ebx
466 	movl	%edi,%edx
467 	movb	%bh,%al
468 	andl	$255,%ebx
469 	movb	%dh,%cl
470 	andl	$255,%edx
471 	movl	72(%ebp,%eax,4),%eax
472 	movl	1096(%ebp,%ebx,4),%ebx
473 	addl	%eax,%ebx
474 	movl	2120(%ebp,%ecx,4),%eax
475 	xorl	%eax,%ebx
476 	movl	3144(%ebp,%edx,4),%edx
477 	addl	%edx,%ebx
478 	xorl	%eax,%eax
479 	xorl	%ebx,%esi
480 
481 	# Round 11
482 	movl	44(%ebp),%edx
483 	movl	%esi,%ebx
484 	xorl	%edx,%edi
485 	shrl	$16,%ebx
486 	movl	%esi,%edx
487 	movb	%bh,%al
488 	andl	$255,%ebx
489 	movb	%dh,%cl
490 	andl	$255,%edx
491 	movl	72(%ebp,%eax,4),%eax
492 	movl	1096(%ebp,%ebx,4),%ebx
493 	addl	%eax,%ebx
494 	movl	2120(%ebp,%ecx,4),%eax
495 	xorl	%eax,%ebx
496 	movl	3144(%ebp,%edx,4),%edx
497 	addl	%edx,%ebx
498 	xorl	%eax,%eax
499 	xorl	%ebx,%edi
500 
501 	# Round 10
502 	movl	40(%ebp),%edx
503 	movl	%edi,%ebx
504 	xorl	%edx,%esi
505 	shrl	$16,%ebx
506 	movl	%edi,%edx
507 	movb	%bh,%al
508 	andl	$255,%ebx
509 	movb	%dh,%cl
510 	andl	$255,%edx
511 	movl	72(%ebp,%eax,4),%eax
512 	movl	1096(%ebp,%ebx,4),%ebx
513 	addl	%eax,%ebx
514 	movl	2120(%ebp,%ecx,4),%eax
515 	xorl	%eax,%ebx
516 	movl	3144(%ebp,%edx,4),%edx
517 	addl	%edx,%ebx
518 	xorl	%eax,%eax
519 	xorl	%ebx,%esi
520 
521 	# Round 9
522 	movl	36(%ebp),%edx
523 	movl	%esi,%ebx
524 	xorl	%edx,%edi
525 	shrl	$16,%ebx
526 	movl	%esi,%edx
527 	movb	%bh,%al
528 	andl	$255,%ebx
529 	movb	%dh,%cl
530 	andl	$255,%edx
531 	movl	72(%ebp,%eax,4),%eax
532 	movl	1096(%ebp,%ebx,4),%ebx
533 	addl	%eax,%ebx
534 	movl	2120(%ebp,%ecx,4),%eax
535 	xorl	%eax,%ebx
536 	movl	3144(%ebp,%edx,4),%edx
537 	addl	%edx,%ebx
538 	xorl	%eax,%eax
539 	xorl	%ebx,%edi
540 
541 	# Round 8
542 	movl	32(%ebp),%edx
543 	movl	%edi,%ebx
544 	xorl	%edx,%esi
545 	shrl	$16,%ebx
546 	movl	%edi,%edx
547 	movb	%bh,%al
548 	andl	$255,%ebx
549 	movb	%dh,%cl
550 	andl	$255,%edx
551 	movl	72(%ebp,%eax,4),%eax
552 	movl	1096(%ebp,%ebx,4),%ebx
553 	addl	%eax,%ebx
554 	movl	2120(%ebp,%ecx,4),%eax
555 	xorl	%eax,%ebx
556 	movl	3144(%ebp,%edx,4),%edx
557 	addl	%edx,%ebx
558 	xorl	%eax,%eax
559 	xorl	%ebx,%esi
560 
561 	# Round 7
562 	movl	28(%ebp),%edx
563 	movl	%esi,%ebx
564 	xorl	%edx,%edi
565 	shrl	$16,%ebx
566 	movl	%esi,%edx
567 	movb	%bh,%al
568 	andl	$255,%ebx
569 	movb	%dh,%cl
570 	andl	$255,%edx
571 	movl	72(%ebp,%eax,4),%eax
572 	movl	1096(%ebp,%ebx,4),%ebx
573 	addl	%eax,%ebx
574 	movl	2120(%ebp,%ecx,4),%eax
575 	xorl	%eax,%ebx
576 	movl	3144(%ebp,%edx,4),%edx
577 	addl	%edx,%ebx
578 	xorl	%eax,%eax
579 	xorl	%ebx,%edi
580 
581 	# Round 6
582 	movl	24(%ebp),%edx
583 	movl	%edi,%ebx
584 	xorl	%edx,%esi
585 	shrl	$16,%ebx
586 	movl	%edi,%edx
587 	movb	%bh,%al
588 	andl	$255,%ebx
589 	movb	%dh,%cl
590 	andl	$255,%edx
591 	movl	72(%ebp,%eax,4),%eax
592 	movl	1096(%ebp,%ebx,4),%ebx
593 	addl	%eax,%ebx
594 	movl	2120(%ebp,%ecx,4),%eax
595 	xorl	%eax,%ebx
596 	movl	3144(%ebp,%edx,4),%edx
597 	addl	%edx,%ebx
598 	xorl	%eax,%eax
599 	xorl	%ebx,%esi
600 
601 	# Round 5
602 	movl	20(%ebp),%edx
603 	movl	%esi,%ebx
604 	xorl	%edx,%edi
605 	shrl	$16,%ebx
606 	movl	%esi,%edx
607 	movb	%bh,%al
608 	andl	$255,%ebx
609 	movb	%dh,%cl
610 	andl	$255,%edx
611 	movl	72(%ebp,%eax,4),%eax
612 	movl	1096(%ebp,%ebx,4),%ebx
613 	addl	%eax,%ebx
614 	movl	2120(%ebp,%ecx,4),%eax
615 	xorl	%eax,%ebx
616 	movl	3144(%ebp,%edx,4),%edx
617 	addl	%edx,%ebx
618 	xorl	%eax,%eax
619 	xorl	%ebx,%edi
620 
621 	# Round 4
622 	movl	16(%ebp),%edx
623 	movl	%edi,%ebx
624 	xorl	%edx,%esi
625 	shrl	$16,%ebx
626 	movl	%edi,%edx
627 	movb	%bh,%al
628 	andl	$255,%ebx
629 	movb	%dh,%cl
630 	andl	$255,%edx
631 	movl	72(%ebp,%eax,4),%eax
632 	movl	1096(%ebp,%ebx,4),%ebx
633 	addl	%eax,%ebx
634 	movl	2120(%ebp,%ecx,4),%eax
635 	xorl	%eax,%ebx
636 	movl	3144(%ebp,%edx,4),%edx
637 	addl	%edx,%ebx
638 	xorl	%eax,%eax
639 	xorl	%ebx,%esi
640 
641 	# Round 3
642 	movl	12(%ebp),%edx
643 	movl	%esi,%ebx
644 	xorl	%edx,%edi
645 	shrl	$16,%ebx
646 	movl	%esi,%edx
647 	movb	%bh,%al
648 	andl	$255,%ebx
649 	movb	%dh,%cl
650 	andl	$255,%edx
651 	movl	72(%ebp,%eax,4),%eax
652 	movl	1096(%ebp,%ebx,4),%ebx
653 	addl	%eax,%ebx
654 	movl	2120(%ebp,%ecx,4),%eax
655 	xorl	%eax,%ebx
656 	movl	3144(%ebp,%edx,4),%edx
657 	addl	%edx,%ebx
658 	xorl	%eax,%eax
659 	xorl	%ebx,%edi
660 
661 	# Round 2
662 	movl	8(%ebp),%edx
663 	movl	%edi,%ebx
664 	xorl	%edx,%esi
665 	shrl	$16,%ebx
666 	movl	%edi,%edx
667 	movb	%bh,%al
668 	andl	$255,%ebx
669 	movb	%dh,%cl
670 	andl	$255,%edx
671 	movl	72(%ebp,%eax,4),%eax
672 	movl	1096(%ebp,%ebx,4),%ebx
673 	addl	%eax,%ebx
674 	movl	2120(%ebp,%ecx,4),%eax
675 	xorl	%eax,%ebx
676 	movl	3144(%ebp,%edx,4),%edx
677 	addl	%edx,%ebx
678 	xorl	%eax,%eax
679 	xorl	%ebx,%esi
680 
681 	# Round 1
682 	movl	4(%ebp),%edx
683 	movl	%esi,%ebx
684 	xorl	%edx,%edi
685 	shrl	$16,%ebx
686 	movl	%esi,%edx
687 	movb	%bh,%al
688 	andl	$255,%ebx
689 	movb	%dh,%cl
690 	andl	$255,%edx
691 	movl	72(%ebp,%eax,4),%eax
692 	movl	1096(%ebp,%ebx,4),%ebx
693 	addl	%eax,%ebx
694 	movl	2120(%ebp,%ecx,4),%eax
695 	xorl	%eax,%ebx
696 	movl	3144(%ebp,%edx,4),%edx
697 	addl	%edx,%ebx
698 	# Load parameter 0 (1) enc=0
699 	movl	20(%esp),%eax
700 	xorl	%ebx,%edi
701 	movl	(%ebp),%edx
702 	xorl	%edx,%esi
703 	movl	%edi,4(%eax)
704 	movl	%esi,(%eax)
705 	popl	%edi
706 	popl	%esi
707 	popl	%ebx
708 	popl	%ebp
709 	ret
710 .globl	_BF_cbc_encrypt
711 .type	_BF_cbc_encrypt,@function
712 .align	4
713 _BF_cbc_encrypt:
714 L_BF_cbc_encrypt_begin:
715 	%ifdef __CET__
716 
717 .byte	243,15,30,251
718 	%endif
719 
720 
721 	pushl	%ebp
722 	pushl	%ebx
723 	pushl	%esi
724 	pushl	%edi
725 	movl	28(%esp),%ebp
726 	# getting iv ptr from parameter 4
727 	movl	36(%esp),%ebx
728 	movl	(%ebx),%esi
729 	movl	4(%ebx),%edi
730 	pushl	%edi
731 	pushl	%esi
732 	pushl	%edi
733 	pushl	%esi
734 	movl	%esp,%ebx
735 	movl	36(%esp),%esi
736 	movl	40(%esp),%edi
737 	# getting encrypt flag from parameter 5
738 	movl	56(%esp),%ecx
739 	# get and push parameter 3
740 	movl	48(%esp),%eax
741 	pushl	%eax
742 	pushl	%ebx
743 	cmpl	$0,%ecx
744 	jz	L000decrypt
745 	andl	$4294967288,%ebp
746 	movl	8(%esp),%eax
747 	movl	12(%esp),%ebx
748 	jz	L001encrypt_finish
749 L002encrypt_loop:
750 	movl	(%esi),%ecx
751 	movl	4(%esi),%edx
752 	xorl	%ecx,%eax
753 	xorl	%edx,%ebx
754 	bswap	%eax
755 	bswap	%ebx
756 	movl	%eax,8(%esp)
757 	movl	%ebx,12(%esp)
758 	call	L_BF_encrypt_begin
759 	movl	8(%esp),%eax
760 	movl	12(%esp),%ebx
761 	bswap	%eax
762 	bswap	%ebx
763 	movl	%eax,(%edi)
764 	movl	%ebx,4(%edi)
765 	addl	$8,%esi
766 	addl	$8,%edi
767 	subl	$8,%ebp
768 	jnz	L002encrypt_loop
769 L001encrypt_finish:
770 	movl	52(%esp),%ebp
771 	andl	$7,%ebp
772 	jz	L003finish
773 	call	L004PIC_point
774 L004PIC_point:
775 	popl	%edx
776 	leal	L005cbc_enc_jmp_table-L004PIC_point(%edx),%ecx
777 	movl	(%ecx,%ebp,4),%ebp
778 	addl	%edx,%ebp
779 	xorl	%ecx,%ecx
780 	xorl	%edx,%edx
781 	jmp	*%ebp
782 L006ej7:
783 	%ifdef __CET__
784 
785 .byte	243,15,30,251
786 	%endif
787 
788 	movb	6(%esi),%dh
789 	shll	$8,%edx
790 L007ej6:
791 	%ifdef __CET__
792 
793 .byte	243,15,30,251
794 	%endif
795 
796 	movb	5(%esi),%dh
797 L008ej5:
798 	%ifdef __CET__
799 
800 .byte	243,15,30,251
801 	%endif
802 
803 	movb	4(%esi),%dl
804 L009ej4:
805 	%ifdef __CET__
806 
807 .byte	243,15,30,251
808 	%endif
809 
810 	movl	(%esi),%ecx
811 	jmp	L010ejend
812 L011ej3:
813 	%ifdef __CET__
814 
815 .byte	243,15,30,251
816 	%endif
817 
818 	movb	2(%esi),%ch
819 	shll	$8,%ecx
820 L012ej2:
821 	%ifdef __CET__
822 
823 .byte	243,15,30,251
824 	%endif
825 
826 	movb	1(%esi),%ch
827 L013ej1:
828 	%ifdef __CET__
829 
830 .byte	243,15,30,251
831 	%endif
832 
833 	movb	(%esi),%cl
834 L010ejend:
835 	xorl	%ecx,%eax
836 	xorl	%edx,%ebx
837 	bswap	%eax
838 	bswap	%ebx
839 	movl	%eax,8(%esp)
840 	movl	%ebx,12(%esp)
841 	call	L_BF_encrypt_begin
842 	movl	8(%esp),%eax
843 	movl	12(%esp),%ebx
844 	bswap	%eax
845 	bswap	%ebx
846 	movl	%eax,(%edi)
847 	movl	%ebx,4(%edi)
848 	jmp	L003finish
849 L000decrypt:
850 	andl	$4294967288,%ebp
851 	movl	16(%esp),%eax
852 	movl	20(%esp),%ebx
853 	jz	L014decrypt_finish
854 L015decrypt_loop:
855 	movl	(%esi),%eax
856 	movl	4(%esi),%ebx
857 	bswap	%eax
858 	bswap	%ebx
859 	movl	%eax,8(%esp)
860 	movl	%ebx,12(%esp)
861 	call	L_BF_decrypt_begin
862 	movl	8(%esp),%eax
863 	movl	12(%esp),%ebx
864 	bswap	%eax
865 	bswap	%ebx
866 	movl	16(%esp),%ecx
867 	movl	20(%esp),%edx
868 	xorl	%eax,%ecx
869 	xorl	%ebx,%edx
870 	movl	(%esi),%eax
871 	movl	4(%esi),%ebx
872 	movl	%ecx,(%edi)
873 	movl	%edx,4(%edi)
874 	movl	%eax,16(%esp)
875 	movl	%ebx,20(%esp)
876 	addl	$8,%esi
877 	addl	$8,%edi
878 	subl	$8,%ebp
879 	jnz	L015decrypt_loop
880 L014decrypt_finish:
881 	movl	52(%esp),%ebp
882 	andl	$7,%ebp
883 	jz	L003finish
884 	movl	(%esi),%eax
885 	movl	4(%esi),%ebx
886 	bswap	%eax
887 	bswap	%ebx
888 	movl	%eax,8(%esp)
889 	movl	%ebx,12(%esp)
890 	call	L_BF_decrypt_begin
891 	movl	8(%esp),%eax
892 	movl	12(%esp),%ebx
893 	bswap	%eax
894 	bswap	%ebx
895 	movl	16(%esp),%ecx
896 	movl	20(%esp),%edx
897 	xorl	%eax,%ecx
898 	xorl	%ebx,%edx
899 	movl	(%esi),%eax
900 	movl	4(%esi),%ebx
901 L016dj7:
902 	rorl	$16,%edx
903 	movb	%dl,6(%edi)
904 	shrl	$16,%edx
905 L017dj6:
906 	movb	%dh,5(%edi)
907 L018dj5:
908 	movb	%dl,4(%edi)
909 L019dj4:
910 	movl	%ecx,(%edi)
911 	jmp	L020djend
912 L021dj3:
913 	rorl	$16,%ecx
914 	movb	%cl,2(%edi)
915 	shll	$16,%ecx
916 L022dj2:
917 	movb	%ch,1(%esi)
918 L023dj1:
919 	movb	%cl,(%esi)
920 L020djend:
921 	jmp	L003finish
922 L003finish:
923 	movl	60(%esp),%ecx
924 	addl	$24,%esp
925 	movl	%eax,(%ecx)
926 	movl	%ebx,4(%ecx)
927 	popl	%edi
928 	popl	%esi
929 	popl	%ebx
930 	popl	%ebp
931 	ret
932 .align	6,0x90
933 L005cbc_enc_jmp_table:
934 .long	0
935 .long	L013ej1-L004PIC_point
936 .long	L012ej2-L004PIC_point
937 .long	L011ej3-L004PIC_point
938 .long	L009ej4-L004PIC_point
939 .long	L008ej5-L004PIC_point
940 .long	L007ej6-L004PIC_point
941 .long	L006ej7-L004PIC_point
942 .align	6,0x90
943