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