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