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