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