1; This file is generated from a similarly-named Perl script in the BoringSSL 2; source tree. Do not edit by hand. 3 4%ifdef BORINGSSL_PREFIX 5%include "boringssl_prefix_symbols_nasm.inc" 6%endif 7%ifidn __OUTPUT_FORMAT__,obj 8section code use32 class=code align=64 9%elifidn __OUTPUT_FORMAT__,win32 10$@feat.00 equ 1 11section .text code align=64 12%else 13section .text code 14%endif 15%ifdef BORINGSSL_DISPATCH_TEST 16extern _BORINGSSL_function_hit 17%endif 18align 64 19L$_vpaes_consts: 20dd 218628480,235210255,168496130,67568393 21dd 252381056,17041926,33884169,51187212 22dd 252645135,252645135,252645135,252645135 23dd 1512730624,3266504856,1377990664,3401244816 24dd 830229760,1275146365,2969422977,3447763452 25dd 3411033600,2979783055,338359620,2782886510 26dd 4209124096,907596821,221174255,1006095553 27dd 191964160,3799684038,3164090317,1589111125 28dd 182528256,1777043520,2877432650,3265356744 29dd 1874708224,3503451415,3305285752,363511674 30dd 1606117888,3487855781,1093350906,2384367825 31dd 197121,67569157,134941193,202313229 32dd 67569157,134941193,202313229,197121 33dd 134941193,202313229,197121,67569157 34dd 202313229,197121,67569157,134941193 35dd 33619971,100992007,168364043,235736079 36dd 235736079,33619971,100992007,168364043 37dd 168364043,235736079,33619971,100992007 38dd 100992007,168364043,235736079,33619971 39dd 50462976,117835012,185207048,252579084 40dd 252314880,51251460,117574920,184942860 41dd 184682752,252054788,50987272,118359308 42dd 118099200,185467140,251790600,50727180 43dd 2946363062,528716217,1300004225,1881839624 44dd 1532713819,1532713819,1532713819,1532713819 45dd 3602276352,4288629033,3737020424,4153884961 46dd 1354558464,32357713,2958822624,3775749553 47dd 1201988352,132424512,1572796698,503232858 48dd 2213177600,1597421020,4103937655,675398315 49dd 2749646592,4273543773,1511898873,121693092 50dd 3040248576,1103263732,2871565598,1608280554 51dd 2236667136,2588920351,482954393,64377734 52dd 3069987328,291237287,2117370568,3650299247 53dd 533321216,3573750986,2572112006,1401264716 54dd 1339849704,2721158661,548607111,3445553514 55dd 2128193280,3054596040,2183486460,1257083700 56dd 655635200,1165381986,3923443150,2344132524 57dd 190078720,256924420,290342170,357187870 58dd 1610966272,2263057382,4103205268,309794674 59dd 2592527872,2233205587,1335446729,3402964816 60dd 3973531904,3225098121,3002836325,1918774430 61dd 3870401024,2102906079,2284471353,4117666579 62dd 617007872,1021508343,366931923,691083277 63dd 2528395776,3491914898,2968704004,1613121270 64dd 3445188352,3247741094,844474987,4093578302 65dd 651481088,1190302358,1689581232,574775300 66dd 4289380608,206939853,2555985458,2489840491 67dd 2130264064,327674451,3566485037,3349835193 68dd 2470714624,316102159,3636825756,3393945945 69db 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 70db 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83 71db 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117 72db 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105 73db 118,101,114,115,105,116,121,41,0 74align 64 75align 16 76__vpaes_preheat: 77 add ebp,DWORD [esp] 78 movdqa xmm7,[ebp-48] 79 movdqa xmm6,[ebp-16] 80 ret 81align 16 82__vpaes_encrypt_core: 83 mov ecx,16 84 mov eax,DWORD [240+edx] 85 movdqa xmm1,xmm6 86 movdqa xmm2,[ebp] 87 pandn xmm1,xmm0 88 pand xmm0,xmm6 89 movdqu xmm5,[edx] 90db 102,15,56,0,208 91 movdqa xmm0,[16+ebp] 92 pxor xmm2,xmm5 93 psrld xmm1,4 94 add edx,16 95db 102,15,56,0,193 96 lea ebx,[192+ebp] 97 pxor xmm0,xmm2 98 jmp NEAR L$000enc_entry 99align 16 100L$001enc_loop: 101 movdqa xmm4,[32+ebp] 102 movdqa xmm0,[48+ebp] 103db 102,15,56,0,226 104db 102,15,56,0,195 105 pxor xmm4,xmm5 106 movdqa xmm5,[64+ebp] 107 pxor xmm0,xmm4 108 movdqa xmm1,[ecx*1+ebx-64] 109db 102,15,56,0,234 110 movdqa xmm2,[80+ebp] 111 movdqa xmm4,[ecx*1+ebx] 112db 102,15,56,0,211 113 movdqa xmm3,xmm0 114 pxor xmm2,xmm5 115db 102,15,56,0,193 116 add edx,16 117 pxor xmm0,xmm2 118db 102,15,56,0,220 119 add ecx,16 120 pxor xmm3,xmm0 121db 102,15,56,0,193 122 and ecx,48 123 sub eax,1 124 pxor xmm0,xmm3 125L$000enc_entry: 126 movdqa xmm1,xmm6 127 movdqa xmm5,[ebp-32] 128 pandn xmm1,xmm0 129 psrld xmm1,4 130 pand xmm0,xmm6 131db 102,15,56,0,232 132 movdqa xmm3,xmm7 133 pxor xmm0,xmm1 134db 102,15,56,0,217 135 movdqa xmm4,xmm7 136 pxor xmm3,xmm5 137db 102,15,56,0,224 138 movdqa xmm2,xmm7 139 pxor xmm4,xmm5 140db 102,15,56,0,211 141 movdqa xmm3,xmm7 142 pxor xmm2,xmm0 143db 102,15,56,0,220 144 movdqu xmm5,[edx] 145 pxor xmm3,xmm1 146 jnz NEAR L$001enc_loop 147 movdqa xmm4,[96+ebp] 148 movdqa xmm0,[112+ebp] 149db 102,15,56,0,226 150 pxor xmm4,xmm5 151db 102,15,56,0,195 152 movdqa xmm1,[64+ecx*1+ebx] 153 pxor xmm0,xmm4 154db 102,15,56,0,193 155 ret 156align 16 157__vpaes_decrypt_core: 158 lea ebx,[608+ebp] 159 mov eax,DWORD [240+edx] 160 movdqa xmm1,xmm6 161 movdqa xmm2,[ebx-64] 162 pandn xmm1,xmm0 163 mov ecx,eax 164 psrld xmm1,4 165 movdqu xmm5,[edx] 166 shl ecx,4 167 pand xmm0,xmm6 168db 102,15,56,0,208 169 movdqa xmm0,[ebx-48] 170 xor ecx,48 171db 102,15,56,0,193 172 and ecx,48 173 pxor xmm2,xmm5 174 movdqa xmm5,[176+ebp] 175 pxor xmm0,xmm2 176 add edx,16 177 lea ecx,[ecx*1+ebx-352] 178 jmp NEAR L$002dec_entry 179align 16 180L$003dec_loop: 181 movdqa xmm4,[ebx-32] 182 movdqa xmm1,[ebx-16] 183db 102,15,56,0,226 184db 102,15,56,0,203 185 pxor xmm0,xmm4 186 movdqa xmm4,[ebx] 187 pxor xmm0,xmm1 188 movdqa xmm1,[16+ebx] 189db 102,15,56,0,226 190db 102,15,56,0,197 191db 102,15,56,0,203 192 pxor xmm0,xmm4 193 movdqa xmm4,[32+ebx] 194 pxor xmm0,xmm1 195 movdqa xmm1,[48+ebx] 196db 102,15,56,0,226 197db 102,15,56,0,197 198db 102,15,56,0,203 199 pxor xmm0,xmm4 200 movdqa xmm4,[64+ebx] 201 pxor xmm0,xmm1 202 movdqa xmm1,[80+ebx] 203db 102,15,56,0,226 204db 102,15,56,0,197 205db 102,15,56,0,203 206 pxor xmm0,xmm4 207 add edx,16 208db 102,15,58,15,237,12 209 pxor xmm0,xmm1 210 sub eax,1 211L$002dec_entry: 212 movdqa xmm1,xmm6 213 movdqa xmm2,[ebp-32] 214 pandn xmm1,xmm0 215 pand xmm0,xmm6 216 psrld xmm1,4 217db 102,15,56,0,208 218 movdqa xmm3,xmm7 219 pxor xmm0,xmm1 220db 102,15,56,0,217 221 movdqa xmm4,xmm7 222 pxor xmm3,xmm2 223db 102,15,56,0,224 224 pxor xmm4,xmm2 225 movdqa xmm2,xmm7 226db 102,15,56,0,211 227 movdqa xmm3,xmm7 228 pxor xmm2,xmm0 229db 102,15,56,0,220 230 movdqu xmm0,[edx] 231 pxor xmm3,xmm1 232 jnz NEAR L$003dec_loop 233 movdqa xmm4,[96+ebx] 234db 102,15,56,0,226 235 pxor xmm4,xmm0 236 movdqa xmm0,[112+ebx] 237 movdqa xmm2,[ecx] 238db 102,15,56,0,195 239 pxor xmm0,xmm4 240db 102,15,56,0,194 241 ret 242align 16 243__vpaes_schedule_core: 244 add ebp,DWORD [esp] 245 movdqu xmm0,[esi] 246 movdqa xmm2,[320+ebp] 247 movdqa xmm3,xmm0 248 lea ebx,[ebp] 249 movdqa [4+esp],xmm2 250 call __vpaes_schedule_transform 251 movdqa xmm7,xmm0 252 test edi,edi 253 jnz NEAR L$004schedule_am_decrypting 254 movdqu [edx],xmm0 255 jmp NEAR L$005schedule_go 256L$004schedule_am_decrypting: 257 movdqa xmm1,[256+ecx*1+ebp] 258db 102,15,56,0,217 259 movdqu [edx],xmm3 260 xor ecx,48 261L$005schedule_go: 262 cmp eax,192 263 ja NEAR L$006schedule_256 264 je NEAR L$007schedule_192 265L$008schedule_128: 266 mov eax,10 267L$009loop_schedule_128: 268 call __vpaes_schedule_round 269 dec eax 270 jz NEAR L$010schedule_mangle_last 271 call __vpaes_schedule_mangle 272 jmp NEAR L$009loop_schedule_128 273align 16 274L$007schedule_192: 275 movdqu xmm0,[8+esi] 276 call __vpaes_schedule_transform 277 movdqa xmm6,xmm0 278 pxor xmm4,xmm4 279 movhlps xmm6,xmm4 280 mov eax,4 281L$011loop_schedule_192: 282 call __vpaes_schedule_round 283db 102,15,58,15,198,8 284 call __vpaes_schedule_mangle 285 call __vpaes_schedule_192_smear 286 call __vpaes_schedule_mangle 287 call __vpaes_schedule_round 288 dec eax 289 jz NEAR L$010schedule_mangle_last 290 call __vpaes_schedule_mangle 291 call __vpaes_schedule_192_smear 292 jmp NEAR L$011loop_schedule_192 293align 16 294L$006schedule_256: 295 movdqu xmm0,[16+esi] 296 call __vpaes_schedule_transform 297 mov eax,7 298L$012loop_schedule_256: 299 call __vpaes_schedule_mangle 300 movdqa xmm6,xmm0 301 call __vpaes_schedule_round 302 dec eax 303 jz NEAR L$010schedule_mangle_last 304 call __vpaes_schedule_mangle 305 pshufd xmm0,xmm0,255 306 movdqa [20+esp],xmm7 307 movdqa xmm7,xmm6 308 call L$_vpaes_schedule_low_round 309 movdqa xmm7,[20+esp] 310 jmp NEAR L$012loop_schedule_256 311align 16 312L$010schedule_mangle_last: 313 lea ebx,[384+ebp] 314 test edi,edi 315 jnz NEAR L$013schedule_mangle_last_dec 316 movdqa xmm1,[256+ecx*1+ebp] 317db 102,15,56,0,193 318 lea ebx,[352+ebp] 319 add edx,32 320L$013schedule_mangle_last_dec: 321 add edx,-16 322 pxor xmm0,[336+ebp] 323 call __vpaes_schedule_transform 324 movdqu [edx],xmm0 325 pxor xmm0,xmm0 326 pxor xmm1,xmm1 327 pxor xmm2,xmm2 328 pxor xmm3,xmm3 329 pxor xmm4,xmm4 330 pxor xmm5,xmm5 331 pxor xmm6,xmm6 332 pxor xmm7,xmm7 333 ret 334align 16 335__vpaes_schedule_192_smear: 336 pshufd xmm1,xmm6,128 337 pshufd xmm0,xmm7,254 338 pxor xmm6,xmm1 339 pxor xmm1,xmm1 340 pxor xmm6,xmm0 341 movdqa xmm0,xmm6 342 movhlps xmm6,xmm1 343 ret 344align 16 345__vpaes_schedule_round: 346 movdqa xmm2,[8+esp] 347 pxor xmm1,xmm1 348db 102,15,58,15,202,15 349db 102,15,58,15,210,15 350 pxor xmm7,xmm1 351 pshufd xmm0,xmm0,255 352db 102,15,58,15,192,1 353 movdqa [8+esp],xmm2 354L$_vpaes_schedule_low_round: 355 movdqa xmm1,xmm7 356 pslldq xmm7,4 357 pxor xmm7,xmm1 358 movdqa xmm1,xmm7 359 pslldq xmm7,8 360 pxor xmm7,xmm1 361 pxor xmm7,[336+ebp] 362 movdqa xmm4,[ebp-16] 363 movdqa xmm5,[ebp-48] 364 movdqa xmm1,xmm4 365 pandn xmm1,xmm0 366 psrld xmm1,4 367 pand xmm0,xmm4 368 movdqa xmm2,[ebp-32] 369db 102,15,56,0,208 370 pxor xmm0,xmm1 371 movdqa xmm3,xmm5 372db 102,15,56,0,217 373 pxor xmm3,xmm2 374 movdqa xmm4,xmm5 375db 102,15,56,0,224 376 pxor xmm4,xmm2 377 movdqa xmm2,xmm5 378db 102,15,56,0,211 379 pxor xmm2,xmm0 380 movdqa xmm3,xmm5 381db 102,15,56,0,220 382 pxor xmm3,xmm1 383 movdqa xmm4,[32+ebp] 384db 102,15,56,0,226 385 movdqa xmm0,[48+ebp] 386db 102,15,56,0,195 387 pxor xmm0,xmm4 388 pxor xmm0,xmm7 389 movdqa xmm7,xmm0 390 ret 391align 16 392__vpaes_schedule_transform: 393 movdqa xmm2,[ebp-16] 394 movdqa xmm1,xmm2 395 pandn xmm1,xmm0 396 psrld xmm1,4 397 pand xmm0,xmm2 398 movdqa xmm2,[ebx] 399db 102,15,56,0,208 400 movdqa xmm0,[16+ebx] 401db 102,15,56,0,193 402 pxor xmm0,xmm2 403 ret 404align 16 405__vpaes_schedule_mangle: 406 movdqa xmm4,xmm0 407 movdqa xmm5,[128+ebp] 408 test edi,edi 409 jnz NEAR L$014schedule_mangle_dec 410 add edx,16 411 pxor xmm4,[336+ebp] 412db 102,15,56,0,229 413 movdqa xmm3,xmm4 414db 102,15,56,0,229 415 pxor xmm3,xmm4 416db 102,15,56,0,229 417 pxor xmm3,xmm4 418 jmp NEAR L$015schedule_mangle_both 419align 16 420L$014schedule_mangle_dec: 421 movdqa xmm2,[ebp-16] 422 lea esi,[416+ebp] 423 movdqa xmm1,xmm2 424 pandn xmm1,xmm4 425 psrld xmm1,4 426 pand xmm4,xmm2 427 movdqa xmm2,[esi] 428db 102,15,56,0,212 429 movdqa xmm3,[16+esi] 430db 102,15,56,0,217 431 pxor xmm3,xmm2 432db 102,15,56,0,221 433 movdqa xmm2,[32+esi] 434db 102,15,56,0,212 435 pxor xmm2,xmm3 436 movdqa xmm3,[48+esi] 437db 102,15,56,0,217 438 pxor xmm3,xmm2 439db 102,15,56,0,221 440 movdqa xmm2,[64+esi] 441db 102,15,56,0,212 442 pxor xmm2,xmm3 443 movdqa xmm3,[80+esi] 444db 102,15,56,0,217 445 pxor xmm3,xmm2 446db 102,15,56,0,221 447 movdqa xmm2,[96+esi] 448db 102,15,56,0,212 449 pxor xmm2,xmm3 450 movdqa xmm3,[112+esi] 451db 102,15,56,0,217 452 pxor xmm3,xmm2 453 add edx,-16 454L$015schedule_mangle_both: 455 movdqa xmm1,[256+ecx*1+ebp] 456db 102,15,56,0,217 457 add ecx,-16 458 and ecx,48 459 movdqu [edx],xmm3 460 ret 461global _vpaes_set_encrypt_key 462align 16 463_vpaes_set_encrypt_key: 464L$_vpaes_set_encrypt_key_begin: 465 push ebp 466 push ebx 467 push esi 468 push edi 469%ifdef BORINGSSL_DISPATCH_TEST 470 push ebx 471 push edx 472 call L$016pic 473L$016pic: 474 pop ebx 475 lea ebx,[(_BORINGSSL_function_hit+5-L$016pic)+ebx] 476 mov edx,1 477 mov BYTE [ebx],dl 478 pop edx 479 pop ebx 480%endif 481 mov esi,DWORD [20+esp] 482 lea ebx,[esp-56] 483 mov eax,DWORD [24+esp] 484 and ebx,-16 485 mov edx,DWORD [28+esp] 486 xchg ebx,esp 487 mov DWORD [48+esp],ebx 488 mov ebx,eax 489 shr ebx,5 490 add ebx,5 491 mov DWORD [240+edx],ebx 492 mov ecx,48 493 mov edi,0 494 lea ebp,[(L$_vpaes_consts+0x30-L$017pic_point)] 495 call __vpaes_schedule_core 496L$017pic_point: 497 mov esp,DWORD [48+esp] 498 xor eax,eax 499 pop edi 500 pop esi 501 pop ebx 502 pop ebp 503 ret 504global _vpaes_set_decrypt_key 505align 16 506_vpaes_set_decrypt_key: 507L$_vpaes_set_decrypt_key_begin: 508 push ebp 509 push ebx 510 push esi 511 push edi 512 mov esi,DWORD [20+esp] 513 lea ebx,[esp-56] 514 mov eax,DWORD [24+esp] 515 and ebx,-16 516 mov edx,DWORD [28+esp] 517 xchg ebx,esp 518 mov DWORD [48+esp],ebx 519 mov ebx,eax 520 shr ebx,5 521 add ebx,5 522 mov DWORD [240+edx],ebx 523 shl ebx,4 524 lea edx,[16+ebx*1+edx] 525 mov edi,1 526 mov ecx,eax 527 shr ecx,1 528 and ecx,32 529 xor ecx,32 530 lea ebp,[(L$_vpaes_consts+0x30-L$018pic_point)] 531 call __vpaes_schedule_core 532L$018pic_point: 533 mov esp,DWORD [48+esp] 534 xor eax,eax 535 pop edi 536 pop esi 537 pop ebx 538 pop ebp 539 ret 540global _vpaes_encrypt 541align 16 542_vpaes_encrypt: 543L$_vpaes_encrypt_begin: 544 push ebp 545 push ebx 546 push esi 547 push edi 548%ifdef BORINGSSL_DISPATCH_TEST 549 push ebx 550 push edx 551 call L$019pic 552L$019pic: 553 pop ebx 554 lea ebx,[(_BORINGSSL_function_hit+4-L$019pic)+ebx] 555 mov edx,1 556 mov BYTE [ebx],dl 557 pop edx 558 pop ebx 559%endif 560 lea ebp,[(L$_vpaes_consts+0x30-L$020pic_point)] 561 call __vpaes_preheat 562L$020pic_point: 563 mov esi,DWORD [20+esp] 564 lea ebx,[esp-56] 565 mov edi,DWORD [24+esp] 566 and ebx,-16 567 mov edx,DWORD [28+esp] 568 xchg ebx,esp 569 mov DWORD [48+esp],ebx 570 movdqu xmm0,[esi] 571 call __vpaes_encrypt_core 572 movdqu [edi],xmm0 573 mov esp,DWORD [48+esp] 574 pop edi 575 pop esi 576 pop ebx 577 pop ebp 578 ret 579global _vpaes_decrypt 580align 16 581_vpaes_decrypt: 582L$_vpaes_decrypt_begin: 583 push ebp 584 push ebx 585 push esi 586 push edi 587 lea ebp,[(L$_vpaes_consts+0x30-L$021pic_point)] 588 call __vpaes_preheat 589L$021pic_point: 590 mov esi,DWORD [20+esp] 591 lea ebx,[esp-56] 592 mov edi,DWORD [24+esp] 593 and ebx,-16 594 mov edx,DWORD [28+esp] 595 xchg ebx,esp 596 mov DWORD [48+esp],ebx 597 movdqu xmm0,[esi] 598 call __vpaes_decrypt_core 599 movdqu [edi],xmm0 600 mov esp,DWORD [48+esp] 601 pop edi 602 pop esi 603 pop ebx 604 pop ebp 605 ret 606global _vpaes_cbc_encrypt 607align 16 608_vpaes_cbc_encrypt: 609L$_vpaes_cbc_encrypt_begin: 610 push ebp 611 push ebx 612 push esi 613 push edi 614 mov esi,DWORD [20+esp] 615 mov edi,DWORD [24+esp] 616 mov eax,DWORD [28+esp] 617 mov edx,DWORD [32+esp] 618 sub eax,16 619 jc NEAR L$022cbc_abort 620 lea ebx,[esp-56] 621 mov ebp,DWORD [36+esp] 622 and ebx,-16 623 mov ecx,DWORD [40+esp] 624 xchg ebx,esp 625 movdqu xmm1,[ebp] 626 sub edi,esi 627 mov DWORD [48+esp],ebx 628 mov DWORD [esp],edi 629 mov DWORD [4+esp],edx 630 mov DWORD [8+esp],ebp 631 mov edi,eax 632 lea ebp,[(L$_vpaes_consts+0x30-L$023pic_point)] 633 call __vpaes_preheat 634L$023pic_point: 635 cmp ecx,0 636 je NEAR L$024cbc_dec_loop 637 jmp NEAR L$025cbc_enc_loop 638align 16 639L$025cbc_enc_loop: 640 movdqu xmm0,[esi] 641 pxor xmm0,xmm1 642 call __vpaes_encrypt_core 643 mov ebx,DWORD [esp] 644 mov edx,DWORD [4+esp] 645 movdqa xmm1,xmm0 646 movdqu [esi*1+ebx],xmm0 647 lea esi,[16+esi] 648 sub edi,16 649 jnc NEAR L$025cbc_enc_loop 650 jmp NEAR L$026cbc_done 651align 16 652L$024cbc_dec_loop: 653 movdqu xmm0,[esi] 654 movdqa [16+esp],xmm1 655 movdqa [32+esp],xmm0 656 call __vpaes_decrypt_core 657 mov ebx,DWORD [esp] 658 mov edx,DWORD [4+esp] 659 pxor xmm0,[16+esp] 660 movdqa xmm1,[32+esp] 661 movdqu [esi*1+ebx],xmm0 662 lea esi,[16+esi] 663 sub edi,16 664 jnc NEAR L$024cbc_dec_loop 665L$026cbc_done: 666 mov ebx,DWORD [8+esp] 667 mov esp,DWORD [48+esp] 668 movdqu [ebx],xmm1 669L$022cbc_abort: 670 pop edi 671 pop esi 672 pop ebx 673 pop ebp 674 ret 675