; This file is generated from a similarly-named Perl script in the BoringSSL ; source tree. Do not edit by hand. %ifdef BORINGSSL_PREFIX %include "boringssl_prefix_symbols_nasm.inc" %endif %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 %ifdef BORINGSSL_DISPATCH_TEST extern _BORINGSSL_function_hit %endif align 64 L$_vpaes_consts: dd 218628480,235210255,168496130,67568393 dd 252381056,17041926,33884169,51187212 dd 252645135,252645135,252645135,252645135 dd 1512730624,3266504856,1377990664,3401244816 dd 830229760,1275146365,2969422977,3447763452 dd 3411033600,2979783055,338359620,2782886510 dd 4209124096,907596821,221174255,1006095553 dd 191964160,3799684038,3164090317,1589111125 dd 182528256,1777043520,2877432650,3265356744 dd 1874708224,3503451415,3305285752,363511674 dd 1606117888,3487855781,1093350906,2384367825 dd 197121,67569157,134941193,202313229 dd 67569157,134941193,202313229,197121 dd 134941193,202313229,197121,67569157 dd 202313229,197121,67569157,134941193 dd 33619971,100992007,168364043,235736079 dd 235736079,33619971,100992007,168364043 dd 168364043,235736079,33619971,100992007 dd 100992007,168364043,235736079,33619971 dd 50462976,117835012,185207048,252579084 dd 252314880,51251460,117574920,184942860 dd 184682752,252054788,50987272,118359308 dd 118099200,185467140,251790600,50727180 dd 2946363062,528716217,1300004225,1881839624 dd 1532713819,1532713819,1532713819,1532713819 dd 3602276352,4288629033,3737020424,4153884961 dd 1354558464,32357713,2958822624,3775749553 dd 1201988352,132424512,1572796698,503232858 dd 2213177600,1597421020,4103937655,675398315 dd 2749646592,4273543773,1511898873,121693092 dd 3040248576,1103263732,2871565598,1608280554 dd 2236667136,2588920351,482954393,64377734 dd 3069987328,291237287,2117370568,3650299247 dd 533321216,3573750986,2572112006,1401264716 dd 1339849704,2721158661,548607111,3445553514 dd 2128193280,3054596040,2183486460,1257083700 dd 655635200,1165381986,3923443150,2344132524 dd 190078720,256924420,290342170,357187870 dd 1610966272,2263057382,4103205268,309794674 dd 2592527872,2233205587,1335446729,3402964816 dd 3973531904,3225098121,3002836325,1918774430 dd 3870401024,2102906079,2284471353,4117666579 dd 617007872,1021508343,366931923,691083277 dd 2528395776,3491914898,2968704004,1613121270 dd 3445188352,3247741094,844474987,4093578302 dd 651481088,1190302358,1689581232,574775300 dd 4289380608,206939853,2555985458,2489840491 dd 2130264064,327674451,3566485037,3349835193 dd 2470714624,316102159,3636825756,3393945945 db 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 db 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83 db 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117 db 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105 db 118,101,114,115,105,116,121,41,0 align 64 align 16 __vpaes_preheat: add ebp,DWORD [esp] movdqa xmm7,[ebp-48] movdqa xmm6,[ebp-16] ret align 16 __vpaes_encrypt_core: mov ecx,16 mov eax,DWORD [240+edx] movdqa xmm1,xmm6 movdqa xmm2,[ebp] pandn xmm1,xmm0 pand xmm0,xmm6 movdqu xmm5,[edx] db 102,15,56,0,208 movdqa xmm0,[16+ebp] pxor xmm2,xmm5 psrld xmm1,4 add edx,16 db 102,15,56,0,193 lea ebx,[192+ebp] pxor xmm0,xmm2 jmp NEAR L$000enc_entry align 16 L$001enc_loop: movdqa xmm4,[32+ebp] movdqa xmm0,[48+ebp] db 102,15,56,0,226 db 102,15,56,0,195 pxor xmm4,xmm5 movdqa xmm5,[64+ebp] pxor xmm0,xmm4 movdqa xmm1,[ecx*1+ebx-64] db 102,15,56,0,234 movdqa xmm2,[80+ebp] movdqa xmm4,[ecx*1+ebx] db 102,15,56,0,211 movdqa xmm3,xmm0 pxor xmm2,xmm5 db 102,15,56,0,193 add edx,16 pxor xmm0,xmm2 db 102,15,56,0,220 add ecx,16 pxor xmm3,xmm0 db 102,15,56,0,193 and ecx,48 sub eax,1 pxor xmm0,xmm3 L$000enc_entry: movdqa xmm1,xmm6 movdqa xmm5,[ebp-32] pandn xmm1,xmm0 psrld xmm1,4 pand xmm0,xmm6 db 102,15,56,0,232 movdqa xmm3,xmm7 pxor xmm0,xmm1 db 102,15,56,0,217 movdqa xmm4,xmm7 pxor xmm3,xmm5 db 102,15,56,0,224 movdqa xmm2,xmm7 pxor xmm4,xmm5 db 102,15,56,0,211 movdqa xmm3,xmm7 pxor xmm2,xmm0 db 102,15,56,0,220 movdqu xmm5,[edx] pxor xmm3,xmm1 jnz NEAR L$001enc_loop movdqa xmm4,[96+ebp] movdqa xmm0,[112+ebp] db 102,15,56,0,226 pxor xmm4,xmm5 db 102,15,56,0,195 movdqa xmm1,[64+ecx*1+ebx] pxor xmm0,xmm4 db 102,15,56,0,193 ret align 16 __vpaes_decrypt_core: lea ebx,[608+ebp] mov eax,DWORD [240+edx] movdqa xmm1,xmm6 movdqa xmm2,[ebx-64] pandn xmm1,xmm0 mov ecx,eax psrld xmm1,4 movdqu xmm5,[edx] shl ecx,4 pand xmm0,xmm6 db 102,15,56,0,208 movdqa xmm0,[ebx-48] xor ecx,48 db 102,15,56,0,193 and ecx,48 pxor xmm2,xmm5 movdqa xmm5,[176+ebp] pxor xmm0,xmm2 add edx,16 lea ecx,[ecx*1+ebx-352] jmp NEAR L$002dec_entry align 16 L$003dec_loop: movdqa xmm4,[ebx-32] movdqa xmm1,[ebx-16] db 102,15,56,0,226 db 102,15,56,0,203 pxor xmm0,xmm4 movdqa xmm4,[ebx] pxor xmm0,xmm1 movdqa xmm1,[16+ebx] db 102,15,56,0,226 db 102,15,56,0,197 db 102,15,56,0,203 pxor xmm0,xmm4 movdqa xmm4,[32+ebx] pxor xmm0,xmm1 movdqa xmm1,[48+ebx] db 102,15,56,0,226 db 102,15,56,0,197 db 102,15,56,0,203 pxor xmm0,xmm4 movdqa xmm4,[64+ebx] pxor xmm0,xmm1 movdqa xmm1,[80+ebx] db 102,15,56,0,226 db 102,15,56,0,197 db 102,15,56,0,203 pxor xmm0,xmm4 add edx,16 db 102,15,58,15,237,12 pxor xmm0,xmm1 sub eax,1 L$002dec_entry: movdqa xmm1,xmm6 movdqa xmm2,[ebp-32] pandn xmm1,xmm0 pand xmm0,xmm6 psrld xmm1,4 db 102,15,56,0,208 movdqa xmm3,xmm7 pxor xmm0,xmm1 db 102,15,56,0,217 movdqa xmm4,xmm7 pxor xmm3,xmm2 db 102,15,56,0,224 pxor xmm4,xmm2 movdqa xmm2,xmm7 db 102,15,56,0,211 movdqa xmm3,xmm7 pxor xmm2,xmm0 db 102,15,56,0,220 movdqu xmm0,[edx] pxor xmm3,xmm1 jnz NEAR L$003dec_loop movdqa xmm4,[96+ebx] db 102,15,56,0,226 pxor xmm4,xmm0 movdqa xmm0,[112+ebx] movdqa xmm2,[ecx] db 102,15,56,0,195 pxor xmm0,xmm4 db 102,15,56,0,194 ret align 16 __vpaes_schedule_core: add ebp,DWORD [esp] movdqu xmm0,[esi] movdqa xmm2,[320+ebp] movdqa xmm3,xmm0 lea ebx,[ebp] movdqa [4+esp],xmm2 call __vpaes_schedule_transform movdqa xmm7,xmm0 test edi,edi jnz NEAR L$004schedule_am_decrypting movdqu [edx],xmm0 jmp NEAR L$005schedule_go L$004schedule_am_decrypting: movdqa xmm1,[256+ecx*1+ebp] db 102,15,56,0,217 movdqu [edx],xmm3 xor ecx,48 L$005schedule_go: cmp eax,192 ja NEAR L$006schedule_256 je NEAR L$007schedule_192 L$008schedule_128: mov eax,10 L$009loop_schedule_128: call __vpaes_schedule_round dec eax jz NEAR L$010schedule_mangle_last call __vpaes_schedule_mangle jmp NEAR L$009loop_schedule_128 align 16 L$007schedule_192: movdqu xmm0,[8+esi] call __vpaes_schedule_transform movdqa xmm6,xmm0 pxor xmm4,xmm4 movhlps xmm6,xmm4 mov eax,4 L$011loop_schedule_192: call __vpaes_schedule_round db 102,15,58,15,198,8 call __vpaes_schedule_mangle call __vpaes_schedule_192_smear call __vpaes_schedule_mangle call __vpaes_schedule_round dec eax jz NEAR L$010schedule_mangle_last call __vpaes_schedule_mangle call __vpaes_schedule_192_smear jmp NEAR L$011loop_schedule_192 align 16 L$006schedule_256: movdqu xmm0,[16+esi] call __vpaes_schedule_transform mov eax,7 L$012loop_schedule_256: call __vpaes_schedule_mangle movdqa xmm6,xmm0 call __vpaes_schedule_round dec eax jz NEAR L$010schedule_mangle_last call __vpaes_schedule_mangle pshufd xmm0,xmm0,255 movdqa [20+esp],xmm7 movdqa xmm7,xmm6 call L$_vpaes_schedule_low_round movdqa xmm7,[20+esp] jmp NEAR L$012loop_schedule_256 align 16 L$010schedule_mangle_last: lea ebx,[384+ebp] test edi,edi jnz NEAR L$013schedule_mangle_last_dec movdqa xmm1,[256+ecx*1+ebp] db 102,15,56,0,193 lea ebx,[352+ebp] add edx,32 L$013schedule_mangle_last_dec: add edx,-16 pxor xmm0,[336+ebp] call __vpaes_schedule_transform movdqu [edx],xmm0 pxor xmm0,xmm0 pxor xmm1,xmm1 pxor xmm2,xmm2 pxor xmm3,xmm3 pxor xmm4,xmm4 pxor xmm5,xmm5 pxor xmm6,xmm6 pxor xmm7,xmm7 ret align 16 __vpaes_schedule_192_smear: pshufd xmm1,xmm6,128 pshufd xmm0,xmm7,254 pxor xmm6,xmm1 pxor xmm1,xmm1 pxor xmm6,xmm0 movdqa xmm0,xmm6 movhlps xmm6,xmm1 ret align 16 __vpaes_schedule_round: movdqa xmm2,[8+esp] pxor xmm1,xmm1 db 102,15,58,15,202,15 db 102,15,58,15,210,15 pxor xmm7,xmm1 pshufd xmm0,xmm0,255 db 102,15,58,15,192,1 movdqa [8+esp],xmm2 L$_vpaes_schedule_low_round: movdqa xmm1,xmm7 pslldq xmm7,4 pxor xmm7,xmm1 movdqa xmm1,xmm7 pslldq xmm7,8 pxor xmm7,xmm1 pxor xmm7,[336+ebp] movdqa xmm4,[ebp-16] movdqa xmm5,[ebp-48] movdqa xmm1,xmm4 pandn xmm1,xmm0 psrld xmm1,4 pand xmm0,xmm4 movdqa xmm2,[ebp-32] db 102,15,56,0,208 pxor xmm0,xmm1 movdqa xmm3,xmm5 db 102,15,56,0,217 pxor xmm3,xmm2 movdqa xmm4,xmm5 db 102,15,56,0,224 pxor xmm4,xmm2 movdqa xmm2,xmm5 db 102,15,56,0,211 pxor xmm2,xmm0 movdqa xmm3,xmm5 db 102,15,56,0,220 pxor xmm3,xmm1 movdqa xmm4,[32+ebp] db 102,15,56,0,226 movdqa xmm0,[48+ebp] db 102,15,56,0,195 pxor xmm0,xmm4 pxor xmm0,xmm7 movdqa xmm7,xmm0 ret align 16 __vpaes_schedule_transform: movdqa xmm2,[ebp-16] movdqa xmm1,xmm2 pandn xmm1,xmm0 psrld xmm1,4 pand xmm0,xmm2 movdqa xmm2,[ebx] db 102,15,56,0,208 movdqa xmm0,[16+ebx] db 102,15,56,0,193 pxor xmm0,xmm2 ret align 16 __vpaes_schedule_mangle: movdqa xmm4,xmm0 movdqa xmm5,[128+ebp] test edi,edi jnz NEAR L$014schedule_mangle_dec add edx,16 pxor xmm4,[336+ebp] db 102,15,56,0,229 movdqa xmm3,xmm4 db 102,15,56,0,229 pxor xmm3,xmm4 db 102,15,56,0,229 pxor xmm3,xmm4 jmp NEAR L$015schedule_mangle_both align 16 L$014schedule_mangle_dec: movdqa xmm2,[ebp-16] lea esi,[416+ebp] movdqa xmm1,xmm2 pandn xmm1,xmm4 psrld xmm1,4 pand xmm4,xmm2 movdqa xmm2,[esi] db 102,15,56,0,212 movdqa xmm3,[16+esi] db 102,15,56,0,217 pxor xmm3,xmm2 db 102,15,56,0,221 movdqa xmm2,[32+esi] db 102,15,56,0,212 pxor xmm2,xmm3 movdqa xmm3,[48+esi] db 102,15,56,0,217 pxor xmm3,xmm2 db 102,15,56,0,221 movdqa xmm2,[64+esi] db 102,15,56,0,212 pxor xmm2,xmm3 movdqa xmm3,[80+esi] db 102,15,56,0,217 pxor xmm3,xmm2 db 102,15,56,0,221 movdqa xmm2,[96+esi] db 102,15,56,0,212 pxor xmm2,xmm3 movdqa xmm3,[112+esi] db 102,15,56,0,217 pxor xmm3,xmm2 add edx,-16 L$015schedule_mangle_both: movdqa xmm1,[256+ecx*1+ebp] db 102,15,56,0,217 add ecx,-16 and ecx,48 movdqu [edx],xmm3 ret global _vpaes_set_encrypt_key align 16 _vpaes_set_encrypt_key: L$_vpaes_set_encrypt_key_begin: push ebp push ebx push esi push edi %ifdef BORINGSSL_DISPATCH_TEST push ebx push edx call L$016pic L$016pic: pop ebx lea ebx,[(_BORINGSSL_function_hit+5-L$016pic)+ebx] mov edx,1 mov BYTE [ebx],dl pop edx pop ebx %endif mov esi,DWORD [20+esp] lea ebx,[esp-56] mov eax,DWORD [24+esp] and ebx,-16 mov edx,DWORD [28+esp] xchg ebx,esp mov DWORD [48+esp],ebx mov ebx,eax shr ebx,5 add ebx,5 mov DWORD [240+edx],ebx mov ecx,48 mov edi,0 lea ebp,[(L$_vpaes_consts+0x30-L$017pic_point)] call __vpaes_schedule_core L$017pic_point: mov esp,DWORD [48+esp] xor eax,eax pop edi pop esi pop ebx pop ebp ret global _vpaes_set_decrypt_key align 16 _vpaes_set_decrypt_key: L$_vpaes_set_decrypt_key_begin: push ebp push ebx push esi push edi mov esi,DWORD [20+esp] lea ebx,[esp-56] mov eax,DWORD [24+esp] and ebx,-16 mov edx,DWORD [28+esp] xchg ebx,esp mov DWORD [48+esp],ebx mov ebx,eax shr ebx,5 add ebx,5 mov DWORD [240+edx],ebx shl ebx,4 lea edx,[16+ebx*1+edx] mov edi,1 mov ecx,eax shr ecx,1 and ecx,32 xor ecx,32 lea ebp,[(L$_vpaes_consts+0x30-L$018pic_point)] call __vpaes_schedule_core L$018pic_point: mov esp,DWORD [48+esp] xor eax,eax pop edi pop esi pop ebx pop ebp ret global _vpaes_encrypt align 16 _vpaes_encrypt: L$_vpaes_encrypt_begin: push ebp push ebx push esi push edi %ifdef BORINGSSL_DISPATCH_TEST push ebx push edx call L$019pic L$019pic: pop ebx lea ebx,[(_BORINGSSL_function_hit+4-L$019pic)+ebx] mov edx,1 mov BYTE [ebx],dl pop edx pop ebx %endif lea ebp,[(L$_vpaes_consts+0x30-L$020pic_point)] call __vpaes_preheat L$020pic_point: mov esi,DWORD [20+esp] lea ebx,[esp-56] mov edi,DWORD [24+esp] and ebx,-16 mov edx,DWORD [28+esp] xchg ebx,esp mov DWORD [48+esp],ebx movdqu xmm0,[esi] call __vpaes_encrypt_core movdqu [edi],xmm0 mov esp,DWORD [48+esp] pop edi pop esi pop ebx pop ebp ret global _vpaes_decrypt align 16 _vpaes_decrypt: L$_vpaes_decrypt_begin: push ebp push ebx push esi push edi lea ebp,[(L$_vpaes_consts+0x30-L$021pic_point)] call __vpaes_preheat L$021pic_point: mov esi,DWORD [20+esp] lea ebx,[esp-56] mov edi,DWORD [24+esp] and ebx,-16 mov edx,DWORD [28+esp] xchg ebx,esp mov DWORD [48+esp],ebx movdqu xmm0,[esi] call __vpaes_decrypt_core movdqu [edi],xmm0 mov esp,DWORD [48+esp] pop edi pop esi pop ebx pop ebp ret global _vpaes_cbc_encrypt align 16 _vpaes_cbc_encrypt: L$_vpaes_cbc_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] sub eax,16 jc NEAR L$022cbc_abort lea ebx,[esp-56] mov ebp,DWORD [36+esp] and ebx,-16 mov ecx,DWORD [40+esp] xchg ebx,esp movdqu xmm1,[ebp] sub edi,esi mov DWORD [48+esp],ebx mov DWORD [esp],edi mov DWORD [4+esp],edx mov DWORD [8+esp],ebp mov edi,eax lea ebp,[(L$_vpaes_consts+0x30-L$023pic_point)] call __vpaes_preheat L$023pic_point: cmp ecx,0 je NEAR L$024cbc_dec_loop jmp NEAR L$025cbc_enc_loop align 16 L$025cbc_enc_loop: movdqu xmm0,[esi] pxor xmm0,xmm1 call __vpaes_encrypt_core mov ebx,DWORD [esp] mov edx,DWORD [4+esp] movdqa xmm1,xmm0 movdqu [esi*1+ebx],xmm0 lea esi,[16+esi] sub edi,16 jnc NEAR L$025cbc_enc_loop jmp NEAR L$026cbc_done align 16 L$024cbc_dec_loop: movdqu xmm0,[esi] movdqa [16+esp],xmm1 movdqa [32+esp],xmm0 call __vpaes_decrypt_core mov ebx,DWORD [esp] mov edx,DWORD [4+esp] pxor xmm0,[16+esp] movdqa xmm1,[32+esp] movdqu [esi*1+ebx],xmm0 lea esi,[16+esi] sub edi,16 jnc NEAR L$024cbc_dec_loop L$026cbc_done: mov ebx,DWORD [8+esp] mov esp,DWORD [48+esp] movdqu [ebx],xmm1 L$022cbc_abort: pop edi pop esi pop ebx pop ebp ret