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