%ifidn __OUTPUT_FORMAT__,obj section code use32 class=code align=64 %elifidn __OUTPUT_FORMAT__,win32 %ifdef __YASM_VERSION_ID__ %if __YASM_VERSION_ID__ < 01010000h %error yasm version 1.1.0 or later needed. %endif ; Yasm automatically includes .00 and complains about redefining it. ; https://www.tortall.net/projects/yasm/manual/html/objfmt-win32-safeseh.html %else $@feat.00 equ 1 %endif section .text code align=64 %else section .text code %endif align 16 __x86_AES_encrypt_compact: mov DWORD [20+esp],edi xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] mov esi,DWORD [240+edi] lea esi,[esi*1+esi-2] lea esi,[esi*8+edi] mov DWORD [24+esp],esi mov edi,DWORD [ebp-128] mov esi,DWORD [ebp-96] mov edi,DWORD [ebp-64] mov esi,DWORD [ebp-32] mov edi,DWORD [ebp] mov esi,DWORD [32+ebp] mov edi,DWORD [64+ebp] mov esi,DWORD [96+ebp] align 16 L$000loop: mov esi,eax and esi,255 movzx esi,BYTE [esi*1+ebp-128] movzx edi,bh movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,ecx shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi mov edi,edx shr edi,24 movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi mov DWORD [4+esp],esi mov esi,ebx and esi,255 shr ebx,16 movzx esi,BYTE [esi*1+ebp-128] movzx edi,ch movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,edx shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi mov edi,eax shr edi,24 movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi mov DWORD [8+esp],esi mov esi,ecx and esi,255 shr ecx,24 movzx esi,BYTE [esi*1+ebp-128] movzx edi,dh movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,eax shr edi,16 and edx,255 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi movzx edi,bh movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi and edx,255 movzx edx,BYTE [edx*1+ebp-128] movzx eax,ah movzx eax,BYTE [eax*1+ebp-128] shl eax,8 xor edx,eax mov eax,DWORD [4+esp] and ebx,255 movzx ebx,BYTE [ebx*1+ebp-128] shl ebx,16 xor edx,ebx mov ebx,DWORD [8+esp] movzx ecx,BYTE [ecx*1+ebp-128] shl ecx,24 xor edx,ecx mov ecx,esi mov ebp,2155905152 and ebp,ecx lea edi,[ecx*1+ecx] mov esi,ebp shr ebp,7 and edi,4278124286 sub esi,ebp mov ebp,ecx and esi,454761243 ror ebp,16 xor esi,edi mov edi,ecx xor ecx,esi ror edi,24 xor esi,ebp rol ecx,24 xor esi,edi mov ebp,2155905152 xor ecx,esi and ebp,edx lea edi,[edx*1+edx] mov esi,ebp shr ebp,7 and edi,4278124286 sub esi,ebp mov ebp,edx and esi,454761243 ror ebp,16 xor esi,edi mov edi,edx xor edx,esi ror edi,24 xor esi,ebp rol edx,24 xor esi,edi mov ebp,2155905152 xor edx,esi and ebp,eax lea edi,[eax*1+eax] mov esi,ebp shr ebp,7 and edi,4278124286 sub esi,ebp mov ebp,eax and esi,454761243 ror ebp,16 xor esi,edi mov edi,eax xor eax,esi ror edi,24 xor esi,ebp rol eax,24 xor esi,edi mov ebp,2155905152 xor eax,esi and ebp,ebx lea edi,[ebx*1+ebx] mov esi,ebp shr ebp,7 and edi,4278124286 sub esi,ebp mov ebp,ebx and esi,454761243 ror ebp,16 xor esi,edi mov edi,ebx xor ebx,esi ror edi,24 xor esi,ebp rol ebx,24 xor esi,edi xor ebx,esi mov edi,DWORD [20+esp] mov ebp,DWORD [28+esp] add edi,16 xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] cmp edi,DWORD [24+esp] mov DWORD [20+esp],edi jb NEAR L$000loop mov esi,eax and esi,255 movzx esi,BYTE [esi*1+ebp-128] movzx edi,bh movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,ecx shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi mov edi,edx shr edi,24 movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi mov DWORD [4+esp],esi mov esi,ebx and esi,255 shr ebx,16 movzx esi,BYTE [esi*1+ebp-128] movzx edi,ch movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,edx shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi mov edi,eax shr edi,24 movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi mov DWORD [8+esp],esi mov esi,ecx and esi,255 shr ecx,24 movzx esi,BYTE [esi*1+ebp-128] movzx edi,dh movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,eax shr edi,16 and edx,255 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi movzx edi,bh movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi mov edi,DWORD [20+esp] and edx,255 movzx edx,BYTE [edx*1+ebp-128] movzx eax,ah movzx eax,BYTE [eax*1+ebp-128] shl eax,8 xor edx,eax mov eax,DWORD [4+esp] and ebx,255 movzx ebx,BYTE [ebx*1+ebp-128] shl ebx,16 xor edx,ebx mov ebx,DWORD [8+esp] movzx ecx,BYTE [ecx*1+ebp-128] shl ecx,24 xor edx,ecx mov ecx,esi xor eax,DWORD [16+edi] xor ebx,DWORD [20+edi] xor ecx,DWORD [24+edi] xor edx,DWORD [28+edi] ret align 16 __sse_AES_encrypt_compact: pxor mm0,[edi] pxor mm4,[8+edi] mov esi,DWORD [240+edi] lea esi,[esi*1+esi-2] lea esi,[esi*8+edi] mov DWORD [24+esp],esi mov eax,454761243 mov DWORD [8+esp],eax mov DWORD [12+esp],eax mov eax,DWORD [ebp-128] mov ebx,DWORD [ebp-96] mov ecx,DWORD [ebp-64] mov edx,DWORD [ebp-32] mov eax,DWORD [ebp] mov ebx,DWORD [32+ebp] mov ecx,DWORD [64+ebp] mov edx,DWORD [96+ebp] align 16 L$001loop: pshufw mm1,mm0,8 pshufw mm5,mm4,13 movd eax,mm1 movd ebx,mm5 mov DWORD [20+esp],edi movzx esi,al movzx edx,ah pshufw mm2,mm0,13 movzx ecx,BYTE [esi*1+ebp-128] movzx edi,bl movzx edx,BYTE [edx*1+ebp-128] shr eax,16 shl edx,8 movzx esi,BYTE [edi*1+ebp-128] movzx edi,bh shl esi,16 pshufw mm6,mm4,8 or ecx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,ah shl esi,24 shr ebx,16 or edx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,bh shl esi,8 or ecx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,al shl esi,24 or ecx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,bl movd eax,mm2 movd mm0,ecx movzx ecx,BYTE [edi*1+ebp-128] movzx edi,ah shl ecx,16 movd ebx,mm6 or ecx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,bh shl esi,24 or ecx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,bl shl esi,8 shr ebx,16 or ecx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,al shr eax,16 movd mm1,ecx movzx ecx,BYTE [edi*1+ebp-128] movzx edi,ah shl ecx,16 and eax,255 or ecx,esi punpckldq mm0,mm1 movzx esi,BYTE [edi*1+ebp-128] movzx edi,bh shl esi,24 and ebx,255 movzx eax,BYTE [eax*1+ebp-128] or ecx,esi shl eax,16 movzx esi,BYTE [edi*1+ebp-128] or edx,eax shl esi,8 movzx ebx,BYTE [ebx*1+ebp-128] or ecx,esi or edx,ebx mov edi,DWORD [20+esp] movd mm4,ecx movd mm5,edx punpckldq mm4,mm5 add edi,16 cmp edi,DWORD [24+esp] ja NEAR L$002out movq mm2,[8+esp] pxor mm3,mm3 pxor mm7,mm7 movq mm1,mm0 movq mm5,mm4 pcmpgtb mm3,mm0 pcmpgtb mm7,mm4 pand mm3,mm2 pand mm7,mm2 pshufw mm2,mm0,177 pshufw mm6,mm4,177 paddb mm0,mm0 paddb mm4,mm4 pxor mm0,mm3 pxor mm4,mm7 pshufw mm3,mm2,177 pshufw mm7,mm6,177 pxor mm1,mm0 pxor mm5,mm4 pxor mm0,mm2 pxor mm4,mm6 movq mm2,mm3 movq mm6,mm7 pslld mm3,8 pslld mm7,8 psrld mm2,24 psrld mm6,24 pxor mm0,mm3 pxor mm4,mm7 pxor mm0,mm2 pxor mm4,mm6 movq mm3,mm1 movq mm7,mm5 movq mm2,[edi] movq mm6,[8+edi] psrld mm1,8 psrld mm5,8 mov eax,DWORD [ebp-128] pslld mm3,24 pslld mm7,24 mov ebx,DWORD [ebp-64] pxor mm0,mm1 pxor mm4,mm5 mov ecx,DWORD [ebp] pxor mm0,mm3 pxor mm4,mm7 mov edx,DWORD [64+ebp] pxor mm0,mm2 pxor mm4,mm6 jmp NEAR L$001loop align 16 L$002out: pxor mm0,[edi] pxor mm4,[8+edi] ret align 16 __x86_AES_encrypt: mov DWORD [20+esp],edi xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] mov esi,DWORD [240+edi] lea esi,[esi*1+esi-2] lea esi,[esi*8+edi] mov DWORD [24+esp],esi align 16 L$003loop: mov esi,eax and esi,255 mov esi,DWORD [esi*8+ebp] movzx edi,bh xor esi,DWORD [3+edi*8+ebp] mov edi,ecx shr edi,16 and edi,255 xor esi,DWORD [2+edi*8+ebp] mov edi,edx shr edi,24 xor esi,DWORD [1+edi*8+ebp] mov DWORD [4+esp],esi mov esi,ebx and esi,255 shr ebx,16 mov esi,DWORD [esi*8+ebp] movzx edi,ch xor esi,DWORD [3+edi*8+ebp] mov edi,edx shr edi,16 and edi,255 xor esi,DWORD [2+edi*8+ebp] mov edi,eax shr edi,24 xor esi,DWORD [1+edi*8+ebp] mov DWORD [8+esp],esi mov esi,ecx and esi,255 shr ecx,24 mov esi,DWORD [esi*8+ebp] movzx edi,dh xor esi,DWORD [3+edi*8+ebp] mov edi,eax shr edi,16 and edx,255 and edi,255 xor esi,DWORD [2+edi*8+ebp] movzx edi,bh xor esi,DWORD [1+edi*8+ebp] mov edi,DWORD [20+esp] mov edx,DWORD [edx*8+ebp] movzx eax,ah xor edx,DWORD [3+eax*8+ebp] mov eax,DWORD [4+esp] and ebx,255 xor edx,DWORD [2+ebx*8+ebp] mov ebx,DWORD [8+esp] xor edx,DWORD [1+ecx*8+ebp] mov ecx,esi add edi,16 xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] cmp edi,DWORD [24+esp] mov DWORD [20+esp],edi jb NEAR L$003loop mov esi,eax and esi,255 mov esi,DWORD [2+esi*8+ebp] and esi,255 movzx edi,bh mov edi,DWORD [edi*8+ebp] and edi,65280 xor esi,edi mov edi,ecx shr edi,16 and edi,255 mov edi,DWORD [edi*8+ebp] and edi,16711680 xor esi,edi mov edi,edx shr edi,24 mov edi,DWORD [2+edi*8+ebp] and edi,4278190080 xor esi,edi mov DWORD [4+esp],esi mov esi,ebx and esi,255 shr ebx,16 mov esi,DWORD [2+esi*8+ebp] and esi,255 movzx edi,ch mov edi,DWORD [edi*8+ebp] and edi,65280 xor esi,edi mov edi,edx shr edi,16 and edi,255 mov edi,DWORD [edi*8+ebp] and edi,16711680 xor esi,edi mov edi,eax shr edi,24 mov edi,DWORD [2+edi*8+ebp] and edi,4278190080 xor esi,edi mov DWORD [8+esp],esi mov esi,ecx and esi,255 shr ecx,24 mov esi,DWORD [2+esi*8+ebp] and esi,255 movzx edi,dh mov edi,DWORD [edi*8+ebp] and edi,65280 xor esi,edi mov edi,eax shr edi,16 and edx,255 and edi,255 mov edi,DWORD [edi*8+ebp] and edi,16711680 xor esi,edi movzx edi,bh mov edi,DWORD [2+edi*8+ebp] and edi,4278190080 xor esi,edi mov edi,DWORD [20+esp] and edx,255 mov edx,DWORD [2+edx*8+ebp] and edx,255 movzx eax,ah mov eax,DWORD [eax*8+ebp] and eax,65280 xor edx,eax mov eax,DWORD [4+esp] and ebx,255 mov ebx,DWORD [ebx*8+ebp] and ebx,16711680 xor edx,ebx mov ebx,DWORD [8+esp] mov ecx,DWORD [2+ecx*8+ebp] and ecx,4278190080 xor edx,ecx mov ecx,esi add edi,16 xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] ret align 64 L$AES_Te: dd 2774754246,2774754246 dd 2222750968,2222750968 dd 2574743534,2574743534 dd 2373680118,2373680118 dd 234025727,234025727 dd 3177933782,3177933782 dd 2976870366,2976870366 dd 1422247313,1422247313 dd 1345335392,1345335392 dd 50397442,50397442 dd 2842126286,2842126286 dd 2099981142,2099981142 dd 436141799,436141799 dd 1658312629,1658312629 dd 3870010189,3870010189 dd 2591454956,2591454956 dd 1170918031,1170918031 dd 2642575903,2642575903 dd 1086966153,1086966153 dd 2273148410,2273148410 dd 368769775,368769775 dd 3948501426,3948501426 dd 3376891790,3376891790 dd 200339707,200339707 dd 3970805057,3970805057 dd 1742001331,1742001331 dd 4255294047,4255294047 dd 3937382213,3937382213 dd 3214711843,3214711843 dd 4154762323,4154762323 dd 2524082916,2524082916 dd 1539358875,1539358875 dd 3266819957,3266819957 dd 486407649,486407649 dd 2928907069,2928907069 dd 1780885068,1780885068 dd 1513502316,1513502316 dd 1094664062,1094664062 dd 49805301,49805301 dd 1338821763,1338821763 dd 1546925160,1546925160 dd 4104496465,4104496465 dd 887481809,887481809 dd 150073849,150073849 dd 2473685474,2473685474 dd 1943591083,1943591083 dd 1395732834,1395732834 dd 1058346282,1058346282 dd 201589768,201589768 dd 1388824469,1388824469 dd 1696801606,1696801606 dd 1589887901,1589887901 dd 672667696,672667696 dd 2711000631,2711000631 dd 251987210,251987210 dd 3046808111,3046808111 dd 151455502,151455502 dd 907153956,907153956 dd 2608889883,2608889883 dd 1038279391,1038279391 dd 652995533,652995533 dd 1764173646,1764173646 dd 3451040383,3451040383 dd 2675275242,2675275242 dd 453576978,453576978 dd 2659418909,2659418909 dd 1949051992,1949051992 dd 773462580,773462580 dd 756751158,756751158 dd 2993581788,2993581788 dd 3998898868,3998898868 dd 4221608027,4221608027 dd 4132590244,4132590244 dd 1295727478,1295727478 dd 1641469623,1641469623 dd 3467883389,3467883389 dd 2066295122,2066295122 dd 1055122397,1055122397 dd 1898917726,1898917726 dd 2542044179,2542044179 dd 4115878822,4115878822 dd 1758581177,1758581177 dd 0,0 dd 753790401,753790401 dd 1612718144,1612718144 dd 536673507,536673507 dd 3367088505,3367088505 dd 3982187446,3982187446 dd 3194645204,3194645204 dd 1187761037,1187761037 dd 3653156455,3653156455 dd 1262041458,1262041458 dd 3729410708,3729410708 dd 3561770136,3561770136 dd 3898103984,3898103984 dd 1255133061,1255133061 dd 1808847035,1808847035 dd 720367557,720367557 dd 3853167183,3853167183 dd 385612781,385612781 dd 3309519750,3309519750 dd 3612167578,3612167578 dd 1429418854,1429418854 dd 2491778321,2491778321 dd 3477423498,3477423498 dd 284817897,284817897 dd 100794884,100794884 dd 2172616702,2172616702 dd 4031795360,4031795360 dd 1144798328,1144798328 dd 3131023141,3131023141 dd 3819481163,3819481163 dd 4082192802,4082192802 dd 4272137053,4272137053 dd 3225436288,3225436288 dd 2324664069,2324664069 dd 2912064063,2912064063 dd 3164445985,3164445985 dd 1211644016,1211644016 dd 83228145,83228145 dd 3753688163,3753688163 dd 3249976951,3249976951 dd 1977277103,1977277103 dd 1663115586,1663115586 dd 806359072,806359072 dd 452984805,452984805 dd 250868733,250868733 dd 1842533055,1842533055 dd 1288555905,1288555905 dd 336333848,336333848 dd 890442534,890442534 dd 804056259,804056259 dd 3781124030,3781124030 dd 2727843637,2727843637 dd 3427026056,3427026056 dd 957814574,957814574 dd 1472513171,1472513171 dd 4071073621,4071073621 dd 2189328124,2189328124 dd 1195195770,1195195770 dd 2892260552,2892260552 dd 3881655738,3881655738 dd 723065138,723065138 dd 2507371494,2507371494 dd 2690670784,2690670784 dd 2558624025,2558624025 dd 3511635870,3511635870 dd 2145180835,2145180835 dd 1713513028,1713513028 dd 2116692564,2116692564 dd 2878378043,2878378043 dd 2206763019,2206763019 dd 3393603212,3393603212 dd 703524551,703524551 dd 3552098411,3552098411 dd 1007948840,1007948840 dd 2044649127,2044649127 dd 3797835452,3797835452 dd 487262998,487262998 dd 1994120109,1994120109 dd 1004593371,1004593371 dd 1446130276,1446130276 dd 1312438900,1312438900 dd 503974420,503974420 dd 3679013266,3679013266 dd 168166924,168166924 dd 1814307912,1814307912 dd 3831258296,3831258296 dd 1573044895,1573044895 dd 1859376061,1859376061 dd 4021070915,4021070915 dd 2791465668,2791465668 dd 2828112185,2828112185 dd 2761266481,2761266481 dd 937747667,937747667 dd 2339994098,2339994098 dd 854058965,854058965 dd 1137232011,1137232011 dd 1496790894,1496790894 dd 3077402074,3077402074 dd 2358086913,2358086913 dd 1691735473,1691735473 dd 3528347292,3528347292 dd 3769215305,3769215305 dd 3027004632,3027004632 dd 4199962284,4199962284 dd 133494003,133494003 dd 636152527,636152527 dd 2942657994,2942657994 dd 2390391540,2390391540 dd 3920539207,3920539207 dd 403179536,403179536 dd 3585784431,3585784431 dd 2289596656,2289596656 dd 1864705354,1864705354 dd 1915629148,1915629148 dd 605822008,605822008 dd 4054230615,4054230615 dd 3350508659,3350508659 dd 1371981463,1371981463 dd 602466507,602466507 dd 2094914977,2094914977 dd 2624877800,2624877800 dd 555687742,555687742 dd 3712699286,3712699286 dd 3703422305,3703422305 dd 2257292045,2257292045 dd 2240449039,2240449039 dd 2423288032,2423288032 dd 1111375484,1111375484 dd 3300242801,3300242801 dd 2858837708,2858837708 dd 3628615824,3628615824 dd 84083462,84083462 dd 32962295,32962295 dd 302911004,302911004 dd 2741068226,2741068226 dd 1597322602,1597322602 dd 4183250862,4183250862 dd 3501832553,3501832553 dd 2441512471,2441512471 dd 1489093017,1489093017 dd 656219450,656219450 dd 3114180135,3114180135 dd 954327513,954327513 dd 335083755,335083755 dd 3013122091,3013122091 dd 856756514,856756514 dd 3144247762,3144247762 dd 1893325225,1893325225 dd 2307821063,2307821063 dd 2811532339,2811532339 dd 3063651117,3063651117 dd 572399164,572399164 dd 2458355477,2458355477 dd 552200649,552200649 dd 1238290055,1238290055 dd 4283782570,4283782570 dd 2015897680,2015897680 dd 2061492133,2061492133 dd 2408352771,2408352771 dd 4171342169,4171342169 dd 2156497161,2156497161 dd 386731290,386731290 dd 3669999461,3669999461 dd 837215959,837215959 dd 3326231172,3326231172 dd 3093850320,3093850320 dd 3275833730,3275833730 dd 2962856233,2962856233 dd 1999449434,1999449434 dd 286199582,286199582 dd 3417354363,3417354363 dd 4233385128,4233385128 dd 3602627437,3602627437 dd 974525996,974525996 db 99,124,119,123,242,107,111,197 db 48,1,103,43,254,215,171,118 db 202,130,201,125,250,89,71,240 db 173,212,162,175,156,164,114,192 db 183,253,147,38,54,63,247,204 db 52,165,229,241,113,216,49,21 db 4,199,35,195,24,150,5,154 db 7,18,128,226,235,39,178,117 db 9,131,44,26,27,110,90,160 db 82,59,214,179,41,227,47,132 db 83,209,0,237,32,252,177,91 db 106,203,190,57,74,76,88,207 db 208,239,170,251,67,77,51,133 db 69,249,2,127,80,60,159,168 db 81,163,64,143,146,157,56,245 db 188,182,218,33,16,255,243,210 db 205,12,19,236,95,151,68,23 db 196,167,126,61,100,93,25,115 db 96,129,79,220,34,42,144,136 db 70,238,184,20,222,94,11,219 db 224,50,58,10,73,6,36,92 db 194,211,172,98,145,149,228,121 db 231,200,55,109,141,213,78,169 db 108,86,244,234,101,122,174,8 db 186,120,37,46,28,166,180,198 db 232,221,116,31,75,189,139,138 db 112,62,181,102,72,3,246,14 db 97,53,87,185,134,193,29,158 db 225,248,152,17,105,217,142,148 db 155,30,135,233,206,85,40,223 db 140,161,137,13,191,230,66,104 db 65,153,45,15,176,84,187,22 db 99,124,119,123,242,107,111,197 db 48,1,103,43,254,215,171,118 db 202,130,201,125,250,89,71,240 db 173,212,162,175,156,164,114,192 db 183,253,147,38,54,63,247,204 db 52,165,229,241,113,216,49,21 db 4,199,35,195,24,150,5,154 db 7,18,128,226,235,39,178,117 db 9,131,44,26,27,110,90,160 db 82,59,214,179,41,227,47,132 db 83,209,0,237,32,252,177,91 db 106,203,190,57,74,76,88,207 db 208,239,170,251,67,77,51,133 db 69,249,2,127,80,60,159,168 db 81,163,64,143,146,157,56,245 db 188,182,218,33,16,255,243,210 db 205,12,19,236,95,151,68,23 db 196,167,126,61,100,93,25,115 db 96,129,79,220,34,42,144,136 db 70,238,184,20,222,94,11,219 db 224,50,58,10,73,6,36,92 db 194,211,172,98,145,149,228,121 db 231,200,55,109,141,213,78,169 db 108,86,244,234,101,122,174,8 db 186,120,37,46,28,166,180,198 db 232,221,116,31,75,189,139,138 db 112,62,181,102,72,3,246,14 db 97,53,87,185,134,193,29,158 db 225,248,152,17,105,217,142,148 db 155,30,135,233,206,85,40,223 db 140,161,137,13,191,230,66,104 db 65,153,45,15,176,84,187,22 db 99,124,119,123,242,107,111,197 db 48,1,103,43,254,215,171,118 db 202,130,201,125,250,89,71,240 db 173,212,162,175,156,164,114,192 db 183,253,147,38,54,63,247,204 db 52,165,229,241,113,216,49,21 db 4,199,35,195,24,150,5,154 db 7,18,128,226,235,39,178,117 db 9,131,44,26,27,110,90,160 db 82,59,214,179,41,227,47,132 db 83,209,0,237,32,252,177,91 db 106,203,190,57,74,76,88,207 db 208,239,170,251,67,77,51,133 db 69,249,2,127,80,60,159,168 db 81,163,64,143,146,157,56,245 db 188,182,218,33,16,255,243,210 db 205,12,19,236,95,151,68,23 db 196,167,126,61,100,93,25,115 db 96,129,79,220,34,42,144,136 db 70,238,184,20,222,94,11,219 db 224,50,58,10,73,6,36,92 db 194,211,172,98,145,149,228,121 db 231,200,55,109,141,213,78,169 db 108,86,244,234,101,122,174,8 db 186,120,37,46,28,166,180,198 db 232,221,116,31,75,189,139,138 db 112,62,181,102,72,3,246,14 db 97,53,87,185,134,193,29,158 db 225,248,152,17,105,217,142,148 db 155,30,135,233,206,85,40,223 db 140,161,137,13,191,230,66,104 db 65,153,45,15,176,84,187,22 db 99,124,119,123,242,107,111,197 db 48,1,103,43,254,215,171,118 db 202,130,201,125,250,89,71,240 db 173,212,162,175,156,164,114,192 db 183,253,147,38,54,63,247,204 db 52,165,229,241,113,216,49,21 db 4,199,35,195,24,150,5,154 db 7,18,128,226,235,39,178,117 db 9,131,44,26,27,110,90,160 db 82,59,214,179,41,227,47,132 db 83,209,0,237,32,252,177,91 db 106,203,190,57,74,76,88,207 db 208,239,170,251,67,77,51,133 db 69,249,2,127,80,60,159,168 db 81,163,64,143,146,157,56,245 db 188,182,218,33,16,255,243,210 db 205,12,19,236,95,151,68,23 db 196,167,126,61,100,93,25,115 db 96,129,79,220,34,42,144,136 db 70,238,184,20,222,94,11,219 db 224,50,58,10,73,6,36,92 db 194,211,172,98,145,149,228,121 db 231,200,55,109,141,213,78,169 db 108,86,244,234,101,122,174,8 db 186,120,37,46,28,166,180,198 db 232,221,116,31,75,189,139,138 db 112,62,181,102,72,3,246,14 db 97,53,87,185,134,193,29,158 db 225,248,152,17,105,217,142,148 db 155,30,135,233,206,85,40,223 db 140,161,137,13,191,230,66,104 db 65,153,45,15,176,84,187,22 dd 1,2,4,8 dd 16,32,64,128 dd 27,54,0,0 dd 0,0,0,0 global _asm_AES_encrypt align 16 _asm_AES_encrypt: L$_asm_AES_encrypt_begin: push ebp push ebx push esi push edi mov esi,DWORD [20+esp] mov edi,DWORD [28+esp] mov eax,esp sub esp,36 and esp,-64 lea ebx,[edi-127] sub ebx,esp neg ebx and ebx,960 sub esp,ebx add esp,4 mov DWORD [28+esp],eax call L$004pic_point L$004pic_point: pop ebp lea eax,[_OPENSSL_ia32cap_P] lea ebp,[(L$AES_Te-L$004pic_point)+ebp] lea ebx,[764+esp] sub ebx,ebp and ebx,768 lea ebp,[2176+ebx*1+ebp] bt DWORD [eax],25 jnc NEAR L$005x86 movq mm0,[esi] movq mm4,[8+esi] call __sse_AES_encrypt_compact mov esp,DWORD [28+esp] mov esi,DWORD [24+esp] movq [esi],mm0 movq [8+esi],mm4 emms pop edi pop esi pop ebx pop ebp ret align 16 L$005x86: mov DWORD [24+esp],ebp mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [8+esi] mov edx,DWORD [12+esi] call __x86_AES_encrypt_compact mov esp,DWORD [28+esp] mov esi,DWORD [24+esp] mov DWORD [esi],eax mov DWORD [4+esi],ebx mov DWORD [8+esi],ecx mov DWORD [12+esi],edx pop edi pop esi pop ebx pop ebp ret align 16 __x86_AES_decrypt_compact: mov DWORD [20+esp],edi xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] mov esi,DWORD [240+edi] lea esi,[esi*1+esi-2] lea esi,[esi*8+edi] mov DWORD [24+esp],esi mov edi,DWORD [ebp-128] mov esi,DWORD [ebp-96] mov edi,DWORD [ebp-64] mov esi,DWORD [ebp-32] mov edi,DWORD [ebp] mov esi,DWORD [32+ebp] mov edi,DWORD [64+ebp] mov esi,DWORD [96+ebp] align 16 L$006loop: mov esi,eax and esi,255 movzx esi,BYTE [esi*1+ebp-128] movzx edi,dh movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,ecx shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi mov edi,ebx shr edi,24 movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi mov DWORD [4+esp],esi mov esi,ebx and esi,255 movzx esi,BYTE [esi*1+ebp-128] movzx edi,ah movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,edx shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi mov edi,ecx shr edi,24 movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi mov DWORD [8+esp],esi mov esi,ecx and esi,255 movzx esi,BYTE [esi*1+ebp-128] movzx edi,bh movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,eax shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi mov edi,edx shr edi,24 movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi and edx,255 movzx edx,BYTE [edx*1+ebp-128] movzx ecx,ch movzx ecx,BYTE [ecx*1+ebp-128] shl ecx,8 xor edx,ecx mov ecx,esi shr ebx,16 and ebx,255 movzx ebx,BYTE [ebx*1+ebp-128] shl ebx,16 xor edx,ebx shr eax,24 movzx eax,BYTE [eax*1+ebp-128] shl eax,24 xor edx,eax mov edi,2155905152 and edi,ecx mov esi,edi shr edi,7 lea eax,[ecx*1+ecx] sub esi,edi and eax,4278124286 and esi,454761243 xor eax,esi mov edi,2155905152 and edi,eax mov esi,edi shr edi,7 lea ebx,[eax*1+eax] sub esi,edi and ebx,4278124286 and esi,454761243 xor eax,ecx xor ebx,esi mov edi,2155905152 and edi,ebx mov esi,edi shr edi,7 lea ebp,[ebx*1+ebx] sub esi,edi and ebp,4278124286 and esi,454761243 xor ebx,ecx rol ecx,8 xor ebp,esi xor ecx,eax xor eax,ebp xor ecx,ebx xor ebx,ebp rol eax,24 xor ecx,ebp rol ebx,16 xor ecx,eax rol ebp,8 xor ecx,ebx mov eax,DWORD [4+esp] xor ecx,ebp mov DWORD [12+esp],ecx mov edi,2155905152 and edi,edx mov esi,edi shr edi,7 lea ebx,[edx*1+edx] sub esi,edi and ebx,4278124286 and esi,454761243 xor ebx,esi mov edi,2155905152 and edi,ebx mov esi,edi shr edi,7 lea ecx,[ebx*1+ebx] sub esi,edi and ecx,4278124286 and esi,454761243 xor ebx,edx xor ecx,esi mov edi,2155905152 and edi,ecx mov esi,edi shr edi,7 lea ebp,[ecx*1+ecx] sub esi,edi and ebp,4278124286 and esi,454761243 xor ecx,edx rol edx,8 xor ebp,esi xor edx,ebx xor ebx,ebp xor edx,ecx xor ecx,ebp rol ebx,24 xor edx,ebp rol ecx,16 xor edx,ebx rol ebp,8 xor edx,ecx mov ebx,DWORD [8+esp] xor edx,ebp mov DWORD [16+esp],edx mov edi,2155905152 and edi,eax mov esi,edi shr edi,7 lea ecx,[eax*1+eax] sub esi,edi and ecx,4278124286 and esi,454761243 xor ecx,esi mov edi,2155905152 and edi,ecx mov esi,edi shr edi,7 lea edx,[ecx*1+ecx] sub esi,edi and edx,4278124286 and esi,454761243 xor ecx,eax xor edx,esi mov edi,2155905152 and edi,edx mov esi,edi shr edi,7 lea ebp,[edx*1+edx] sub esi,edi and ebp,4278124286 and esi,454761243 xor edx,eax rol eax,8 xor ebp,esi xor eax,ecx xor ecx,ebp xor eax,edx xor edx,ebp rol ecx,24 xor eax,ebp rol edx,16 xor eax,ecx rol ebp,8 xor eax,edx xor eax,ebp mov edi,2155905152 and edi,ebx mov esi,edi shr edi,7 lea ecx,[ebx*1+ebx] sub esi,edi and ecx,4278124286 and esi,454761243 xor ecx,esi mov edi,2155905152 and edi,ecx mov esi,edi shr edi,7 lea edx,[ecx*1+ecx] sub esi,edi and edx,4278124286 and esi,454761243 xor ecx,ebx xor edx,esi mov edi,2155905152 and edi,edx mov esi,edi shr edi,7 lea ebp,[edx*1+edx] sub esi,edi and ebp,4278124286 and esi,454761243 xor edx,ebx rol ebx,8 xor ebp,esi xor ebx,ecx xor ecx,ebp xor ebx,edx xor edx,ebp rol ecx,24 xor ebx,ebp rol edx,16 xor ebx,ecx rol ebp,8 xor ebx,edx mov ecx,DWORD [12+esp] xor ebx,ebp mov edx,DWORD [16+esp] mov edi,DWORD [20+esp] mov ebp,DWORD [28+esp] add edi,16 xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] cmp edi,DWORD [24+esp] mov DWORD [20+esp],edi jb NEAR L$006loop mov esi,eax and esi,255 movzx esi,BYTE [esi*1+ebp-128] movzx edi,dh movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,ecx shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi mov edi,ebx shr edi,24 movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi mov DWORD [4+esp],esi mov esi,ebx and esi,255 movzx esi,BYTE [esi*1+ebp-128] movzx edi,ah movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,edx shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi mov edi,ecx shr edi,24 movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi mov DWORD [8+esp],esi mov esi,ecx and esi,255 movzx esi,BYTE [esi*1+ebp-128] movzx edi,bh movzx edi,BYTE [edi*1+ebp-128] shl edi,8 xor esi,edi mov edi,eax shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp-128] shl edi,16 xor esi,edi mov edi,edx shr edi,24 movzx edi,BYTE [edi*1+ebp-128] shl edi,24 xor esi,edi mov edi,DWORD [20+esp] and edx,255 movzx edx,BYTE [edx*1+ebp-128] movzx ecx,ch movzx ecx,BYTE [ecx*1+ebp-128] shl ecx,8 xor edx,ecx mov ecx,esi shr ebx,16 and ebx,255 movzx ebx,BYTE [ebx*1+ebp-128] shl ebx,16 xor edx,ebx mov ebx,DWORD [8+esp] shr eax,24 movzx eax,BYTE [eax*1+ebp-128] shl eax,24 xor edx,eax mov eax,DWORD [4+esp] xor eax,DWORD [16+edi] xor ebx,DWORD [20+edi] xor ecx,DWORD [24+edi] xor edx,DWORD [28+edi] ret align 16 __sse_AES_decrypt_compact: pxor mm0,[edi] pxor mm4,[8+edi] mov esi,DWORD [240+edi] lea esi,[esi*1+esi-2] lea esi,[esi*8+edi] mov DWORD [24+esp],esi mov eax,454761243 mov DWORD [8+esp],eax mov DWORD [12+esp],eax mov eax,DWORD [ebp-128] mov ebx,DWORD [ebp-96] mov ecx,DWORD [ebp-64] mov edx,DWORD [ebp-32] mov eax,DWORD [ebp] mov ebx,DWORD [32+ebp] mov ecx,DWORD [64+ebp] mov edx,DWORD [96+ebp] align 16 L$007loop: pshufw mm1,mm0,12 pshufw mm5,mm4,9 movd eax,mm1 movd ebx,mm5 mov DWORD [20+esp],edi movzx esi,al movzx edx,ah pshufw mm2,mm0,6 movzx ecx,BYTE [esi*1+ebp-128] movzx edi,bl movzx edx,BYTE [edx*1+ebp-128] shr eax,16 shl edx,8 movzx esi,BYTE [edi*1+ebp-128] movzx edi,bh shl esi,16 pshufw mm6,mm4,3 or ecx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,ah shl esi,24 shr ebx,16 or edx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,bh shl esi,24 or ecx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,al shl esi,8 movd eax,mm2 or ecx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,bl shl esi,16 movd ebx,mm6 movd mm0,ecx movzx ecx,BYTE [edi*1+ebp-128] movzx edi,al or ecx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,bl or edx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,ah shl esi,16 shr eax,16 or edx,esi movzx esi,BYTE [edi*1+ebp-128] movzx edi,bh shr ebx,16 shl esi,8 movd mm1,edx movzx edx,BYTE [edi*1+ebp-128] movzx edi,bh shl edx,24 and ebx,255 or edx,esi punpckldq mm0,mm1 movzx esi,BYTE [edi*1+ebp-128] movzx edi,al shl esi,8 movzx eax,ah movzx ebx,BYTE [ebx*1+ebp-128] or ecx,esi movzx esi,BYTE [edi*1+ebp-128] or edx,ebx shl esi,16 movzx eax,BYTE [eax*1+ebp-128] or edx,esi shl eax,24 or ecx,eax mov edi,DWORD [20+esp] movd mm4,edx movd mm5,ecx punpckldq mm4,mm5 add edi,16 cmp edi,DWORD [24+esp] ja NEAR L$008out movq mm3,mm0 movq mm7,mm4 pshufw mm2,mm0,228 pshufw mm6,mm4,228 movq mm1,mm0 movq mm5,mm4 pshufw mm0,mm0,177 pshufw mm4,mm4,177 pslld mm2,8 pslld mm6,8 psrld mm3,8 psrld mm7,8 pxor mm0,mm2 pxor mm4,mm6 pxor mm0,mm3 pxor mm4,mm7 pslld mm2,16 pslld mm6,16 psrld mm3,16 psrld mm7,16 pxor mm0,mm2 pxor mm4,mm6 pxor mm0,mm3 pxor mm4,mm7 movq mm3,[8+esp] pxor mm2,mm2 pxor mm6,mm6 pcmpgtb mm2,mm1 pcmpgtb mm6,mm5 pand mm2,mm3 pand mm6,mm3 paddb mm1,mm1 paddb mm5,mm5 pxor mm1,mm2 pxor mm5,mm6 movq mm3,mm1 movq mm7,mm5 movq mm2,mm1 movq mm6,mm5 pxor mm0,mm1 pxor mm4,mm5 pslld mm3,24 pslld mm7,24 psrld mm2,8 psrld mm6,8 pxor mm0,mm3 pxor mm4,mm7 pxor mm0,mm2 pxor mm4,mm6 movq mm2,[8+esp] pxor mm3,mm3 pxor mm7,mm7 pcmpgtb mm3,mm1 pcmpgtb mm7,mm5 pand mm3,mm2 pand mm7,mm2 paddb mm1,mm1 paddb mm5,mm5 pxor mm1,mm3 pxor mm5,mm7 pshufw mm3,mm1,177 pshufw mm7,mm5,177 pxor mm0,mm1 pxor mm4,mm5 pxor mm0,mm3 pxor mm4,mm7 pxor mm3,mm3 pxor mm7,mm7 pcmpgtb mm3,mm1 pcmpgtb mm7,mm5 pand mm3,mm2 pand mm7,mm2 paddb mm1,mm1 paddb mm5,mm5 pxor mm1,mm3 pxor mm5,mm7 pxor mm0,mm1 pxor mm4,mm5 movq mm3,mm1 movq mm7,mm5 pshufw mm2,mm1,177 pshufw mm6,mm5,177 pxor mm0,mm2 pxor mm4,mm6 pslld mm1,8 pslld mm5,8 psrld mm3,8 psrld mm7,8 movq mm2,[edi] movq mm6,[8+edi] pxor mm0,mm1 pxor mm4,mm5 pxor mm0,mm3 pxor mm4,mm7 mov eax,DWORD [ebp-128] pslld mm1,16 pslld mm5,16 mov ebx,DWORD [ebp-64] psrld mm3,16 psrld mm7,16 mov ecx,DWORD [ebp] pxor mm0,mm1 pxor mm4,mm5 mov edx,DWORD [64+ebp] pxor mm0,mm3 pxor mm4,mm7 pxor mm0,mm2 pxor mm4,mm6 jmp NEAR L$007loop align 16 L$008out: pxor mm0,[edi] pxor mm4,[8+edi] ret align 16 __x86_AES_decrypt: mov DWORD [20+esp],edi xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] mov esi,DWORD [240+edi] lea esi,[esi*1+esi-2] lea esi,[esi*8+edi] mov DWORD [24+esp],esi align 16 L$009loop: mov esi,eax and esi,255 mov esi,DWORD [esi*8+ebp] movzx edi,dh xor esi,DWORD [3+edi*8+ebp] mov edi,ecx shr edi,16 and edi,255 xor esi,DWORD [2+edi*8+ebp] mov edi,ebx shr edi,24 xor esi,DWORD [1+edi*8+ebp] mov DWORD [4+esp],esi mov esi,ebx and esi,255 mov esi,DWORD [esi*8+ebp] movzx edi,ah xor esi,DWORD [3+edi*8+ebp] mov edi,edx shr edi,16 and edi,255 xor esi,DWORD [2+edi*8+ebp] mov edi,ecx shr edi,24 xor esi,DWORD [1+edi*8+ebp] mov DWORD [8+esp],esi mov esi,ecx and esi,255 mov esi,DWORD [esi*8+ebp] movzx edi,bh xor esi,DWORD [3+edi*8+ebp] mov edi,eax shr edi,16 and edi,255 xor esi,DWORD [2+edi*8+ebp] mov edi,edx shr edi,24 xor esi,DWORD [1+edi*8+ebp] mov edi,DWORD [20+esp] and edx,255 mov edx,DWORD [edx*8+ebp] movzx ecx,ch xor edx,DWORD [3+ecx*8+ebp] mov ecx,esi shr ebx,16 and ebx,255 xor edx,DWORD [2+ebx*8+ebp] mov ebx,DWORD [8+esp] shr eax,24 xor edx,DWORD [1+eax*8+ebp] mov eax,DWORD [4+esp] add edi,16 xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] cmp edi,DWORD [24+esp] mov DWORD [20+esp],edi jb NEAR L$009loop lea ebp,[2176+ebp] mov edi,DWORD [ebp-128] mov esi,DWORD [ebp-96] mov edi,DWORD [ebp-64] mov esi,DWORD [ebp-32] mov edi,DWORD [ebp] mov esi,DWORD [32+ebp] mov edi,DWORD [64+ebp] mov esi,DWORD [96+ebp] lea ebp,[ebp-128] mov esi,eax and esi,255 movzx esi,BYTE [esi*1+ebp] movzx edi,dh movzx edi,BYTE [edi*1+ebp] shl edi,8 xor esi,edi mov edi,ecx shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp] shl edi,16 xor esi,edi mov edi,ebx shr edi,24 movzx edi,BYTE [edi*1+ebp] shl edi,24 xor esi,edi mov DWORD [4+esp],esi mov esi,ebx and esi,255 movzx esi,BYTE [esi*1+ebp] movzx edi,ah movzx edi,BYTE [edi*1+ebp] shl edi,8 xor esi,edi mov edi,edx shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp] shl edi,16 xor esi,edi mov edi,ecx shr edi,24 movzx edi,BYTE [edi*1+ebp] shl edi,24 xor esi,edi mov DWORD [8+esp],esi mov esi,ecx and esi,255 movzx esi,BYTE [esi*1+ebp] movzx edi,bh movzx edi,BYTE [edi*1+ebp] shl edi,8 xor esi,edi mov edi,eax shr edi,16 and edi,255 movzx edi,BYTE [edi*1+ebp] shl edi,16 xor esi,edi mov edi,edx shr edi,24 movzx edi,BYTE [edi*1+ebp] shl edi,24 xor esi,edi mov edi,DWORD [20+esp] and edx,255 movzx edx,BYTE [edx*1+ebp] movzx ecx,ch movzx ecx,BYTE [ecx*1+ebp] shl ecx,8 xor edx,ecx mov ecx,esi shr ebx,16 and ebx,255 movzx ebx,BYTE [ebx*1+ebp] shl ebx,16 xor edx,ebx mov ebx,DWORD [8+esp] shr eax,24 movzx eax,BYTE [eax*1+ebp] shl eax,24 xor edx,eax mov eax,DWORD [4+esp] lea ebp,[ebp-2048] add edi,16 xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] ret align 64 L$AES_Td: dd 1353184337,1353184337 dd 1399144830,1399144830 dd 3282310938,3282310938 dd 2522752826,2522752826 dd 3412831035,3412831035 dd 4047871263,4047871263 dd 2874735276,2874735276 dd 2466505547,2466505547 dd 1442459680,1442459680 dd 4134368941,4134368941 dd 2440481928,2440481928 dd 625738485,625738485 dd 4242007375,4242007375 dd 3620416197,3620416197 dd 2151953702,2151953702 dd 2409849525,2409849525 dd 1230680542,1230680542 dd 1729870373,1729870373 dd 2551114309,2551114309 dd 3787521629,3787521629 dd 41234371,41234371 dd 317738113,317738113 dd 2744600205,2744600205 dd 3338261355,3338261355 dd 3881799427,3881799427 dd 2510066197,2510066197 dd 3950669247,3950669247 dd 3663286933,3663286933 dd 763608788,763608788 dd 3542185048,3542185048 dd 694804553,694804553 dd 1154009486,1154009486 dd 1787413109,1787413109 dd 2021232372,2021232372 dd 1799248025,1799248025 dd 3715217703,3715217703 dd 3058688446,3058688446 dd 397248752,397248752 dd 1722556617,1722556617 dd 3023752829,3023752829 dd 407560035,407560035 dd 2184256229,2184256229 dd 1613975959,1613975959 dd 1165972322,1165972322 dd 3765920945,3765920945 dd 2226023355,2226023355 dd 480281086,480281086 dd 2485848313,2485848313 dd 1483229296,1483229296 dd 436028815,436028815 dd 2272059028,2272059028 dd 3086515026,3086515026 dd 601060267,601060267 dd 3791801202,3791801202 dd 1468997603,1468997603 dd 715871590,715871590 dd 120122290,120122290 dd 63092015,63092015 dd 2591802758,2591802758 dd 2768779219,2768779219 dd 4068943920,4068943920 dd 2997206819,2997206819 dd 3127509762,3127509762 dd 1552029421,1552029421 dd 723308426,723308426 dd 2461301159,2461301159 dd 4042393587,4042393587 dd 2715969870,2715969870 dd 3455375973,3455375973 dd 3586000134,3586000134 dd 526529745,526529745 dd 2331944644,2331944644 dd 2639474228,2639474228 dd 2689987490,2689987490 dd 853641733,853641733 dd 1978398372,1978398372 dd 971801355,971801355 dd 2867814464,2867814464 dd 111112542,111112542 dd 1360031421,1360031421 dd 4186579262,4186579262 dd 1023860118,1023860118 dd 2919579357,2919579357 dd 1186850381,1186850381 dd 3045938321,3045938321 dd 90031217,90031217 dd 1876166148,1876166148 dd 4279586912,4279586912 dd 620468249,620468249 dd 2548678102,2548678102 dd 3426959497,3426959497 dd 2006899047,2006899047 dd 3175278768,3175278768 dd 2290845959,2290845959 dd 945494503,945494503 dd 3689859193,3689859193 dd 1191869601,1191869601 dd 3910091388,3910091388 dd 3374220536,3374220536 dd 0,0 dd 2206629897,2206629897 dd 1223502642,1223502642 dd 2893025566,2893025566 dd 1316117100,1316117100 dd 4227796733,4227796733 dd 1446544655,1446544655 dd 517320253,517320253 dd 658058550,658058550 dd 1691946762,1691946762 dd 564550760,564550760 dd 3511966619,3511966619 dd 976107044,976107044 dd 2976320012,2976320012 dd 266819475,266819475 dd 3533106868,3533106868 dd 2660342555,2660342555 dd 1338359936,1338359936 dd 2720062561,2720062561 dd 1766553434,1766553434 dd 370807324,370807324 dd 179999714,179999714 dd 3844776128,3844776128 dd 1138762300,1138762300 dd 488053522,488053522 dd 185403662,185403662 dd 2915535858,2915535858 dd 3114841645,3114841645 dd 3366526484,3366526484 dd 2233069911,2233069911 dd 1275557295,1275557295 dd 3151862254,3151862254 dd 4250959779,4250959779 dd 2670068215,2670068215 dd 3170202204,3170202204 dd 3309004356,3309004356 dd 880737115,880737115 dd 1982415755,1982415755 dd 3703972811,3703972811 dd 1761406390,1761406390 dd 1676797112,1676797112 dd 3403428311,3403428311 dd 277177154,277177154 dd 1076008723,1076008723 dd 538035844,538035844 dd 2099530373,2099530373 dd 4164795346,4164795346 dd 288553390,288553390 dd 1839278535,1839278535 dd 1261411869,1261411869 dd 4080055004,4080055004 dd 3964831245,3964831245 dd 3504587127,3504587127 dd 1813426987,1813426987 dd 2579067049,2579067049 dd 4199060497,4199060497 dd 577038663,577038663 dd 3297574056,3297574056 dd 440397984,440397984 dd 3626794326,3626794326 dd 4019204898,4019204898 dd 3343796615,3343796615 dd 3251714265,3251714265 dd 4272081548,4272081548 dd 906744984,906744984 dd 3481400742,3481400742 dd 685669029,685669029 dd 646887386,646887386 dd 2764025151,2764025151 dd 3835509292,3835509292 dd 227702864,227702864 dd 2613862250,2613862250 dd 1648787028,1648787028 dd 3256061430,3256061430 dd 3904428176,3904428176 dd 1593260334,1593260334 dd 4121936770,4121936770 dd 3196083615,3196083615 dd 2090061929,2090061929 dd 2838353263,2838353263 dd 3004310991,3004310991 dd 999926984,999926984 dd 2809993232,2809993232 dd 1852021992,1852021992 dd 2075868123,2075868123 dd 158869197,158869197 dd 4095236462,4095236462 dd 28809964,28809964 dd 2828685187,2828685187 dd 1701746150,1701746150 dd 2129067946,2129067946 dd 147831841,147831841 dd 3873969647,3873969647 dd 3650873274,3650873274 dd 3459673930,3459673930 dd 3557400554,3557400554 dd 3598495785,3598495785 dd 2947720241,2947720241 dd 824393514,824393514 dd 815048134,815048134 dd 3227951669,3227951669 dd 935087732,935087732 dd 2798289660,2798289660 dd 2966458592,2966458592 dd 366520115,366520115 dd 1251476721,1251476721 dd 4158319681,4158319681 dd 240176511,240176511 dd 804688151,804688151 dd 2379631990,2379631990 dd 1303441219,1303441219 dd 1414376140,1414376140 dd 3741619940,3741619940 dd 3820343710,3820343710 dd 461924940,461924940 dd 3089050817,3089050817 dd 2136040774,2136040774 dd 82468509,82468509 dd 1563790337,1563790337 dd 1937016826,1937016826 dd 776014843,776014843 dd 1511876531,1511876531 dd 1389550482,1389550482 dd 861278441,861278441 dd 323475053,323475053 dd 2355222426,2355222426 dd 2047648055,2047648055 dd 2383738969,2383738969 dd 2302415851,2302415851 dd 3995576782,3995576782 dd 902390199,902390199 dd 3991215329,3991215329 dd 1018251130,1018251130 dd 1507840668,1507840668 dd 1064563285,1064563285 dd 2043548696,2043548696 dd 3208103795,3208103795 dd 3939366739,3939366739 dd 1537932639,1537932639 dd 342834655,342834655 dd 2262516856,2262516856 dd 2180231114,2180231114 dd 1053059257,1053059257 dd 741614648,741614648 dd 1598071746,1598071746 dd 1925389590,1925389590 dd 203809468,203809468 dd 2336832552,2336832552 dd 1100287487,1100287487 dd 1895934009,1895934009 dd 3736275976,3736275976 dd 2632234200,2632234200 dd 2428589668,2428589668 dd 1636092795,1636092795 dd 1890988757,1890988757 dd 1952214088,1952214088 dd 1113045200,1113045200 db 82,9,106,213,48,54,165,56 db 191,64,163,158,129,243,215,251 db 124,227,57,130,155,47,255,135 db 52,142,67,68,196,222,233,203 db 84,123,148,50,166,194,35,61 db 238,76,149,11,66,250,195,78 db 8,46,161,102,40,217,36,178 db 118,91,162,73,109,139,209,37 db 114,248,246,100,134,104,152,22 db 212,164,92,204,93,101,182,146 db 108,112,72,80,253,237,185,218 db 94,21,70,87,167,141,157,132 db 144,216,171,0,140,188,211,10 db 247,228,88,5,184,179,69,6 db 208,44,30,143,202,63,15,2 db 193,175,189,3,1,19,138,107 db 58,145,17,65,79,103,220,234 db 151,242,207,206,240,180,230,115 db 150,172,116,34,231,173,53,133 db 226,249,55,232,28,117,223,110 db 71,241,26,113,29,41,197,137 db 111,183,98,14,170,24,190,27 db 252,86,62,75,198,210,121,32 db 154,219,192,254,120,205,90,244 db 31,221,168,51,136,7,199,49 db 177,18,16,89,39,128,236,95 db 96,81,127,169,25,181,74,13 db 45,229,122,159,147,201,156,239 db 160,224,59,77,174,42,245,176 db 200,235,187,60,131,83,153,97 db 23,43,4,126,186,119,214,38 db 225,105,20,99,85,33,12,125 db 82,9,106,213,48,54,165,56 db 191,64,163,158,129,243,215,251 db 124,227,57,130,155,47,255,135 db 52,142,67,68,196,222,233,203 db 84,123,148,50,166,194,35,61 db 238,76,149,11,66,250,195,78 db 8,46,161,102,40,217,36,178 db 118,91,162,73,109,139,209,37 db 114,248,246,100,134,104,152,22 db 212,164,92,204,93,101,182,146 db 108,112,72,80,253,237,185,218 db 94,21,70,87,167,141,157,132 db 144,216,171,0,140,188,211,10 db 247,228,88,5,184,179,69,6 db 208,44,30,143,202,63,15,2 db 193,175,189,3,1,19,138,107 db 58,145,17,65,79,103,220,234 db 151,242,207,206,240,180,230,115 db 150,172,116,34,231,173,53,133 db 226,249,55,232,28,117,223,110 db 71,241,26,113,29,41,197,137 db 111,183,98,14,170,24,190,27 db 252,86,62,75,198,210,121,32 db 154,219,192,254,120,205,90,244 db 31,221,168,51,136,7,199,49 db 177,18,16,89,39,128,236,95 db 96,81,127,169,25,181,74,13 db 45,229,122,159,147,201,156,239 db 160,224,59,77,174,42,245,176 db 200,235,187,60,131,83,153,97 db 23,43,4,126,186,119,214,38 db 225,105,20,99,85,33,12,125 db 82,9,106,213,48,54,165,56 db 191,64,163,158,129,243,215,251 db 124,227,57,130,155,47,255,135 db 52,142,67,68,196,222,233,203 db 84,123,148,50,166,194,35,61 db 238,76,149,11,66,250,195,78 db 8,46,161,102,40,217,36,178 db 118,91,162,73,109,139,209,37 db 114,248,246,100,134,104,152,22 db 212,164,92,204,93,101,182,146 db 108,112,72,80,253,237,185,218 db 94,21,70,87,167,141,157,132 db 144,216,171,0,140,188,211,10 db 247,228,88,5,184,179,69,6 db 208,44,30,143,202,63,15,2 db 193,175,189,3,1,19,138,107 db 58,145,17,65,79,103,220,234 db 151,242,207,206,240,180,230,115 db 150,172,116,34,231,173,53,133 db 226,249,55,232,28,117,223,110 db 71,241,26,113,29,41,197,137 db 111,183,98,14,170,24,190,27 db 252,86,62,75,198,210,121,32 db 154,219,192,254,120,205,90,244 db 31,221,168,51,136,7,199,49 db 177,18,16,89,39,128,236,95 db 96,81,127,169,25,181,74,13 db 45,229,122,159,147,201,156,239 db 160,224,59,77,174,42,245,176 db 200,235,187,60,131,83,153,97 db 23,43,4,126,186,119,214,38 db 225,105,20,99,85,33,12,125 db 82,9,106,213,48,54,165,56 db 191,64,163,158,129,243,215,251 db 124,227,57,130,155,47,255,135 db 52,142,67,68,196,222,233,203 db 84,123,148,50,166,194,35,61 db 238,76,149,11,66,250,195,78 db 8,46,161,102,40,217,36,178 db 118,91,162,73,109,139,209,37 db 114,248,246,100,134,104,152,22 db 212,164,92,204,93,101,182,146 db 108,112,72,80,253,237,185,218 db 94,21,70,87,167,141,157,132 db 144,216,171,0,140,188,211,10 db 247,228,88,5,184,179,69,6 db 208,44,30,143,202,63,15,2 db 193,175,189,3,1,19,138,107 db 58,145,17,65,79,103,220,234 db 151,242,207,206,240,180,230,115 db 150,172,116,34,231,173,53,133 db 226,249,55,232,28,117,223,110 db 71,241,26,113,29,41,197,137 db 111,183,98,14,170,24,190,27 db 252,86,62,75,198,210,121,32 db 154,219,192,254,120,205,90,244 db 31,221,168,51,136,7,199,49 db 177,18,16,89,39,128,236,95 db 96,81,127,169,25,181,74,13 db 45,229,122,159,147,201,156,239 db 160,224,59,77,174,42,245,176 db 200,235,187,60,131,83,153,97 db 23,43,4,126,186,119,214,38 db 225,105,20,99,85,33,12,125 global _asm_AES_decrypt align 16 _asm_AES_decrypt: L$_asm_AES_decrypt_begin: push ebp push ebx push esi push edi mov esi,DWORD [20+esp] mov edi,DWORD [28+esp] mov eax,esp sub esp,36 and esp,-64 lea ebx,[edi-127] sub ebx,esp neg ebx and ebx,960 sub esp,ebx add esp,4 mov DWORD [28+esp],eax call L$010pic_point L$010pic_point: pop ebp lea eax,[_OPENSSL_ia32cap_P] lea ebp,[(L$AES_Td-L$010pic_point)+ebp] lea ebx,[764+esp] sub ebx,ebp and ebx,768 lea ebp,[2176+ebx*1+ebp] bt DWORD [eax],25 jnc NEAR L$011x86 movq mm0,[esi] movq mm4,[8+esi] call __sse_AES_decrypt_compact mov esp,DWORD [28+esp] mov esi,DWORD [24+esp] movq [esi],mm0 movq [8+esi],mm4 emms pop edi pop esi pop ebx pop ebp ret align 16 L$011x86: mov DWORD [24+esp],ebp mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [8+esi] mov edx,DWORD [12+esi] call __x86_AES_decrypt_compact mov esp,DWORD [28+esp] mov esi,DWORD [24+esp] mov DWORD [esi],eax mov DWORD [4+esi],ebx mov DWORD [8+esi],ecx mov DWORD [12+esi],edx pop edi pop esi pop ebx pop ebp ret global _asm_AES_cbc_encrypt align 16 _asm_AES_cbc_encrypt: L$_asm_AES_cbc_encrypt_begin: push ebp push ebx push esi push edi mov ecx,DWORD [28+esp] cmp ecx,0 je NEAR L$012drop_out call L$013pic_point L$013pic_point: pop ebp lea eax,[_OPENSSL_ia32cap_P] cmp DWORD [40+esp],0 lea ebp,[(L$AES_Te-L$013pic_point)+ebp] jne NEAR L$014picked_te lea ebp,[(L$AES_Td-L$AES_Te)+ebp] L$014picked_te: pushfd cld cmp ecx,512 jb NEAR L$015slow_way test ecx,15 jnz NEAR L$015slow_way bt DWORD [eax],28 jc NEAR L$015slow_way lea esi,[esp-324] and esi,-64 mov eax,ebp lea ebx,[2304+ebp] mov edx,esi and eax,4095 and ebx,4095 and edx,4095 cmp edx,ebx jb NEAR L$016tbl_break_out sub edx,ebx sub esi,edx jmp NEAR L$017tbl_ok align 4 L$016tbl_break_out: sub edx,eax and edx,4095 add edx,384 sub esi,edx align 4 L$017tbl_ok: lea edx,[24+esp] xchg esp,esi add esp,4 mov DWORD [24+esp],ebp mov DWORD [28+esp],esi mov eax,DWORD [edx] mov ebx,DWORD [4+edx] mov edi,DWORD [12+edx] mov esi,DWORD [16+edx] mov edx,DWORD [20+edx] mov DWORD [32+esp],eax mov DWORD [36+esp],ebx mov DWORD [40+esp],ecx mov DWORD [44+esp],edi mov DWORD [48+esp],esi mov DWORD [316+esp],0 mov ebx,edi mov ecx,61 sub ebx,ebp mov esi,edi and ebx,4095 lea edi,[76+esp] cmp ebx,2304 jb NEAR L$018do_copy cmp ebx,3852 jb NEAR L$019skip_copy align 4 L$018do_copy: mov DWORD [44+esp],edi dd 2784229001 L$019skip_copy: mov edi,16 align 4 L$020prefetch_tbl: mov eax,DWORD [ebp] mov ebx,DWORD [32+ebp] mov ecx,DWORD [64+ebp] mov esi,DWORD [96+ebp] lea ebp,[128+ebp] sub edi,1 jnz NEAR L$020prefetch_tbl sub ebp,2048 mov esi,DWORD [32+esp] mov edi,DWORD [48+esp] cmp edx,0 je NEAR L$021fast_decrypt mov eax,DWORD [edi] mov ebx,DWORD [4+edi] align 16 L$022fast_enc_loop: mov ecx,DWORD [8+edi] mov edx,DWORD [12+edi] xor eax,DWORD [esi] xor ebx,DWORD [4+esi] xor ecx,DWORD [8+esi] xor edx,DWORD [12+esi] mov edi,DWORD [44+esp] call __x86_AES_encrypt mov esi,DWORD [32+esp] mov edi,DWORD [36+esp] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [8+edi],ecx mov DWORD [12+edi],edx lea esi,[16+esi] mov ecx,DWORD [40+esp] mov DWORD [32+esp],esi lea edx,[16+edi] mov DWORD [36+esp],edx sub ecx,16 mov DWORD [40+esp],ecx jnz NEAR L$022fast_enc_loop mov esi,DWORD [48+esp] mov ecx,DWORD [8+edi] mov edx,DWORD [12+edi] mov DWORD [esi],eax mov DWORD [4+esi],ebx mov DWORD [8+esi],ecx mov DWORD [12+esi],edx cmp DWORD [316+esp],0 mov edi,DWORD [44+esp] je NEAR L$023skip_ezero mov ecx,60 xor eax,eax align 4 dd 2884892297 L$023skip_ezero: mov esp,DWORD [28+esp] popfd L$012drop_out: pop edi pop esi pop ebx pop ebp ret pushfd align 16 L$021fast_decrypt: cmp esi,DWORD [36+esp] je NEAR L$024fast_dec_in_place mov DWORD [52+esp],edi align 4 align 16 L$025fast_dec_loop: mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [8+esi] mov edx,DWORD [12+esi] mov edi,DWORD [44+esp] call __x86_AES_decrypt mov edi,DWORD [52+esp] mov esi,DWORD [40+esp] xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] mov edi,DWORD [36+esp] mov esi,DWORD [32+esp] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [8+edi],ecx mov DWORD [12+edi],edx mov ecx,DWORD [40+esp] mov DWORD [52+esp],esi lea esi,[16+esi] mov DWORD [32+esp],esi lea edi,[16+edi] mov DWORD [36+esp],edi sub ecx,16 mov DWORD [40+esp],ecx jnz NEAR L$025fast_dec_loop mov edi,DWORD [52+esp] mov esi,DWORD [48+esp] mov eax,DWORD [edi] mov ebx,DWORD [4+edi] mov ecx,DWORD [8+edi] mov edx,DWORD [12+edi] mov DWORD [esi],eax mov DWORD [4+esi],ebx mov DWORD [8+esi],ecx mov DWORD [12+esi],edx jmp NEAR L$026fast_dec_out align 16 L$024fast_dec_in_place: L$027fast_dec_in_place_loop: mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [8+esi] mov edx,DWORD [12+esi] lea edi,[60+esp] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [8+edi],ecx mov DWORD [12+edi],edx mov edi,DWORD [44+esp] call __x86_AES_decrypt mov edi,DWORD [48+esp] mov esi,DWORD [36+esp] xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] mov DWORD [esi],eax mov DWORD [4+esi],ebx mov DWORD [8+esi],ecx mov DWORD [12+esi],edx lea esi,[16+esi] mov DWORD [36+esp],esi lea esi,[60+esp] mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [8+esi] mov edx,DWORD [12+esi] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [8+edi],ecx mov DWORD [12+edi],edx mov esi,DWORD [32+esp] mov ecx,DWORD [40+esp] lea esi,[16+esi] mov DWORD [32+esp],esi sub ecx,16 mov DWORD [40+esp],ecx jnz NEAR L$027fast_dec_in_place_loop align 4 L$026fast_dec_out: cmp DWORD [316+esp],0 mov edi,DWORD [44+esp] je NEAR L$028skip_dzero mov ecx,60 xor eax,eax align 4 dd 2884892297 L$028skip_dzero: mov esp,DWORD [28+esp] popfd pop edi pop esi pop ebx pop ebp ret pushfd align 16 L$015slow_way: mov eax,DWORD [eax] mov edi,DWORD [36+esp] lea esi,[esp-80] and esi,-64 lea ebx,[edi-143] sub ebx,esi neg ebx and ebx,960 sub esi,ebx lea ebx,[768+esi] sub ebx,ebp and ebx,768 lea ebp,[2176+ebx*1+ebp] lea edx,[24+esp] xchg esp,esi add esp,4 mov DWORD [24+esp],ebp mov DWORD [28+esp],esi mov DWORD [52+esp],eax mov eax,DWORD [edx] mov ebx,DWORD [4+edx] mov esi,DWORD [16+edx] mov edx,DWORD [20+edx] mov DWORD [32+esp],eax mov DWORD [36+esp],ebx mov DWORD [40+esp],ecx mov DWORD [44+esp],edi mov DWORD [48+esp],esi mov edi,esi mov esi,eax cmp edx,0 je NEAR L$029slow_decrypt cmp ecx,16 mov edx,ebx jb NEAR L$030slow_enc_tail bt DWORD [52+esp],25 jnc NEAR L$031slow_enc_x86 movq mm0,[edi] movq mm4,[8+edi] align 16 L$032slow_enc_loop_sse: pxor mm0,[esi] pxor mm4,[8+esi] mov edi,DWORD [44+esp] call __sse_AES_encrypt_compact mov esi,DWORD [32+esp] mov edi,DWORD [36+esp] mov ecx,DWORD [40+esp] movq [edi],mm0 movq [8+edi],mm4 lea esi,[16+esi] mov DWORD [32+esp],esi lea edx,[16+edi] mov DWORD [36+esp],edx sub ecx,16 cmp ecx,16 mov DWORD [40+esp],ecx jae NEAR L$032slow_enc_loop_sse test ecx,15 jnz NEAR L$030slow_enc_tail mov esi,DWORD [48+esp] movq [esi],mm0 movq [8+esi],mm4 emms mov esp,DWORD [28+esp] popfd pop edi pop esi pop ebx pop ebp ret pushfd align 16 L$031slow_enc_x86: mov eax,DWORD [edi] mov ebx,DWORD [4+edi] align 4 L$033slow_enc_loop_x86: mov ecx,DWORD [8+edi] mov edx,DWORD [12+edi] xor eax,DWORD [esi] xor ebx,DWORD [4+esi] xor ecx,DWORD [8+esi] xor edx,DWORD [12+esi] mov edi,DWORD [44+esp] call __x86_AES_encrypt_compact mov esi,DWORD [32+esp] mov edi,DWORD [36+esp] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [8+edi],ecx mov DWORD [12+edi],edx mov ecx,DWORD [40+esp] lea esi,[16+esi] mov DWORD [32+esp],esi lea edx,[16+edi] mov DWORD [36+esp],edx sub ecx,16 cmp ecx,16 mov DWORD [40+esp],ecx jae NEAR L$033slow_enc_loop_x86 test ecx,15 jnz NEAR L$030slow_enc_tail mov esi,DWORD [48+esp] mov ecx,DWORD [8+edi] mov edx,DWORD [12+edi] mov DWORD [esi],eax mov DWORD [4+esi],ebx mov DWORD [8+esi],ecx mov DWORD [12+esi],edx mov esp,DWORD [28+esp] popfd pop edi pop esi pop ebx pop ebp ret pushfd align 16 L$030slow_enc_tail: emms mov edi,edx mov ebx,16 sub ebx,ecx cmp edi,esi je NEAR L$034enc_in_place align 4 dd 2767451785 jmp NEAR L$035enc_skip_in_place L$034enc_in_place: lea edi,[ecx*1+edi] L$035enc_skip_in_place: mov ecx,ebx xor eax,eax align 4 dd 2868115081 mov edi,DWORD [48+esp] mov esi,edx mov eax,DWORD [edi] mov ebx,DWORD [4+edi] mov DWORD [40+esp],16 jmp NEAR L$033slow_enc_loop_x86 align 16 L$029slow_decrypt: bt DWORD [52+esp],25 jnc NEAR L$036slow_dec_loop_x86 align 4 L$037slow_dec_loop_sse: movq mm0,[esi] movq mm4,[8+esi] mov edi,DWORD [44+esp] call __sse_AES_decrypt_compact mov esi,DWORD [32+esp] lea eax,[60+esp] mov ebx,DWORD [36+esp] mov ecx,DWORD [40+esp] mov edi,DWORD [48+esp] movq mm1,[esi] movq mm5,[8+esi] pxor mm0,[edi] pxor mm4,[8+edi] movq [edi],mm1 movq [8+edi],mm5 sub ecx,16 jc NEAR L$038slow_dec_partial_sse movq [ebx],mm0 movq [8+ebx],mm4 lea ebx,[16+ebx] mov DWORD [36+esp],ebx lea esi,[16+esi] mov DWORD [32+esp],esi mov DWORD [40+esp],ecx jnz NEAR L$037slow_dec_loop_sse emms mov esp,DWORD [28+esp] popfd pop edi pop esi pop ebx pop ebp ret pushfd align 16 L$038slow_dec_partial_sse: movq [eax],mm0 movq [8+eax],mm4 emms add ecx,16 mov edi,ebx mov esi,eax align 4 dd 2767451785 mov esp,DWORD [28+esp] popfd pop edi pop esi pop ebx pop ebp ret pushfd align 16 L$036slow_dec_loop_x86: mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [8+esi] mov edx,DWORD [12+esi] lea edi,[60+esp] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [8+edi],ecx mov DWORD [12+edi],edx mov edi,DWORD [44+esp] call __x86_AES_decrypt_compact mov edi,DWORD [48+esp] mov esi,DWORD [40+esp] xor eax,DWORD [edi] xor ebx,DWORD [4+edi] xor ecx,DWORD [8+edi] xor edx,DWORD [12+edi] sub esi,16 jc NEAR L$039slow_dec_partial_x86 mov DWORD [40+esp],esi mov esi,DWORD [36+esp] mov DWORD [esi],eax mov DWORD [4+esi],ebx mov DWORD [8+esi],ecx mov DWORD [12+esi],edx lea esi,[16+esi] mov DWORD [36+esp],esi lea esi,[60+esp] mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [8+esi] mov edx,DWORD [12+esi] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [8+edi],ecx mov DWORD [12+edi],edx mov esi,DWORD [32+esp] lea esi,[16+esi] mov DWORD [32+esp],esi jnz NEAR L$036slow_dec_loop_x86 mov esp,DWORD [28+esp] popfd pop edi pop esi pop ebx pop ebp ret pushfd align 16 L$039slow_dec_partial_x86: lea esi,[60+esp] mov DWORD [esi],eax mov DWORD [4+esi],ebx mov DWORD [8+esi],ecx mov DWORD [12+esi],edx mov esi,DWORD [32+esp] mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [8+esi] mov edx,DWORD [12+esi] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [8+edi],ecx mov DWORD [12+edi],edx mov ecx,DWORD [40+esp] mov edi,DWORD [36+esp] lea esi,[60+esp] align 4 dd 2767451785 mov esp,DWORD [28+esp] popfd pop edi pop esi pop ebx pop ebp ret align 16 __x86_AES_set_encrypt_key: push ebp push ebx push esi push edi mov esi,DWORD [24+esp] mov edi,DWORD [32+esp] test esi,-1 jz NEAR L$040badpointer test edi,-1 jz NEAR L$040badpointer call L$041pic_point L$041pic_point: pop ebp lea ebp,[(L$AES_Te-L$041pic_point)+ebp] lea ebp,[2176+ebp] mov eax,DWORD [ebp-128] mov ebx,DWORD [ebp-96] mov ecx,DWORD [ebp-64] mov edx,DWORD [ebp-32] mov eax,DWORD [ebp] mov ebx,DWORD [32+ebp] mov ecx,DWORD [64+ebp] mov edx,DWORD [96+ebp] mov ecx,DWORD [28+esp] cmp ecx,128 je NEAR L$04210rounds cmp ecx,192 je NEAR L$04312rounds cmp ecx,256 je NEAR L$04414rounds mov eax,-2 jmp NEAR L$045exit L$04210rounds: mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [8+esi] mov edx,DWORD [12+esi] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [8+edi],ecx mov DWORD [12+edi],edx xor ecx,ecx jmp NEAR L$04610shortcut align 4 L$04710loop: mov eax,DWORD [edi] mov edx,DWORD [12+edi] L$04610shortcut: movzx esi,dl movzx ebx,BYTE [esi*1+ebp-128] movzx esi,dh shl ebx,24 xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] shr edx,16 movzx esi,dl xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] movzx esi,dh shl ebx,8 xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] shl ebx,16 xor eax,ebx xor eax,DWORD [896+ecx*4+ebp] mov DWORD [16+edi],eax xor eax,DWORD [4+edi] mov DWORD [20+edi],eax xor eax,DWORD [8+edi] mov DWORD [24+edi],eax xor eax,DWORD [12+edi] mov DWORD [28+edi],eax inc ecx add edi,16 cmp ecx,10 jl NEAR L$04710loop mov DWORD [80+edi],10 xor eax,eax jmp NEAR L$045exit L$04312rounds: mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [8+esi] mov edx,DWORD [12+esi] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [8+edi],ecx mov DWORD [12+edi],edx mov ecx,DWORD [16+esi] mov edx,DWORD [20+esi] mov DWORD [16+edi],ecx mov DWORD [20+edi],edx xor ecx,ecx jmp NEAR L$04812shortcut align 4 L$04912loop: mov eax,DWORD [edi] mov edx,DWORD [20+edi] L$04812shortcut: movzx esi,dl movzx ebx,BYTE [esi*1+ebp-128] movzx esi,dh shl ebx,24 xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] shr edx,16 movzx esi,dl xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] movzx esi,dh shl ebx,8 xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] shl ebx,16 xor eax,ebx xor eax,DWORD [896+ecx*4+ebp] mov DWORD [24+edi],eax xor eax,DWORD [4+edi] mov DWORD [28+edi],eax xor eax,DWORD [8+edi] mov DWORD [32+edi],eax xor eax,DWORD [12+edi] mov DWORD [36+edi],eax cmp ecx,7 je NEAR L$05012break inc ecx xor eax,DWORD [16+edi] mov DWORD [40+edi],eax xor eax,DWORD [20+edi] mov DWORD [44+edi],eax add edi,24 jmp NEAR L$04912loop L$05012break: mov DWORD [72+edi],12 xor eax,eax jmp NEAR L$045exit L$04414rounds: mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [8+esi] mov edx,DWORD [12+esi] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [8+edi],ecx mov DWORD [12+edi],edx mov eax,DWORD [16+esi] mov ebx,DWORD [20+esi] mov ecx,DWORD [24+esi] mov edx,DWORD [28+esi] mov DWORD [16+edi],eax mov DWORD [20+edi],ebx mov DWORD [24+edi],ecx mov DWORD [28+edi],edx xor ecx,ecx jmp NEAR L$05114shortcut align 4 L$05214loop: mov edx,DWORD [28+edi] L$05114shortcut: mov eax,DWORD [edi] movzx esi,dl movzx ebx,BYTE [esi*1+ebp-128] movzx esi,dh shl ebx,24 xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] shr edx,16 movzx esi,dl xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] movzx esi,dh shl ebx,8 xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] shl ebx,16 xor eax,ebx xor eax,DWORD [896+ecx*4+ebp] mov DWORD [32+edi],eax xor eax,DWORD [4+edi] mov DWORD [36+edi],eax xor eax,DWORD [8+edi] mov DWORD [40+edi],eax xor eax,DWORD [12+edi] mov DWORD [44+edi],eax cmp ecx,6 je NEAR L$05314break inc ecx mov edx,eax mov eax,DWORD [16+edi] movzx esi,dl movzx ebx,BYTE [esi*1+ebp-128] movzx esi,dh xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] shr edx,16 shl ebx,8 movzx esi,dl xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] movzx esi,dh shl ebx,16 xor eax,ebx movzx ebx,BYTE [esi*1+ebp-128] shl ebx,24 xor eax,ebx mov DWORD [48+edi],eax xor eax,DWORD [20+edi] mov DWORD [52+edi],eax xor eax,DWORD [24+edi] mov DWORD [56+edi],eax xor eax,DWORD [28+edi] mov DWORD [60+edi],eax add edi,32 jmp NEAR L$05214loop L$05314break: mov DWORD [48+edi],14 xor eax,eax jmp NEAR L$045exit L$040badpointer: mov eax,-1 L$045exit: pop edi pop esi pop ebx pop ebp ret global _asm_AES_set_encrypt_key align 16 _asm_AES_set_encrypt_key: L$_asm_AES_set_encrypt_key_begin: call __x86_AES_set_encrypt_key ret global _asm_AES_set_decrypt_key align 16 _asm_AES_set_decrypt_key: L$_asm_AES_set_decrypt_key_begin: call __x86_AES_set_encrypt_key cmp eax,0 je NEAR L$054proceed ret L$054proceed: push ebp push ebx push esi push edi mov esi,DWORD [28+esp] mov ecx,DWORD [240+esi] lea ecx,[ecx*4] lea edi,[ecx*4+esi] align 4 L$055invert: mov eax,DWORD [esi] mov ebx,DWORD [4+esi] mov ecx,DWORD [edi] mov edx,DWORD [4+edi] mov DWORD [edi],eax mov DWORD [4+edi],ebx mov DWORD [esi],ecx mov DWORD [4+esi],edx mov eax,DWORD [8+esi] mov ebx,DWORD [12+esi] mov ecx,DWORD [8+edi] mov edx,DWORD [12+edi] mov DWORD [8+edi],eax mov DWORD [12+edi],ebx mov DWORD [8+esi],ecx mov DWORD [12+esi],edx add esi,16 sub edi,16 cmp esi,edi jne NEAR L$055invert mov edi,DWORD [28+esp] mov esi,DWORD [240+edi] lea esi,[esi*1+esi-2] lea esi,[esi*8+edi] mov DWORD [28+esp],esi mov eax,DWORD [16+edi] align 4 L$056permute: add edi,16 mov ebp,2155905152 and ebp,eax lea ebx,[eax*1+eax] mov esi,ebp shr ebp,7 sub esi,ebp and ebx,4278124286 and esi,454761243 xor ebx,esi mov ebp,2155905152 and ebp,ebx lea ecx,[ebx*1+ebx] mov esi,ebp shr ebp,7 sub esi,ebp and ecx,4278124286 and esi,454761243 xor ebx,eax xor ecx,esi mov ebp,2155905152 and ebp,ecx lea edx,[ecx*1+ecx] mov esi,ebp shr ebp,7 xor ecx,eax sub esi,ebp and edx,4278124286 and esi,454761243 rol eax,8 xor edx,esi mov ebp,DWORD [4+edi] xor eax,ebx xor ebx,edx xor eax,ecx rol ebx,24 xor ecx,edx xor eax,edx rol ecx,16 xor eax,ebx rol edx,8 xor eax,ecx mov ebx,ebp xor eax,edx mov DWORD [edi],eax mov ebp,2155905152 and ebp,ebx lea ecx,[ebx*1+ebx] mov esi,ebp shr ebp,7 sub esi,ebp and ecx,4278124286 and esi,454761243 xor ecx,esi mov ebp,2155905152 and ebp,ecx lea edx,[ecx*1+ecx] mov esi,ebp shr ebp,7 sub esi,ebp and edx,4278124286 and esi,454761243 xor ecx,ebx xor edx,esi mov ebp,2155905152 and ebp,edx lea eax,[edx*1+edx] mov esi,ebp shr ebp,7 xor edx,ebx sub esi,ebp and eax,4278124286 and esi,454761243 rol ebx,8 xor eax,esi mov ebp,DWORD [8+edi] xor ebx,ecx xor ecx,eax xor ebx,edx rol ecx,24 xor edx,eax xor ebx,eax rol edx,16 xor ebx,ecx rol eax,8 xor ebx,edx mov ecx,ebp xor ebx,eax mov DWORD [4+edi],ebx mov ebp,2155905152 and ebp,ecx lea edx,[ecx*1+ecx] mov esi,ebp shr ebp,7 sub esi,ebp and edx,4278124286 and esi,454761243 xor edx,esi mov ebp,2155905152 and ebp,edx lea eax,[edx*1+edx] mov esi,ebp shr ebp,7 sub esi,ebp and eax,4278124286 and esi,454761243 xor edx,ecx xor eax,esi mov ebp,2155905152 and ebp,eax lea ebx,[eax*1+eax] mov esi,ebp shr ebp,7 xor eax,ecx sub esi,ebp and ebx,4278124286 and esi,454761243 rol ecx,8 xor ebx,esi mov ebp,DWORD [12+edi] xor ecx,edx xor edx,ebx xor ecx,eax rol edx,24 xor eax,ebx xor ecx,ebx rol eax,16 xor ecx,edx rol ebx,8 xor ecx,eax mov edx,ebp xor ecx,ebx mov DWORD [8+edi],ecx mov ebp,2155905152 and ebp,edx lea eax,[edx*1+edx] mov esi,ebp shr ebp,7 sub esi,ebp and eax,4278124286 and esi,454761243 xor eax,esi mov ebp,2155905152 and ebp,eax lea ebx,[eax*1+eax] mov esi,ebp shr ebp,7 sub esi,ebp and ebx,4278124286 and esi,454761243 xor eax,edx xor ebx,esi mov ebp,2155905152 and ebp,ebx lea ecx,[ebx*1+ebx] mov esi,ebp shr ebp,7 xor ebx,edx sub esi,ebp and ecx,4278124286 and esi,454761243 rol edx,8 xor ecx,esi mov ebp,DWORD [16+edi] xor edx,eax xor eax,ecx xor edx,ebx rol eax,24 xor ebx,ecx xor edx,ecx rol ebx,16 xor edx,eax rol ecx,8 xor edx,ebx mov eax,ebp xor edx,ecx mov DWORD [12+edi],edx cmp edi,DWORD [28+esp] jb NEAR L$056permute xor eax,eax pop edi pop esi pop ebx pop ebp ret db 65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89 db 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114 db 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 segment .bss common _OPENSSL_ia32cap_P 16