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