Import of old SSLeay release: SSLeay 0.8.1b
[openssl.git] / crypto / bf / asm / win32.asm
1         ; Don't even think of reading this code
2         ; It was automatically generated by bf586.pl
3         ; Which is a perl program used to generate the x86 assember for
4         ; any of elf, a.out, Win32, or Solaris
5         ; It can be found in SSLeay 0.7.0+
6         ; eric <eay@cryptsoft.com>
7         ; 
8         TITLE   bfx86xxxx.asm
9         .386
10 .model FLAT
11 _TEXT   SEGMENT
12 PUBLIC  _BF_encrypt
13 EXTRN   _des_SPtrans:DWORD
14 _BF_encrypt PROC NEAR
15         push    ebp
16         push    ebx
17         push    esi
18         push    edi
19         ; 
20         ; Load the 2 words
21         mov     eax,            DWORD PTR 20[esp]
22         mov     ecx,            DWORD PTR [eax]
23         mov     edx,            DWORD PTR 4[eax]
24         ; 
25         ; P pointer, s and enc flag
26         mov     edi,            DWORD PTR 24[esp]
27         xor     eax,            eax
28         xor     ebx,            ebx
29         mov     ebp,            DWORD PTR 28[esp]
30         cmp     ebp,            0
31         je      $L000start_decrypt
32         xor     ecx,            DWORD PTR [edi]
33         ; 
34         ; Round 0
35         ror     ecx,            16
36         mov     esi,            DWORD PTR 4[edi]
37         mov     al,             ch
38         mov     bl,             cl
39         ror     ecx,            16
40         xor     edx,            esi
41         mov     esi,            DWORD PTR 72[eax*4+edi]
42         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
43         mov     al,             ch
44         mov     bl,             cl
45         add     esi,            ebp
46         mov     eax,            DWORD PTR 2120[eax*4+edi]
47         xor     esi,            eax
48         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
49         add     esi,            ebp
50         xor     eax,            eax
51         xor     edx,            esi
52         ; 
53         ; Round 1
54         ror     edx,            16
55         mov     esi,            DWORD PTR 8[edi]
56         mov     al,             dh
57         mov     bl,             dl
58         ror     edx,            16
59         xor     ecx,            esi
60         mov     esi,            DWORD PTR 72[eax*4+edi]
61         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
62         mov     al,             dh
63         mov     bl,             dl
64         add     esi,            ebp
65         mov     eax,            DWORD PTR 2120[eax*4+edi]
66         xor     esi,            eax
67         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
68         add     esi,            ebp
69         xor     eax,            eax
70         xor     ecx,            esi
71         ; 
72         ; Round 2
73         ror     ecx,            16
74         mov     esi,            DWORD PTR 12[edi]
75         mov     al,             ch
76         mov     bl,             cl
77         ror     ecx,            16
78         xor     edx,            esi
79         mov     esi,            DWORD PTR 72[eax*4+edi]
80         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
81         mov     al,             ch
82         mov     bl,             cl
83         add     esi,            ebp
84         mov     eax,            DWORD PTR 2120[eax*4+edi]
85         xor     esi,            eax
86         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
87         add     esi,            ebp
88         xor     eax,            eax
89         xor     edx,            esi
90         ; 
91         ; Round 3
92         ror     edx,            16
93         mov     esi,            DWORD PTR 16[edi]
94         mov     al,             dh
95         mov     bl,             dl
96         ror     edx,            16
97         xor     ecx,            esi
98         mov     esi,            DWORD PTR 72[eax*4+edi]
99         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
100         mov     al,             dh
101         mov     bl,             dl
102         add     esi,            ebp
103         mov     eax,            DWORD PTR 2120[eax*4+edi]
104         xor     esi,            eax
105         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
106         add     esi,            ebp
107         xor     eax,            eax
108         xor     ecx,            esi
109         ; 
110         ; Round 4
111         ror     ecx,            16
112         mov     esi,            DWORD PTR 20[edi]
113         mov     al,             ch
114         mov     bl,             cl
115         ror     ecx,            16
116         xor     edx,            esi
117         mov     esi,            DWORD PTR 72[eax*4+edi]
118         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
119         mov     al,             ch
120         mov     bl,             cl
121         add     esi,            ebp
122         mov     eax,            DWORD PTR 2120[eax*4+edi]
123         xor     esi,            eax
124         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
125         add     esi,            ebp
126         xor     eax,            eax
127         xor     edx,            esi
128         ; 
129         ; Round 5
130         ror     edx,            16
131         mov     esi,            DWORD PTR 24[edi]
132         mov     al,             dh
133         mov     bl,             dl
134         ror     edx,            16
135         xor     ecx,            esi
136         mov     esi,            DWORD PTR 72[eax*4+edi]
137         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
138         mov     al,             dh
139         mov     bl,             dl
140         add     esi,            ebp
141         mov     eax,            DWORD PTR 2120[eax*4+edi]
142         xor     esi,            eax
143         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
144         add     esi,            ebp
145         xor     eax,            eax
146         xor     ecx,            esi
147         ; 
148         ; Round 6
149         ror     ecx,            16
150         mov     esi,            DWORD PTR 28[edi]
151         mov     al,             ch
152         mov     bl,             cl
153         ror     ecx,            16
154         xor     edx,            esi
155         mov     esi,            DWORD PTR 72[eax*4+edi]
156         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
157         mov     al,             ch
158         mov     bl,             cl
159         add     esi,            ebp
160         mov     eax,            DWORD PTR 2120[eax*4+edi]
161         xor     esi,            eax
162         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
163         add     esi,            ebp
164         xor     eax,            eax
165         xor     edx,            esi
166         ; 
167         ; Round 7
168         ror     edx,            16
169         mov     esi,            DWORD PTR 32[edi]
170         mov     al,             dh
171         mov     bl,             dl
172         ror     edx,            16
173         xor     ecx,            esi
174         mov     esi,            DWORD PTR 72[eax*4+edi]
175         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
176         mov     al,             dh
177         mov     bl,             dl
178         add     esi,            ebp
179         mov     eax,            DWORD PTR 2120[eax*4+edi]
180         xor     esi,            eax
181         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
182         add     esi,            ebp
183         xor     eax,            eax
184         xor     ecx,            esi
185         ; 
186         ; Round 8
187         ror     ecx,            16
188         mov     esi,            DWORD PTR 36[edi]
189         mov     al,             ch
190         mov     bl,             cl
191         ror     ecx,            16
192         xor     edx,            esi
193         mov     esi,            DWORD PTR 72[eax*4+edi]
194         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
195         mov     al,             ch
196         mov     bl,             cl
197         add     esi,            ebp
198         mov     eax,            DWORD PTR 2120[eax*4+edi]
199         xor     esi,            eax
200         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
201         add     esi,            ebp
202         xor     eax,            eax
203         xor     edx,            esi
204         ; 
205         ; Round 9
206         ror     edx,            16
207         mov     esi,            DWORD PTR 40[edi]
208         mov     al,             dh
209         mov     bl,             dl
210         ror     edx,            16
211         xor     ecx,            esi
212         mov     esi,            DWORD PTR 72[eax*4+edi]
213         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
214         mov     al,             dh
215         mov     bl,             dl
216         add     esi,            ebp
217         mov     eax,            DWORD PTR 2120[eax*4+edi]
218         xor     esi,            eax
219         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
220         add     esi,            ebp
221         xor     eax,            eax
222         xor     ecx,            esi
223         ; 
224         ; Round 10
225         ror     ecx,            16
226         mov     esi,            DWORD PTR 44[edi]
227         mov     al,             ch
228         mov     bl,             cl
229         ror     ecx,            16
230         xor     edx,            esi
231         mov     esi,            DWORD PTR 72[eax*4+edi]
232         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
233         mov     al,             ch
234         mov     bl,             cl
235         add     esi,            ebp
236         mov     eax,            DWORD PTR 2120[eax*4+edi]
237         xor     esi,            eax
238         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
239         add     esi,            ebp
240         xor     eax,            eax
241         xor     edx,            esi
242         ; 
243         ; Round 11
244         ror     edx,            16
245         mov     esi,            DWORD PTR 48[edi]
246         mov     al,             dh
247         mov     bl,             dl
248         ror     edx,            16
249         xor     ecx,            esi
250         mov     esi,            DWORD PTR 72[eax*4+edi]
251         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
252         mov     al,             dh
253         mov     bl,             dl
254         add     esi,            ebp
255         mov     eax,            DWORD PTR 2120[eax*4+edi]
256         xor     esi,            eax
257         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
258         add     esi,            ebp
259         xor     eax,            eax
260         xor     ecx,            esi
261         ; 
262         ; Round 12
263         ror     ecx,            16
264         mov     esi,            DWORD PTR 52[edi]
265         mov     al,             ch
266         mov     bl,             cl
267         ror     ecx,            16
268         xor     edx,            esi
269         mov     esi,            DWORD PTR 72[eax*4+edi]
270         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
271         mov     al,             ch
272         mov     bl,             cl
273         add     esi,            ebp
274         mov     eax,            DWORD PTR 2120[eax*4+edi]
275         xor     esi,            eax
276         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
277         add     esi,            ebp
278         xor     eax,            eax
279         xor     edx,            esi
280         ; 
281         ; Round 13
282         ror     edx,            16
283         mov     esi,            DWORD PTR 56[edi]
284         mov     al,             dh
285         mov     bl,             dl
286         ror     edx,            16
287         xor     ecx,            esi
288         mov     esi,            DWORD PTR 72[eax*4+edi]
289         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
290         mov     al,             dh
291         mov     bl,             dl
292         add     esi,            ebp
293         mov     eax,            DWORD PTR 2120[eax*4+edi]
294         xor     esi,            eax
295         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
296         add     esi,            ebp
297         xor     eax,            eax
298         xor     ecx,            esi
299         ; 
300         ; Round 14
301         ror     ecx,            16
302         mov     esi,            DWORD PTR 60[edi]
303         mov     al,             ch
304         mov     bl,             cl
305         ror     ecx,            16
306         xor     edx,            esi
307         mov     esi,            DWORD PTR 72[eax*4+edi]
308         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
309         mov     al,             ch
310         mov     bl,             cl
311         add     esi,            ebp
312         mov     eax,            DWORD PTR 2120[eax*4+edi]
313         xor     esi,            eax
314         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
315         add     esi,            ebp
316         xor     eax,            eax
317         xor     edx,            esi
318         ; 
319         ; Round 15
320         ror     edx,            16
321         mov     esi,            DWORD PTR 64[edi]
322         mov     al,             dh
323         mov     bl,             dl
324         ror     edx,            16
325         xor     ecx,            esi
326         mov     esi,            DWORD PTR 72[eax*4+edi]
327         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
328         mov     al,             dh
329         mov     bl,             dl
330         add     esi,            ebp
331         mov     eax,            DWORD PTR 2120[eax*4+edi]
332         xor     esi,            eax
333         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
334         add     esi,            ebp
335         xor     eax,            eax
336         xor     ecx,            esi
337         xor     edx,            DWORD PTR 68[edi]
338         mov     eax,            DWORD PTR 20[esp]
339         mov     DWORD PTR [eax],edx
340         mov     DWORD PTR 4[eax],ecx
341         pop     edi
342         pop     esi
343         pop     ebx
344         pop     ebp
345         ret
346 $L000start_decrypt:
347         xor     ecx,            DWORD PTR 68[edi]
348         ; 
349         ; Round 16
350         ror     ecx,            16
351         mov     esi,            DWORD PTR 64[edi]
352         mov     al,             ch
353         mov     bl,             cl
354         ror     ecx,            16
355         xor     edx,            esi
356         mov     esi,            DWORD PTR 72[eax*4+edi]
357         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
358         mov     al,             ch
359         mov     bl,             cl
360         add     esi,            ebp
361         mov     eax,            DWORD PTR 2120[eax*4+edi]
362         xor     esi,            eax
363         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
364         add     esi,            ebp
365         xor     eax,            eax
366         xor     edx,            esi
367         ; 
368         ; Round 15
369         ror     edx,            16
370         mov     esi,            DWORD PTR 60[edi]
371         mov     al,             dh
372         mov     bl,             dl
373         ror     edx,            16
374         xor     ecx,            esi
375         mov     esi,            DWORD PTR 72[eax*4+edi]
376         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
377         mov     al,             dh
378         mov     bl,             dl
379         add     esi,            ebp
380         mov     eax,            DWORD PTR 2120[eax*4+edi]
381         xor     esi,            eax
382         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
383         add     esi,            ebp
384         xor     eax,            eax
385         xor     ecx,            esi
386         ; 
387         ; Round 14
388         ror     ecx,            16
389         mov     esi,            DWORD PTR 56[edi]
390         mov     al,             ch
391         mov     bl,             cl
392         ror     ecx,            16
393         xor     edx,            esi
394         mov     esi,            DWORD PTR 72[eax*4+edi]
395         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
396         mov     al,             ch
397         mov     bl,             cl
398         add     esi,            ebp
399         mov     eax,            DWORD PTR 2120[eax*4+edi]
400         xor     esi,            eax
401         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
402         add     esi,            ebp
403         xor     eax,            eax
404         xor     edx,            esi
405         ; 
406         ; Round 13
407         ror     edx,            16
408         mov     esi,            DWORD PTR 52[edi]
409         mov     al,             dh
410         mov     bl,             dl
411         ror     edx,            16
412         xor     ecx,            esi
413         mov     esi,            DWORD PTR 72[eax*4+edi]
414         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
415         mov     al,             dh
416         mov     bl,             dl
417         add     esi,            ebp
418         mov     eax,            DWORD PTR 2120[eax*4+edi]
419         xor     esi,            eax
420         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
421         add     esi,            ebp
422         xor     eax,            eax
423         xor     ecx,            esi
424         ; 
425         ; Round 12
426         ror     ecx,            16
427         mov     esi,            DWORD PTR 48[edi]
428         mov     al,             ch
429         mov     bl,             cl
430         ror     ecx,            16
431         xor     edx,            esi
432         mov     esi,            DWORD PTR 72[eax*4+edi]
433         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
434         mov     al,             ch
435         mov     bl,             cl
436         add     esi,            ebp
437         mov     eax,            DWORD PTR 2120[eax*4+edi]
438         xor     esi,            eax
439         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
440         add     esi,            ebp
441         xor     eax,            eax
442         xor     edx,            esi
443         ; 
444         ; Round 11
445         ror     edx,            16
446         mov     esi,            DWORD PTR 44[edi]
447         mov     al,             dh
448         mov     bl,             dl
449         ror     edx,            16
450         xor     ecx,            esi
451         mov     esi,            DWORD PTR 72[eax*4+edi]
452         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
453         mov     al,             dh
454         mov     bl,             dl
455         add     esi,            ebp
456         mov     eax,            DWORD PTR 2120[eax*4+edi]
457         xor     esi,            eax
458         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
459         add     esi,            ebp
460         xor     eax,            eax
461         xor     ecx,            esi
462         ; 
463         ; Round 10
464         ror     ecx,            16
465         mov     esi,            DWORD PTR 40[edi]
466         mov     al,             ch
467         mov     bl,             cl
468         ror     ecx,            16
469         xor     edx,            esi
470         mov     esi,            DWORD PTR 72[eax*4+edi]
471         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
472         mov     al,             ch
473         mov     bl,             cl
474         add     esi,            ebp
475         mov     eax,            DWORD PTR 2120[eax*4+edi]
476         xor     esi,            eax
477         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
478         add     esi,            ebp
479         xor     eax,            eax
480         xor     edx,            esi
481         ; 
482         ; Round 9
483         ror     edx,            16
484         mov     esi,            DWORD PTR 36[edi]
485         mov     al,             dh
486         mov     bl,             dl
487         ror     edx,            16
488         xor     ecx,            esi
489         mov     esi,            DWORD PTR 72[eax*4+edi]
490         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
491         mov     al,             dh
492         mov     bl,             dl
493         add     esi,            ebp
494         mov     eax,            DWORD PTR 2120[eax*4+edi]
495         xor     esi,            eax
496         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
497         add     esi,            ebp
498         xor     eax,            eax
499         xor     ecx,            esi
500         ; 
501         ; Round 8
502         ror     ecx,            16
503         mov     esi,            DWORD PTR 32[edi]
504         mov     al,             ch
505         mov     bl,             cl
506         ror     ecx,            16
507         xor     edx,            esi
508         mov     esi,            DWORD PTR 72[eax*4+edi]
509         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
510         mov     al,             ch
511         mov     bl,             cl
512         add     esi,            ebp
513         mov     eax,            DWORD PTR 2120[eax*4+edi]
514         xor     esi,            eax
515         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
516         add     esi,            ebp
517         xor     eax,            eax
518         xor     edx,            esi
519         ; 
520         ; Round 7
521         ror     edx,            16
522         mov     esi,            DWORD PTR 28[edi]
523         mov     al,             dh
524         mov     bl,             dl
525         ror     edx,            16
526         xor     ecx,            esi
527         mov     esi,            DWORD PTR 72[eax*4+edi]
528         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
529         mov     al,             dh
530         mov     bl,             dl
531         add     esi,            ebp
532         mov     eax,            DWORD PTR 2120[eax*4+edi]
533         xor     esi,            eax
534         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
535         add     esi,            ebp
536         xor     eax,            eax
537         xor     ecx,            esi
538         ; 
539         ; Round 6
540         ror     ecx,            16
541         mov     esi,            DWORD PTR 24[edi]
542         mov     al,             ch
543         mov     bl,             cl
544         ror     ecx,            16
545         xor     edx,            esi
546         mov     esi,            DWORD PTR 72[eax*4+edi]
547         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
548         mov     al,             ch
549         mov     bl,             cl
550         add     esi,            ebp
551         mov     eax,            DWORD PTR 2120[eax*4+edi]
552         xor     esi,            eax
553         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
554         add     esi,            ebp
555         xor     eax,            eax
556         xor     edx,            esi
557         ; 
558         ; Round 5
559         ror     edx,            16
560         mov     esi,            DWORD PTR 20[edi]
561         mov     al,             dh
562         mov     bl,             dl
563         ror     edx,            16
564         xor     ecx,            esi
565         mov     esi,            DWORD PTR 72[eax*4+edi]
566         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
567         mov     al,             dh
568         mov     bl,             dl
569         add     esi,            ebp
570         mov     eax,            DWORD PTR 2120[eax*4+edi]
571         xor     esi,            eax
572         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
573         add     esi,            ebp
574         xor     eax,            eax
575         xor     ecx,            esi
576         ; 
577         ; Round 4
578         ror     ecx,            16
579         mov     esi,            DWORD PTR 16[edi]
580         mov     al,             ch
581         mov     bl,             cl
582         ror     ecx,            16
583         xor     edx,            esi
584         mov     esi,            DWORD PTR 72[eax*4+edi]
585         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
586         mov     al,             ch
587         mov     bl,             cl
588         add     esi,            ebp
589         mov     eax,            DWORD PTR 2120[eax*4+edi]
590         xor     esi,            eax
591         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
592         add     esi,            ebp
593         xor     eax,            eax
594         xor     edx,            esi
595         ; 
596         ; Round 3
597         ror     edx,            16
598         mov     esi,            DWORD PTR 12[edi]
599         mov     al,             dh
600         mov     bl,             dl
601         ror     edx,            16
602         xor     ecx,            esi
603         mov     esi,            DWORD PTR 72[eax*4+edi]
604         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
605         mov     al,             dh
606         mov     bl,             dl
607         add     esi,            ebp
608         mov     eax,            DWORD PTR 2120[eax*4+edi]
609         xor     esi,            eax
610         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
611         add     esi,            ebp
612         xor     eax,            eax
613         xor     ecx,            esi
614         ; 
615         ; Round 2
616         ror     ecx,            16
617         mov     esi,            DWORD PTR 8[edi]
618         mov     al,             ch
619         mov     bl,             cl
620         ror     ecx,            16
621         xor     edx,            esi
622         mov     esi,            DWORD PTR 72[eax*4+edi]
623         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
624         mov     al,             ch
625         mov     bl,             cl
626         add     esi,            ebp
627         mov     eax,            DWORD PTR 2120[eax*4+edi]
628         xor     esi,            eax
629         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
630         add     esi,            ebp
631         xor     eax,            eax
632         xor     edx,            esi
633         ; 
634         ; Round 1
635         ror     edx,            16
636         mov     esi,            DWORD PTR 4[edi]
637         mov     al,             dh
638         mov     bl,             dl
639         ror     edx,            16
640         xor     ecx,            esi
641         mov     esi,            DWORD PTR 72[eax*4+edi]
642         mov     ebp,            DWORD PTR 1096[ebx*4+edi]
643         mov     al,             dh
644         mov     bl,             dl
645         add     esi,            ebp
646         mov     eax,            DWORD PTR 2120[eax*4+edi]
647         xor     esi,            eax
648         mov     ebp,            DWORD PTR 3144[ebx*4+edi]
649         add     esi,            ebp
650         xor     eax,            eax
651         xor     ecx,            esi
652         xor     edx,            DWORD PTR [edi]
653         mov     eax,            DWORD PTR 20[esp]
654         mov     DWORD PTR [eax],edx
655         mov     DWORD PTR 4[eax],ecx
656         pop     edi
657         pop     esi
658         pop     ebx
659         pop     ebp
660         ret
661 _BF_encrypt ENDP
662 _TEXT   ENDS
663 END