OLD | NEW |
(Empty) | |
| 1 default rel |
| 2 %define XMMWORD |
| 3 %define YMMWORD |
| 4 %define ZMMWORD |
| 5 section .text code align=64 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
| 23 |
| 24 ALIGN 16 |
| 25 _vpaes_encrypt_core: |
| 26 mov r9,rdx |
| 27 mov r11,16 |
| 28 mov eax,DWORD[240+rdx] |
| 29 movdqa xmm1,xmm9 |
| 30 movdqa xmm2,XMMWORD[$L$k_ipt] |
| 31 pandn xmm1,xmm0 |
| 32 movdqu xmm5,XMMWORD[r9] |
| 33 psrld xmm1,4 |
| 34 pand xmm0,xmm9 |
| 35 DB 102,15,56,0,208 |
| 36 movdqa xmm0,XMMWORD[(($L$k_ipt+16))] |
| 37 DB 102,15,56,0,193 |
| 38 pxor xmm2,xmm5 |
| 39 add r9,16 |
| 40 pxor xmm0,xmm2 |
| 41 lea r10,[$L$k_mc_backward] |
| 42 jmp NEAR $L$enc_entry |
| 43 |
| 44 ALIGN 16 |
| 45 $L$enc_loop: |
| 46 |
| 47 movdqa xmm4,xmm13 |
| 48 movdqa xmm0,xmm12 |
| 49 DB 102,15,56,0,226 |
| 50 DB 102,15,56,0,195 |
| 51 pxor xmm4,xmm5 |
| 52 movdqa xmm5,xmm15 |
| 53 pxor xmm0,xmm4 |
| 54 movdqa xmm1,XMMWORD[((-64))+r10*1+r11] |
| 55 DB 102,15,56,0,234 |
| 56 movdqa xmm4,XMMWORD[r10*1+r11] |
| 57 movdqa xmm2,xmm14 |
| 58 DB 102,15,56,0,211 |
| 59 movdqa xmm3,xmm0 |
| 60 pxor xmm2,xmm5 |
| 61 DB 102,15,56,0,193 |
| 62 add r9,16 |
| 63 pxor xmm0,xmm2 |
| 64 DB 102,15,56,0,220 |
| 65 add r11,16 |
| 66 pxor xmm3,xmm0 |
| 67 DB 102,15,56,0,193 |
| 68 and r11,0x30 |
| 69 sub rax,1 |
| 70 pxor xmm0,xmm3 |
| 71 |
| 72 $L$enc_entry: |
| 73 |
| 74 movdqa xmm1,xmm9 |
| 75 movdqa xmm5,xmm11 |
| 76 pandn xmm1,xmm0 |
| 77 psrld xmm1,4 |
| 78 pand xmm0,xmm9 |
| 79 DB 102,15,56,0,232 |
| 80 movdqa xmm3,xmm10 |
| 81 pxor xmm0,xmm1 |
| 82 DB 102,15,56,0,217 |
| 83 movdqa xmm4,xmm10 |
| 84 pxor xmm3,xmm5 |
| 85 DB 102,15,56,0,224 |
| 86 movdqa xmm2,xmm10 |
| 87 pxor xmm4,xmm5 |
| 88 DB 102,15,56,0,211 |
| 89 movdqa xmm3,xmm10 |
| 90 pxor xmm2,xmm0 |
| 91 DB 102,15,56,0,220 |
| 92 movdqu xmm5,XMMWORD[r9] |
| 93 pxor xmm3,xmm1 |
| 94 jnz NEAR $L$enc_loop |
| 95 |
| 96 |
| 97 movdqa xmm4,XMMWORD[((-96))+r10] |
| 98 movdqa xmm0,XMMWORD[((-80))+r10] |
| 99 DB 102,15,56,0,226 |
| 100 pxor xmm4,xmm5 |
| 101 DB 102,15,56,0,195 |
| 102 movdqa xmm1,XMMWORD[64+r10*1+r11] |
| 103 pxor xmm0,xmm4 |
| 104 DB 102,15,56,0,193 |
| 105 DB 0F3h,0C3h ;repret |
| 106 |
| 107 |
| 108 |
| 109 |
| 110 |
| 111 |
| 112 |
| 113 |
| 114 ALIGN 16 |
| 115 _vpaes_decrypt_core: |
| 116 mov r9,rdx |
| 117 mov eax,DWORD[240+rdx] |
| 118 movdqa xmm1,xmm9 |
| 119 movdqa xmm2,XMMWORD[$L$k_dipt] |
| 120 pandn xmm1,xmm0 |
| 121 mov r11,rax |
| 122 psrld xmm1,4 |
| 123 movdqu xmm5,XMMWORD[r9] |
| 124 shl r11,4 |
| 125 pand xmm0,xmm9 |
| 126 DB 102,15,56,0,208 |
| 127 movdqa xmm0,XMMWORD[(($L$k_dipt+16))] |
| 128 xor r11,0x30 |
| 129 lea r10,[$L$k_dsbd] |
| 130 DB 102,15,56,0,193 |
| 131 and r11,0x30 |
| 132 pxor xmm2,xmm5 |
| 133 movdqa xmm5,XMMWORD[(($L$k_mc_forward+48))] |
| 134 pxor xmm0,xmm2 |
| 135 add r9,16 |
| 136 add r11,r10 |
| 137 jmp NEAR $L$dec_entry |
| 138 |
| 139 ALIGN 16 |
| 140 $L$dec_loop: |
| 141 |
| 142 |
| 143 |
| 144 movdqa xmm4,XMMWORD[((-32))+r10] |
| 145 movdqa xmm1,XMMWORD[((-16))+r10] |
| 146 DB 102,15,56,0,226 |
| 147 DB 102,15,56,0,203 |
| 148 pxor xmm0,xmm4 |
| 149 movdqa xmm4,XMMWORD[r10] |
| 150 pxor xmm0,xmm1 |
| 151 movdqa xmm1,XMMWORD[16+r10] |
| 152 |
| 153 DB 102,15,56,0,226 |
| 154 DB 102,15,56,0,197 |
| 155 DB 102,15,56,0,203 |
| 156 pxor xmm0,xmm4 |
| 157 movdqa xmm4,XMMWORD[32+r10] |
| 158 pxor xmm0,xmm1 |
| 159 movdqa xmm1,XMMWORD[48+r10] |
| 160 |
| 161 DB 102,15,56,0,226 |
| 162 DB 102,15,56,0,197 |
| 163 DB 102,15,56,0,203 |
| 164 pxor xmm0,xmm4 |
| 165 movdqa xmm4,XMMWORD[64+r10] |
| 166 pxor xmm0,xmm1 |
| 167 movdqa xmm1,XMMWORD[80+r10] |
| 168 |
| 169 DB 102,15,56,0,226 |
| 170 DB 102,15,56,0,197 |
| 171 DB 102,15,56,0,203 |
| 172 pxor xmm0,xmm4 |
| 173 add r9,16 |
| 174 DB 102,15,58,15,237,12 |
| 175 pxor xmm0,xmm1 |
| 176 sub rax,1 |
| 177 |
| 178 $L$dec_entry: |
| 179 |
| 180 movdqa xmm1,xmm9 |
| 181 pandn xmm1,xmm0 |
| 182 movdqa xmm2,xmm11 |
| 183 psrld xmm1,4 |
| 184 pand xmm0,xmm9 |
| 185 DB 102,15,56,0,208 |
| 186 movdqa xmm3,xmm10 |
| 187 pxor xmm0,xmm1 |
| 188 DB 102,15,56,0,217 |
| 189 movdqa xmm4,xmm10 |
| 190 pxor xmm3,xmm2 |
| 191 DB 102,15,56,0,224 |
| 192 pxor xmm4,xmm2 |
| 193 movdqa xmm2,xmm10 |
| 194 DB 102,15,56,0,211 |
| 195 movdqa xmm3,xmm10 |
| 196 pxor xmm2,xmm0 |
| 197 DB 102,15,56,0,220 |
| 198 movdqu xmm0,XMMWORD[r9] |
| 199 pxor xmm3,xmm1 |
| 200 jnz NEAR $L$dec_loop |
| 201 |
| 202 |
| 203 movdqa xmm4,XMMWORD[96+r10] |
| 204 DB 102,15,56,0,226 |
| 205 pxor xmm4,xmm0 |
| 206 movdqa xmm0,XMMWORD[112+r10] |
| 207 movdqa xmm2,XMMWORD[((-352))+r11] |
| 208 DB 102,15,56,0,195 |
| 209 pxor xmm0,xmm4 |
| 210 DB 102,15,56,0,194 |
| 211 DB 0F3h,0C3h ;repret |
| 212 |
| 213 |
| 214 |
| 215 |
| 216 |
| 217 |
| 218 |
| 219 |
| 220 ALIGN 16 |
| 221 _vpaes_schedule_core: |
| 222 |
| 223 |
| 224 |
| 225 |
| 226 |
| 227 call _vpaes_preheat |
| 228 movdqa xmm8,XMMWORD[$L$k_rcon] |
| 229 movdqu xmm0,XMMWORD[rdi] |
| 230 |
| 231 |
| 232 movdqa xmm3,xmm0 |
| 233 lea r11,[$L$k_ipt] |
| 234 call _vpaes_schedule_transform |
| 235 movdqa xmm7,xmm0 |
| 236 |
| 237 lea r10,[$L$k_sr] |
| 238 test rcx,rcx |
| 239 jnz NEAR $L$schedule_am_decrypting |
| 240 |
| 241 |
| 242 movdqu XMMWORD[rdx],xmm0 |
| 243 jmp NEAR $L$schedule_go |
| 244 |
| 245 $L$schedule_am_decrypting: |
| 246 |
| 247 movdqa xmm1,XMMWORD[r10*1+r8] |
| 248 DB 102,15,56,0,217 |
| 249 movdqu XMMWORD[rdx],xmm3 |
| 250 xor r8,0x30 |
| 251 |
| 252 $L$schedule_go: |
| 253 cmp esi,192 |
| 254 ja NEAR $L$schedule_256 |
| 255 je NEAR $L$schedule_192 |
| 256 |
| 257 |
| 258 |
| 259 |
| 260 |
| 261 |
| 262 |
| 263 |
| 264 |
| 265 |
| 266 $L$schedule_128: |
| 267 mov esi,10 |
| 268 |
| 269 $L$oop_schedule_128: |
| 270 call _vpaes_schedule_round |
| 271 dec rsi |
| 272 jz NEAR $L$schedule_mangle_last |
| 273 call _vpaes_schedule_mangle |
| 274 jmp NEAR $L$oop_schedule_128 |
| 275 |
| 276 |
| 277 |
| 278 |
| 279 |
| 280 |
| 281 |
| 282 |
| 283 |
| 284 |
| 285 |
| 286 |
| 287 |
| 288 |
| 289 |
| 290 |
| 291 ALIGN 16 |
| 292 $L$schedule_192: |
| 293 movdqu xmm0,XMMWORD[8+rdi] |
| 294 call _vpaes_schedule_transform |
| 295 movdqa xmm6,xmm0 |
| 296 pxor xmm4,xmm4 |
| 297 movhlps xmm6,xmm4 |
| 298 mov esi,4 |
| 299 |
| 300 $L$oop_schedule_192: |
| 301 call _vpaes_schedule_round |
| 302 DB 102,15,58,15,198,8 |
| 303 call _vpaes_schedule_mangle |
| 304 call _vpaes_schedule_192_smear |
| 305 call _vpaes_schedule_mangle |
| 306 call _vpaes_schedule_round |
| 307 dec rsi |
| 308 jz NEAR $L$schedule_mangle_last |
| 309 call _vpaes_schedule_mangle |
| 310 call _vpaes_schedule_192_smear |
| 311 jmp NEAR $L$oop_schedule_192 |
| 312 |
| 313 |
| 314 |
| 315 |
| 316 |
| 317 |
| 318 |
| 319 |
| 320 |
| 321 |
| 322 |
| 323 ALIGN 16 |
| 324 $L$schedule_256: |
| 325 movdqu xmm0,XMMWORD[16+rdi] |
| 326 call _vpaes_schedule_transform |
| 327 mov esi,7 |
| 328 |
| 329 $L$oop_schedule_256: |
| 330 call _vpaes_schedule_mangle |
| 331 movdqa xmm6,xmm0 |
| 332 |
| 333 |
| 334 call _vpaes_schedule_round |
| 335 dec rsi |
| 336 jz NEAR $L$schedule_mangle_last |
| 337 call _vpaes_schedule_mangle |
| 338 |
| 339 |
| 340 pshufd xmm0,xmm0,0xFF |
| 341 movdqa xmm5,xmm7 |
| 342 movdqa xmm7,xmm6 |
| 343 call _vpaes_schedule_low_round |
| 344 movdqa xmm7,xmm5 |
| 345 |
| 346 jmp NEAR $L$oop_schedule_256 |
| 347 |
| 348 |
| 349 |
| 350 |
| 351 |
| 352 |
| 353 |
| 354 |
| 355 |
| 356 |
| 357 |
| 358 |
| 359 ALIGN 16 |
| 360 $L$schedule_mangle_last: |
| 361 |
| 362 lea r11,[$L$k_deskew] |
| 363 test rcx,rcx |
| 364 jnz NEAR $L$schedule_mangle_last_dec |
| 365 |
| 366 |
| 367 movdqa xmm1,XMMWORD[r10*1+r8] |
| 368 DB 102,15,56,0,193 |
| 369 lea r11,[$L$k_opt] |
| 370 add rdx,32 |
| 371 |
| 372 $L$schedule_mangle_last_dec: |
| 373 add rdx,-16 |
| 374 pxor xmm0,XMMWORD[$L$k_s63] |
| 375 call _vpaes_schedule_transform |
| 376 movdqu XMMWORD[rdx],xmm0 |
| 377 |
| 378 |
| 379 pxor xmm0,xmm0 |
| 380 pxor xmm1,xmm1 |
| 381 pxor xmm2,xmm2 |
| 382 pxor xmm3,xmm3 |
| 383 pxor xmm4,xmm4 |
| 384 pxor xmm5,xmm5 |
| 385 pxor xmm6,xmm6 |
| 386 pxor xmm7,xmm7 |
| 387 DB 0F3h,0C3h ;repret |
| 388 |
| 389 |
| 390 |
| 391 |
| 392 |
| 393 |
| 394 |
| 395 |
| 396 |
| 397 |
| 398 |
| 399 |
| 400 |
| 401 |
| 402 |
| 403 |
| 404 |
| 405 ALIGN 16 |
| 406 _vpaes_schedule_192_smear: |
| 407 pshufd xmm1,xmm6,0x80 |
| 408 pshufd xmm0,xmm7,0xFE |
| 409 pxor xmm6,xmm1 |
| 410 pxor xmm1,xmm1 |
| 411 pxor xmm6,xmm0 |
| 412 movdqa xmm0,xmm6 |
| 413 movhlps xmm6,xmm1 |
| 414 DB 0F3h,0C3h ;repret |
| 415 |
| 416 |
| 417 |
| 418 |
| 419 |
| 420 |
| 421 |
| 422 |
| 423 |
| 424 |
| 425 |
| 426 |
| 427 |
| 428 |
| 429 |
| 430 |
| 431 |
| 432 |
| 433 |
| 434 |
| 435 |
| 436 ALIGN 16 |
| 437 _vpaes_schedule_round: |
| 438 |
| 439 pxor xmm1,xmm1 |
| 440 DB 102,65,15,58,15,200,15 |
| 441 DB 102,69,15,58,15,192,15 |
| 442 pxor xmm7,xmm1 |
| 443 |
| 444 |
| 445 pshufd xmm0,xmm0,0xFF |
| 446 DB 102,15,58,15,192,1 |
| 447 |
| 448 |
| 449 |
| 450 |
| 451 _vpaes_schedule_low_round: |
| 452 |
| 453 movdqa xmm1,xmm7 |
| 454 pslldq xmm7,4 |
| 455 pxor xmm7,xmm1 |
| 456 movdqa xmm1,xmm7 |
| 457 pslldq xmm7,8 |
| 458 pxor xmm7,xmm1 |
| 459 pxor xmm7,XMMWORD[$L$k_s63] |
| 460 |
| 461 |
| 462 movdqa xmm1,xmm9 |
| 463 pandn xmm1,xmm0 |
| 464 psrld xmm1,4 |
| 465 pand xmm0,xmm9 |
| 466 movdqa xmm2,xmm11 |
| 467 DB 102,15,56,0,208 |
| 468 pxor xmm0,xmm1 |
| 469 movdqa xmm3,xmm10 |
| 470 DB 102,15,56,0,217 |
| 471 pxor xmm3,xmm2 |
| 472 movdqa xmm4,xmm10 |
| 473 DB 102,15,56,0,224 |
| 474 pxor xmm4,xmm2 |
| 475 movdqa xmm2,xmm10 |
| 476 DB 102,15,56,0,211 |
| 477 pxor xmm2,xmm0 |
| 478 movdqa xmm3,xmm10 |
| 479 DB 102,15,56,0,220 |
| 480 pxor xmm3,xmm1 |
| 481 movdqa xmm4,xmm13 |
| 482 DB 102,15,56,0,226 |
| 483 movdqa xmm0,xmm12 |
| 484 DB 102,15,56,0,195 |
| 485 pxor xmm0,xmm4 |
| 486 |
| 487 |
| 488 pxor xmm0,xmm7 |
| 489 movdqa xmm7,xmm0 |
| 490 DB 0F3h,0C3h ;repret |
| 491 |
| 492 |
| 493 |
| 494 |
| 495 |
| 496 |
| 497 |
| 498 |
| 499 |
| 500 |
| 501 |
| 502 |
| 503 ALIGN 16 |
| 504 _vpaes_schedule_transform: |
| 505 movdqa xmm1,xmm9 |
| 506 pandn xmm1,xmm0 |
| 507 psrld xmm1,4 |
| 508 pand xmm0,xmm9 |
| 509 movdqa xmm2,XMMWORD[r11] |
| 510 DB 102,15,56,0,208 |
| 511 movdqa xmm0,XMMWORD[16+r11] |
| 512 DB 102,15,56,0,193 |
| 513 pxor xmm0,xmm2 |
| 514 DB 0F3h,0C3h ;repret |
| 515 |
| 516 |
| 517 |
| 518 |
| 519 |
| 520 |
| 521 |
| 522 |
| 523 |
| 524 |
| 525 |
| 526 |
| 527 |
| 528 |
| 529 |
| 530 |
| 531 |
| 532 |
| 533 |
| 534 |
| 535 |
| 536 |
| 537 |
| 538 |
| 539 |
| 540 |
| 541 ALIGN 16 |
| 542 _vpaes_schedule_mangle: |
| 543 movdqa xmm4,xmm0 |
| 544 movdqa xmm5,XMMWORD[$L$k_mc_forward] |
| 545 test rcx,rcx |
| 546 jnz NEAR $L$schedule_mangle_dec |
| 547 |
| 548 |
| 549 add rdx,16 |
| 550 pxor xmm4,XMMWORD[$L$k_s63] |
| 551 DB 102,15,56,0,229 |
| 552 movdqa xmm3,xmm4 |
| 553 DB 102,15,56,0,229 |
| 554 pxor xmm3,xmm4 |
| 555 DB 102,15,56,0,229 |
| 556 pxor xmm3,xmm4 |
| 557 |
| 558 jmp NEAR $L$schedule_mangle_both |
| 559 ALIGN 16 |
| 560 $L$schedule_mangle_dec: |
| 561 |
| 562 lea r11,[$L$k_dksd] |
| 563 movdqa xmm1,xmm9 |
| 564 pandn xmm1,xmm4 |
| 565 psrld xmm1,4 |
| 566 pand xmm4,xmm9 |
| 567 |
| 568 movdqa xmm2,XMMWORD[r11] |
| 569 DB 102,15,56,0,212 |
| 570 movdqa xmm3,XMMWORD[16+r11] |
| 571 DB 102,15,56,0,217 |
| 572 pxor xmm3,xmm2 |
| 573 DB 102,15,56,0,221 |
| 574 |
| 575 movdqa xmm2,XMMWORD[32+r11] |
| 576 DB 102,15,56,0,212 |
| 577 pxor xmm2,xmm3 |
| 578 movdqa xmm3,XMMWORD[48+r11] |
| 579 DB 102,15,56,0,217 |
| 580 pxor xmm3,xmm2 |
| 581 DB 102,15,56,0,221 |
| 582 |
| 583 movdqa xmm2,XMMWORD[64+r11] |
| 584 DB 102,15,56,0,212 |
| 585 pxor xmm2,xmm3 |
| 586 movdqa xmm3,XMMWORD[80+r11] |
| 587 DB 102,15,56,0,217 |
| 588 pxor xmm3,xmm2 |
| 589 DB 102,15,56,0,221 |
| 590 |
| 591 movdqa xmm2,XMMWORD[96+r11] |
| 592 DB 102,15,56,0,212 |
| 593 pxor xmm2,xmm3 |
| 594 movdqa xmm3,XMMWORD[112+r11] |
| 595 DB 102,15,56,0,217 |
| 596 pxor xmm3,xmm2 |
| 597 |
| 598 add rdx,-16 |
| 599 |
| 600 $L$schedule_mangle_both: |
| 601 movdqa xmm1,XMMWORD[r10*1+r8] |
| 602 DB 102,15,56,0,217 |
| 603 add r8,-16 |
| 604 and r8,0x30 |
| 605 movdqu XMMWORD[rdx],xmm3 |
| 606 DB 0F3h,0C3h ;repret |
| 607 |
| 608 |
| 609 |
| 610 |
| 611 |
| 612 global vpaes_set_encrypt_key |
| 613 |
| 614 ALIGN 16 |
| 615 vpaes_set_encrypt_key: |
| 616 mov QWORD[8+rsp],rdi ;WIN64 prologue |
| 617 mov QWORD[16+rsp],rsi |
| 618 mov rax,rsp |
| 619 $L$SEH_begin_vpaes_set_encrypt_key: |
| 620 mov rdi,rcx |
| 621 mov rsi,rdx |
| 622 mov rdx,r8 |
| 623 |
| 624 |
| 625 lea rsp,[((-184))+rsp] |
| 626 movaps XMMWORD[16+rsp],xmm6 |
| 627 movaps XMMWORD[32+rsp],xmm7 |
| 628 movaps XMMWORD[48+rsp],xmm8 |
| 629 movaps XMMWORD[64+rsp],xmm9 |
| 630 movaps XMMWORD[80+rsp],xmm10 |
| 631 movaps XMMWORD[96+rsp],xmm11 |
| 632 movaps XMMWORD[112+rsp],xmm12 |
| 633 movaps XMMWORD[128+rsp],xmm13 |
| 634 movaps XMMWORD[144+rsp],xmm14 |
| 635 movaps XMMWORD[160+rsp],xmm15 |
| 636 $L$enc_key_body: |
| 637 mov eax,esi |
| 638 shr eax,5 |
| 639 add eax,5 |
| 640 mov DWORD[240+rdx],eax |
| 641 |
| 642 mov ecx,0 |
| 643 mov r8d,0x30 |
| 644 call _vpaes_schedule_core |
| 645 movaps xmm6,XMMWORD[16+rsp] |
| 646 movaps xmm7,XMMWORD[32+rsp] |
| 647 movaps xmm8,XMMWORD[48+rsp] |
| 648 movaps xmm9,XMMWORD[64+rsp] |
| 649 movaps xmm10,XMMWORD[80+rsp] |
| 650 movaps xmm11,XMMWORD[96+rsp] |
| 651 movaps xmm12,XMMWORD[112+rsp] |
| 652 movaps xmm13,XMMWORD[128+rsp] |
| 653 movaps xmm14,XMMWORD[144+rsp] |
| 654 movaps xmm15,XMMWORD[160+rsp] |
| 655 lea rsp,[184+rsp] |
| 656 $L$enc_key_epilogue: |
| 657 xor eax,eax |
| 658 mov rdi,QWORD[8+rsp] ;WIN64 epilogue |
| 659 mov rsi,QWORD[16+rsp] |
| 660 DB 0F3h,0C3h ;repret |
| 661 $L$SEH_end_vpaes_set_encrypt_key: |
| 662 |
| 663 global vpaes_set_decrypt_key |
| 664 |
| 665 ALIGN 16 |
| 666 vpaes_set_decrypt_key: |
| 667 mov QWORD[8+rsp],rdi ;WIN64 prologue |
| 668 mov QWORD[16+rsp],rsi |
| 669 mov rax,rsp |
| 670 $L$SEH_begin_vpaes_set_decrypt_key: |
| 671 mov rdi,rcx |
| 672 mov rsi,rdx |
| 673 mov rdx,r8 |
| 674 |
| 675 |
| 676 lea rsp,[((-184))+rsp] |
| 677 movaps XMMWORD[16+rsp],xmm6 |
| 678 movaps XMMWORD[32+rsp],xmm7 |
| 679 movaps XMMWORD[48+rsp],xmm8 |
| 680 movaps XMMWORD[64+rsp],xmm9 |
| 681 movaps XMMWORD[80+rsp],xmm10 |
| 682 movaps XMMWORD[96+rsp],xmm11 |
| 683 movaps XMMWORD[112+rsp],xmm12 |
| 684 movaps XMMWORD[128+rsp],xmm13 |
| 685 movaps XMMWORD[144+rsp],xmm14 |
| 686 movaps XMMWORD[160+rsp],xmm15 |
| 687 $L$dec_key_body: |
| 688 mov eax,esi |
| 689 shr eax,5 |
| 690 add eax,5 |
| 691 mov DWORD[240+rdx],eax |
| 692 shl eax,4 |
| 693 lea rdx,[16+rax*1+rdx] |
| 694 |
| 695 mov ecx,1 |
| 696 mov r8d,esi |
| 697 shr r8d,1 |
| 698 and r8d,32 |
| 699 xor r8d,32 |
| 700 call _vpaes_schedule_core |
| 701 movaps xmm6,XMMWORD[16+rsp] |
| 702 movaps xmm7,XMMWORD[32+rsp] |
| 703 movaps xmm8,XMMWORD[48+rsp] |
| 704 movaps xmm9,XMMWORD[64+rsp] |
| 705 movaps xmm10,XMMWORD[80+rsp] |
| 706 movaps xmm11,XMMWORD[96+rsp] |
| 707 movaps xmm12,XMMWORD[112+rsp] |
| 708 movaps xmm13,XMMWORD[128+rsp] |
| 709 movaps xmm14,XMMWORD[144+rsp] |
| 710 movaps xmm15,XMMWORD[160+rsp] |
| 711 lea rsp,[184+rsp] |
| 712 $L$dec_key_epilogue: |
| 713 xor eax,eax |
| 714 mov rdi,QWORD[8+rsp] ;WIN64 epilogue |
| 715 mov rsi,QWORD[16+rsp] |
| 716 DB 0F3h,0C3h ;repret |
| 717 $L$SEH_end_vpaes_set_decrypt_key: |
| 718 |
| 719 global vpaes_encrypt |
| 720 |
| 721 ALIGN 16 |
| 722 vpaes_encrypt: |
| 723 mov QWORD[8+rsp],rdi ;WIN64 prologue |
| 724 mov QWORD[16+rsp],rsi |
| 725 mov rax,rsp |
| 726 $L$SEH_begin_vpaes_encrypt: |
| 727 mov rdi,rcx |
| 728 mov rsi,rdx |
| 729 mov rdx,r8 |
| 730 |
| 731 |
| 732 lea rsp,[((-184))+rsp] |
| 733 movaps XMMWORD[16+rsp],xmm6 |
| 734 movaps XMMWORD[32+rsp],xmm7 |
| 735 movaps XMMWORD[48+rsp],xmm8 |
| 736 movaps XMMWORD[64+rsp],xmm9 |
| 737 movaps XMMWORD[80+rsp],xmm10 |
| 738 movaps XMMWORD[96+rsp],xmm11 |
| 739 movaps XMMWORD[112+rsp],xmm12 |
| 740 movaps XMMWORD[128+rsp],xmm13 |
| 741 movaps XMMWORD[144+rsp],xmm14 |
| 742 movaps XMMWORD[160+rsp],xmm15 |
| 743 $L$enc_body: |
| 744 movdqu xmm0,XMMWORD[rdi] |
| 745 call _vpaes_preheat |
| 746 call _vpaes_encrypt_core |
| 747 movdqu XMMWORD[rsi],xmm0 |
| 748 movaps xmm6,XMMWORD[16+rsp] |
| 749 movaps xmm7,XMMWORD[32+rsp] |
| 750 movaps xmm8,XMMWORD[48+rsp] |
| 751 movaps xmm9,XMMWORD[64+rsp] |
| 752 movaps xmm10,XMMWORD[80+rsp] |
| 753 movaps xmm11,XMMWORD[96+rsp] |
| 754 movaps xmm12,XMMWORD[112+rsp] |
| 755 movaps xmm13,XMMWORD[128+rsp] |
| 756 movaps xmm14,XMMWORD[144+rsp] |
| 757 movaps xmm15,XMMWORD[160+rsp] |
| 758 lea rsp,[184+rsp] |
| 759 $L$enc_epilogue: |
| 760 mov rdi,QWORD[8+rsp] ;WIN64 epilogue |
| 761 mov rsi,QWORD[16+rsp] |
| 762 DB 0F3h,0C3h ;repret |
| 763 $L$SEH_end_vpaes_encrypt: |
| 764 |
| 765 global vpaes_decrypt |
| 766 |
| 767 ALIGN 16 |
| 768 vpaes_decrypt: |
| 769 mov QWORD[8+rsp],rdi ;WIN64 prologue |
| 770 mov QWORD[16+rsp],rsi |
| 771 mov rax,rsp |
| 772 $L$SEH_begin_vpaes_decrypt: |
| 773 mov rdi,rcx |
| 774 mov rsi,rdx |
| 775 mov rdx,r8 |
| 776 |
| 777 |
| 778 lea rsp,[((-184))+rsp] |
| 779 movaps XMMWORD[16+rsp],xmm6 |
| 780 movaps XMMWORD[32+rsp],xmm7 |
| 781 movaps XMMWORD[48+rsp],xmm8 |
| 782 movaps XMMWORD[64+rsp],xmm9 |
| 783 movaps XMMWORD[80+rsp],xmm10 |
| 784 movaps XMMWORD[96+rsp],xmm11 |
| 785 movaps XMMWORD[112+rsp],xmm12 |
| 786 movaps XMMWORD[128+rsp],xmm13 |
| 787 movaps XMMWORD[144+rsp],xmm14 |
| 788 movaps XMMWORD[160+rsp],xmm15 |
| 789 $L$dec_body: |
| 790 movdqu xmm0,XMMWORD[rdi] |
| 791 call _vpaes_preheat |
| 792 call _vpaes_decrypt_core |
| 793 movdqu XMMWORD[rsi],xmm0 |
| 794 movaps xmm6,XMMWORD[16+rsp] |
| 795 movaps xmm7,XMMWORD[32+rsp] |
| 796 movaps xmm8,XMMWORD[48+rsp] |
| 797 movaps xmm9,XMMWORD[64+rsp] |
| 798 movaps xmm10,XMMWORD[80+rsp] |
| 799 movaps xmm11,XMMWORD[96+rsp] |
| 800 movaps xmm12,XMMWORD[112+rsp] |
| 801 movaps xmm13,XMMWORD[128+rsp] |
| 802 movaps xmm14,XMMWORD[144+rsp] |
| 803 movaps xmm15,XMMWORD[160+rsp] |
| 804 lea rsp,[184+rsp] |
| 805 $L$dec_epilogue: |
| 806 mov rdi,QWORD[8+rsp] ;WIN64 epilogue |
| 807 mov rsi,QWORD[16+rsp] |
| 808 DB 0F3h,0C3h ;repret |
| 809 $L$SEH_end_vpaes_decrypt: |
| 810 global vpaes_cbc_encrypt |
| 811 |
| 812 ALIGN 16 |
| 813 vpaes_cbc_encrypt: |
| 814 mov QWORD[8+rsp],rdi ;WIN64 prologue |
| 815 mov QWORD[16+rsp],rsi |
| 816 mov rax,rsp |
| 817 $L$SEH_begin_vpaes_cbc_encrypt: |
| 818 mov rdi,rcx |
| 819 mov rsi,rdx |
| 820 mov rdx,r8 |
| 821 mov rcx,r9 |
| 822 mov r8,QWORD[40+rsp] |
| 823 mov r9,QWORD[48+rsp] |
| 824 |
| 825 |
| 826 xchg rdx,rcx |
| 827 sub rcx,16 |
| 828 jc NEAR $L$cbc_abort |
| 829 lea rsp,[((-184))+rsp] |
| 830 movaps XMMWORD[16+rsp],xmm6 |
| 831 movaps XMMWORD[32+rsp],xmm7 |
| 832 movaps XMMWORD[48+rsp],xmm8 |
| 833 movaps XMMWORD[64+rsp],xmm9 |
| 834 movaps XMMWORD[80+rsp],xmm10 |
| 835 movaps XMMWORD[96+rsp],xmm11 |
| 836 movaps XMMWORD[112+rsp],xmm12 |
| 837 movaps XMMWORD[128+rsp],xmm13 |
| 838 movaps XMMWORD[144+rsp],xmm14 |
| 839 movaps XMMWORD[160+rsp],xmm15 |
| 840 $L$cbc_body: |
| 841 movdqu xmm6,XMMWORD[r8] |
| 842 sub rsi,rdi |
| 843 call _vpaes_preheat |
| 844 cmp r9d,0 |
| 845 je NEAR $L$cbc_dec_loop |
| 846 jmp NEAR $L$cbc_enc_loop |
| 847 ALIGN 16 |
| 848 $L$cbc_enc_loop: |
| 849 movdqu xmm0,XMMWORD[rdi] |
| 850 pxor xmm0,xmm6 |
| 851 call _vpaes_encrypt_core |
| 852 movdqa xmm6,xmm0 |
| 853 movdqu XMMWORD[rdi*1+rsi],xmm0 |
| 854 lea rdi,[16+rdi] |
| 855 sub rcx,16 |
| 856 jnc NEAR $L$cbc_enc_loop |
| 857 jmp NEAR $L$cbc_done |
| 858 ALIGN 16 |
| 859 $L$cbc_dec_loop: |
| 860 movdqu xmm0,XMMWORD[rdi] |
| 861 movdqa xmm7,xmm0 |
| 862 call _vpaes_decrypt_core |
| 863 pxor xmm0,xmm6 |
| 864 movdqa xmm6,xmm7 |
| 865 movdqu XMMWORD[rdi*1+rsi],xmm0 |
| 866 lea rdi,[16+rdi] |
| 867 sub rcx,16 |
| 868 jnc NEAR $L$cbc_dec_loop |
| 869 $L$cbc_done: |
| 870 movdqu XMMWORD[r8],xmm6 |
| 871 movaps xmm6,XMMWORD[16+rsp] |
| 872 movaps xmm7,XMMWORD[32+rsp] |
| 873 movaps xmm8,XMMWORD[48+rsp] |
| 874 movaps xmm9,XMMWORD[64+rsp] |
| 875 movaps xmm10,XMMWORD[80+rsp] |
| 876 movaps xmm11,XMMWORD[96+rsp] |
| 877 movaps xmm12,XMMWORD[112+rsp] |
| 878 movaps xmm13,XMMWORD[128+rsp] |
| 879 movaps xmm14,XMMWORD[144+rsp] |
| 880 movaps xmm15,XMMWORD[160+rsp] |
| 881 lea rsp,[184+rsp] |
| 882 $L$cbc_epilogue: |
| 883 $L$cbc_abort: |
| 884 mov rdi,QWORD[8+rsp] ;WIN64 epilogue |
| 885 mov rsi,QWORD[16+rsp] |
| 886 DB 0F3h,0C3h ;repret |
| 887 $L$SEH_end_vpaes_cbc_encrypt: |
| 888 |
| 889 |
| 890 |
| 891 |
| 892 |
| 893 |
| 894 |
| 895 ALIGN 16 |
| 896 _vpaes_preheat: |
| 897 lea r10,[$L$k_s0F] |
| 898 movdqa xmm10,XMMWORD[((-32))+r10] |
| 899 movdqa xmm11,XMMWORD[((-16))+r10] |
| 900 movdqa xmm9,XMMWORD[r10] |
| 901 movdqa xmm13,XMMWORD[48+r10] |
| 902 movdqa xmm12,XMMWORD[64+r10] |
| 903 movdqa xmm15,XMMWORD[80+r10] |
| 904 movdqa xmm14,XMMWORD[96+r10] |
| 905 DB 0F3h,0C3h ;repret |
| 906 |
| 907 |
| 908 |
| 909 |
| 910 |
| 911 |
| 912 |
| 913 ALIGN 64 |
| 914 _vpaes_consts: |
| 915 $L$k_inv: |
| 916 DQ 0x0E05060F0D080180,0x040703090A0B0C02 |
| 917 DQ 0x01040A060F0B0780,0x030D0E0C02050809 |
| 918 |
| 919 $L$k_s0F: |
| 920 DQ 0x0F0F0F0F0F0F0F0F,0x0F0F0F0F0F0F0F0F |
| 921 |
| 922 $L$k_ipt: |
| 923 DQ 0xC2B2E8985A2A7000,0xCABAE09052227808 |
| 924 DQ 0x4C01307D317C4D00,0xCD80B1FCB0FDCC81 |
| 925 |
| 926 $L$k_sb1: |
| 927 DQ 0xB19BE18FCB503E00,0xA5DF7A6E142AF544 |
| 928 DQ 0x3618D415FAE22300,0x3BF7CCC10D2ED9EF |
| 929 $L$k_sb2: |
| 930 DQ 0xE27A93C60B712400,0x5EB7E955BC982FCD |
| 931 DQ 0x69EB88400AE12900,0xC2A163C8AB82234A |
| 932 $L$k_sbo: |
| 933 DQ 0xD0D26D176FBDC700,0x15AABF7AC502A878 |
| 934 DQ 0xCFE474A55FBB6A00,0x8E1E90D1412B35FA |
| 935 |
| 936 $L$k_mc_forward: |
| 937 DQ 0x0407060500030201,0x0C0F0E0D080B0A09 |
| 938 DQ 0x080B0A0904070605,0x000302010C0F0E0D |
| 939 DQ 0x0C0F0E0D080B0A09,0x0407060500030201 |
| 940 DQ 0x000302010C0F0E0D,0x080B0A0904070605 |
| 941 |
| 942 $L$k_mc_backward: |
| 943 DQ 0x0605040702010003,0x0E0D0C0F0A09080B |
| 944 DQ 0x020100030E0D0C0F,0x0A09080B06050407 |
| 945 DQ 0x0E0D0C0F0A09080B,0x0605040702010003 |
| 946 DQ 0x0A09080B06050407,0x020100030E0D0C0F |
| 947 |
| 948 $L$k_sr: |
| 949 DQ 0x0706050403020100,0x0F0E0D0C0B0A0908 |
| 950 DQ 0x030E09040F0A0500,0x0B06010C07020D08 |
| 951 DQ 0x0F060D040B020900,0x070E050C030A0108 |
| 952 DQ 0x0B0E0104070A0D00,0x0306090C0F020508 |
| 953 |
| 954 $L$k_rcon: |
| 955 DQ 0x1F8391B9AF9DEEB6,0x702A98084D7C7D81 |
| 956 |
| 957 $L$k_s63: |
| 958 DQ 0x5B5B5B5B5B5B5B5B,0x5B5B5B5B5B5B5B5B |
| 959 |
| 960 $L$k_opt: |
| 961 DQ 0xFF9F4929D6B66000,0xF7974121DEBE6808 |
| 962 DQ 0x01EDBD5150BCEC00,0xE10D5DB1B05C0CE0 |
| 963 |
| 964 $L$k_deskew: |
| 965 DQ 0x07E4A34047A4E300,0x1DFEB95A5DBEF91A |
| 966 DQ 0x5F36B5DC83EA6900,0x2841C2ABF49D1E77 |
| 967 |
| 968 |
| 969 |
| 970 |
| 971 |
| 972 $L$k_dksd: |
| 973 DQ 0xFEB91A5DA3E44700,0x0740E3A45A1DBEF9 |
| 974 DQ 0x41C277F4B5368300,0x5FDC69EAAB289D1E |
| 975 $L$k_dksb: |
| 976 DQ 0x9A4FCA1F8550D500,0x03D653861CC94C99 |
| 977 DQ 0x115BEDA7B6FC4A00,0xD993256F7E3482C8 |
| 978 $L$k_dkse: |
| 979 DQ 0xD5031CCA1FC9D600,0x53859A4C994F5086 |
| 980 DQ 0xA23196054FDC7BE8,0xCD5EF96A20B31487 |
| 981 $L$k_dks9: |
| 982 DQ 0xB6116FC87ED9A700,0x4AED933482255BFC |
| 983 DQ 0x4576516227143300,0x8BB89FACE9DAFDCE |
| 984 |
| 985 |
| 986 |
| 987 |
| 988 |
| 989 $L$k_dipt: |
| 990 DQ 0x0F505B040B545F00,0x154A411E114E451A |
| 991 DQ 0x86E383E660056500,0x12771772F491F194 |
| 992 |
| 993 $L$k_dsb9: |
| 994 DQ 0x851C03539A86D600,0xCAD51F504F994CC9 |
| 995 DQ 0xC03B1789ECD74900,0x725E2C9EB2FBA565 |
| 996 $L$k_dsbd: |
| 997 DQ 0x7D57CCDFE6B1A200,0xF56E9B13882A4439 |
| 998 DQ 0x3CE2FAF724C6CB00,0x2931180D15DEEFD3 |
| 999 $L$k_dsbb: |
| 1000 DQ 0xD022649296B44200,0x602646F6B0F2D404 |
| 1001 DQ 0xC19498A6CD596700,0xF3FF0C3E3255AA6B |
| 1002 $L$k_dsbe: |
| 1003 DQ 0x46F2929626D4D000,0x2242600464B4F6B0 |
| 1004 DQ 0x0C55A6CDFFAAC100,0x9467F36B98593E32 |
| 1005 $L$k_dsbo: |
| 1006 DQ 0x1387EA537EF94000,0xC7AA6DB9D4943E2D |
| 1007 DQ 0x12D7560F93441D00,0xCA4B8159D8C58E9C |
| 1008 DB 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105 |
| 1009 DB 111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54 |
| 1010 DB 52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97 |
| 1011 DB 109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32 |
| 1012 DB 85,110,105,118,101,114,115,105,116,121,41,0 |
| 1013 ALIGN 64 |
| 1014 |
| 1015 EXTERN __imp_RtlVirtualUnwind |
| 1016 |
| 1017 ALIGN 16 |
| 1018 se_handler: |
| 1019 push rsi |
| 1020 push rdi |
| 1021 push rbx |
| 1022 push rbp |
| 1023 push r12 |
| 1024 push r13 |
| 1025 push r14 |
| 1026 push r15 |
| 1027 pushfq |
| 1028 sub rsp,64 |
| 1029 |
| 1030 mov rax,QWORD[120+r8] |
| 1031 mov rbx,QWORD[248+r8] |
| 1032 |
| 1033 mov rsi,QWORD[8+r9] |
| 1034 mov r11,QWORD[56+r9] |
| 1035 |
| 1036 mov r10d,DWORD[r11] |
| 1037 lea r10,[r10*1+rsi] |
| 1038 cmp rbx,r10 |
| 1039 jb NEAR $L$in_prologue |
| 1040 |
| 1041 mov rax,QWORD[152+r8] |
| 1042 |
| 1043 mov r10d,DWORD[4+r11] |
| 1044 lea r10,[r10*1+rsi] |
| 1045 cmp rbx,r10 |
| 1046 jae NEAR $L$in_prologue |
| 1047 |
| 1048 lea rsi,[16+rax] |
| 1049 lea rdi,[512+r8] |
| 1050 mov ecx,20 |
| 1051 DD 0xa548f3fc |
| 1052 lea rax,[184+rax] |
| 1053 |
| 1054 $L$in_prologue: |
| 1055 mov rdi,QWORD[8+rax] |
| 1056 mov rsi,QWORD[16+rax] |
| 1057 mov QWORD[152+r8],rax |
| 1058 mov QWORD[168+r8],rsi |
| 1059 mov QWORD[176+r8],rdi |
| 1060 |
| 1061 mov rdi,QWORD[40+r9] |
| 1062 mov rsi,r8 |
| 1063 mov ecx,154 |
| 1064 DD 0xa548f3fc |
| 1065 |
| 1066 mov rsi,r9 |
| 1067 xor rcx,rcx |
| 1068 mov rdx,QWORD[8+rsi] |
| 1069 mov r8,QWORD[rsi] |
| 1070 mov r9,QWORD[16+rsi] |
| 1071 mov r10,QWORD[40+rsi] |
| 1072 lea r11,[56+rsi] |
| 1073 lea r12,[24+rsi] |
| 1074 mov QWORD[32+rsp],r10 |
| 1075 mov QWORD[40+rsp],r11 |
| 1076 mov QWORD[48+rsp],r12 |
| 1077 mov QWORD[56+rsp],rcx |
| 1078 call QWORD[__imp_RtlVirtualUnwind] |
| 1079 |
| 1080 mov eax,1 |
| 1081 add rsp,64 |
| 1082 popfq |
| 1083 pop r15 |
| 1084 pop r14 |
| 1085 pop r13 |
| 1086 pop r12 |
| 1087 pop rbp |
| 1088 pop rbx |
| 1089 pop rdi |
| 1090 pop rsi |
| 1091 DB 0F3h,0C3h ;repret |
| 1092 |
| 1093 |
| 1094 section .pdata rdata align=4 |
| 1095 ALIGN 4 |
| 1096 DD $L$SEH_begin_vpaes_set_encrypt_key wrt ..imagebase |
| 1097 DD $L$SEH_end_vpaes_set_encrypt_key wrt ..imagebase |
| 1098 DD $L$SEH_info_vpaes_set_encrypt_key wrt ..imagebase |
| 1099 |
| 1100 DD $L$SEH_begin_vpaes_set_decrypt_key wrt ..imagebase |
| 1101 DD $L$SEH_end_vpaes_set_decrypt_key wrt ..imagebase |
| 1102 DD $L$SEH_info_vpaes_set_decrypt_key wrt ..imagebase |
| 1103 |
| 1104 DD $L$SEH_begin_vpaes_encrypt wrt ..imagebase |
| 1105 DD $L$SEH_end_vpaes_encrypt wrt ..imagebase |
| 1106 DD $L$SEH_info_vpaes_encrypt wrt ..imagebase |
| 1107 |
| 1108 DD $L$SEH_begin_vpaes_decrypt wrt ..imagebase |
| 1109 DD $L$SEH_end_vpaes_decrypt wrt ..imagebase |
| 1110 DD $L$SEH_info_vpaes_decrypt wrt ..imagebase |
| 1111 |
| 1112 DD $L$SEH_begin_vpaes_cbc_encrypt wrt ..imagebase |
| 1113 DD $L$SEH_end_vpaes_cbc_encrypt wrt ..imagebase |
| 1114 DD $L$SEH_info_vpaes_cbc_encrypt wrt ..imagebase |
| 1115 |
| 1116 section .xdata rdata align=8 |
| 1117 ALIGN 8 |
| 1118 $L$SEH_info_vpaes_set_encrypt_key: |
| 1119 DB 9,0,0,0 |
| 1120 DD se_handler wrt ..imagebase |
| 1121 DD $L$enc_key_body wrt ..imagebase,$L$enc_key_epilogue wrt ..imageb
ase |
| 1122 $L$SEH_info_vpaes_set_decrypt_key: |
| 1123 DB 9,0,0,0 |
| 1124 DD se_handler wrt ..imagebase |
| 1125 DD $L$dec_key_body wrt ..imagebase,$L$dec_key_epilogue wrt ..imageb
ase |
| 1126 $L$SEH_info_vpaes_encrypt: |
| 1127 DB 9,0,0,0 |
| 1128 DD se_handler wrt ..imagebase |
| 1129 DD $L$enc_body wrt ..imagebase,$L$enc_epilogue wrt ..imagebase |
| 1130 $L$SEH_info_vpaes_decrypt: |
| 1131 DB 9,0,0,0 |
| 1132 DD se_handler wrt ..imagebase |
| 1133 DD $L$dec_body wrt ..imagebase,$L$dec_epilogue wrt ..imagebase |
| 1134 $L$SEH_info_vpaes_cbc_encrypt: |
| 1135 DB 9,0,0,0 |
| 1136 DD se_handler wrt ..imagebase |
| 1137 DD $L$cbc_body wrt ..imagebase,$L$cbc_epilogue wrt ..imagebase |
OLD | NEW |