naiveproxy/third_party/boringssl/win-x86/crypto/fipsmodule/aes-586.asm
2018-02-02 05:49:39 -05:00

3220 lines
63 KiB
NASM

%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