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