xref: /netbsd-src/crypto/external/bsd/openssl/lib/libcrypto/arch/i386/des-586.S (revision 1b3d6f93806f8821fe459e13ad13e605b37c6d43)
1#include <machine/asm.h>
2.text
3.globl	DES_SPtrans
4.type	_x86_DES_encrypt,@function
5.align	16
6_x86_DES_encrypt:
7	#ifdef __CET__
8
9.byte	243,15,30,251
10	#endif
11
12	pushl	%ecx
13
14	movl	(%ecx),%eax
15	xorl	%ebx,%ebx
16	movl	4(%ecx),%edx
17	xorl	%esi,%eax
18	xorl	%ecx,%ecx
19	xorl	%esi,%edx
20	andl	$0xfcfcfcfc,%eax
21	andl	$0xcfcfcfcf,%edx
22	movb	%al,%bl
23	movb	%ah,%cl
24	rorl	$4,%edx
25	xorl	(%ebp,%ebx,1),%edi
26	movb	%dl,%bl
27	xorl	0x200(%ebp,%ecx,1),%edi
28	movb	%dh,%cl
29	shrl	$16,%eax
30	xorl	0x100(%ebp,%ebx,1),%edi
31	movb	%ah,%bl
32	shrl	$16,%edx
33	xorl	0x300(%ebp,%ecx,1),%edi
34	movb	%dh,%cl
35	andl	$0xff,%eax
36	andl	$0xff,%edx
37	xorl	0x600(%ebp,%ebx,1),%edi
38	xorl	0x700(%ebp,%ecx,1),%edi
39	movl	(%esp),%ecx
40	xorl	0x400(%ebp,%eax,1),%edi
41	xorl	0x500(%ebp,%edx,1),%edi
42
43	movl	8(%ecx),%eax
44	xorl	%ebx,%ebx
45	movl	12(%ecx),%edx
46	xorl	%edi,%eax
47	xorl	%ecx,%ecx
48	xorl	%edi,%edx
49	andl	$0xfcfcfcfc,%eax
50	andl	$0xcfcfcfcf,%edx
51	movb	%al,%bl
52	movb	%ah,%cl
53	rorl	$4,%edx
54	xorl	(%ebp,%ebx,1),%esi
55	movb	%dl,%bl
56	xorl	0x200(%ebp,%ecx,1),%esi
57	movb	%dh,%cl
58	shrl	$16,%eax
59	xorl	0x100(%ebp,%ebx,1),%esi
60	movb	%ah,%bl
61	shrl	$16,%edx
62	xorl	0x300(%ebp,%ecx,1),%esi
63	movb	%dh,%cl
64	andl	$0xff,%eax
65	andl	$0xff,%edx
66	xorl	0x600(%ebp,%ebx,1),%esi
67	xorl	0x700(%ebp,%ecx,1),%esi
68	movl	(%esp),%ecx
69	xorl	0x400(%ebp,%eax,1),%esi
70	xorl	0x500(%ebp,%edx,1),%esi
71
72	movl	16(%ecx),%eax
73	xorl	%ebx,%ebx
74	movl	20(%ecx),%edx
75	xorl	%esi,%eax
76	xorl	%ecx,%ecx
77	xorl	%esi,%edx
78	andl	$0xfcfcfcfc,%eax
79	andl	$0xcfcfcfcf,%edx
80	movb	%al,%bl
81	movb	%ah,%cl
82	rorl	$4,%edx
83	xorl	(%ebp,%ebx,1),%edi
84	movb	%dl,%bl
85	xorl	0x200(%ebp,%ecx,1),%edi
86	movb	%dh,%cl
87	shrl	$16,%eax
88	xorl	0x100(%ebp,%ebx,1),%edi
89	movb	%ah,%bl
90	shrl	$16,%edx
91	xorl	0x300(%ebp,%ecx,1),%edi
92	movb	%dh,%cl
93	andl	$0xff,%eax
94	andl	$0xff,%edx
95	xorl	0x600(%ebp,%ebx,1),%edi
96	xorl	0x700(%ebp,%ecx,1),%edi
97	movl	(%esp),%ecx
98	xorl	0x400(%ebp,%eax,1),%edi
99	xorl	0x500(%ebp,%edx,1),%edi
100
101	movl	24(%ecx),%eax
102	xorl	%ebx,%ebx
103	movl	28(%ecx),%edx
104	xorl	%edi,%eax
105	xorl	%ecx,%ecx
106	xorl	%edi,%edx
107	andl	$0xfcfcfcfc,%eax
108	andl	$0xcfcfcfcf,%edx
109	movb	%al,%bl
110	movb	%ah,%cl
111	rorl	$4,%edx
112	xorl	(%ebp,%ebx,1),%esi
113	movb	%dl,%bl
114	xorl	0x200(%ebp,%ecx,1),%esi
115	movb	%dh,%cl
116	shrl	$16,%eax
117	xorl	0x100(%ebp,%ebx,1),%esi
118	movb	%ah,%bl
119	shrl	$16,%edx
120	xorl	0x300(%ebp,%ecx,1),%esi
121	movb	%dh,%cl
122	andl	$0xff,%eax
123	andl	$0xff,%edx
124	xorl	0x600(%ebp,%ebx,1),%esi
125	xorl	0x700(%ebp,%ecx,1),%esi
126	movl	(%esp),%ecx
127	xorl	0x400(%ebp,%eax,1),%esi
128	xorl	0x500(%ebp,%edx,1),%esi
129
130	movl	32(%ecx),%eax
131	xorl	%ebx,%ebx
132	movl	36(%ecx),%edx
133	xorl	%esi,%eax
134	xorl	%ecx,%ecx
135	xorl	%esi,%edx
136	andl	$0xfcfcfcfc,%eax
137	andl	$0xcfcfcfcf,%edx
138	movb	%al,%bl
139	movb	%ah,%cl
140	rorl	$4,%edx
141	xorl	(%ebp,%ebx,1),%edi
142	movb	%dl,%bl
143	xorl	0x200(%ebp,%ecx,1),%edi
144	movb	%dh,%cl
145	shrl	$16,%eax
146	xorl	0x100(%ebp,%ebx,1),%edi
147	movb	%ah,%bl
148	shrl	$16,%edx
149	xorl	0x300(%ebp,%ecx,1),%edi
150	movb	%dh,%cl
151	andl	$0xff,%eax
152	andl	$0xff,%edx
153	xorl	0x600(%ebp,%ebx,1),%edi
154	xorl	0x700(%ebp,%ecx,1),%edi
155	movl	(%esp),%ecx
156	xorl	0x400(%ebp,%eax,1),%edi
157	xorl	0x500(%ebp,%edx,1),%edi
158
159	movl	40(%ecx),%eax
160	xorl	%ebx,%ebx
161	movl	44(%ecx),%edx
162	xorl	%edi,%eax
163	xorl	%ecx,%ecx
164	xorl	%edi,%edx
165	andl	$0xfcfcfcfc,%eax
166	andl	$0xcfcfcfcf,%edx
167	movb	%al,%bl
168	movb	%ah,%cl
169	rorl	$4,%edx
170	xorl	(%ebp,%ebx,1),%esi
171	movb	%dl,%bl
172	xorl	0x200(%ebp,%ecx,1),%esi
173	movb	%dh,%cl
174	shrl	$16,%eax
175	xorl	0x100(%ebp,%ebx,1),%esi
176	movb	%ah,%bl
177	shrl	$16,%edx
178	xorl	0x300(%ebp,%ecx,1),%esi
179	movb	%dh,%cl
180	andl	$0xff,%eax
181	andl	$0xff,%edx
182	xorl	0x600(%ebp,%ebx,1),%esi
183	xorl	0x700(%ebp,%ecx,1),%esi
184	movl	(%esp),%ecx
185	xorl	0x400(%ebp,%eax,1),%esi
186	xorl	0x500(%ebp,%edx,1),%esi
187
188	movl	48(%ecx),%eax
189	xorl	%ebx,%ebx
190	movl	52(%ecx),%edx
191	xorl	%esi,%eax
192	xorl	%ecx,%ecx
193	xorl	%esi,%edx
194	andl	$0xfcfcfcfc,%eax
195	andl	$0xcfcfcfcf,%edx
196	movb	%al,%bl
197	movb	%ah,%cl
198	rorl	$4,%edx
199	xorl	(%ebp,%ebx,1),%edi
200	movb	%dl,%bl
201	xorl	0x200(%ebp,%ecx,1),%edi
202	movb	%dh,%cl
203	shrl	$16,%eax
204	xorl	0x100(%ebp,%ebx,1),%edi
205	movb	%ah,%bl
206	shrl	$16,%edx
207	xorl	0x300(%ebp,%ecx,1),%edi
208	movb	%dh,%cl
209	andl	$0xff,%eax
210	andl	$0xff,%edx
211	xorl	0x600(%ebp,%ebx,1),%edi
212	xorl	0x700(%ebp,%ecx,1),%edi
213	movl	(%esp),%ecx
214	xorl	0x400(%ebp,%eax,1),%edi
215	xorl	0x500(%ebp,%edx,1),%edi
216
217	movl	56(%ecx),%eax
218	xorl	%ebx,%ebx
219	movl	60(%ecx),%edx
220	xorl	%edi,%eax
221	xorl	%ecx,%ecx
222	xorl	%edi,%edx
223	andl	$0xfcfcfcfc,%eax
224	andl	$0xcfcfcfcf,%edx
225	movb	%al,%bl
226	movb	%ah,%cl
227	rorl	$4,%edx
228	xorl	(%ebp,%ebx,1),%esi
229	movb	%dl,%bl
230	xorl	0x200(%ebp,%ecx,1),%esi
231	movb	%dh,%cl
232	shrl	$16,%eax
233	xorl	0x100(%ebp,%ebx,1),%esi
234	movb	%ah,%bl
235	shrl	$16,%edx
236	xorl	0x300(%ebp,%ecx,1),%esi
237	movb	%dh,%cl
238	andl	$0xff,%eax
239	andl	$0xff,%edx
240	xorl	0x600(%ebp,%ebx,1),%esi
241	xorl	0x700(%ebp,%ecx,1),%esi
242	movl	(%esp),%ecx
243	xorl	0x400(%ebp,%eax,1),%esi
244	xorl	0x500(%ebp,%edx,1),%esi
245
246	movl	64(%ecx),%eax
247	xorl	%ebx,%ebx
248	movl	68(%ecx),%edx
249	xorl	%esi,%eax
250	xorl	%ecx,%ecx
251	xorl	%esi,%edx
252	andl	$0xfcfcfcfc,%eax
253	andl	$0xcfcfcfcf,%edx
254	movb	%al,%bl
255	movb	%ah,%cl
256	rorl	$4,%edx
257	xorl	(%ebp,%ebx,1),%edi
258	movb	%dl,%bl
259	xorl	0x200(%ebp,%ecx,1),%edi
260	movb	%dh,%cl
261	shrl	$16,%eax
262	xorl	0x100(%ebp,%ebx,1),%edi
263	movb	%ah,%bl
264	shrl	$16,%edx
265	xorl	0x300(%ebp,%ecx,1),%edi
266	movb	%dh,%cl
267	andl	$0xff,%eax
268	andl	$0xff,%edx
269	xorl	0x600(%ebp,%ebx,1),%edi
270	xorl	0x700(%ebp,%ecx,1),%edi
271	movl	(%esp),%ecx
272	xorl	0x400(%ebp,%eax,1),%edi
273	xorl	0x500(%ebp,%edx,1),%edi
274
275	movl	72(%ecx),%eax
276	xorl	%ebx,%ebx
277	movl	76(%ecx),%edx
278	xorl	%edi,%eax
279	xorl	%ecx,%ecx
280	xorl	%edi,%edx
281	andl	$0xfcfcfcfc,%eax
282	andl	$0xcfcfcfcf,%edx
283	movb	%al,%bl
284	movb	%ah,%cl
285	rorl	$4,%edx
286	xorl	(%ebp,%ebx,1),%esi
287	movb	%dl,%bl
288	xorl	0x200(%ebp,%ecx,1),%esi
289	movb	%dh,%cl
290	shrl	$16,%eax
291	xorl	0x100(%ebp,%ebx,1),%esi
292	movb	%ah,%bl
293	shrl	$16,%edx
294	xorl	0x300(%ebp,%ecx,1),%esi
295	movb	%dh,%cl
296	andl	$0xff,%eax
297	andl	$0xff,%edx
298	xorl	0x600(%ebp,%ebx,1),%esi
299	xorl	0x700(%ebp,%ecx,1),%esi
300	movl	(%esp),%ecx
301	xorl	0x400(%ebp,%eax,1),%esi
302	xorl	0x500(%ebp,%edx,1),%esi
303
304	movl	80(%ecx),%eax
305	xorl	%ebx,%ebx
306	movl	84(%ecx),%edx
307	xorl	%esi,%eax
308	xorl	%ecx,%ecx
309	xorl	%esi,%edx
310	andl	$0xfcfcfcfc,%eax
311	andl	$0xcfcfcfcf,%edx
312	movb	%al,%bl
313	movb	%ah,%cl
314	rorl	$4,%edx
315	xorl	(%ebp,%ebx,1),%edi
316	movb	%dl,%bl
317	xorl	0x200(%ebp,%ecx,1),%edi
318	movb	%dh,%cl
319	shrl	$16,%eax
320	xorl	0x100(%ebp,%ebx,1),%edi
321	movb	%ah,%bl
322	shrl	$16,%edx
323	xorl	0x300(%ebp,%ecx,1),%edi
324	movb	%dh,%cl
325	andl	$0xff,%eax
326	andl	$0xff,%edx
327	xorl	0x600(%ebp,%ebx,1),%edi
328	xorl	0x700(%ebp,%ecx,1),%edi
329	movl	(%esp),%ecx
330	xorl	0x400(%ebp,%eax,1),%edi
331	xorl	0x500(%ebp,%edx,1),%edi
332
333	movl	88(%ecx),%eax
334	xorl	%ebx,%ebx
335	movl	92(%ecx),%edx
336	xorl	%edi,%eax
337	xorl	%ecx,%ecx
338	xorl	%edi,%edx
339	andl	$0xfcfcfcfc,%eax
340	andl	$0xcfcfcfcf,%edx
341	movb	%al,%bl
342	movb	%ah,%cl
343	rorl	$4,%edx
344	xorl	(%ebp,%ebx,1),%esi
345	movb	%dl,%bl
346	xorl	0x200(%ebp,%ecx,1),%esi
347	movb	%dh,%cl
348	shrl	$16,%eax
349	xorl	0x100(%ebp,%ebx,1),%esi
350	movb	%ah,%bl
351	shrl	$16,%edx
352	xorl	0x300(%ebp,%ecx,1),%esi
353	movb	%dh,%cl
354	andl	$0xff,%eax
355	andl	$0xff,%edx
356	xorl	0x600(%ebp,%ebx,1),%esi
357	xorl	0x700(%ebp,%ecx,1),%esi
358	movl	(%esp),%ecx
359	xorl	0x400(%ebp,%eax,1),%esi
360	xorl	0x500(%ebp,%edx,1),%esi
361
362	movl	96(%ecx),%eax
363	xorl	%ebx,%ebx
364	movl	100(%ecx),%edx
365	xorl	%esi,%eax
366	xorl	%ecx,%ecx
367	xorl	%esi,%edx
368	andl	$0xfcfcfcfc,%eax
369	andl	$0xcfcfcfcf,%edx
370	movb	%al,%bl
371	movb	%ah,%cl
372	rorl	$4,%edx
373	xorl	(%ebp,%ebx,1),%edi
374	movb	%dl,%bl
375	xorl	0x200(%ebp,%ecx,1),%edi
376	movb	%dh,%cl
377	shrl	$16,%eax
378	xorl	0x100(%ebp,%ebx,1),%edi
379	movb	%ah,%bl
380	shrl	$16,%edx
381	xorl	0x300(%ebp,%ecx,1),%edi
382	movb	%dh,%cl
383	andl	$0xff,%eax
384	andl	$0xff,%edx
385	xorl	0x600(%ebp,%ebx,1),%edi
386	xorl	0x700(%ebp,%ecx,1),%edi
387	movl	(%esp),%ecx
388	xorl	0x400(%ebp,%eax,1),%edi
389	xorl	0x500(%ebp,%edx,1),%edi
390
391	movl	104(%ecx),%eax
392	xorl	%ebx,%ebx
393	movl	108(%ecx),%edx
394	xorl	%edi,%eax
395	xorl	%ecx,%ecx
396	xorl	%edi,%edx
397	andl	$0xfcfcfcfc,%eax
398	andl	$0xcfcfcfcf,%edx
399	movb	%al,%bl
400	movb	%ah,%cl
401	rorl	$4,%edx
402	xorl	(%ebp,%ebx,1),%esi
403	movb	%dl,%bl
404	xorl	0x200(%ebp,%ecx,1),%esi
405	movb	%dh,%cl
406	shrl	$16,%eax
407	xorl	0x100(%ebp,%ebx,1),%esi
408	movb	%ah,%bl
409	shrl	$16,%edx
410	xorl	0x300(%ebp,%ecx,1),%esi
411	movb	%dh,%cl
412	andl	$0xff,%eax
413	andl	$0xff,%edx
414	xorl	0x600(%ebp,%ebx,1),%esi
415	xorl	0x700(%ebp,%ecx,1),%esi
416	movl	(%esp),%ecx
417	xorl	0x400(%ebp,%eax,1),%esi
418	xorl	0x500(%ebp,%edx,1),%esi
419
420	movl	112(%ecx),%eax
421	xorl	%ebx,%ebx
422	movl	116(%ecx),%edx
423	xorl	%esi,%eax
424	xorl	%ecx,%ecx
425	xorl	%esi,%edx
426	andl	$0xfcfcfcfc,%eax
427	andl	$0xcfcfcfcf,%edx
428	movb	%al,%bl
429	movb	%ah,%cl
430	rorl	$4,%edx
431	xorl	(%ebp,%ebx,1),%edi
432	movb	%dl,%bl
433	xorl	0x200(%ebp,%ecx,1),%edi
434	movb	%dh,%cl
435	shrl	$16,%eax
436	xorl	0x100(%ebp,%ebx,1),%edi
437	movb	%ah,%bl
438	shrl	$16,%edx
439	xorl	0x300(%ebp,%ecx,1),%edi
440	movb	%dh,%cl
441	andl	$0xff,%eax
442	andl	$0xff,%edx
443	xorl	0x600(%ebp,%ebx,1),%edi
444	xorl	0x700(%ebp,%ecx,1),%edi
445	movl	(%esp),%ecx
446	xorl	0x400(%ebp,%eax,1),%edi
447	xorl	0x500(%ebp,%edx,1),%edi
448
449	movl	120(%ecx),%eax
450	xorl	%ebx,%ebx
451	movl	124(%ecx),%edx
452	xorl	%edi,%eax
453	xorl	%ecx,%ecx
454	xorl	%edi,%edx
455	andl	$0xfcfcfcfc,%eax
456	andl	$0xcfcfcfcf,%edx
457	movb	%al,%bl
458	movb	%ah,%cl
459	rorl	$4,%edx
460	xorl	(%ebp,%ebx,1),%esi
461	movb	%dl,%bl
462	xorl	0x200(%ebp,%ecx,1),%esi
463	movb	%dh,%cl
464	shrl	$16,%eax
465	xorl	0x100(%ebp,%ebx,1),%esi
466	movb	%ah,%bl
467	shrl	$16,%edx
468	xorl	0x300(%ebp,%ecx,1),%esi
469	movb	%dh,%cl
470	andl	$0xff,%eax
471	andl	$0xff,%edx
472	xorl	0x600(%ebp,%ebx,1),%esi
473	xorl	0x700(%ebp,%ecx,1),%esi
474	movl	(%esp),%ecx
475	xorl	0x400(%ebp,%eax,1),%esi
476	xorl	0x500(%ebp,%edx,1),%esi
477	addl	$4,%esp
478	ret
479.size	_x86_DES_encrypt,.-_x86_DES_encrypt
480.type	_x86_DES_decrypt,@function
481.align	16
482_x86_DES_decrypt:
483	#ifdef __CET__
484
485.byte	243,15,30,251
486	#endif
487
488	pushl	%ecx
489
490	movl	120(%ecx),%eax
491	xorl	%ebx,%ebx
492	movl	124(%ecx),%edx
493	xorl	%esi,%eax
494	xorl	%ecx,%ecx
495	xorl	%esi,%edx
496	andl	$0xfcfcfcfc,%eax
497	andl	$0xcfcfcfcf,%edx
498	movb	%al,%bl
499	movb	%ah,%cl
500	rorl	$4,%edx
501	xorl	(%ebp,%ebx,1),%edi
502	movb	%dl,%bl
503	xorl	0x200(%ebp,%ecx,1),%edi
504	movb	%dh,%cl
505	shrl	$16,%eax
506	xorl	0x100(%ebp,%ebx,1),%edi
507	movb	%ah,%bl
508	shrl	$16,%edx
509	xorl	0x300(%ebp,%ecx,1),%edi
510	movb	%dh,%cl
511	andl	$0xff,%eax
512	andl	$0xff,%edx
513	xorl	0x600(%ebp,%ebx,1),%edi
514	xorl	0x700(%ebp,%ecx,1),%edi
515	movl	(%esp),%ecx
516	xorl	0x400(%ebp,%eax,1),%edi
517	xorl	0x500(%ebp,%edx,1),%edi
518
519	movl	112(%ecx),%eax
520	xorl	%ebx,%ebx
521	movl	116(%ecx),%edx
522	xorl	%edi,%eax
523	xorl	%ecx,%ecx
524	xorl	%edi,%edx
525	andl	$0xfcfcfcfc,%eax
526	andl	$0xcfcfcfcf,%edx
527	movb	%al,%bl
528	movb	%ah,%cl
529	rorl	$4,%edx
530	xorl	(%ebp,%ebx,1),%esi
531	movb	%dl,%bl
532	xorl	0x200(%ebp,%ecx,1),%esi
533	movb	%dh,%cl
534	shrl	$16,%eax
535	xorl	0x100(%ebp,%ebx,1),%esi
536	movb	%ah,%bl
537	shrl	$16,%edx
538	xorl	0x300(%ebp,%ecx,1),%esi
539	movb	%dh,%cl
540	andl	$0xff,%eax
541	andl	$0xff,%edx
542	xorl	0x600(%ebp,%ebx,1),%esi
543	xorl	0x700(%ebp,%ecx,1),%esi
544	movl	(%esp),%ecx
545	xorl	0x400(%ebp,%eax,1),%esi
546	xorl	0x500(%ebp,%edx,1),%esi
547
548	movl	104(%ecx),%eax
549	xorl	%ebx,%ebx
550	movl	108(%ecx),%edx
551	xorl	%esi,%eax
552	xorl	%ecx,%ecx
553	xorl	%esi,%edx
554	andl	$0xfcfcfcfc,%eax
555	andl	$0xcfcfcfcf,%edx
556	movb	%al,%bl
557	movb	%ah,%cl
558	rorl	$4,%edx
559	xorl	(%ebp,%ebx,1),%edi
560	movb	%dl,%bl
561	xorl	0x200(%ebp,%ecx,1),%edi
562	movb	%dh,%cl
563	shrl	$16,%eax
564	xorl	0x100(%ebp,%ebx,1),%edi
565	movb	%ah,%bl
566	shrl	$16,%edx
567	xorl	0x300(%ebp,%ecx,1),%edi
568	movb	%dh,%cl
569	andl	$0xff,%eax
570	andl	$0xff,%edx
571	xorl	0x600(%ebp,%ebx,1),%edi
572	xorl	0x700(%ebp,%ecx,1),%edi
573	movl	(%esp),%ecx
574	xorl	0x400(%ebp,%eax,1),%edi
575	xorl	0x500(%ebp,%edx,1),%edi
576
577	movl	96(%ecx),%eax
578	xorl	%ebx,%ebx
579	movl	100(%ecx),%edx
580	xorl	%edi,%eax
581	xorl	%ecx,%ecx
582	xorl	%edi,%edx
583	andl	$0xfcfcfcfc,%eax
584	andl	$0xcfcfcfcf,%edx
585	movb	%al,%bl
586	movb	%ah,%cl
587	rorl	$4,%edx
588	xorl	(%ebp,%ebx,1),%esi
589	movb	%dl,%bl
590	xorl	0x200(%ebp,%ecx,1),%esi
591	movb	%dh,%cl
592	shrl	$16,%eax
593	xorl	0x100(%ebp,%ebx,1),%esi
594	movb	%ah,%bl
595	shrl	$16,%edx
596	xorl	0x300(%ebp,%ecx,1),%esi
597	movb	%dh,%cl
598	andl	$0xff,%eax
599	andl	$0xff,%edx
600	xorl	0x600(%ebp,%ebx,1),%esi
601	xorl	0x700(%ebp,%ecx,1),%esi
602	movl	(%esp),%ecx
603	xorl	0x400(%ebp,%eax,1),%esi
604	xorl	0x500(%ebp,%edx,1),%esi
605
606	movl	88(%ecx),%eax
607	xorl	%ebx,%ebx
608	movl	92(%ecx),%edx
609	xorl	%esi,%eax
610	xorl	%ecx,%ecx
611	xorl	%esi,%edx
612	andl	$0xfcfcfcfc,%eax
613	andl	$0xcfcfcfcf,%edx
614	movb	%al,%bl
615	movb	%ah,%cl
616	rorl	$4,%edx
617	xorl	(%ebp,%ebx,1),%edi
618	movb	%dl,%bl
619	xorl	0x200(%ebp,%ecx,1),%edi
620	movb	%dh,%cl
621	shrl	$16,%eax
622	xorl	0x100(%ebp,%ebx,1),%edi
623	movb	%ah,%bl
624	shrl	$16,%edx
625	xorl	0x300(%ebp,%ecx,1),%edi
626	movb	%dh,%cl
627	andl	$0xff,%eax
628	andl	$0xff,%edx
629	xorl	0x600(%ebp,%ebx,1),%edi
630	xorl	0x700(%ebp,%ecx,1),%edi
631	movl	(%esp),%ecx
632	xorl	0x400(%ebp,%eax,1),%edi
633	xorl	0x500(%ebp,%edx,1),%edi
634
635	movl	80(%ecx),%eax
636	xorl	%ebx,%ebx
637	movl	84(%ecx),%edx
638	xorl	%edi,%eax
639	xorl	%ecx,%ecx
640	xorl	%edi,%edx
641	andl	$0xfcfcfcfc,%eax
642	andl	$0xcfcfcfcf,%edx
643	movb	%al,%bl
644	movb	%ah,%cl
645	rorl	$4,%edx
646	xorl	(%ebp,%ebx,1),%esi
647	movb	%dl,%bl
648	xorl	0x200(%ebp,%ecx,1),%esi
649	movb	%dh,%cl
650	shrl	$16,%eax
651	xorl	0x100(%ebp,%ebx,1),%esi
652	movb	%ah,%bl
653	shrl	$16,%edx
654	xorl	0x300(%ebp,%ecx,1),%esi
655	movb	%dh,%cl
656	andl	$0xff,%eax
657	andl	$0xff,%edx
658	xorl	0x600(%ebp,%ebx,1),%esi
659	xorl	0x700(%ebp,%ecx,1),%esi
660	movl	(%esp),%ecx
661	xorl	0x400(%ebp,%eax,1),%esi
662	xorl	0x500(%ebp,%edx,1),%esi
663
664	movl	72(%ecx),%eax
665	xorl	%ebx,%ebx
666	movl	76(%ecx),%edx
667	xorl	%esi,%eax
668	xorl	%ecx,%ecx
669	xorl	%esi,%edx
670	andl	$0xfcfcfcfc,%eax
671	andl	$0xcfcfcfcf,%edx
672	movb	%al,%bl
673	movb	%ah,%cl
674	rorl	$4,%edx
675	xorl	(%ebp,%ebx,1),%edi
676	movb	%dl,%bl
677	xorl	0x200(%ebp,%ecx,1),%edi
678	movb	%dh,%cl
679	shrl	$16,%eax
680	xorl	0x100(%ebp,%ebx,1),%edi
681	movb	%ah,%bl
682	shrl	$16,%edx
683	xorl	0x300(%ebp,%ecx,1),%edi
684	movb	%dh,%cl
685	andl	$0xff,%eax
686	andl	$0xff,%edx
687	xorl	0x600(%ebp,%ebx,1),%edi
688	xorl	0x700(%ebp,%ecx,1),%edi
689	movl	(%esp),%ecx
690	xorl	0x400(%ebp,%eax,1),%edi
691	xorl	0x500(%ebp,%edx,1),%edi
692
693	movl	64(%ecx),%eax
694	xorl	%ebx,%ebx
695	movl	68(%ecx),%edx
696	xorl	%edi,%eax
697	xorl	%ecx,%ecx
698	xorl	%edi,%edx
699	andl	$0xfcfcfcfc,%eax
700	andl	$0xcfcfcfcf,%edx
701	movb	%al,%bl
702	movb	%ah,%cl
703	rorl	$4,%edx
704	xorl	(%ebp,%ebx,1),%esi
705	movb	%dl,%bl
706	xorl	0x200(%ebp,%ecx,1),%esi
707	movb	%dh,%cl
708	shrl	$16,%eax
709	xorl	0x100(%ebp,%ebx,1),%esi
710	movb	%ah,%bl
711	shrl	$16,%edx
712	xorl	0x300(%ebp,%ecx,1),%esi
713	movb	%dh,%cl
714	andl	$0xff,%eax
715	andl	$0xff,%edx
716	xorl	0x600(%ebp,%ebx,1),%esi
717	xorl	0x700(%ebp,%ecx,1),%esi
718	movl	(%esp),%ecx
719	xorl	0x400(%ebp,%eax,1),%esi
720	xorl	0x500(%ebp,%edx,1),%esi
721
722	movl	56(%ecx),%eax
723	xorl	%ebx,%ebx
724	movl	60(%ecx),%edx
725	xorl	%esi,%eax
726	xorl	%ecx,%ecx
727	xorl	%esi,%edx
728	andl	$0xfcfcfcfc,%eax
729	andl	$0xcfcfcfcf,%edx
730	movb	%al,%bl
731	movb	%ah,%cl
732	rorl	$4,%edx
733	xorl	(%ebp,%ebx,1),%edi
734	movb	%dl,%bl
735	xorl	0x200(%ebp,%ecx,1),%edi
736	movb	%dh,%cl
737	shrl	$16,%eax
738	xorl	0x100(%ebp,%ebx,1),%edi
739	movb	%ah,%bl
740	shrl	$16,%edx
741	xorl	0x300(%ebp,%ecx,1),%edi
742	movb	%dh,%cl
743	andl	$0xff,%eax
744	andl	$0xff,%edx
745	xorl	0x600(%ebp,%ebx,1),%edi
746	xorl	0x700(%ebp,%ecx,1),%edi
747	movl	(%esp),%ecx
748	xorl	0x400(%ebp,%eax,1),%edi
749	xorl	0x500(%ebp,%edx,1),%edi
750
751	movl	48(%ecx),%eax
752	xorl	%ebx,%ebx
753	movl	52(%ecx),%edx
754	xorl	%edi,%eax
755	xorl	%ecx,%ecx
756	xorl	%edi,%edx
757	andl	$0xfcfcfcfc,%eax
758	andl	$0xcfcfcfcf,%edx
759	movb	%al,%bl
760	movb	%ah,%cl
761	rorl	$4,%edx
762	xorl	(%ebp,%ebx,1),%esi
763	movb	%dl,%bl
764	xorl	0x200(%ebp,%ecx,1),%esi
765	movb	%dh,%cl
766	shrl	$16,%eax
767	xorl	0x100(%ebp,%ebx,1),%esi
768	movb	%ah,%bl
769	shrl	$16,%edx
770	xorl	0x300(%ebp,%ecx,1),%esi
771	movb	%dh,%cl
772	andl	$0xff,%eax
773	andl	$0xff,%edx
774	xorl	0x600(%ebp,%ebx,1),%esi
775	xorl	0x700(%ebp,%ecx,1),%esi
776	movl	(%esp),%ecx
777	xorl	0x400(%ebp,%eax,1),%esi
778	xorl	0x500(%ebp,%edx,1),%esi
779
780	movl	40(%ecx),%eax
781	xorl	%ebx,%ebx
782	movl	44(%ecx),%edx
783	xorl	%esi,%eax
784	xorl	%ecx,%ecx
785	xorl	%esi,%edx
786	andl	$0xfcfcfcfc,%eax
787	andl	$0xcfcfcfcf,%edx
788	movb	%al,%bl
789	movb	%ah,%cl
790	rorl	$4,%edx
791	xorl	(%ebp,%ebx,1),%edi
792	movb	%dl,%bl
793	xorl	0x200(%ebp,%ecx,1),%edi
794	movb	%dh,%cl
795	shrl	$16,%eax
796	xorl	0x100(%ebp,%ebx,1),%edi
797	movb	%ah,%bl
798	shrl	$16,%edx
799	xorl	0x300(%ebp,%ecx,1),%edi
800	movb	%dh,%cl
801	andl	$0xff,%eax
802	andl	$0xff,%edx
803	xorl	0x600(%ebp,%ebx,1),%edi
804	xorl	0x700(%ebp,%ecx,1),%edi
805	movl	(%esp),%ecx
806	xorl	0x400(%ebp,%eax,1),%edi
807	xorl	0x500(%ebp,%edx,1),%edi
808
809	movl	32(%ecx),%eax
810	xorl	%ebx,%ebx
811	movl	36(%ecx),%edx
812	xorl	%edi,%eax
813	xorl	%ecx,%ecx
814	xorl	%edi,%edx
815	andl	$0xfcfcfcfc,%eax
816	andl	$0xcfcfcfcf,%edx
817	movb	%al,%bl
818	movb	%ah,%cl
819	rorl	$4,%edx
820	xorl	(%ebp,%ebx,1),%esi
821	movb	%dl,%bl
822	xorl	0x200(%ebp,%ecx,1),%esi
823	movb	%dh,%cl
824	shrl	$16,%eax
825	xorl	0x100(%ebp,%ebx,1),%esi
826	movb	%ah,%bl
827	shrl	$16,%edx
828	xorl	0x300(%ebp,%ecx,1),%esi
829	movb	%dh,%cl
830	andl	$0xff,%eax
831	andl	$0xff,%edx
832	xorl	0x600(%ebp,%ebx,1),%esi
833	xorl	0x700(%ebp,%ecx,1),%esi
834	movl	(%esp),%ecx
835	xorl	0x400(%ebp,%eax,1),%esi
836	xorl	0x500(%ebp,%edx,1),%esi
837
838	movl	24(%ecx),%eax
839	xorl	%ebx,%ebx
840	movl	28(%ecx),%edx
841	xorl	%esi,%eax
842	xorl	%ecx,%ecx
843	xorl	%esi,%edx
844	andl	$0xfcfcfcfc,%eax
845	andl	$0xcfcfcfcf,%edx
846	movb	%al,%bl
847	movb	%ah,%cl
848	rorl	$4,%edx
849	xorl	(%ebp,%ebx,1),%edi
850	movb	%dl,%bl
851	xorl	0x200(%ebp,%ecx,1),%edi
852	movb	%dh,%cl
853	shrl	$16,%eax
854	xorl	0x100(%ebp,%ebx,1),%edi
855	movb	%ah,%bl
856	shrl	$16,%edx
857	xorl	0x300(%ebp,%ecx,1),%edi
858	movb	%dh,%cl
859	andl	$0xff,%eax
860	andl	$0xff,%edx
861	xorl	0x600(%ebp,%ebx,1),%edi
862	xorl	0x700(%ebp,%ecx,1),%edi
863	movl	(%esp),%ecx
864	xorl	0x400(%ebp,%eax,1),%edi
865	xorl	0x500(%ebp,%edx,1),%edi
866
867	movl	16(%ecx),%eax
868	xorl	%ebx,%ebx
869	movl	20(%ecx),%edx
870	xorl	%edi,%eax
871	xorl	%ecx,%ecx
872	xorl	%edi,%edx
873	andl	$0xfcfcfcfc,%eax
874	andl	$0xcfcfcfcf,%edx
875	movb	%al,%bl
876	movb	%ah,%cl
877	rorl	$4,%edx
878	xorl	(%ebp,%ebx,1),%esi
879	movb	%dl,%bl
880	xorl	0x200(%ebp,%ecx,1),%esi
881	movb	%dh,%cl
882	shrl	$16,%eax
883	xorl	0x100(%ebp,%ebx,1),%esi
884	movb	%ah,%bl
885	shrl	$16,%edx
886	xorl	0x300(%ebp,%ecx,1),%esi
887	movb	%dh,%cl
888	andl	$0xff,%eax
889	andl	$0xff,%edx
890	xorl	0x600(%ebp,%ebx,1),%esi
891	xorl	0x700(%ebp,%ecx,1),%esi
892	movl	(%esp),%ecx
893	xorl	0x400(%ebp,%eax,1),%esi
894	xorl	0x500(%ebp,%edx,1),%esi
895
896	movl	8(%ecx),%eax
897	xorl	%ebx,%ebx
898	movl	12(%ecx),%edx
899	xorl	%esi,%eax
900	xorl	%ecx,%ecx
901	xorl	%esi,%edx
902	andl	$0xfcfcfcfc,%eax
903	andl	$0xcfcfcfcf,%edx
904	movb	%al,%bl
905	movb	%ah,%cl
906	rorl	$4,%edx
907	xorl	(%ebp,%ebx,1),%edi
908	movb	%dl,%bl
909	xorl	0x200(%ebp,%ecx,1),%edi
910	movb	%dh,%cl
911	shrl	$16,%eax
912	xorl	0x100(%ebp,%ebx,1),%edi
913	movb	%ah,%bl
914	shrl	$16,%edx
915	xorl	0x300(%ebp,%ecx,1),%edi
916	movb	%dh,%cl
917	andl	$0xff,%eax
918	andl	$0xff,%edx
919	xorl	0x600(%ebp,%ebx,1),%edi
920	xorl	0x700(%ebp,%ecx,1),%edi
921	movl	(%esp),%ecx
922	xorl	0x400(%ebp,%eax,1),%edi
923	xorl	0x500(%ebp,%edx,1),%edi
924
925	movl	(%ecx),%eax
926	xorl	%ebx,%ebx
927	movl	4(%ecx),%edx
928	xorl	%edi,%eax
929	xorl	%ecx,%ecx
930	xorl	%edi,%edx
931	andl	$0xfcfcfcfc,%eax
932	andl	$0xcfcfcfcf,%edx
933	movb	%al,%bl
934	movb	%ah,%cl
935	rorl	$4,%edx
936	xorl	(%ebp,%ebx,1),%esi
937	movb	%dl,%bl
938	xorl	0x200(%ebp,%ecx,1),%esi
939	movb	%dh,%cl
940	shrl	$16,%eax
941	xorl	0x100(%ebp,%ebx,1),%esi
942	movb	%ah,%bl
943	shrl	$16,%edx
944	xorl	0x300(%ebp,%ecx,1),%esi
945	movb	%dh,%cl
946	andl	$0xff,%eax
947	andl	$0xff,%edx
948	xorl	0x600(%ebp,%ebx,1),%esi
949	xorl	0x700(%ebp,%ecx,1),%esi
950	movl	(%esp),%ecx
951	xorl	0x400(%ebp,%eax,1),%esi
952	xorl	0x500(%ebp,%edx,1),%esi
953	addl	$4,%esp
954	ret
955.size	_x86_DES_decrypt,.-_x86_DES_decrypt
956.globl	DES_encrypt1
957.type	DES_encrypt1,@function
958.align	16
959DES_encrypt1:
960.L_DES_encrypt1_begin:
961	#ifdef __CET__
962
963.byte	243,15,30,251
964	#endif
965
966	pushl	%esi
967	pushl	%edi
968
969
970	movl	12(%esp),%esi
971	xorl	%ecx,%ecx
972	pushl	%ebx
973	pushl	%ebp
974	movl	(%esi),%eax
975	movl	28(%esp),%ebx
976	movl	4(%esi),%edi
977
978
979	roll	$4,%eax
980	movl	%eax,%esi
981	xorl	%edi,%eax
982	andl	$0xf0f0f0f0,%eax
983	xorl	%eax,%esi
984	xorl	%eax,%edi
985
986	roll	$20,%edi
987	movl	%edi,%eax
988	xorl	%esi,%edi
989	andl	$0xfff0000f,%edi
990	xorl	%edi,%eax
991	xorl	%edi,%esi
992
993	roll	$14,%eax
994	movl	%eax,%edi
995	xorl	%esi,%eax
996	andl	$0x33333333,%eax
997	xorl	%eax,%edi
998	xorl	%eax,%esi
999
1000	roll	$22,%esi
1001	movl	%esi,%eax
1002	xorl	%edi,%esi
1003	andl	$0x03fc03fc,%esi
1004	xorl	%esi,%eax
1005	xorl	%esi,%edi
1006
1007	roll	$9,%eax
1008	movl	%eax,%esi
1009	xorl	%edi,%eax
1010	andl	$0xaaaaaaaa,%eax
1011	xorl	%eax,%esi
1012	xorl	%eax,%edi
1013
1014	roll	$1,%edi
1015	call	.L000pic_point
1016.L000pic_point:
1017	popl	%ebp
1018	leal	.Ldes_sptrans-.L000pic_point(%ebp),%ebp
1019	movl	24(%esp),%ecx
1020	cmpl	$0,%ebx
1021	je	.L001decrypt
1022	call	_x86_DES_encrypt
1023	jmp	.L002done
1024.L001decrypt:
1025	call	_x86_DES_decrypt
1026.L002done:
1027
1028
1029	movl	20(%esp),%edx
1030	rorl	$1,%esi
1031	movl	%edi,%eax
1032	xorl	%esi,%edi
1033	andl	$0xaaaaaaaa,%edi
1034	xorl	%edi,%eax
1035	xorl	%edi,%esi
1036
1037	roll	$23,%eax
1038	movl	%eax,%edi
1039	xorl	%esi,%eax
1040	andl	$0x03fc03fc,%eax
1041	xorl	%eax,%edi
1042	xorl	%eax,%esi
1043
1044	roll	$10,%edi
1045	movl	%edi,%eax
1046	xorl	%esi,%edi
1047	andl	$0x33333333,%edi
1048	xorl	%edi,%eax
1049	xorl	%edi,%esi
1050
1051	roll	$18,%esi
1052	movl	%esi,%edi
1053	xorl	%eax,%esi
1054	andl	$0xfff0000f,%esi
1055	xorl	%esi,%edi
1056	xorl	%esi,%eax
1057
1058	roll	$12,%edi
1059	movl	%edi,%esi
1060	xorl	%eax,%edi
1061	andl	$0xf0f0f0f0,%edi
1062	xorl	%edi,%esi
1063	xorl	%edi,%eax
1064
1065	rorl	$4,%eax
1066	movl	%eax,(%edx)
1067	movl	%esi,4(%edx)
1068	popl	%ebp
1069	popl	%ebx
1070	popl	%edi
1071	popl	%esi
1072	ret
1073.size	DES_encrypt1,.-.L_DES_encrypt1_begin
1074.globl	DES_encrypt2
1075.type	DES_encrypt2,@function
1076.align	16
1077DES_encrypt2:
1078.L_DES_encrypt2_begin:
1079	#ifdef __CET__
1080
1081.byte	243,15,30,251
1082	#endif
1083
1084	pushl	%esi
1085	pushl	%edi
1086
1087
1088	movl	12(%esp),%eax
1089	xorl	%ecx,%ecx
1090	pushl	%ebx
1091	pushl	%ebp
1092	movl	(%eax),%esi
1093	movl	28(%esp),%ebx
1094	roll	$3,%esi
1095	movl	4(%eax),%edi
1096	roll	$3,%edi
1097	call	.L003pic_point
1098.L003pic_point:
1099	popl	%ebp
1100	leal	.Ldes_sptrans-.L003pic_point(%ebp),%ebp
1101	movl	24(%esp),%ecx
1102	cmpl	$0,%ebx
1103	je	.L004decrypt
1104	call	_x86_DES_encrypt
1105	jmp	.L005done
1106.L004decrypt:
1107	call	_x86_DES_decrypt
1108.L005done:
1109
1110
1111	rorl	$3,%edi
1112	movl	20(%esp),%eax
1113	rorl	$3,%esi
1114	movl	%edi,(%eax)
1115	movl	%esi,4(%eax)
1116	popl	%ebp
1117	popl	%ebx
1118	popl	%edi
1119	popl	%esi
1120	ret
1121.size	DES_encrypt2,.-.L_DES_encrypt2_begin
1122.globl	DES_encrypt3
1123.type	DES_encrypt3,@function
1124.align	16
1125DES_encrypt3:
1126.L_DES_encrypt3_begin:
1127	#ifdef __CET__
1128
1129.byte	243,15,30,251
1130	#endif
1131
1132	pushl	%ebx
1133	movl	8(%esp),%ebx
1134	pushl	%ebp
1135	pushl	%esi
1136	pushl	%edi
1137
1138
1139	movl	(%ebx),%edi
1140	movl	4(%ebx),%esi
1141	subl	$12,%esp
1142
1143
1144	roll	$4,%edi
1145	movl	%edi,%edx
1146	xorl	%esi,%edi
1147	andl	$0xf0f0f0f0,%edi
1148	xorl	%edi,%edx
1149	xorl	%edi,%esi
1150
1151	roll	$20,%esi
1152	movl	%esi,%edi
1153	xorl	%edx,%esi
1154	andl	$0xfff0000f,%esi
1155	xorl	%esi,%edi
1156	xorl	%esi,%edx
1157
1158	roll	$14,%edi
1159	movl	%edi,%esi
1160	xorl	%edx,%edi
1161	andl	$0x33333333,%edi
1162	xorl	%edi,%esi
1163	xorl	%edi,%edx
1164
1165	roll	$22,%edx
1166	movl	%edx,%edi
1167	xorl	%esi,%edx
1168	andl	$0x03fc03fc,%edx
1169	xorl	%edx,%edi
1170	xorl	%edx,%esi
1171
1172	roll	$9,%edi
1173	movl	%edi,%edx
1174	xorl	%esi,%edi
1175	andl	$0xaaaaaaaa,%edi
1176	xorl	%edi,%edx
1177	xorl	%edi,%esi
1178
1179	rorl	$3,%edx
1180	rorl	$2,%esi
1181	movl	%esi,4(%ebx)
1182	movl	36(%esp),%eax
1183	movl	%edx,(%ebx)
1184	movl	40(%esp),%edi
1185	movl	44(%esp),%esi
1186	movl	$1,8(%esp)
1187	movl	%eax,4(%esp)
1188	movl	%ebx,(%esp)
1189	call	.L_DES_encrypt2_begin
1190	movl	$0,8(%esp)
1191	movl	%edi,4(%esp)
1192	movl	%ebx,(%esp)
1193	call	.L_DES_encrypt2_begin
1194	movl	$1,8(%esp)
1195	movl	%esi,4(%esp)
1196	movl	%ebx,(%esp)
1197	call	.L_DES_encrypt2_begin
1198	addl	$12,%esp
1199	movl	(%ebx),%edi
1200	movl	4(%ebx),%esi
1201
1202
1203	roll	$2,%esi
1204	roll	$3,%edi
1205	movl	%edi,%eax
1206	xorl	%esi,%edi
1207	andl	$0xaaaaaaaa,%edi
1208	xorl	%edi,%eax
1209	xorl	%edi,%esi
1210
1211	roll	$23,%eax
1212	movl	%eax,%edi
1213	xorl	%esi,%eax
1214	andl	$0x03fc03fc,%eax
1215	xorl	%eax,%edi
1216	xorl	%eax,%esi
1217
1218	roll	$10,%edi
1219	movl	%edi,%eax
1220	xorl	%esi,%edi
1221	andl	$0x33333333,%edi
1222	xorl	%edi,%eax
1223	xorl	%edi,%esi
1224
1225	roll	$18,%esi
1226	movl	%esi,%edi
1227	xorl	%eax,%esi
1228	andl	$0xfff0000f,%esi
1229	xorl	%esi,%edi
1230	xorl	%esi,%eax
1231
1232	roll	$12,%edi
1233	movl	%edi,%esi
1234	xorl	%eax,%edi
1235	andl	$0xf0f0f0f0,%edi
1236	xorl	%edi,%esi
1237	xorl	%edi,%eax
1238
1239	rorl	$4,%eax
1240	movl	%eax,(%ebx)
1241	movl	%esi,4(%ebx)
1242	popl	%edi
1243	popl	%esi
1244	popl	%ebp
1245	popl	%ebx
1246	ret
1247.size	DES_encrypt3,.-.L_DES_encrypt3_begin
1248.globl	DES_decrypt3
1249.type	DES_decrypt3,@function
1250.align	16
1251DES_decrypt3:
1252.L_DES_decrypt3_begin:
1253	#ifdef __CET__
1254
1255.byte	243,15,30,251
1256	#endif
1257
1258	pushl	%ebx
1259	movl	8(%esp),%ebx
1260	pushl	%ebp
1261	pushl	%esi
1262	pushl	%edi
1263
1264
1265	movl	(%ebx),%edi
1266	movl	4(%ebx),%esi
1267	subl	$12,%esp
1268
1269
1270	roll	$4,%edi
1271	movl	%edi,%edx
1272	xorl	%esi,%edi
1273	andl	$0xf0f0f0f0,%edi
1274	xorl	%edi,%edx
1275	xorl	%edi,%esi
1276
1277	roll	$20,%esi
1278	movl	%esi,%edi
1279	xorl	%edx,%esi
1280	andl	$0xfff0000f,%esi
1281	xorl	%esi,%edi
1282	xorl	%esi,%edx
1283
1284	roll	$14,%edi
1285	movl	%edi,%esi
1286	xorl	%edx,%edi
1287	andl	$0x33333333,%edi
1288	xorl	%edi,%esi
1289	xorl	%edi,%edx
1290
1291	roll	$22,%edx
1292	movl	%edx,%edi
1293	xorl	%esi,%edx
1294	andl	$0x03fc03fc,%edx
1295	xorl	%edx,%edi
1296	xorl	%edx,%esi
1297
1298	roll	$9,%edi
1299	movl	%edi,%edx
1300	xorl	%esi,%edi
1301	andl	$0xaaaaaaaa,%edi
1302	xorl	%edi,%edx
1303	xorl	%edi,%esi
1304
1305	rorl	$3,%edx
1306	rorl	$2,%esi
1307	movl	%esi,4(%ebx)
1308	movl	36(%esp),%esi
1309	movl	%edx,(%ebx)
1310	movl	40(%esp),%edi
1311	movl	44(%esp),%eax
1312	movl	$0,8(%esp)
1313	movl	%eax,4(%esp)
1314	movl	%ebx,(%esp)
1315	call	.L_DES_encrypt2_begin
1316	movl	$1,8(%esp)
1317	movl	%edi,4(%esp)
1318	movl	%ebx,(%esp)
1319	call	.L_DES_encrypt2_begin
1320	movl	$0,8(%esp)
1321	movl	%esi,4(%esp)
1322	movl	%ebx,(%esp)
1323	call	.L_DES_encrypt2_begin
1324	addl	$12,%esp
1325	movl	(%ebx),%edi
1326	movl	4(%ebx),%esi
1327
1328
1329	roll	$2,%esi
1330	roll	$3,%edi
1331	movl	%edi,%eax
1332	xorl	%esi,%edi
1333	andl	$0xaaaaaaaa,%edi
1334	xorl	%edi,%eax
1335	xorl	%edi,%esi
1336
1337	roll	$23,%eax
1338	movl	%eax,%edi
1339	xorl	%esi,%eax
1340	andl	$0x03fc03fc,%eax
1341	xorl	%eax,%edi
1342	xorl	%eax,%esi
1343
1344	roll	$10,%edi
1345	movl	%edi,%eax
1346	xorl	%esi,%edi
1347	andl	$0x33333333,%edi
1348	xorl	%edi,%eax
1349	xorl	%edi,%esi
1350
1351	roll	$18,%esi
1352	movl	%esi,%edi
1353	xorl	%eax,%esi
1354	andl	$0xfff0000f,%esi
1355	xorl	%esi,%edi
1356	xorl	%esi,%eax
1357
1358	roll	$12,%edi
1359	movl	%edi,%esi
1360	xorl	%eax,%edi
1361	andl	$0xf0f0f0f0,%edi
1362	xorl	%edi,%esi
1363	xorl	%edi,%eax
1364
1365	rorl	$4,%eax
1366	movl	%eax,(%ebx)
1367	movl	%esi,4(%ebx)
1368	popl	%edi
1369	popl	%esi
1370	popl	%ebp
1371	popl	%ebx
1372	ret
1373.size	DES_decrypt3,.-.L_DES_decrypt3_begin
1374.globl	DES_ncbc_encrypt
1375.type	DES_ncbc_encrypt,@function
1376.align	16
1377DES_ncbc_encrypt:
1378.L_DES_ncbc_encrypt_begin:
1379	#ifdef __CET__
1380
1381.byte	243,15,30,251
1382	#endif
1383
1384
1385	pushl	%ebp
1386	pushl	%ebx
1387	pushl	%esi
1388	pushl	%edi
1389	movl	28(%esp),%ebp
1390
1391	movl	36(%esp),%ebx
1392	movl	(%ebx),%esi
1393	movl	4(%ebx),%edi
1394	pushl	%edi
1395	pushl	%esi
1396	pushl	%edi
1397	pushl	%esi
1398	movl	%esp,%ebx
1399	movl	36(%esp),%esi
1400	movl	40(%esp),%edi
1401
1402	movl	56(%esp),%ecx
1403
1404	pushl	%ecx
1405
1406	movl	52(%esp),%eax
1407	pushl	%eax
1408	pushl	%ebx
1409	cmpl	$0,%ecx
1410	jz	.L006decrypt
1411	andl	$4294967288,%ebp
1412	movl	12(%esp),%eax
1413	movl	16(%esp),%ebx
1414	jz	.L007encrypt_finish
1415.L008encrypt_loop:
1416	movl	(%esi),%ecx
1417	movl	4(%esi),%edx
1418	xorl	%ecx,%eax
1419	xorl	%edx,%ebx
1420	movl	%eax,12(%esp)
1421	movl	%ebx,16(%esp)
1422	call	.L_DES_encrypt1_begin
1423	movl	12(%esp),%eax
1424	movl	16(%esp),%ebx
1425	movl	%eax,(%edi)
1426	movl	%ebx,4(%edi)
1427	addl	$8,%esi
1428	addl	$8,%edi
1429	subl	$8,%ebp
1430	jnz	.L008encrypt_loop
1431.L007encrypt_finish:
1432	movl	56(%esp),%ebp
1433	andl	$7,%ebp
1434	jz	.L009finish
1435	call	.L010PIC_point
1436.L010PIC_point:
1437	popl	%edx
1438	leal	.L011cbc_enc_jmp_table-.L010PIC_point(%edx),%ecx
1439	movl	(%ecx,%ebp,4),%ebp
1440	addl	%edx,%ebp
1441	xorl	%ecx,%ecx
1442	xorl	%edx,%edx
1443	jmp	*%ebp
1444.L012ej7:
1445	#ifdef __CET__
1446
1447.byte	243,15,30,251
1448	#endif
1449
1450	movb	6(%esi),%dh
1451	shll	$8,%edx
1452.L013ej6:
1453	#ifdef __CET__
1454
1455.byte	243,15,30,251
1456	#endif
1457
1458	movb	5(%esi),%dh
1459.L014ej5:
1460	#ifdef __CET__
1461
1462.byte	243,15,30,251
1463	#endif
1464
1465	movb	4(%esi),%dl
1466.L015ej4:
1467	#ifdef __CET__
1468
1469.byte	243,15,30,251
1470	#endif
1471
1472	movl	(%esi),%ecx
1473	jmp	.L016ejend
1474.L017ej3:
1475	#ifdef __CET__
1476
1477.byte	243,15,30,251
1478	#endif
1479
1480	movb	2(%esi),%ch
1481	shll	$8,%ecx
1482.L018ej2:
1483	#ifdef __CET__
1484
1485.byte	243,15,30,251
1486	#endif
1487
1488	movb	1(%esi),%ch
1489.L019ej1:
1490	#ifdef __CET__
1491
1492.byte	243,15,30,251
1493	#endif
1494
1495	movb	(%esi),%cl
1496.L016ejend:
1497	xorl	%ecx,%eax
1498	xorl	%edx,%ebx
1499	movl	%eax,12(%esp)
1500	movl	%ebx,16(%esp)
1501	call	.L_DES_encrypt1_begin
1502	movl	12(%esp),%eax
1503	movl	16(%esp),%ebx
1504	movl	%eax,(%edi)
1505	movl	%ebx,4(%edi)
1506	jmp	.L009finish
1507.L006decrypt:
1508	andl	$4294967288,%ebp
1509	movl	20(%esp),%eax
1510	movl	24(%esp),%ebx
1511	jz	.L020decrypt_finish
1512.L021decrypt_loop:
1513	movl	(%esi),%eax
1514	movl	4(%esi),%ebx
1515	movl	%eax,12(%esp)
1516	movl	%ebx,16(%esp)
1517	call	.L_DES_encrypt1_begin
1518	movl	12(%esp),%eax
1519	movl	16(%esp),%ebx
1520	movl	20(%esp),%ecx
1521	movl	24(%esp),%edx
1522	xorl	%eax,%ecx
1523	xorl	%ebx,%edx
1524	movl	(%esi),%eax
1525	movl	4(%esi),%ebx
1526	movl	%ecx,(%edi)
1527	movl	%edx,4(%edi)
1528	movl	%eax,20(%esp)
1529	movl	%ebx,24(%esp)
1530	addl	$8,%esi
1531	addl	$8,%edi
1532	subl	$8,%ebp
1533	jnz	.L021decrypt_loop
1534.L020decrypt_finish:
1535	movl	56(%esp),%ebp
1536	andl	$7,%ebp
1537	jz	.L009finish
1538	movl	(%esi),%eax
1539	movl	4(%esi),%ebx
1540	movl	%eax,12(%esp)
1541	movl	%ebx,16(%esp)
1542	call	.L_DES_encrypt1_begin
1543	movl	12(%esp),%eax
1544	movl	16(%esp),%ebx
1545	movl	20(%esp),%ecx
1546	movl	24(%esp),%edx
1547	xorl	%eax,%ecx
1548	xorl	%ebx,%edx
1549	movl	(%esi),%eax
1550	movl	4(%esi),%ebx
1551.L022dj7:
1552	rorl	$16,%edx
1553	movb	%dl,6(%edi)
1554	shrl	$16,%edx
1555.L023dj6:
1556	movb	%dh,5(%edi)
1557.L024dj5:
1558	movb	%dl,4(%edi)
1559.L025dj4:
1560	movl	%ecx,(%edi)
1561	jmp	.L026djend
1562.L027dj3:
1563	rorl	$16,%ecx
1564	movb	%cl,2(%edi)
1565	shll	$16,%ecx
1566.L028dj2:
1567	movb	%ch,1(%esi)
1568.L029dj1:
1569	movb	%cl,(%esi)
1570.L026djend:
1571	jmp	.L009finish
1572.L009finish:
1573	movl	64(%esp),%ecx
1574	addl	$28,%esp
1575	movl	%eax,(%ecx)
1576	movl	%ebx,4(%ecx)
1577	popl	%edi
1578	popl	%esi
1579	popl	%ebx
1580	popl	%ebp
1581	ret
1582.align	64
1583.L011cbc_enc_jmp_table:
1584.long	0
1585.long	.L019ej1-.L010PIC_point
1586.long	.L018ej2-.L010PIC_point
1587.long	.L017ej3-.L010PIC_point
1588.long	.L015ej4-.L010PIC_point
1589.long	.L014ej5-.L010PIC_point
1590.long	.L013ej6-.L010PIC_point
1591.long	.L012ej7-.L010PIC_point
1592.align	64
1593.size	DES_ncbc_encrypt,.-.L_DES_ncbc_encrypt_begin
1594.globl	DES_ede3_cbc_encrypt
1595.type	DES_ede3_cbc_encrypt,@function
1596.align	16
1597DES_ede3_cbc_encrypt:
1598.L_DES_ede3_cbc_encrypt_begin:
1599	#ifdef __CET__
1600
1601.byte	243,15,30,251
1602	#endif
1603
1604
1605	pushl	%ebp
1606	pushl	%ebx
1607	pushl	%esi
1608	pushl	%edi
1609	movl	28(%esp),%ebp
1610
1611	movl	44(%esp),%ebx
1612	movl	(%ebx),%esi
1613	movl	4(%ebx),%edi
1614	pushl	%edi
1615	pushl	%esi
1616	pushl	%edi
1617	pushl	%esi
1618	movl	%esp,%ebx
1619	movl	36(%esp),%esi
1620	movl	40(%esp),%edi
1621
1622	movl	64(%esp),%ecx
1623
1624	movl	56(%esp),%eax
1625	pushl	%eax
1626
1627	movl	56(%esp),%eax
1628	pushl	%eax
1629
1630	movl	56(%esp),%eax
1631	pushl	%eax
1632	pushl	%ebx
1633	cmpl	$0,%ecx
1634	jz	.L030decrypt
1635	andl	$4294967288,%ebp
1636	movl	16(%esp),%eax
1637	movl	20(%esp),%ebx
1638	jz	.L031encrypt_finish
1639.L032encrypt_loop:
1640	movl	(%esi),%ecx
1641	movl	4(%esi),%edx
1642	xorl	%ecx,%eax
1643	xorl	%edx,%ebx
1644	movl	%eax,16(%esp)
1645	movl	%ebx,20(%esp)
1646	call	.L_DES_encrypt3_begin
1647	movl	16(%esp),%eax
1648	movl	20(%esp),%ebx
1649	movl	%eax,(%edi)
1650	movl	%ebx,4(%edi)
1651	addl	$8,%esi
1652	addl	$8,%edi
1653	subl	$8,%ebp
1654	jnz	.L032encrypt_loop
1655.L031encrypt_finish:
1656	movl	60(%esp),%ebp
1657	andl	$7,%ebp
1658	jz	.L033finish
1659	call	.L034PIC_point
1660.L034PIC_point:
1661	popl	%edx
1662	leal	.L035cbc_enc_jmp_table-.L034PIC_point(%edx),%ecx
1663	movl	(%ecx,%ebp,4),%ebp
1664	addl	%edx,%ebp
1665	xorl	%ecx,%ecx
1666	xorl	%edx,%edx
1667	jmp	*%ebp
1668.L036ej7:
1669	#ifdef __CET__
1670
1671.byte	243,15,30,251
1672	#endif
1673
1674	movb	6(%esi),%dh
1675	shll	$8,%edx
1676.L037ej6:
1677	#ifdef __CET__
1678
1679.byte	243,15,30,251
1680	#endif
1681
1682	movb	5(%esi),%dh
1683.L038ej5:
1684	#ifdef __CET__
1685
1686.byte	243,15,30,251
1687	#endif
1688
1689	movb	4(%esi),%dl
1690.L039ej4:
1691	#ifdef __CET__
1692
1693.byte	243,15,30,251
1694	#endif
1695
1696	movl	(%esi),%ecx
1697	jmp	.L040ejend
1698.L041ej3:
1699	#ifdef __CET__
1700
1701.byte	243,15,30,251
1702	#endif
1703
1704	movb	2(%esi),%ch
1705	shll	$8,%ecx
1706.L042ej2:
1707	#ifdef __CET__
1708
1709.byte	243,15,30,251
1710	#endif
1711
1712	movb	1(%esi),%ch
1713.L043ej1:
1714	#ifdef __CET__
1715
1716.byte	243,15,30,251
1717	#endif
1718
1719	movb	(%esi),%cl
1720.L040ejend:
1721	xorl	%ecx,%eax
1722	xorl	%edx,%ebx
1723	movl	%eax,16(%esp)
1724	movl	%ebx,20(%esp)
1725	call	.L_DES_encrypt3_begin
1726	movl	16(%esp),%eax
1727	movl	20(%esp),%ebx
1728	movl	%eax,(%edi)
1729	movl	%ebx,4(%edi)
1730	jmp	.L033finish
1731.L030decrypt:
1732	andl	$4294967288,%ebp
1733	movl	24(%esp),%eax
1734	movl	28(%esp),%ebx
1735	jz	.L044decrypt_finish
1736.L045decrypt_loop:
1737	movl	(%esi),%eax
1738	movl	4(%esi),%ebx
1739	movl	%eax,16(%esp)
1740	movl	%ebx,20(%esp)
1741	call	.L_DES_decrypt3_begin
1742	movl	16(%esp),%eax
1743	movl	20(%esp),%ebx
1744	movl	24(%esp),%ecx
1745	movl	28(%esp),%edx
1746	xorl	%eax,%ecx
1747	xorl	%ebx,%edx
1748	movl	(%esi),%eax
1749	movl	4(%esi),%ebx
1750	movl	%ecx,(%edi)
1751	movl	%edx,4(%edi)
1752	movl	%eax,24(%esp)
1753	movl	%ebx,28(%esp)
1754	addl	$8,%esi
1755	addl	$8,%edi
1756	subl	$8,%ebp
1757	jnz	.L045decrypt_loop
1758.L044decrypt_finish:
1759	movl	60(%esp),%ebp
1760	andl	$7,%ebp
1761	jz	.L033finish
1762	movl	(%esi),%eax
1763	movl	4(%esi),%ebx
1764	movl	%eax,16(%esp)
1765	movl	%ebx,20(%esp)
1766	call	.L_DES_decrypt3_begin
1767	movl	16(%esp),%eax
1768	movl	20(%esp),%ebx
1769	movl	24(%esp),%ecx
1770	movl	28(%esp),%edx
1771	xorl	%eax,%ecx
1772	xorl	%ebx,%edx
1773	movl	(%esi),%eax
1774	movl	4(%esi),%ebx
1775.L046dj7:
1776	rorl	$16,%edx
1777	movb	%dl,6(%edi)
1778	shrl	$16,%edx
1779.L047dj6:
1780	movb	%dh,5(%edi)
1781.L048dj5:
1782	movb	%dl,4(%edi)
1783.L049dj4:
1784	movl	%ecx,(%edi)
1785	jmp	.L050djend
1786.L051dj3:
1787	rorl	$16,%ecx
1788	movb	%cl,2(%edi)
1789	shll	$16,%ecx
1790.L052dj2:
1791	movb	%ch,1(%esi)
1792.L053dj1:
1793	movb	%cl,(%esi)
1794.L050djend:
1795	jmp	.L033finish
1796.L033finish:
1797	movl	76(%esp),%ecx
1798	addl	$32,%esp
1799	movl	%eax,(%ecx)
1800	movl	%ebx,4(%ecx)
1801	popl	%edi
1802	popl	%esi
1803	popl	%ebx
1804	popl	%ebp
1805	ret
1806.align	64
1807.L035cbc_enc_jmp_table:
1808.long	0
1809.long	.L043ej1-.L034PIC_point
1810.long	.L042ej2-.L034PIC_point
1811.long	.L041ej3-.L034PIC_point
1812.long	.L039ej4-.L034PIC_point
1813.long	.L038ej5-.L034PIC_point
1814.long	.L037ej6-.L034PIC_point
1815.long	.L036ej7-.L034PIC_point
1816.align	64
1817.size	DES_ede3_cbc_encrypt,.-.L_DES_ede3_cbc_encrypt_begin
1818.align	64
1819DES_SPtrans:
1820.Ldes_sptrans:
1821.long	34080768,524288,33554434,34080770
1822.long	33554432,526338,524290,33554434
1823.long	526338,34080768,34078720,2050
1824.long	33556482,33554432,0,524290
1825.long	524288,2,33556480,526336
1826.long	34080770,34078720,2050,33556480
1827.long	2,2048,526336,34078722
1828.long	2048,33556482,34078722,0
1829.long	0,34080770,33556480,524290
1830.long	34080768,524288,2050,33556480
1831.long	34078722,2048,526336,33554434
1832.long	526338,2,33554434,34078720
1833.long	34080770,526336,34078720,33556482
1834.long	33554432,2050,524290,0
1835.long	524288,33554432,33556482,34080768
1836.long	2,34078722,2048,526338
1837.long	1074823184,0,1081344,1074790400
1838.long	1073741840,32784,1073774592,1081344
1839.long	32768,1074790416,16,1073774592
1840.long	1048592,1074823168,1074790400,16
1841.long	1048576,1073774608,1074790416,32768
1842.long	1081360,1073741824,0,1048592
1843.long	1073774608,1081360,1074823168,1073741840
1844.long	1073741824,1048576,32784,1074823184
1845.long	1048592,1074823168,1073774592,1081360
1846.long	1074823184,1048592,1073741840,0
1847.long	1073741824,32784,1048576,1074790416
1848.long	32768,1073741824,1081360,1073774608
1849.long	1074823168,32768,0,1073741840
1850.long	16,1074823184,1081344,1074790400
1851.long	1074790416,1048576,32784,1073774592
1852.long	1073774608,16,1074790400,1081344
1853.long	67108865,67371264,256,67109121
1854.long	262145,67108864,67109121,262400
1855.long	67109120,262144,67371008,1
1856.long	67371265,257,1,67371009
1857.long	0,262145,67371264,256
1858.long	257,67371265,262144,67108865
1859.long	67371009,67109120,262401,67371008
1860.long	262400,0,67108864,262401
1861.long	67371264,256,1,262144
1862.long	257,262145,67371008,67109121
1863.long	0,67371264,262400,67371009
1864.long	262145,67108864,67371265,1
1865.long	262401,67108865,67108864,67371265
1866.long	262144,67109120,67109121,262400
1867.long	67109120,0,67371009,257
1868.long	67108865,262401,256,67371008
1869.long	4198408,268439552,8,272633864
1870.long	0,272629760,268439560,4194312
1871.long	272633856,268435464,268435456,4104
1872.long	268435464,4198408,4194304,268435456
1873.long	272629768,4198400,4096,8
1874.long	4198400,268439560,272629760,4096
1875.long	4104,0,4194312,272633856
1876.long	268439552,272629768,272633864,4194304
1877.long	272629768,4104,4194304,268435464
1878.long	4198400,268439552,8,272629760
1879.long	268439560,0,4096,4194312
1880.long	0,272629768,272633856,4096
1881.long	268435456,272633864,4198408,4194304
1882.long	272633864,8,268439552,4198408
1883.long	4194312,4198400,272629760,268439560
1884.long	4104,268435456,268435464,272633856
1885.long	134217728,65536,1024,134284320
1886.long	134283296,134218752,66592,134283264
1887.long	65536,32,134217760,66560
1888.long	134218784,134283296,134284288,0
1889.long	66560,134217728,65568,1056
1890.long	134218752,66592,0,134217760
1891.long	32,134218784,134284320,65568
1892.long	134283264,1024,1056,134284288
1893.long	134284288,134218784,65568,134283264
1894.long	65536,32,134217760,134218752
1895.long	134217728,66560,134284320,0
1896.long	66592,134217728,1024,65568
1897.long	134218784,1024,0,134284320
1898.long	134283296,134284288,1056,65536
1899.long	66560,134283296,134218752,1056
1900.long	32,66592,134283264,134217760
1901.long	2147483712,2097216,0,2149588992
1902.long	2097216,8192,2147491904,2097152
1903.long	8256,2149589056,2105344,2147483648
1904.long	2147491840,2147483712,2149580800,2105408
1905.long	2097152,2147491904,2149580864,0
1906.long	8192,64,2149588992,2149580864
1907.long	2149589056,2149580800,2147483648,8256
1908.long	64,2105344,2105408,2147491840
1909.long	8256,2147483648,2147491840,2105408
1910.long	2149588992,2097216,0,2147491840
1911.long	2147483648,8192,2149580864,2097152
1912.long	2097216,2149589056,2105344,64
1913.long	2149589056,2105344,2097152,2147491904
1914.long	2147483712,2149580800,2105408,0
1915.long	8192,2147483712,2147491904,2149588992
1916.long	2149580800,8256,64,2149580864
1917.long	16384,512,16777728,16777220
1918.long	16794116,16388,16896,0
1919.long	16777216,16777732,516,16793600
1920.long	4,16794112,16793600,516
1921.long	16777732,16384,16388,16794116
1922.long	0,16777728,16777220,16896
1923.long	16793604,16900,16794112,4
1924.long	16900,16793604,512,16777216
1925.long	16900,16793600,16793604,516
1926.long	16384,512,16777216,16793604
1927.long	16777732,16900,16896,0
1928.long	512,16777220,4,16777728
1929.long	0,16777732,16777728,16896
1930.long	516,16384,16794116,16777216
1931.long	16794112,4,16388,16794116
1932.long	16777220,16794112,16793600,16388
1933.long	545259648,545390592,131200,0
1934.long	537001984,8388736,545259520,545390720
1935.long	128,536870912,8519680,131200
1936.long	8519808,537002112,536871040,545259520
1937.long	131072,8519808,8388736,537001984
1938.long	545390720,536871040,0,8519680
1939.long	536870912,8388608,537002112,545259648
1940.long	8388608,131072,545390592,128
1941.long	8388608,131072,536871040,545390720
1942.long	131200,536870912,0,8519680
1943.long	545259648,537002112,537001984,8388736
1944.long	545390592,128,8388736,537001984
1945.long	545390720,8388608,545259520,536871040
1946.long	8519680,131200,537002112,545259520
1947.long	128,545390592,8519808,0
1948.long	536870912,545259648,131072,8519808
1949
1950	.section ".note.gnu.property", "a"
1951	.p2align 2
1952	.long 1f - 0f
1953	.long 4f - 1f
1954	.long 5
19550:
1956	.asciz "GNU"
19571:
1958	.p2align 2
1959	.long 0xc0000002
1960	.long 3f - 2f
19612:
1962	.long 3
19633:
1964	.p2align 2
19654:
1966