Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / boringssl / win-x86 / crypto / aes / aes-586.asm
blob42ca0267e7a108462bb7d4914e6623c0e48c0c36
1 %ifidn __OUTPUT_FORMAT__,obj
2 section code use32 class=code align=64
3 %elifidn __OUTPUT_FORMAT__,win32
4 %ifdef __YASM_VERSION_ID__
5 %if __YASM_VERSION_ID__ < 01010000h
6 %error yasm version 1.1.0 or later needed.
7 %endif
8 ; Yasm automatically includes .00 and complains about redefining it.
9 ; https://www.tortall.net/projects/yasm/manual/html/objfmt-win32-safeseh.html
10 %else
11 $@feat.00 equ 1
12 %endif
13 section .text code align=64
14 %else
15 section .text code
16 %endif
17 align 16
18 __x86_AES_encrypt_compact:
19 mov DWORD [20+esp],edi
20 xor eax,DWORD [edi]
21 xor ebx,DWORD [4+edi]
22 xor ecx,DWORD [8+edi]
23 xor edx,DWORD [12+edi]
24 mov esi,DWORD [240+edi]
25 lea esi,[esi*1+esi-2]
26 lea esi,[esi*8+edi]
27 mov DWORD [24+esp],esi
28 mov edi,DWORD [ebp-128]
29 mov esi,DWORD [ebp-96]
30 mov edi,DWORD [ebp-64]
31 mov esi,DWORD [ebp-32]
32 mov edi,DWORD [ebp]
33 mov esi,DWORD [32+ebp]
34 mov edi,DWORD [64+ebp]
35 mov esi,DWORD [96+ebp]
36 align 16
37 L$000loop:
38 mov esi,eax
39 and esi,255
40 movzx esi,BYTE [esi*1+ebp-128]
41 movzx edi,bh
42 movzx edi,BYTE [edi*1+ebp-128]
43 shl edi,8
44 xor esi,edi
45 mov edi,ecx
46 shr edi,16
47 and edi,255
48 movzx edi,BYTE [edi*1+ebp-128]
49 shl edi,16
50 xor esi,edi
51 mov edi,edx
52 shr edi,24
53 movzx edi,BYTE [edi*1+ebp-128]
54 shl edi,24
55 xor esi,edi
56 mov DWORD [4+esp],esi
57 mov esi,ebx
58 and esi,255
59 shr ebx,16
60 movzx esi,BYTE [esi*1+ebp-128]
61 movzx edi,ch
62 movzx edi,BYTE [edi*1+ebp-128]
63 shl edi,8
64 xor esi,edi
65 mov edi,edx
66 shr edi,16
67 and edi,255
68 movzx edi,BYTE [edi*1+ebp-128]
69 shl edi,16
70 xor esi,edi
71 mov edi,eax
72 shr edi,24
73 movzx edi,BYTE [edi*1+ebp-128]
74 shl edi,24
75 xor esi,edi
76 mov DWORD [8+esp],esi
77 mov esi,ecx
78 and esi,255
79 shr ecx,24
80 movzx esi,BYTE [esi*1+ebp-128]
81 movzx edi,dh
82 movzx edi,BYTE [edi*1+ebp-128]
83 shl edi,8
84 xor esi,edi
85 mov edi,eax
86 shr edi,16
87 and edx,255
88 and edi,255
89 movzx edi,BYTE [edi*1+ebp-128]
90 shl edi,16
91 xor esi,edi
92 movzx edi,bh
93 movzx edi,BYTE [edi*1+ebp-128]
94 shl edi,24
95 xor esi,edi
96 and edx,255
97 movzx edx,BYTE [edx*1+ebp-128]
98 movzx eax,ah
99 movzx eax,BYTE [eax*1+ebp-128]
100 shl eax,8
101 xor edx,eax
102 mov eax,DWORD [4+esp]
103 and ebx,255
104 movzx ebx,BYTE [ebx*1+ebp-128]
105 shl ebx,16
106 xor edx,ebx
107 mov ebx,DWORD [8+esp]
108 movzx ecx,BYTE [ecx*1+ebp-128]
109 shl ecx,24
110 xor edx,ecx
111 mov ecx,esi
112 mov ebp,2155905152
113 and ebp,ecx
114 lea edi,[ecx*1+ecx]
115 mov esi,ebp
116 shr ebp,7
117 and edi,4278124286
118 sub esi,ebp
119 mov ebp,ecx
120 and esi,454761243
121 ror ebp,16
122 xor esi,edi
123 mov edi,ecx
124 xor ecx,esi
125 ror edi,24
126 xor esi,ebp
127 rol ecx,24
128 xor esi,edi
129 mov ebp,2155905152
130 xor ecx,esi
131 and ebp,edx
132 lea edi,[edx*1+edx]
133 mov esi,ebp
134 shr ebp,7
135 and edi,4278124286
136 sub esi,ebp
137 mov ebp,edx
138 and esi,454761243
139 ror ebp,16
140 xor esi,edi
141 mov edi,edx
142 xor edx,esi
143 ror edi,24
144 xor esi,ebp
145 rol edx,24
146 xor esi,edi
147 mov ebp,2155905152
148 xor edx,esi
149 and ebp,eax
150 lea edi,[eax*1+eax]
151 mov esi,ebp
152 shr ebp,7
153 and edi,4278124286
154 sub esi,ebp
155 mov ebp,eax
156 and esi,454761243
157 ror ebp,16
158 xor esi,edi
159 mov edi,eax
160 xor eax,esi
161 ror edi,24
162 xor esi,ebp
163 rol eax,24
164 xor esi,edi
165 mov ebp,2155905152
166 xor eax,esi
167 and ebp,ebx
168 lea edi,[ebx*1+ebx]
169 mov esi,ebp
170 shr ebp,7
171 and edi,4278124286
172 sub esi,ebp
173 mov ebp,ebx
174 and esi,454761243
175 ror ebp,16
176 xor esi,edi
177 mov edi,ebx
178 xor ebx,esi
179 ror edi,24
180 xor esi,ebp
181 rol ebx,24
182 xor esi,edi
183 xor ebx,esi
184 mov edi,DWORD [20+esp]
185 mov ebp,DWORD [28+esp]
186 add edi,16
187 xor eax,DWORD [edi]
188 xor ebx,DWORD [4+edi]
189 xor ecx,DWORD [8+edi]
190 xor edx,DWORD [12+edi]
191 cmp edi,DWORD [24+esp]
192 mov DWORD [20+esp],edi
193 jb NEAR L$000loop
194 mov esi,eax
195 and esi,255
196 movzx esi,BYTE [esi*1+ebp-128]
197 movzx edi,bh
198 movzx edi,BYTE [edi*1+ebp-128]
199 shl edi,8
200 xor esi,edi
201 mov edi,ecx
202 shr edi,16
203 and edi,255
204 movzx edi,BYTE [edi*1+ebp-128]
205 shl edi,16
206 xor esi,edi
207 mov edi,edx
208 shr edi,24
209 movzx edi,BYTE [edi*1+ebp-128]
210 shl edi,24
211 xor esi,edi
212 mov DWORD [4+esp],esi
213 mov esi,ebx
214 and esi,255
215 shr ebx,16
216 movzx esi,BYTE [esi*1+ebp-128]
217 movzx edi,ch
218 movzx edi,BYTE [edi*1+ebp-128]
219 shl edi,8
220 xor esi,edi
221 mov edi,edx
222 shr edi,16
223 and edi,255
224 movzx edi,BYTE [edi*1+ebp-128]
225 shl edi,16
226 xor esi,edi
227 mov edi,eax
228 shr edi,24
229 movzx edi,BYTE [edi*1+ebp-128]
230 shl edi,24
231 xor esi,edi
232 mov DWORD [8+esp],esi
233 mov esi,ecx
234 and esi,255
235 shr ecx,24
236 movzx esi,BYTE [esi*1+ebp-128]
237 movzx edi,dh
238 movzx edi,BYTE [edi*1+ebp-128]
239 shl edi,8
240 xor esi,edi
241 mov edi,eax
242 shr edi,16
243 and edx,255
244 and edi,255
245 movzx edi,BYTE [edi*1+ebp-128]
246 shl edi,16
247 xor esi,edi
248 movzx edi,bh
249 movzx edi,BYTE [edi*1+ebp-128]
250 shl edi,24
251 xor esi,edi
252 mov edi,DWORD [20+esp]
253 and edx,255
254 movzx edx,BYTE [edx*1+ebp-128]
255 movzx eax,ah
256 movzx eax,BYTE [eax*1+ebp-128]
257 shl eax,8
258 xor edx,eax
259 mov eax,DWORD [4+esp]
260 and ebx,255
261 movzx ebx,BYTE [ebx*1+ebp-128]
262 shl ebx,16
263 xor edx,ebx
264 mov ebx,DWORD [8+esp]
265 movzx ecx,BYTE [ecx*1+ebp-128]
266 shl ecx,24
267 xor edx,ecx
268 mov ecx,esi
269 xor eax,DWORD [16+edi]
270 xor ebx,DWORD [20+edi]
271 xor ecx,DWORD [24+edi]
272 xor edx,DWORD [28+edi]
274 align 16
275 __sse_AES_encrypt_compact:
276 pxor mm0,[edi]
277 pxor mm4,[8+edi]
278 mov esi,DWORD [240+edi]
279 lea esi,[esi*1+esi-2]
280 lea esi,[esi*8+edi]
281 mov DWORD [24+esp],esi
282 mov eax,454761243
283 mov DWORD [8+esp],eax
284 mov DWORD [12+esp],eax
285 mov eax,DWORD [ebp-128]
286 mov ebx,DWORD [ebp-96]
287 mov ecx,DWORD [ebp-64]
288 mov edx,DWORD [ebp-32]
289 mov eax,DWORD [ebp]
290 mov ebx,DWORD [32+ebp]
291 mov ecx,DWORD [64+ebp]
292 mov edx,DWORD [96+ebp]
293 align 16
294 L$001loop:
295 pshufw mm1,mm0,8
296 pshufw mm5,mm4,13
297 movd eax,mm1
298 movd ebx,mm5
299 mov DWORD [20+esp],edi
300 movzx esi,al
301 movzx edx,ah
302 pshufw mm2,mm0,13
303 movzx ecx,BYTE [esi*1+ebp-128]
304 movzx edi,bl
305 movzx edx,BYTE [edx*1+ebp-128]
306 shr eax,16
307 shl edx,8
308 movzx esi,BYTE [edi*1+ebp-128]
309 movzx edi,bh
310 shl esi,16
311 pshufw mm6,mm4,8
312 or ecx,esi
313 movzx esi,BYTE [edi*1+ebp-128]
314 movzx edi,ah
315 shl esi,24
316 shr ebx,16
317 or edx,esi
318 movzx esi,BYTE [edi*1+ebp-128]
319 movzx edi,bh
320 shl esi,8
321 or ecx,esi
322 movzx esi,BYTE [edi*1+ebp-128]
323 movzx edi,al
324 shl esi,24
325 or ecx,esi
326 movzx esi,BYTE [edi*1+ebp-128]
327 movzx edi,bl
328 movd eax,mm2
329 movd mm0,ecx
330 movzx ecx,BYTE [edi*1+ebp-128]
331 movzx edi,ah
332 shl ecx,16
333 movd ebx,mm6
334 or ecx,esi
335 movzx esi,BYTE [edi*1+ebp-128]
336 movzx edi,bh
337 shl esi,24
338 or ecx,esi
339 movzx esi,BYTE [edi*1+ebp-128]
340 movzx edi,bl
341 shl esi,8
342 shr ebx,16
343 or ecx,esi
344 movzx esi,BYTE [edi*1+ebp-128]
345 movzx edi,al
346 shr eax,16
347 movd mm1,ecx
348 movzx ecx,BYTE [edi*1+ebp-128]
349 movzx edi,ah
350 shl ecx,16
351 and eax,255
352 or ecx,esi
353 punpckldq mm0,mm1
354 movzx esi,BYTE [edi*1+ebp-128]
355 movzx edi,bh
356 shl esi,24
357 and ebx,255
358 movzx eax,BYTE [eax*1+ebp-128]
359 or ecx,esi
360 shl eax,16
361 movzx esi,BYTE [edi*1+ebp-128]
362 or edx,eax
363 shl esi,8
364 movzx ebx,BYTE [ebx*1+ebp-128]
365 or ecx,esi
366 or edx,ebx
367 mov edi,DWORD [20+esp]
368 movd mm4,ecx
369 movd mm5,edx
370 punpckldq mm4,mm5
371 add edi,16
372 cmp edi,DWORD [24+esp]
373 ja NEAR L$002out
374 movq mm2,[8+esp]
375 pxor mm3,mm3
376 pxor mm7,mm7
377 movq mm1,mm0
378 movq mm5,mm4
379 pcmpgtb mm3,mm0
380 pcmpgtb mm7,mm4
381 pand mm3,mm2
382 pand mm7,mm2
383 pshufw mm2,mm0,177
384 pshufw mm6,mm4,177
385 paddb mm0,mm0
386 paddb mm4,mm4
387 pxor mm0,mm3
388 pxor mm4,mm7
389 pshufw mm3,mm2,177
390 pshufw mm7,mm6,177
391 pxor mm1,mm0
392 pxor mm5,mm4
393 pxor mm0,mm2
394 pxor mm4,mm6
395 movq mm2,mm3
396 movq mm6,mm7
397 pslld mm3,8
398 pslld mm7,8
399 psrld mm2,24
400 psrld mm6,24
401 pxor mm0,mm3
402 pxor mm4,mm7
403 pxor mm0,mm2
404 pxor mm4,mm6
405 movq mm3,mm1
406 movq mm7,mm5
407 movq mm2,[edi]
408 movq mm6,[8+edi]
409 psrld mm1,8
410 psrld mm5,8
411 mov eax,DWORD [ebp-128]
412 pslld mm3,24
413 pslld mm7,24
414 mov ebx,DWORD [ebp-64]
415 pxor mm0,mm1
416 pxor mm4,mm5
417 mov ecx,DWORD [ebp]
418 pxor mm0,mm3
419 pxor mm4,mm7
420 mov edx,DWORD [64+ebp]
421 pxor mm0,mm2
422 pxor mm4,mm6
423 jmp NEAR L$001loop
424 align 16
425 L$002out:
426 pxor mm0,[edi]
427 pxor mm4,[8+edi]
429 align 16
430 __x86_AES_encrypt:
431 mov DWORD [20+esp],edi
432 xor eax,DWORD [edi]
433 xor ebx,DWORD [4+edi]
434 xor ecx,DWORD [8+edi]
435 xor edx,DWORD [12+edi]
436 mov esi,DWORD [240+edi]
437 lea esi,[esi*1+esi-2]
438 lea esi,[esi*8+edi]
439 mov DWORD [24+esp],esi
440 align 16
441 L$003loop:
442 mov esi,eax
443 and esi,255
444 mov esi,DWORD [esi*8+ebp]
445 movzx edi,bh
446 xor esi,DWORD [3+edi*8+ebp]
447 mov edi,ecx
448 shr edi,16
449 and edi,255
450 xor esi,DWORD [2+edi*8+ebp]
451 mov edi,edx
452 shr edi,24
453 xor esi,DWORD [1+edi*8+ebp]
454 mov DWORD [4+esp],esi
455 mov esi,ebx
456 and esi,255
457 shr ebx,16
458 mov esi,DWORD [esi*8+ebp]
459 movzx edi,ch
460 xor esi,DWORD [3+edi*8+ebp]
461 mov edi,edx
462 shr edi,16
463 and edi,255
464 xor esi,DWORD [2+edi*8+ebp]
465 mov edi,eax
466 shr edi,24
467 xor esi,DWORD [1+edi*8+ebp]
468 mov DWORD [8+esp],esi
469 mov esi,ecx
470 and esi,255
471 shr ecx,24
472 mov esi,DWORD [esi*8+ebp]
473 movzx edi,dh
474 xor esi,DWORD [3+edi*8+ebp]
475 mov edi,eax
476 shr edi,16
477 and edx,255
478 and edi,255
479 xor esi,DWORD [2+edi*8+ebp]
480 movzx edi,bh
481 xor esi,DWORD [1+edi*8+ebp]
482 mov edi,DWORD [20+esp]
483 mov edx,DWORD [edx*8+ebp]
484 movzx eax,ah
485 xor edx,DWORD [3+eax*8+ebp]
486 mov eax,DWORD [4+esp]
487 and ebx,255
488 xor edx,DWORD [2+ebx*8+ebp]
489 mov ebx,DWORD [8+esp]
490 xor edx,DWORD [1+ecx*8+ebp]
491 mov ecx,esi
492 add edi,16
493 xor eax,DWORD [edi]
494 xor ebx,DWORD [4+edi]
495 xor ecx,DWORD [8+edi]
496 xor edx,DWORD [12+edi]
497 cmp edi,DWORD [24+esp]
498 mov DWORD [20+esp],edi
499 jb NEAR L$003loop
500 mov esi,eax
501 and esi,255
502 mov esi,DWORD [2+esi*8+ebp]
503 and esi,255
504 movzx edi,bh
505 mov edi,DWORD [edi*8+ebp]
506 and edi,65280
507 xor esi,edi
508 mov edi,ecx
509 shr edi,16
510 and edi,255
511 mov edi,DWORD [edi*8+ebp]
512 and edi,16711680
513 xor esi,edi
514 mov edi,edx
515 shr edi,24
516 mov edi,DWORD [2+edi*8+ebp]
517 and edi,4278190080
518 xor esi,edi
519 mov DWORD [4+esp],esi
520 mov esi,ebx
521 and esi,255
522 shr ebx,16
523 mov esi,DWORD [2+esi*8+ebp]
524 and esi,255
525 movzx edi,ch
526 mov edi,DWORD [edi*8+ebp]
527 and edi,65280
528 xor esi,edi
529 mov edi,edx
530 shr edi,16
531 and edi,255
532 mov edi,DWORD [edi*8+ebp]
533 and edi,16711680
534 xor esi,edi
535 mov edi,eax
536 shr edi,24
537 mov edi,DWORD [2+edi*8+ebp]
538 and edi,4278190080
539 xor esi,edi
540 mov DWORD [8+esp],esi
541 mov esi,ecx
542 and esi,255
543 shr ecx,24
544 mov esi,DWORD [2+esi*8+ebp]
545 and esi,255
546 movzx edi,dh
547 mov edi,DWORD [edi*8+ebp]
548 and edi,65280
549 xor esi,edi
550 mov edi,eax
551 shr edi,16
552 and edx,255
553 and edi,255
554 mov edi,DWORD [edi*8+ebp]
555 and edi,16711680
556 xor esi,edi
557 movzx edi,bh
558 mov edi,DWORD [2+edi*8+ebp]
559 and edi,4278190080
560 xor esi,edi
561 mov edi,DWORD [20+esp]
562 and edx,255
563 mov edx,DWORD [2+edx*8+ebp]
564 and edx,255
565 movzx eax,ah
566 mov eax,DWORD [eax*8+ebp]
567 and eax,65280
568 xor edx,eax
569 mov eax,DWORD [4+esp]
570 and ebx,255
571 mov ebx,DWORD [ebx*8+ebp]
572 and ebx,16711680
573 xor edx,ebx
574 mov ebx,DWORD [8+esp]
575 mov ecx,DWORD [2+ecx*8+ebp]
576 and ecx,4278190080
577 xor edx,ecx
578 mov ecx,esi
579 add edi,16
580 xor eax,DWORD [edi]
581 xor ebx,DWORD [4+edi]
582 xor ecx,DWORD [8+edi]
583 xor edx,DWORD [12+edi]
585 align 64
586 L$AES_Te:
587 dd 2774754246,2774754246
588 dd 2222750968,2222750968
589 dd 2574743534,2574743534
590 dd 2373680118,2373680118
591 dd 234025727,234025727
592 dd 3177933782,3177933782
593 dd 2976870366,2976870366
594 dd 1422247313,1422247313
595 dd 1345335392,1345335392
596 dd 50397442,50397442
597 dd 2842126286,2842126286
598 dd 2099981142,2099981142
599 dd 436141799,436141799
600 dd 1658312629,1658312629
601 dd 3870010189,3870010189
602 dd 2591454956,2591454956
603 dd 1170918031,1170918031
604 dd 2642575903,2642575903
605 dd 1086966153,1086966153
606 dd 2273148410,2273148410
607 dd 368769775,368769775
608 dd 3948501426,3948501426
609 dd 3376891790,3376891790
610 dd 200339707,200339707
611 dd 3970805057,3970805057
612 dd 1742001331,1742001331
613 dd 4255294047,4255294047
614 dd 3937382213,3937382213
615 dd 3214711843,3214711843
616 dd 4154762323,4154762323
617 dd 2524082916,2524082916
618 dd 1539358875,1539358875
619 dd 3266819957,3266819957
620 dd 486407649,486407649
621 dd 2928907069,2928907069
622 dd 1780885068,1780885068
623 dd 1513502316,1513502316
624 dd 1094664062,1094664062
625 dd 49805301,49805301
626 dd 1338821763,1338821763
627 dd 1546925160,1546925160
628 dd 4104496465,4104496465
629 dd 887481809,887481809
630 dd 150073849,150073849
631 dd 2473685474,2473685474
632 dd 1943591083,1943591083
633 dd 1395732834,1395732834
634 dd 1058346282,1058346282
635 dd 201589768,201589768
636 dd 1388824469,1388824469
637 dd 1696801606,1696801606
638 dd 1589887901,1589887901
639 dd 672667696,672667696
640 dd 2711000631,2711000631
641 dd 251987210,251987210
642 dd 3046808111,3046808111
643 dd 151455502,151455502
644 dd 907153956,907153956
645 dd 2608889883,2608889883
646 dd 1038279391,1038279391
647 dd 652995533,652995533
648 dd 1764173646,1764173646
649 dd 3451040383,3451040383
650 dd 2675275242,2675275242
651 dd 453576978,453576978
652 dd 2659418909,2659418909
653 dd 1949051992,1949051992
654 dd 773462580,773462580
655 dd 756751158,756751158
656 dd 2993581788,2993581788
657 dd 3998898868,3998898868
658 dd 4221608027,4221608027
659 dd 4132590244,4132590244
660 dd 1295727478,1295727478
661 dd 1641469623,1641469623
662 dd 3467883389,3467883389
663 dd 2066295122,2066295122
664 dd 1055122397,1055122397
665 dd 1898917726,1898917726
666 dd 2542044179,2542044179
667 dd 4115878822,4115878822
668 dd 1758581177,1758581177
669 dd 0,0
670 dd 753790401,753790401
671 dd 1612718144,1612718144
672 dd 536673507,536673507
673 dd 3367088505,3367088505
674 dd 3982187446,3982187446
675 dd 3194645204,3194645204
676 dd 1187761037,1187761037
677 dd 3653156455,3653156455
678 dd 1262041458,1262041458
679 dd 3729410708,3729410708
680 dd 3561770136,3561770136
681 dd 3898103984,3898103984
682 dd 1255133061,1255133061
683 dd 1808847035,1808847035
684 dd 720367557,720367557
685 dd 3853167183,3853167183
686 dd 385612781,385612781
687 dd 3309519750,3309519750
688 dd 3612167578,3612167578
689 dd 1429418854,1429418854
690 dd 2491778321,2491778321
691 dd 3477423498,3477423498
692 dd 284817897,284817897
693 dd 100794884,100794884
694 dd 2172616702,2172616702
695 dd 4031795360,4031795360
696 dd 1144798328,1144798328
697 dd 3131023141,3131023141
698 dd 3819481163,3819481163
699 dd 4082192802,4082192802
700 dd 4272137053,4272137053
701 dd 3225436288,3225436288
702 dd 2324664069,2324664069
703 dd 2912064063,2912064063
704 dd 3164445985,3164445985
705 dd 1211644016,1211644016
706 dd 83228145,83228145
707 dd 3753688163,3753688163
708 dd 3249976951,3249976951
709 dd 1977277103,1977277103
710 dd 1663115586,1663115586
711 dd 806359072,806359072
712 dd 452984805,452984805
713 dd 250868733,250868733
714 dd 1842533055,1842533055
715 dd 1288555905,1288555905
716 dd 336333848,336333848
717 dd 890442534,890442534
718 dd 804056259,804056259
719 dd 3781124030,3781124030
720 dd 2727843637,2727843637
721 dd 3427026056,3427026056
722 dd 957814574,957814574
723 dd 1472513171,1472513171
724 dd 4071073621,4071073621
725 dd 2189328124,2189328124
726 dd 1195195770,1195195770
727 dd 2892260552,2892260552
728 dd 3881655738,3881655738
729 dd 723065138,723065138
730 dd 2507371494,2507371494
731 dd 2690670784,2690670784
732 dd 2558624025,2558624025
733 dd 3511635870,3511635870
734 dd 2145180835,2145180835
735 dd 1713513028,1713513028
736 dd 2116692564,2116692564
737 dd 2878378043,2878378043
738 dd 2206763019,2206763019
739 dd 3393603212,3393603212
740 dd 703524551,703524551
741 dd 3552098411,3552098411
742 dd 1007948840,1007948840
743 dd 2044649127,2044649127
744 dd 3797835452,3797835452
745 dd 487262998,487262998
746 dd 1994120109,1994120109
747 dd 1004593371,1004593371
748 dd 1446130276,1446130276
749 dd 1312438900,1312438900
750 dd 503974420,503974420
751 dd 3679013266,3679013266
752 dd 168166924,168166924
753 dd 1814307912,1814307912
754 dd 3831258296,3831258296
755 dd 1573044895,1573044895
756 dd 1859376061,1859376061
757 dd 4021070915,4021070915
758 dd 2791465668,2791465668
759 dd 2828112185,2828112185
760 dd 2761266481,2761266481
761 dd 937747667,937747667
762 dd 2339994098,2339994098
763 dd 854058965,854058965
764 dd 1137232011,1137232011
765 dd 1496790894,1496790894
766 dd 3077402074,3077402074
767 dd 2358086913,2358086913
768 dd 1691735473,1691735473
769 dd 3528347292,3528347292
770 dd 3769215305,3769215305
771 dd 3027004632,3027004632
772 dd 4199962284,4199962284
773 dd 133494003,133494003
774 dd 636152527,636152527
775 dd 2942657994,2942657994
776 dd 2390391540,2390391540
777 dd 3920539207,3920539207
778 dd 403179536,403179536
779 dd 3585784431,3585784431
780 dd 2289596656,2289596656
781 dd 1864705354,1864705354
782 dd 1915629148,1915629148
783 dd 605822008,605822008
784 dd 4054230615,4054230615
785 dd 3350508659,3350508659
786 dd 1371981463,1371981463
787 dd 602466507,602466507
788 dd 2094914977,2094914977
789 dd 2624877800,2624877800
790 dd 555687742,555687742
791 dd 3712699286,3712699286
792 dd 3703422305,3703422305
793 dd 2257292045,2257292045
794 dd 2240449039,2240449039
795 dd 2423288032,2423288032
796 dd 1111375484,1111375484
797 dd 3300242801,3300242801
798 dd 2858837708,2858837708
799 dd 3628615824,3628615824
800 dd 84083462,84083462
801 dd 32962295,32962295
802 dd 302911004,302911004
803 dd 2741068226,2741068226
804 dd 1597322602,1597322602
805 dd 4183250862,4183250862
806 dd 3501832553,3501832553
807 dd 2441512471,2441512471
808 dd 1489093017,1489093017
809 dd 656219450,656219450
810 dd 3114180135,3114180135
811 dd 954327513,954327513
812 dd 335083755,335083755
813 dd 3013122091,3013122091
814 dd 856756514,856756514
815 dd 3144247762,3144247762
816 dd 1893325225,1893325225
817 dd 2307821063,2307821063
818 dd 2811532339,2811532339
819 dd 3063651117,3063651117
820 dd 572399164,572399164
821 dd 2458355477,2458355477
822 dd 552200649,552200649
823 dd 1238290055,1238290055
824 dd 4283782570,4283782570
825 dd 2015897680,2015897680
826 dd 2061492133,2061492133
827 dd 2408352771,2408352771
828 dd 4171342169,4171342169
829 dd 2156497161,2156497161
830 dd 386731290,386731290
831 dd 3669999461,3669999461
832 dd 837215959,837215959
833 dd 3326231172,3326231172
834 dd 3093850320,3093850320
835 dd 3275833730,3275833730
836 dd 2962856233,2962856233
837 dd 1999449434,1999449434
838 dd 286199582,286199582
839 dd 3417354363,3417354363
840 dd 4233385128,4233385128
841 dd 3602627437,3602627437
842 dd 974525996,974525996
843 db 99,124,119,123,242,107,111,197
844 db 48,1,103,43,254,215,171,118
845 db 202,130,201,125,250,89,71,240
846 db 173,212,162,175,156,164,114,192
847 db 183,253,147,38,54,63,247,204
848 db 52,165,229,241,113,216,49,21
849 db 4,199,35,195,24,150,5,154
850 db 7,18,128,226,235,39,178,117
851 db 9,131,44,26,27,110,90,160
852 db 82,59,214,179,41,227,47,132
853 db 83,209,0,237,32,252,177,91
854 db 106,203,190,57,74,76,88,207
855 db 208,239,170,251,67,77,51,133
856 db 69,249,2,127,80,60,159,168
857 db 81,163,64,143,146,157,56,245
858 db 188,182,218,33,16,255,243,210
859 db 205,12,19,236,95,151,68,23
860 db 196,167,126,61,100,93,25,115
861 db 96,129,79,220,34,42,144,136
862 db 70,238,184,20,222,94,11,219
863 db 224,50,58,10,73,6,36,92
864 db 194,211,172,98,145,149,228,121
865 db 231,200,55,109,141,213,78,169
866 db 108,86,244,234,101,122,174,8
867 db 186,120,37,46,28,166,180,198
868 db 232,221,116,31,75,189,139,138
869 db 112,62,181,102,72,3,246,14
870 db 97,53,87,185,134,193,29,158
871 db 225,248,152,17,105,217,142,148
872 db 155,30,135,233,206,85,40,223
873 db 140,161,137,13,191,230,66,104
874 db 65,153,45,15,176,84,187,22
875 db 99,124,119,123,242,107,111,197
876 db 48,1,103,43,254,215,171,118
877 db 202,130,201,125,250,89,71,240
878 db 173,212,162,175,156,164,114,192
879 db 183,253,147,38,54,63,247,204
880 db 52,165,229,241,113,216,49,21
881 db 4,199,35,195,24,150,5,154
882 db 7,18,128,226,235,39,178,117
883 db 9,131,44,26,27,110,90,160
884 db 82,59,214,179,41,227,47,132
885 db 83,209,0,237,32,252,177,91
886 db 106,203,190,57,74,76,88,207
887 db 208,239,170,251,67,77,51,133
888 db 69,249,2,127,80,60,159,168
889 db 81,163,64,143,146,157,56,245
890 db 188,182,218,33,16,255,243,210
891 db 205,12,19,236,95,151,68,23
892 db 196,167,126,61,100,93,25,115
893 db 96,129,79,220,34,42,144,136
894 db 70,238,184,20,222,94,11,219
895 db 224,50,58,10,73,6,36,92
896 db 194,211,172,98,145,149,228,121
897 db 231,200,55,109,141,213,78,169
898 db 108,86,244,234,101,122,174,8
899 db 186,120,37,46,28,166,180,198
900 db 232,221,116,31,75,189,139,138
901 db 112,62,181,102,72,3,246,14
902 db 97,53,87,185,134,193,29,158
903 db 225,248,152,17,105,217,142,148
904 db 155,30,135,233,206,85,40,223
905 db 140,161,137,13,191,230,66,104
906 db 65,153,45,15,176,84,187,22
907 db 99,124,119,123,242,107,111,197
908 db 48,1,103,43,254,215,171,118
909 db 202,130,201,125,250,89,71,240
910 db 173,212,162,175,156,164,114,192
911 db 183,253,147,38,54,63,247,204
912 db 52,165,229,241,113,216,49,21
913 db 4,199,35,195,24,150,5,154
914 db 7,18,128,226,235,39,178,117
915 db 9,131,44,26,27,110,90,160
916 db 82,59,214,179,41,227,47,132
917 db 83,209,0,237,32,252,177,91
918 db 106,203,190,57,74,76,88,207
919 db 208,239,170,251,67,77,51,133
920 db 69,249,2,127,80,60,159,168
921 db 81,163,64,143,146,157,56,245
922 db 188,182,218,33,16,255,243,210
923 db 205,12,19,236,95,151,68,23
924 db 196,167,126,61,100,93,25,115
925 db 96,129,79,220,34,42,144,136
926 db 70,238,184,20,222,94,11,219
927 db 224,50,58,10,73,6,36,92
928 db 194,211,172,98,145,149,228,121
929 db 231,200,55,109,141,213,78,169
930 db 108,86,244,234,101,122,174,8
931 db 186,120,37,46,28,166,180,198
932 db 232,221,116,31,75,189,139,138
933 db 112,62,181,102,72,3,246,14
934 db 97,53,87,185,134,193,29,158
935 db 225,248,152,17,105,217,142,148
936 db 155,30,135,233,206,85,40,223
937 db 140,161,137,13,191,230,66,104
938 db 65,153,45,15,176,84,187,22
939 db 99,124,119,123,242,107,111,197
940 db 48,1,103,43,254,215,171,118
941 db 202,130,201,125,250,89,71,240
942 db 173,212,162,175,156,164,114,192
943 db 183,253,147,38,54,63,247,204
944 db 52,165,229,241,113,216,49,21
945 db 4,199,35,195,24,150,5,154
946 db 7,18,128,226,235,39,178,117
947 db 9,131,44,26,27,110,90,160
948 db 82,59,214,179,41,227,47,132
949 db 83,209,0,237,32,252,177,91
950 db 106,203,190,57,74,76,88,207
951 db 208,239,170,251,67,77,51,133
952 db 69,249,2,127,80,60,159,168
953 db 81,163,64,143,146,157,56,245
954 db 188,182,218,33,16,255,243,210
955 db 205,12,19,236,95,151,68,23
956 db 196,167,126,61,100,93,25,115
957 db 96,129,79,220,34,42,144,136
958 db 70,238,184,20,222,94,11,219
959 db 224,50,58,10,73,6,36,92
960 db 194,211,172,98,145,149,228,121
961 db 231,200,55,109,141,213,78,169
962 db 108,86,244,234,101,122,174,8
963 db 186,120,37,46,28,166,180,198
964 db 232,221,116,31,75,189,139,138
965 db 112,62,181,102,72,3,246,14
966 db 97,53,87,185,134,193,29,158
967 db 225,248,152,17,105,217,142,148
968 db 155,30,135,233,206,85,40,223
969 db 140,161,137,13,191,230,66,104
970 db 65,153,45,15,176,84,187,22
971 dd 1,2,4,8
972 dd 16,32,64,128
973 dd 27,54,0,0
974 dd 0,0,0,0
975 global _asm_AES_encrypt
976 align 16
977 _asm_AES_encrypt:
978 L$_asm_AES_encrypt_begin:
979 push ebp
980 push ebx
981 push esi
982 push edi
983 mov esi,DWORD [20+esp]
984 mov edi,DWORD [28+esp]
985 mov eax,esp
986 sub esp,36
987 and esp,-64
988 lea ebx,[edi-127]
989 sub ebx,esp
990 neg ebx
991 and ebx,960
992 sub esp,ebx
993 add esp,4
994 mov DWORD [28+esp],eax
995 call L$004pic_point
996 L$004pic_point:
997 pop ebp
998 lea eax,[_OPENSSL_ia32cap_P]
999 lea ebp,[(L$AES_Te-L$004pic_point)+ebp]
1000 lea ebx,[764+esp]
1001 sub ebx,ebp
1002 and ebx,768
1003 lea ebp,[2176+ebx*1+ebp]
1004 bt DWORD [eax],25
1005 jnc NEAR L$005x86
1006 movq mm0,[esi]
1007 movq mm4,[8+esi]
1008 call __sse_AES_encrypt_compact
1009 mov esp,DWORD [28+esp]
1010 mov esi,DWORD [24+esp]
1011 movq [esi],mm0
1012 movq [8+esi],mm4
1013 emms
1014 pop edi
1015 pop esi
1016 pop ebx
1017 pop ebp
1019 align 16
1020 L$005x86:
1021 mov DWORD [24+esp],ebp
1022 mov eax,DWORD [esi]
1023 mov ebx,DWORD [4+esi]
1024 mov ecx,DWORD [8+esi]
1025 mov edx,DWORD [12+esi]
1026 call __x86_AES_encrypt_compact
1027 mov esp,DWORD [28+esp]
1028 mov esi,DWORD [24+esp]
1029 mov DWORD [esi],eax
1030 mov DWORD [4+esi],ebx
1031 mov DWORD [8+esi],ecx
1032 mov DWORD [12+esi],edx
1033 pop edi
1034 pop esi
1035 pop ebx
1036 pop ebp
1038 align 16
1039 __x86_AES_decrypt_compact:
1040 mov DWORD [20+esp],edi
1041 xor eax,DWORD [edi]
1042 xor ebx,DWORD [4+edi]
1043 xor ecx,DWORD [8+edi]
1044 xor edx,DWORD [12+edi]
1045 mov esi,DWORD [240+edi]
1046 lea esi,[esi*1+esi-2]
1047 lea esi,[esi*8+edi]
1048 mov DWORD [24+esp],esi
1049 mov edi,DWORD [ebp-128]
1050 mov esi,DWORD [ebp-96]
1051 mov edi,DWORD [ebp-64]
1052 mov esi,DWORD [ebp-32]
1053 mov edi,DWORD [ebp]
1054 mov esi,DWORD [32+ebp]
1055 mov edi,DWORD [64+ebp]
1056 mov esi,DWORD [96+ebp]
1057 align 16
1058 L$006loop:
1059 mov esi,eax
1060 and esi,255
1061 movzx esi,BYTE [esi*1+ebp-128]
1062 movzx edi,dh
1063 movzx edi,BYTE [edi*1+ebp-128]
1064 shl edi,8
1065 xor esi,edi
1066 mov edi,ecx
1067 shr edi,16
1068 and edi,255
1069 movzx edi,BYTE [edi*1+ebp-128]
1070 shl edi,16
1071 xor esi,edi
1072 mov edi,ebx
1073 shr edi,24
1074 movzx edi,BYTE [edi*1+ebp-128]
1075 shl edi,24
1076 xor esi,edi
1077 mov DWORD [4+esp],esi
1078 mov esi,ebx
1079 and esi,255
1080 movzx esi,BYTE [esi*1+ebp-128]
1081 movzx edi,ah
1082 movzx edi,BYTE [edi*1+ebp-128]
1083 shl edi,8
1084 xor esi,edi
1085 mov edi,edx
1086 shr edi,16
1087 and edi,255
1088 movzx edi,BYTE [edi*1+ebp-128]
1089 shl edi,16
1090 xor esi,edi
1091 mov edi,ecx
1092 shr edi,24
1093 movzx edi,BYTE [edi*1+ebp-128]
1094 shl edi,24
1095 xor esi,edi
1096 mov DWORD [8+esp],esi
1097 mov esi,ecx
1098 and esi,255
1099 movzx esi,BYTE [esi*1+ebp-128]
1100 movzx edi,bh
1101 movzx edi,BYTE [edi*1+ebp-128]
1102 shl edi,8
1103 xor esi,edi
1104 mov edi,eax
1105 shr edi,16
1106 and edi,255
1107 movzx edi,BYTE [edi*1+ebp-128]
1108 shl edi,16
1109 xor esi,edi
1110 mov edi,edx
1111 shr edi,24
1112 movzx edi,BYTE [edi*1+ebp-128]
1113 shl edi,24
1114 xor esi,edi
1115 and edx,255
1116 movzx edx,BYTE [edx*1+ebp-128]
1117 movzx ecx,ch
1118 movzx ecx,BYTE [ecx*1+ebp-128]
1119 shl ecx,8
1120 xor edx,ecx
1121 mov ecx,esi
1122 shr ebx,16
1123 and ebx,255
1124 movzx ebx,BYTE [ebx*1+ebp-128]
1125 shl ebx,16
1126 xor edx,ebx
1127 shr eax,24
1128 movzx eax,BYTE [eax*1+ebp-128]
1129 shl eax,24
1130 xor edx,eax
1131 mov edi,2155905152
1132 and edi,ecx
1133 mov esi,edi
1134 shr edi,7
1135 lea eax,[ecx*1+ecx]
1136 sub esi,edi
1137 and eax,4278124286
1138 and esi,454761243
1139 xor eax,esi
1140 mov edi,2155905152
1141 and edi,eax
1142 mov esi,edi
1143 shr edi,7
1144 lea ebx,[eax*1+eax]
1145 sub esi,edi
1146 and ebx,4278124286
1147 and esi,454761243
1148 xor eax,ecx
1149 xor ebx,esi
1150 mov edi,2155905152
1151 and edi,ebx
1152 mov esi,edi
1153 shr edi,7
1154 lea ebp,[ebx*1+ebx]
1155 sub esi,edi
1156 and ebp,4278124286
1157 and esi,454761243
1158 xor ebx,ecx
1159 rol ecx,8
1160 xor ebp,esi
1161 xor ecx,eax
1162 xor eax,ebp
1163 xor ecx,ebx
1164 xor ebx,ebp
1165 rol eax,24
1166 xor ecx,ebp
1167 rol ebx,16
1168 xor ecx,eax
1169 rol ebp,8
1170 xor ecx,ebx
1171 mov eax,DWORD [4+esp]
1172 xor ecx,ebp
1173 mov DWORD [12+esp],ecx
1174 mov edi,2155905152
1175 and edi,edx
1176 mov esi,edi
1177 shr edi,7
1178 lea ebx,[edx*1+edx]
1179 sub esi,edi
1180 and ebx,4278124286
1181 and esi,454761243
1182 xor ebx,esi
1183 mov edi,2155905152
1184 and edi,ebx
1185 mov esi,edi
1186 shr edi,7
1187 lea ecx,[ebx*1+ebx]
1188 sub esi,edi
1189 and ecx,4278124286
1190 and esi,454761243
1191 xor ebx,edx
1192 xor ecx,esi
1193 mov edi,2155905152
1194 and edi,ecx
1195 mov esi,edi
1196 shr edi,7
1197 lea ebp,[ecx*1+ecx]
1198 sub esi,edi
1199 and ebp,4278124286
1200 and esi,454761243
1201 xor ecx,edx
1202 rol edx,8
1203 xor ebp,esi
1204 xor edx,ebx
1205 xor ebx,ebp
1206 xor edx,ecx
1207 xor ecx,ebp
1208 rol ebx,24
1209 xor edx,ebp
1210 rol ecx,16
1211 xor edx,ebx
1212 rol ebp,8
1213 xor edx,ecx
1214 mov ebx,DWORD [8+esp]
1215 xor edx,ebp
1216 mov DWORD [16+esp],edx
1217 mov edi,2155905152
1218 and edi,eax
1219 mov esi,edi
1220 shr edi,7
1221 lea ecx,[eax*1+eax]
1222 sub esi,edi
1223 and ecx,4278124286
1224 and esi,454761243
1225 xor ecx,esi
1226 mov edi,2155905152
1227 and edi,ecx
1228 mov esi,edi
1229 shr edi,7
1230 lea edx,[ecx*1+ecx]
1231 sub esi,edi
1232 and edx,4278124286
1233 and esi,454761243
1234 xor ecx,eax
1235 xor edx,esi
1236 mov edi,2155905152
1237 and edi,edx
1238 mov esi,edi
1239 shr edi,7
1240 lea ebp,[edx*1+edx]
1241 sub esi,edi
1242 and ebp,4278124286
1243 and esi,454761243
1244 xor edx,eax
1245 rol eax,8
1246 xor ebp,esi
1247 xor eax,ecx
1248 xor ecx,ebp
1249 xor eax,edx
1250 xor edx,ebp
1251 rol ecx,24
1252 xor eax,ebp
1253 rol edx,16
1254 xor eax,ecx
1255 rol ebp,8
1256 xor eax,edx
1257 xor eax,ebp
1258 mov edi,2155905152
1259 and edi,ebx
1260 mov esi,edi
1261 shr edi,7
1262 lea ecx,[ebx*1+ebx]
1263 sub esi,edi
1264 and ecx,4278124286
1265 and esi,454761243
1266 xor ecx,esi
1267 mov edi,2155905152
1268 and edi,ecx
1269 mov esi,edi
1270 shr edi,7
1271 lea edx,[ecx*1+ecx]
1272 sub esi,edi
1273 and edx,4278124286
1274 and esi,454761243
1275 xor ecx,ebx
1276 xor edx,esi
1277 mov edi,2155905152
1278 and edi,edx
1279 mov esi,edi
1280 shr edi,7
1281 lea ebp,[edx*1+edx]
1282 sub esi,edi
1283 and ebp,4278124286
1284 and esi,454761243
1285 xor edx,ebx
1286 rol ebx,8
1287 xor ebp,esi
1288 xor ebx,ecx
1289 xor ecx,ebp
1290 xor ebx,edx
1291 xor edx,ebp
1292 rol ecx,24
1293 xor ebx,ebp
1294 rol edx,16
1295 xor ebx,ecx
1296 rol ebp,8
1297 xor ebx,edx
1298 mov ecx,DWORD [12+esp]
1299 xor ebx,ebp
1300 mov edx,DWORD [16+esp]
1301 mov edi,DWORD [20+esp]
1302 mov ebp,DWORD [28+esp]
1303 add edi,16
1304 xor eax,DWORD [edi]
1305 xor ebx,DWORD [4+edi]
1306 xor ecx,DWORD [8+edi]
1307 xor edx,DWORD [12+edi]
1308 cmp edi,DWORD [24+esp]
1309 mov DWORD [20+esp],edi
1310 jb NEAR L$006loop
1311 mov esi,eax
1312 and esi,255
1313 movzx esi,BYTE [esi*1+ebp-128]
1314 movzx edi,dh
1315 movzx edi,BYTE [edi*1+ebp-128]
1316 shl edi,8
1317 xor esi,edi
1318 mov edi,ecx
1319 shr edi,16
1320 and edi,255
1321 movzx edi,BYTE [edi*1+ebp-128]
1322 shl edi,16
1323 xor esi,edi
1324 mov edi,ebx
1325 shr edi,24
1326 movzx edi,BYTE [edi*1+ebp-128]
1327 shl edi,24
1328 xor esi,edi
1329 mov DWORD [4+esp],esi
1330 mov esi,ebx
1331 and esi,255
1332 movzx esi,BYTE [esi*1+ebp-128]
1333 movzx edi,ah
1334 movzx edi,BYTE [edi*1+ebp-128]
1335 shl edi,8
1336 xor esi,edi
1337 mov edi,edx
1338 shr edi,16
1339 and edi,255
1340 movzx edi,BYTE [edi*1+ebp-128]
1341 shl edi,16
1342 xor esi,edi
1343 mov edi,ecx
1344 shr edi,24
1345 movzx edi,BYTE [edi*1+ebp-128]
1346 shl edi,24
1347 xor esi,edi
1348 mov DWORD [8+esp],esi
1349 mov esi,ecx
1350 and esi,255
1351 movzx esi,BYTE [esi*1+ebp-128]
1352 movzx edi,bh
1353 movzx edi,BYTE [edi*1+ebp-128]
1354 shl edi,8
1355 xor esi,edi
1356 mov edi,eax
1357 shr edi,16
1358 and edi,255
1359 movzx edi,BYTE [edi*1+ebp-128]
1360 shl edi,16
1361 xor esi,edi
1362 mov edi,edx
1363 shr edi,24
1364 movzx edi,BYTE [edi*1+ebp-128]
1365 shl edi,24
1366 xor esi,edi
1367 mov edi,DWORD [20+esp]
1368 and edx,255
1369 movzx edx,BYTE [edx*1+ebp-128]
1370 movzx ecx,ch
1371 movzx ecx,BYTE [ecx*1+ebp-128]
1372 shl ecx,8
1373 xor edx,ecx
1374 mov ecx,esi
1375 shr ebx,16
1376 and ebx,255
1377 movzx ebx,BYTE [ebx*1+ebp-128]
1378 shl ebx,16
1379 xor edx,ebx
1380 mov ebx,DWORD [8+esp]
1381 shr eax,24
1382 movzx eax,BYTE [eax*1+ebp-128]
1383 shl eax,24
1384 xor edx,eax
1385 mov eax,DWORD [4+esp]
1386 xor eax,DWORD [16+edi]
1387 xor ebx,DWORD [20+edi]
1388 xor ecx,DWORD [24+edi]
1389 xor edx,DWORD [28+edi]
1391 align 16
1392 __sse_AES_decrypt_compact:
1393 pxor mm0,[edi]
1394 pxor mm4,[8+edi]
1395 mov esi,DWORD [240+edi]
1396 lea esi,[esi*1+esi-2]
1397 lea esi,[esi*8+edi]
1398 mov DWORD [24+esp],esi
1399 mov eax,454761243
1400 mov DWORD [8+esp],eax
1401 mov DWORD [12+esp],eax
1402 mov eax,DWORD [ebp-128]
1403 mov ebx,DWORD [ebp-96]
1404 mov ecx,DWORD [ebp-64]
1405 mov edx,DWORD [ebp-32]
1406 mov eax,DWORD [ebp]
1407 mov ebx,DWORD [32+ebp]
1408 mov ecx,DWORD [64+ebp]
1409 mov edx,DWORD [96+ebp]
1410 align 16
1411 L$007loop:
1412 pshufw mm1,mm0,12
1413 pshufw mm5,mm4,9
1414 movd eax,mm1
1415 movd ebx,mm5
1416 mov DWORD [20+esp],edi
1417 movzx esi,al
1418 movzx edx,ah
1419 pshufw mm2,mm0,6
1420 movzx ecx,BYTE [esi*1+ebp-128]
1421 movzx edi,bl
1422 movzx edx,BYTE [edx*1+ebp-128]
1423 shr eax,16
1424 shl edx,8
1425 movzx esi,BYTE [edi*1+ebp-128]
1426 movzx edi,bh
1427 shl esi,16
1428 pshufw mm6,mm4,3
1429 or ecx,esi
1430 movzx esi,BYTE [edi*1+ebp-128]
1431 movzx edi,ah
1432 shl esi,24
1433 shr ebx,16
1434 or edx,esi
1435 movzx esi,BYTE [edi*1+ebp-128]
1436 movzx edi,bh
1437 shl esi,24
1438 or ecx,esi
1439 movzx esi,BYTE [edi*1+ebp-128]
1440 movzx edi,al
1441 shl esi,8
1442 movd eax,mm2
1443 or ecx,esi
1444 movzx esi,BYTE [edi*1+ebp-128]
1445 movzx edi,bl
1446 shl esi,16
1447 movd ebx,mm6
1448 movd mm0,ecx
1449 movzx ecx,BYTE [edi*1+ebp-128]
1450 movzx edi,al
1451 or ecx,esi
1452 movzx esi,BYTE [edi*1+ebp-128]
1453 movzx edi,bl
1454 or edx,esi
1455 movzx esi,BYTE [edi*1+ebp-128]
1456 movzx edi,ah
1457 shl esi,16
1458 shr eax,16
1459 or edx,esi
1460 movzx esi,BYTE [edi*1+ebp-128]
1461 movzx edi,bh
1462 shr ebx,16
1463 shl esi,8
1464 movd mm1,edx
1465 movzx edx,BYTE [edi*1+ebp-128]
1466 movzx edi,bh
1467 shl edx,24
1468 and ebx,255
1469 or edx,esi
1470 punpckldq mm0,mm1
1471 movzx esi,BYTE [edi*1+ebp-128]
1472 movzx edi,al
1473 shl esi,8
1474 movzx eax,ah
1475 movzx ebx,BYTE [ebx*1+ebp-128]
1476 or ecx,esi
1477 movzx esi,BYTE [edi*1+ebp-128]
1478 or edx,ebx
1479 shl esi,16
1480 movzx eax,BYTE [eax*1+ebp-128]
1481 or edx,esi
1482 shl eax,24
1483 or ecx,eax
1484 mov edi,DWORD [20+esp]
1485 movd mm4,edx
1486 movd mm5,ecx
1487 punpckldq mm4,mm5
1488 add edi,16
1489 cmp edi,DWORD [24+esp]
1490 ja NEAR L$008out
1491 movq mm3,mm0
1492 movq mm7,mm4
1493 pshufw mm2,mm0,228
1494 pshufw mm6,mm4,228
1495 movq mm1,mm0
1496 movq mm5,mm4
1497 pshufw mm0,mm0,177
1498 pshufw mm4,mm4,177
1499 pslld mm2,8
1500 pslld mm6,8
1501 psrld mm3,8
1502 psrld mm7,8
1503 pxor mm0,mm2
1504 pxor mm4,mm6
1505 pxor mm0,mm3
1506 pxor mm4,mm7
1507 pslld mm2,16
1508 pslld mm6,16
1509 psrld mm3,16
1510 psrld mm7,16
1511 pxor mm0,mm2
1512 pxor mm4,mm6
1513 pxor mm0,mm3
1514 pxor mm4,mm7
1515 movq mm3,[8+esp]
1516 pxor mm2,mm2
1517 pxor mm6,mm6
1518 pcmpgtb mm2,mm1
1519 pcmpgtb mm6,mm5
1520 pand mm2,mm3
1521 pand mm6,mm3
1522 paddb mm1,mm1
1523 paddb mm5,mm5
1524 pxor mm1,mm2
1525 pxor mm5,mm6
1526 movq mm3,mm1
1527 movq mm7,mm5
1528 movq mm2,mm1
1529 movq mm6,mm5
1530 pxor mm0,mm1
1531 pxor mm4,mm5
1532 pslld mm3,24
1533 pslld mm7,24
1534 psrld mm2,8
1535 psrld mm6,8
1536 pxor mm0,mm3
1537 pxor mm4,mm7
1538 pxor mm0,mm2
1539 pxor mm4,mm6
1540 movq mm2,[8+esp]
1541 pxor mm3,mm3
1542 pxor mm7,mm7
1543 pcmpgtb mm3,mm1
1544 pcmpgtb mm7,mm5
1545 pand mm3,mm2
1546 pand mm7,mm2
1547 paddb mm1,mm1
1548 paddb mm5,mm5
1549 pxor mm1,mm3
1550 pxor mm5,mm7
1551 pshufw mm3,mm1,177
1552 pshufw mm7,mm5,177
1553 pxor mm0,mm1
1554 pxor mm4,mm5
1555 pxor mm0,mm3
1556 pxor mm4,mm7
1557 pxor mm3,mm3
1558 pxor mm7,mm7
1559 pcmpgtb mm3,mm1
1560 pcmpgtb mm7,mm5
1561 pand mm3,mm2
1562 pand mm7,mm2
1563 paddb mm1,mm1
1564 paddb mm5,mm5
1565 pxor mm1,mm3
1566 pxor mm5,mm7
1567 pxor mm0,mm1
1568 pxor mm4,mm5
1569 movq mm3,mm1
1570 movq mm7,mm5
1571 pshufw mm2,mm1,177
1572 pshufw mm6,mm5,177
1573 pxor mm0,mm2
1574 pxor mm4,mm6
1575 pslld mm1,8
1576 pslld mm5,8
1577 psrld mm3,8
1578 psrld mm7,8
1579 movq mm2,[edi]
1580 movq mm6,[8+edi]
1581 pxor mm0,mm1
1582 pxor mm4,mm5
1583 pxor mm0,mm3
1584 pxor mm4,mm7
1585 mov eax,DWORD [ebp-128]
1586 pslld mm1,16
1587 pslld mm5,16
1588 mov ebx,DWORD [ebp-64]
1589 psrld mm3,16
1590 psrld mm7,16
1591 mov ecx,DWORD [ebp]
1592 pxor mm0,mm1
1593 pxor mm4,mm5
1594 mov edx,DWORD [64+ebp]
1595 pxor mm0,mm3
1596 pxor mm4,mm7
1597 pxor mm0,mm2
1598 pxor mm4,mm6
1599 jmp NEAR L$007loop
1600 align 16
1601 L$008out:
1602 pxor mm0,[edi]
1603 pxor mm4,[8+edi]
1605 align 16
1606 __x86_AES_decrypt:
1607 mov DWORD [20+esp],edi
1608 xor eax,DWORD [edi]
1609 xor ebx,DWORD [4+edi]
1610 xor ecx,DWORD [8+edi]
1611 xor edx,DWORD [12+edi]
1612 mov esi,DWORD [240+edi]
1613 lea esi,[esi*1+esi-2]
1614 lea esi,[esi*8+edi]
1615 mov DWORD [24+esp],esi
1616 align 16
1617 L$009loop:
1618 mov esi,eax
1619 and esi,255
1620 mov esi,DWORD [esi*8+ebp]
1621 movzx edi,dh
1622 xor esi,DWORD [3+edi*8+ebp]
1623 mov edi,ecx
1624 shr edi,16
1625 and edi,255
1626 xor esi,DWORD [2+edi*8+ebp]
1627 mov edi,ebx
1628 shr edi,24
1629 xor esi,DWORD [1+edi*8+ebp]
1630 mov DWORD [4+esp],esi
1631 mov esi,ebx
1632 and esi,255
1633 mov esi,DWORD [esi*8+ebp]
1634 movzx edi,ah
1635 xor esi,DWORD [3+edi*8+ebp]
1636 mov edi,edx
1637 shr edi,16
1638 and edi,255
1639 xor esi,DWORD [2+edi*8+ebp]
1640 mov edi,ecx
1641 shr edi,24
1642 xor esi,DWORD [1+edi*8+ebp]
1643 mov DWORD [8+esp],esi
1644 mov esi,ecx
1645 and esi,255
1646 mov esi,DWORD [esi*8+ebp]
1647 movzx edi,bh
1648 xor esi,DWORD [3+edi*8+ebp]
1649 mov edi,eax
1650 shr edi,16
1651 and edi,255
1652 xor esi,DWORD [2+edi*8+ebp]
1653 mov edi,edx
1654 shr edi,24
1655 xor esi,DWORD [1+edi*8+ebp]
1656 mov edi,DWORD [20+esp]
1657 and edx,255
1658 mov edx,DWORD [edx*8+ebp]
1659 movzx ecx,ch
1660 xor edx,DWORD [3+ecx*8+ebp]
1661 mov ecx,esi
1662 shr ebx,16
1663 and ebx,255
1664 xor edx,DWORD [2+ebx*8+ebp]
1665 mov ebx,DWORD [8+esp]
1666 shr eax,24
1667 xor edx,DWORD [1+eax*8+ebp]
1668 mov eax,DWORD [4+esp]
1669 add edi,16
1670 xor eax,DWORD [edi]
1671 xor ebx,DWORD [4+edi]
1672 xor ecx,DWORD [8+edi]
1673 xor edx,DWORD [12+edi]
1674 cmp edi,DWORD [24+esp]
1675 mov DWORD [20+esp],edi
1676 jb NEAR L$009loop
1677 lea ebp,[2176+ebp]
1678 mov edi,DWORD [ebp-128]
1679 mov esi,DWORD [ebp-96]
1680 mov edi,DWORD [ebp-64]
1681 mov esi,DWORD [ebp-32]
1682 mov edi,DWORD [ebp]
1683 mov esi,DWORD [32+ebp]
1684 mov edi,DWORD [64+ebp]
1685 mov esi,DWORD [96+ebp]
1686 lea ebp,[ebp-128]
1687 mov esi,eax
1688 and esi,255
1689 movzx esi,BYTE [esi*1+ebp]
1690 movzx edi,dh
1691 movzx edi,BYTE [edi*1+ebp]
1692 shl edi,8
1693 xor esi,edi
1694 mov edi,ecx
1695 shr edi,16
1696 and edi,255
1697 movzx edi,BYTE [edi*1+ebp]
1698 shl edi,16
1699 xor esi,edi
1700 mov edi,ebx
1701 shr edi,24
1702 movzx edi,BYTE [edi*1+ebp]
1703 shl edi,24
1704 xor esi,edi
1705 mov DWORD [4+esp],esi
1706 mov esi,ebx
1707 and esi,255
1708 movzx esi,BYTE [esi*1+ebp]
1709 movzx edi,ah
1710 movzx edi,BYTE [edi*1+ebp]
1711 shl edi,8
1712 xor esi,edi
1713 mov edi,edx
1714 shr edi,16
1715 and edi,255
1716 movzx edi,BYTE [edi*1+ebp]
1717 shl edi,16
1718 xor esi,edi
1719 mov edi,ecx
1720 shr edi,24
1721 movzx edi,BYTE [edi*1+ebp]
1722 shl edi,24
1723 xor esi,edi
1724 mov DWORD [8+esp],esi
1725 mov esi,ecx
1726 and esi,255
1727 movzx esi,BYTE [esi*1+ebp]
1728 movzx edi,bh
1729 movzx edi,BYTE [edi*1+ebp]
1730 shl edi,8
1731 xor esi,edi
1732 mov edi,eax
1733 shr edi,16
1734 and edi,255
1735 movzx edi,BYTE [edi*1+ebp]
1736 shl edi,16
1737 xor esi,edi
1738 mov edi,edx
1739 shr edi,24
1740 movzx edi,BYTE [edi*1+ebp]
1741 shl edi,24
1742 xor esi,edi
1743 mov edi,DWORD [20+esp]
1744 and edx,255
1745 movzx edx,BYTE [edx*1+ebp]
1746 movzx ecx,ch
1747 movzx ecx,BYTE [ecx*1+ebp]
1748 shl ecx,8
1749 xor edx,ecx
1750 mov ecx,esi
1751 shr ebx,16
1752 and ebx,255
1753 movzx ebx,BYTE [ebx*1+ebp]
1754 shl ebx,16
1755 xor edx,ebx
1756 mov ebx,DWORD [8+esp]
1757 shr eax,24
1758 movzx eax,BYTE [eax*1+ebp]
1759 shl eax,24
1760 xor edx,eax
1761 mov eax,DWORD [4+esp]
1762 lea ebp,[ebp-2048]
1763 add edi,16
1764 xor eax,DWORD [edi]
1765 xor ebx,DWORD [4+edi]
1766 xor ecx,DWORD [8+edi]
1767 xor edx,DWORD [12+edi]
1769 align 64
1770 L$AES_Td:
1771 dd 1353184337,1353184337
1772 dd 1399144830,1399144830
1773 dd 3282310938,3282310938
1774 dd 2522752826,2522752826
1775 dd 3412831035,3412831035
1776 dd 4047871263,4047871263
1777 dd 2874735276,2874735276
1778 dd 2466505547,2466505547
1779 dd 1442459680,1442459680
1780 dd 4134368941,4134368941
1781 dd 2440481928,2440481928
1782 dd 625738485,625738485
1783 dd 4242007375,4242007375
1784 dd 3620416197,3620416197
1785 dd 2151953702,2151953702
1786 dd 2409849525,2409849525
1787 dd 1230680542,1230680542
1788 dd 1729870373,1729870373
1789 dd 2551114309,2551114309
1790 dd 3787521629,3787521629
1791 dd 41234371,41234371
1792 dd 317738113,317738113
1793 dd 2744600205,2744600205
1794 dd 3338261355,3338261355
1795 dd 3881799427,3881799427
1796 dd 2510066197,2510066197
1797 dd 3950669247,3950669247
1798 dd 3663286933,3663286933
1799 dd 763608788,763608788
1800 dd 3542185048,3542185048
1801 dd 694804553,694804553
1802 dd 1154009486,1154009486
1803 dd 1787413109,1787413109
1804 dd 2021232372,2021232372
1805 dd 1799248025,1799248025
1806 dd 3715217703,3715217703
1807 dd 3058688446,3058688446
1808 dd 397248752,397248752
1809 dd 1722556617,1722556617
1810 dd 3023752829,3023752829
1811 dd 407560035,407560035
1812 dd 2184256229,2184256229
1813 dd 1613975959,1613975959
1814 dd 1165972322,1165972322
1815 dd 3765920945,3765920945
1816 dd 2226023355,2226023355
1817 dd 480281086,480281086
1818 dd 2485848313,2485848313
1819 dd 1483229296,1483229296
1820 dd 436028815,436028815
1821 dd 2272059028,2272059028
1822 dd 3086515026,3086515026
1823 dd 601060267,601060267
1824 dd 3791801202,3791801202
1825 dd 1468997603,1468997603
1826 dd 715871590,715871590
1827 dd 120122290,120122290
1828 dd 63092015,63092015
1829 dd 2591802758,2591802758
1830 dd 2768779219,2768779219
1831 dd 4068943920,4068943920
1832 dd 2997206819,2997206819
1833 dd 3127509762,3127509762
1834 dd 1552029421,1552029421
1835 dd 723308426,723308426
1836 dd 2461301159,2461301159
1837 dd 4042393587,4042393587
1838 dd 2715969870,2715969870
1839 dd 3455375973,3455375973
1840 dd 3586000134,3586000134
1841 dd 526529745,526529745
1842 dd 2331944644,2331944644
1843 dd 2639474228,2639474228
1844 dd 2689987490,2689987490
1845 dd 853641733,853641733
1846 dd 1978398372,1978398372
1847 dd 971801355,971801355
1848 dd 2867814464,2867814464
1849 dd 111112542,111112542
1850 dd 1360031421,1360031421
1851 dd 4186579262,4186579262
1852 dd 1023860118,1023860118
1853 dd 2919579357,2919579357
1854 dd 1186850381,1186850381
1855 dd 3045938321,3045938321
1856 dd 90031217,90031217
1857 dd 1876166148,1876166148
1858 dd 4279586912,4279586912
1859 dd 620468249,620468249
1860 dd 2548678102,2548678102
1861 dd 3426959497,3426959497
1862 dd 2006899047,2006899047
1863 dd 3175278768,3175278768
1864 dd 2290845959,2290845959
1865 dd 945494503,945494503
1866 dd 3689859193,3689859193
1867 dd 1191869601,1191869601
1868 dd 3910091388,3910091388
1869 dd 3374220536,3374220536
1870 dd 0,0
1871 dd 2206629897,2206629897
1872 dd 1223502642,1223502642
1873 dd 2893025566,2893025566
1874 dd 1316117100,1316117100
1875 dd 4227796733,4227796733
1876 dd 1446544655,1446544655
1877 dd 517320253,517320253
1878 dd 658058550,658058550
1879 dd 1691946762,1691946762
1880 dd 564550760,564550760
1881 dd 3511966619,3511966619
1882 dd 976107044,976107044
1883 dd 2976320012,2976320012
1884 dd 266819475,266819475
1885 dd 3533106868,3533106868
1886 dd 2660342555,2660342555
1887 dd 1338359936,1338359936
1888 dd 2720062561,2720062561
1889 dd 1766553434,1766553434
1890 dd 370807324,370807324
1891 dd 179999714,179999714
1892 dd 3844776128,3844776128
1893 dd 1138762300,1138762300
1894 dd 488053522,488053522
1895 dd 185403662,185403662
1896 dd 2915535858,2915535858
1897 dd 3114841645,3114841645
1898 dd 3366526484,3366526484
1899 dd 2233069911,2233069911
1900 dd 1275557295,1275557295
1901 dd 3151862254,3151862254
1902 dd 4250959779,4250959779
1903 dd 2670068215,2670068215
1904 dd 3170202204,3170202204
1905 dd 3309004356,3309004356
1906 dd 880737115,880737115
1907 dd 1982415755,1982415755
1908 dd 3703972811,3703972811
1909 dd 1761406390,1761406390
1910 dd 1676797112,1676797112
1911 dd 3403428311,3403428311
1912 dd 277177154,277177154
1913 dd 1076008723,1076008723
1914 dd 538035844,538035844
1915 dd 2099530373,2099530373
1916 dd 4164795346,4164795346
1917 dd 288553390,288553390
1918 dd 1839278535,1839278535
1919 dd 1261411869,1261411869
1920 dd 4080055004,4080055004
1921 dd 3964831245,3964831245
1922 dd 3504587127,3504587127
1923 dd 1813426987,1813426987
1924 dd 2579067049,2579067049
1925 dd 4199060497,4199060497
1926 dd 577038663,577038663
1927 dd 3297574056,3297574056
1928 dd 440397984,440397984
1929 dd 3626794326,3626794326
1930 dd 4019204898,4019204898
1931 dd 3343796615,3343796615
1932 dd 3251714265,3251714265
1933 dd 4272081548,4272081548
1934 dd 906744984,906744984
1935 dd 3481400742,3481400742
1936 dd 685669029,685669029
1937 dd 646887386,646887386
1938 dd 2764025151,2764025151
1939 dd 3835509292,3835509292
1940 dd 227702864,227702864
1941 dd 2613862250,2613862250
1942 dd 1648787028,1648787028
1943 dd 3256061430,3256061430
1944 dd 3904428176,3904428176
1945 dd 1593260334,1593260334
1946 dd 4121936770,4121936770
1947 dd 3196083615,3196083615
1948 dd 2090061929,2090061929
1949 dd 2838353263,2838353263
1950 dd 3004310991,3004310991
1951 dd 999926984,999926984
1952 dd 2809993232,2809993232
1953 dd 1852021992,1852021992
1954 dd 2075868123,2075868123
1955 dd 158869197,158869197
1956 dd 4095236462,4095236462
1957 dd 28809964,28809964
1958 dd 2828685187,2828685187
1959 dd 1701746150,1701746150
1960 dd 2129067946,2129067946
1961 dd 147831841,147831841
1962 dd 3873969647,3873969647
1963 dd 3650873274,3650873274
1964 dd 3459673930,3459673930
1965 dd 3557400554,3557400554
1966 dd 3598495785,3598495785
1967 dd 2947720241,2947720241
1968 dd 824393514,824393514
1969 dd 815048134,815048134
1970 dd 3227951669,3227951669
1971 dd 935087732,935087732
1972 dd 2798289660,2798289660
1973 dd 2966458592,2966458592
1974 dd 366520115,366520115
1975 dd 1251476721,1251476721
1976 dd 4158319681,4158319681
1977 dd 240176511,240176511
1978 dd 804688151,804688151
1979 dd 2379631990,2379631990
1980 dd 1303441219,1303441219
1981 dd 1414376140,1414376140
1982 dd 3741619940,3741619940
1983 dd 3820343710,3820343710
1984 dd 461924940,461924940
1985 dd 3089050817,3089050817
1986 dd 2136040774,2136040774
1987 dd 82468509,82468509
1988 dd 1563790337,1563790337
1989 dd 1937016826,1937016826
1990 dd 776014843,776014843
1991 dd 1511876531,1511876531
1992 dd 1389550482,1389550482
1993 dd 861278441,861278441
1994 dd 323475053,323475053
1995 dd 2355222426,2355222426
1996 dd 2047648055,2047648055
1997 dd 2383738969,2383738969
1998 dd 2302415851,2302415851
1999 dd 3995576782,3995576782
2000 dd 902390199,902390199
2001 dd 3991215329,3991215329
2002 dd 1018251130,1018251130
2003 dd 1507840668,1507840668
2004 dd 1064563285,1064563285
2005 dd 2043548696,2043548696
2006 dd 3208103795,3208103795
2007 dd 3939366739,3939366739
2008 dd 1537932639,1537932639
2009 dd 342834655,342834655
2010 dd 2262516856,2262516856
2011 dd 2180231114,2180231114
2012 dd 1053059257,1053059257
2013 dd 741614648,741614648
2014 dd 1598071746,1598071746
2015 dd 1925389590,1925389590
2016 dd 203809468,203809468
2017 dd 2336832552,2336832552
2018 dd 1100287487,1100287487
2019 dd 1895934009,1895934009
2020 dd 3736275976,3736275976
2021 dd 2632234200,2632234200
2022 dd 2428589668,2428589668
2023 dd 1636092795,1636092795
2024 dd 1890988757,1890988757
2025 dd 1952214088,1952214088
2026 dd 1113045200,1113045200
2027 db 82,9,106,213,48,54,165,56
2028 db 191,64,163,158,129,243,215,251
2029 db 124,227,57,130,155,47,255,135
2030 db 52,142,67,68,196,222,233,203
2031 db 84,123,148,50,166,194,35,61
2032 db 238,76,149,11,66,250,195,78
2033 db 8,46,161,102,40,217,36,178
2034 db 118,91,162,73,109,139,209,37
2035 db 114,248,246,100,134,104,152,22
2036 db 212,164,92,204,93,101,182,146
2037 db 108,112,72,80,253,237,185,218
2038 db 94,21,70,87,167,141,157,132
2039 db 144,216,171,0,140,188,211,10
2040 db 247,228,88,5,184,179,69,6
2041 db 208,44,30,143,202,63,15,2
2042 db 193,175,189,3,1,19,138,107
2043 db 58,145,17,65,79,103,220,234
2044 db 151,242,207,206,240,180,230,115
2045 db 150,172,116,34,231,173,53,133
2046 db 226,249,55,232,28,117,223,110
2047 db 71,241,26,113,29,41,197,137
2048 db 111,183,98,14,170,24,190,27
2049 db 252,86,62,75,198,210,121,32
2050 db 154,219,192,254,120,205,90,244
2051 db 31,221,168,51,136,7,199,49
2052 db 177,18,16,89,39,128,236,95
2053 db 96,81,127,169,25,181,74,13
2054 db 45,229,122,159,147,201,156,239
2055 db 160,224,59,77,174,42,245,176
2056 db 200,235,187,60,131,83,153,97
2057 db 23,43,4,126,186,119,214,38
2058 db 225,105,20,99,85,33,12,125
2059 db 82,9,106,213,48,54,165,56
2060 db 191,64,163,158,129,243,215,251
2061 db 124,227,57,130,155,47,255,135
2062 db 52,142,67,68,196,222,233,203
2063 db 84,123,148,50,166,194,35,61
2064 db 238,76,149,11,66,250,195,78
2065 db 8,46,161,102,40,217,36,178
2066 db 118,91,162,73,109,139,209,37
2067 db 114,248,246,100,134,104,152,22
2068 db 212,164,92,204,93,101,182,146
2069 db 108,112,72,80,253,237,185,218
2070 db 94,21,70,87,167,141,157,132
2071 db 144,216,171,0,140,188,211,10
2072 db 247,228,88,5,184,179,69,6
2073 db 208,44,30,143,202,63,15,2
2074 db 193,175,189,3,1,19,138,107
2075 db 58,145,17,65,79,103,220,234
2076 db 151,242,207,206,240,180,230,115
2077 db 150,172,116,34,231,173,53,133
2078 db 226,249,55,232,28,117,223,110
2079 db 71,241,26,113,29,41,197,137
2080 db 111,183,98,14,170,24,190,27
2081 db 252,86,62,75,198,210,121,32
2082 db 154,219,192,254,120,205,90,244
2083 db 31,221,168,51,136,7,199,49
2084 db 177,18,16,89,39,128,236,95
2085 db 96,81,127,169,25,181,74,13
2086 db 45,229,122,159,147,201,156,239
2087 db 160,224,59,77,174,42,245,176
2088 db 200,235,187,60,131,83,153,97
2089 db 23,43,4,126,186,119,214,38
2090 db 225,105,20,99,85,33,12,125
2091 db 82,9,106,213,48,54,165,56
2092 db 191,64,163,158,129,243,215,251
2093 db 124,227,57,130,155,47,255,135
2094 db 52,142,67,68,196,222,233,203
2095 db 84,123,148,50,166,194,35,61
2096 db 238,76,149,11,66,250,195,78
2097 db 8,46,161,102,40,217,36,178
2098 db 118,91,162,73,109,139,209,37
2099 db 114,248,246,100,134,104,152,22
2100 db 212,164,92,204,93,101,182,146
2101 db 108,112,72,80,253,237,185,218
2102 db 94,21,70,87,167,141,157,132
2103 db 144,216,171,0,140,188,211,10
2104 db 247,228,88,5,184,179,69,6
2105 db 208,44,30,143,202,63,15,2
2106 db 193,175,189,3,1,19,138,107
2107 db 58,145,17,65,79,103,220,234
2108 db 151,242,207,206,240,180,230,115
2109 db 150,172,116,34,231,173,53,133
2110 db 226,249,55,232,28,117,223,110
2111 db 71,241,26,113,29,41,197,137
2112 db 111,183,98,14,170,24,190,27
2113 db 252,86,62,75,198,210,121,32
2114 db 154,219,192,254,120,205,90,244
2115 db 31,221,168,51,136,7,199,49
2116 db 177,18,16,89,39,128,236,95
2117 db 96,81,127,169,25,181,74,13
2118 db 45,229,122,159,147,201,156,239
2119 db 160,224,59,77,174,42,245,176
2120 db 200,235,187,60,131,83,153,97
2121 db 23,43,4,126,186,119,214,38
2122 db 225,105,20,99,85,33,12,125
2123 db 82,9,106,213,48,54,165,56
2124 db 191,64,163,158,129,243,215,251
2125 db 124,227,57,130,155,47,255,135
2126 db 52,142,67,68,196,222,233,203
2127 db 84,123,148,50,166,194,35,61
2128 db 238,76,149,11,66,250,195,78
2129 db 8,46,161,102,40,217,36,178
2130 db 118,91,162,73,109,139,209,37
2131 db 114,248,246,100,134,104,152,22
2132 db 212,164,92,204,93,101,182,146
2133 db 108,112,72,80,253,237,185,218
2134 db 94,21,70,87,167,141,157,132
2135 db 144,216,171,0,140,188,211,10
2136 db 247,228,88,5,184,179,69,6
2137 db 208,44,30,143,202,63,15,2
2138 db 193,175,189,3,1,19,138,107
2139 db 58,145,17,65,79,103,220,234
2140 db 151,242,207,206,240,180,230,115
2141 db 150,172,116,34,231,173,53,133
2142 db 226,249,55,232,28,117,223,110
2143 db 71,241,26,113,29,41,197,137
2144 db 111,183,98,14,170,24,190,27
2145 db 252,86,62,75,198,210,121,32
2146 db 154,219,192,254,120,205,90,244
2147 db 31,221,168,51,136,7,199,49
2148 db 177,18,16,89,39,128,236,95
2149 db 96,81,127,169,25,181,74,13
2150 db 45,229,122,159,147,201,156,239
2151 db 160,224,59,77,174,42,245,176
2152 db 200,235,187,60,131,83,153,97
2153 db 23,43,4,126,186,119,214,38
2154 db 225,105,20,99,85,33,12,125
2155 global _asm_AES_decrypt
2156 align 16
2157 _asm_AES_decrypt:
2158 L$_asm_AES_decrypt_begin:
2159 push ebp
2160 push ebx
2161 push esi
2162 push edi
2163 mov esi,DWORD [20+esp]
2164 mov edi,DWORD [28+esp]
2165 mov eax,esp
2166 sub esp,36
2167 and esp,-64
2168 lea ebx,[edi-127]
2169 sub ebx,esp
2170 neg ebx
2171 and ebx,960
2172 sub esp,ebx
2173 add esp,4
2174 mov DWORD [28+esp],eax
2175 call L$010pic_point
2176 L$010pic_point:
2177 pop ebp
2178 lea eax,[_OPENSSL_ia32cap_P]
2179 lea ebp,[(L$AES_Td-L$010pic_point)+ebp]
2180 lea ebx,[764+esp]
2181 sub ebx,ebp
2182 and ebx,768
2183 lea ebp,[2176+ebx*1+ebp]
2184 bt DWORD [eax],25
2185 jnc NEAR L$011x86
2186 movq mm0,[esi]
2187 movq mm4,[8+esi]
2188 call __sse_AES_decrypt_compact
2189 mov esp,DWORD [28+esp]
2190 mov esi,DWORD [24+esp]
2191 movq [esi],mm0
2192 movq [8+esi],mm4
2193 emms
2194 pop edi
2195 pop esi
2196 pop ebx
2197 pop ebp
2199 align 16
2200 L$011x86:
2201 mov DWORD [24+esp],ebp
2202 mov eax,DWORD [esi]
2203 mov ebx,DWORD [4+esi]
2204 mov ecx,DWORD [8+esi]
2205 mov edx,DWORD [12+esi]
2206 call __x86_AES_decrypt_compact
2207 mov esp,DWORD [28+esp]
2208 mov esi,DWORD [24+esp]
2209 mov DWORD [esi],eax
2210 mov DWORD [4+esi],ebx
2211 mov DWORD [8+esi],ecx
2212 mov DWORD [12+esi],edx
2213 pop edi
2214 pop esi
2215 pop ebx
2216 pop ebp
2218 global _asm_AES_cbc_encrypt
2219 align 16
2220 _asm_AES_cbc_encrypt:
2221 L$_asm_AES_cbc_encrypt_begin:
2222 push ebp
2223 push ebx
2224 push esi
2225 push edi
2226 mov ecx,DWORD [28+esp]
2227 cmp ecx,0
2228 je NEAR L$012drop_out
2229 call L$013pic_point
2230 L$013pic_point:
2231 pop ebp
2232 lea eax,[_OPENSSL_ia32cap_P]
2233 cmp DWORD [40+esp],0
2234 lea ebp,[(L$AES_Te-L$013pic_point)+ebp]
2235 jne NEAR L$014picked_te
2236 lea ebp,[(L$AES_Td-L$AES_Te)+ebp]
2237 L$014picked_te:
2238 pushfd
2240 cmp ecx,512
2241 jb NEAR L$015slow_way
2242 test ecx,15
2243 jnz NEAR L$015slow_way
2244 bt DWORD [eax],28
2245 jc NEAR L$015slow_way
2246 lea esi,[esp-324]
2247 and esi,-64
2248 mov eax,ebp
2249 lea ebx,[2304+ebp]
2250 mov edx,esi
2251 and eax,4095
2252 and ebx,4095
2253 and edx,4095
2254 cmp edx,ebx
2255 jb NEAR L$016tbl_break_out
2256 sub edx,ebx
2257 sub esi,edx
2258 jmp NEAR L$017tbl_ok
2259 align 4
2260 L$016tbl_break_out:
2261 sub edx,eax
2262 and edx,4095
2263 add edx,384
2264 sub esi,edx
2265 align 4
2266 L$017tbl_ok:
2267 lea edx,[24+esp]
2268 xchg esp,esi
2269 add esp,4
2270 mov DWORD [24+esp],ebp
2271 mov DWORD [28+esp],esi
2272 mov eax,DWORD [edx]
2273 mov ebx,DWORD [4+edx]
2274 mov edi,DWORD [12+edx]
2275 mov esi,DWORD [16+edx]
2276 mov edx,DWORD [20+edx]
2277 mov DWORD [32+esp],eax
2278 mov DWORD [36+esp],ebx
2279 mov DWORD [40+esp],ecx
2280 mov DWORD [44+esp],edi
2281 mov DWORD [48+esp],esi
2282 mov DWORD [316+esp],0
2283 mov ebx,edi
2284 mov ecx,61
2285 sub ebx,ebp
2286 mov esi,edi
2287 and ebx,4095
2288 lea edi,[76+esp]
2289 cmp ebx,2304
2290 jb NEAR L$018do_copy
2291 cmp ebx,3852
2292 jb NEAR L$019skip_copy
2293 align 4
2294 L$018do_copy:
2295 mov DWORD [44+esp],edi
2296 dd 2784229001
2297 L$019skip_copy:
2298 mov edi,16
2299 align 4
2300 L$020prefetch_tbl:
2301 mov eax,DWORD [ebp]
2302 mov ebx,DWORD [32+ebp]
2303 mov ecx,DWORD [64+ebp]
2304 mov esi,DWORD [96+ebp]
2305 lea ebp,[128+ebp]
2306 sub edi,1
2307 jnz NEAR L$020prefetch_tbl
2308 sub ebp,2048
2309 mov esi,DWORD [32+esp]
2310 mov edi,DWORD [48+esp]
2311 cmp edx,0
2312 je NEAR L$021fast_decrypt
2313 mov eax,DWORD [edi]
2314 mov ebx,DWORD [4+edi]
2315 align 16
2316 L$022fast_enc_loop:
2317 mov ecx,DWORD [8+edi]
2318 mov edx,DWORD [12+edi]
2319 xor eax,DWORD [esi]
2320 xor ebx,DWORD [4+esi]
2321 xor ecx,DWORD [8+esi]
2322 xor edx,DWORD [12+esi]
2323 mov edi,DWORD [44+esp]
2324 call __x86_AES_encrypt
2325 mov esi,DWORD [32+esp]
2326 mov edi,DWORD [36+esp]
2327 mov DWORD [edi],eax
2328 mov DWORD [4+edi],ebx
2329 mov DWORD [8+edi],ecx
2330 mov DWORD [12+edi],edx
2331 lea esi,[16+esi]
2332 mov ecx,DWORD [40+esp]
2333 mov DWORD [32+esp],esi
2334 lea edx,[16+edi]
2335 mov DWORD [36+esp],edx
2336 sub ecx,16
2337 mov DWORD [40+esp],ecx
2338 jnz NEAR L$022fast_enc_loop
2339 mov esi,DWORD [48+esp]
2340 mov ecx,DWORD [8+edi]
2341 mov edx,DWORD [12+edi]
2342 mov DWORD [esi],eax
2343 mov DWORD [4+esi],ebx
2344 mov DWORD [8+esi],ecx
2345 mov DWORD [12+esi],edx
2346 cmp DWORD [316+esp],0
2347 mov edi,DWORD [44+esp]
2348 je NEAR L$023skip_ezero
2349 mov ecx,60
2350 xor eax,eax
2351 align 4
2352 dd 2884892297
2353 L$023skip_ezero:
2354 mov esp,DWORD [28+esp]
2355 popfd
2356 L$012drop_out:
2357 pop edi
2358 pop esi
2359 pop ebx
2360 pop ebp
2362 pushfd
2363 align 16
2364 L$021fast_decrypt:
2365 cmp esi,DWORD [36+esp]
2366 je NEAR L$024fast_dec_in_place
2367 mov DWORD [52+esp],edi
2368 align 4
2369 align 16
2370 L$025fast_dec_loop:
2371 mov eax,DWORD [esi]
2372 mov ebx,DWORD [4+esi]
2373 mov ecx,DWORD [8+esi]
2374 mov edx,DWORD [12+esi]
2375 mov edi,DWORD [44+esp]
2376 call __x86_AES_decrypt
2377 mov edi,DWORD [52+esp]
2378 mov esi,DWORD [40+esp]
2379 xor eax,DWORD [edi]
2380 xor ebx,DWORD [4+edi]
2381 xor ecx,DWORD [8+edi]
2382 xor edx,DWORD [12+edi]
2383 mov edi,DWORD [36+esp]
2384 mov esi,DWORD [32+esp]
2385 mov DWORD [edi],eax
2386 mov DWORD [4+edi],ebx
2387 mov DWORD [8+edi],ecx
2388 mov DWORD [12+edi],edx
2389 mov ecx,DWORD [40+esp]
2390 mov DWORD [52+esp],esi
2391 lea esi,[16+esi]
2392 mov DWORD [32+esp],esi
2393 lea edi,[16+edi]
2394 mov DWORD [36+esp],edi
2395 sub ecx,16
2396 mov DWORD [40+esp],ecx
2397 jnz NEAR L$025fast_dec_loop
2398 mov edi,DWORD [52+esp]
2399 mov esi,DWORD [48+esp]
2400 mov eax,DWORD [edi]
2401 mov ebx,DWORD [4+edi]
2402 mov ecx,DWORD [8+edi]
2403 mov edx,DWORD [12+edi]
2404 mov DWORD [esi],eax
2405 mov DWORD [4+esi],ebx
2406 mov DWORD [8+esi],ecx
2407 mov DWORD [12+esi],edx
2408 jmp NEAR L$026fast_dec_out
2409 align 16
2410 L$024fast_dec_in_place:
2411 L$027fast_dec_in_place_loop:
2412 mov eax,DWORD [esi]
2413 mov ebx,DWORD [4+esi]
2414 mov ecx,DWORD [8+esi]
2415 mov edx,DWORD [12+esi]
2416 lea edi,[60+esp]
2417 mov DWORD [edi],eax
2418 mov DWORD [4+edi],ebx
2419 mov DWORD [8+edi],ecx
2420 mov DWORD [12+edi],edx
2421 mov edi,DWORD [44+esp]
2422 call __x86_AES_decrypt
2423 mov edi,DWORD [48+esp]
2424 mov esi,DWORD [36+esp]
2425 xor eax,DWORD [edi]
2426 xor ebx,DWORD [4+edi]
2427 xor ecx,DWORD [8+edi]
2428 xor edx,DWORD [12+edi]
2429 mov DWORD [esi],eax
2430 mov DWORD [4+esi],ebx
2431 mov DWORD [8+esi],ecx
2432 mov DWORD [12+esi],edx
2433 lea esi,[16+esi]
2434 mov DWORD [36+esp],esi
2435 lea esi,[60+esp]
2436 mov eax,DWORD [esi]
2437 mov ebx,DWORD [4+esi]
2438 mov ecx,DWORD [8+esi]
2439 mov edx,DWORD [12+esi]
2440 mov DWORD [edi],eax
2441 mov DWORD [4+edi],ebx
2442 mov DWORD [8+edi],ecx
2443 mov DWORD [12+edi],edx
2444 mov esi,DWORD [32+esp]
2445 mov ecx,DWORD [40+esp]
2446 lea esi,[16+esi]
2447 mov DWORD [32+esp],esi
2448 sub ecx,16
2449 mov DWORD [40+esp],ecx
2450 jnz NEAR L$027fast_dec_in_place_loop
2451 align 4
2452 L$026fast_dec_out:
2453 cmp DWORD [316+esp],0
2454 mov edi,DWORD [44+esp]
2455 je NEAR L$028skip_dzero
2456 mov ecx,60
2457 xor eax,eax
2458 align 4
2459 dd 2884892297
2460 L$028skip_dzero:
2461 mov esp,DWORD [28+esp]
2462 popfd
2463 pop edi
2464 pop esi
2465 pop ebx
2466 pop ebp
2468 pushfd
2469 align 16
2470 L$015slow_way:
2471 mov eax,DWORD [eax]
2472 mov edi,DWORD [36+esp]
2473 lea esi,[esp-80]
2474 and esi,-64
2475 lea ebx,[edi-143]
2476 sub ebx,esi
2477 neg ebx
2478 and ebx,960
2479 sub esi,ebx
2480 lea ebx,[768+esi]
2481 sub ebx,ebp
2482 and ebx,768
2483 lea ebp,[2176+ebx*1+ebp]
2484 lea edx,[24+esp]
2485 xchg esp,esi
2486 add esp,4
2487 mov DWORD [24+esp],ebp
2488 mov DWORD [28+esp],esi
2489 mov DWORD [52+esp],eax
2490 mov eax,DWORD [edx]
2491 mov ebx,DWORD [4+edx]
2492 mov esi,DWORD [16+edx]
2493 mov edx,DWORD [20+edx]
2494 mov DWORD [32+esp],eax
2495 mov DWORD [36+esp],ebx
2496 mov DWORD [40+esp],ecx
2497 mov DWORD [44+esp],edi
2498 mov DWORD [48+esp],esi
2499 mov edi,esi
2500 mov esi,eax
2501 cmp edx,0
2502 je NEAR L$029slow_decrypt
2503 cmp ecx,16
2504 mov edx,ebx
2505 jb NEAR L$030slow_enc_tail
2506 bt DWORD [52+esp],25
2507 jnc NEAR L$031slow_enc_x86
2508 movq mm0,[edi]
2509 movq mm4,[8+edi]
2510 align 16
2511 L$032slow_enc_loop_sse:
2512 pxor mm0,[esi]
2513 pxor mm4,[8+esi]
2514 mov edi,DWORD [44+esp]
2515 call __sse_AES_encrypt_compact
2516 mov esi,DWORD [32+esp]
2517 mov edi,DWORD [36+esp]
2518 mov ecx,DWORD [40+esp]
2519 movq [edi],mm0
2520 movq [8+edi],mm4
2521 lea esi,[16+esi]
2522 mov DWORD [32+esp],esi
2523 lea edx,[16+edi]
2524 mov DWORD [36+esp],edx
2525 sub ecx,16
2526 cmp ecx,16
2527 mov DWORD [40+esp],ecx
2528 jae NEAR L$032slow_enc_loop_sse
2529 test ecx,15
2530 jnz NEAR L$030slow_enc_tail
2531 mov esi,DWORD [48+esp]
2532 movq [esi],mm0
2533 movq [8+esi],mm4
2534 emms
2535 mov esp,DWORD [28+esp]
2536 popfd
2537 pop edi
2538 pop esi
2539 pop ebx
2540 pop ebp
2542 pushfd
2543 align 16
2544 L$031slow_enc_x86:
2545 mov eax,DWORD [edi]
2546 mov ebx,DWORD [4+edi]
2547 align 4
2548 L$033slow_enc_loop_x86:
2549 mov ecx,DWORD [8+edi]
2550 mov edx,DWORD [12+edi]
2551 xor eax,DWORD [esi]
2552 xor ebx,DWORD [4+esi]
2553 xor ecx,DWORD [8+esi]
2554 xor edx,DWORD [12+esi]
2555 mov edi,DWORD [44+esp]
2556 call __x86_AES_encrypt_compact
2557 mov esi,DWORD [32+esp]
2558 mov edi,DWORD [36+esp]
2559 mov DWORD [edi],eax
2560 mov DWORD [4+edi],ebx
2561 mov DWORD [8+edi],ecx
2562 mov DWORD [12+edi],edx
2563 mov ecx,DWORD [40+esp]
2564 lea esi,[16+esi]
2565 mov DWORD [32+esp],esi
2566 lea edx,[16+edi]
2567 mov DWORD [36+esp],edx
2568 sub ecx,16
2569 cmp ecx,16
2570 mov DWORD [40+esp],ecx
2571 jae NEAR L$033slow_enc_loop_x86
2572 test ecx,15
2573 jnz NEAR L$030slow_enc_tail
2574 mov esi,DWORD [48+esp]
2575 mov ecx,DWORD [8+edi]
2576 mov edx,DWORD [12+edi]
2577 mov DWORD [esi],eax
2578 mov DWORD [4+esi],ebx
2579 mov DWORD [8+esi],ecx
2580 mov DWORD [12+esi],edx
2581 mov esp,DWORD [28+esp]
2582 popfd
2583 pop edi
2584 pop esi
2585 pop ebx
2586 pop ebp
2588 pushfd
2589 align 16
2590 L$030slow_enc_tail:
2591 emms
2592 mov edi,edx
2593 mov ebx,16
2594 sub ebx,ecx
2595 cmp edi,esi
2596 je NEAR L$034enc_in_place
2597 align 4
2598 dd 2767451785
2599 jmp NEAR L$035enc_skip_in_place
2600 L$034enc_in_place:
2601 lea edi,[ecx*1+edi]
2602 L$035enc_skip_in_place:
2603 mov ecx,ebx
2604 xor eax,eax
2605 align 4
2606 dd 2868115081
2607 mov edi,DWORD [48+esp]
2608 mov esi,edx
2609 mov eax,DWORD [edi]
2610 mov ebx,DWORD [4+edi]
2611 mov DWORD [40+esp],16
2612 jmp NEAR L$033slow_enc_loop_x86
2613 align 16
2614 L$029slow_decrypt:
2615 bt DWORD [52+esp],25
2616 jnc NEAR L$036slow_dec_loop_x86
2617 align 4
2618 L$037slow_dec_loop_sse:
2619 movq mm0,[esi]
2620 movq mm4,[8+esi]
2621 mov edi,DWORD [44+esp]
2622 call __sse_AES_decrypt_compact
2623 mov esi,DWORD [32+esp]
2624 lea eax,[60+esp]
2625 mov ebx,DWORD [36+esp]
2626 mov ecx,DWORD [40+esp]
2627 mov edi,DWORD [48+esp]
2628 movq mm1,[esi]
2629 movq mm5,[8+esi]
2630 pxor mm0,[edi]
2631 pxor mm4,[8+edi]
2632 movq [edi],mm1
2633 movq [8+edi],mm5
2634 sub ecx,16
2635 jc NEAR L$038slow_dec_partial_sse
2636 movq [ebx],mm0
2637 movq [8+ebx],mm4
2638 lea ebx,[16+ebx]
2639 mov DWORD [36+esp],ebx
2640 lea esi,[16+esi]
2641 mov DWORD [32+esp],esi
2642 mov DWORD [40+esp],ecx
2643 jnz NEAR L$037slow_dec_loop_sse
2644 emms
2645 mov esp,DWORD [28+esp]
2646 popfd
2647 pop edi
2648 pop esi
2649 pop ebx
2650 pop ebp
2652 pushfd
2653 align 16
2654 L$038slow_dec_partial_sse:
2655 movq [eax],mm0
2656 movq [8+eax],mm4
2657 emms
2658 add ecx,16
2659 mov edi,ebx
2660 mov esi,eax
2661 align 4
2662 dd 2767451785
2663 mov esp,DWORD [28+esp]
2664 popfd
2665 pop edi
2666 pop esi
2667 pop ebx
2668 pop ebp
2670 pushfd
2671 align 16
2672 L$036slow_dec_loop_x86:
2673 mov eax,DWORD [esi]
2674 mov ebx,DWORD [4+esi]
2675 mov ecx,DWORD [8+esi]
2676 mov edx,DWORD [12+esi]
2677 lea edi,[60+esp]
2678 mov DWORD [edi],eax
2679 mov DWORD [4+edi],ebx
2680 mov DWORD [8+edi],ecx
2681 mov DWORD [12+edi],edx
2682 mov edi,DWORD [44+esp]
2683 call __x86_AES_decrypt_compact
2684 mov edi,DWORD [48+esp]
2685 mov esi,DWORD [40+esp]
2686 xor eax,DWORD [edi]
2687 xor ebx,DWORD [4+edi]
2688 xor ecx,DWORD [8+edi]
2689 xor edx,DWORD [12+edi]
2690 sub esi,16
2691 jc NEAR L$039slow_dec_partial_x86
2692 mov DWORD [40+esp],esi
2693 mov esi,DWORD [36+esp]
2694 mov DWORD [esi],eax
2695 mov DWORD [4+esi],ebx
2696 mov DWORD [8+esi],ecx
2697 mov DWORD [12+esi],edx
2698 lea esi,[16+esi]
2699 mov DWORD [36+esp],esi
2700 lea esi,[60+esp]
2701 mov eax,DWORD [esi]
2702 mov ebx,DWORD [4+esi]
2703 mov ecx,DWORD [8+esi]
2704 mov edx,DWORD [12+esi]
2705 mov DWORD [edi],eax
2706 mov DWORD [4+edi],ebx
2707 mov DWORD [8+edi],ecx
2708 mov DWORD [12+edi],edx
2709 mov esi,DWORD [32+esp]
2710 lea esi,[16+esi]
2711 mov DWORD [32+esp],esi
2712 jnz NEAR L$036slow_dec_loop_x86
2713 mov esp,DWORD [28+esp]
2714 popfd
2715 pop edi
2716 pop esi
2717 pop ebx
2718 pop ebp
2720 pushfd
2721 align 16
2722 L$039slow_dec_partial_x86:
2723 lea esi,[60+esp]
2724 mov DWORD [esi],eax
2725 mov DWORD [4+esi],ebx
2726 mov DWORD [8+esi],ecx
2727 mov DWORD [12+esi],edx
2728 mov esi,DWORD [32+esp]
2729 mov eax,DWORD [esi]
2730 mov ebx,DWORD [4+esi]
2731 mov ecx,DWORD [8+esi]
2732 mov edx,DWORD [12+esi]
2733 mov DWORD [edi],eax
2734 mov DWORD [4+edi],ebx
2735 mov DWORD [8+edi],ecx
2736 mov DWORD [12+edi],edx
2737 mov ecx,DWORD [40+esp]
2738 mov edi,DWORD [36+esp]
2739 lea esi,[60+esp]
2740 align 4
2741 dd 2767451785
2742 mov esp,DWORD [28+esp]
2743 popfd
2744 pop edi
2745 pop esi
2746 pop ebx
2747 pop ebp
2749 align 16
2750 __x86_AES_set_encrypt_key:
2751 push ebp
2752 push ebx
2753 push esi
2754 push edi
2755 mov esi,DWORD [24+esp]
2756 mov edi,DWORD [32+esp]
2757 test esi,-1
2758 jz NEAR L$040badpointer
2759 test edi,-1
2760 jz NEAR L$040badpointer
2761 call L$041pic_point
2762 L$041pic_point:
2763 pop ebp
2764 lea ebp,[(L$AES_Te-L$041pic_point)+ebp]
2765 lea ebp,[2176+ebp]
2766 mov eax,DWORD [ebp-128]
2767 mov ebx,DWORD [ebp-96]
2768 mov ecx,DWORD [ebp-64]
2769 mov edx,DWORD [ebp-32]
2770 mov eax,DWORD [ebp]
2771 mov ebx,DWORD [32+ebp]
2772 mov ecx,DWORD [64+ebp]
2773 mov edx,DWORD [96+ebp]
2774 mov ecx,DWORD [28+esp]
2775 cmp ecx,128
2776 je NEAR L$04210rounds
2777 cmp ecx,192
2778 je NEAR L$04312rounds
2779 cmp ecx,256
2780 je NEAR L$04414rounds
2781 mov eax,-2
2782 jmp NEAR L$045exit
2783 L$04210rounds:
2784 mov eax,DWORD [esi]
2785 mov ebx,DWORD [4+esi]
2786 mov ecx,DWORD [8+esi]
2787 mov edx,DWORD [12+esi]
2788 mov DWORD [edi],eax
2789 mov DWORD [4+edi],ebx
2790 mov DWORD [8+edi],ecx
2791 mov DWORD [12+edi],edx
2792 xor ecx,ecx
2793 jmp NEAR L$04610shortcut
2794 align 4
2795 L$04710loop:
2796 mov eax,DWORD [edi]
2797 mov edx,DWORD [12+edi]
2798 L$04610shortcut:
2799 movzx esi,dl
2800 movzx ebx,BYTE [esi*1+ebp-128]
2801 movzx esi,dh
2802 shl ebx,24
2803 xor eax,ebx
2804 movzx ebx,BYTE [esi*1+ebp-128]
2805 shr edx,16
2806 movzx esi,dl
2807 xor eax,ebx
2808 movzx ebx,BYTE [esi*1+ebp-128]
2809 movzx esi,dh
2810 shl ebx,8
2811 xor eax,ebx
2812 movzx ebx,BYTE [esi*1+ebp-128]
2813 shl ebx,16
2814 xor eax,ebx
2815 xor eax,DWORD [896+ecx*4+ebp]
2816 mov DWORD [16+edi],eax
2817 xor eax,DWORD [4+edi]
2818 mov DWORD [20+edi],eax
2819 xor eax,DWORD [8+edi]
2820 mov DWORD [24+edi],eax
2821 xor eax,DWORD [12+edi]
2822 mov DWORD [28+edi],eax
2823 inc ecx
2824 add edi,16
2825 cmp ecx,10
2826 jl NEAR L$04710loop
2827 mov DWORD [80+edi],10
2828 xor eax,eax
2829 jmp NEAR L$045exit
2830 L$04312rounds:
2831 mov eax,DWORD [esi]
2832 mov ebx,DWORD [4+esi]
2833 mov ecx,DWORD [8+esi]
2834 mov edx,DWORD [12+esi]
2835 mov DWORD [edi],eax
2836 mov DWORD [4+edi],ebx
2837 mov DWORD [8+edi],ecx
2838 mov DWORD [12+edi],edx
2839 mov ecx,DWORD [16+esi]
2840 mov edx,DWORD [20+esi]
2841 mov DWORD [16+edi],ecx
2842 mov DWORD [20+edi],edx
2843 xor ecx,ecx
2844 jmp NEAR L$04812shortcut
2845 align 4
2846 L$04912loop:
2847 mov eax,DWORD [edi]
2848 mov edx,DWORD [20+edi]
2849 L$04812shortcut:
2850 movzx esi,dl
2851 movzx ebx,BYTE [esi*1+ebp-128]
2852 movzx esi,dh
2853 shl ebx,24
2854 xor eax,ebx
2855 movzx ebx,BYTE [esi*1+ebp-128]
2856 shr edx,16
2857 movzx esi,dl
2858 xor eax,ebx
2859 movzx ebx,BYTE [esi*1+ebp-128]
2860 movzx esi,dh
2861 shl ebx,8
2862 xor eax,ebx
2863 movzx ebx,BYTE [esi*1+ebp-128]
2864 shl ebx,16
2865 xor eax,ebx
2866 xor eax,DWORD [896+ecx*4+ebp]
2867 mov DWORD [24+edi],eax
2868 xor eax,DWORD [4+edi]
2869 mov DWORD [28+edi],eax
2870 xor eax,DWORD [8+edi]
2871 mov DWORD [32+edi],eax
2872 xor eax,DWORD [12+edi]
2873 mov DWORD [36+edi],eax
2874 cmp ecx,7
2875 je NEAR L$05012break
2876 inc ecx
2877 xor eax,DWORD [16+edi]
2878 mov DWORD [40+edi],eax
2879 xor eax,DWORD [20+edi]
2880 mov DWORD [44+edi],eax
2881 add edi,24
2882 jmp NEAR L$04912loop
2883 L$05012break:
2884 mov DWORD [72+edi],12
2885 xor eax,eax
2886 jmp NEAR L$045exit
2887 L$04414rounds:
2888 mov eax,DWORD [esi]
2889 mov ebx,DWORD [4+esi]
2890 mov ecx,DWORD [8+esi]
2891 mov edx,DWORD [12+esi]
2892 mov DWORD [edi],eax
2893 mov DWORD [4+edi],ebx
2894 mov DWORD [8+edi],ecx
2895 mov DWORD [12+edi],edx
2896 mov eax,DWORD [16+esi]
2897 mov ebx,DWORD [20+esi]
2898 mov ecx,DWORD [24+esi]
2899 mov edx,DWORD [28+esi]
2900 mov DWORD [16+edi],eax
2901 mov DWORD [20+edi],ebx
2902 mov DWORD [24+edi],ecx
2903 mov DWORD [28+edi],edx
2904 xor ecx,ecx
2905 jmp NEAR L$05114shortcut
2906 align 4
2907 L$05214loop:
2908 mov edx,DWORD [28+edi]
2909 L$05114shortcut:
2910 mov eax,DWORD [edi]
2911 movzx esi,dl
2912 movzx ebx,BYTE [esi*1+ebp-128]
2913 movzx esi,dh
2914 shl ebx,24
2915 xor eax,ebx
2916 movzx ebx,BYTE [esi*1+ebp-128]
2917 shr edx,16
2918 movzx esi,dl
2919 xor eax,ebx
2920 movzx ebx,BYTE [esi*1+ebp-128]
2921 movzx esi,dh
2922 shl ebx,8
2923 xor eax,ebx
2924 movzx ebx,BYTE [esi*1+ebp-128]
2925 shl ebx,16
2926 xor eax,ebx
2927 xor eax,DWORD [896+ecx*4+ebp]
2928 mov DWORD [32+edi],eax
2929 xor eax,DWORD [4+edi]
2930 mov DWORD [36+edi],eax
2931 xor eax,DWORD [8+edi]
2932 mov DWORD [40+edi],eax
2933 xor eax,DWORD [12+edi]
2934 mov DWORD [44+edi],eax
2935 cmp ecx,6
2936 je NEAR L$05314break
2937 inc ecx
2938 mov edx,eax
2939 mov eax,DWORD [16+edi]
2940 movzx esi,dl
2941 movzx ebx,BYTE [esi*1+ebp-128]
2942 movzx esi,dh
2943 xor eax,ebx
2944 movzx ebx,BYTE [esi*1+ebp-128]
2945 shr edx,16
2946 shl ebx,8
2947 movzx esi,dl
2948 xor eax,ebx
2949 movzx ebx,BYTE [esi*1+ebp-128]
2950 movzx esi,dh
2951 shl ebx,16
2952 xor eax,ebx
2953 movzx ebx,BYTE [esi*1+ebp-128]
2954 shl ebx,24
2955 xor eax,ebx
2956 mov DWORD [48+edi],eax
2957 xor eax,DWORD [20+edi]
2958 mov DWORD [52+edi],eax
2959 xor eax,DWORD [24+edi]
2960 mov DWORD [56+edi],eax
2961 xor eax,DWORD [28+edi]
2962 mov DWORD [60+edi],eax
2963 add edi,32
2964 jmp NEAR L$05214loop
2965 L$05314break:
2966 mov DWORD [48+edi],14
2967 xor eax,eax
2968 jmp NEAR L$045exit
2969 L$040badpointer:
2970 mov eax,-1
2971 L$045exit:
2972 pop edi
2973 pop esi
2974 pop ebx
2975 pop ebp
2977 global _asm_AES_set_encrypt_key
2978 align 16
2979 _asm_AES_set_encrypt_key:
2980 L$_asm_AES_set_encrypt_key_begin:
2981 call __x86_AES_set_encrypt_key
2983 global _asm_AES_set_decrypt_key
2984 align 16
2985 _asm_AES_set_decrypt_key:
2986 L$_asm_AES_set_decrypt_key_begin:
2987 call __x86_AES_set_encrypt_key
2988 cmp eax,0
2989 je NEAR L$054proceed
2991 L$054proceed:
2992 push ebp
2993 push ebx
2994 push esi
2995 push edi
2996 mov esi,DWORD [28+esp]
2997 mov ecx,DWORD [240+esi]
2998 lea ecx,[ecx*4]
2999 lea edi,[ecx*4+esi]
3000 align 4
3001 L$055invert:
3002 mov eax,DWORD [esi]
3003 mov ebx,DWORD [4+esi]
3004 mov ecx,DWORD [edi]
3005 mov edx,DWORD [4+edi]
3006 mov DWORD [edi],eax
3007 mov DWORD [4+edi],ebx
3008 mov DWORD [esi],ecx
3009 mov DWORD [4+esi],edx
3010 mov eax,DWORD [8+esi]
3011 mov ebx,DWORD [12+esi]
3012 mov ecx,DWORD [8+edi]
3013 mov edx,DWORD [12+edi]
3014 mov DWORD [8+edi],eax
3015 mov DWORD [12+edi],ebx
3016 mov DWORD [8+esi],ecx
3017 mov DWORD [12+esi],edx
3018 add esi,16
3019 sub edi,16
3020 cmp esi,edi
3021 jne NEAR L$055invert
3022 mov edi,DWORD [28+esp]
3023 mov esi,DWORD [240+edi]
3024 lea esi,[esi*1+esi-2]
3025 lea esi,[esi*8+edi]
3026 mov DWORD [28+esp],esi
3027 mov eax,DWORD [16+edi]
3028 align 4
3029 L$056permute:
3030 add edi,16
3031 mov ebp,2155905152
3032 and ebp,eax
3033 lea ebx,[eax*1+eax]
3034 mov esi,ebp
3035 shr ebp,7
3036 sub esi,ebp
3037 and ebx,4278124286
3038 and esi,454761243
3039 xor ebx,esi
3040 mov ebp,2155905152
3041 and ebp,ebx
3042 lea ecx,[ebx*1+ebx]
3043 mov esi,ebp
3044 shr ebp,7
3045 sub esi,ebp
3046 and ecx,4278124286
3047 and esi,454761243
3048 xor ebx,eax
3049 xor ecx,esi
3050 mov ebp,2155905152
3051 and ebp,ecx
3052 lea edx,[ecx*1+ecx]
3053 mov esi,ebp
3054 shr ebp,7
3055 xor ecx,eax
3056 sub esi,ebp
3057 and edx,4278124286
3058 and esi,454761243
3059 rol eax,8
3060 xor edx,esi
3061 mov ebp,DWORD [4+edi]
3062 xor eax,ebx
3063 xor ebx,edx
3064 xor eax,ecx
3065 rol ebx,24
3066 xor ecx,edx
3067 xor eax,edx
3068 rol ecx,16
3069 xor eax,ebx
3070 rol edx,8
3071 xor eax,ecx
3072 mov ebx,ebp
3073 xor eax,edx
3074 mov DWORD [edi],eax
3075 mov ebp,2155905152
3076 and ebp,ebx
3077 lea ecx,[ebx*1+ebx]
3078 mov esi,ebp
3079 shr ebp,7
3080 sub esi,ebp
3081 and ecx,4278124286
3082 and esi,454761243
3083 xor ecx,esi
3084 mov ebp,2155905152
3085 and ebp,ecx
3086 lea edx,[ecx*1+ecx]
3087 mov esi,ebp
3088 shr ebp,7
3089 sub esi,ebp
3090 and edx,4278124286
3091 and esi,454761243
3092 xor ecx,ebx
3093 xor edx,esi
3094 mov ebp,2155905152
3095 and ebp,edx
3096 lea eax,[edx*1+edx]
3097 mov esi,ebp
3098 shr ebp,7
3099 xor edx,ebx
3100 sub esi,ebp
3101 and eax,4278124286
3102 and esi,454761243
3103 rol ebx,8
3104 xor eax,esi
3105 mov ebp,DWORD [8+edi]
3106 xor ebx,ecx
3107 xor ecx,eax
3108 xor ebx,edx
3109 rol ecx,24
3110 xor edx,eax
3111 xor ebx,eax
3112 rol edx,16
3113 xor ebx,ecx
3114 rol eax,8
3115 xor ebx,edx
3116 mov ecx,ebp
3117 xor ebx,eax
3118 mov DWORD [4+edi],ebx
3119 mov ebp,2155905152
3120 and ebp,ecx
3121 lea edx,[ecx*1+ecx]
3122 mov esi,ebp
3123 shr ebp,7
3124 sub esi,ebp
3125 and edx,4278124286
3126 and esi,454761243
3127 xor edx,esi
3128 mov ebp,2155905152
3129 and ebp,edx
3130 lea eax,[edx*1+edx]
3131 mov esi,ebp
3132 shr ebp,7
3133 sub esi,ebp
3134 and eax,4278124286
3135 and esi,454761243
3136 xor edx,ecx
3137 xor eax,esi
3138 mov ebp,2155905152
3139 and ebp,eax
3140 lea ebx,[eax*1+eax]
3141 mov esi,ebp
3142 shr ebp,7
3143 xor eax,ecx
3144 sub esi,ebp
3145 and ebx,4278124286
3146 and esi,454761243
3147 rol ecx,8
3148 xor ebx,esi
3149 mov ebp,DWORD [12+edi]
3150 xor ecx,edx
3151 xor edx,ebx
3152 xor ecx,eax
3153 rol edx,24
3154 xor eax,ebx
3155 xor ecx,ebx
3156 rol eax,16
3157 xor ecx,edx
3158 rol ebx,8
3159 xor ecx,eax
3160 mov edx,ebp
3161 xor ecx,ebx
3162 mov DWORD [8+edi],ecx
3163 mov ebp,2155905152
3164 and ebp,edx
3165 lea eax,[edx*1+edx]
3166 mov esi,ebp
3167 shr ebp,7
3168 sub esi,ebp
3169 and eax,4278124286
3170 and esi,454761243
3171 xor eax,esi
3172 mov ebp,2155905152
3173 and ebp,eax
3174 lea ebx,[eax*1+eax]
3175 mov esi,ebp
3176 shr ebp,7
3177 sub esi,ebp
3178 and ebx,4278124286
3179 and esi,454761243
3180 xor eax,edx
3181 xor ebx,esi
3182 mov ebp,2155905152
3183 and ebp,ebx
3184 lea ecx,[ebx*1+ebx]
3185 mov esi,ebp
3186 shr ebp,7
3187 xor ebx,edx
3188 sub esi,ebp
3189 and ecx,4278124286
3190 and esi,454761243
3191 rol edx,8
3192 xor ecx,esi
3193 mov ebp,DWORD [16+edi]
3194 xor edx,eax
3195 xor eax,ecx
3196 xor edx,ebx
3197 rol eax,24
3198 xor ebx,ecx
3199 xor edx,ecx
3200 rol ebx,16
3201 xor edx,eax
3202 rol ecx,8
3203 xor edx,ebx
3204 mov eax,ebp
3205 xor edx,ecx
3206 mov DWORD [12+edi],edx
3207 cmp edi,DWORD [28+esp]
3208 jb NEAR L$056permute
3209 xor eax,eax
3210 pop edi
3211 pop esi
3212 pop ebx
3213 pop ebp
3215 db 65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89
3216 db 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
3217 db 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
3218 segment .bss
3219 common _OPENSSL_ia32cap_P 16