You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

3224 lines
66 KiB

TITLE aes-586.asm
IF @Version LT 800
ECHO MASM version 8.00 or later is strongly recommended.
ENDIF
.686
.XMM
IF @Version LT 800
XMMWORD STRUCT 16
DQ 2 dup (?)
XMMWORD ENDS
ENDIF
.MODEL FLAT
OPTION DOTNAME
IF @Version LT 800
.text$ SEGMENT PAGE 'CODE'
ELSE
.text$ SEGMENT ALIGN(64) 'CODE'
ENDIF
ALIGN 16
__x86_AES_encrypt_compact PROC PRIVATE
mov DWORD PTR 20[esp],edi
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
mov esi,DWORD PTR 240[edi]
lea esi,DWORD PTR [esi*1+esi-2]
lea esi,DWORD PTR [esi*8+edi]
mov DWORD PTR 24[esp],esi
mov edi,DWORD PTR [ebp-128]
mov esi,DWORD PTR [ebp-96]
mov edi,DWORD PTR [ebp-64]
mov esi,DWORD PTR [ebp-32]
mov edi,DWORD PTR [ebp]
mov esi,DWORD PTR 32[ebp]
mov edi,DWORD PTR 64[ebp]
mov esi,DWORD PTR 96[ebp]
ALIGN 16
$L000loop:
mov esi,eax
and esi,255
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,bh
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,8
xor esi,edi
mov edi,ecx
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
mov edi,edx
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
mov DWORD PTR 4[esp],esi
mov esi,ebx
and esi,255
shr ebx,16
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,ch
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,8
xor esi,edi
mov edi,edx
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
mov edi,eax
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
mov DWORD PTR 8[esp],esi
mov esi,ecx
and esi,255
shr ecx,24
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,dh
movzx edi,BYTE PTR [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 PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
movzx edi,bh
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
and edx,255
movzx edx,BYTE PTR [edx*1+ebp-128]
movzx eax,ah
movzx eax,BYTE PTR [eax*1+ebp-128]
shl eax,8
xor edx,eax
mov eax,DWORD PTR 4[esp]
and ebx,255
movzx ebx,BYTE PTR [ebx*1+ebp-128]
shl ebx,16
xor edx,ebx
mov ebx,DWORD PTR 8[esp]
movzx ecx,BYTE PTR [ecx*1+ebp-128]
shl ecx,24
xor edx,ecx
mov ecx,esi
mov esi,ecx
and esi,2155905152
mov ebp,esi
shr ebp,7
lea edi,DWORD PTR [ecx*1+ecx]
sub esi,ebp
and edi,4278124286
and esi,454761243
mov ebp,ecx
xor esi,edi
xor ecx,esi
rol ecx,24
xor ecx,esi
ror ebp,16
xor ecx,ebp
ror ebp,8
xor ecx,ebp
mov esi,edx
and esi,2155905152
mov ebp,esi
shr ebp,7
lea edi,DWORD PTR [edx*1+edx]
sub esi,ebp
and edi,4278124286
and esi,454761243
mov ebp,edx
xor esi,edi
xor edx,esi
rol edx,24
xor edx,esi
ror ebp,16
xor edx,ebp
ror ebp,8
xor edx,ebp
mov esi,eax
and esi,2155905152
mov ebp,esi
shr ebp,7
lea edi,DWORD PTR [eax*1+eax]
sub esi,ebp
and edi,4278124286
and esi,454761243
mov ebp,eax
xor esi,edi
xor eax,esi
rol eax,24
xor eax,esi
ror ebp,16
xor eax,ebp
ror ebp,8
xor eax,ebp
mov esi,ebx
and esi,2155905152
mov ebp,esi
shr ebp,7
lea edi,DWORD PTR [ebx*1+ebx]
sub esi,ebp
and edi,4278124286
and esi,454761243
mov ebp,ebx
xor esi,edi
xor ebx,esi
rol ebx,24
xor ebx,esi
ror ebp,16
xor ebx,ebp
ror ebp,8
xor ebx,ebp
mov edi,DWORD PTR 20[esp]
mov ebp,DWORD PTR 28[esp]
add edi,16
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
cmp edi,DWORD PTR 24[esp]
mov DWORD PTR 20[esp],edi
jb $L000loop
mov esi,eax
and esi,255
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,bh
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,8
xor esi,edi
mov edi,ecx
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
mov edi,edx
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
mov DWORD PTR 4[esp],esi
mov esi,ebx
and esi,255
shr ebx,16
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,ch
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,8
xor esi,edi
mov edi,edx
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
mov edi,eax
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
mov DWORD PTR 8[esp],esi
mov esi,ecx
and esi,255
shr ecx,24
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,dh
movzx edi,BYTE PTR [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 PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
movzx edi,bh
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
mov edi,DWORD PTR 20[esp]
and edx,255
movzx edx,BYTE PTR [edx*1+ebp-128]
movzx eax,ah
movzx eax,BYTE PTR [eax*1+ebp-128]
shl eax,8
xor edx,eax
mov eax,DWORD PTR 4[esp]
and ebx,255
movzx ebx,BYTE PTR [ebx*1+ebp-128]
shl ebx,16
xor edx,ebx
mov ebx,DWORD PTR 8[esp]
movzx ecx,BYTE PTR [ecx*1+ebp-128]
shl ecx,24
xor edx,ecx
mov ecx,esi
xor eax,DWORD PTR 16[edi]
xor ebx,DWORD PTR 20[edi]
xor ecx,DWORD PTR 24[edi]
xor edx,DWORD PTR 28[edi]
ret
__x86_AES_encrypt_compact ENDP
ALIGN 16
__sse_AES_encrypt_compact PROC PRIVATE
pxor mm0,QWORD PTR [edi]
pxor mm4,QWORD PTR 8[edi]
mov esi,DWORD PTR 240[edi]
lea esi,DWORD PTR [esi*1+esi-2]
lea esi,DWORD PTR [esi*8+edi]
mov DWORD PTR 24[esp],esi
mov eax,454761243
mov DWORD PTR 8[esp],eax
mov DWORD PTR 12[esp],eax
mov eax,DWORD PTR [ebp-128]
mov ebx,DWORD PTR [ebp-96]
mov ecx,DWORD PTR [ebp-64]
mov edx,DWORD PTR [ebp-32]
mov eax,DWORD PTR [ebp]
mov ebx,DWORD PTR 32[ebp]
mov ecx,DWORD PTR 64[ebp]
mov edx,DWORD PTR 96[ebp]
ALIGN 16
$L001loop:
pshufw mm1,mm0,8
pshufw mm5,mm4,13
movd eax,mm1
movd ebx,mm5
movzx esi,al
movzx ecx,BYTE PTR [esi*1+ebp-128]
pshufw mm2,mm0,13
movzx edx,ah
movzx edx,BYTE PTR [edx*1+ebp-128]
shl edx,8
shr eax,16
movzx esi,bl
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,16
or ecx,esi
pshufw mm6,mm4,8
movzx esi,bh
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,24
or edx,esi
shr ebx,16
movzx esi,ah
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,8
or ecx,esi
movzx esi,bh
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,24
or ecx,esi
movd mm0,ecx
movzx esi,al
movzx ecx,BYTE PTR [esi*1+ebp-128]
movd eax,mm2
movzx esi,bl
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,16
or ecx,esi
movd ebx,mm6
movzx esi,ah
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,24
or ecx,esi
movzx esi,bh
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,8
or ecx,esi
movd mm1,ecx
movzx esi,bl
movzx ecx,BYTE PTR [esi*1+ebp-128]
shr ebx,16
movzx esi,al
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,16
or ecx,esi
shr eax,16
punpckldq mm0,mm1
movzx esi,ah
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,24
or ecx,esi
and eax,255
movzx eax,BYTE PTR [eax*1+ebp-128]
shl eax,16
or edx,eax
movzx esi,bh
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,8
or ecx,esi
movd mm4,ecx
and ebx,255
movzx ebx,BYTE PTR [ebx*1+ebp-128]
or edx,ebx
movd mm5,edx
punpckldq mm4,mm5
add edi,16
cmp edi,DWORD PTR 24[esp]
ja $L002out
movq mm2,QWORD PTR 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,QWORD PTR [edi]
movq mm6,QWORD PTR 8[edi]
psrld mm1,8
psrld mm5,8
mov eax,DWORD PTR [ebp-128]
pslld mm3,24
pslld mm7,24
mov ebx,DWORD PTR [ebp-64]
pxor mm0,mm1
pxor mm4,mm5
mov ecx,DWORD PTR [ebp]
pxor mm0,mm3
pxor mm4,mm7
mov edx,DWORD PTR 64[ebp]
pxor mm0,mm2
pxor mm4,mm6
jmp $L001loop
ALIGN 16
$L002out:
pxor mm0,QWORD PTR [edi]
pxor mm4,QWORD PTR 8[edi]
ret
__sse_AES_encrypt_compact ENDP
ALIGN 16
__x86_AES_encrypt PROC PRIVATE
mov DWORD PTR 20[esp],edi
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
mov esi,DWORD PTR 240[edi]
lea esi,DWORD PTR [esi*1+esi-2]
lea esi,DWORD PTR [esi*8+edi]
mov DWORD PTR 24[esp],esi
ALIGN 16
$L003loop:
mov esi,eax
and esi,255
mov esi,DWORD PTR [esi*8+ebp]
movzx edi,bh
xor esi,DWORD PTR 3[edi*8+ebp]
mov edi,ecx
shr edi,16
and edi,255
xor esi,DWORD PTR 2[edi*8+ebp]
mov edi,edx
shr edi,24
xor esi,DWORD PTR 1[edi*8+ebp]
mov DWORD PTR 4[esp],esi
mov esi,ebx
and esi,255
shr ebx,16
mov esi,DWORD PTR [esi*8+ebp]
movzx edi,ch
xor esi,DWORD PTR 3[edi*8+ebp]
mov edi,edx
shr edi,16
and edi,255
xor esi,DWORD PTR 2[edi*8+ebp]
mov edi,eax
shr edi,24
xor esi,DWORD PTR 1[edi*8+ebp]
mov DWORD PTR 8[esp],esi
mov esi,ecx
and esi,255
shr ecx,24
mov esi,DWORD PTR [esi*8+ebp]
movzx edi,dh
xor esi,DWORD PTR 3[edi*8+ebp]
mov edi,eax
shr edi,16
and edx,255
and edi,255
xor esi,DWORD PTR 2[edi*8+ebp]
movzx edi,bh
xor esi,DWORD PTR 1[edi*8+ebp]
mov edi,DWORD PTR 20[esp]
mov edx,DWORD PTR [edx*8+ebp]
movzx eax,ah
xor edx,DWORD PTR 3[eax*8+ebp]
mov eax,DWORD PTR 4[esp]
and ebx,255
xor edx,DWORD PTR 2[ebx*8+ebp]
mov ebx,DWORD PTR 8[esp]
xor edx,DWORD PTR 1[ecx*8+ebp]
mov ecx,esi
add edi,16
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
cmp edi,DWORD PTR 24[esp]
mov DWORD PTR 20[esp],edi
jb $L003loop
mov esi,eax
and esi,255
mov esi,DWORD PTR 2[esi*8+ebp]
and esi,255
movzx edi,bh
mov edi,DWORD PTR [edi*8+ebp]
and edi,65280
xor esi,edi
mov edi,ecx
shr edi,16
and edi,255
mov edi,DWORD PTR [edi*8+ebp]
and edi,16711680
xor esi,edi
mov edi,edx
shr edi,24
mov edi,DWORD PTR 2[edi*8+ebp]
and edi,4278190080
xor esi,edi
mov DWORD PTR 4[esp],esi
mov esi,ebx
and esi,255
shr ebx,16
mov esi,DWORD PTR 2[esi*8+ebp]
and esi,255
movzx edi,ch
mov edi,DWORD PTR [edi*8+ebp]
and edi,65280
xor esi,edi
mov edi,edx
shr edi,16
and edi,255
mov edi,DWORD PTR [edi*8+ebp]
and edi,16711680
xor esi,edi
mov edi,eax
shr edi,24
mov edi,DWORD PTR 2[edi*8+ebp]
and edi,4278190080
xor esi,edi
mov DWORD PTR 8[esp],esi
mov esi,ecx
and esi,255
shr ecx,24
mov esi,DWORD PTR 2[esi*8+ebp]
and esi,255
movzx edi,dh
mov edi,DWORD PTR [edi*8+ebp]
and edi,65280
xor esi,edi
mov edi,eax
shr edi,16
and edx,255
and edi,255
mov edi,DWORD PTR [edi*8+ebp]
and edi,16711680
xor esi,edi
movzx edi,bh
mov edi,DWORD PTR 2[edi*8+ebp]
and edi,4278190080
xor esi,edi
mov edi,DWORD PTR 20[esp]
and edx,255
mov edx,DWORD PTR 2[edx*8+ebp]
and edx,255
movzx eax,ah
mov eax,DWORD PTR [eax*8+ebp]
and eax,65280
xor edx,eax
mov eax,DWORD PTR 4[esp]
and ebx,255
mov ebx,DWORD PTR [ebx*8+ebp]
and ebx,16711680
xor edx,ebx
mov ebx,DWORD PTR 8[esp]
mov ecx,DWORD PTR 2[ecx*8+ebp]
and ecx,4278190080
xor edx,ecx
mov ecx,esi
add edi,16
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
ret
ALIGN 64
$LAES_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
__x86_AES_encrypt ENDP
ALIGN 16
_AES_encrypt PROC PUBLIC
$L_AES_encrypt_begin::
push ebp
push ebx
push esi
push edi
mov esi,DWORD PTR 20[esp]
mov edi,DWORD PTR 28[esp]
mov eax,esp
sub esp,36
and esp,-64
lea ebx,DWORD PTR [edi-127]
sub ebx,esp
neg ebx
and ebx,960
sub esp,ebx
add esp,4
mov DWORD PTR 28[esp],eax
call $L004pic_point
$L004pic_point:
pop ebp
lea eax,DWORD PTR _OPENSSL_ia32cap_P
lea ebp,DWORD PTR ($LAES_Te-$L004pic_point)[ebp]
lea ebx,DWORD PTR 764[esp]
sub ebx,ebp
and ebx,768
lea ebp,DWORD PTR 2176[ebx*1+ebp]
bt DWORD PTR [eax],25
jnc $L005x86
movq mm0,QWORD PTR [esi]
movq mm4,QWORD PTR 8[esi]
call __sse_AES_encrypt_compact
mov esp,DWORD PTR 28[esp]
mov esi,DWORD PTR 24[esp]
movq QWORD PTR [esi],mm0
movq QWORD PTR 8[esi],mm4
emms
pop edi
pop esi
pop ebx
pop ebp
ret
ALIGN 16
$L005x86:
mov DWORD PTR 24[esp],ebp
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 12[esi]
call __x86_AES_encrypt_compact
mov esp,DWORD PTR 28[esp]
mov esi,DWORD PTR 24[esp]
mov DWORD PTR [esi],eax
mov DWORD PTR 4[esi],ebx
mov DWORD PTR 8[esi],ecx
mov DWORD PTR 12[esi],edx
pop edi
pop esi
pop ebx
pop ebp
ret
_AES_encrypt ENDP
ALIGN 16
__x86_AES_decrypt_compact PROC PRIVATE
mov DWORD PTR 20[esp],edi
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
mov esi,DWORD PTR 240[edi]
lea esi,DWORD PTR [esi*1+esi-2]
lea esi,DWORD PTR [esi*8+edi]
mov DWORD PTR 24[esp],esi
mov edi,DWORD PTR [ebp-128]
mov esi,DWORD PTR [ebp-96]
mov edi,DWORD PTR [ebp-64]
mov esi,DWORD PTR [ebp-32]
mov edi,DWORD PTR [ebp]
mov esi,DWORD PTR 32[ebp]
mov edi,DWORD PTR 64[ebp]
mov esi,DWORD PTR 96[ebp]
ALIGN 16
$L006loop:
mov esi,eax
and esi,255
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,dh
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,8
xor esi,edi
mov edi,ecx
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
mov edi,ebx
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
mov DWORD PTR 4[esp],esi
mov esi,ebx
and esi,255
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,ah
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,8
xor esi,edi
mov edi,edx
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
mov edi,ecx
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
mov DWORD PTR 8[esp],esi
mov esi,ecx
and esi,255
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,bh
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,8
xor esi,edi
mov edi,eax
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
mov edi,edx
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
and edx,255
movzx edx,BYTE PTR [edx*1+ebp-128]
movzx ecx,ch
movzx ecx,BYTE PTR [ecx*1+ebp-128]
shl ecx,8
xor edx,ecx
mov ecx,esi
shr ebx,16
and ebx,255
movzx ebx,BYTE PTR [ebx*1+ebp-128]
shl ebx,16
xor edx,ebx
shr eax,24
movzx eax,BYTE PTR [eax*1+ebp-128]
shl eax,24
xor edx,eax
mov esi,ecx
and esi,2155905152
mov edi,esi
shr edi,7
lea eax,DWORD PTR [ecx*1+ecx]
sub esi,edi
and eax,4278124286
and esi,454761243
xor esi,eax
mov eax,esi
and esi,2155905152
mov edi,esi
shr edi,7
lea ebx,DWORD PTR [eax*1+eax]
sub esi,edi
and ebx,4278124286
and esi,454761243
xor eax,ecx
xor esi,ebx
mov ebx,esi
and esi,2155905152
mov edi,esi
shr edi,7
lea ebp,DWORD PTR [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
rol eax,24
xor ecx,ebx
xor ebx,ebp
rol ebx,16
xor ecx,ebp
rol ebp,8
xor ecx,eax
xor ecx,ebx
mov eax,DWORD PTR 4[esp]
xor ecx,ebp
mov DWORD PTR 12[esp],ecx
mov esi,edx
and esi,2155905152
mov edi,esi
shr edi,7
lea ebx,DWORD PTR [edx*1+edx]
sub esi,edi
and ebx,4278124286
and esi,454761243
xor esi,ebx
mov ebx,esi
and esi,2155905152
mov edi,esi
shr edi,7
lea ecx,DWORD PTR [ebx*1+ebx]
sub esi,edi
and ecx,4278124286
and esi,454761243
xor ebx,edx
xor esi,ecx
mov ecx,esi
and esi,2155905152
mov edi,esi
shr edi,7
lea ebp,DWORD PTR [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
rol ebx,24
xor edx,ecx
xor ecx,ebp
rol ecx,16
xor edx,ebp
rol ebp,8
xor edx,ebx
xor edx,ecx
mov ebx,DWORD PTR 8[esp]
xor edx,ebp
mov DWORD PTR 16[esp],edx
mov esi,eax
and esi,2155905152
mov edi,esi
shr edi,7
lea ecx,DWORD PTR [eax*1+eax]
sub esi,edi
and ecx,4278124286
and esi,454761243
xor esi,ecx
mov ecx,esi
and esi,2155905152
mov edi,esi
shr edi,7
lea edx,DWORD PTR [ecx*1+ecx]
sub esi,edi
and edx,4278124286
and esi,454761243
xor ecx,eax
xor esi,edx
mov edx,esi
and esi,2155905152
mov edi,esi
shr edi,7
lea ebp,DWORD PTR [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
rol ecx,24
xor eax,edx
xor edx,ebp
rol edx,16
xor eax,ebp
rol ebp,8
xor eax,ecx
xor eax,edx
xor eax,ebp
mov esi,ebx
and esi,2155905152
mov edi,esi
shr edi,7
lea ecx,DWORD PTR [ebx*1+ebx]
sub esi,edi
and ecx,4278124286
and esi,454761243
xor esi,ecx
mov ecx,esi
and esi,2155905152
mov edi,esi
shr edi,7
lea edx,DWORD PTR [ecx*1+ecx]
sub esi,edi
and edx,4278124286
and esi,454761243
xor ecx,ebx
xor esi,edx
mov edx,esi
and esi,2155905152
mov edi,esi
shr edi,7
lea ebp,DWORD PTR [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
rol ecx,24
xor ebx,edx
xor edx,ebp
rol edx,16
xor ebx,ebp
rol ebp,8
xor ebx,ecx
xor ebx,edx
mov ecx,DWORD PTR 12[esp]
xor ebx,ebp
mov edx,DWORD PTR 16[esp]
mov edi,DWORD PTR 20[esp]
mov ebp,DWORD PTR 28[esp]
add edi,16
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
cmp edi,DWORD PTR 24[esp]
mov DWORD PTR 20[esp],edi
jb $L006loop
mov esi,eax
and esi,255
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,dh
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,8
xor esi,edi
mov edi,ecx
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
mov edi,ebx
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
mov DWORD PTR 4[esp],esi
mov esi,ebx
and esi,255
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,ah
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,8
xor esi,edi
mov edi,edx
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
mov edi,ecx
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
mov DWORD PTR 8[esp],esi
mov esi,ecx
and esi,255
movzx esi,BYTE PTR [esi*1+ebp-128]
movzx edi,bh
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,8
xor esi,edi
mov edi,eax
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,16
xor esi,edi
mov edi,edx
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp-128]
shl edi,24
xor esi,edi
mov edi,DWORD PTR 20[esp]
and edx,255
movzx edx,BYTE PTR [edx*1+ebp-128]
movzx ecx,ch
movzx ecx,BYTE PTR [ecx*1+ebp-128]
shl ecx,8
xor edx,ecx
mov ecx,esi
shr ebx,16
and ebx,255
movzx ebx,BYTE PTR [ebx*1+ebp-128]
shl ebx,16
xor edx,ebx
mov ebx,DWORD PTR 8[esp]
shr eax,24
movzx eax,BYTE PTR [eax*1+ebp-128]
shl eax,24
xor edx,eax
mov eax,DWORD PTR 4[esp]
xor eax,DWORD PTR 16[edi]
xor ebx,DWORD PTR 20[edi]
xor ecx,DWORD PTR 24[edi]
xor edx,DWORD PTR 28[edi]
ret
__x86_AES_decrypt_compact ENDP
ALIGN 16
__sse_AES_decrypt_compact PROC PRIVATE
pxor mm0,QWORD PTR [edi]
pxor mm4,QWORD PTR 8[edi]
mov esi,DWORD PTR 240[edi]
lea esi,DWORD PTR [esi*1+esi-2]
lea esi,DWORD PTR [esi*8+edi]
mov DWORD PTR 24[esp],esi
mov eax,454761243
mov DWORD PTR 8[esp],eax
mov DWORD PTR 12[esp],eax
mov eax,DWORD PTR [ebp-128]
mov ebx,DWORD PTR [ebp-96]
mov ecx,DWORD PTR [ebp-64]
mov edx,DWORD PTR [ebp-32]
mov eax,DWORD PTR [ebp]
mov ebx,DWORD PTR 32[ebp]
mov ecx,DWORD PTR 64[ebp]
mov edx,DWORD PTR 96[ebp]
ALIGN 16
$L007loop:
pshufw mm1,mm0,12
movd eax,mm1
pshufw mm5,mm4,9
movzx esi,al
movzx ecx,BYTE PTR [esi*1+ebp-128]
movd ebx,mm5
movzx edx,ah
movzx edx,BYTE PTR [edx*1+ebp-128]
shl edx,8
pshufw mm2,mm0,6
movzx esi,bl
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,16
or ecx,esi
shr eax,16
movzx esi,bh
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,24
or edx,esi
shr ebx,16
pshufw mm6,mm4,3
movzx esi,ah
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,24
or ecx,esi
movzx esi,bh
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,8
or ecx,esi
movd mm0,ecx
movzx esi,al
movd eax,mm2
movzx ecx,BYTE PTR [esi*1+ebp-128]
shl ecx,16
movzx esi,bl
movd ebx,mm6
movzx esi,BYTE PTR [esi*1+ebp-128]
or ecx,esi
movzx esi,al
movzx esi,BYTE PTR [esi*1+ebp-128]
or edx,esi
movzx esi,bl
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,16
or edx,esi
movd mm1,edx
movzx esi,ah
movzx edx,BYTE PTR [esi*1+ebp-128]
shl edx,8
movzx esi,bh
shr eax,16
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,24
or edx,esi
shr ebx,16
punpckldq mm0,mm1
movzx esi,bh
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,8
or ecx,esi
and ebx,255
movzx ebx,BYTE PTR [ebx*1+ebp-128]
or edx,ebx
movzx esi,al
movzx esi,BYTE PTR [esi*1+ebp-128]
shl esi,16
or edx,esi
movd mm4,edx
movzx eax,ah
movzx eax,BYTE PTR [eax*1+ebp-128]
shl eax,24
or ecx,eax
movd mm5,ecx
punpckldq mm4,mm5
add edi,16
cmp edi,DWORD PTR 24[esp]
ja $L008out
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,QWORD PTR 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,QWORD PTR 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,QWORD PTR [edi]
movq mm6,QWORD PTR 8[edi]
pxor mm0,mm1
pxor mm4,mm5
pxor mm0,mm3
pxor mm4,mm7
mov eax,DWORD PTR [ebp-128]
pslld mm1,16
pslld mm5,16
mov ebx,DWORD PTR [ebp-64]
psrld mm3,16
psrld mm7,16
mov ecx,DWORD PTR [ebp]
pxor mm0,mm1
pxor mm4,mm5
mov edx,DWORD PTR 64[ebp]
pxor mm0,mm3
pxor mm4,mm7
pxor mm0,mm2
pxor mm4,mm6
jmp $L007loop
ALIGN 16
$L008out:
pxor mm0,QWORD PTR [edi]
pxor mm4,QWORD PTR 8[edi]
ret
__sse_AES_decrypt_compact ENDP
ALIGN 16
__x86_AES_decrypt PROC PRIVATE
mov DWORD PTR 20[esp],edi
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
mov esi,DWORD PTR 240[edi]
lea esi,DWORD PTR [esi*1+esi-2]
lea esi,DWORD PTR [esi*8+edi]
mov DWORD PTR 24[esp],esi
ALIGN 16
$L009loop:
mov esi,eax
and esi,255
mov esi,DWORD PTR [esi*8+ebp]
movzx edi,dh
xor esi,DWORD PTR 3[edi*8+ebp]
mov edi,ecx
shr edi,16
and edi,255
xor esi,DWORD PTR 2[edi*8+ebp]
mov edi,ebx
shr edi,24
xor esi,DWORD PTR 1[edi*8+ebp]
mov DWORD PTR 4[esp],esi
mov esi,ebx
and esi,255
mov esi,DWORD PTR [esi*8+ebp]
movzx edi,ah
xor esi,DWORD PTR 3[edi*8+ebp]
mov edi,edx
shr edi,16
and edi,255
xor esi,DWORD PTR 2[edi*8+ebp]
mov edi,ecx
shr edi,24
xor esi,DWORD PTR 1[edi*8+ebp]
mov DWORD PTR 8[esp],esi
mov esi,ecx
and esi,255
mov esi,DWORD PTR [esi*8+ebp]
movzx edi,bh
xor esi,DWORD PTR 3[edi*8+ebp]
mov edi,eax
shr edi,16
and edi,255
xor esi,DWORD PTR 2[edi*8+ebp]
mov edi,edx
shr edi,24
xor esi,DWORD PTR 1[edi*8+ebp]
mov edi,DWORD PTR 20[esp]
and edx,255
mov edx,DWORD PTR [edx*8+ebp]
movzx ecx,ch
xor edx,DWORD PTR 3[ecx*8+ebp]
mov ecx,esi
shr ebx,16
and ebx,255
xor edx,DWORD PTR 2[ebx*8+ebp]
mov ebx,DWORD PTR 8[esp]
shr eax,24
xor edx,DWORD PTR 1[eax*8+ebp]
mov eax,DWORD PTR 4[esp]
add edi,16
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
cmp edi,DWORD PTR 24[esp]
mov DWORD PTR 20[esp],edi
jb $L009loop
lea ebp,DWORD PTR 2176[ebp]
mov edi,DWORD PTR [ebp-128]
mov esi,DWORD PTR [ebp-96]
mov edi,DWORD PTR [ebp-64]
mov esi,DWORD PTR [ebp-32]
mov edi,DWORD PTR [ebp]
mov esi,DWORD PTR 32[ebp]
mov edi,DWORD PTR 64[ebp]
mov esi,DWORD PTR 96[ebp]
lea ebp,DWORD PTR [ebp-128]
mov esi,eax
and esi,255
movzx esi,BYTE PTR [esi*1+ebp]
movzx edi,dh
movzx edi,BYTE PTR [edi*1+ebp]
shl edi,8
xor esi,edi
mov edi,ecx
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp]
shl edi,16
xor esi,edi
mov edi,ebx
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp]
shl edi,24
xor esi,edi
mov DWORD PTR 4[esp],esi
mov esi,ebx
and esi,255
movzx esi,BYTE PTR [esi*1+ebp]
movzx edi,ah
movzx edi,BYTE PTR [edi*1+ebp]
shl edi,8
xor esi,edi
mov edi,edx
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp]
shl edi,16
xor esi,edi
mov edi,ecx
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp]
shl edi,24
xor esi,edi
mov DWORD PTR 8[esp],esi
mov esi,ecx
and esi,255
movzx esi,BYTE PTR [esi*1+ebp]
movzx edi,bh
movzx edi,BYTE PTR [edi*1+ebp]
shl edi,8
xor esi,edi
mov edi,eax
shr edi,16
and edi,255
movzx edi,BYTE PTR [edi*1+ebp]
shl edi,16
xor esi,edi
mov edi,edx
shr edi,24
movzx edi,BYTE PTR [edi*1+ebp]
shl edi,24
xor esi,edi
mov edi,DWORD PTR 20[esp]
and edx,255
movzx edx,BYTE PTR [edx*1+ebp]
movzx ecx,ch
movzx ecx,BYTE PTR [ecx*1+ebp]
shl ecx,8
xor edx,ecx
mov ecx,esi
shr ebx,16
and ebx,255
movzx ebx,BYTE PTR [ebx*1+ebp]
shl ebx,16
xor edx,ebx
mov ebx,DWORD PTR 8[esp]
shr eax,24
movzx eax,BYTE PTR [eax*1+ebp]
shl eax,24
xor edx,eax
mov eax,DWORD PTR 4[esp]
lea ebp,DWORD PTR [ebp-2048]
add edi,16
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
ret
ALIGN 64
$LAES_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
__x86_AES_decrypt ENDP
ALIGN 16
_AES_decrypt PROC PUBLIC
$L_AES_decrypt_begin::
push ebp
push ebx
push esi
push edi
mov esi,DWORD PTR 20[esp]
mov edi,DWORD PTR 28[esp]
mov eax,esp
sub esp,36
and esp,-64
lea ebx,DWORD PTR [edi-127]
sub ebx,esp
neg ebx
and ebx,960
sub esp,ebx
add esp,4
mov DWORD PTR 28[esp],eax
call $L010pic_point
$L010pic_point:
pop ebp
lea eax,DWORD PTR _OPENSSL_ia32cap_P
lea ebp,DWORD PTR ($LAES_Td-$L010pic_point)[ebp]
lea ebx,DWORD PTR 764[esp]
sub ebx,ebp
and ebx,768
lea ebp,DWORD PTR 2176[ebx*1+ebp]
bt DWORD PTR [eax],25
jnc $L011x86
movq mm0,QWORD PTR [esi]
movq mm4,QWORD PTR 8[esi]
call __sse_AES_decrypt_compact
mov esp,DWORD PTR 28[esp]
mov esi,DWORD PTR 24[esp]
movq QWORD PTR [esi],mm0
movq QWORD PTR 8[esi],mm4
emms
pop edi
pop esi
pop ebx
pop ebp
ret
ALIGN 16
$L011x86:
mov DWORD PTR 24[esp],ebp
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 12[esi]
call __x86_AES_decrypt_compact
mov esp,DWORD PTR 28[esp]
mov esi,DWORD PTR 24[esp]
mov DWORD PTR [esi],eax
mov DWORD PTR 4[esi],ebx
mov DWORD PTR 8[esi],ecx
mov DWORD PTR 12[esi],edx
pop edi
pop esi
pop ebx
pop ebp
ret
_AES_decrypt ENDP
ALIGN 16
_AES_cbc_encrypt PROC PUBLIC
$L_AES_cbc_encrypt_begin::
push ebp
push ebx
push esi
push edi
mov ecx,DWORD PTR 28[esp]
cmp ecx,0
je $L012drop_out
call $L013pic_point
$L013pic_point:
pop ebp
lea eax,DWORD PTR _OPENSSL_ia32cap_P
cmp DWORD PTR 40[esp],0
lea ebp,DWORD PTR ($LAES_Te-$L013pic_point)[ebp]
jne $L014picked_te
lea ebp,DWORD PTR ($LAES_Td-$LAES_Te)[ebp]
$L014picked_te:
pushfd
cld
cmp ecx,512
jb $L015slow_way
test ecx,15
jnz $L015slow_way
bt DWORD PTR [eax],28
jc $L015slow_way
lea esi,DWORD PTR [esp-324]
and esi,-64
mov eax,ebp
lea ebx,DWORD PTR 2304[ebp]
mov edx,esi
and eax,4095
and ebx,4095
and edx,4095
cmp edx,ebx
jb $L016tbl_break_out
sub edx,ebx
sub esi,edx
jmp $L017tbl_ok
ALIGN 4
$L016tbl_break_out:
sub edx,eax
and edx,4095
add edx,384
sub esi,edx
ALIGN 4
$L017tbl_ok:
lea edx,DWORD PTR 24[esp]
xchg esp,esi
add esp,4
mov DWORD PTR 24[esp],ebp
mov DWORD PTR 28[esp],esi
mov eax,DWORD PTR [edx]
mov ebx,DWORD PTR 4[edx]
mov edi,DWORD PTR 12[edx]
mov esi,DWORD PTR 16[edx]
mov edx,DWORD PTR 20[edx]
mov DWORD PTR 32[esp],eax
mov DWORD PTR 36[esp],ebx
mov DWORD PTR 40[esp],ecx
mov DWORD PTR 44[esp],edi
mov DWORD PTR 48[esp],esi
mov DWORD PTR 316[esp],0
mov ebx,edi
mov ecx,61
sub ebx,ebp
mov esi,edi
and ebx,4095
lea edi,DWORD PTR 76[esp]
cmp ebx,2304
jb $L018do_copy
cmp ebx,3852
jb $L019skip_copy
ALIGN 4
$L018do_copy:
mov DWORD PTR 44[esp],edi
DD 2784229001
$L019skip_copy:
mov edi,16
ALIGN 4
$L020prefetch_tbl:
mov eax,DWORD PTR [ebp]
mov ebx,DWORD PTR 32[ebp]
mov ecx,DWORD PTR 64[ebp]
mov esi,DWORD PTR 96[ebp]
lea ebp,DWORD PTR 128[ebp]
sub edi,1
jnz $L020prefetch_tbl
sub ebp,2048
mov esi,DWORD PTR 32[esp]
mov edi,DWORD PTR 48[esp]
cmp edx,0
je $L021fast_decrypt
mov eax,DWORD PTR [edi]
mov ebx,DWORD PTR 4[edi]
ALIGN 16
$L022fast_enc_loop:
mov ecx,DWORD PTR 8[edi]
mov edx,DWORD PTR 12[edi]
xor eax,DWORD PTR [esi]
xor ebx,DWORD PTR 4[esi]
xor ecx,DWORD PTR 8[esi]
xor edx,DWORD PTR 12[esi]
mov edi,DWORD PTR 44[esp]
call __x86_AES_encrypt
mov esi,DWORD PTR 32[esp]
mov edi,DWORD PTR 36[esp]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR 8[edi],ecx
mov DWORD PTR 12[edi],edx
lea esi,DWORD PTR 16[esi]
mov ecx,DWORD PTR 40[esp]
mov DWORD PTR 32[esp],esi
lea edx,DWORD PTR 16[edi]
mov DWORD PTR 36[esp],edx
sub ecx,16
mov DWORD PTR 40[esp],ecx
jnz $L022fast_enc_loop
mov esi,DWORD PTR 48[esp]
mov ecx,DWORD PTR 8[edi]
mov edx,DWORD PTR 12[edi]
mov DWORD PTR [esi],eax
mov DWORD PTR 4[esi],ebx
mov DWORD PTR 8[esi],ecx
mov DWORD PTR 12[esi],edx
cmp DWORD PTR 316[esp],0
mov edi,DWORD PTR 44[esp]
je $L023skip_ezero
mov ecx,60
xor eax,eax
ALIGN 4
DD 2884892297
$L023skip_ezero:
mov esp,DWORD PTR 28[esp]
popfd
$L012drop_out:
pop edi
pop esi
pop ebx
pop ebp
ret
pushfd
ALIGN 16
$L021fast_decrypt:
cmp esi,DWORD PTR 36[esp]
je $L024fast_dec_in_place
mov DWORD PTR 52[esp],edi
ALIGN 4
ALIGN 16
$L025fast_dec_loop:
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 12[esi]
mov edi,DWORD PTR 44[esp]
call __x86_AES_decrypt
mov edi,DWORD PTR 52[esp]
mov esi,DWORD PTR 40[esp]
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
mov edi,DWORD PTR 36[esp]
mov esi,DWORD PTR 32[esp]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR 8[edi],ecx
mov DWORD PTR 12[edi],edx
mov ecx,DWORD PTR 40[esp]
mov DWORD PTR 52[esp],esi
lea esi,DWORD PTR 16[esi]
mov DWORD PTR 32[esp],esi
lea edi,DWORD PTR 16[edi]
mov DWORD PTR 36[esp],edi
sub ecx,16
mov DWORD PTR 40[esp],ecx
jnz $L025fast_dec_loop
mov edi,DWORD PTR 52[esp]
mov esi,DWORD PTR 48[esp]
mov eax,DWORD PTR [edi]
mov ebx,DWORD PTR 4[edi]
mov ecx,DWORD PTR 8[edi]
mov edx,DWORD PTR 12[edi]
mov DWORD PTR [esi],eax
mov DWORD PTR 4[esi],ebx
mov DWORD PTR 8[esi],ecx
mov DWORD PTR 12[esi],edx
jmp $L026fast_dec_out
ALIGN 16
$L024fast_dec_in_place:
$L027fast_dec_in_place_loop:
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 12[esi]
lea edi,DWORD PTR 60[esp]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR 8[edi],ecx
mov DWORD PTR 12[edi],edx
mov edi,DWORD PTR 44[esp]
call __x86_AES_decrypt
mov edi,DWORD PTR 48[esp]
mov esi,DWORD PTR 36[esp]
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
mov DWORD PTR [esi],eax
mov DWORD PTR 4[esi],ebx
mov DWORD PTR 8[esi],ecx
mov DWORD PTR 12[esi],edx
lea esi,DWORD PTR 16[esi]
mov DWORD PTR 36[esp],esi
lea esi,DWORD PTR 60[esp]
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 12[esi]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR 8[edi],ecx
mov DWORD PTR 12[edi],edx
mov esi,DWORD PTR 32[esp]
mov ecx,DWORD PTR 40[esp]
lea esi,DWORD PTR 16[esi]
mov DWORD PTR 32[esp],esi
sub ecx,16
mov DWORD PTR 40[esp],ecx
jnz $L027fast_dec_in_place_loop
ALIGN 4
$L026fast_dec_out:
cmp DWORD PTR 316[esp],0
mov edi,DWORD PTR 44[esp]
je $L028skip_dzero
mov ecx,60
xor eax,eax
ALIGN 4
DD 2884892297
$L028skip_dzero:
mov esp,DWORD PTR 28[esp]
popfd
pop edi
pop esi
pop ebx
pop ebp
ret
pushfd
ALIGN 16
$L015slow_way:
mov eax,DWORD PTR [eax]
mov edi,DWORD PTR 36[esp]
lea esi,DWORD PTR [esp-80]
and esi,-64
lea ebx,DWORD PTR [edi-143]
sub ebx,esi
neg ebx
and ebx,960
sub esi,ebx
lea ebx,DWORD PTR 768[esi]
sub ebx,ebp
and ebx,768
lea ebp,DWORD PTR 2176[ebx*1+ebp]
lea edx,DWORD PTR 24[esp]
xchg esp,esi
add esp,4
mov DWORD PTR 24[esp],ebp
mov DWORD PTR 28[esp],esi
mov DWORD PTR 52[esp],eax
mov eax,DWORD PTR [edx]
mov ebx,DWORD PTR 4[edx]
mov esi,DWORD PTR 16[edx]
mov edx,DWORD PTR 20[edx]
mov DWORD PTR 32[esp],eax
mov DWORD PTR 36[esp],ebx
mov DWORD PTR 40[esp],ecx
mov DWORD PTR 44[esp],edi
mov DWORD PTR 48[esp],esi
mov edi,esi
mov esi,eax
cmp edx,0
je $L029slow_decrypt
cmp ecx,16
mov edx,ebx
jb $L030slow_enc_tail
bt DWORD PTR 52[esp],25
jnc $L031slow_enc_x86
movq mm0,QWORD PTR [edi]
movq mm4,QWORD PTR 8[edi]
ALIGN 16
$L032slow_enc_loop_sse:
pxor mm0,QWORD PTR [esi]
pxor mm4,QWORD PTR 8[esi]
mov edi,DWORD PTR 44[esp]
call __sse_AES_encrypt_compact
mov esi,DWORD PTR 32[esp]
mov edi,DWORD PTR 36[esp]
mov ecx,DWORD PTR 40[esp]
movq QWORD PTR [edi],mm0
movq QWORD PTR 8[edi],mm4
lea esi,DWORD PTR 16[esi]
mov DWORD PTR 32[esp],esi
lea edx,DWORD PTR 16[edi]
mov DWORD PTR 36[esp],edx
sub ecx,16
cmp ecx,16
mov DWORD PTR 40[esp],ecx
jae $L032slow_enc_loop_sse
test ecx,15
jnz $L030slow_enc_tail
mov esi,DWORD PTR 48[esp]
movq QWORD PTR [esi],mm0
movq QWORD PTR 8[esi],mm4
emms
mov esp,DWORD PTR 28[esp]
popfd
pop edi
pop esi
pop ebx
pop ebp
ret
pushfd
ALIGN 16
$L031slow_enc_x86:
mov eax,DWORD PTR [edi]
mov ebx,DWORD PTR 4[edi]
ALIGN 4
$L033slow_enc_loop_x86:
mov ecx,DWORD PTR 8[edi]
mov edx,DWORD PTR 12[edi]
xor eax,DWORD PTR [esi]
xor ebx,DWORD PTR 4[esi]
xor ecx,DWORD PTR 8[esi]
xor edx,DWORD PTR 12[esi]
mov edi,DWORD PTR 44[esp]
call __x86_AES_encrypt_compact
mov esi,DWORD PTR 32[esp]
mov edi,DWORD PTR 36[esp]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR 8[edi],ecx
mov DWORD PTR 12[edi],edx
mov ecx,DWORD PTR 40[esp]
lea esi,DWORD PTR 16[esi]
mov DWORD PTR 32[esp],esi
lea edx,DWORD PTR 16[edi]
mov DWORD PTR 36[esp],edx
sub ecx,16
cmp ecx,16
mov DWORD PTR 40[esp],ecx
jae $L033slow_enc_loop_x86
test ecx,15
jnz $L030slow_enc_tail
mov esi,DWORD PTR 48[esp]
mov ecx,DWORD PTR 8[edi]
mov edx,DWORD PTR 12[edi]
mov DWORD PTR [esi],eax
mov DWORD PTR 4[esi],ebx
mov DWORD PTR 8[esi],ecx
mov DWORD PTR 12[esi],edx
mov esp,DWORD PTR 28[esp]
popfd
pop edi
pop esi
pop ebx
pop ebp
ret
pushfd
ALIGN 16
$L030slow_enc_tail:
emms
mov edi,edx
mov ebx,16
sub ebx,ecx
cmp edi,esi
je $L034enc_in_place
ALIGN 4
DD 2767451785
jmp $L035enc_skip_in_place
$L034enc_in_place:
lea edi,DWORD PTR [ecx*1+edi]
$L035enc_skip_in_place:
mov ecx,ebx
xor eax,eax
ALIGN 4
DD 2868115081
mov edi,DWORD PTR 48[esp]
mov esi,edx
mov eax,DWORD PTR [edi]
mov ebx,DWORD PTR 4[edi]
mov DWORD PTR 40[esp],16
jmp $L033slow_enc_loop_x86
ALIGN 16
$L029slow_decrypt:
bt DWORD PTR 52[esp],25
jnc $L036slow_dec_loop_x86
ALIGN 4
$L037slow_dec_loop_sse:
movq mm0,QWORD PTR [esi]
movq mm4,QWORD PTR 8[esi]
mov edi,DWORD PTR 44[esp]
call __sse_AES_decrypt_compact
mov esi,DWORD PTR 32[esp]
lea eax,DWORD PTR 60[esp]
mov ebx,DWORD PTR 36[esp]
mov ecx,DWORD PTR 40[esp]
mov edi,DWORD PTR 48[esp]
movq mm1,QWORD PTR [esi]
movq mm5,QWORD PTR 8[esi]
pxor mm0,QWORD PTR [edi]
pxor mm4,QWORD PTR 8[edi]
movq QWORD PTR [edi],mm1
movq QWORD PTR 8[edi],mm5
sub ecx,16
jc $L038slow_dec_partial_sse
movq QWORD PTR [ebx],mm0
movq QWORD PTR 8[ebx],mm4
lea ebx,DWORD PTR 16[ebx]
mov DWORD PTR 36[esp],ebx
lea esi,DWORD PTR 16[esi]
mov DWORD PTR 32[esp],esi
mov DWORD PTR 40[esp],ecx
jnz $L037slow_dec_loop_sse
emms
mov esp,DWORD PTR 28[esp]
popfd
pop edi
pop esi
pop ebx
pop ebp
ret
pushfd
ALIGN 16
$L038slow_dec_partial_sse:
movq QWORD PTR [eax],mm0
movq QWORD PTR 8[eax],mm4
emms
add ecx,16
mov edi,ebx
mov esi,eax
ALIGN 4
DD 2767451785
mov esp,DWORD PTR 28[esp]
popfd
pop edi
pop esi
pop ebx
pop ebp
ret
pushfd
ALIGN 16
$L036slow_dec_loop_x86:
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 12[esi]
lea edi,DWORD PTR 60[esp]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR 8[edi],ecx
mov DWORD PTR 12[edi],edx
mov edi,DWORD PTR 44[esp]
call __x86_AES_decrypt_compact
mov edi,DWORD PTR 48[esp]
mov esi,DWORD PTR 40[esp]
xor eax,DWORD PTR [edi]
xor ebx,DWORD PTR 4[edi]
xor ecx,DWORD PTR 8[edi]
xor edx,DWORD PTR 12[edi]
sub esi,16
jc $L039slow_dec_partial_x86
mov DWORD PTR 40[esp],esi
mov esi,DWORD PTR 36[esp]
mov DWORD PTR [esi],eax
mov DWORD PTR 4[esi],ebx
mov DWORD PTR 8[esi],ecx
mov DWORD PTR 12[esi],edx
lea esi,DWORD PTR 16[esi]
mov DWORD PTR 36[esp],esi
lea esi,DWORD PTR 60[esp]
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 12[esi]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR 8[edi],ecx
mov DWORD PTR 12[edi],edx
mov esi,DWORD PTR 32[esp]
lea esi,DWORD PTR 16[esi]
mov DWORD PTR 32[esp],esi
jnz $L036slow_dec_loop_x86
mov esp,DWORD PTR 28[esp]
popfd
pop edi
pop esi
pop ebx
pop ebp
ret
pushfd
ALIGN 16
$L039slow_dec_partial_x86:
lea esi,DWORD PTR 60[esp]
mov DWORD PTR [esi],eax
mov DWORD PTR 4[esi],ebx
mov DWORD PTR 8[esi],ecx
mov DWORD PTR 12[esi],edx
mov esi,DWORD PTR 32[esp]
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 12[esi]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR 8[edi],ecx
mov DWORD PTR 12[edi],edx
mov ecx,DWORD PTR 40[esp]
mov edi,DWORD PTR 36[esp]
lea esi,DWORD PTR 60[esp]
ALIGN 4
DD 2767451785
mov esp,DWORD PTR 28[esp]
popfd
pop edi
pop esi
pop ebx
pop ebp
ret
_AES_cbc_encrypt ENDP
ALIGN 16
__x86_AES_set_encrypt_key PROC PRIVATE
push ebp
push ebx
push esi
push edi
mov esi,DWORD PTR 24[esp]
mov edi,DWORD PTR 32[esp]
test esi,-1
jz $L040badpointer
test edi,-1
jz $L040badpointer
call $L041pic_point
$L041pic_point:
pop ebp
lea ebp,DWORD PTR ($LAES_Te-$L041pic_point)[ebp]
lea ebp,DWORD PTR 2176[ebp]
mov eax,DWORD PTR [ebp-128]
mov ebx,DWORD PTR [ebp-96]
mov ecx,DWORD PTR [ebp-64]
mov edx,DWORD PTR [ebp-32]
mov eax,DWORD PTR [ebp]
mov ebx,DWORD PTR 32[ebp]
mov ecx,DWORD PTR 64[ebp]
mov edx,DWORD PTR 96[ebp]
mov ecx,DWORD PTR 28[esp]
cmp ecx,128
je $L04210rounds
cmp ecx,192
je $L04312rounds
cmp ecx,256
je $L04414rounds
mov eax,-2
jmp $L045exit
$L04210rounds:
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 12[esi]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR 8[edi],ecx
mov DWORD PTR 12[edi],edx
xor ecx,ecx
jmp $L04610shortcut
ALIGN 4
$L04710loop:
mov eax,DWORD PTR [edi]
mov edx,DWORD PTR 12[edi]
$L04610shortcut:
movzx esi,dl
movzx ebx,BYTE PTR [esi*1+ebp-128]
movzx esi,dh
shl ebx,24
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
shr edx,16
movzx esi,dl
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
movzx esi,dh
shl ebx,8
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
shl ebx,16
xor eax,ebx
xor eax,DWORD PTR 896[ecx*4+ebp]
mov DWORD PTR 16[edi],eax
xor eax,DWORD PTR 4[edi]
mov DWORD PTR 20[edi],eax
xor eax,DWORD PTR 8[edi]
mov DWORD PTR 24[edi],eax
xor eax,DWORD PTR 12[edi]
mov DWORD PTR 28[edi],eax
inc ecx
add edi,16
cmp ecx,10
jl $L04710loop
mov DWORD PTR 80[edi],10
xor eax,eax
jmp $L045exit
$L04312rounds:
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 12[esi]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR 8[edi],ecx
mov DWORD PTR 12[edi],edx
mov ecx,DWORD PTR 16[esi]
mov edx,DWORD PTR 20[esi]
mov DWORD PTR 16[edi],ecx
mov DWORD PTR 20[edi],edx
xor ecx,ecx
jmp $L04812shortcut
ALIGN 4
$L04912loop:
mov eax,DWORD PTR [edi]
mov edx,DWORD PTR 20[edi]
$L04812shortcut:
movzx esi,dl
movzx ebx,BYTE PTR [esi*1+ebp-128]
movzx esi,dh
shl ebx,24
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
shr edx,16
movzx esi,dl
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
movzx esi,dh
shl ebx,8
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
shl ebx,16
xor eax,ebx
xor eax,DWORD PTR 896[ecx*4+ebp]
mov DWORD PTR 24[edi],eax
xor eax,DWORD PTR 4[edi]
mov DWORD PTR 28[edi],eax
xor eax,DWORD PTR 8[edi]
mov DWORD PTR 32[edi],eax
xor eax,DWORD PTR 12[edi]
mov DWORD PTR 36[edi],eax
cmp ecx,7
je $L05012break
inc ecx
xor eax,DWORD PTR 16[edi]
mov DWORD PTR 40[edi],eax
xor eax,DWORD PTR 20[edi]
mov DWORD PTR 44[edi],eax
add edi,24
jmp $L04912loop
$L05012break:
mov DWORD PTR 72[edi],12
xor eax,eax
jmp $L045exit
$L04414rounds:
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR 8[esi]
mov edx,DWORD PTR 12[esi]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR 8[edi],ecx
mov DWORD PTR 12[edi],edx
mov eax,DWORD PTR 16[esi]
mov ebx,DWORD PTR 20[esi]
mov ecx,DWORD PTR 24[esi]
mov edx,DWORD PTR 28[esi]
mov DWORD PTR 16[edi],eax
mov DWORD PTR 20[edi],ebx
mov DWORD PTR 24[edi],ecx
mov DWORD PTR 28[edi],edx
xor ecx,ecx
jmp $L05114shortcut
ALIGN 4
$L05214loop:
mov edx,DWORD PTR 28[edi]
$L05114shortcut:
mov eax,DWORD PTR [edi]
movzx esi,dl
movzx ebx,BYTE PTR [esi*1+ebp-128]
movzx esi,dh
shl ebx,24
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
shr edx,16
movzx esi,dl
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
movzx esi,dh
shl ebx,8
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
shl ebx,16
xor eax,ebx
xor eax,DWORD PTR 896[ecx*4+ebp]
mov DWORD PTR 32[edi],eax
xor eax,DWORD PTR 4[edi]
mov DWORD PTR 36[edi],eax
xor eax,DWORD PTR 8[edi]
mov DWORD PTR 40[edi],eax
xor eax,DWORD PTR 12[edi]
mov DWORD PTR 44[edi],eax
cmp ecx,6
je $L05314break
inc ecx
mov edx,eax
mov eax,DWORD PTR 16[edi]
movzx esi,dl
movzx ebx,BYTE PTR [esi*1+ebp-128]
movzx esi,dh
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
shr edx,16
shl ebx,8
movzx esi,dl
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
movzx esi,dh
shl ebx,16
xor eax,ebx
movzx ebx,BYTE PTR [esi*1+ebp-128]
shl ebx,24
xor eax,ebx
mov DWORD PTR 48[edi],eax
xor eax,DWORD PTR 20[edi]
mov DWORD PTR 52[edi],eax
xor eax,DWORD PTR 24[edi]
mov DWORD PTR 56[edi],eax
xor eax,DWORD PTR 28[edi]
mov DWORD PTR 60[edi],eax
add edi,32
jmp $L05214loop
$L05314break:
mov DWORD PTR 48[edi],14
xor eax,eax
jmp $L045exit
$L040badpointer:
mov eax,-1
$L045exit:
pop edi
pop esi
pop ebx
pop ebp
ret
__x86_AES_set_encrypt_key ENDP
ALIGN 16
_private_AES_set_encrypt_key PROC PUBLIC
$L_private_AES_set_encrypt_key_begin::
call __x86_AES_set_encrypt_key
ret
_private_AES_set_encrypt_key ENDP
ALIGN 16
_private_AES_set_decrypt_key PROC PUBLIC
$L_private_AES_set_decrypt_key_begin::
call __x86_AES_set_encrypt_key
cmp eax,0
je $L054proceed
ret
$L054proceed:
push ebp
push ebx
push esi
push edi
mov esi,DWORD PTR 28[esp]
mov ecx,DWORD PTR 240[esi]
lea ecx,DWORD PTR [ecx*4]
lea edi,DWORD PTR [ecx*4+esi]
ALIGN 4
$L055invert:
mov eax,DWORD PTR [esi]
mov ebx,DWORD PTR 4[esi]
mov ecx,DWORD PTR [edi]
mov edx,DWORD PTR 4[edi]
mov DWORD PTR [edi],eax
mov DWORD PTR 4[edi],ebx
mov DWORD PTR [esi],ecx
mov DWORD PTR 4[esi],edx
mov eax,DWORD PTR 8[esi]
mov ebx,DWORD PTR 12[esi]
mov ecx,DWORD PTR 8[edi]
mov edx,DWORD PTR 12[edi]
mov DWORD PTR 8[edi],eax
mov DWORD PTR 12[edi],ebx
mov DWORD PTR 8[esi],ecx
mov DWORD PTR 12[esi],edx
add esi,16
sub edi,16
cmp esi,edi
jne $L055invert
mov edi,DWORD PTR 28[esp]
mov esi,DWORD PTR 240[edi]
lea esi,DWORD PTR [esi*1+esi-2]
lea esi,DWORD PTR [esi*8+edi]
mov DWORD PTR 28[esp],esi
mov eax,DWORD PTR 16[edi]
ALIGN 4
$L056permute:
add edi,16
mov esi,eax
and esi,2155905152
mov ebp,esi
shr ebp,7
lea ebx,DWORD PTR [eax*1+eax]
sub esi,ebp
and ebx,4278124286
and esi,454761243
xor esi,ebx
mov ebx,esi
and esi,2155905152
mov ebp,esi
shr ebp,7
lea ecx,DWORD PTR [ebx*1+ebx]
sub esi,ebp
and ecx,4278124286
and esi,454761243
xor ebx,eax
xor esi,ecx
mov ecx,esi
and esi,2155905152
mov ebp,esi
shr ebp,7
lea edx,DWORD PTR [ecx*1+ecx]
xor ecx,eax
sub esi,ebp
and edx,4278124286
and esi,454761243
rol eax,8
xor edx,esi
mov ebp,DWORD PTR 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 PTR [edi],eax
mov esi,ebx
and esi,2155905152
mov ebp,esi
shr ebp,7
lea ecx,DWORD PTR [ebx*1+ebx]
sub esi,ebp
and ecx,4278124286
and esi,454761243
xor esi,ecx
mov ecx,esi
and esi,2155905152
mov ebp,esi
shr ebp,7
lea edx,DWORD PTR [ecx*1+ecx]
sub esi,ebp
and edx,4278124286
and esi,454761243
xor ecx,ebx
xor esi,edx
mov edx,esi
and esi,2155905152
mov ebp,esi
shr ebp,7
lea eax,DWORD PTR [edx*1+edx]
xor edx,ebx
sub esi,ebp
and eax,4278124286
and esi,454761243
rol ebx,8
xor eax,esi
mov ebp,DWORD PTR 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 PTR 4[edi],ebx
mov esi,ecx
and esi,2155905152
mov ebp,esi
shr ebp,7
lea edx,DWORD PTR [ecx*1+ecx]
sub esi,ebp
and edx,4278124286
and esi,454761243
xor esi,edx
mov edx,esi
and esi,2155905152
mov ebp,esi
shr ebp,7
lea eax,DWORD PTR [edx*1+edx]
sub esi,ebp
and eax,4278124286
and esi,454761243
xor edx,ecx
xor esi,eax
mov eax,esi
and esi,2155905152
mov ebp,esi
shr ebp,7
lea ebx,DWORD PTR [eax*1+eax]
xor eax,ecx
sub esi,ebp
and ebx,4278124286
and esi,454761243
rol ecx,8
xor ebx,esi
mov ebp,DWORD PTR 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 PTR 8[edi],ecx
mov esi,edx
and esi,2155905152
mov ebp,esi
shr ebp,7
lea eax,DWORD PTR [edx*1+edx]
sub esi,ebp
and eax,4278124286
and esi,454761243
xor esi,eax
mov eax,esi
and esi,2155905152
mov ebp,esi
shr ebp,7
lea ebx,DWORD PTR [eax*1+eax]
sub esi,ebp
and ebx,4278124286
and esi,454761243
xor eax,edx
xor esi,ebx
mov ebx,esi
and esi,2155905152
mov ebp,esi
shr ebp,7
lea ecx,DWORD PTR [ebx*1+ebx]
xor ebx,edx
sub esi,ebp
and ecx,4278124286
and esi,454761243
rol edx,8
xor ecx,esi
mov ebp,DWORD PTR 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 PTR 12[edi],edx
cmp edi,DWORD PTR 28[esp]
jb $L056permute
xor eax,eax
pop edi
pop esi
pop ebx
pop ebp
ret
_private_AES_set_decrypt_key ENDP
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
.text$ ENDS
.bss SEGMENT 'BSS'
COMM _OPENSSL_ia32cap_P:QWORD
.bss ENDS
END