default rel %define XMMWORD %define YMMWORD %define ZMMWORD section .text code align=64 EXTERN asm_AES_encrypt EXTERN asm_AES_decrypt ALIGN 64 _bsaes_encrypt8: lea r11,[$L$BS0] movdqa xmm8,XMMWORD[rax] lea rax,[16+rax] movdqa xmm7,XMMWORD[80+r11] pxor xmm15,xmm8 pxor xmm0,xmm8 pxor xmm1,xmm8 pxor xmm2,xmm8 DB 102,68,15,56,0,255 DB 102,15,56,0,199 pxor xmm3,xmm8 pxor xmm4,xmm8 DB 102,15,56,0,207 DB 102,15,56,0,215 pxor xmm5,xmm8 pxor xmm6,xmm8 DB 102,15,56,0,223 DB 102,15,56,0,231 DB 102,15,56,0,239 DB 102,15,56,0,247 _bsaes_encrypt8_bitslice: movdqa xmm7,XMMWORD[r11] movdqa xmm8,XMMWORD[16+r11] movdqa xmm9,xmm5 psrlq xmm5,1 movdqa xmm10,xmm3 psrlq xmm3,1 pxor xmm5,xmm6 pxor xmm3,xmm4 pand xmm5,xmm7 pand xmm3,xmm7 pxor xmm6,xmm5 psllq xmm5,1 pxor xmm4,xmm3 psllq xmm3,1 pxor xmm5,xmm9 pxor xmm3,xmm10 movdqa xmm9,xmm1 psrlq xmm1,1 movdqa xmm10,xmm15 psrlq xmm15,1 pxor xmm1,xmm2 pxor xmm15,xmm0 pand xmm1,xmm7 pand xmm15,xmm7 pxor xmm2,xmm1 psllq xmm1,1 pxor xmm0,xmm15 psllq xmm15,1 pxor xmm1,xmm9 pxor xmm15,xmm10 movdqa xmm7,XMMWORD[32+r11] movdqa xmm9,xmm4 psrlq xmm4,2 movdqa xmm10,xmm3 psrlq xmm3,2 pxor xmm4,xmm6 pxor xmm3,xmm5 pand xmm4,xmm8 pand xmm3,xmm8 pxor xmm6,xmm4 psllq xmm4,2 pxor xmm5,xmm3 psllq xmm3,2 pxor xmm4,xmm9 pxor xmm3,xmm10 movdqa xmm9,xmm0 psrlq xmm0,2 movdqa xmm10,xmm15 psrlq xmm15,2 pxor xmm0,xmm2 pxor xmm15,xmm1 pand xmm0,xmm8 pand xmm15,xmm8 pxor xmm2,xmm0 psllq xmm0,2 pxor xmm1,xmm15 psllq xmm15,2 pxor xmm0,xmm9 pxor xmm15,xmm10 movdqa xmm9,xmm2 psrlq xmm2,4 movdqa xmm10,xmm1 psrlq xmm1,4 pxor xmm2,xmm6 pxor xmm1,xmm5 pand xmm2,xmm7 pand xmm1,xmm7 pxor xmm6,xmm2 psllq xmm2,4 pxor xmm5,xmm1 psllq xmm1,4 pxor xmm2,xmm9 pxor xmm1,xmm10 movdqa xmm9,xmm0 psrlq xmm0,4 movdqa xmm10,xmm15 psrlq xmm15,4 pxor xmm0,xmm4 pxor xmm15,xmm3 pand xmm0,xmm7 pand xmm15,xmm7 pxor xmm4,xmm0 psllq xmm0,4 pxor xmm3,xmm15 psllq xmm15,4 pxor xmm0,xmm9 pxor xmm15,xmm10 dec r10d jmp NEAR $L$enc_sbox ALIGN 16 $L$enc_loop: pxor xmm15,XMMWORD[rax] pxor xmm0,XMMWORD[16+rax] pxor xmm1,XMMWORD[32+rax] pxor xmm2,XMMWORD[48+rax] DB 102,68,15,56,0,255 DB 102,15,56,0,199 pxor xmm3,XMMWORD[64+rax] pxor xmm4,XMMWORD[80+rax] DB 102,15,56,0,207 DB 102,15,56,0,215 pxor xmm5,XMMWORD[96+rax] pxor xmm6,XMMWORD[112+rax] DB 102,15,56,0,223 DB 102,15,56,0,231 DB 102,15,56,0,239 DB 102,15,56,0,247 lea rax,[128+rax] $L$enc_sbox: pxor xmm4,xmm5 pxor xmm1,xmm0 pxor xmm2,xmm15 pxor xmm5,xmm1 pxor xmm4,xmm15 pxor xmm5,xmm2 pxor xmm2,xmm6 pxor xmm6,xmm4 pxor xmm2,xmm3 pxor xmm3,xmm4 pxor xmm2,xmm0 pxor xmm1,xmm6 pxor xmm0,xmm4 movdqa xmm10,xmm6 movdqa xmm9,xmm0 movdqa xmm8,xmm4 movdqa xmm12,xmm1 movdqa xmm11,xmm5 pxor xmm10,xmm3 pxor xmm9,xmm1 pxor xmm8,xmm2 movdqa xmm13,xmm10 pxor xmm12,xmm3 movdqa xmm7,xmm9 pxor xmm11,xmm15 movdqa xmm14,xmm10 por xmm9,xmm8 por xmm10,xmm11 pxor xmm14,xmm7 pand xmm13,xmm11 pxor xmm11,xmm8 pand xmm7,xmm8 pand xmm14,xmm11 movdqa xmm11,xmm2 pxor xmm11,xmm15 pand xmm12,xmm11 pxor xmm10,xmm12 pxor xmm9,xmm12 movdqa xmm12,xmm6 movdqa xmm11,xmm4 pxor xmm12,xmm0 pxor xmm11,xmm5 movdqa xmm8,xmm12 pand xmm12,xmm11 por xmm8,xmm11 pxor xmm7,xmm12 pxor xmm10,xmm14 pxor xmm9,xmm13 pxor xmm8,xmm14 movdqa xmm11,xmm1 pxor xmm7,xmm13 movdqa xmm12,xmm3 pxor xmm8,xmm13 movdqa xmm13,xmm0 pand xmm11,xmm2 movdqa xmm14,xmm6 pand xmm12,xmm15 pand xmm13,xmm4 por xmm14,xmm5 pxor xmm10,xmm11 pxor xmm9,xmm12 pxor xmm8,xmm13 pxor xmm7,xmm14 movdqa xmm11,xmm10 pand xmm10,xmm8 pxor xmm11,xmm9 movdqa xmm13,xmm7 movdqa xmm14,xmm11 pxor xmm13,xmm10 pand xmm14,xmm13 movdqa xmm12,xmm8 pxor xmm14,xmm9 pxor xmm12,xmm7 pxor xmm10,xmm9 pand xmm12,xmm10 movdqa xmm9,xmm13 pxor xmm12,xmm7 pxor xmm9,xmm12 pxor xmm8,xmm12 pand xmm9,xmm7 pxor xmm13,xmm9 pxor xmm8,xmm9 pand xmm13,xmm14 pxor xmm13,xmm11 movdqa xmm11,xmm5 movdqa xmm7,xmm4 movdqa xmm9,xmm14 pxor xmm9,xmm13 pand xmm9,xmm5 pxor xmm5,xmm4 pand xmm4,xmm14 pand xmm5,xmm13 pxor xmm5,xmm4 pxor xmm4,xmm9 pxor xmm11,xmm15 pxor xmm7,xmm2 pxor xmm14,xmm12 pxor xmm13,xmm8 movdqa xmm10,xmm14 movdqa xmm9,xmm12 pxor xmm10,xmm13 pxor xmm9,xmm8 pand xmm10,xmm11 pand xmm9,xmm15 pxor xmm11,xmm7 pxor xmm15,xmm2 pand xmm7,xmm14 pand xmm2,xmm12 pand xmm11,xmm13 pand xmm15,xmm8 pxor xmm7,xmm11 pxor xmm15,xmm2 pxor xmm11,xmm10 pxor xmm2,xmm9 pxor xmm5,xmm11 pxor xmm15,xmm11 pxor xmm4,xmm7 pxor xmm2,xmm7 movdqa xmm11,xmm6 movdqa xmm7,xmm0 pxor xmm11,xmm3 pxor xmm7,xmm1 movdqa xmm10,xmm14 movdqa xmm9,xmm12 pxor xmm10,xmm13 pxor xmm9,xmm8 pand xmm10,xmm11 pand xmm9,xmm3 pxor xmm11,xmm7 pxor xmm3,xmm1 pand xmm7,xmm14 pand xmm1,xmm12 pand xmm11,xmm13 pand xmm3,xmm8 pxor xmm7,xmm11 pxor xmm3,xmm1 pxor xmm11,xmm10 pxor xmm1,xmm9 pxor xmm14,xmm12 pxor xmm13,xmm8 movdqa xmm10,xmm14 pxor xmm10,xmm13 pand xmm10,xmm6 pxor xmm6,xmm0 pand xmm0,xmm14 pand xmm6,xmm13 pxor xmm6,xmm0 pxor xmm0,xmm10 pxor xmm6,xmm11 pxor xmm3,xmm11 pxor xmm0,xmm7 pxor xmm1,xmm7 pxor xmm6,xmm15 pxor xmm0,xmm5 pxor xmm3,xmm6 pxor xmm5,xmm15 pxor xmm15,xmm0 pxor xmm0,xmm4 pxor xmm4,xmm1 pxor xmm1,xmm2 pxor xmm2,xmm4 pxor xmm3,xmm4 pxor xmm5,xmm2 dec r10d jl NEAR $L$enc_done pshufd xmm7,xmm15,0x93 pshufd xmm8,xmm0,0x93 pxor xmm15,xmm7 pshufd xmm9,xmm3,0x93 pxor xmm0,xmm8 pshufd xmm10,xmm5,0x93 pxor xmm3,xmm9 pshufd xmm11,xmm2,0x93 pxor xmm5,xmm10 pshufd xmm12,xmm6,0x93 pxor xmm2,xmm11 pshufd xmm13,xmm1,0x93 pxor xmm6,xmm12 pshufd xmm14,xmm4,0x93 pxor xmm1,xmm13 pxor xmm4,xmm14 pxor xmm8,xmm15 pxor xmm7,xmm4 pxor xmm8,xmm4 pshufd xmm15,xmm15,0x4E pxor xmm9,xmm0 pshufd xmm0,xmm0,0x4E pxor xmm12,xmm2 pxor xmm15,xmm7 pxor xmm13,xmm6 pxor xmm0,xmm8 pxor xmm11,xmm5 pshufd xmm7,xmm2,0x4E pxor xmm14,xmm1 pshufd xmm8,xmm6,0x4E pxor xmm10,xmm3 pshufd xmm2,xmm5,0x4E pxor xmm10,xmm4 pshufd xmm6,xmm4,0x4E pxor xmm11,xmm4 pshufd xmm5,xmm1,0x4E pxor xmm7,xmm11 pshufd xmm1,xmm3,0x4E pxor xmm8,xmm12 pxor xmm2,xmm10 pxor xmm6,xmm14 pxor xmm5,xmm13 movdqa xmm3,xmm7 pxor xmm1,xmm9 movdqa xmm4,xmm8 movdqa xmm7,XMMWORD[48+r11] jnz NEAR $L$enc_loop movdqa xmm7,XMMWORD[64+r11] jmp NEAR $L$enc_loop ALIGN 16 $L$enc_done: movdqa xmm7,XMMWORD[r11] movdqa xmm8,XMMWORD[16+r11] movdqa xmm9,xmm1 psrlq xmm1,1 movdqa xmm10,xmm2 psrlq xmm2,1 pxor xmm1,xmm4 pxor xmm2,xmm6 pand xmm1,xmm7 pand xmm2,xmm7 pxor xmm4,xmm1 psllq xmm1,1 pxor xmm6,xmm2 psllq xmm2,1 pxor xmm1,xmm9 pxor xmm2,xmm10 movdqa xmm9,xmm3 psrlq xmm3,1 movdqa xmm10,xmm15 psrlq xmm15,1 pxor xmm3,xmm5 pxor xmm15,xmm0 pand xmm3,xmm7 pand xmm15,xmm7 pxor xmm5,xmm3 psllq xmm3,1 pxor xmm0,xmm15 psllq xmm15,1 pxor xmm3,xmm9 pxor xmm15,xmm10 movdqa xmm7,XMMWORD[32+r11] movdqa xmm9,xmm6 psrlq xmm6,2 movdqa xmm10,xmm2 psrlq xmm2,2 pxor xmm6,xmm4 pxor xmm2,xmm1 pand xmm6,xmm8 pand xmm2,xmm8 pxor xmm4,xmm6 psllq xmm6,2 pxor xmm1,xmm2 psllq xmm2,2 pxor xmm6,xmm9 pxor xmm2,xmm10 movdqa xmm9,xmm0 psrlq xmm0,2 movdqa xmm10,xmm15 psrlq xmm15,2 pxor xmm0,xmm5 pxor xmm15,xmm3 pand xmm0,xmm8 pand xmm15,xmm8 pxor xmm5,xmm0 psllq xmm0,2 pxor xmm3,xmm15 psllq xmm15,2 pxor xmm0,xmm9 pxor xmm15,xmm10 movdqa xmm9,xmm5 psrlq xmm5,4 movdqa xmm10,xmm3 psrlq xmm3,4 pxor xmm5,xmm4 pxor xmm3,xmm1 pand xmm5,xmm7 pand xmm3,xmm7 pxor xmm4,xmm5 psllq xmm5,4 pxor xmm1,xmm3 psllq xmm3,4 pxor xmm5,xmm9 pxor xmm3,xmm10 movdqa xmm9,xmm0 psrlq xmm0,4 movdqa xmm10,xmm15 psrlq xmm15,4 pxor xmm0,xmm6 pxor xmm15,xmm2 pand xmm0,xmm7 pand xmm15,xmm7 pxor xmm6,xmm0 psllq xmm0,4 pxor xmm2,xmm15 psllq xmm15,4 pxor xmm0,xmm9 pxor xmm15,xmm10 movdqa xmm7,XMMWORD[rax] pxor xmm3,xmm7 pxor xmm5,xmm7 pxor xmm2,xmm7 pxor xmm6,xmm7 pxor xmm1,xmm7 pxor xmm4,xmm7 pxor xmm15,xmm7 pxor xmm0,xmm7 DB 0F3h,0C3h ;repret ALIGN 64 _bsaes_decrypt8: lea r11,[$L$BS0] movdqa xmm8,XMMWORD[rax] lea rax,[16+rax] movdqa xmm7,XMMWORD[((-48))+r11] pxor xmm15,xmm8 pxor xmm0,xmm8 pxor xmm1,xmm8 pxor xmm2,xmm8 DB 102,68,15,56,0,255 DB 102,15,56,0,199 pxor xmm3,xmm8 pxor xmm4,xmm8 DB 102,15,56,0,207 DB 102,15,56,0,215 pxor xmm5,xmm8 pxor xmm6,xmm8 DB 102,15,56,0,223 DB 102,15,56,0,231 DB 102,15,56,0,239 DB 102,15,56,0,247 movdqa xmm7,XMMWORD[r11] movdqa xmm8,XMMWORD[16+r11] movdqa xmm9,xmm5 psrlq xmm5,1 movdqa xmm10,xmm3 psrlq xmm3,1 pxor xmm5,xmm6 pxor xmm3,xmm4 pand xmm5,xmm7 pand xmm3,xmm7 pxor xmm6,xmm5 psllq xmm5,1 pxor xmm4,xmm3 psllq xmm3,1 pxor xmm5,xmm9 pxor xmm3,xmm10 movdqa xmm9,xmm1 psrlq xmm1,1 movdqa xmm10,xmm15 psrlq xmm15,1 pxor xmm1,xmm2 pxor xmm15,xmm0 pand xmm1,xmm7 pand xmm15,xmm7 pxor xmm2,xmm1 psllq xmm1,1 pxor xmm0,xmm15 psllq xmm15,1 pxor xmm1,xmm9 pxor xmm15,xmm10 movdqa xmm7,XMMWORD[32+r11] movdqa xmm9,xmm4 psrlq xmm4,2 movdqa xmm10,xmm3 psrlq xmm3,2 pxor xmm4,xmm6 pxor xmm3,xmm5 pand xmm4,xmm8 pand xmm3,xmm8 pxor xmm6,xmm4 psllq xmm4,2 pxor xmm5,xmm3 psllq xmm3,2 pxor xmm4,xmm9 pxor xmm3,xmm10 movdqa xmm9,xmm0 psrlq xmm0,2 movdqa xmm10,xmm15 psrlq xmm15,2 pxor xmm0,xmm2 pxor xmm15,xmm1 pand xmm0,xmm8 pand xmm15,xmm8 pxor xmm2,xmm0 psllq xmm0,2 pxor xmm1,xmm15 psllq xmm15,2 pxor xmm0,xmm9 pxor xmm15,xmm10 movdqa xmm9,xmm2 psrlq xmm2,4 movdqa xmm10,xmm1 psrlq xmm1,4 pxor xmm2,xmm6 pxor xmm1,xmm5 pand xmm2,xmm7 pand xmm1,xmm7 pxor xmm6,xmm2 psllq xmm2,4 pxor xmm5,xmm1 psllq xmm1,4 pxor xmm2,xmm9 pxor xmm1,xmm10 movdqa xmm9,xmm0 psrlq xmm0,4 movdqa xmm10,xmm15 psrlq xmm15,4 pxor xmm0,xmm4 pxor xmm15,xmm3 pand xmm0,xmm7 pand xmm15,xmm7 pxor xmm4,xmm0 psllq xmm0,4 pxor xmm3,xmm15 psllq xmm15,4 pxor xmm0,xmm9 pxor xmm15,xmm10 dec r10d jmp NEAR $L$dec_sbox ALIGN 16 $L$dec_loop: pxor xmm15,XMMWORD[rax] pxor xmm0,XMMWORD[16+rax] pxor xmm1,XMMWORD[32+rax] pxor xmm2,XMMWORD[48+rax] DB 102,68,15,56,0,255 DB 102,15,56,0,199 pxor xmm3,XMMWORD[64+rax] pxor xmm4,XMMWORD[80+rax] DB 102,15,56,0,207 DB 102,15,56,0,215 pxor xmm5,XMMWORD[96+rax] pxor xmm6,XMMWORD[112+rax] DB 102,15,56,0,223 DB 102,15,56,0,231 DB 102,15,56,0,239 DB 102,15,56,0,247 lea rax,[128+rax] $L$dec_sbox: pxor xmm2,xmm3 pxor xmm3,xmm6 pxor xmm1,xmm6 pxor xmm5,xmm3 pxor xmm6,xmm5 pxor xmm0,xmm6 pxor xmm15,xmm0 pxor xmm1,xmm4 pxor xmm2,xmm15 pxor xmm4,xmm15 pxor xmm0,xmm2 movdqa xmm10,xmm2 movdqa xmm9,xmm6 movdqa xmm8,xmm0 movdqa xmm12,xmm3 movdqa xmm11,xmm4 pxor xmm10,xmm15 pxor xmm9,xmm3 pxor xmm8,xmm5 movdqa xmm13,xmm10 pxor xmm12,xmm15 movdqa xmm7,xmm9 pxor xmm11,xmm1 movdqa xmm14,xmm10 por xmm9,xmm8 por xmm10,xmm11 pxor xmm14,xmm7 pand xmm13,xmm11 pxor xmm11,xmm8 pand xmm7,xmm8 pand xmm14,xmm11 movdqa xmm11,xmm5 pxor xmm11,xmm1 pand xmm12,xmm11 pxor xmm10,xmm12 pxor xmm9,xmm12 movdqa xmm12,xmm2 movdqa xmm11,xmm0 pxor xmm12,xmm6 pxor xmm11,xmm4 movdqa xmm8,xmm12 pand xmm12,xmm11 por xmm8,xmm11 pxor xmm7,xmm12 pxor xmm10,xmm14 pxor xmm9,xmm13 pxor xmm8,xmm14 movdqa xmm11,xmm3 pxor xmm7,xmm13 movdqa xmm12,xmm15 pxor xmm8,xmm13 movdqa xmm13,xmm6 pand xmm11,xmm5 movdqa xmm14,xmm2 pand xmm12,xmm1 pand xmm13,xmm0 por xmm14,xmm4 pxor xmm10,xmm11 pxor xmm9,xmm12 pxor xmm8,xmm13 pxor xmm7,xmm14 movdqa xmm11,xmm10 pand xmm10,xmm8 pxor xmm11,xmm9 movdqa xmm13,xmm7 movdqa xmm14,xmm11 pxor xmm13,xmm10 pand xmm14,xmm13 movdqa xmm12,xmm8 pxor xmm14,xmm9 pxor xmm12,xmm7 pxor xmm10,xmm9 pand xmm12,xmm10 movdqa xmm9,xmm13 pxor xmm12,xmm7 pxor xmm9,xmm12 pxor xmm8,xmm12 pand xmm9,xmm7 pxor xmm13,xmm9 pxor xmm8,xmm9 pand xmm13,xmm14 pxor xmm13,xmm11 movdqa xmm11,xmm4 movdqa xmm7,xmm0 movdqa xmm9,xmm14 pxor xmm9,xmm13 pand xmm9,xmm4 pxor xmm4,xmm0 pand xmm0,xmm14 pand xmm4,xmm13 pxor xmm4,xmm0 pxor xmm0,xmm9 pxor xmm11,xmm1 pxor xmm7,xmm5 pxor xmm14,xmm12 pxor xmm13,xmm8 movdqa xmm10,xmm14 movdqa xmm9,xmm12 pxor xmm10,xmm13 pxor xmm9,xmm8 pand xmm10,xmm11 pand xmm9,xmm1 pxor xmm11,xmm7 pxor xmm1,xmm5 pand xmm7,xmm14 pand xmm5,xmm12 pand xmm11,xmm13 pand xmm1,xmm8 pxor xmm7,xmm11 pxor xmm1,xmm5 pxor xmm11,xmm10 pxor xmm5,xmm9 pxor xmm4,xmm11 pxor xmm1,xmm11 pxor xmm0,xmm7 pxor xmm5,xmm7 movdqa xmm11,xmm2 movdqa xmm7,xmm6 pxor xmm11,xmm15 pxor xmm7,xmm3 movdqa xmm10,xmm14 movdqa xmm9,xmm12 pxor xmm10,xmm13 pxor xmm9,xmm8 pand xmm10,xmm11 pand xmm9,xmm15 pxor xmm11,xmm7 pxor xmm15,xmm3 pand xmm7,xmm14 pand xmm3,xmm12 pand xmm11,xmm13 pand xmm15,xmm8 pxor xmm7,xmm11 pxor xmm15,xmm3 pxor xmm11,xmm10 pxor xmm3,xmm9 pxor xmm14,xmm12 pxor xmm13,xmm8 movdqa xmm10,xmm14 pxor xmm10,xmm13 pand xmm10,xmm2 pxor xmm2,xmm6 pand xmm6,xmm14 pand xmm2,xmm13 pxor xmm2,xmm6 pxor xmm6,xmm10 pxor xmm2,xmm11 pxor xmm15,xmm11 pxor xmm6,xmm7 pxor xmm3,xmm7 pxor xmm0,xmm6 pxor xmm5,xmm4 pxor xmm3,xmm0 pxor xmm1,xmm6 pxor xmm4,xmm6 pxor xmm3,xmm1 pxor xmm6,xmm15 pxor xmm3,xmm4 pxor xmm2,xmm5 pxor xmm5,xmm0 pxor xmm2,xmm3 pxor xmm3,xmm15 pxor xmm6,xmm2 dec r10d jl NEAR $L$dec_done pshufd xmm7,xmm15,0x4E pshufd xmm13,xmm2,0x4E pxor xmm7,xmm15 pshufd xmm14,xmm4,0x4E pxor xmm13,xmm2 pshufd xmm8,xmm0,0x4E pxor xmm14,xmm4 pshufd xmm9,xmm5,0x4E pxor xmm8,xmm0 pshufd xmm10,xmm3,0x4E pxor xmm9,xmm5 pxor xmm15,xmm13 pxor xmm0,xmm13 pshufd xmm11,xmm1,0x4E pxor xmm10,xmm3 pxor xmm5,xmm7 pxor xmm3,xmm8 pshufd xmm12,xmm6,0x4E pxor xmm11,xmm1 pxor xmm0,xmm14 pxor xmm1,xmm9 pxor xmm12,xmm6 pxor xmm5,xmm14 pxor xmm3,xmm13 pxor xmm1,xmm13 pxor xmm6,xmm10 pxor xmm2,xmm11 pxor xmm1,xmm14 pxor xmm6,xmm14 pxor xmm4,xmm12 pshufd xmm7,xmm15,0x93 pshufd xmm8,xmm0,0x93 pxor xmm15,xmm7 pshufd xmm9,xmm5,0x93 pxor xmm0,xmm8 pshufd xmm10,xmm3,0x93 pxor xmm5,xmm9 pshufd xmm11,xmm1,0x93 pxor xmm3,xmm10 pshufd xmm12,xmm6,0x93 pxor xmm1,xmm11 pshufd xmm13,xmm2,0x93 pxor xmm6,xmm12 pshufd xmm14,xmm4,0x93 pxor xmm2,xmm13 pxor xmm4,xmm14 pxor xmm8,xmm15 pxor xmm7,xmm4 pxor xmm8,xmm4 pshufd xmm15,xmm15,0x4E pxor xmm9,xmm0 pshufd xmm0,xmm0,0x4E pxor xmm12,xmm1 pxor xmm15,xmm7 pxor xmm13,xmm6 pxor xmm0,xmm8 pxor xmm11,xmm3 pshufd xmm7,xmm1,0x4E pxor xmm14,xmm2 pshufd xmm8,xmm6,0x4E pxor xmm10,xmm5 pshufd xmm1,xmm3,0x4E pxor xmm10,xmm4 pshufd xmm6,xmm4,0x4E pxor xmm11,xmm4 pshufd xmm3,xmm2,0x4E pxor xmm7,xmm11 pshufd xmm2,xmm5,0x4E pxor xmm8,xmm12 pxor xmm10,xmm1 pxor xmm6,xmm14 pxor xmm13,xmm3 movdqa xmm3,xmm7 pxor xmm2,xmm9 movdqa xmm5,xmm13 movdqa xmm4,xmm8 movdqa xmm1,xmm2 movdqa xmm2,xmm10 movdqa xmm7,XMMWORD[((-16))+r11] jnz NEAR $L$dec_loop movdqa xmm7,XMMWORD[((-32))+r11] jmp NEAR $L$dec_loop ALIGN 16 $L$dec_done: movdqa xmm7,XMMWORD[r11] movdqa xmm8,XMMWORD[16+r11] movdqa xmm9,xmm2 psrlq xmm2,1 movdqa xmm10,xmm1 psrlq xmm1,1 pxor xmm2,xmm4 pxor xmm1,xmm6 pand xmm2,xmm7 pand xmm1,xmm7 pxor xmm4,xmm2 psllq xmm2,1 pxor xmm6,xmm1 psllq xmm1,1 pxor xmm2,xmm9 pxor xmm1,xmm10 movdqa xmm9,xmm5 psrlq xmm5,1 movdqa xmm10,xmm15 psrlq xmm15,1 pxor xmm5,xmm3 pxor xmm15,xmm0 pand xmm5,xmm7 pand xmm15,xmm7 pxor xmm3,xmm5 psllq xmm5,1 pxor xmm0,xmm15 psllq xmm15,1 pxor xmm5,xmm9 pxor xmm15,xmm10 movdqa xmm7,XMMWORD[32+r11] movdqa xmm9,xmm6 psrlq xmm6,2 movdqa xmm10,xmm1 psrlq xmm1,2 pxor xmm6,xmm4 pxor xmm1,xmm2 pand xmm6,xmm8 pand xmm1,xmm8 pxor xmm4,xmm6 psllq xmm6,2 pxor xmm2,xmm1 psllq xmm1,2 pxor xmm6,xmm9 pxor xmm1,xmm10 movdqa xmm9,xmm0 psrlq xmm0,2 movdqa xmm10,xmm15 psrlq xmm15,2 pxor xmm0,xmm3 pxor xmm15,xmm5 pand xmm0,xmm8 pand xmm15,xmm8 pxor xmm3,xmm0 psllq xmm0,2 pxor xmm5,xmm15 psllq xmm15,2 pxor xmm0,xmm9 pxor xmm15,xmm10 movdqa xmm9,xmm3 psrlq xmm3,4 movdqa xmm10,xmm5 psrlq xmm5,4 pxor xmm3,xmm4 pxor xmm5,xmm2 pand xmm3,xmm7 pand xmm5,xmm7 pxor xmm4,xmm3 psllq xmm3,4 pxor xmm2,xmm5 psllq xmm5,4 pxor xmm3,xmm9 pxor xmm5,xmm10 movdqa xmm9,xmm0 psrlq xmm0,4 movdqa xmm10,xmm15 psrlq xmm15,4 pxor xmm0,xmm6 pxor xmm15,xmm1 pand xmm0,xmm7 pand xmm15,xmm7 pxor xmm6,xmm0 psllq xmm0,4 pxor xmm1,xmm15 psllq xmm15,4 pxor xmm0,xmm9 pxor xmm15,xmm10 movdqa xmm7,XMMWORD[rax] pxor xmm5,xmm7 pxor xmm3,xmm7 pxor xmm1,xmm7 pxor xmm6,xmm7 pxor xmm2,xmm7 pxor xmm4,xmm7 pxor xmm15,xmm7 pxor xmm0,xmm7 DB 0F3h,0C3h ;repret ALIGN 16 _bsaes_key_convert: lea r11,[$L$masks] movdqu xmm7,XMMWORD[rcx] lea rcx,[16+rcx] movdqa xmm0,XMMWORD[r11] movdqa xmm1,XMMWORD[16+r11] movdqa xmm2,XMMWORD[32+r11] movdqa xmm3,XMMWORD[48+r11] movdqa xmm4,XMMWORD[64+r11] pcmpeqd xmm5,xmm5 movdqu xmm6,XMMWORD[rcx] movdqa XMMWORD[rax],xmm7 lea rax,[16+rax] dec r10d jmp NEAR $L$key_loop ALIGN 16 $L$key_loop: DB 102,15,56,0,244 movdqa xmm8,xmm0 movdqa xmm9,xmm1 pand xmm8,xmm6 pand xmm9,xmm6 movdqa xmm10,xmm2 pcmpeqb xmm8,xmm0 psllq xmm0,4 movdqa xmm11,xmm3 pcmpeqb xmm9,xmm1 psllq xmm1,4 pand xmm10,xmm6 pand xmm11,xmm6 movdqa xmm12,xmm0 pcmpeqb xmm10,xmm2 psllq xmm2,4 movdqa xmm13,xmm1 pcmpeqb xmm11,xmm3 psllq xmm3,4 movdqa xmm14,xmm2 movdqa xmm15,xmm3 pxor xmm8,xmm5 pxor xmm9,xmm5 pand xmm12,xmm6 pand xmm13,xmm6 movdqa XMMWORD[rax],xmm8 pcmpeqb xmm12,xmm0 psrlq xmm0,4 movdqa XMMWORD[16+rax],xmm9 pcmpeqb xmm13,xmm1 psrlq xmm1,4 lea rcx,[16+rcx] pand xmm14,xmm6 pand xmm15,xmm6 movdqa XMMWORD[32+rax],xmm10 pcmpeqb xmm14,xmm2 psrlq xmm2,4 movdqa XMMWORD[48+rax],xmm11 pcmpeqb xmm15,xmm3 psrlq xmm3,4 movdqu xmm6,XMMWORD[rcx] pxor xmm13,xmm5 pxor xmm14,xmm5 movdqa XMMWORD[64+rax],xmm12 movdqa XMMWORD[80+rax],xmm13 movdqa XMMWORD[96+rax],xmm14 movdqa XMMWORD[112+rax],xmm15 lea rax,[128+rax] dec r10d jnz NEAR $L$key_loop movdqa xmm7,XMMWORD[80+r11] DB 0F3h,0C3h ;repret EXTERN asm_AES_cbc_encrypt global bsaes_cbc_encrypt ALIGN 16 bsaes_cbc_encrypt: mov r11d,DWORD[48+rsp] cmp r11d,0 jne NEAR asm_AES_cbc_encrypt cmp r8,128 jb NEAR asm_AES_cbc_encrypt mov rax,rsp $L$cbc_dec_prologue: push rbp push rbx push r12 push r13 push r14 push r15 lea rsp,[((-72))+rsp] mov r10,QWORD[160+rsp] lea rsp,[((-160))+rsp] movaps XMMWORD[64+rsp],xmm6 movaps XMMWORD[80+rsp],xmm7 movaps XMMWORD[96+rsp],xmm8 movaps XMMWORD[112+rsp],xmm9 movaps XMMWORD[128+rsp],xmm10 movaps XMMWORD[144+rsp],xmm11 movaps XMMWORD[160+rsp],xmm12 movaps XMMWORD[176+rsp],xmm13 movaps XMMWORD[192+rsp],xmm14 movaps XMMWORD[208+rsp],xmm15 $L$cbc_dec_body: mov rbp,rsp mov eax,DWORD[240+r9] mov r12,rcx mov r13,rdx mov r14,r8 mov r15,r9 mov rbx,r10 shr r14,4 mov edx,eax shl rax,7 sub rax,96 sub rsp,rax mov rax,rsp mov rcx,r15 mov r10d,edx call _bsaes_key_convert pxor xmm7,XMMWORD[rsp] movdqa XMMWORD[rax],xmm6 movdqa XMMWORD[rsp],xmm7 movdqu xmm14,XMMWORD[rbx] sub r14,8 $L$cbc_dec_loop: movdqu xmm15,XMMWORD[r12] movdqu xmm0,XMMWORD[16+r12] movdqu xmm1,XMMWORD[32+r12] movdqu xmm2,XMMWORD[48+r12] movdqu xmm3,XMMWORD[64+r12] movdqu xmm4,XMMWORD[80+r12] mov rax,rsp movdqu xmm5,XMMWORD[96+r12] mov r10d,edx movdqu xmm6,XMMWORD[112+r12] movdqa XMMWORD[32+rbp],xmm14 call _bsaes_decrypt8 pxor xmm15,XMMWORD[32+rbp] movdqu xmm7,XMMWORD[r12] movdqu xmm8,XMMWORD[16+r12] pxor xmm0,xmm7 movdqu xmm9,XMMWORD[32+r12] pxor xmm5,xmm8 movdqu xmm10,XMMWORD[48+r12] pxor xmm3,xmm9 movdqu xmm11,XMMWORD[64+r12] pxor xmm1,xmm10 movdqu xmm12,XMMWORD[80+r12] pxor xmm6,xmm11 movdqu xmm13,XMMWORD[96+r12] pxor xmm2,xmm12 movdqu xmm14,XMMWORD[112+r12] pxor xmm4,xmm13 movdqu XMMWORD[r13],xmm15 lea r12,[128+r12] movdqu XMMWORD[16+r13],xmm0 movdqu XMMWORD[32+r13],xmm5 movdqu XMMWORD[48+r13],xmm3 movdqu XMMWORD[64+r13],xmm1 movdqu XMMWORD[80+r13],xmm6 movdqu XMMWORD[96+r13],xmm2 movdqu XMMWORD[112+r13],xmm4 lea r13,[128+r13] sub r14,8 jnc NEAR $L$cbc_dec_loop add r14,8 jz NEAR $L$cbc_dec_done movdqu xmm15,XMMWORD[r12] mov rax,rsp mov r10d,edx cmp r14,2 jb NEAR $L$cbc_dec_one movdqu xmm0,XMMWORD[16+r12] je NEAR $L$cbc_dec_two movdqu xmm1,XMMWORD[32+r12] cmp r14,4 jb NEAR $L$cbc_dec_three movdqu xmm2,XMMWORD[48+r12] je NEAR $L$cbc_dec_four movdqu xmm3,XMMWORD[64+r12] cmp r14,6 jb NEAR $L$cbc_dec_five movdqu xmm4,XMMWORD[80+r12] je NEAR $L$cbc_dec_six movdqu xmm5,XMMWORD[96+r12] movdqa XMMWORD[32+rbp],xmm14 call _bsaes_decrypt8 pxor xmm15,XMMWORD[32+rbp] movdqu xmm7,XMMWORD[r12] movdqu xmm8,XMMWORD[16+r12] pxor xmm0,xmm7 movdqu xmm9,XMMWORD[32+r12] pxor xmm5,xmm8 movdqu xmm10,XMMWORD[48+r12] pxor xmm3,xmm9 movdqu xmm11,XMMWORD[64+r12] pxor xmm1,xmm10 movdqu xmm12,XMMWORD[80+r12] pxor xmm6,xmm11 movdqu xmm14,XMMWORD[96+r12] pxor xmm2,xmm12 movdqu XMMWORD[r13],xmm15 movdqu XMMWORD[16+r13],xmm0 movdqu XMMWORD[32+r13],xmm5 movdqu XMMWORD[48+r13],xmm3 movdqu XMMWORD[64+r13],xmm1 movdqu XMMWORD[80+r13],xmm6 movdqu XMMWORD[96+r13],xmm2 jmp NEAR $L$cbc_dec_done ALIGN 16 $L$cbc_dec_six: movdqa XMMWORD[32+rbp],xmm14 call _bsaes_decrypt8 pxor xmm15,XMMWORD[32+rbp] movdqu xmm7,XMMWORD[r12] movdqu xmm8,XMMWORD[16+r12] pxor xmm0,xmm7 movdqu xmm9,XMMWORD[32+r12] pxor xmm5,xmm8 movdqu xmm10,XMMWORD[48+r12] pxor xmm3,xmm9 movdqu xmm11,XMMWORD[64+r12] pxor xmm1,xmm10 movdqu xmm14,XMMWORD[80+r12] pxor xmm6,xmm11 movdqu XMMWORD[r13],xmm15 movdqu XMMWORD[16+r13],xmm0 movdqu XMMWORD[32+r13],xmm5 movdqu XMMWORD[48+r13],xmm3 movdqu XMMWORD[64+r13],xmm1 movdqu XMMWORD[80+r13],xmm6 jmp NEAR $L$cbc_dec_done ALIGN 16 $L$cbc_dec_five: movdqa XMMWORD[32+rbp],xmm14 call _bsaes_decrypt8 pxor xmm15,XMMWORD[32+rbp] movdqu xmm7,XMMWORD[r12] movdqu xmm8,XMMWORD[16+r12] pxor xmm0,xmm7 movdqu xmm9,XMMWORD[32+r12] pxor xmm5,xmm8 movdqu xmm10,XMMWORD[48+r12] pxor xmm3,xmm9 movdqu xmm14,XMMWORD[64+r12] pxor xmm1,xmm10 movdqu XMMWORD[r13],xmm15 movdqu XMMWORD[16+r13],xmm0 movdqu XMMWORD[32+r13],xmm5 movdqu XMMWORD[48+r13],xmm3 movdqu XMMWORD[64+r13],xmm1 jmp NEAR $L$cbc_dec_done ALIGN 16 $L$cbc_dec_four: movdqa XMMWORD[32+rbp],xmm14 call _bsaes_decrypt8 pxor xmm15,XMMWORD[32+rbp] movdqu xmm7,XMMWORD[r12] movdqu xmm8,XMMWORD[16+r12] pxor xmm0,xmm7 movdqu xmm9,XMMWORD[32+r12] pxor xmm5,xmm8 movdqu xmm14,XMMWORD[48+r12] pxor xmm3,xmm9 movdqu XMMWORD[r13],xmm15 movdqu XMMWORD[16+r13],xmm0 movdqu XMMWORD[32+r13],xmm5 movdqu XMMWORD[48+r13],xmm3 jmp NEAR $L$cbc_dec_done ALIGN 16 $L$cbc_dec_three: movdqa XMMWORD[32+rbp],xmm14 call _bsaes_decrypt8 pxor xmm15,XMMWORD[32+rbp] movdqu xmm7,XMMWORD[r12] movdqu xmm8,XMMWORD[16+r12] pxor xmm0,xmm7 movdqu xmm14,XMMWORD[32+r12] pxor xmm5,xmm8 movdqu XMMWORD[r13],xmm15 movdqu XMMWORD[16+r13],xmm0 movdqu XMMWORD[32+r13],xmm5 jmp NEAR $L$cbc_dec_done ALIGN 16 $L$cbc_dec_two: movdqa XMMWORD[32+rbp],xmm14 call _bsaes_decrypt8 pxor xmm15,XMMWORD[32+rbp] movdqu xmm7,XMMWORD[r12] movdqu xmm14,XMMWORD[16+r12] pxor xmm0,xmm7 movdqu XMMWORD[r13],xmm15 movdqu XMMWORD[16+r13],xmm0 jmp NEAR $L$cbc_dec_done ALIGN 16 $L$cbc_dec_one: lea rcx,[r12] lea rdx,[32+rbp] lea r8,[r15] call asm_AES_decrypt pxor xmm14,XMMWORD[32+rbp] movdqu XMMWORD[r13],xmm14 movdqa xmm14,xmm15 $L$cbc_dec_done: movdqu XMMWORD[rbx],xmm14 lea rax,[rsp] pxor xmm0,xmm0 $L$cbc_dec_bzero: movdqa XMMWORD[rax],xmm0 movdqa XMMWORD[16+rax],xmm0 lea rax,[32+rax] cmp rbp,rax ja NEAR $L$cbc_dec_bzero lea rax,[120+rbp] movaps xmm6,XMMWORD[64+rbp] movaps xmm7,XMMWORD[80+rbp] movaps xmm8,XMMWORD[96+rbp] movaps xmm9,XMMWORD[112+rbp] movaps xmm10,XMMWORD[128+rbp] movaps xmm11,XMMWORD[144+rbp] movaps xmm12,XMMWORD[160+rbp] movaps xmm13,XMMWORD[176+rbp] movaps xmm14,XMMWORD[192+rbp] movaps xmm15,XMMWORD[208+rbp] lea rax,[160+rax] $L$cbc_dec_tail: mov r15,QWORD[((-48))+rax] mov r14,QWORD[((-40))+rax] mov r13,QWORD[((-32))+rax] mov r12,QWORD[((-24))+rax] mov rbx,QWORD[((-16))+rax] mov rbp,QWORD[((-8))+rax] lea rsp,[rax] $L$cbc_dec_epilogue: DB 0F3h,0C3h ;repret global bsaes_ctr32_encrypt_blocks ALIGN 16 bsaes_ctr32_encrypt_blocks: mov rax,rsp $L$ctr_enc_prologue: push rbp push rbx push r12 push r13 push r14 push r15 lea rsp,[((-72))+rsp] mov r10,QWORD[160+rsp] lea rsp,[((-160))+rsp] movaps XMMWORD[64+rsp],xmm6 movaps XMMWORD[80+rsp],xmm7 movaps XMMWORD[96+rsp],xmm8 movaps XMMWORD[112+rsp],xmm9 movaps XMMWORD[128+rsp],xmm10 movaps XMMWORD[144+rsp],xmm11 movaps XMMWORD[160+rsp],xmm12 movaps XMMWORD[176+rsp],xmm13 movaps XMMWORD[192+rsp],xmm14 movaps XMMWORD[208+rsp],xmm15 $L$ctr_enc_body: mov rbp,rsp movdqu xmm0,XMMWORD[r10] mov eax,DWORD[240+r9] mov r12,rcx mov r13,rdx mov r14,r8 mov r15,r9 movdqa XMMWORD[32+rbp],xmm0 cmp r8,8 jb NEAR $L$ctr_enc_short mov ebx,eax shl rax,7 sub rax,96 sub rsp,rax mov rax,rsp mov rcx,r15 mov r10d,ebx call _bsaes_key_convert pxor xmm7,xmm6 movdqa XMMWORD[rax],xmm7 movdqa xmm8,XMMWORD[rsp] lea r11,[$L$ADD1] movdqa xmm15,XMMWORD[32+rbp] movdqa xmm7,XMMWORD[((-32))+r11] DB 102,68,15,56,0,199 DB 102,68,15,56,0,255 movdqa XMMWORD[rsp],xmm8 jmp NEAR $L$ctr_enc_loop ALIGN 16 $L$ctr_enc_loop: movdqa XMMWORD[32+rbp],xmm15 movdqa xmm0,xmm15 movdqa xmm1,xmm15 paddd xmm0,XMMWORD[r11] movdqa xmm2,xmm15 paddd xmm1,XMMWORD[16+r11] movdqa xmm3,xmm15 paddd xmm2,XMMWORD[32+r11] movdqa xmm4,xmm15 paddd xmm3,XMMWORD[48+r11] movdqa xmm5,xmm15 paddd xmm4,XMMWORD[64+r11] movdqa xmm6,xmm15 paddd xmm5,XMMWORD[80+r11] paddd xmm6,XMMWORD[96+r11] movdqa xmm8,XMMWORD[rsp] lea rax,[16+rsp] movdqa xmm7,XMMWORD[((-16))+r11] pxor xmm15,xmm8 pxor xmm0,xmm8 pxor xmm1,xmm8 pxor xmm2,xmm8 DB 102,68,15,56,0,255 DB 102,15,56,0,199 pxor xmm3,xmm8 pxor xmm4,xmm8 DB 102,15,56,0,207 DB 102,15,56,0,215 pxor xmm5,xmm8 pxor xmm6,xmm8 DB 102,15,56,0,223 DB 102,15,56,0,231 DB 102,15,56,0,239 DB 102,15,56,0,247 lea r11,[$L$BS0] mov r10d,ebx call _bsaes_encrypt8_bitslice sub r14,8 jc NEAR $L$ctr_enc_loop_done movdqu xmm7,XMMWORD[r12] movdqu xmm8,XMMWORD[16+r12] movdqu xmm9,XMMWORD[32+r12] movdqu xmm10,XMMWORD[48+r12] movdqu xmm11,XMMWORD[64+r12] movdqu xmm12,XMMWORD[80+r12] movdqu xmm13,XMMWORD[96+r12] movdqu xmm14,XMMWORD[112+r12] lea r12,[128+r12] pxor xmm7,xmm15 movdqa xmm15,XMMWORD[32+rbp] pxor xmm0,xmm8 movdqu XMMWORD[r13],xmm7 pxor xmm3,xmm9 movdqu XMMWORD[16+r13],xmm0 pxor xmm5,xmm10 movdqu XMMWORD[32+r13],xmm3 pxor xmm2,xmm11 movdqu XMMWORD[48+r13],xmm5 pxor xmm6,xmm12 movdqu XMMWORD[64+r13],xmm2 pxor xmm1,xmm13 movdqu XMMWORD[80+r13],xmm6 pxor xmm4,xmm14 movdqu XMMWORD[96+r13],xmm1 lea r11,[$L$ADD1] movdqu XMMWORD[112+r13],xmm4 lea r13,[128+r13] paddd xmm15,XMMWORD[112+r11] jnz NEAR $L$ctr_enc_loop jmp NEAR $L$ctr_enc_done ALIGN 16 $L$ctr_enc_loop_done: add r14,8 movdqu xmm7,XMMWORD[r12] pxor xmm15,xmm7 movdqu XMMWORD[r13],xmm15 cmp r14,2 jb NEAR $L$ctr_enc_done movdqu xmm8,XMMWORD[16+r12] pxor xmm0,xmm8 movdqu XMMWORD[16+r13],xmm0 je NEAR $L$ctr_enc_done movdqu xmm9,XMMWORD[32+r12] pxor xmm3,xmm9 movdqu XMMWORD[32+r13],xmm3 cmp r14,4 jb NEAR $L$ctr_enc_done movdqu xmm10,XMMWORD[48+r12] pxor xmm5,xmm10 movdqu XMMWORD[48+r13],xmm5 je NEAR $L$ctr_enc_done movdqu xmm11,XMMWORD[64+r12] pxor xmm2,xmm11 movdqu XMMWORD[64+r13],xmm2 cmp r14,6 jb NEAR $L$ctr_enc_done movdqu xmm12,XMMWORD[80+r12] pxor xmm6,xmm12 movdqu XMMWORD[80+r13],xmm6 je NEAR $L$ctr_enc_done movdqu xmm13,XMMWORD[96+r12] pxor xmm1,xmm13 movdqu XMMWORD[96+r13],xmm1 jmp NEAR $L$ctr_enc_done ALIGN 16 $L$ctr_enc_short: lea rcx,[32+rbp] lea rdx,[48+rbp] lea r8,[r15] call asm_AES_encrypt movdqu xmm0,XMMWORD[r12] lea r12,[16+r12] mov eax,DWORD[44+rbp] bswap eax pxor xmm0,XMMWORD[48+rbp] inc eax movdqu XMMWORD[r13],xmm0 bswap eax lea r13,[16+r13] mov DWORD[44+rsp],eax dec r14 jnz NEAR $L$ctr_enc_short $L$ctr_enc_done: lea rax,[rsp] pxor xmm0,xmm0 $L$ctr_enc_bzero: movdqa XMMWORD[rax],xmm0 movdqa XMMWORD[16+rax],xmm0 lea rax,[32+rax] cmp rbp,rax ja NEAR $L$ctr_enc_bzero lea rax,[120+rbp] movaps xmm6,XMMWORD[64+rbp] movaps xmm7,XMMWORD[80+rbp] movaps xmm8,XMMWORD[96+rbp] movaps xmm9,XMMWORD[112+rbp] movaps xmm10,XMMWORD[128+rbp] movaps xmm11,XMMWORD[144+rbp] movaps xmm12,XMMWORD[160+rbp] movaps xmm13,XMMWORD[176+rbp] movaps xmm14,XMMWORD[192+rbp] movaps xmm15,XMMWORD[208+rbp] lea rax,[160+rax] $L$ctr_enc_tail: mov r15,QWORD[((-48))+rax] mov r14,QWORD[((-40))+rax] mov r13,QWORD[((-32))+rax] mov r12,QWORD[((-24))+rax] mov rbx,QWORD[((-16))+rax] mov rbp,QWORD[((-8))+rax] lea rsp,[rax] $L$ctr_enc_epilogue: DB 0F3h,0C3h ;repret global bsaes_xts_encrypt ALIGN 16 bsaes_xts_encrypt: mov rax,rsp $L$xts_enc_prologue: push rbp push rbx push r12 push r13 push r14 push r15 lea rsp,[((-72))+rsp] mov r10,QWORD[160+rsp] mov r11,QWORD[168+rsp] lea rsp,[((-160))+rsp] movaps XMMWORD[64+rsp],xmm6 movaps XMMWORD[80+rsp],xmm7 movaps XMMWORD[96+rsp],xmm8 movaps XMMWORD[112+rsp],xmm9 movaps XMMWORD[128+rsp],xmm10 movaps XMMWORD[144+rsp],xmm11 movaps XMMWORD[160+rsp],xmm12 movaps XMMWORD[176+rsp],xmm13 movaps XMMWORD[192+rsp],xmm14 movaps XMMWORD[208+rsp],xmm15 $L$xts_enc_body: mov rbp,rsp mov r12,rcx mov r13,rdx mov r14,r8 mov r15,r9 lea rcx,[r11] lea rdx,[32+rbp] lea r8,[r10] call asm_AES_encrypt mov eax,DWORD[240+r15] mov rbx,r14 mov edx,eax shl rax,7 sub rax,96 sub rsp,rax mov rax,rsp mov rcx,r15 mov r10d,edx call _bsaes_key_convert pxor xmm7,xmm6 movdqa XMMWORD[rax],xmm7 and r14,-16 sub rsp,0x80 movdqa xmm6,XMMWORD[32+rbp] pxor xmm14,xmm14 movdqa xmm12,XMMWORD[$L$xts_magic] pcmpgtd xmm14,xmm6 sub r14,0x80 jc NEAR $L$xts_enc_short jmp NEAR $L$xts_enc_loop ALIGN 16 $L$xts_enc_loop: pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm15,xmm6 movdqa XMMWORD[rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm0,xmm6 movdqa XMMWORD[16+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm7,XMMWORD[r12] pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm1,xmm6 movdqa XMMWORD[32+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm8,XMMWORD[16+r12] pxor xmm15,xmm7 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm2,xmm6 movdqa XMMWORD[48+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm9,XMMWORD[32+r12] pxor xmm0,xmm8 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm3,xmm6 movdqa XMMWORD[64+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm10,XMMWORD[48+r12] pxor xmm1,xmm9 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm4,xmm6 movdqa XMMWORD[80+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm11,XMMWORD[64+r12] pxor xmm2,xmm10 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm5,xmm6 movdqa XMMWORD[96+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm12,XMMWORD[80+r12] pxor xmm3,xmm11 movdqu xmm13,XMMWORD[96+r12] pxor xmm4,xmm12 movdqu xmm14,XMMWORD[112+r12] lea r12,[128+r12] movdqa XMMWORD[112+rsp],xmm6 pxor xmm5,xmm13 lea rax,[128+rsp] pxor xmm6,xmm14 mov r10d,edx call _bsaes_encrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm3,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 pxor xmm5,XMMWORD[48+rsp] movdqu XMMWORD[32+r13],xmm3 pxor xmm2,XMMWORD[64+rsp] movdqu XMMWORD[48+r13],xmm5 pxor xmm6,XMMWORD[80+rsp] movdqu XMMWORD[64+r13],xmm2 pxor xmm1,XMMWORD[96+rsp] movdqu XMMWORD[80+r13],xmm6 pxor xmm4,XMMWORD[112+rsp] movdqu XMMWORD[96+r13],xmm1 movdqu XMMWORD[112+r13],xmm4 lea r13,[128+r13] movdqa xmm6,XMMWORD[112+rsp] pxor xmm14,xmm14 movdqa xmm12,XMMWORD[$L$xts_magic] pcmpgtd xmm14,xmm6 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 sub r14,0x80 jnc NEAR $L$xts_enc_loop $L$xts_enc_short: add r14,0x80 jz NEAR $L$xts_enc_done pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm15,xmm6 movdqa XMMWORD[rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm0,xmm6 movdqa XMMWORD[16+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm7,XMMWORD[r12] cmp r14,16 je NEAR $L$xts_enc_1 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm1,xmm6 movdqa XMMWORD[32+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm8,XMMWORD[16+r12] cmp r14,32 je NEAR $L$xts_enc_2 pxor xmm15,xmm7 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm2,xmm6 movdqa XMMWORD[48+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm9,XMMWORD[32+r12] cmp r14,48 je NEAR $L$xts_enc_3 pxor xmm0,xmm8 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm3,xmm6 movdqa XMMWORD[64+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm10,XMMWORD[48+r12] cmp r14,64 je NEAR $L$xts_enc_4 pxor xmm1,xmm9 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm4,xmm6 movdqa XMMWORD[80+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm11,XMMWORD[64+r12] cmp r14,80 je NEAR $L$xts_enc_5 pxor xmm2,xmm10 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm5,xmm6 movdqa XMMWORD[96+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm12,XMMWORD[80+r12] cmp r14,96 je NEAR $L$xts_enc_6 pxor xmm3,xmm11 movdqu xmm13,XMMWORD[96+r12] pxor xmm4,xmm12 movdqa XMMWORD[112+rsp],xmm6 lea r12,[112+r12] pxor xmm5,xmm13 lea rax,[128+rsp] mov r10d,edx call _bsaes_encrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm3,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 pxor xmm5,XMMWORD[48+rsp] movdqu XMMWORD[32+r13],xmm3 pxor xmm2,XMMWORD[64+rsp] movdqu XMMWORD[48+r13],xmm5 pxor xmm6,XMMWORD[80+rsp] movdqu XMMWORD[64+r13],xmm2 pxor xmm1,XMMWORD[96+rsp] movdqu XMMWORD[80+r13],xmm6 movdqu XMMWORD[96+r13],xmm1 lea r13,[112+r13] movdqa xmm6,XMMWORD[112+rsp] jmp NEAR $L$xts_enc_done ALIGN 16 $L$xts_enc_6: pxor xmm3,xmm11 lea r12,[96+r12] pxor xmm4,xmm12 lea rax,[128+rsp] mov r10d,edx call _bsaes_encrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm3,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 pxor xmm5,XMMWORD[48+rsp] movdqu XMMWORD[32+r13],xmm3 pxor xmm2,XMMWORD[64+rsp] movdqu XMMWORD[48+r13],xmm5 pxor xmm6,XMMWORD[80+rsp] movdqu XMMWORD[64+r13],xmm2 movdqu XMMWORD[80+r13],xmm6 lea r13,[96+r13] movdqa xmm6,XMMWORD[96+rsp] jmp NEAR $L$xts_enc_done ALIGN 16 $L$xts_enc_5: pxor xmm2,xmm10 lea r12,[80+r12] pxor xmm3,xmm11 lea rax,[128+rsp] mov r10d,edx call _bsaes_encrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm3,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 pxor xmm5,XMMWORD[48+rsp] movdqu XMMWORD[32+r13],xmm3 pxor xmm2,XMMWORD[64+rsp] movdqu XMMWORD[48+r13],xmm5 movdqu XMMWORD[64+r13],xmm2 lea r13,[80+r13] movdqa xmm6,XMMWORD[80+rsp] jmp NEAR $L$xts_enc_done ALIGN 16 $L$xts_enc_4: pxor xmm1,xmm9 lea r12,[64+r12] pxor xmm2,xmm10 lea rax,[128+rsp] mov r10d,edx call _bsaes_encrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm3,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 pxor xmm5,XMMWORD[48+rsp] movdqu XMMWORD[32+r13],xmm3 movdqu XMMWORD[48+r13],xmm5 lea r13,[64+r13] movdqa xmm6,XMMWORD[64+rsp] jmp NEAR $L$xts_enc_done ALIGN 16 $L$xts_enc_3: pxor xmm0,xmm8 lea r12,[48+r12] pxor xmm1,xmm9 lea rax,[128+rsp] mov r10d,edx call _bsaes_encrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm3,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 movdqu XMMWORD[32+r13],xmm3 lea r13,[48+r13] movdqa xmm6,XMMWORD[48+rsp] jmp NEAR $L$xts_enc_done ALIGN 16 $L$xts_enc_2: pxor xmm15,xmm7 lea r12,[32+r12] pxor xmm0,xmm8 lea rax,[128+rsp] mov r10d,edx call _bsaes_encrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 movdqu XMMWORD[16+r13],xmm0 lea r13,[32+r13] movdqa xmm6,XMMWORD[32+rsp] jmp NEAR $L$xts_enc_done ALIGN 16 $L$xts_enc_1: pxor xmm7,xmm15 lea r12,[16+r12] movdqa XMMWORD[32+rbp],xmm7 lea rcx,[32+rbp] lea rdx,[32+rbp] lea r8,[r15] call asm_AES_encrypt pxor xmm15,XMMWORD[32+rbp] movdqu XMMWORD[r13],xmm15 lea r13,[16+r13] movdqa xmm6,XMMWORD[16+rsp] $L$xts_enc_done: and ebx,15 jz NEAR $L$xts_enc_ret mov rdx,r13 $L$xts_enc_steal: movzx eax,BYTE[r12] movzx ecx,BYTE[((-16))+rdx] lea r12,[1+r12] mov BYTE[((-16))+rdx],al mov BYTE[rdx],cl lea rdx,[1+rdx] sub ebx,1 jnz NEAR $L$xts_enc_steal movdqu xmm15,XMMWORD[((-16))+r13] lea rcx,[32+rbp] pxor xmm15,xmm6 lea rdx,[32+rbp] movdqa XMMWORD[32+rbp],xmm15 lea r8,[r15] call asm_AES_encrypt pxor xmm6,XMMWORD[32+rbp] movdqu XMMWORD[(-16)+r13],xmm6 $L$xts_enc_ret: lea rax,[rsp] pxor xmm0,xmm0 $L$xts_enc_bzero: movdqa XMMWORD[rax],xmm0 movdqa XMMWORD[16+rax],xmm0 lea rax,[32+rax] cmp rbp,rax ja NEAR $L$xts_enc_bzero lea rax,[120+rbp] movaps xmm6,XMMWORD[64+rbp] movaps xmm7,XMMWORD[80+rbp] movaps xmm8,XMMWORD[96+rbp] movaps xmm9,XMMWORD[112+rbp] movaps xmm10,XMMWORD[128+rbp] movaps xmm11,XMMWORD[144+rbp] movaps xmm12,XMMWORD[160+rbp] movaps xmm13,XMMWORD[176+rbp] movaps xmm14,XMMWORD[192+rbp] movaps xmm15,XMMWORD[208+rbp] lea rax,[160+rax] $L$xts_enc_tail: mov r15,QWORD[((-48))+rax] mov r14,QWORD[((-40))+rax] mov r13,QWORD[((-32))+rax] mov r12,QWORD[((-24))+rax] mov rbx,QWORD[((-16))+rax] mov rbp,QWORD[((-8))+rax] lea rsp,[rax] $L$xts_enc_epilogue: DB 0F3h,0C3h ;repret global bsaes_xts_decrypt ALIGN 16 bsaes_xts_decrypt: mov rax,rsp $L$xts_dec_prologue: push rbp push rbx push r12 push r13 push r14 push r15 lea rsp,[((-72))+rsp] mov r10,QWORD[160+rsp] mov r11,QWORD[168+rsp] lea rsp,[((-160))+rsp] movaps XMMWORD[64+rsp],xmm6 movaps XMMWORD[80+rsp],xmm7 movaps XMMWORD[96+rsp],xmm8 movaps XMMWORD[112+rsp],xmm9 movaps XMMWORD[128+rsp],xmm10 movaps XMMWORD[144+rsp],xmm11 movaps XMMWORD[160+rsp],xmm12 movaps XMMWORD[176+rsp],xmm13 movaps XMMWORD[192+rsp],xmm14 movaps XMMWORD[208+rsp],xmm15 $L$xts_dec_body: mov rbp,rsp mov r12,rcx mov r13,rdx mov r14,r8 mov r15,r9 lea rcx,[r11] lea rdx,[32+rbp] lea r8,[r10] call asm_AES_encrypt mov eax,DWORD[240+r15] mov rbx,r14 mov edx,eax shl rax,7 sub rax,96 sub rsp,rax mov rax,rsp mov rcx,r15 mov r10d,edx call _bsaes_key_convert pxor xmm7,XMMWORD[rsp] movdqa XMMWORD[rax],xmm6 movdqa XMMWORD[rsp],xmm7 xor eax,eax and r14,-16 test ebx,15 setnz al shl rax,4 sub r14,rax sub rsp,0x80 movdqa xmm6,XMMWORD[32+rbp] pxor xmm14,xmm14 movdqa xmm12,XMMWORD[$L$xts_magic] pcmpgtd xmm14,xmm6 sub r14,0x80 jc NEAR $L$xts_dec_short jmp NEAR $L$xts_dec_loop ALIGN 16 $L$xts_dec_loop: pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm15,xmm6 movdqa XMMWORD[rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm0,xmm6 movdqa XMMWORD[16+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm7,XMMWORD[r12] pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm1,xmm6 movdqa XMMWORD[32+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm8,XMMWORD[16+r12] pxor xmm15,xmm7 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm2,xmm6 movdqa XMMWORD[48+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm9,XMMWORD[32+r12] pxor xmm0,xmm8 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm3,xmm6 movdqa XMMWORD[64+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm10,XMMWORD[48+r12] pxor xmm1,xmm9 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm4,xmm6 movdqa XMMWORD[80+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm11,XMMWORD[64+r12] pxor xmm2,xmm10 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm5,xmm6 movdqa XMMWORD[96+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm12,XMMWORD[80+r12] pxor xmm3,xmm11 movdqu xmm13,XMMWORD[96+r12] pxor xmm4,xmm12 movdqu xmm14,XMMWORD[112+r12] lea r12,[128+r12] movdqa XMMWORD[112+rsp],xmm6 pxor xmm5,xmm13 lea rax,[128+rsp] pxor xmm6,xmm14 mov r10d,edx call _bsaes_decrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm5,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 pxor xmm3,XMMWORD[48+rsp] movdqu XMMWORD[32+r13],xmm5 pxor xmm1,XMMWORD[64+rsp] movdqu XMMWORD[48+r13],xmm3 pxor xmm6,XMMWORD[80+rsp] movdqu XMMWORD[64+r13],xmm1 pxor xmm2,XMMWORD[96+rsp] movdqu XMMWORD[80+r13],xmm6 pxor xmm4,XMMWORD[112+rsp] movdqu XMMWORD[96+r13],xmm2 movdqu XMMWORD[112+r13],xmm4 lea r13,[128+r13] movdqa xmm6,XMMWORD[112+rsp] pxor xmm14,xmm14 movdqa xmm12,XMMWORD[$L$xts_magic] pcmpgtd xmm14,xmm6 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 sub r14,0x80 jnc NEAR $L$xts_dec_loop $L$xts_dec_short: add r14,0x80 jz NEAR $L$xts_dec_done pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm15,xmm6 movdqa XMMWORD[rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm0,xmm6 movdqa XMMWORD[16+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm7,XMMWORD[r12] cmp r14,16 je NEAR $L$xts_dec_1 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm1,xmm6 movdqa XMMWORD[32+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm8,XMMWORD[16+r12] cmp r14,32 je NEAR $L$xts_dec_2 pxor xmm15,xmm7 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm2,xmm6 movdqa XMMWORD[48+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm9,XMMWORD[32+r12] cmp r14,48 je NEAR $L$xts_dec_3 pxor xmm0,xmm8 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm3,xmm6 movdqa XMMWORD[64+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm10,XMMWORD[48+r12] cmp r14,64 je NEAR $L$xts_dec_4 pxor xmm1,xmm9 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm4,xmm6 movdqa XMMWORD[80+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm11,XMMWORD[64+r12] cmp r14,80 je NEAR $L$xts_dec_5 pxor xmm2,xmm10 pshufd xmm13,xmm14,0x13 pxor xmm14,xmm14 movdqa xmm5,xmm6 movdqa XMMWORD[96+rsp],xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 pcmpgtd xmm14,xmm6 pxor xmm6,xmm13 movdqu xmm12,XMMWORD[80+r12] cmp r14,96 je NEAR $L$xts_dec_6 pxor xmm3,xmm11 movdqu xmm13,XMMWORD[96+r12] pxor xmm4,xmm12 movdqa XMMWORD[112+rsp],xmm6 lea r12,[112+r12] pxor xmm5,xmm13 lea rax,[128+rsp] mov r10d,edx call _bsaes_decrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm5,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 pxor xmm3,XMMWORD[48+rsp] movdqu XMMWORD[32+r13],xmm5 pxor xmm1,XMMWORD[64+rsp] movdqu XMMWORD[48+r13],xmm3 pxor xmm6,XMMWORD[80+rsp] movdqu XMMWORD[64+r13],xmm1 pxor xmm2,XMMWORD[96+rsp] movdqu XMMWORD[80+r13],xmm6 movdqu XMMWORD[96+r13],xmm2 lea r13,[112+r13] movdqa xmm6,XMMWORD[112+rsp] jmp NEAR $L$xts_dec_done ALIGN 16 $L$xts_dec_6: pxor xmm3,xmm11 lea r12,[96+r12] pxor xmm4,xmm12 lea rax,[128+rsp] mov r10d,edx call _bsaes_decrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm5,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 pxor xmm3,XMMWORD[48+rsp] movdqu XMMWORD[32+r13],xmm5 pxor xmm1,XMMWORD[64+rsp] movdqu XMMWORD[48+r13],xmm3 pxor xmm6,XMMWORD[80+rsp] movdqu XMMWORD[64+r13],xmm1 movdqu XMMWORD[80+r13],xmm6 lea r13,[96+r13] movdqa xmm6,XMMWORD[96+rsp] jmp NEAR $L$xts_dec_done ALIGN 16 $L$xts_dec_5: pxor xmm2,xmm10 lea r12,[80+r12] pxor xmm3,xmm11 lea rax,[128+rsp] mov r10d,edx call _bsaes_decrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm5,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 pxor xmm3,XMMWORD[48+rsp] movdqu XMMWORD[32+r13],xmm5 pxor xmm1,XMMWORD[64+rsp] movdqu XMMWORD[48+r13],xmm3 movdqu XMMWORD[64+r13],xmm1 lea r13,[80+r13] movdqa xmm6,XMMWORD[80+rsp] jmp NEAR $L$xts_dec_done ALIGN 16 $L$xts_dec_4: pxor xmm1,xmm9 lea r12,[64+r12] pxor xmm2,xmm10 lea rax,[128+rsp] mov r10d,edx call _bsaes_decrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm5,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 pxor xmm3,XMMWORD[48+rsp] movdqu XMMWORD[32+r13],xmm5 movdqu XMMWORD[48+r13],xmm3 lea r13,[64+r13] movdqa xmm6,XMMWORD[64+rsp] jmp NEAR $L$xts_dec_done ALIGN 16 $L$xts_dec_3: pxor xmm0,xmm8 lea r12,[48+r12] pxor xmm1,xmm9 lea rax,[128+rsp] mov r10d,edx call _bsaes_decrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 pxor xmm5,XMMWORD[32+rsp] movdqu XMMWORD[16+r13],xmm0 movdqu XMMWORD[32+r13],xmm5 lea r13,[48+r13] movdqa xmm6,XMMWORD[48+rsp] jmp NEAR $L$xts_dec_done ALIGN 16 $L$xts_dec_2: pxor xmm15,xmm7 lea r12,[32+r12] pxor xmm0,xmm8 lea rax,[128+rsp] mov r10d,edx call _bsaes_decrypt8 pxor xmm15,XMMWORD[rsp] pxor xmm0,XMMWORD[16+rsp] movdqu XMMWORD[r13],xmm15 movdqu XMMWORD[16+r13],xmm0 lea r13,[32+r13] movdqa xmm6,XMMWORD[32+rsp] jmp NEAR $L$xts_dec_done ALIGN 16 $L$xts_dec_1: pxor xmm7,xmm15 lea r12,[16+r12] movdqa XMMWORD[32+rbp],xmm7 lea rcx,[32+rbp] lea rdx,[32+rbp] lea r8,[r15] call asm_AES_decrypt pxor xmm15,XMMWORD[32+rbp] movdqu XMMWORD[r13],xmm15 lea r13,[16+r13] movdqa xmm6,XMMWORD[16+rsp] $L$xts_dec_done: and ebx,15 jz NEAR $L$xts_dec_ret pxor xmm14,xmm14 movdqa xmm12,XMMWORD[$L$xts_magic] pcmpgtd xmm14,xmm6 pshufd xmm13,xmm14,0x13 movdqa xmm5,xmm6 paddq xmm6,xmm6 pand xmm13,xmm12 movdqu xmm15,XMMWORD[r12] pxor xmm6,xmm13 lea rcx,[32+rbp] pxor xmm15,xmm6 lea rdx,[32+rbp] movdqa XMMWORD[32+rbp],xmm15 lea r8,[r15] call asm_AES_decrypt pxor xmm6,XMMWORD[32+rbp] mov rdx,r13 movdqu XMMWORD[r13],xmm6 $L$xts_dec_steal: movzx eax,BYTE[16+r12] movzx ecx,BYTE[rdx] lea r12,[1+r12] mov BYTE[rdx],al mov BYTE[16+rdx],cl lea rdx,[1+rdx] sub ebx,1 jnz NEAR $L$xts_dec_steal movdqu xmm15,XMMWORD[r13] lea rcx,[32+rbp] pxor xmm15,xmm5 lea rdx,[32+rbp] movdqa XMMWORD[32+rbp],xmm15 lea r8,[r15] call asm_AES_decrypt pxor xmm5,XMMWORD[32+rbp] movdqu XMMWORD[r13],xmm5 $L$xts_dec_ret: lea rax,[rsp] pxor xmm0,xmm0 $L$xts_dec_bzero: movdqa XMMWORD[rax],xmm0 movdqa XMMWORD[16+rax],xmm0 lea rax,[32+rax] cmp rbp,rax ja NEAR $L$xts_dec_bzero lea rax,[120+rbp] movaps xmm6,XMMWORD[64+rbp] movaps xmm7,XMMWORD[80+rbp] movaps xmm8,XMMWORD[96+rbp] movaps xmm9,XMMWORD[112+rbp] movaps xmm10,XMMWORD[128+rbp] movaps xmm11,XMMWORD[144+rbp] movaps xmm12,XMMWORD[160+rbp] movaps xmm13,XMMWORD[176+rbp] movaps xmm14,XMMWORD[192+rbp] movaps xmm15,XMMWORD[208+rbp] lea rax,[160+rax] $L$xts_dec_tail: mov r15,QWORD[((-48))+rax] mov r14,QWORD[((-40))+rax] mov r13,QWORD[((-32))+rax] mov r12,QWORD[((-24))+rax] mov rbx,QWORD[((-16))+rax] mov rbp,QWORD[((-8))+rax] lea rsp,[rax] $L$xts_dec_epilogue: DB 0F3h,0C3h ;repret ALIGN 64 _bsaes_const: $L$M0ISR: DQ 0x0a0e0206070b0f03,0x0004080c0d010509 $L$ISRM0: DQ 0x01040b0e0205080f,0x0306090c00070a0d $L$ISR: DQ 0x0504070602010003,0x0f0e0d0c080b0a09 $L$BS0: DQ 0x5555555555555555,0x5555555555555555 $L$BS1: DQ 0x3333333333333333,0x3333333333333333 $L$BS2: DQ 0x0f0f0f0f0f0f0f0f,0x0f0f0f0f0f0f0f0f $L$SR: DQ 0x0504070600030201,0x0f0e0d0c0a09080b $L$SRM0: DQ 0x0304090e00050a0f,0x01060b0c0207080d $L$M0SR: DQ 0x0a0e02060f03070b,0x0004080c05090d01 $L$SWPUP: DQ 0x0706050403020100,0x0c0d0e0f0b0a0908 $L$SWPUPM0SR: DQ 0x0a0d02060c03070b,0x0004080f05090e01 $L$ADD1: DQ 0x0000000000000000,0x0000000100000000 $L$ADD2: DQ 0x0000000000000000,0x0000000200000000 $L$ADD3: DQ 0x0000000000000000,0x0000000300000000 $L$ADD4: DQ 0x0000000000000000,0x0000000400000000 $L$ADD5: DQ 0x0000000000000000,0x0000000500000000 $L$ADD6: DQ 0x0000000000000000,0x0000000600000000 $L$ADD7: DQ 0x0000000000000000,0x0000000700000000 $L$ADD8: DQ 0x0000000000000000,0x0000000800000000 $L$xts_magic: DD 0x87,0,1,0 $L$masks: DQ 0x0101010101010101,0x0101010101010101 DQ 0x0202020202020202,0x0202020202020202 DQ 0x0404040404040404,0x0404040404040404 DQ 0x0808080808080808,0x0808080808080808 $L$M0: DQ 0x02060a0e03070b0f,0x0004080c0105090d $L$63: DQ 0x6363636363636363,0x6363636363636363 DB 66,105,116,45,115,108,105,99,101,100,32,65,69,83,32,102 DB 111,114,32,120,56,54,95,54,52,47,83,83,83,69,51,44 DB 32,69,109,105,108,105,97,32,75,195,164,115,112,101,114,44 DB 32,80,101,116,101,114,32,83,99,104,119,97,98,101,44,32 DB 65,110,100,121,32,80,111,108,121,97,107,111,118,0 ALIGN 64 EXTERN __imp_RtlVirtualUnwind ALIGN 16 se_handler: push rsi push rdi push rbx push rbp push r12 push r13 push r14 push r15 pushfq sub rsp,64 mov rax,QWORD[120+r8] mov rbx,QWORD[248+r8] mov rsi,QWORD[8+r9] mov r11,QWORD[56+r9] mov r10d,DWORD[r11] lea r10,[r10*1+rsi] cmp rbx,r10 jbe NEAR $L$in_prologue mov r10d,DWORD[4+r11] lea r10,[r10*1+rsi] cmp rbx,r10 jae NEAR $L$in_prologue mov r10d,DWORD[8+r11] lea r10,[r10*1+rsi] cmp rbx,r10 jae NEAR $L$in_tail mov rax,QWORD[160+r8] lea rsi,[64+rax] lea rdi,[512+r8] mov ecx,20 DD 0xa548f3fc lea rax,[((160+120))+rax] $L$in_tail: mov rbp,QWORD[((-48))+rax] mov rbx,QWORD[((-40))+rax] mov r12,QWORD[((-32))+rax] mov r13,QWORD[((-24))+rax] mov r14,QWORD[((-16))+rax] mov r15,QWORD[((-8))+rax] mov QWORD[144+r8],rbx mov QWORD[160+r8],rbp mov QWORD[216+r8],r12 mov QWORD[224+r8],r13 mov QWORD[232+r8],r14 mov QWORD[240+r8],r15 $L$in_prologue: mov QWORD[152+r8],rax mov rdi,QWORD[40+r9] mov rsi,r8 mov ecx,154 DD 0xa548f3fc mov rsi,r9 xor rcx,rcx mov rdx,QWORD[8+rsi] mov r8,QWORD[rsi] mov r9,QWORD[16+rsi] mov r10,QWORD[40+rsi] lea r11,[56+rsi] lea r12,[24+rsi] mov QWORD[32+rsp],r10 mov QWORD[40+rsp],r11 mov QWORD[48+rsp],r12 mov QWORD[56+rsp],rcx call QWORD[__imp_RtlVirtualUnwind] mov eax,1 add rsp,64 popfq pop r15 pop r14 pop r13 pop r12 pop rbp pop rbx pop rdi pop rsi DB 0F3h,0C3h ;repret section .pdata rdata align=4 ALIGN 4 DD $L$cbc_dec_prologue wrt ..imagebase DD $L$cbc_dec_epilogue wrt ..imagebase DD $L$cbc_dec_info wrt ..imagebase DD $L$ctr_enc_prologue wrt ..imagebase DD $L$ctr_enc_epilogue wrt ..imagebase DD $L$ctr_enc_info wrt ..imagebase DD $L$xts_enc_prologue wrt ..imagebase DD $L$xts_enc_epilogue wrt ..imagebase DD $L$xts_enc_info wrt ..imagebase DD $L$xts_dec_prologue wrt ..imagebase DD $L$xts_dec_epilogue wrt ..imagebase DD $L$xts_dec_info wrt ..imagebase section .xdata rdata align=8 ALIGN 8 $L$cbc_dec_info: DB 9,0,0,0 DD se_handler wrt ..imagebase DD $L$cbc_dec_body wrt ..imagebase,$L$cbc_dec_epilogue wrt ..imagebase DD $L$cbc_dec_tail wrt ..imagebase DD 0 $L$ctr_enc_info: DB 9,0,0,0 DD se_handler wrt ..imagebase DD $L$ctr_enc_body wrt ..imagebase,$L$ctr_enc_epilogue wrt ..imagebase DD $L$ctr_enc_tail wrt ..imagebase DD 0 $L$xts_enc_info: DB 9,0,0,0 DD se_handler wrt ..imagebase DD $L$xts_enc_body wrt ..imagebase,$L$xts_enc_epilogue wrt ..imagebase DD $L$xts_enc_tail wrt ..imagebase DD 0 $L$xts_dec_info: DB 9,0,0,0 DD se_handler wrt ..imagebase DD $L$xts_dec_body wrt ..imagebase,$L$xts_dec_epilogue wrt ..imagebase DD $L$xts_dec_tail wrt ..imagebase DD 0