blob: a9a595653f08275d9b7788885031c2960d123e67 [file] [log] [blame]
%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
;extern _OPENSSL_ia32cap_P
global _aesni_encrypt
align 16
_aesni_encrypt:
L$_aesni_encrypt_begin:
mov eax,DWORD [4+esp]
mov edx,DWORD [12+esp]
movups xmm2,[eax]
mov ecx,DWORD [240+edx]
mov eax,DWORD [8+esp]
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$000enc1_loop_1:
db 102,15,56,220,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$000enc1_loop_1
db 102,15,56,221,209
pxor xmm0,xmm0
pxor xmm1,xmm1
movups [eax],xmm2
pxor xmm2,xmm2
ret
global _aesni_decrypt
align 16
_aesni_decrypt:
L$_aesni_decrypt_begin:
mov eax,DWORD [4+esp]
mov edx,DWORD [12+esp]
movups xmm2,[eax]
mov ecx,DWORD [240+edx]
mov eax,DWORD [8+esp]
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$001dec1_loop_2:
db 102,15,56,222,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$001dec1_loop_2
db 102,15,56,223,209
pxor xmm0,xmm0
pxor xmm1,xmm1
movups [eax],xmm2
pxor xmm2,xmm2
ret
align 16
__aesni_encrypt2:
movups xmm0,[edx]
shl ecx,4
movups xmm1,[16+edx]
xorps xmm2,xmm0
pxor xmm3,xmm0
movups xmm0,[32+edx]
lea edx,[32+ecx*1+edx]
neg ecx
add ecx,16
L$002enc2_loop:
db 102,15,56,220,209
db 102,15,56,220,217
movups xmm1,[ecx*1+edx]
add ecx,32
db 102,15,56,220,208
db 102,15,56,220,216
movups xmm0,[ecx*1+edx-16]
jnz NEAR L$002enc2_loop
db 102,15,56,220,209
db 102,15,56,220,217
db 102,15,56,221,208
db 102,15,56,221,216
ret
align 16
__aesni_decrypt2:
movups xmm0,[edx]
shl ecx,4
movups xmm1,[16+edx]
xorps xmm2,xmm0
pxor xmm3,xmm0
movups xmm0,[32+edx]
lea edx,[32+ecx*1+edx]
neg ecx
add ecx,16
L$003dec2_loop:
db 102,15,56,222,209
db 102,15,56,222,217
movups xmm1,[ecx*1+edx]
add ecx,32
db 102,15,56,222,208
db 102,15,56,222,216
movups xmm0,[ecx*1+edx-16]
jnz NEAR L$003dec2_loop
db 102,15,56,222,209
db 102,15,56,222,217
db 102,15,56,223,208
db 102,15,56,223,216
ret
align 16
__aesni_encrypt3:
movups xmm0,[edx]
shl ecx,4
movups xmm1,[16+edx]
xorps xmm2,xmm0
pxor xmm3,xmm0
pxor xmm4,xmm0
movups xmm0,[32+edx]
lea edx,[32+ecx*1+edx]
neg ecx
add ecx,16
L$004enc3_loop:
db 102,15,56,220,209
db 102,15,56,220,217
db 102,15,56,220,225
movups xmm1,[ecx*1+edx]
add ecx,32
db 102,15,56,220,208
db 102,15,56,220,216
db 102,15,56,220,224
movups xmm0,[ecx*1+edx-16]
jnz NEAR L$004enc3_loop
db 102,15,56,220,209
db 102,15,56,220,217
db 102,15,56,220,225
db 102,15,56,221,208
db 102,15,56,221,216
db 102,15,56,221,224
ret
align 16
__aesni_decrypt3:
movups xmm0,[edx]
shl ecx,4
movups xmm1,[16+edx]
xorps xmm2,xmm0
pxor xmm3,xmm0
pxor xmm4,xmm0
movups xmm0,[32+edx]
lea edx,[32+ecx*1+edx]
neg ecx
add ecx,16
L$005dec3_loop:
db 102,15,56,222,209
db 102,15,56,222,217
db 102,15,56,222,225
movups xmm1,[ecx*1+edx]
add ecx,32
db 102,15,56,222,208
db 102,15,56,222,216
db 102,15,56,222,224
movups xmm0,[ecx*1+edx-16]
jnz NEAR L$005dec3_loop
db 102,15,56,222,209
db 102,15,56,222,217
db 102,15,56,222,225
db 102,15,56,223,208
db 102,15,56,223,216
db 102,15,56,223,224
ret
align 16
__aesni_encrypt4:
movups xmm0,[edx]
movups xmm1,[16+edx]
shl ecx,4
xorps xmm2,xmm0
pxor xmm3,xmm0
pxor xmm4,xmm0
pxor xmm5,xmm0
movups xmm0,[32+edx]
lea edx,[32+ecx*1+edx]
neg ecx
db 15,31,64,0
add ecx,16
L$006enc4_loop:
db 102,15,56,220,209
db 102,15,56,220,217
db 102,15,56,220,225
db 102,15,56,220,233
movups xmm1,[ecx*1+edx]
add ecx,32
db 102,15,56,220,208
db 102,15,56,220,216
db 102,15,56,220,224
db 102,15,56,220,232
movups xmm0,[ecx*1+edx-16]
jnz NEAR L$006enc4_loop
db 102,15,56,220,209
db 102,15,56,220,217
db 102,15,56,220,225
db 102,15,56,220,233
db 102,15,56,221,208
db 102,15,56,221,216
db 102,15,56,221,224
db 102,15,56,221,232
ret
align 16
__aesni_decrypt4:
movups xmm0,[edx]
movups xmm1,[16+edx]
shl ecx,4
xorps xmm2,xmm0
pxor xmm3,xmm0
pxor xmm4,xmm0
pxor xmm5,xmm0
movups xmm0,[32+edx]
lea edx,[32+ecx*1+edx]
neg ecx
db 15,31,64,0
add ecx,16
L$007dec4_loop:
db 102,15,56,222,209
db 102,15,56,222,217
db 102,15,56,222,225
db 102,15,56,222,233
movups xmm1,[ecx*1+edx]
add ecx,32
db 102,15,56,222,208
db 102,15,56,222,216
db 102,15,56,222,224
db 102,15,56,222,232
movups xmm0,[ecx*1+edx-16]
jnz NEAR L$007dec4_loop
db 102,15,56,222,209
db 102,15,56,222,217
db 102,15,56,222,225
db 102,15,56,222,233
db 102,15,56,223,208
db 102,15,56,223,216
db 102,15,56,223,224
db 102,15,56,223,232
ret
align 16
__aesni_encrypt6:
movups xmm0,[edx]
shl ecx,4
movups xmm1,[16+edx]
xorps xmm2,xmm0
pxor xmm3,xmm0
pxor xmm4,xmm0
db 102,15,56,220,209
pxor xmm5,xmm0
pxor xmm6,xmm0
db 102,15,56,220,217
lea edx,[32+ecx*1+edx]
neg ecx
db 102,15,56,220,225
pxor xmm7,xmm0
movups xmm0,[ecx*1+edx]
add ecx,16
jmp NEAR L$008_aesni_encrypt6_inner
align 16
L$009enc6_loop:
db 102,15,56,220,209
db 102,15,56,220,217
db 102,15,56,220,225
L$008_aesni_encrypt6_inner:
db 102,15,56,220,233
db 102,15,56,220,241
db 102,15,56,220,249
L$_aesni_encrypt6_enter:
movups xmm1,[ecx*1+edx]
add ecx,32
db 102,15,56,220,208
db 102,15,56,220,216
db 102,15,56,220,224
db 102,15,56,220,232
db 102,15,56,220,240
db 102,15,56,220,248
movups xmm0,[ecx*1+edx-16]
jnz NEAR L$009enc6_loop
db 102,15,56,220,209
db 102,15,56,220,217
db 102,15,56,220,225
db 102,15,56,220,233
db 102,15,56,220,241
db 102,15,56,220,249
db 102,15,56,221,208
db 102,15,56,221,216
db 102,15,56,221,224
db 102,15,56,221,232
db 102,15,56,221,240
db 102,15,56,221,248
ret
align 16
__aesni_decrypt6:
movups xmm0,[edx]
shl ecx,4
movups xmm1,[16+edx]
xorps xmm2,xmm0
pxor xmm3,xmm0
pxor xmm4,xmm0
db 102,15,56,222,209
pxor xmm5,xmm0
pxor xmm6,xmm0
db 102,15,56,222,217
lea edx,[32+ecx*1+edx]
neg ecx
db 102,15,56,222,225
pxor xmm7,xmm0
movups xmm0,[ecx*1+edx]
add ecx,16
jmp NEAR L$010_aesni_decrypt6_inner
align 16
L$011dec6_loop:
db 102,15,56,222,209
db 102,15,56,222,217
db 102,15,56,222,225
L$010_aesni_decrypt6_inner:
db 102,15,56,222,233
db 102,15,56,222,241
db 102,15,56,222,249
L$_aesni_decrypt6_enter:
movups xmm1,[ecx*1+edx]
add ecx,32
db 102,15,56,222,208
db 102,15,56,222,216
db 102,15,56,222,224
db 102,15,56,222,232
db 102,15,56,222,240
db 102,15,56,222,248
movups xmm0,[ecx*1+edx-16]
jnz NEAR L$011dec6_loop
db 102,15,56,222,209
db 102,15,56,222,217
db 102,15,56,222,225
db 102,15,56,222,233
db 102,15,56,222,241
db 102,15,56,222,249
db 102,15,56,223,208
db 102,15,56,223,216
db 102,15,56,223,224
db 102,15,56,223,232
db 102,15,56,223,240
db 102,15,56,223,248
ret
global _aesni_ecb_encrypt
align 16
_aesni_ecb_encrypt:
L$_aesni_ecb_encrypt_begin:
push ebp
push ebx
push esi
push edi
mov esi,DWORD [20+esp]
mov edi,DWORD [24+esp]
mov eax,DWORD [28+esp]
mov edx,DWORD [32+esp]
mov ebx,DWORD [36+esp]
and eax,-16
jz NEAR L$012ecb_ret
mov ecx,DWORD [240+edx]
test ebx,ebx
jz NEAR L$013ecb_decrypt
mov ebp,edx
mov ebx,ecx
cmp eax,96
jb NEAR L$014ecb_enc_tail
movdqu xmm2,[esi]
movdqu xmm3,[16+esi]
movdqu xmm4,[32+esi]
movdqu xmm5,[48+esi]
movdqu xmm6,[64+esi]
movdqu xmm7,[80+esi]
lea esi,[96+esi]
sub eax,96
jmp NEAR L$015ecb_enc_loop6_enter
align 16
L$016ecb_enc_loop6:
movups [edi],xmm2
movdqu xmm2,[esi]
movups [16+edi],xmm3
movdqu xmm3,[16+esi]
movups [32+edi],xmm4
movdqu xmm4,[32+esi]
movups [48+edi],xmm5
movdqu xmm5,[48+esi]
movups [64+edi],xmm6
movdqu xmm6,[64+esi]
movups [80+edi],xmm7
lea edi,[96+edi]
movdqu xmm7,[80+esi]
lea esi,[96+esi]
L$015ecb_enc_loop6_enter:
call __aesni_encrypt6
mov edx,ebp
mov ecx,ebx
sub eax,96
jnc NEAR L$016ecb_enc_loop6
movups [edi],xmm2
movups [16+edi],xmm3
movups [32+edi],xmm4
movups [48+edi],xmm5
movups [64+edi],xmm6
movups [80+edi],xmm7
lea edi,[96+edi]
add eax,96
jz NEAR L$012ecb_ret
L$014ecb_enc_tail:
movups xmm2,[esi]
cmp eax,32
jb NEAR L$017ecb_enc_one
movups xmm3,[16+esi]
je NEAR L$018ecb_enc_two
movups xmm4,[32+esi]
cmp eax,64
jb NEAR L$019ecb_enc_three
movups xmm5,[48+esi]
je NEAR L$020ecb_enc_four
movups xmm6,[64+esi]
xorps xmm7,xmm7
call __aesni_encrypt6
movups [edi],xmm2
movups [16+edi],xmm3
movups [32+edi],xmm4
movups [48+edi],xmm5
movups [64+edi],xmm6
jmp NEAR L$012ecb_ret
align 16
L$017ecb_enc_one:
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$021enc1_loop_3:
db 102,15,56,220,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$021enc1_loop_3
db 102,15,56,221,209
movups [edi],xmm2
jmp NEAR L$012ecb_ret
align 16
L$018ecb_enc_two:
call __aesni_encrypt2
movups [edi],xmm2
movups [16+edi],xmm3
jmp NEAR L$012ecb_ret
align 16
L$019ecb_enc_three:
call __aesni_encrypt3
movups [edi],xmm2
movups [16+edi],xmm3
movups [32+edi],xmm4
jmp NEAR L$012ecb_ret
align 16
L$020ecb_enc_four:
call __aesni_encrypt4
movups [edi],xmm2
movups [16+edi],xmm3
movups [32+edi],xmm4
movups [48+edi],xmm5
jmp NEAR L$012ecb_ret
align 16
L$013ecb_decrypt:
mov ebp,edx
mov ebx,ecx
cmp eax,96
jb NEAR L$022ecb_dec_tail
movdqu xmm2,[esi]
movdqu xmm3,[16+esi]
movdqu xmm4,[32+esi]
movdqu xmm5,[48+esi]
movdqu xmm6,[64+esi]
movdqu xmm7,[80+esi]
lea esi,[96+esi]
sub eax,96
jmp NEAR L$023ecb_dec_loop6_enter
align 16
L$024ecb_dec_loop6:
movups [edi],xmm2
movdqu xmm2,[esi]
movups [16+edi],xmm3
movdqu xmm3,[16+esi]
movups [32+edi],xmm4
movdqu xmm4,[32+esi]
movups [48+edi],xmm5
movdqu xmm5,[48+esi]
movups [64+edi],xmm6
movdqu xmm6,[64+esi]
movups [80+edi],xmm7
lea edi,[96+edi]
movdqu xmm7,[80+esi]
lea esi,[96+esi]
L$023ecb_dec_loop6_enter:
call __aesni_decrypt6
mov edx,ebp
mov ecx,ebx
sub eax,96
jnc NEAR L$024ecb_dec_loop6
movups [edi],xmm2
movups [16+edi],xmm3
movups [32+edi],xmm4
movups [48+edi],xmm5
movups [64+edi],xmm6
movups [80+edi],xmm7
lea edi,[96+edi]
add eax,96
jz NEAR L$012ecb_ret
L$022ecb_dec_tail:
movups xmm2,[esi]
cmp eax,32
jb NEAR L$025ecb_dec_one
movups xmm3,[16+esi]
je NEAR L$026ecb_dec_two
movups xmm4,[32+esi]
cmp eax,64
jb NEAR L$027ecb_dec_three
movups xmm5,[48+esi]
je NEAR L$028ecb_dec_four
movups xmm6,[64+esi]
xorps xmm7,xmm7
call __aesni_decrypt6
movups [edi],xmm2
movups [16+edi],xmm3
movups [32+edi],xmm4
movups [48+edi],xmm5
movups [64+edi],xmm6
jmp NEAR L$012ecb_ret
align 16
L$025ecb_dec_one:
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$029dec1_loop_4:
db 102,15,56,222,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$029dec1_loop_4
db 102,15,56,223,209
movups [edi],xmm2
jmp NEAR L$012ecb_ret
align 16
L$026ecb_dec_two:
call __aesni_decrypt2
movups [edi],xmm2
movups [16+edi],xmm3
jmp NEAR L$012ecb_ret
align 16
L$027ecb_dec_three:
call __aesni_decrypt3
movups [edi],xmm2
movups [16+edi],xmm3
movups [32+edi],xmm4
jmp NEAR L$012ecb_ret
align 16
L$028ecb_dec_four:
call __aesni_decrypt4
movups [edi],xmm2
movups [16+edi],xmm3
movups [32+edi],xmm4
movups [48+edi],xmm5
L$012ecb_ret:
pxor xmm0,xmm0
pxor xmm1,xmm1
pxor xmm2,xmm2
pxor xmm3,xmm3
pxor xmm4,xmm4
pxor xmm5,xmm5
pxor xmm6,xmm6
pxor xmm7,xmm7
pop edi
pop esi
pop ebx
pop ebp
ret
global _aesni_ccm64_encrypt_blocks
align 16
_aesni_ccm64_encrypt_blocks:
L$_aesni_ccm64_encrypt_blocks_begin:
push ebp
push ebx
push esi
push edi
mov esi,DWORD [20+esp]
mov edi,DWORD [24+esp]
mov eax,DWORD [28+esp]
mov edx,DWORD [32+esp]
mov ebx,DWORD [36+esp]
mov ecx,DWORD [40+esp]
mov ebp,esp
sub esp,60
and esp,-16
mov DWORD [48+esp],ebp
movdqu xmm7,[ebx]
movdqu xmm3,[ecx]
mov ecx,DWORD [240+edx]
mov DWORD [esp],202182159
mov DWORD [4+esp],134810123
mov DWORD [8+esp],67438087
mov DWORD [12+esp],66051
mov ebx,1
xor ebp,ebp
mov DWORD [16+esp],ebx
mov DWORD [20+esp],ebp
mov DWORD [24+esp],ebp
mov DWORD [28+esp],ebp
shl ecx,4
mov ebx,16
lea ebp,[edx]
movdqa xmm5,[esp]
movdqa xmm2,xmm7
lea edx,[32+ecx*1+edx]
sub ebx,ecx
db 102,15,56,0,253
L$030ccm64_enc_outer:
movups xmm0,[ebp]
mov ecx,ebx
movups xmm6,[esi]
xorps xmm2,xmm0
movups xmm1,[16+ebp]
xorps xmm0,xmm6
xorps xmm3,xmm0
movups xmm0,[32+ebp]
L$031ccm64_enc2_loop:
db 102,15,56,220,209
db 102,15,56,220,217
movups xmm1,[ecx*1+edx]
add ecx,32
db 102,15,56,220,208
db 102,15,56,220,216
movups xmm0,[ecx*1+edx-16]
jnz NEAR L$031ccm64_enc2_loop
db 102,15,56,220,209
db 102,15,56,220,217
paddq xmm7,[16+esp]
dec eax
db 102,15,56,221,208
db 102,15,56,221,216
lea esi,[16+esi]
xorps xmm6,xmm2
movdqa xmm2,xmm7
movups [edi],xmm6
db 102,15,56,0,213
lea edi,[16+edi]
jnz NEAR L$030ccm64_enc_outer
mov esp,DWORD [48+esp]
mov edi,DWORD [40+esp]
movups [edi],xmm3
pxor xmm0,xmm0
pxor xmm1,xmm1
pxor xmm2,xmm2
pxor xmm3,xmm3
pxor xmm4,xmm4
pxor xmm5,xmm5
pxor xmm6,xmm6
pxor xmm7,xmm7
pop edi
pop esi
pop ebx
pop ebp
ret
global _aesni_ccm64_decrypt_blocks
align 16
_aesni_ccm64_decrypt_blocks:
L$_aesni_ccm64_decrypt_blocks_begin:
push ebp
push ebx
push esi
push edi
mov esi,DWORD [20+esp]
mov edi,DWORD [24+esp]
mov eax,DWORD [28+esp]
mov edx,DWORD [32+esp]
mov ebx,DWORD [36+esp]
mov ecx,DWORD [40+esp]
mov ebp,esp
sub esp,60
and esp,-16
mov DWORD [48+esp],ebp
movdqu xmm7,[ebx]
movdqu xmm3,[ecx]
mov ecx,DWORD [240+edx]
mov DWORD [esp],202182159
mov DWORD [4+esp],134810123
mov DWORD [8+esp],67438087
mov DWORD [12+esp],66051
mov ebx,1
xor ebp,ebp
mov DWORD [16+esp],ebx
mov DWORD [20+esp],ebp
mov DWORD [24+esp],ebp
mov DWORD [28+esp],ebp
movdqa xmm5,[esp]
movdqa xmm2,xmm7
mov ebp,edx
mov ebx,ecx
db 102,15,56,0,253
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$032enc1_loop_5:
db 102,15,56,220,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$032enc1_loop_5
db 102,15,56,221,209
shl ebx,4
mov ecx,16
movups xmm6,[esi]
paddq xmm7,[16+esp]
lea esi,[16+esi]
sub ecx,ebx
lea edx,[32+ebx*1+ebp]
mov ebx,ecx
jmp NEAR L$033ccm64_dec_outer
align 16
L$033ccm64_dec_outer:
xorps xmm6,xmm2
movdqa xmm2,xmm7
movups [edi],xmm6
lea edi,[16+edi]
db 102,15,56,0,213
sub eax,1
jz NEAR L$034ccm64_dec_break
movups xmm0,[ebp]
mov ecx,ebx
movups xmm1,[16+ebp]
xorps xmm6,xmm0
xorps xmm2,xmm0
xorps xmm3,xmm6
movups xmm0,[32+ebp]
L$035ccm64_dec2_loop:
db 102,15,56,220,209
db 102,15,56,220,217
movups xmm1,[ecx*1+edx]
add ecx,32
db 102,15,56,220,208
db 102,15,56,220,216
movups xmm0,[ecx*1+edx-16]
jnz NEAR L$035ccm64_dec2_loop
movups xmm6,[esi]
paddq xmm7,[16+esp]
db 102,15,56,220,209
db 102,15,56,220,217
db 102,15,56,221,208
db 102,15,56,221,216
lea esi,[16+esi]
jmp NEAR L$033ccm64_dec_outer
align 16
L$034ccm64_dec_break:
mov ecx,DWORD [240+ebp]
mov edx,ebp
movups xmm0,[edx]
movups xmm1,[16+edx]
xorps xmm6,xmm0
lea edx,[32+edx]
xorps xmm3,xmm6
L$036enc1_loop_6:
db 102,15,56,220,217
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$036enc1_loop_6
db 102,15,56,221,217
mov esp,DWORD [48+esp]
mov edi,DWORD [40+esp]
movups [edi],xmm3
pxor xmm0,xmm0
pxor xmm1,xmm1
pxor xmm2,xmm2
pxor xmm3,xmm3
pxor xmm4,xmm4
pxor xmm5,xmm5
pxor xmm6,xmm6
pxor xmm7,xmm7
pop edi
pop esi
pop ebx
pop ebp
ret
global _aesni_ctr32_encrypt_blocks
align 16
_aesni_ctr32_encrypt_blocks:
L$_aesni_ctr32_encrypt_blocks_begin:
push ebp
push ebx
push esi
push edi
mov esi,DWORD [20+esp]
mov edi,DWORD [24+esp]
mov eax,DWORD [28+esp]
mov edx,DWORD [32+esp]
mov ebx,DWORD [36+esp]
mov ebp,esp
sub esp,88
and esp,-16
mov DWORD [80+esp],ebp
cmp eax,1
je NEAR L$037ctr32_one_shortcut
movdqu xmm7,[ebx]
mov DWORD [esp],202182159
mov DWORD [4+esp],134810123
mov DWORD [8+esp],67438087
mov DWORD [12+esp],66051
mov ecx,6
xor ebp,ebp
mov DWORD [16+esp],ecx
mov DWORD [20+esp],ecx
mov DWORD [24+esp],ecx
mov DWORD [28+esp],ebp
db 102,15,58,22,251,3
db 102,15,58,34,253,3
mov ecx,DWORD [240+edx]
bswap ebx
pxor xmm0,xmm0
pxor xmm1,xmm1
movdqa xmm2,[esp]
db 102,15,58,34,195,0
lea ebp,[3+ebx]
db 102,15,58,34,205,0
inc ebx
db 102,15,58,34,195,1
inc ebp
db 102,15,58,34,205,1
inc ebx
db 102,15,58,34,195,2
inc ebp
db 102,15,58,34,205,2
movdqa [48+esp],xmm0
db 102,15,56,0,194
movdqu xmm6,[edx]
movdqa [64+esp],xmm1
db 102,15,56,0,202
pshufd xmm2,xmm0,192
pshufd xmm3,xmm0,128
cmp eax,6
jb NEAR L$038ctr32_tail
pxor xmm7,xmm6
shl ecx,4
mov ebx,16
movdqa [32+esp],xmm7
mov ebp,edx
sub ebx,ecx
lea edx,[32+ecx*1+edx]
sub eax,6
jmp NEAR L$039ctr32_loop6
align 16
L$039ctr32_loop6:
pshufd xmm4,xmm0,64
movdqa xmm0,[32+esp]
pshufd xmm5,xmm1,192
pxor xmm2,xmm0
pshufd xmm6,xmm1,128
pxor xmm3,xmm0
pshufd xmm7,xmm1,64
movups xmm1,[16+ebp]
pxor xmm4,xmm0
pxor xmm5,xmm0
db 102,15,56,220,209
pxor xmm6,xmm0
pxor xmm7,xmm0
db 102,15,56,220,217
movups xmm0,[32+ebp]
mov ecx,ebx
db 102,15,56,220,225
db 102,15,56,220,233
db 102,15,56,220,241
db 102,15,56,220,249
call L$_aesni_encrypt6_enter
movups xmm1,[esi]
movups xmm0,[16+esi]
xorps xmm2,xmm1
movups xmm1,[32+esi]
xorps xmm3,xmm0
movups [edi],xmm2
movdqa xmm0,[16+esp]
xorps xmm4,xmm1
movdqa xmm1,[64+esp]
movups [16+edi],xmm3
movups [32+edi],xmm4
paddd xmm1,xmm0
paddd xmm0,[48+esp]
movdqa xmm2,[esp]
movups xmm3,[48+esi]
movups xmm4,[64+esi]
xorps xmm5,xmm3
movups xmm3,[80+esi]
lea esi,[96+esi]
movdqa [48+esp],xmm0
db 102,15,56,0,194
xorps xmm6,xmm4
movups [48+edi],xmm5
xorps xmm7,xmm3
movdqa [64+esp],xmm1
db 102,15,56,0,202
movups [64+edi],xmm6
pshufd xmm2,xmm0,192
movups [80+edi],xmm7
lea edi,[96+edi]
pshufd xmm3,xmm0,128
sub eax,6
jnc NEAR L$039ctr32_loop6
add eax,6
jz NEAR L$040ctr32_ret
movdqu xmm7,[ebp]
mov edx,ebp
pxor xmm7,[32+esp]
mov ecx,DWORD [240+ebp]
L$038ctr32_tail:
por xmm2,xmm7
cmp eax,2
jb NEAR L$041ctr32_one
pshufd xmm4,xmm0,64
por xmm3,xmm7
je NEAR L$042ctr32_two
pshufd xmm5,xmm1,192
por xmm4,xmm7
cmp eax,4
jb NEAR L$043ctr32_three
pshufd xmm6,xmm1,128
por xmm5,xmm7
je NEAR L$044ctr32_four
por xmm6,xmm7
call __aesni_encrypt6
movups xmm1,[esi]
movups xmm0,[16+esi]
xorps xmm2,xmm1
movups xmm1,[32+esi]
xorps xmm3,xmm0
movups xmm0,[48+esi]
xorps xmm4,xmm1
movups xmm1,[64+esi]
xorps xmm5,xmm0
movups [edi],xmm2
xorps xmm6,xmm1
movups [16+edi],xmm3
movups [32+edi],xmm4
movups [48+edi],xmm5
movups [64+edi],xmm6
jmp NEAR L$040ctr32_ret
align 16
L$037ctr32_one_shortcut:
movups xmm2,[ebx]
mov ecx,DWORD [240+edx]
L$041ctr32_one:
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$045enc1_loop_7:
db 102,15,56,220,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$045enc1_loop_7
db 102,15,56,221,209
movups xmm6,[esi]
xorps xmm6,xmm2
movups [edi],xmm6
jmp NEAR L$040ctr32_ret
align 16
L$042ctr32_two:
call __aesni_encrypt2
movups xmm5,[esi]
movups xmm6,[16+esi]
xorps xmm2,xmm5
xorps xmm3,xmm6
movups [edi],xmm2
movups [16+edi],xmm3
jmp NEAR L$040ctr32_ret
align 16
L$043ctr32_three:
call __aesni_encrypt3
movups xmm5,[esi]
movups xmm6,[16+esi]
xorps xmm2,xmm5
movups xmm7,[32+esi]
xorps xmm3,xmm6
movups [edi],xmm2
xorps xmm4,xmm7
movups [16+edi],xmm3
movups [32+edi],xmm4
jmp NEAR L$040ctr32_ret
align 16
L$044ctr32_four:
call __aesni_encrypt4
movups xmm6,[esi]
movups xmm7,[16+esi]
movups xmm1,[32+esi]
xorps xmm2,xmm6
movups xmm0,[48+esi]
xorps xmm3,xmm7
movups [edi],xmm2
xorps xmm4,xmm1
movups [16+edi],xmm3
xorps xmm5,xmm0
movups [32+edi],xmm4
movups [48+edi],xmm5
L$040ctr32_ret:
pxor xmm0,xmm0
pxor xmm1,xmm1
pxor xmm2,xmm2
pxor xmm3,xmm3
pxor xmm4,xmm4
movdqa [32+esp],xmm0
pxor xmm5,xmm5
movdqa [48+esp],xmm0
pxor xmm6,xmm6
movdqa [64+esp],xmm0
pxor xmm7,xmm7
mov esp,DWORD [80+esp]
pop edi
pop esi
pop ebx
pop ebp
ret
global _aesni_xts_encrypt
align 16
_aesni_xts_encrypt:
L$_aesni_xts_encrypt_begin:
push ebp
push ebx
push esi
push edi
mov edx,DWORD [36+esp]
mov esi,DWORD [40+esp]
mov ecx,DWORD [240+edx]
movups xmm2,[esi]
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$046enc1_loop_8:
db 102,15,56,220,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$046enc1_loop_8
db 102,15,56,221,209
mov esi,DWORD [20+esp]
mov edi,DWORD [24+esp]
mov eax,DWORD [28+esp]
mov edx,DWORD [32+esp]
mov ebp,esp
sub esp,120
mov ecx,DWORD [240+edx]
and esp,-16
mov DWORD [96+esp],135
mov DWORD [100+esp],0
mov DWORD [104+esp],1
mov DWORD [108+esp],0
mov DWORD [112+esp],eax
mov DWORD [116+esp],ebp
movdqa xmm1,xmm2
pxor xmm0,xmm0
movdqa xmm3,[96+esp]
pcmpgtd xmm0,xmm1
and eax,-16
mov ebp,edx
mov ebx,ecx
sub eax,96
jc NEAR L$047xts_enc_short
shl ecx,4
mov ebx,16
sub ebx,ecx
lea edx,[32+ecx*1+edx]
jmp NEAR L$048xts_enc_loop6
align 16
L$048xts_enc_loop6:
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa [esp],xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa [16+esp],xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa [32+esp],xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa [48+esp],xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
pshufd xmm7,xmm0,19
movdqa [64+esp],xmm1
paddq xmm1,xmm1
movups xmm0,[ebp]
pand xmm7,xmm3
movups xmm2,[esi]
pxor xmm7,xmm1
mov ecx,ebx
movdqu xmm3,[16+esi]
xorps xmm2,xmm0
movdqu xmm4,[32+esi]
pxor xmm3,xmm0
movdqu xmm5,[48+esi]
pxor xmm4,xmm0
movdqu xmm6,[64+esi]
pxor xmm5,xmm0
movdqu xmm1,[80+esi]
pxor xmm6,xmm0
lea esi,[96+esi]
pxor xmm2,[esp]
movdqa [80+esp],xmm7
pxor xmm7,xmm1
movups xmm1,[16+ebp]
pxor xmm3,[16+esp]
pxor xmm4,[32+esp]
db 102,15,56,220,209
pxor xmm5,[48+esp]
pxor xmm6,[64+esp]
db 102,15,56,220,217
pxor xmm7,xmm0
movups xmm0,[32+ebp]
db 102,15,56,220,225
db 102,15,56,220,233
db 102,15,56,220,241
db 102,15,56,220,249
call L$_aesni_encrypt6_enter
movdqa xmm1,[80+esp]
pxor xmm0,xmm0
xorps xmm2,[esp]
pcmpgtd xmm0,xmm1
xorps xmm3,[16+esp]
movups [edi],xmm2
xorps xmm4,[32+esp]
movups [16+edi],xmm3
xorps xmm5,[48+esp]
movups [32+edi],xmm4
xorps xmm6,[64+esp]
movups [48+edi],xmm5
xorps xmm7,xmm1
movups [64+edi],xmm6
pshufd xmm2,xmm0,19
movups [80+edi],xmm7
lea edi,[96+edi]
movdqa xmm3,[96+esp]
pxor xmm0,xmm0
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
sub eax,96
jnc NEAR L$048xts_enc_loop6
mov ecx,DWORD [240+ebp]
mov edx,ebp
mov ebx,ecx
L$047xts_enc_short:
add eax,96
jz NEAR L$049xts_enc_done6x
movdqa xmm5,xmm1
cmp eax,32
jb NEAR L$050xts_enc_one
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
je NEAR L$051xts_enc_two
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa xmm6,xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
cmp eax,64
jb NEAR L$052xts_enc_three
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa xmm7,xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
movdqa [esp],xmm5
movdqa [16+esp],xmm6
je NEAR L$053xts_enc_four
movdqa [32+esp],xmm7
pshufd xmm7,xmm0,19
movdqa [48+esp],xmm1
paddq xmm1,xmm1
pand xmm7,xmm3
pxor xmm7,xmm1
movdqu xmm2,[esi]
movdqu xmm3,[16+esi]
movdqu xmm4,[32+esi]
pxor xmm2,[esp]
movdqu xmm5,[48+esi]
pxor xmm3,[16+esp]
movdqu xmm6,[64+esi]
pxor xmm4,[32+esp]
lea esi,[80+esi]
pxor xmm5,[48+esp]
movdqa [64+esp],xmm7
pxor xmm6,xmm7
call __aesni_encrypt6
movaps xmm1,[64+esp]
xorps xmm2,[esp]
xorps xmm3,[16+esp]
xorps xmm4,[32+esp]
movups [edi],xmm2
xorps xmm5,[48+esp]
movups [16+edi],xmm3
xorps xmm6,xmm1
movups [32+edi],xmm4
movups [48+edi],xmm5
movups [64+edi],xmm6
lea edi,[80+edi]
jmp NEAR L$054xts_enc_done
align 16
L$050xts_enc_one:
movups xmm2,[esi]
lea esi,[16+esi]
xorps xmm2,xmm5
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$055enc1_loop_9:
db 102,15,56,220,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$055enc1_loop_9
db 102,15,56,221,209
xorps xmm2,xmm5
movups [edi],xmm2
lea edi,[16+edi]
movdqa xmm1,xmm5
jmp NEAR L$054xts_enc_done
align 16
L$051xts_enc_two:
movaps xmm6,xmm1
movups xmm2,[esi]
movups xmm3,[16+esi]
lea esi,[32+esi]
xorps xmm2,xmm5
xorps xmm3,xmm6
call __aesni_encrypt2
xorps xmm2,xmm5
xorps xmm3,xmm6
movups [edi],xmm2
movups [16+edi],xmm3
lea edi,[32+edi]
movdqa xmm1,xmm6
jmp NEAR L$054xts_enc_done
align 16
L$052xts_enc_three:
movaps xmm7,xmm1
movups xmm2,[esi]
movups xmm3,[16+esi]
movups xmm4,[32+esi]
lea esi,[48+esi]
xorps xmm2,xmm5
xorps xmm3,xmm6
xorps xmm4,xmm7
call __aesni_encrypt3
xorps xmm2,xmm5
xorps xmm3,xmm6
xorps xmm4,xmm7
movups [edi],xmm2
movups [16+edi],xmm3
movups [32+edi],xmm4
lea edi,[48+edi]
movdqa xmm1,xmm7
jmp NEAR L$054xts_enc_done
align 16
L$053xts_enc_four:
movaps xmm6,xmm1
movups xmm2,[esi]
movups xmm3,[16+esi]
movups xmm4,[32+esi]
xorps xmm2,[esp]
movups xmm5,[48+esi]
lea esi,[64+esi]
xorps xmm3,[16+esp]
xorps xmm4,xmm7
xorps xmm5,xmm6
call __aesni_encrypt4
xorps xmm2,[esp]
xorps xmm3,[16+esp]
xorps xmm4,xmm7
movups [edi],xmm2
xorps xmm5,xmm6
movups [16+edi],xmm3
movups [32+edi],xmm4
movups [48+edi],xmm5
lea edi,[64+edi]
movdqa xmm1,xmm6
jmp NEAR L$054xts_enc_done
align 16
L$049xts_enc_done6x:
mov eax,DWORD [112+esp]
and eax,15
jz NEAR L$056xts_enc_ret
movdqa xmm5,xmm1
mov DWORD [112+esp],eax
jmp NEAR L$057xts_enc_steal
align 16
L$054xts_enc_done:
mov eax,DWORD [112+esp]
pxor xmm0,xmm0
and eax,15
jz NEAR L$056xts_enc_ret
pcmpgtd xmm0,xmm1
mov DWORD [112+esp],eax
pshufd xmm5,xmm0,19
paddq xmm1,xmm1
pand xmm5,[96+esp]
pxor xmm5,xmm1
L$057xts_enc_steal:
movzx ecx,BYTE [esi]
movzx edx,BYTE [edi-16]
lea esi,[1+esi]
mov BYTE [edi-16],cl
mov BYTE [edi],dl
lea edi,[1+edi]
sub eax,1
jnz NEAR L$057xts_enc_steal
sub edi,DWORD [112+esp]
mov edx,ebp
mov ecx,ebx
movups xmm2,[edi-16]
xorps xmm2,xmm5
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$058enc1_loop_10:
db 102,15,56,220,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$058enc1_loop_10
db 102,15,56,221,209
xorps xmm2,xmm5
movups [edi-16],xmm2
L$056xts_enc_ret:
pxor xmm0,xmm0
pxor xmm1,xmm1
pxor xmm2,xmm2
movdqa [esp],xmm0
pxor xmm3,xmm3
movdqa [16+esp],xmm0
pxor xmm4,xmm4
movdqa [32+esp],xmm0
pxor xmm5,xmm5
movdqa [48+esp],xmm0
pxor xmm6,xmm6
movdqa [64+esp],xmm0
pxor xmm7,xmm7
movdqa [80+esp],xmm0
mov esp,DWORD [116+esp]
pop edi
pop esi
pop ebx
pop ebp
ret
global _aesni_xts_decrypt
align 16
_aesni_xts_decrypt:
L$_aesni_xts_decrypt_begin:
push ebp
push ebx
push esi
push edi
mov edx,DWORD [36+esp]
mov esi,DWORD [40+esp]
mov ecx,DWORD [240+edx]
movups xmm2,[esi]
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$059enc1_loop_11:
db 102,15,56,220,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$059enc1_loop_11
db 102,15,56,221,209
mov esi,DWORD [20+esp]
mov edi,DWORD [24+esp]
mov eax,DWORD [28+esp]
mov edx,DWORD [32+esp]
mov ebp,esp
sub esp,120
and esp,-16
xor ebx,ebx
test eax,15
setnz bl
shl ebx,4
sub eax,ebx
mov DWORD [96+esp],135
mov DWORD [100+esp],0
mov DWORD [104+esp],1
mov DWORD [108+esp],0
mov DWORD [112+esp],eax
mov DWORD [116+esp],ebp
mov ecx,DWORD [240+edx]
mov ebp,edx
mov ebx,ecx
movdqa xmm1,xmm2
pxor xmm0,xmm0
movdqa xmm3,[96+esp]
pcmpgtd xmm0,xmm1
and eax,-16
sub eax,96
jc NEAR L$060xts_dec_short
shl ecx,4
mov ebx,16
sub ebx,ecx
lea edx,[32+ecx*1+edx]
jmp NEAR L$061xts_dec_loop6
align 16
L$061xts_dec_loop6:
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa [esp],xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa [16+esp],xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa [32+esp],xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa [48+esp],xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
pshufd xmm7,xmm0,19
movdqa [64+esp],xmm1
paddq xmm1,xmm1
movups xmm0,[ebp]
pand xmm7,xmm3
movups xmm2,[esi]
pxor xmm7,xmm1
mov ecx,ebx
movdqu xmm3,[16+esi]
xorps xmm2,xmm0
movdqu xmm4,[32+esi]
pxor xmm3,xmm0
movdqu xmm5,[48+esi]
pxor xmm4,xmm0
movdqu xmm6,[64+esi]
pxor xmm5,xmm0
movdqu xmm1,[80+esi]
pxor xmm6,xmm0
lea esi,[96+esi]
pxor xmm2,[esp]
movdqa [80+esp],xmm7
pxor xmm7,xmm1
movups xmm1,[16+ebp]
pxor xmm3,[16+esp]
pxor xmm4,[32+esp]
db 102,15,56,222,209
pxor xmm5,[48+esp]
pxor xmm6,[64+esp]
db 102,15,56,222,217
pxor xmm7,xmm0
movups xmm0,[32+ebp]
db 102,15,56,222,225
db 102,15,56,222,233
db 102,15,56,222,241
db 102,15,56,222,249
call L$_aesni_decrypt6_enter
movdqa xmm1,[80+esp]
pxor xmm0,xmm0
xorps xmm2,[esp]
pcmpgtd xmm0,xmm1
xorps xmm3,[16+esp]
movups [edi],xmm2
xorps xmm4,[32+esp]
movups [16+edi],xmm3
xorps xmm5,[48+esp]
movups [32+edi],xmm4
xorps xmm6,[64+esp]
movups [48+edi],xmm5
xorps xmm7,xmm1
movups [64+edi],xmm6
pshufd xmm2,xmm0,19
movups [80+edi],xmm7
lea edi,[96+edi]
movdqa xmm3,[96+esp]
pxor xmm0,xmm0
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
sub eax,96
jnc NEAR L$061xts_dec_loop6
mov ecx,DWORD [240+ebp]
mov edx,ebp
mov ebx,ecx
L$060xts_dec_short:
add eax,96
jz NEAR L$062xts_dec_done6x
movdqa xmm5,xmm1
cmp eax,32
jb NEAR L$063xts_dec_one
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
je NEAR L$064xts_dec_two
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa xmm6,xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
cmp eax,64
jb NEAR L$065xts_dec_three
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa xmm7,xmm1
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
movdqa [esp],xmm5
movdqa [16+esp],xmm6
je NEAR L$066xts_dec_four
movdqa [32+esp],xmm7
pshufd xmm7,xmm0,19
movdqa [48+esp],xmm1
paddq xmm1,xmm1
pand xmm7,xmm3
pxor xmm7,xmm1
movdqu xmm2,[esi]
movdqu xmm3,[16+esi]
movdqu xmm4,[32+esi]
pxor xmm2,[esp]
movdqu xmm5,[48+esi]
pxor xmm3,[16+esp]
movdqu xmm6,[64+esi]
pxor xmm4,[32+esp]
lea esi,[80+esi]
pxor xmm5,[48+esp]
movdqa [64+esp],xmm7
pxor xmm6,xmm7
call __aesni_decrypt6
movaps xmm1,[64+esp]
xorps xmm2,[esp]
xorps xmm3,[16+esp]
xorps xmm4,[32+esp]
movups [edi],xmm2
xorps xmm5,[48+esp]
movups [16+edi],xmm3
xorps xmm6,xmm1
movups [32+edi],xmm4
movups [48+edi],xmm5
movups [64+edi],xmm6
lea edi,[80+edi]
jmp NEAR L$067xts_dec_done
align 16
L$063xts_dec_one:
movups xmm2,[esi]
lea esi,[16+esi]
xorps xmm2,xmm5
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$068dec1_loop_12:
db 102,15,56,222,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$068dec1_loop_12
db 102,15,56,223,209
xorps xmm2,xmm5
movups [edi],xmm2
lea edi,[16+edi]
movdqa xmm1,xmm5
jmp NEAR L$067xts_dec_done
align 16
L$064xts_dec_two:
movaps xmm6,xmm1
movups xmm2,[esi]
movups xmm3,[16+esi]
lea esi,[32+esi]
xorps xmm2,xmm5
xorps xmm3,xmm6
call __aesni_decrypt2
xorps xmm2,xmm5
xorps xmm3,xmm6
movups [edi],xmm2
movups [16+edi],xmm3
lea edi,[32+edi]
movdqa xmm1,xmm6
jmp NEAR L$067xts_dec_done
align 16
L$065xts_dec_three:
movaps xmm7,xmm1
movups xmm2,[esi]
movups xmm3,[16+esi]
movups xmm4,[32+esi]
lea esi,[48+esi]
xorps xmm2,xmm5
xorps xmm3,xmm6
xorps xmm4,xmm7
call __aesni_decrypt3
xorps xmm2,xmm5
xorps xmm3,xmm6
xorps xmm4,xmm7
movups [edi],xmm2
movups [16+edi],xmm3
movups [32+edi],xmm4
lea edi,[48+edi]
movdqa xmm1,xmm7
jmp NEAR L$067xts_dec_done
align 16
L$066xts_dec_four:
movaps xmm6,xmm1
movups xmm2,[esi]
movups xmm3,[16+esi]
movups xmm4,[32+esi]
xorps xmm2,[esp]
movups xmm5,[48+esi]
lea esi,[64+esi]
xorps xmm3,[16+esp]
xorps xmm4,xmm7
xorps xmm5,xmm6
call __aesni_decrypt4
xorps xmm2,[esp]
xorps xmm3,[16+esp]
xorps xmm4,xmm7
movups [edi],xmm2
xorps xmm5,xmm6
movups [16+edi],xmm3
movups [32+edi],xmm4
movups [48+edi],xmm5
lea edi,[64+edi]
movdqa xmm1,xmm6
jmp NEAR L$067xts_dec_done
align 16
L$062xts_dec_done6x:
mov eax,DWORD [112+esp]
and eax,15
jz NEAR L$069xts_dec_ret
mov DWORD [112+esp],eax
jmp NEAR L$070xts_dec_only_one_more
align 16
L$067xts_dec_done:
mov eax,DWORD [112+esp]
pxor xmm0,xmm0
and eax,15
jz NEAR L$069xts_dec_ret
pcmpgtd xmm0,xmm1
mov DWORD [112+esp],eax
pshufd xmm2,xmm0,19
pxor xmm0,xmm0
movdqa xmm3,[96+esp]
paddq xmm1,xmm1
pand xmm2,xmm3
pcmpgtd xmm0,xmm1
pxor xmm1,xmm2
L$070xts_dec_only_one_more:
pshufd xmm5,xmm0,19
movdqa xmm6,xmm1
paddq xmm1,xmm1
pand xmm5,xmm3
pxor xmm5,xmm1
mov edx,ebp
mov ecx,ebx
movups xmm2,[esi]
xorps xmm2,xmm5
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$071dec1_loop_13:
db 102,15,56,222,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$071dec1_loop_13
db 102,15,56,223,209
xorps xmm2,xmm5
movups [edi],xmm2
L$072xts_dec_steal:
movzx ecx,BYTE [16+esi]
movzx edx,BYTE [edi]
lea esi,[1+esi]
mov BYTE [edi],cl
mov BYTE [16+edi],dl
lea edi,[1+edi]
sub eax,1
jnz NEAR L$072xts_dec_steal
sub edi,DWORD [112+esp]
mov edx,ebp
mov ecx,ebx
movups xmm2,[edi]
xorps xmm2,xmm6
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$073dec1_loop_14:
db 102,15,56,222,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$073dec1_loop_14
db 102,15,56,223,209
xorps xmm2,xmm6
movups [edi],xmm2
L$069xts_dec_ret:
pxor xmm0,xmm0
pxor xmm1,xmm1
pxor xmm2,xmm2
movdqa [esp],xmm0
pxor xmm3,xmm3
movdqa [16+esp],xmm0
pxor xmm4,xmm4
movdqa [32+esp],xmm0
pxor xmm5,xmm5
movdqa [48+esp],xmm0
pxor xmm6,xmm6
movdqa [64+esp],xmm0
pxor xmm7,xmm7
movdqa [80+esp],xmm0
mov esp,DWORD [116+esp]
pop edi
pop esi
pop ebx
pop ebp
ret
global _aesni_cbc_encrypt
align 16
_aesni_cbc_encrypt:
L$_aesni_cbc_encrypt_begin:
push ebp
push ebx
push esi
push edi
mov esi,DWORD [20+esp]
mov ebx,esp
mov edi,DWORD [24+esp]
sub ebx,24
mov eax,DWORD [28+esp]
and ebx,-16
mov edx,DWORD [32+esp]
mov ebp,DWORD [36+esp]
test eax,eax
jz NEAR L$074cbc_abort
cmp DWORD [40+esp],0
xchg ebx,esp
movups xmm7,[ebp]
mov ecx,DWORD [240+edx]
mov ebp,edx
mov DWORD [16+esp],ebx
mov ebx,ecx
je NEAR L$075cbc_decrypt
movaps xmm2,xmm7
cmp eax,16
jb NEAR L$076cbc_enc_tail
sub eax,16
jmp NEAR L$077cbc_enc_loop
align 16
L$077cbc_enc_loop:
movups xmm7,[esi]
lea esi,[16+esi]
movups xmm0,[edx]
movups xmm1,[16+edx]
xorps xmm7,xmm0
lea edx,[32+edx]
xorps xmm2,xmm7
L$078enc1_loop_15:
db 102,15,56,220,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$078enc1_loop_15
db 102,15,56,221,209
mov ecx,ebx
mov edx,ebp
movups [edi],xmm2
lea edi,[16+edi]
sub eax,16
jnc NEAR L$077cbc_enc_loop
add eax,16
jnz NEAR L$076cbc_enc_tail
movaps xmm7,xmm2
pxor xmm2,xmm2
jmp NEAR L$079cbc_ret
L$076cbc_enc_tail:
mov ecx,eax
dd 2767451785
mov ecx,16
sub ecx,eax
xor eax,eax
dd 2868115081
lea edi,[edi-16]
mov ecx,ebx
mov esi,edi
mov edx,ebp
jmp NEAR L$077cbc_enc_loop
align 16
L$075cbc_decrypt:
cmp eax,80
jbe NEAR L$080cbc_dec_tail
movaps [esp],xmm7
sub eax,80
jmp NEAR L$081cbc_dec_loop6_enter
align 16
L$082cbc_dec_loop6:
movaps [esp],xmm0
movups [edi],xmm7
lea edi,[16+edi]
L$081cbc_dec_loop6_enter:
movdqu xmm2,[esi]
movdqu xmm3,[16+esi]
movdqu xmm4,[32+esi]
movdqu xmm5,[48+esi]
movdqu xmm6,[64+esi]
movdqu xmm7,[80+esi]
call __aesni_decrypt6
movups xmm1,[esi]
movups xmm0,[16+esi]
xorps xmm2,[esp]
xorps xmm3,xmm1
movups xmm1,[32+esi]
xorps xmm4,xmm0
movups xmm0,[48+esi]
xorps xmm5,xmm1
movups xmm1,[64+esi]
xorps xmm6,xmm0
movups xmm0,[80+esi]
xorps xmm7,xmm1
movups [edi],xmm2
movups [16+edi],xmm3
lea esi,[96+esi]
movups [32+edi],xmm4
mov ecx,ebx
movups [48+edi],xmm5
mov edx,ebp
movups [64+edi],xmm6
lea edi,[80+edi]
sub eax,96
ja NEAR L$082cbc_dec_loop6
movaps xmm2,xmm7
movaps xmm7,xmm0
add eax,80
jle NEAR L$083cbc_dec_clear_tail_collected
movups [edi],xmm2
lea edi,[16+edi]
L$080cbc_dec_tail:
movups xmm2,[esi]
movaps xmm6,xmm2
cmp eax,16
jbe NEAR L$084cbc_dec_one
movups xmm3,[16+esi]
movaps xmm5,xmm3
cmp eax,32
jbe NEAR L$085cbc_dec_two
movups xmm4,[32+esi]
cmp eax,48
jbe NEAR L$086cbc_dec_three
movups xmm5,[48+esi]
cmp eax,64
jbe NEAR L$087cbc_dec_four
movups xmm6,[64+esi]
movaps [esp],xmm7
movups xmm2,[esi]
xorps xmm7,xmm7
call __aesni_decrypt6
movups xmm1,[esi]
movups xmm0,[16+esi]
xorps xmm2,[esp]
xorps xmm3,xmm1
movups xmm1,[32+esi]
xorps xmm4,xmm0
movups xmm0,[48+esi]
xorps xmm5,xmm1
movups xmm7,[64+esi]
xorps xmm6,xmm0
movups [edi],xmm2
movups [16+edi],xmm3
pxor xmm3,xmm3
movups [32+edi],xmm4
pxor xmm4,xmm4
movups [48+edi],xmm5
pxor xmm5,xmm5
lea edi,[64+edi]
movaps xmm2,xmm6
pxor xmm6,xmm6
sub eax,80
jmp NEAR L$088cbc_dec_tail_collected
align 16
L$084cbc_dec_one:
movups xmm0,[edx]
movups xmm1,[16+edx]
lea edx,[32+edx]
xorps xmm2,xmm0
L$089dec1_loop_16:
db 102,15,56,222,209
dec ecx
movups xmm1,[edx]
lea edx,[16+edx]
jnz NEAR L$089dec1_loop_16
db 102,15,56,223,209
xorps xmm2,xmm7
movaps xmm7,xmm6
sub eax,16
jmp NEAR L$088cbc_dec_tail_collected
align 16
L$085cbc_dec_two:
call __aesni_decrypt2
xorps xmm2,xmm7
xorps xmm3,xmm6
movups [edi],xmm2
movaps xmm2,xmm3
pxor xmm3,xmm3
lea edi,[16+edi]
movaps xmm7,xmm5
sub eax,32
jmp NEAR L$088cbc_dec_tail_collected
align 16
L$086cbc_dec_three:
call __aesni_decrypt3
xorps xmm2,xmm7
xorps xmm3,xmm6
xorps xmm4,xmm5
movups [edi],xmm2
movaps xmm2,xmm4
pxor xmm4,xmm4
movups [16+edi],xmm3
pxor xmm3,xmm3
lea edi,[32+edi]
movups xmm7,[32+esi]
sub eax,48
jmp NEAR L$088cbc_dec_tail_collected
align 16
L$087cbc_dec_four:
call __aesni_decrypt4
movups xmm1,[16+esi]
movups xmm0,[32+esi]
xorps xmm2,xmm7
movups xmm7,[48+esi]
xorps xmm3,xmm6
movups [edi],xmm2
xorps xmm4,xmm1
movups [16+edi],xmm3
pxor xmm3,xmm3
xorps xmm5,xmm0
movups [32+edi],xmm4
pxor xmm4,xmm4
lea edi,[48+edi]
movaps xmm2,xmm5
pxor xmm5,xmm5
sub eax,64
jmp NEAR L$088cbc_dec_tail_collected
align 16
L$083cbc_dec_clear_tail_collected:
pxor xmm3,xmm3
pxor xmm4,xmm4
pxor xmm5,xmm5
pxor xmm6,xmm6
L$088cbc_dec_tail_collected:
and eax,15
jnz NEAR L$090cbc_dec_tail_partial
movups [edi],xmm2
pxor xmm0,xmm0
jmp NEAR L$079cbc_ret
align 16
L$090cbc_dec_tail_partial:
movaps [esp],xmm2
pxor xmm0,xmm0
mov ecx,16
mov esi,esp
sub ecx,eax
dd 2767451785
movdqa [esp],xmm2
L$079cbc_ret:
mov esp,DWORD [16+esp]
mov ebp,DWORD [36+esp]
pxor xmm2,xmm2
pxor xmm1,xmm1
movups [ebp],xmm7
pxor xmm7,xmm7
L$074cbc_abort:
pop edi
pop esi
pop ebx
pop ebp
ret
align 16
__aesni_set_encrypt_key:
push ebp
push ebx
test eax,eax
jz NEAR L$091bad_pointer
test edx,edx
jz NEAR L$091bad_pointer
call L$092pic
L$092pic:
pop ebx
lea ebx,[(L$key_const-L$092pic)+ebx]
lea ebp,[_OPENSSL_ia32cap_P]
movups xmm0,[eax]
xorps xmm4,xmm4
mov ebp,DWORD [4+ebp]
lea edx,[16+edx]
and ebp,268437504
cmp ecx,256
je NEAR L$09314rounds
cmp ecx,192
je NEAR L$09412rounds
cmp ecx,128
jne NEAR L$095bad_keybits
align 16
L$09610rounds:
cmp ebp,268435456
je NEAR L$09710rounds_alt
mov ecx,9
movups [edx-16],xmm0
db 102,15,58,223,200,1
call L$098key_128_cold
db 102,15,58,223,200,2
call L$099key_128
db 102,15,58,223,200,4
call L$099key_128
db 102,15,58,223,200,8
call L$099key_128
db 102,15,58,223,200,16
call L$099key_128
db 102,15,58,223,200,32
call L$099key_128
db 102,15,58,223,200,64
call L$099key_128
db 102,15,58,223,200,128
call L$099key_128
db 102,15,58,223,200,27
call L$099key_128
db 102,15,58,223,200,54
call L$099key_128
movups [edx],xmm0
mov DWORD [80+edx],ecx
jmp NEAR L$100good_key
align 16
L$099key_128:
movups [edx],xmm0
lea edx,[16+edx]
L$098key_128_cold:
shufps xmm4,xmm0,16
xorps xmm0,xmm4
shufps xmm4,xmm0,140
xorps xmm0,xmm4
shufps xmm1,xmm1,255
xorps xmm0,xmm1
ret
align 16
L$09710rounds_alt:
movdqa xmm5,[ebx]
mov ecx,8
movdqa xmm4,[32+ebx]
movdqa xmm2,xmm0
movdqu [edx-16],xmm0
L$101loop_key128:
db 102,15,56,0,197
db 102,15,56,221,196
pslld xmm4,1
lea edx,[16+edx]
movdqa xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm2,xmm3
pxor xmm0,xmm2
movdqu [edx-16],xmm0
movdqa xmm2,xmm0
dec ecx
jnz NEAR L$101loop_key128
movdqa xmm4,[48+ebx]
db 102,15,56,0,197
db 102,15,56,221,196
pslld xmm4,1
movdqa xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm2,xmm3
pxor xmm0,xmm2
movdqu [edx],xmm0
movdqa xmm2,xmm0
db 102,15,56,0,197
db 102,15,56,221,196
movdqa xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm3,xmm2
pslldq xmm2,4
pxor xmm2,xmm3
pxor xmm0,xmm2
movdqu [16+edx],xmm0
mov ecx,9
mov DWORD [96+edx],ecx
jmp NEAR L$100good_key
align 16
L$09412rounds:
movq xmm2,[16+eax]
cmp ebp,268435456
je NEAR L$10212rounds_alt
mov ecx,11
movups [edx-16],xmm0
db 102,15,58,223,202,1
call L$103key_192a_cold
db 102,15,58,223,202,2
call L$104key_192b
db 102,15,58,223,202,4
call L$105key_192a
db 102,15,58,223,202,8
call L$104key_192b
db 102,15,58,223,202,16
call L$105key_192a
db 102,15,58,223,202,32
call L$104key_192b
db 102,15,58,223,202,64
call L$105key_192a
db 102,15,58,223,202,128
call L$104key_192b
movups [edx],xmm0
mov DWORD [48+edx],ecx
jmp NEAR L$100good_key
align 16
L$105key_192a:
movups [edx],xmm0
lea edx,[16+edx]
align 16
L$103key_192a_cold:
movaps xmm5,xmm2
L$106key_192b_warm:
shufps xmm4,xmm0,16
movdqa xmm3,xmm2
xorps xmm0,xmm4
shufps xmm4,xmm0,140
pslldq xmm3,4
xorps xmm0,xmm4
pshufd xmm1,xmm1,85
pxor xmm2,xmm3
pxor xmm0,xmm1
pshufd xmm3,xmm0,255
pxor xmm2,xmm3
ret
align 16
L$104key_192b:
movaps xmm3,xmm0
shufps xmm5,xmm0,68
movups [edx],xmm5
shufps xmm3,xmm2,78
movups [16+edx],xmm3
lea edx,[32+edx]
jmp NEAR L$106key_192b_warm
align 16
L$10212rounds_alt:
movdqa xmm5,[16+ebx]
movdqa xmm4,[32+ebx]
mov ecx,8
movdqu [edx-16],xmm0
L$107loop_key192:
movq [edx],xmm2
movdqa xmm1,xmm2
db 102,15,56,0,213
db 102,15,56,221,212
pslld xmm4,1
lea edx,[24+edx]
movdqa xmm3,xmm0
pslldq xmm0,4
pxor xmm3,xmm0
pslldq xmm0,4
pxor xmm3,xmm0
pslldq xmm0,4
pxor xmm0,xmm3
pshufd xmm3,xmm0,255
pxor xmm3,xmm1
pslldq xmm1,4
pxor xmm3,xmm1
pxor xmm0,xmm2
pxor xmm2,xmm3
movdqu [edx-16],xmm0
dec ecx
jnz NEAR L$107loop_key192
mov ecx,11
mov DWORD [32+edx],ecx
jmp NEAR L$100good_key
align 16
L$09314rounds:
movups xmm2,[16+eax]
lea edx,[16+edx]
cmp ebp,268435456
je NEAR L$10814rounds_alt
mov ecx,13
movups [edx-32],xmm0
movups [edx-16],xmm2
db 102,15,58,223,202,1
call L$109key_256a_cold
db 102,15,58,223,200,1
call L$110key_256b
db 102,15,58,223,202,2
call L$111key_256a
db 102,15,58,223,200,2
call L$110key_256b
db 102,15,58,223,202,4
call L$111key_256a
db 102,15,58,223,200,4
call L$110key_256b
db 102,15,58,223,202,8
call L$111key_256a
db 102,15,58,223,200,8
call L$110key_256b
db 102,15,58,223,202,16
call L$111key_256a
db 102,15,58,223,200,16
call L$110key_256b
db 102,15,58,223,202,32
call L$111key_256a
db 102,15,58,223,200,32
call L$110key_256b
db 102,15,58,223,202,64
call L$111key_256a
movups [edx],xmm0
mov DWORD [16+edx],ecx
xor eax,eax
jmp NEAR L$100good_key
align 16
L$111key_256a:
movups [edx],xmm2
lea edx,[16+edx]
L$109key_256a_cold:
shufps xmm4,xmm0,16
xorps xmm0,xmm4
shufps xmm4,xmm0,140
xorps xmm0,xmm4
shufps xmm1,xmm1,255
xorps xmm0,xmm1
ret
align 16
L$110key_256b:
movups [edx],xmm0
lea edx,[16+edx]
shufps xmm4,xmm2,16
xorps xmm2,xmm4
shufps xmm4,xmm2,140
xorps xmm2,xmm4
shufps xmm1,xmm1,170
xorps xmm2,xmm1
ret
align 16
L$10814rounds_alt:
movdqa xmm5,[ebx]
movdqa xmm4,[32+ebx]
mov ecx,7
movdqu [edx-32],xmm0
movdqa xmm1,xmm2
movdqu [edx-16],xmm2
L$112loop_key256:
db 102,15,56,0,213
db 102,15,56,221,212
movdqa xmm3,xmm0
pslldq xmm0,4
pxor xmm3,xmm0
pslldq xmm0,4
pxor xmm3,xmm0
pslldq xmm0,4
pxor xmm0,xmm3
pslld xmm4,1
pxor xmm0,xmm2
movdqu [edx],xmm0
dec ecx
jz NEAR L$113done_key256
pshufd xmm2,xmm0,255
pxor xmm3,xmm3
db 102,15,56,221,211
movdqa xmm3,xmm1
pslldq xmm1,4
pxor xmm3,xmm1
pslldq xmm1,4
pxor xmm3,xmm1
pslldq xmm1,4
pxor xmm1,xmm3
pxor xmm2,xmm1
movdqu [16+edx],xmm2
lea edx,[32+edx]
movdqa xmm1,xmm2
jmp NEAR L$112loop_key256
L$113done_key256:
mov ecx,13
mov DWORD [16+edx],ecx
L$100good_key:
pxor xmm0,xmm0
pxor xmm1,xmm1
pxor xmm2,xmm2
pxor xmm3,xmm3
pxor xmm4,xmm4
pxor xmm5,xmm5
xor eax,eax
pop ebx
pop ebp
ret
align 4
L$091bad_pointer:
mov eax,-1
pop ebx
pop ebp
ret
align 4
L$095bad_keybits:
pxor xmm0,xmm0
mov eax,-2
pop ebx
pop ebp
ret
global _aesni_set_encrypt_key
align 16
_aesni_set_encrypt_key:
L$_aesni_set_encrypt_key_begin:
mov eax,DWORD [4+esp]
mov ecx,DWORD [8+esp]
mov edx,DWORD [12+esp]
call __aesni_set_encrypt_key
ret
global _aesni_set_decrypt_key
align 16
_aesni_set_decrypt_key:
L$_aesni_set_decrypt_key_begin:
mov eax,DWORD [4+esp]
mov ecx,DWORD [8+esp]
mov edx,DWORD [12+esp]
call __aesni_set_encrypt_key
mov edx,DWORD [12+esp]
shl ecx,4
test eax,eax
jnz NEAR L$114dec_key_ret
lea eax,[16+ecx*1+edx]
movups xmm0,[edx]
movups xmm1,[eax]
movups [eax],xmm0
movups [edx],xmm1
lea edx,[16+edx]
lea eax,[eax-16]
L$115dec_key_inverse:
movups xmm0,[edx]
movups xmm1,[eax]
db 102,15,56,219,192
db 102,15,56,219,201
lea edx,[16+edx]
lea eax,[eax-16]
movups [16+eax],xmm0
movups [edx-16],xmm1
cmp eax,edx
ja NEAR L$115dec_key_inverse
movups xmm0,[edx]
db 102,15,56,219,192
movups [edx],xmm0
pxor xmm0,xmm0
pxor xmm1,xmm1
xor eax,eax
L$114dec_key_ret:
ret
align 64
L$key_const:
dd 202313229,202313229,202313229,202313229
dd 67569157,67569157,67569157,67569157
dd 1,1,1,1
dd 27,27,27,27
db 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
db 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
db 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
db 115,108,46,111,114,103,62,0
segment .bss
common _OPENSSL_ia32cap_P 16