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