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