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