Import of old SSLeay release: SSLeay 0.8.1b
[openssl.git] / crypto / des / asm / d-win32.asm
1         ; Don't even think of reading this code
2         ; It was automatically generated by des-som3.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  _des_encrypt
15 EXTRN   _des_SPtrans:DWORD
16 _des_encrypt PROC NEAR
17         push    ebp
18         push    ebx
19         push    esi
20         push    edi
21         ; 
22         ; Load the 2 words
23         mov     esi,            DWORD PTR 20[esp]
24         xor     ecx,            ecx
25         mov     eax,            DWORD PTR [esi]
26         mov     ebx,            DWORD PTR 28[esp]
27         mov     edi,            DWORD PTR 4[esi]
28         ; 
29         ; IP
30         rol     eax,            4
31         mov     esi,            eax
32         xor     eax,            edi
33         and     eax,            0f0f0f0f0h
34         xor     esi,            eax
35         xor     edi,            eax
36         ; 
37         rol     edi,            20
38         mov     eax,            edi
39         xor     edi,            esi
40         and     edi,            0fff0000fh
41         xor     eax,            edi
42         xor     esi,            edi
43         ; 
44         rol     eax,            14
45         mov     edi,            eax
46         xor     eax,            esi
47         and     eax,            033333333h
48         xor     edi,            eax
49         xor     esi,            eax
50         ; 
51         rol     esi,            22
52         mov     eax,            esi
53         xor     esi,            edi
54         and     esi,            003fc03fch
55         xor     eax,            esi
56         xor     edi,            esi
57         ; 
58         rol     eax,            9
59         mov     esi,            eax
60         xor     eax,            edi
61         and     eax,            0aaaaaaaah
62         xor     esi,            eax
63         xor     edi,            eax
64         ; 
65         rol     edi,            1
66         cmp     ebx,            0
67         mov     ebp,            DWORD PTR 24[esp]
68         je      $L000start_decrypt
69         ; 
70         ; Round 0
71         mov     eax,            DWORD PTR [ebp]
72         xor     ebx,            ebx
73         mov     edx,            DWORD PTR 4[ebp]
74         xor     eax,            esi
75         xor     edx,            esi
76         and     eax,            0fcfcfcfch
77         and     edx,            0cfcfcfcfh
78         mov     bl,             al
79         mov     cl,             ah
80         ror     edx,            4
81         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
82         mov     bl,             dl
83         xor     edi,            ebp
84         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
85         xor     edi,            ebp
86         mov     cl,             dh
87         shr     eax,            16
88         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
89         xor     edi,            ebp
90         mov     bl,             ah
91         shr     edx,            16
92         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
93         xor     edi,            ebp
94         mov     ebp,            DWORD PTR 24[esp]
95         mov     cl,             dh
96         and     eax,            0ffh
97         and     edx,            0ffh
98         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
99         xor     edi,            ebx
100         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
101         xor     edi,            ebx
102         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
103         xor     edi,            ebx
104         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
105         xor     edi,            ebx
106         ; 
107         ; Round 1
108         mov     eax,            DWORD PTR 8[ebp]
109         xor     ebx,            ebx
110         mov     edx,            DWORD PTR 12[ebp]
111         xor     eax,            edi
112         xor     edx,            edi
113         and     eax,            0fcfcfcfch
114         and     edx,            0cfcfcfcfh
115         mov     bl,             al
116         mov     cl,             ah
117         ror     edx,            4
118         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
119         mov     bl,             dl
120         xor     esi,            ebp
121         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
122         xor     esi,            ebp
123         mov     cl,             dh
124         shr     eax,            16
125         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
126         xor     esi,            ebp
127         mov     bl,             ah
128         shr     edx,            16
129         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
130         xor     esi,            ebp
131         mov     ebp,            DWORD PTR 24[esp]
132         mov     cl,             dh
133         and     eax,            0ffh
134         and     edx,            0ffh
135         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
136         xor     esi,            ebx
137         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
138         xor     esi,            ebx
139         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
140         xor     esi,            ebx
141         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
142         xor     esi,            ebx
143         ; 
144         ; Round 2
145         mov     eax,            DWORD PTR 16[ebp]
146         xor     ebx,            ebx
147         mov     edx,            DWORD PTR 20[ebp]
148         xor     eax,            esi
149         xor     edx,            esi
150         and     eax,            0fcfcfcfch
151         and     edx,            0cfcfcfcfh
152         mov     bl,             al
153         mov     cl,             ah
154         ror     edx,            4
155         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
156         mov     bl,             dl
157         xor     edi,            ebp
158         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
159         xor     edi,            ebp
160         mov     cl,             dh
161         shr     eax,            16
162         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
163         xor     edi,            ebp
164         mov     bl,             ah
165         shr     edx,            16
166         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
167         xor     edi,            ebp
168         mov     ebp,            DWORD PTR 24[esp]
169         mov     cl,             dh
170         and     eax,            0ffh
171         and     edx,            0ffh
172         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
173         xor     edi,            ebx
174         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
175         xor     edi,            ebx
176         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
177         xor     edi,            ebx
178         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
179         xor     edi,            ebx
180         ; 
181         ; Round 3
182         mov     eax,            DWORD PTR 24[ebp]
183         xor     ebx,            ebx
184         mov     edx,            DWORD PTR 28[ebp]
185         xor     eax,            edi
186         xor     edx,            edi
187         and     eax,            0fcfcfcfch
188         and     edx,            0cfcfcfcfh
189         mov     bl,             al
190         mov     cl,             ah
191         ror     edx,            4
192         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
193         mov     bl,             dl
194         xor     esi,            ebp
195         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
196         xor     esi,            ebp
197         mov     cl,             dh
198         shr     eax,            16
199         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
200         xor     esi,            ebp
201         mov     bl,             ah
202         shr     edx,            16
203         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
204         xor     esi,            ebp
205         mov     ebp,            DWORD PTR 24[esp]
206         mov     cl,             dh
207         and     eax,            0ffh
208         and     edx,            0ffh
209         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
210         xor     esi,            ebx
211         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
212         xor     esi,            ebx
213         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
214         xor     esi,            ebx
215         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
216         xor     esi,            ebx
217         ; 
218         ; Round 4
219         mov     eax,            DWORD PTR 32[ebp]
220         xor     ebx,            ebx
221         mov     edx,            DWORD PTR 36[ebp]
222         xor     eax,            esi
223         xor     edx,            esi
224         and     eax,            0fcfcfcfch
225         and     edx,            0cfcfcfcfh
226         mov     bl,             al
227         mov     cl,             ah
228         ror     edx,            4
229         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
230         mov     bl,             dl
231         xor     edi,            ebp
232         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
233         xor     edi,            ebp
234         mov     cl,             dh
235         shr     eax,            16
236         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
237         xor     edi,            ebp
238         mov     bl,             ah
239         shr     edx,            16
240         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
241         xor     edi,            ebp
242         mov     ebp,            DWORD PTR 24[esp]
243         mov     cl,             dh
244         and     eax,            0ffh
245         and     edx,            0ffh
246         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
247         xor     edi,            ebx
248         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
249         xor     edi,            ebx
250         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
251         xor     edi,            ebx
252         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
253         xor     edi,            ebx
254         ; 
255         ; Round 5
256         mov     eax,            DWORD PTR 40[ebp]
257         xor     ebx,            ebx
258         mov     edx,            DWORD PTR 44[ebp]
259         xor     eax,            edi
260         xor     edx,            edi
261         and     eax,            0fcfcfcfch
262         and     edx,            0cfcfcfcfh
263         mov     bl,             al
264         mov     cl,             ah
265         ror     edx,            4
266         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
267         mov     bl,             dl
268         xor     esi,            ebp
269         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
270         xor     esi,            ebp
271         mov     cl,             dh
272         shr     eax,            16
273         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
274         xor     esi,            ebp
275         mov     bl,             ah
276         shr     edx,            16
277         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
278         xor     esi,            ebp
279         mov     ebp,            DWORD PTR 24[esp]
280         mov     cl,             dh
281         and     eax,            0ffh
282         and     edx,            0ffh
283         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
284         xor     esi,            ebx
285         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
286         xor     esi,            ebx
287         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
288         xor     esi,            ebx
289         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
290         xor     esi,            ebx
291         ; 
292         ; Round 6
293         mov     eax,            DWORD PTR 48[ebp]
294         xor     ebx,            ebx
295         mov     edx,            DWORD PTR 52[ebp]
296         xor     eax,            esi
297         xor     edx,            esi
298         and     eax,            0fcfcfcfch
299         and     edx,            0cfcfcfcfh
300         mov     bl,             al
301         mov     cl,             ah
302         ror     edx,            4
303         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
304         mov     bl,             dl
305         xor     edi,            ebp
306         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
307         xor     edi,            ebp
308         mov     cl,             dh
309         shr     eax,            16
310         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
311         xor     edi,            ebp
312         mov     bl,             ah
313         shr     edx,            16
314         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
315         xor     edi,            ebp
316         mov     ebp,            DWORD PTR 24[esp]
317         mov     cl,             dh
318         and     eax,            0ffh
319         and     edx,            0ffh
320         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
321         xor     edi,            ebx
322         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
323         xor     edi,            ebx
324         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
325         xor     edi,            ebx
326         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
327         xor     edi,            ebx
328         ; 
329         ; Round 7
330         mov     eax,            DWORD PTR 56[ebp]
331         xor     ebx,            ebx
332         mov     edx,            DWORD PTR 60[ebp]
333         xor     eax,            edi
334         xor     edx,            edi
335         and     eax,            0fcfcfcfch
336         and     edx,            0cfcfcfcfh
337         mov     bl,             al
338         mov     cl,             ah
339         ror     edx,            4
340         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
341         mov     bl,             dl
342         xor     esi,            ebp
343         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
344         xor     esi,            ebp
345         mov     cl,             dh
346         shr     eax,            16
347         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
348         xor     esi,            ebp
349         mov     bl,             ah
350         shr     edx,            16
351         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
352         xor     esi,            ebp
353         mov     ebp,            DWORD PTR 24[esp]
354         mov     cl,             dh
355         and     eax,            0ffh
356         and     edx,            0ffh
357         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
358         xor     esi,            ebx
359         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
360         xor     esi,            ebx
361         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
362         xor     esi,            ebx
363         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
364         xor     esi,            ebx
365         ; 
366         ; Round 8
367         mov     eax,            DWORD PTR 64[ebp]
368         xor     ebx,            ebx
369         mov     edx,            DWORD PTR 68[ebp]
370         xor     eax,            esi
371         xor     edx,            esi
372         and     eax,            0fcfcfcfch
373         and     edx,            0cfcfcfcfh
374         mov     bl,             al
375         mov     cl,             ah
376         ror     edx,            4
377         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
378         mov     bl,             dl
379         xor     edi,            ebp
380         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
381         xor     edi,            ebp
382         mov     cl,             dh
383         shr     eax,            16
384         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
385         xor     edi,            ebp
386         mov     bl,             ah
387         shr     edx,            16
388         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
389         xor     edi,            ebp
390         mov     ebp,            DWORD PTR 24[esp]
391         mov     cl,             dh
392         and     eax,            0ffh
393         and     edx,            0ffh
394         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
395         xor     edi,            ebx
396         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
397         xor     edi,            ebx
398         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
399         xor     edi,            ebx
400         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
401         xor     edi,            ebx
402         ; 
403         ; Round 9
404         mov     eax,            DWORD PTR 72[ebp]
405         xor     ebx,            ebx
406         mov     edx,            DWORD PTR 76[ebp]
407         xor     eax,            edi
408         xor     edx,            edi
409         and     eax,            0fcfcfcfch
410         and     edx,            0cfcfcfcfh
411         mov     bl,             al
412         mov     cl,             ah
413         ror     edx,            4
414         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
415         mov     bl,             dl
416         xor     esi,            ebp
417         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
418         xor     esi,            ebp
419         mov     cl,             dh
420         shr     eax,            16
421         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
422         xor     esi,            ebp
423         mov     bl,             ah
424         shr     edx,            16
425         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
426         xor     esi,            ebp
427         mov     ebp,            DWORD PTR 24[esp]
428         mov     cl,             dh
429         and     eax,            0ffh
430         and     edx,            0ffh
431         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
432         xor     esi,            ebx
433         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
434         xor     esi,            ebx
435         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
436         xor     esi,            ebx
437         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
438         xor     esi,            ebx
439         ; 
440         ; Round 10
441         mov     eax,            DWORD PTR 80[ebp]
442         xor     ebx,            ebx
443         mov     edx,            DWORD PTR 84[ebp]
444         xor     eax,            esi
445         xor     edx,            esi
446         and     eax,            0fcfcfcfch
447         and     edx,            0cfcfcfcfh
448         mov     bl,             al
449         mov     cl,             ah
450         ror     edx,            4
451         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
452         mov     bl,             dl
453         xor     edi,            ebp
454         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
455         xor     edi,            ebp
456         mov     cl,             dh
457         shr     eax,            16
458         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
459         xor     edi,            ebp
460         mov     bl,             ah
461         shr     edx,            16
462         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
463         xor     edi,            ebp
464         mov     ebp,            DWORD PTR 24[esp]
465         mov     cl,             dh
466         and     eax,            0ffh
467         and     edx,            0ffh
468         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
469         xor     edi,            ebx
470         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
471         xor     edi,            ebx
472         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
473         xor     edi,            ebx
474         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
475         xor     edi,            ebx
476         ; 
477         ; Round 11
478         mov     eax,            DWORD PTR 88[ebp]
479         xor     ebx,            ebx
480         mov     edx,            DWORD PTR 92[ebp]
481         xor     eax,            edi
482         xor     edx,            edi
483         and     eax,            0fcfcfcfch
484         and     edx,            0cfcfcfcfh
485         mov     bl,             al
486         mov     cl,             ah
487         ror     edx,            4
488         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
489         mov     bl,             dl
490         xor     esi,            ebp
491         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
492         xor     esi,            ebp
493         mov     cl,             dh
494         shr     eax,            16
495         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
496         xor     esi,            ebp
497         mov     bl,             ah
498         shr     edx,            16
499         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
500         xor     esi,            ebp
501         mov     ebp,            DWORD PTR 24[esp]
502         mov     cl,             dh
503         and     eax,            0ffh
504         and     edx,            0ffh
505         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
506         xor     esi,            ebx
507         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
508         xor     esi,            ebx
509         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
510         xor     esi,            ebx
511         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
512         xor     esi,            ebx
513         ; 
514         ; Round 12
515         mov     eax,            DWORD PTR 96[ebp]
516         xor     ebx,            ebx
517         mov     edx,            DWORD PTR 100[ebp]
518         xor     eax,            esi
519         xor     edx,            esi
520         and     eax,            0fcfcfcfch
521         and     edx,            0cfcfcfcfh
522         mov     bl,             al
523         mov     cl,             ah
524         ror     edx,            4
525         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
526         mov     bl,             dl
527         xor     edi,            ebp
528         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
529         xor     edi,            ebp
530         mov     cl,             dh
531         shr     eax,            16
532         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
533         xor     edi,            ebp
534         mov     bl,             ah
535         shr     edx,            16
536         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
537         xor     edi,            ebp
538         mov     ebp,            DWORD PTR 24[esp]
539         mov     cl,             dh
540         and     eax,            0ffh
541         and     edx,            0ffh
542         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
543         xor     edi,            ebx
544         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
545         xor     edi,            ebx
546         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
547         xor     edi,            ebx
548         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
549         xor     edi,            ebx
550         ; 
551         ; Round 13
552         mov     eax,            DWORD PTR 104[ebp]
553         xor     ebx,            ebx
554         mov     edx,            DWORD PTR 108[ebp]
555         xor     eax,            edi
556         xor     edx,            edi
557         and     eax,            0fcfcfcfch
558         and     edx,            0cfcfcfcfh
559         mov     bl,             al
560         mov     cl,             ah
561         ror     edx,            4
562         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
563         mov     bl,             dl
564         xor     esi,            ebp
565         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
566         xor     esi,            ebp
567         mov     cl,             dh
568         shr     eax,            16
569         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
570         xor     esi,            ebp
571         mov     bl,             ah
572         shr     edx,            16
573         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
574         xor     esi,            ebp
575         mov     ebp,            DWORD PTR 24[esp]
576         mov     cl,             dh
577         and     eax,            0ffh
578         and     edx,            0ffh
579         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
580         xor     esi,            ebx
581         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
582         xor     esi,            ebx
583         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
584         xor     esi,            ebx
585         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
586         xor     esi,            ebx
587         ; 
588         ; Round 14
589         mov     eax,            DWORD PTR 112[ebp]
590         xor     ebx,            ebx
591         mov     edx,            DWORD PTR 116[ebp]
592         xor     eax,            esi
593         xor     edx,            esi
594         and     eax,            0fcfcfcfch
595         and     edx,            0cfcfcfcfh
596         mov     bl,             al
597         mov     cl,             ah
598         ror     edx,            4
599         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
600         mov     bl,             dl
601         xor     edi,            ebp
602         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
603         xor     edi,            ebp
604         mov     cl,             dh
605         shr     eax,            16
606         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
607         xor     edi,            ebp
608         mov     bl,             ah
609         shr     edx,            16
610         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
611         xor     edi,            ebp
612         mov     ebp,            DWORD PTR 24[esp]
613         mov     cl,             dh
614         and     eax,            0ffh
615         and     edx,            0ffh
616         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
617         xor     edi,            ebx
618         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
619         xor     edi,            ebx
620         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
621         xor     edi,            ebx
622         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
623         xor     edi,            ebx
624         ; 
625         ; Round 15
626         mov     eax,            DWORD PTR 120[ebp]
627         xor     ebx,            ebx
628         mov     edx,            DWORD PTR 124[ebp]
629         xor     eax,            edi
630         xor     edx,            edi
631         and     eax,            0fcfcfcfch
632         and     edx,            0cfcfcfcfh
633         mov     bl,             al
634         mov     cl,             ah
635         ror     edx,            4
636         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
637         mov     bl,             dl
638         xor     esi,            ebp
639         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
640         xor     esi,            ebp
641         mov     cl,             dh
642         shr     eax,            16
643         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
644         xor     esi,            ebp
645         mov     bl,             ah
646         shr     edx,            16
647         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
648         xor     esi,            ebp
649         mov     ebp,            DWORD PTR 24[esp]
650         mov     cl,             dh
651         and     eax,            0ffh
652         and     edx,            0ffh
653         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
654         xor     esi,            ebx
655         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
656         xor     esi,            ebx
657         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
658         xor     esi,            ebx
659         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
660         xor     esi,            ebx
661         jmp     $L001end
662 $L000start_decrypt:
663         ; 
664         ; Round 15
665         mov     eax,            DWORD PTR 120[ebp]
666         xor     ebx,            ebx
667         mov     edx,            DWORD PTR 124[ebp]
668         xor     eax,            esi
669         xor     edx,            esi
670         and     eax,            0fcfcfcfch
671         and     edx,            0cfcfcfcfh
672         mov     bl,             al
673         mov     cl,             ah
674         ror     edx,            4
675         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
676         mov     bl,             dl
677         xor     edi,            ebp
678         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
679         xor     edi,            ebp
680         mov     cl,             dh
681         shr     eax,            16
682         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
683         xor     edi,            ebp
684         mov     bl,             ah
685         shr     edx,            16
686         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
687         xor     edi,            ebp
688         mov     ebp,            DWORD PTR 24[esp]
689         mov     cl,             dh
690         and     eax,            0ffh
691         and     edx,            0ffh
692         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
693         xor     edi,            ebx
694         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
695         xor     edi,            ebx
696         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
697         xor     edi,            ebx
698         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
699         xor     edi,            ebx
700         ; 
701         ; Round 14
702         mov     eax,            DWORD PTR 112[ebp]
703         xor     ebx,            ebx
704         mov     edx,            DWORD PTR 116[ebp]
705         xor     eax,            edi
706         xor     edx,            edi
707         and     eax,            0fcfcfcfch
708         and     edx,            0cfcfcfcfh
709         mov     bl,             al
710         mov     cl,             ah
711         ror     edx,            4
712         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
713         mov     bl,             dl
714         xor     esi,            ebp
715         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
716         xor     esi,            ebp
717         mov     cl,             dh
718         shr     eax,            16
719         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
720         xor     esi,            ebp
721         mov     bl,             ah
722         shr     edx,            16
723         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
724         xor     esi,            ebp
725         mov     ebp,            DWORD PTR 24[esp]
726         mov     cl,             dh
727         and     eax,            0ffh
728         and     edx,            0ffh
729         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
730         xor     esi,            ebx
731         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
732         xor     esi,            ebx
733         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
734         xor     esi,            ebx
735         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
736         xor     esi,            ebx
737         ; 
738         ; Round 13
739         mov     eax,            DWORD PTR 104[ebp]
740         xor     ebx,            ebx
741         mov     edx,            DWORD PTR 108[ebp]
742         xor     eax,            esi
743         xor     edx,            esi
744         and     eax,            0fcfcfcfch
745         and     edx,            0cfcfcfcfh
746         mov     bl,             al
747         mov     cl,             ah
748         ror     edx,            4
749         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
750         mov     bl,             dl
751         xor     edi,            ebp
752         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
753         xor     edi,            ebp
754         mov     cl,             dh
755         shr     eax,            16
756         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
757         xor     edi,            ebp
758         mov     bl,             ah
759         shr     edx,            16
760         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
761         xor     edi,            ebp
762         mov     ebp,            DWORD PTR 24[esp]
763         mov     cl,             dh
764         and     eax,            0ffh
765         and     edx,            0ffh
766         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
767         xor     edi,            ebx
768         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
769         xor     edi,            ebx
770         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
771         xor     edi,            ebx
772         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
773         xor     edi,            ebx
774         ; 
775         ; Round 12
776         mov     eax,            DWORD PTR 96[ebp]
777         xor     ebx,            ebx
778         mov     edx,            DWORD PTR 100[ebp]
779         xor     eax,            edi
780         xor     edx,            edi
781         and     eax,            0fcfcfcfch
782         and     edx,            0cfcfcfcfh
783         mov     bl,             al
784         mov     cl,             ah
785         ror     edx,            4
786         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
787         mov     bl,             dl
788         xor     esi,            ebp
789         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
790         xor     esi,            ebp
791         mov     cl,             dh
792         shr     eax,            16
793         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
794         xor     esi,            ebp
795         mov     bl,             ah
796         shr     edx,            16
797         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
798         xor     esi,            ebp
799         mov     ebp,            DWORD PTR 24[esp]
800         mov     cl,             dh
801         and     eax,            0ffh
802         and     edx,            0ffh
803         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
804         xor     esi,            ebx
805         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
806         xor     esi,            ebx
807         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
808         xor     esi,            ebx
809         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
810         xor     esi,            ebx
811         ; 
812         ; Round 11
813         mov     eax,            DWORD PTR 88[ebp]
814         xor     ebx,            ebx
815         mov     edx,            DWORD PTR 92[ebp]
816         xor     eax,            esi
817         xor     edx,            esi
818         and     eax,            0fcfcfcfch
819         and     edx,            0cfcfcfcfh
820         mov     bl,             al
821         mov     cl,             ah
822         ror     edx,            4
823         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
824         mov     bl,             dl
825         xor     edi,            ebp
826         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
827         xor     edi,            ebp
828         mov     cl,             dh
829         shr     eax,            16
830         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
831         xor     edi,            ebp
832         mov     bl,             ah
833         shr     edx,            16
834         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
835         xor     edi,            ebp
836         mov     ebp,            DWORD PTR 24[esp]
837         mov     cl,             dh
838         and     eax,            0ffh
839         and     edx,            0ffh
840         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
841         xor     edi,            ebx
842         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
843         xor     edi,            ebx
844         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
845         xor     edi,            ebx
846         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
847         xor     edi,            ebx
848         ; 
849         ; Round 10
850         mov     eax,            DWORD PTR 80[ebp]
851         xor     ebx,            ebx
852         mov     edx,            DWORD PTR 84[ebp]
853         xor     eax,            edi
854         xor     edx,            edi
855         and     eax,            0fcfcfcfch
856         and     edx,            0cfcfcfcfh
857         mov     bl,             al
858         mov     cl,             ah
859         ror     edx,            4
860         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
861         mov     bl,             dl
862         xor     esi,            ebp
863         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
864         xor     esi,            ebp
865         mov     cl,             dh
866         shr     eax,            16
867         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
868         xor     esi,            ebp
869         mov     bl,             ah
870         shr     edx,            16
871         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
872         xor     esi,            ebp
873         mov     ebp,            DWORD PTR 24[esp]
874         mov     cl,             dh
875         and     eax,            0ffh
876         and     edx,            0ffh
877         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
878         xor     esi,            ebx
879         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
880         xor     esi,            ebx
881         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
882         xor     esi,            ebx
883         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
884         xor     esi,            ebx
885         ; 
886         ; Round 9
887         mov     eax,            DWORD PTR 72[ebp]
888         xor     ebx,            ebx
889         mov     edx,            DWORD PTR 76[ebp]
890         xor     eax,            esi
891         xor     edx,            esi
892         and     eax,            0fcfcfcfch
893         and     edx,            0cfcfcfcfh
894         mov     bl,             al
895         mov     cl,             ah
896         ror     edx,            4
897         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
898         mov     bl,             dl
899         xor     edi,            ebp
900         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
901         xor     edi,            ebp
902         mov     cl,             dh
903         shr     eax,            16
904         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
905         xor     edi,            ebp
906         mov     bl,             ah
907         shr     edx,            16
908         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
909         xor     edi,            ebp
910         mov     ebp,            DWORD PTR 24[esp]
911         mov     cl,             dh
912         and     eax,            0ffh
913         and     edx,            0ffh
914         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
915         xor     edi,            ebx
916         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
917         xor     edi,            ebx
918         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
919         xor     edi,            ebx
920         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
921         xor     edi,            ebx
922         ; 
923         ; Round 8
924         mov     eax,            DWORD PTR 64[ebp]
925         xor     ebx,            ebx
926         mov     edx,            DWORD PTR 68[ebp]
927         xor     eax,            edi
928         xor     edx,            edi
929         and     eax,            0fcfcfcfch
930         and     edx,            0cfcfcfcfh
931         mov     bl,             al
932         mov     cl,             ah
933         ror     edx,            4
934         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
935         mov     bl,             dl
936         xor     esi,            ebp
937         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
938         xor     esi,            ebp
939         mov     cl,             dh
940         shr     eax,            16
941         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
942         xor     esi,            ebp
943         mov     bl,             ah
944         shr     edx,            16
945         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
946         xor     esi,            ebp
947         mov     ebp,            DWORD PTR 24[esp]
948         mov     cl,             dh
949         and     eax,            0ffh
950         and     edx,            0ffh
951         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
952         xor     esi,            ebx
953         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
954         xor     esi,            ebx
955         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
956         xor     esi,            ebx
957         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
958         xor     esi,            ebx
959         ; 
960         ; Round 7
961         mov     eax,            DWORD PTR 56[ebp]
962         xor     ebx,            ebx
963         mov     edx,            DWORD PTR 60[ebp]
964         xor     eax,            esi
965         xor     edx,            esi
966         and     eax,            0fcfcfcfch
967         and     edx,            0cfcfcfcfh
968         mov     bl,             al
969         mov     cl,             ah
970         ror     edx,            4
971         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
972         mov     bl,             dl
973         xor     edi,            ebp
974         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
975         xor     edi,            ebp
976         mov     cl,             dh
977         shr     eax,            16
978         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
979         xor     edi,            ebp
980         mov     bl,             ah
981         shr     edx,            16
982         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
983         xor     edi,            ebp
984         mov     ebp,            DWORD PTR 24[esp]
985         mov     cl,             dh
986         and     eax,            0ffh
987         and     edx,            0ffh
988         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
989         xor     edi,            ebx
990         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
991         xor     edi,            ebx
992         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
993         xor     edi,            ebx
994         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
995         xor     edi,            ebx
996         ; 
997         ; Round 6
998         mov     eax,            DWORD PTR 48[ebp]
999         xor     ebx,            ebx
1000         mov     edx,            DWORD PTR 52[ebp]
1001         xor     eax,            edi
1002         xor     edx,            edi
1003         and     eax,            0fcfcfcfch
1004         and     edx,            0cfcfcfcfh
1005         mov     bl,             al
1006         mov     cl,             ah
1007         ror     edx,            4
1008         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1009         mov     bl,             dl
1010         xor     esi,            ebp
1011         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1012         xor     esi,            ebp
1013         mov     cl,             dh
1014         shr     eax,            16
1015         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1016         xor     esi,            ebp
1017         mov     bl,             ah
1018         shr     edx,            16
1019         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1020         xor     esi,            ebp
1021         mov     ebp,            DWORD PTR 24[esp]
1022         mov     cl,             dh
1023         and     eax,            0ffh
1024         and     edx,            0ffh
1025         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1026         xor     esi,            ebx
1027         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1028         xor     esi,            ebx
1029         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1030         xor     esi,            ebx
1031         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1032         xor     esi,            ebx
1033         ; 
1034         ; Round 5
1035         mov     eax,            DWORD PTR 40[ebp]
1036         xor     ebx,            ebx
1037         mov     edx,            DWORD PTR 44[ebp]
1038         xor     eax,            esi
1039         xor     edx,            esi
1040         and     eax,            0fcfcfcfch
1041         and     edx,            0cfcfcfcfh
1042         mov     bl,             al
1043         mov     cl,             ah
1044         ror     edx,            4
1045         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1046         mov     bl,             dl
1047         xor     edi,            ebp
1048         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1049         xor     edi,            ebp
1050         mov     cl,             dh
1051         shr     eax,            16
1052         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1053         xor     edi,            ebp
1054         mov     bl,             ah
1055         shr     edx,            16
1056         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1057         xor     edi,            ebp
1058         mov     ebp,            DWORD PTR 24[esp]
1059         mov     cl,             dh
1060         and     eax,            0ffh
1061         and     edx,            0ffh
1062         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1063         xor     edi,            ebx
1064         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1065         xor     edi,            ebx
1066         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1067         xor     edi,            ebx
1068         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1069         xor     edi,            ebx
1070         ; 
1071         ; Round 4
1072         mov     eax,            DWORD PTR 32[ebp]
1073         xor     ebx,            ebx
1074         mov     edx,            DWORD PTR 36[ebp]
1075         xor     eax,            edi
1076         xor     edx,            edi
1077         and     eax,            0fcfcfcfch
1078         and     edx,            0cfcfcfcfh
1079         mov     bl,             al
1080         mov     cl,             ah
1081         ror     edx,            4
1082         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1083         mov     bl,             dl
1084         xor     esi,            ebp
1085         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1086         xor     esi,            ebp
1087         mov     cl,             dh
1088         shr     eax,            16
1089         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1090         xor     esi,            ebp
1091         mov     bl,             ah
1092         shr     edx,            16
1093         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1094         xor     esi,            ebp
1095         mov     ebp,            DWORD PTR 24[esp]
1096         mov     cl,             dh
1097         and     eax,            0ffh
1098         and     edx,            0ffh
1099         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1100         xor     esi,            ebx
1101         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1102         xor     esi,            ebx
1103         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1104         xor     esi,            ebx
1105         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1106         xor     esi,            ebx
1107         ; 
1108         ; Round 3
1109         mov     eax,            DWORD PTR 24[ebp]
1110         xor     ebx,            ebx
1111         mov     edx,            DWORD PTR 28[ebp]
1112         xor     eax,            esi
1113         xor     edx,            esi
1114         and     eax,            0fcfcfcfch
1115         and     edx,            0cfcfcfcfh
1116         mov     bl,             al
1117         mov     cl,             ah
1118         ror     edx,            4
1119         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1120         mov     bl,             dl
1121         xor     edi,            ebp
1122         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1123         xor     edi,            ebp
1124         mov     cl,             dh
1125         shr     eax,            16
1126         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1127         xor     edi,            ebp
1128         mov     bl,             ah
1129         shr     edx,            16
1130         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1131         xor     edi,            ebp
1132         mov     ebp,            DWORD PTR 24[esp]
1133         mov     cl,             dh
1134         and     eax,            0ffh
1135         and     edx,            0ffh
1136         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1137         xor     edi,            ebx
1138         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1139         xor     edi,            ebx
1140         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1141         xor     edi,            ebx
1142         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1143         xor     edi,            ebx
1144         ; 
1145         ; Round 2
1146         mov     eax,            DWORD PTR 16[ebp]
1147         xor     ebx,            ebx
1148         mov     edx,            DWORD PTR 20[ebp]
1149         xor     eax,            edi
1150         xor     edx,            edi
1151         and     eax,            0fcfcfcfch
1152         and     edx,            0cfcfcfcfh
1153         mov     bl,             al
1154         mov     cl,             ah
1155         ror     edx,            4
1156         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1157         mov     bl,             dl
1158         xor     esi,            ebp
1159         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1160         xor     esi,            ebp
1161         mov     cl,             dh
1162         shr     eax,            16
1163         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1164         xor     esi,            ebp
1165         mov     bl,             ah
1166         shr     edx,            16
1167         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1168         xor     esi,            ebp
1169         mov     ebp,            DWORD PTR 24[esp]
1170         mov     cl,             dh
1171         and     eax,            0ffh
1172         and     edx,            0ffh
1173         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1174         xor     esi,            ebx
1175         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1176         xor     esi,            ebx
1177         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1178         xor     esi,            ebx
1179         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1180         xor     esi,            ebx
1181         ; 
1182         ; Round 1
1183         mov     eax,            DWORD PTR 8[ebp]
1184         xor     ebx,            ebx
1185         mov     edx,            DWORD PTR 12[ebp]
1186         xor     eax,            esi
1187         xor     edx,            esi
1188         and     eax,            0fcfcfcfch
1189         and     edx,            0cfcfcfcfh
1190         mov     bl,             al
1191         mov     cl,             ah
1192         ror     edx,            4
1193         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1194         mov     bl,             dl
1195         xor     edi,            ebp
1196         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1197         xor     edi,            ebp
1198         mov     cl,             dh
1199         shr     eax,            16
1200         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1201         xor     edi,            ebp
1202         mov     bl,             ah
1203         shr     edx,            16
1204         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1205         xor     edi,            ebp
1206         mov     ebp,            DWORD PTR 24[esp]
1207         mov     cl,             dh
1208         and     eax,            0ffh
1209         and     edx,            0ffh
1210         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1211         xor     edi,            ebx
1212         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1213         xor     edi,            ebx
1214         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1215         xor     edi,            ebx
1216         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1217         xor     edi,            ebx
1218         ; 
1219         ; Round 0
1220         mov     eax,            DWORD PTR [ebp]
1221         xor     ebx,            ebx
1222         mov     edx,            DWORD PTR 4[ebp]
1223         xor     eax,            edi
1224         xor     edx,            edi
1225         and     eax,            0fcfcfcfch
1226         and     edx,            0cfcfcfcfh
1227         mov     bl,             al
1228         mov     cl,             ah
1229         ror     edx,            4
1230         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1231         mov     bl,             dl
1232         xor     esi,            ebp
1233         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1234         xor     esi,            ebp
1235         mov     cl,             dh
1236         shr     eax,            16
1237         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1238         xor     esi,            ebp
1239         mov     bl,             ah
1240         shr     edx,            16
1241         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1242         xor     esi,            ebp
1243         mov     ebp,            DWORD PTR 24[esp]
1244         mov     cl,             dh
1245         and     eax,            0ffh
1246         and     edx,            0ffh
1247         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1248         xor     esi,            ebx
1249         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1250         xor     esi,            ebx
1251         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1252         xor     esi,            ebx
1253         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1254         xor     esi,            ebx
1255 $L001end:
1256         ; 
1257         ; FP
1258         mov     edx,            DWORD PTR 20[esp]
1259         ror     esi,            1
1260         mov     eax,            edi
1261         xor     edi,            esi
1262         and     edi,            0aaaaaaaah
1263         xor     eax,            edi
1264         xor     esi,            edi
1265         ; 
1266         rol     eax,            23
1267         mov     edi,            eax
1268         xor     eax,            esi
1269         and     eax,            003fc03fch
1270         xor     edi,            eax
1271         xor     esi,            eax
1272         ; 
1273         rol     edi,            10
1274         mov     eax,            edi
1275         xor     edi,            esi
1276         and     edi,            033333333h
1277         xor     eax,            edi
1278         xor     esi,            edi
1279         ; 
1280         rol     esi,            18
1281         mov     edi,            esi
1282         xor     esi,            eax
1283         and     esi,            0fff0000fh
1284         xor     edi,            esi
1285         xor     eax,            esi
1286         ; 
1287         rol     edi,            12
1288         mov     esi,            edi
1289         xor     edi,            eax
1290         and     edi,            0f0f0f0f0h
1291         xor     esi,            edi
1292         xor     eax,            edi
1293         ; 
1294         ror     eax,            4
1295         mov     DWORD PTR [edx],eax
1296         mov     DWORD PTR 4[edx],esi
1297         pop     edi
1298         pop     esi
1299         pop     ebx
1300         pop     ebp
1301         ret
1302 _des_encrypt ENDP
1303 _TEXT   ENDS
1304 _TEXT   SEGMENT
1305 PUBLIC  _des_encrypt2
1306 EXTRN   _des_SPtrans:DWORD
1307 _des_encrypt2 PROC NEAR
1308         push    ebp
1309         push    ebx
1310         push    esi
1311         push    edi
1312         ; 
1313         ; Load the 2 words
1314         mov     eax,            DWORD PTR 20[esp]
1315         xor     ecx,            ecx
1316         mov     esi,            DWORD PTR [eax]
1317         mov     ebx,            DWORD PTR 28[esp]
1318         rol     esi,            3
1319         mov     edi,            DWORD PTR 4[eax]
1320         rol     edi,            3
1321         cmp     ebx,            0
1322         mov     ebp,            DWORD PTR 24[esp]
1323         je      $L002start_decrypt
1324         ; 
1325         ; Round 0
1326         mov     eax,            DWORD PTR [ebp]
1327         xor     ebx,            ebx
1328         mov     edx,            DWORD PTR 4[ebp]
1329         xor     eax,            esi
1330         xor     edx,            esi
1331         and     eax,            0fcfcfcfch
1332         and     edx,            0cfcfcfcfh
1333         mov     bl,             al
1334         mov     cl,             ah
1335         ror     edx,            4
1336         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1337         mov     bl,             dl
1338         xor     edi,            ebp
1339         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1340         xor     edi,            ebp
1341         mov     cl,             dh
1342         shr     eax,            16
1343         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1344         xor     edi,            ebp
1345         mov     bl,             ah
1346         shr     edx,            16
1347         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1348         xor     edi,            ebp
1349         mov     ebp,            DWORD PTR 24[esp]
1350         mov     cl,             dh
1351         and     eax,            0ffh
1352         and     edx,            0ffh
1353         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1354         xor     edi,            ebx
1355         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1356         xor     edi,            ebx
1357         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1358         xor     edi,            ebx
1359         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1360         xor     edi,            ebx
1361         ; 
1362         ; Round 1
1363         mov     eax,            DWORD PTR 8[ebp]
1364         xor     ebx,            ebx
1365         mov     edx,            DWORD PTR 12[ebp]
1366         xor     eax,            edi
1367         xor     edx,            edi
1368         and     eax,            0fcfcfcfch
1369         and     edx,            0cfcfcfcfh
1370         mov     bl,             al
1371         mov     cl,             ah
1372         ror     edx,            4
1373         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1374         mov     bl,             dl
1375         xor     esi,            ebp
1376         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1377         xor     esi,            ebp
1378         mov     cl,             dh
1379         shr     eax,            16
1380         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1381         xor     esi,            ebp
1382         mov     bl,             ah
1383         shr     edx,            16
1384         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1385         xor     esi,            ebp
1386         mov     ebp,            DWORD PTR 24[esp]
1387         mov     cl,             dh
1388         and     eax,            0ffh
1389         and     edx,            0ffh
1390         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1391         xor     esi,            ebx
1392         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1393         xor     esi,            ebx
1394         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1395         xor     esi,            ebx
1396         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1397         xor     esi,            ebx
1398         ; 
1399         ; Round 2
1400         mov     eax,            DWORD PTR 16[ebp]
1401         xor     ebx,            ebx
1402         mov     edx,            DWORD PTR 20[ebp]
1403         xor     eax,            esi
1404         xor     edx,            esi
1405         and     eax,            0fcfcfcfch
1406         and     edx,            0cfcfcfcfh
1407         mov     bl,             al
1408         mov     cl,             ah
1409         ror     edx,            4
1410         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1411         mov     bl,             dl
1412         xor     edi,            ebp
1413         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1414         xor     edi,            ebp
1415         mov     cl,             dh
1416         shr     eax,            16
1417         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1418         xor     edi,            ebp
1419         mov     bl,             ah
1420         shr     edx,            16
1421         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1422         xor     edi,            ebp
1423         mov     ebp,            DWORD PTR 24[esp]
1424         mov     cl,             dh
1425         and     eax,            0ffh
1426         and     edx,            0ffh
1427         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1428         xor     edi,            ebx
1429         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1430         xor     edi,            ebx
1431         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1432         xor     edi,            ebx
1433         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1434         xor     edi,            ebx
1435         ; 
1436         ; Round 3
1437         mov     eax,            DWORD PTR 24[ebp]
1438         xor     ebx,            ebx
1439         mov     edx,            DWORD PTR 28[ebp]
1440         xor     eax,            edi
1441         xor     edx,            edi
1442         and     eax,            0fcfcfcfch
1443         and     edx,            0cfcfcfcfh
1444         mov     bl,             al
1445         mov     cl,             ah
1446         ror     edx,            4
1447         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1448         mov     bl,             dl
1449         xor     esi,            ebp
1450         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1451         xor     esi,            ebp
1452         mov     cl,             dh
1453         shr     eax,            16
1454         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1455         xor     esi,            ebp
1456         mov     bl,             ah
1457         shr     edx,            16
1458         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1459         xor     esi,            ebp
1460         mov     ebp,            DWORD PTR 24[esp]
1461         mov     cl,             dh
1462         and     eax,            0ffh
1463         and     edx,            0ffh
1464         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1465         xor     esi,            ebx
1466         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1467         xor     esi,            ebx
1468         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1469         xor     esi,            ebx
1470         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1471         xor     esi,            ebx
1472         ; 
1473         ; Round 4
1474         mov     eax,            DWORD PTR 32[ebp]
1475         xor     ebx,            ebx
1476         mov     edx,            DWORD PTR 36[ebp]
1477         xor     eax,            esi
1478         xor     edx,            esi
1479         and     eax,            0fcfcfcfch
1480         and     edx,            0cfcfcfcfh
1481         mov     bl,             al
1482         mov     cl,             ah
1483         ror     edx,            4
1484         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1485         mov     bl,             dl
1486         xor     edi,            ebp
1487         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1488         xor     edi,            ebp
1489         mov     cl,             dh
1490         shr     eax,            16
1491         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1492         xor     edi,            ebp
1493         mov     bl,             ah
1494         shr     edx,            16
1495         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1496         xor     edi,            ebp
1497         mov     ebp,            DWORD PTR 24[esp]
1498         mov     cl,             dh
1499         and     eax,            0ffh
1500         and     edx,            0ffh
1501         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1502         xor     edi,            ebx
1503         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1504         xor     edi,            ebx
1505         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1506         xor     edi,            ebx
1507         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1508         xor     edi,            ebx
1509         ; 
1510         ; Round 5
1511         mov     eax,            DWORD PTR 40[ebp]
1512         xor     ebx,            ebx
1513         mov     edx,            DWORD PTR 44[ebp]
1514         xor     eax,            edi
1515         xor     edx,            edi
1516         and     eax,            0fcfcfcfch
1517         and     edx,            0cfcfcfcfh
1518         mov     bl,             al
1519         mov     cl,             ah
1520         ror     edx,            4
1521         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1522         mov     bl,             dl
1523         xor     esi,            ebp
1524         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1525         xor     esi,            ebp
1526         mov     cl,             dh
1527         shr     eax,            16
1528         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1529         xor     esi,            ebp
1530         mov     bl,             ah
1531         shr     edx,            16
1532         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1533         xor     esi,            ebp
1534         mov     ebp,            DWORD PTR 24[esp]
1535         mov     cl,             dh
1536         and     eax,            0ffh
1537         and     edx,            0ffh
1538         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1539         xor     esi,            ebx
1540         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1541         xor     esi,            ebx
1542         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1543         xor     esi,            ebx
1544         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1545         xor     esi,            ebx
1546         ; 
1547         ; Round 6
1548         mov     eax,            DWORD PTR 48[ebp]
1549         xor     ebx,            ebx
1550         mov     edx,            DWORD PTR 52[ebp]
1551         xor     eax,            esi
1552         xor     edx,            esi
1553         and     eax,            0fcfcfcfch
1554         and     edx,            0cfcfcfcfh
1555         mov     bl,             al
1556         mov     cl,             ah
1557         ror     edx,            4
1558         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1559         mov     bl,             dl
1560         xor     edi,            ebp
1561         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1562         xor     edi,            ebp
1563         mov     cl,             dh
1564         shr     eax,            16
1565         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1566         xor     edi,            ebp
1567         mov     bl,             ah
1568         shr     edx,            16
1569         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1570         xor     edi,            ebp
1571         mov     ebp,            DWORD PTR 24[esp]
1572         mov     cl,             dh
1573         and     eax,            0ffh
1574         and     edx,            0ffh
1575         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1576         xor     edi,            ebx
1577         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1578         xor     edi,            ebx
1579         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1580         xor     edi,            ebx
1581         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1582         xor     edi,            ebx
1583         ; 
1584         ; Round 7
1585         mov     eax,            DWORD PTR 56[ebp]
1586         xor     ebx,            ebx
1587         mov     edx,            DWORD PTR 60[ebp]
1588         xor     eax,            edi
1589         xor     edx,            edi
1590         and     eax,            0fcfcfcfch
1591         and     edx,            0cfcfcfcfh
1592         mov     bl,             al
1593         mov     cl,             ah
1594         ror     edx,            4
1595         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1596         mov     bl,             dl
1597         xor     esi,            ebp
1598         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1599         xor     esi,            ebp
1600         mov     cl,             dh
1601         shr     eax,            16
1602         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1603         xor     esi,            ebp
1604         mov     bl,             ah
1605         shr     edx,            16
1606         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1607         xor     esi,            ebp
1608         mov     ebp,            DWORD PTR 24[esp]
1609         mov     cl,             dh
1610         and     eax,            0ffh
1611         and     edx,            0ffh
1612         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1613         xor     esi,            ebx
1614         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1615         xor     esi,            ebx
1616         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1617         xor     esi,            ebx
1618         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1619         xor     esi,            ebx
1620         ; 
1621         ; Round 8
1622         mov     eax,            DWORD PTR 64[ebp]
1623         xor     ebx,            ebx
1624         mov     edx,            DWORD PTR 68[ebp]
1625         xor     eax,            esi
1626         xor     edx,            esi
1627         and     eax,            0fcfcfcfch
1628         and     edx,            0cfcfcfcfh
1629         mov     bl,             al
1630         mov     cl,             ah
1631         ror     edx,            4
1632         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1633         mov     bl,             dl
1634         xor     edi,            ebp
1635         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1636         xor     edi,            ebp
1637         mov     cl,             dh
1638         shr     eax,            16
1639         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1640         xor     edi,            ebp
1641         mov     bl,             ah
1642         shr     edx,            16
1643         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1644         xor     edi,            ebp
1645         mov     ebp,            DWORD PTR 24[esp]
1646         mov     cl,             dh
1647         and     eax,            0ffh
1648         and     edx,            0ffh
1649         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1650         xor     edi,            ebx
1651         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1652         xor     edi,            ebx
1653         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1654         xor     edi,            ebx
1655         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1656         xor     edi,            ebx
1657         ; 
1658         ; Round 9
1659         mov     eax,            DWORD PTR 72[ebp]
1660         xor     ebx,            ebx
1661         mov     edx,            DWORD PTR 76[ebp]
1662         xor     eax,            edi
1663         xor     edx,            edi
1664         and     eax,            0fcfcfcfch
1665         and     edx,            0cfcfcfcfh
1666         mov     bl,             al
1667         mov     cl,             ah
1668         ror     edx,            4
1669         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1670         mov     bl,             dl
1671         xor     esi,            ebp
1672         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1673         xor     esi,            ebp
1674         mov     cl,             dh
1675         shr     eax,            16
1676         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1677         xor     esi,            ebp
1678         mov     bl,             ah
1679         shr     edx,            16
1680         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1681         xor     esi,            ebp
1682         mov     ebp,            DWORD PTR 24[esp]
1683         mov     cl,             dh
1684         and     eax,            0ffh
1685         and     edx,            0ffh
1686         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1687         xor     esi,            ebx
1688         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1689         xor     esi,            ebx
1690         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1691         xor     esi,            ebx
1692         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1693         xor     esi,            ebx
1694         ; 
1695         ; Round 10
1696         mov     eax,            DWORD PTR 80[ebp]
1697         xor     ebx,            ebx
1698         mov     edx,            DWORD PTR 84[ebp]
1699         xor     eax,            esi
1700         xor     edx,            esi
1701         and     eax,            0fcfcfcfch
1702         and     edx,            0cfcfcfcfh
1703         mov     bl,             al
1704         mov     cl,             ah
1705         ror     edx,            4
1706         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1707         mov     bl,             dl
1708         xor     edi,            ebp
1709         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1710         xor     edi,            ebp
1711         mov     cl,             dh
1712         shr     eax,            16
1713         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1714         xor     edi,            ebp
1715         mov     bl,             ah
1716         shr     edx,            16
1717         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1718         xor     edi,            ebp
1719         mov     ebp,            DWORD PTR 24[esp]
1720         mov     cl,             dh
1721         and     eax,            0ffh
1722         and     edx,            0ffh
1723         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1724         xor     edi,            ebx
1725         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1726         xor     edi,            ebx
1727         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1728         xor     edi,            ebx
1729         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1730         xor     edi,            ebx
1731         ; 
1732         ; Round 11
1733         mov     eax,            DWORD PTR 88[ebp]
1734         xor     ebx,            ebx
1735         mov     edx,            DWORD PTR 92[ebp]
1736         xor     eax,            edi
1737         xor     edx,            edi
1738         and     eax,            0fcfcfcfch
1739         and     edx,            0cfcfcfcfh
1740         mov     bl,             al
1741         mov     cl,             ah
1742         ror     edx,            4
1743         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1744         mov     bl,             dl
1745         xor     esi,            ebp
1746         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1747         xor     esi,            ebp
1748         mov     cl,             dh
1749         shr     eax,            16
1750         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1751         xor     esi,            ebp
1752         mov     bl,             ah
1753         shr     edx,            16
1754         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1755         xor     esi,            ebp
1756         mov     ebp,            DWORD PTR 24[esp]
1757         mov     cl,             dh
1758         and     eax,            0ffh
1759         and     edx,            0ffh
1760         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1761         xor     esi,            ebx
1762         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1763         xor     esi,            ebx
1764         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1765         xor     esi,            ebx
1766         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1767         xor     esi,            ebx
1768         ; 
1769         ; Round 12
1770         mov     eax,            DWORD PTR 96[ebp]
1771         xor     ebx,            ebx
1772         mov     edx,            DWORD PTR 100[ebp]
1773         xor     eax,            esi
1774         xor     edx,            esi
1775         and     eax,            0fcfcfcfch
1776         and     edx,            0cfcfcfcfh
1777         mov     bl,             al
1778         mov     cl,             ah
1779         ror     edx,            4
1780         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1781         mov     bl,             dl
1782         xor     edi,            ebp
1783         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1784         xor     edi,            ebp
1785         mov     cl,             dh
1786         shr     eax,            16
1787         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1788         xor     edi,            ebp
1789         mov     bl,             ah
1790         shr     edx,            16
1791         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1792         xor     edi,            ebp
1793         mov     ebp,            DWORD PTR 24[esp]
1794         mov     cl,             dh
1795         and     eax,            0ffh
1796         and     edx,            0ffh
1797         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1798         xor     edi,            ebx
1799         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1800         xor     edi,            ebx
1801         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1802         xor     edi,            ebx
1803         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1804         xor     edi,            ebx
1805         ; 
1806         ; Round 13
1807         mov     eax,            DWORD PTR 104[ebp]
1808         xor     ebx,            ebx
1809         mov     edx,            DWORD PTR 108[ebp]
1810         xor     eax,            edi
1811         xor     edx,            edi
1812         and     eax,            0fcfcfcfch
1813         and     edx,            0cfcfcfcfh
1814         mov     bl,             al
1815         mov     cl,             ah
1816         ror     edx,            4
1817         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1818         mov     bl,             dl
1819         xor     esi,            ebp
1820         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1821         xor     esi,            ebp
1822         mov     cl,             dh
1823         shr     eax,            16
1824         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1825         xor     esi,            ebp
1826         mov     bl,             ah
1827         shr     edx,            16
1828         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1829         xor     esi,            ebp
1830         mov     ebp,            DWORD PTR 24[esp]
1831         mov     cl,             dh
1832         and     eax,            0ffh
1833         and     edx,            0ffh
1834         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1835         xor     esi,            ebx
1836         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1837         xor     esi,            ebx
1838         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1839         xor     esi,            ebx
1840         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1841         xor     esi,            ebx
1842         ; 
1843         ; Round 14
1844         mov     eax,            DWORD PTR 112[ebp]
1845         xor     ebx,            ebx
1846         mov     edx,            DWORD PTR 116[ebp]
1847         xor     eax,            esi
1848         xor     edx,            esi
1849         and     eax,            0fcfcfcfch
1850         and     edx,            0cfcfcfcfh
1851         mov     bl,             al
1852         mov     cl,             ah
1853         ror     edx,            4
1854         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1855         mov     bl,             dl
1856         xor     edi,            ebp
1857         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1858         xor     edi,            ebp
1859         mov     cl,             dh
1860         shr     eax,            16
1861         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1862         xor     edi,            ebp
1863         mov     bl,             ah
1864         shr     edx,            16
1865         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1866         xor     edi,            ebp
1867         mov     ebp,            DWORD PTR 24[esp]
1868         mov     cl,             dh
1869         and     eax,            0ffh
1870         and     edx,            0ffh
1871         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1872         xor     edi,            ebx
1873         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1874         xor     edi,            ebx
1875         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1876         xor     edi,            ebx
1877         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1878         xor     edi,            ebx
1879         ; 
1880         ; Round 15
1881         mov     eax,            DWORD PTR 120[ebp]
1882         xor     ebx,            ebx
1883         mov     edx,            DWORD PTR 124[ebp]
1884         xor     eax,            edi
1885         xor     edx,            edi
1886         and     eax,            0fcfcfcfch
1887         and     edx,            0cfcfcfcfh
1888         mov     bl,             al
1889         mov     cl,             ah
1890         ror     edx,            4
1891         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1892         mov     bl,             dl
1893         xor     esi,            ebp
1894         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1895         xor     esi,            ebp
1896         mov     cl,             dh
1897         shr     eax,            16
1898         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1899         xor     esi,            ebp
1900         mov     bl,             ah
1901         shr     edx,            16
1902         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1903         xor     esi,            ebp
1904         mov     ebp,            DWORD PTR 24[esp]
1905         mov     cl,             dh
1906         and     eax,            0ffh
1907         and     edx,            0ffh
1908         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1909         xor     esi,            ebx
1910         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1911         xor     esi,            ebx
1912         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1913         xor     esi,            ebx
1914         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1915         xor     esi,            ebx
1916         jmp     $L003end
1917 $L002start_decrypt:
1918         ; 
1919         ; Round 15
1920         mov     eax,            DWORD PTR 120[ebp]
1921         xor     ebx,            ebx
1922         mov     edx,            DWORD PTR 124[ebp]
1923         xor     eax,            esi
1924         xor     edx,            esi
1925         and     eax,            0fcfcfcfch
1926         and     edx,            0cfcfcfcfh
1927         mov     bl,             al
1928         mov     cl,             ah
1929         ror     edx,            4
1930         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1931         mov     bl,             dl
1932         xor     edi,            ebp
1933         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1934         xor     edi,            ebp
1935         mov     cl,             dh
1936         shr     eax,            16
1937         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1938         xor     edi,            ebp
1939         mov     bl,             ah
1940         shr     edx,            16
1941         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1942         xor     edi,            ebp
1943         mov     ebp,            DWORD PTR 24[esp]
1944         mov     cl,             dh
1945         and     eax,            0ffh
1946         and     edx,            0ffh
1947         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1948         xor     edi,            ebx
1949         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1950         xor     edi,            ebx
1951         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1952         xor     edi,            ebx
1953         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1954         xor     edi,            ebx
1955         ; 
1956         ; Round 14
1957         mov     eax,            DWORD PTR 112[ebp]
1958         xor     ebx,            ebx
1959         mov     edx,            DWORD PTR 116[ebp]
1960         xor     eax,            edi
1961         xor     edx,            edi
1962         and     eax,            0fcfcfcfch
1963         and     edx,            0cfcfcfcfh
1964         mov     bl,             al
1965         mov     cl,             ah
1966         ror     edx,            4
1967         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
1968         mov     bl,             dl
1969         xor     esi,            ebp
1970         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
1971         xor     esi,            ebp
1972         mov     cl,             dh
1973         shr     eax,            16
1974         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
1975         xor     esi,            ebp
1976         mov     bl,             ah
1977         shr     edx,            16
1978         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
1979         xor     esi,            ebp
1980         mov     ebp,            DWORD PTR 24[esp]
1981         mov     cl,             dh
1982         and     eax,            0ffh
1983         and     edx,            0ffh
1984         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
1985         xor     esi,            ebx
1986         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
1987         xor     esi,            ebx
1988         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
1989         xor     esi,            ebx
1990         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
1991         xor     esi,            ebx
1992         ; 
1993         ; Round 13
1994         mov     eax,            DWORD PTR 104[ebp]
1995         xor     ebx,            ebx
1996         mov     edx,            DWORD PTR 108[ebp]
1997         xor     eax,            esi
1998         xor     edx,            esi
1999         and     eax,            0fcfcfcfch
2000         and     edx,            0cfcfcfcfh
2001         mov     bl,             al
2002         mov     cl,             ah
2003         ror     edx,            4
2004         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2005         mov     bl,             dl
2006         xor     edi,            ebp
2007         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2008         xor     edi,            ebp
2009         mov     cl,             dh
2010         shr     eax,            16
2011         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2012         xor     edi,            ebp
2013         mov     bl,             ah
2014         shr     edx,            16
2015         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2016         xor     edi,            ebp
2017         mov     ebp,            DWORD PTR 24[esp]
2018         mov     cl,             dh
2019         and     eax,            0ffh
2020         and     edx,            0ffh
2021         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2022         xor     edi,            ebx
2023         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2024         xor     edi,            ebx
2025         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2026         xor     edi,            ebx
2027         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2028         xor     edi,            ebx
2029         ; 
2030         ; Round 12
2031         mov     eax,            DWORD PTR 96[ebp]
2032         xor     ebx,            ebx
2033         mov     edx,            DWORD PTR 100[ebp]
2034         xor     eax,            edi
2035         xor     edx,            edi
2036         and     eax,            0fcfcfcfch
2037         and     edx,            0cfcfcfcfh
2038         mov     bl,             al
2039         mov     cl,             ah
2040         ror     edx,            4
2041         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2042         mov     bl,             dl
2043         xor     esi,            ebp
2044         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2045         xor     esi,            ebp
2046         mov     cl,             dh
2047         shr     eax,            16
2048         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2049         xor     esi,            ebp
2050         mov     bl,             ah
2051         shr     edx,            16
2052         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2053         xor     esi,            ebp
2054         mov     ebp,            DWORD PTR 24[esp]
2055         mov     cl,             dh
2056         and     eax,            0ffh
2057         and     edx,            0ffh
2058         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2059         xor     esi,            ebx
2060         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2061         xor     esi,            ebx
2062         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2063         xor     esi,            ebx
2064         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2065         xor     esi,            ebx
2066         ; 
2067         ; Round 11
2068         mov     eax,            DWORD PTR 88[ebp]
2069         xor     ebx,            ebx
2070         mov     edx,            DWORD PTR 92[ebp]
2071         xor     eax,            esi
2072         xor     edx,            esi
2073         and     eax,            0fcfcfcfch
2074         and     edx,            0cfcfcfcfh
2075         mov     bl,             al
2076         mov     cl,             ah
2077         ror     edx,            4
2078         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2079         mov     bl,             dl
2080         xor     edi,            ebp
2081         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2082         xor     edi,            ebp
2083         mov     cl,             dh
2084         shr     eax,            16
2085         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2086         xor     edi,            ebp
2087         mov     bl,             ah
2088         shr     edx,            16
2089         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2090         xor     edi,            ebp
2091         mov     ebp,            DWORD PTR 24[esp]
2092         mov     cl,             dh
2093         and     eax,            0ffh
2094         and     edx,            0ffh
2095         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2096         xor     edi,            ebx
2097         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2098         xor     edi,            ebx
2099         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2100         xor     edi,            ebx
2101         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2102         xor     edi,            ebx
2103         ; 
2104         ; Round 10
2105         mov     eax,            DWORD PTR 80[ebp]
2106         xor     ebx,            ebx
2107         mov     edx,            DWORD PTR 84[ebp]
2108         xor     eax,            edi
2109         xor     edx,            edi
2110         and     eax,            0fcfcfcfch
2111         and     edx,            0cfcfcfcfh
2112         mov     bl,             al
2113         mov     cl,             ah
2114         ror     edx,            4
2115         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2116         mov     bl,             dl
2117         xor     esi,            ebp
2118         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2119         xor     esi,            ebp
2120         mov     cl,             dh
2121         shr     eax,            16
2122         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2123         xor     esi,            ebp
2124         mov     bl,             ah
2125         shr     edx,            16
2126         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2127         xor     esi,            ebp
2128         mov     ebp,            DWORD PTR 24[esp]
2129         mov     cl,             dh
2130         and     eax,            0ffh
2131         and     edx,            0ffh
2132         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2133         xor     esi,            ebx
2134         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2135         xor     esi,            ebx
2136         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2137         xor     esi,            ebx
2138         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2139         xor     esi,            ebx
2140         ; 
2141         ; Round 9
2142         mov     eax,            DWORD PTR 72[ebp]
2143         xor     ebx,            ebx
2144         mov     edx,            DWORD PTR 76[ebp]
2145         xor     eax,            esi
2146         xor     edx,            esi
2147         and     eax,            0fcfcfcfch
2148         and     edx,            0cfcfcfcfh
2149         mov     bl,             al
2150         mov     cl,             ah
2151         ror     edx,            4
2152         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2153         mov     bl,             dl
2154         xor     edi,            ebp
2155         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2156         xor     edi,            ebp
2157         mov     cl,             dh
2158         shr     eax,            16
2159         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2160         xor     edi,            ebp
2161         mov     bl,             ah
2162         shr     edx,            16
2163         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2164         xor     edi,            ebp
2165         mov     ebp,            DWORD PTR 24[esp]
2166         mov     cl,             dh
2167         and     eax,            0ffh
2168         and     edx,            0ffh
2169         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2170         xor     edi,            ebx
2171         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2172         xor     edi,            ebx
2173         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2174         xor     edi,            ebx
2175         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2176         xor     edi,            ebx
2177         ; 
2178         ; Round 8
2179         mov     eax,            DWORD PTR 64[ebp]
2180         xor     ebx,            ebx
2181         mov     edx,            DWORD PTR 68[ebp]
2182         xor     eax,            edi
2183         xor     edx,            edi
2184         and     eax,            0fcfcfcfch
2185         and     edx,            0cfcfcfcfh
2186         mov     bl,             al
2187         mov     cl,             ah
2188         ror     edx,            4
2189         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2190         mov     bl,             dl
2191         xor     esi,            ebp
2192         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2193         xor     esi,            ebp
2194         mov     cl,             dh
2195         shr     eax,            16
2196         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2197         xor     esi,            ebp
2198         mov     bl,             ah
2199         shr     edx,            16
2200         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2201         xor     esi,            ebp
2202         mov     ebp,            DWORD PTR 24[esp]
2203         mov     cl,             dh
2204         and     eax,            0ffh
2205         and     edx,            0ffh
2206         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2207         xor     esi,            ebx
2208         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2209         xor     esi,            ebx
2210         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2211         xor     esi,            ebx
2212         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2213         xor     esi,            ebx
2214         ; 
2215         ; Round 7
2216         mov     eax,            DWORD PTR 56[ebp]
2217         xor     ebx,            ebx
2218         mov     edx,            DWORD PTR 60[ebp]
2219         xor     eax,            esi
2220         xor     edx,            esi
2221         and     eax,            0fcfcfcfch
2222         and     edx,            0cfcfcfcfh
2223         mov     bl,             al
2224         mov     cl,             ah
2225         ror     edx,            4
2226         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2227         mov     bl,             dl
2228         xor     edi,            ebp
2229         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2230         xor     edi,            ebp
2231         mov     cl,             dh
2232         shr     eax,            16
2233         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2234         xor     edi,            ebp
2235         mov     bl,             ah
2236         shr     edx,            16
2237         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2238         xor     edi,            ebp
2239         mov     ebp,            DWORD PTR 24[esp]
2240         mov     cl,             dh
2241         and     eax,            0ffh
2242         and     edx,            0ffh
2243         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2244         xor     edi,            ebx
2245         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2246         xor     edi,            ebx
2247         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2248         xor     edi,            ebx
2249         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2250         xor     edi,            ebx
2251         ; 
2252         ; Round 6
2253         mov     eax,            DWORD PTR 48[ebp]
2254         xor     ebx,            ebx
2255         mov     edx,            DWORD PTR 52[ebp]
2256         xor     eax,            edi
2257         xor     edx,            edi
2258         and     eax,            0fcfcfcfch
2259         and     edx,            0cfcfcfcfh
2260         mov     bl,             al
2261         mov     cl,             ah
2262         ror     edx,            4
2263         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2264         mov     bl,             dl
2265         xor     esi,            ebp
2266         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2267         xor     esi,            ebp
2268         mov     cl,             dh
2269         shr     eax,            16
2270         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2271         xor     esi,            ebp
2272         mov     bl,             ah
2273         shr     edx,            16
2274         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2275         xor     esi,            ebp
2276         mov     ebp,            DWORD PTR 24[esp]
2277         mov     cl,             dh
2278         and     eax,            0ffh
2279         and     edx,            0ffh
2280         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2281         xor     esi,            ebx
2282         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2283         xor     esi,            ebx
2284         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2285         xor     esi,            ebx
2286         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2287         xor     esi,            ebx
2288         ; 
2289         ; Round 5
2290         mov     eax,            DWORD PTR 40[ebp]
2291         xor     ebx,            ebx
2292         mov     edx,            DWORD PTR 44[ebp]
2293         xor     eax,            esi
2294         xor     edx,            esi
2295         and     eax,            0fcfcfcfch
2296         and     edx,            0cfcfcfcfh
2297         mov     bl,             al
2298         mov     cl,             ah
2299         ror     edx,            4
2300         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2301         mov     bl,             dl
2302         xor     edi,            ebp
2303         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2304         xor     edi,            ebp
2305         mov     cl,             dh
2306         shr     eax,            16
2307         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2308         xor     edi,            ebp
2309         mov     bl,             ah
2310         shr     edx,            16
2311         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2312         xor     edi,            ebp
2313         mov     ebp,            DWORD PTR 24[esp]
2314         mov     cl,             dh
2315         and     eax,            0ffh
2316         and     edx,            0ffh
2317         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2318         xor     edi,            ebx
2319         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2320         xor     edi,            ebx
2321         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2322         xor     edi,            ebx
2323         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2324         xor     edi,            ebx
2325         ; 
2326         ; Round 4
2327         mov     eax,            DWORD PTR 32[ebp]
2328         xor     ebx,            ebx
2329         mov     edx,            DWORD PTR 36[ebp]
2330         xor     eax,            edi
2331         xor     edx,            edi
2332         and     eax,            0fcfcfcfch
2333         and     edx,            0cfcfcfcfh
2334         mov     bl,             al
2335         mov     cl,             ah
2336         ror     edx,            4
2337         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2338         mov     bl,             dl
2339         xor     esi,            ebp
2340         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2341         xor     esi,            ebp
2342         mov     cl,             dh
2343         shr     eax,            16
2344         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2345         xor     esi,            ebp
2346         mov     bl,             ah
2347         shr     edx,            16
2348         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2349         xor     esi,            ebp
2350         mov     ebp,            DWORD PTR 24[esp]
2351         mov     cl,             dh
2352         and     eax,            0ffh
2353         and     edx,            0ffh
2354         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2355         xor     esi,            ebx
2356         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2357         xor     esi,            ebx
2358         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2359         xor     esi,            ebx
2360         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2361         xor     esi,            ebx
2362         ; 
2363         ; Round 3
2364         mov     eax,            DWORD PTR 24[ebp]
2365         xor     ebx,            ebx
2366         mov     edx,            DWORD PTR 28[ebp]
2367         xor     eax,            esi
2368         xor     edx,            esi
2369         and     eax,            0fcfcfcfch
2370         and     edx,            0cfcfcfcfh
2371         mov     bl,             al
2372         mov     cl,             ah
2373         ror     edx,            4
2374         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2375         mov     bl,             dl
2376         xor     edi,            ebp
2377         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2378         xor     edi,            ebp
2379         mov     cl,             dh
2380         shr     eax,            16
2381         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2382         xor     edi,            ebp
2383         mov     bl,             ah
2384         shr     edx,            16
2385         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2386         xor     edi,            ebp
2387         mov     ebp,            DWORD PTR 24[esp]
2388         mov     cl,             dh
2389         and     eax,            0ffh
2390         and     edx,            0ffh
2391         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2392         xor     edi,            ebx
2393         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2394         xor     edi,            ebx
2395         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2396         xor     edi,            ebx
2397         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2398         xor     edi,            ebx
2399         ; 
2400         ; Round 2
2401         mov     eax,            DWORD PTR 16[ebp]
2402         xor     ebx,            ebx
2403         mov     edx,            DWORD PTR 20[ebp]
2404         xor     eax,            edi
2405         xor     edx,            edi
2406         and     eax,            0fcfcfcfch
2407         and     edx,            0cfcfcfcfh
2408         mov     bl,             al
2409         mov     cl,             ah
2410         ror     edx,            4
2411         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2412         mov     bl,             dl
2413         xor     esi,            ebp
2414         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2415         xor     esi,            ebp
2416         mov     cl,             dh
2417         shr     eax,            16
2418         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2419         xor     esi,            ebp
2420         mov     bl,             ah
2421         shr     edx,            16
2422         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2423         xor     esi,            ebp
2424         mov     ebp,            DWORD PTR 24[esp]
2425         mov     cl,             dh
2426         and     eax,            0ffh
2427         and     edx,            0ffh
2428         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2429         xor     esi,            ebx
2430         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2431         xor     esi,            ebx
2432         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2433         xor     esi,            ebx
2434         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2435         xor     esi,            ebx
2436         ; 
2437         ; Round 1
2438         mov     eax,            DWORD PTR 8[ebp]
2439         xor     ebx,            ebx
2440         mov     edx,            DWORD PTR 12[ebp]
2441         xor     eax,            esi
2442         xor     edx,            esi
2443         and     eax,            0fcfcfcfch
2444         and     edx,            0cfcfcfcfh
2445         mov     bl,             al
2446         mov     cl,             ah
2447         ror     edx,            4
2448         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2449         mov     bl,             dl
2450         xor     edi,            ebp
2451         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2452         xor     edi,            ebp
2453         mov     cl,             dh
2454         shr     eax,            16
2455         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2456         xor     edi,            ebp
2457         mov     bl,             ah
2458         shr     edx,            16
2459         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2460         xor     edi,            ebp
2461         mov     ebp,            DWORD PTR 24[esp]
2462         mov     cl,             dh
2463         and     eax,            0ffh
2464         and     edx,            0ffh
2465         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2466         xor     edi,            ebx
2467         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2468         xor     edi,            ebx
2469         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2470         xor     edi,            ebx
2471         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2472         xor     edi,            ebx
2473         ; 
2474         ; Round 0
2475         mov     eax,            DWORD PTR [ebp]
2476         xor     ebx,            ebx
2477         mov     edx,            DWORD PTR 4[ebp]
2478         xor     eax,            edi
2479         xor     edx,            edi
2480         and     eax,            0fcfcfcfch
2481         and     edx,            0cfcfcfcfh
2482         mov     bl,             al
2483         mov     cl,             ah
2484         ror     edx,            4
2485         mov     ebp,            DWORD PTR _des_SPtrans[ebx]
2486         mov     bl,             dl
2487         xor     esi,            ebp
2488         mov     ebp,            DWORD PTR _des_SPtrans[0200h+ecx]
2489         xor     esi,            ebp
2490         mov     cl,             dh
2491         shr     eax,            16
2492         mov     ebp,            DWORD PTR _des_SPtrans[0100h+ebx]
2493         xor     esi,            ebp
2494         mov     bl,             ah
2495         shr     edx,            16
2496         mov     ebp,            DWORD PTR _des_SPtrans[0300h+ecx]
2497         xor     esi,            ebp
2498         mov     ebp,            DWORD PTR 24[esp]
2499         mov     cl,             dh
2500         and     eax,            0ffh
2501         and     edx,            0ffh
2502         mov     ebx,            DWORD PTR _des_SPtrans[0600h+ebx]
2503         xor     esi,            ebx
2504         mov     ebx,            DWORD PTR _des_SPtrans[0700h+ecx]
2505         xor     esi,            ebx
2506         mov     ebx,            DWORD PTR _des_SPtrans[0400h+eax]
2507         xor     esi,            ebx
2508         mov     ebx,            DWORD PTR _des_SPtrans[0500h+edx]
2509         xor     esi,            ebx
2510 $L003end:
2511         ; 
2512         ; Fixup
2513         ror     edi,            3
2514         mov     eax,            DWORD PTR 20[esp]
2515         ror     esi,            3
2516         mov     DWORD PTR [eax],edi
2517         mov     DWORD PTR 4[eax],esi
2518         pop     edi
2519         pop     esi
2520         pop     ebx
2521         pop     ebp
2522         ret
2523 _des_encrypt2 ENDP
2524 _TEXT   ENDS
2525 _TEXT   SEGMENT
2526 PUBLIC  _des_encrypt3
2527 EXTRN   _des_SPtrans:DWORD
2528 _des_encrypt3 PROC NEAR
2529         push    ebp
2530         push    ebx
2531         push    esi
2532         push    edi
2533         ; 
2534         ; Load the data words
2535         mov     ebx,            DWORD PTR 20[esp]
2536         mov     edi,            DWORD PTR [ebx]
2537         mov     esi,            DWORD PTR 4[ebx]
2538         ; 
2539         ; IP
2540         rol     edi,            4
2541         mov     edx,            edi
2542         xor     edi,            esi
2543         and     edi,            0f0f0f0f0h
2544         xor     edx,            edi
2545         xor     esi,            edi
2546         ; 
2547         rol     esi,            20
2548         mov     edi,            esi
2549         xor     esi,            edx
2550         and     esi,            0fff0000fh
2551         xor     edi,            esi
2552         xor     edx,            esi
2553         ; 
2554         rol     edi,            14
2555         mov     esi,            edi
2556         xor     edi,            edx
2557         and     edi,            033333333h
2558         xor     esi,            edi
2559         xor     edx,            edi
2560         ; 
2561         rol     edx,            22
2562         mov     edi,            edx
2563         xor     edx,            esi
2564         and     edx,            003fc03fch
2565         xor     edi,            edx
2566         xor     esi,            edx
2567         ; 
2568         rol     edi,            9
2569         mov     edx,            edi
2570         xor     edi,            esi
2571         and     edi,            0aaaaaaaah
2572         xor     edx,            edi
2573         xor     esi,            edi
2574         ; 
2575         ror     edx,            3
2576         ror     esi,            2
2577         mov     DWORD PTR 4[ebx],esi
2578         mov     eax,            DWORD PTR 24[esp]
2579         mov     DWORD PTR [ebx],edx
2580         mov     edi,            DWORD PTR 28[esp]
2581         mov     esi,            DWORD PTR 32[esp]
2582         push    1
2583         push    eax
2584         push    ebx
2585         call    _des_encrypt2
2586         push    0
2587         push    edi
2588         push    ebx
2589         call    _des_encrypt2
2590         push    1
2591         push    esi
2592         push    ebx
2593         call    _des_encrypt2
2594         mov     edi,            DWORD PTR [ebx]
2595         add     esp,            36
2596         mov     esi,            DWORD PTR 4[ebx]
2597         ; 
2598         ; FP
2599         rol     esi,            2
2600         rol     edi,            3
2601         mov     eax,            edi
2602         xor     edi,            esi
2603         and     edi,            0aaaaaaaah
2604         xor     eax,            edi
2605         xor     esi,            edi
2606         ; 
2607         rol     eax,            23
2608         mov     edi,            eax
2609         xor     eax,            esi
2610         and     eax,            003fc03fch
2611         xor     edi,            eax
2612         xor     esi,            eax
2613         ; 
2614         rol     edi,            10
2615         mov     eax,            edi
2616         xor     edi,            esi
2617         and     edi,            033333333h
2618         xor     eax,            edi
2619         xor     esi,            edi
2620         ; 
2621         rol     esi,            18
2622         mov     edi,            esi
2623         xor     esi,            eax
2624         and     esi,            0fff0000fh
2625         xor     edi,            esi
2626         xor     eax,            esi
2627         ; 
2628         rol     edi,            12
2629         mov     esi,            edi
2630         xor     edi,            eax
2631         and     edi,            0f0f0f0f0h
2632         xor     esi,            edi
2633         xor     eax,            edi
2634         ; 
2635         ror     eax,            4
2636         mov     DWORD PTR [ebx],eax
2637         mov     DWORD PTR 4[ebx],esi
2638         pop     edi
2639         pop     esi
2640         pop     ebx
2641         pop     ebp
2642         ret
2643 _des_encrypt3 ENDP
2644 _TEXT   ENDS
2645 _TEXT   SEGMENT
2646 PUBLIC  _des_decrypt3
2647 EXTRN   _des_SPtrans:DWORD
2648 _des_decrypt3 PROC NEAR
2649         push    ebp
2650         push    ebx
2651         push    esi
2652         push    edi
2653         ; 
2654         ; Load the data words
2655         mov     ebx,            DWORD PTR 20[esp]
2656         mov     edi,            DWORD PTR [ebx]
2657         mov     esi,            DWORD PTR 4[ebx]
2658         ; 
2659         ; IP
2660         rol     edi,            4
2661         mov     edx,            edi
2662         xor     edi,            esi
2663         and     edi,            0f0f0f0f0h
2664         xor     edx,            edi
2665         xor     esi,            edi
2666         ; 
2667         rol     esi,            20
2668         mov     edi,            esi
2669         xor     esi,            edx
2670         and     esi,            0fff0000fh
2671         xor     edi,            esi
2672         xor     edx,            esi
2673         ; 
2674         rol     edi,            14
2675         mov     esi,            edi
2676         xor     edi,            edx
2677         and     edi,            033333333h
2678         xor     esi,            edi
2679         xor     edx,            edi
2680         ; 
2681         rol     edx,            22
2682         mov     edi,            edx
2683         xor     edx,            esi
2684         and     edx,            003fc03fch
2685         xor     edi,            edx
2686         xor     esi,            edx
2687         ; 
2688         rol     edi,            9
2689         mov     edx,            edi
2690         xor     edi,            esi
2691         and     edi,            0aaaaaaaah
2692         xor     edx,            edi
2693         xor     esi,            edi
2694         ; 
2695         ror     edx,            3
2696         ror     esi,            2
2697         mov     DWORD PTR 4[ebx],esi
2698         mov     esi,            DWORD PTR 24[esp]
2699         mov     DWORD PTR [ebx],edx
2700         mov     edi,            DWORD PTR 28[esp]
2701         mov     eax,            DWORD PTR 32[esp]
2702         push    0
2703         push    eax
2704         push    ebx
2705         call    _des_encrypt2
2706         push    1
2707         push    edi
2708         push    ebx
2709         call    _des_encrypt2
2710         push    0
2711         push    esi
2712         push    ebx
2713         call    _des_encrypt2
2714         mov     edi,            DWORD PTR [ebx]
2715         add     esp,            36
2716         mov     esi,            DWORD PTR 4[ebx]
2717         ; 
2718         ; FP
2719         rol     esi,            2
2720         rol     edi,            3
2721         mov     eax,            edi
2722         xor     edi,            esi
2723         and     edi,            0aaaaaaaah
2724         xor     eax,            edi
2725         xor     esi,            edi
2726         ; 
2727         rol     eax,            23
2728         mov     edi,            eax
2729         xor     eax,            esi
2730         and     eax,            003fc03fch
2731         xor     edi,            eax
2732         xor     esi,            eax
2733         ; 
2734         rol     edi,            10
2735         mov     eax,            edi
2736         xor     edi,            esi
2737         and     edi,            033333333h
2738         xor     eax,            edi
2739         xor     esi,            edi
2740         ; 
2741         rol     esi,            18
2742         mov     edi,            esi
2743         xor     esi,            eax
2744         and     esi,            0fff0000fh
2745         xor     edi,            esi
2746         xor     eax,            esi
2747         ; 
2748         rol     edi,            12
2749         mov     esi,            edi
2750         xor     edi,            eax
2751         and     edi,            0f0f0f0f0h
2752         xor     esi,            edi
2753         xor     eax,            edi
2754         ; 
2755         ror     eax,            4
2756         mov     DWORD PTR [ebx],eax
2757         mov     DWORD PTR 4[ebx],esi
2758         pop     edi
2759         pop     esi
2760         pop     ebx
2761         pop     ebp
2762         ret
2763 _des_decrypt3 ENDP
2764 _TEXT   ENDS
2765 END