1 OPTION DOTNAME 2 .text$ SEGMENT ALIGN(256) 'CODE' 3 EXTERN OPENSSL_ia32cap_P:NEAR 4 PUBLIC aesni_encrypt 5 6 ALIGN 16 7 aesni_encrypt PROC PUBLIC 8 movups xmm2,XMMWORD PTR[rcx] 9 mov eax,DWORD PTR[240+r8] 10 movups xmm0,XMMWORD PTR[r8] 11 movups xmm1,XMMWORD PTR[16+r8] 12 lea r8,QWORD PTR[32+r8] 13 xorps xmm2,xmm0 14 $L$oop_enc1_1:: 15 DB 102,15,56,220,209 16 dec eax 17 movups xmm1,XMMWORD PTR[r8] 18 lea r8,QWORD PTR[16+r8] 19 jnz $L$oop_enc1_1 20 DB 102,15,56,221,209 21 movups XMMWORD PTR[rdx],xmm2 22 DB 0F3h,0C3h ;repret 23 aesni_encrypt ENDP 24 25 PUBLIC aesni_decrypt 26 27 ALIGN 16 28 aesni_decrypt PROC PUBLIC 29 movups xmm2,XMMWORD PTR[rcx] 30 mov eax,DWORD PTR[240+r8] 31 movups xmm0,XMMWORD PTR[r8] 32 movups xmm1,XMMWORD PTR[16+r8] 33 lea r8,QWORD PTR[32+r8] 34 xorps xmm2,xmm0 35 $L$oop_dec1_2:: 36 DB 102,15,56,222,209 37 dec eax 38 movups xmm1,XMMWORD PTR[r8] 39 lea r8,QWORD PTR[16+r8] 40 jnz $L$oop_dec1_2 41 DB 102,15,56,223,209 42 movups XMMWORD PTR[rdx],xmm2 43 DB 0F3h,0C3h ;repret 44 aesni_decrypt ENDP 45 46 ALIGN 16 47 _aesni_encrypt2 PROC PRIVATE 48 movups xmm0,XMMWORD PTR[rcx] 49 shl eax,4 50 movups xmm1,XMMWORD PTR[16+rcx] 51 xorps xmm2,xmm0 52 xorps xmm3,xmm0 53 movups xmm0,XMMWORD PTR[32+rcx] 54 lea rcx,QWORD PTR[32+rax*1+rcx] 55 neg rax 56 add rax,16 57 58 $L$enc_loop2:: 59 DB 102,15,56,220,209 60 DB 102,15,56,220,217 61 movups xmm1,XMMWORD PTR[rax*1+rcx] 62 add rax,32 63 DB 102,15,56,220,208 64 DB 102,15,56,220,216 65 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 66 jnz $L$enc_loop2 67 68 DB 102,15,56,220,209 69 DB 102,15,56,220,217 70 DB 102,15,56,221,208 71 DB 102,15,56,221,216 72 DB 0F3h,0C3h ;repret 73 _aesni_encrypt2 ENDP 74 75 ALIGN 16 76 _aesni_decrypt2 PROC PRIVATE 77 movups xmm0,XMMWORD PTR[rcx] 78 shl eax,4 79 movups xmm1,XMMWORD PTR[16+rcx] 80 xorps xmm2,xmm0 81 xorps xmm3,xmm0 82 movups xmm0,XMMWORD PTR[32+rcx] 83 lea rcx,QWORD PTR[32+rax*1+rcx] 84 neg rax 85 add rax,16 86 87 $L$dec_loop2:: 88 DB 102,15,56,222,209 89 DB 102,15,56,222,217 90 movups xmm1,XMMWORD PTR[rax*1+rcx] 91 add rax,32 92 DB 102,15,56,222,208 93 DB 102,15,56,222,216 94 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 95 jnz $L$dec_loop2 96 97 DB 102,15,56,222,209 98 DB 102,15,56,222,217 99 DB 102,15,56,223,208 100 DB 102,15,56,223,216 101 DB 0F3h,0C3h ;repret 102 _aesni_decrypt2 ENDP 103 104 ALIGN 16 105 _aesni_encrypt3 PROC PRIVATE 106 movups xmm0,XMMWORD PTR[rcx] 107 shl eax,4 108 movups xmm1,XMMWORD PTR[16+rcx] 109 xorps xmm2,xmm0 110 xorps xmm3,xmm0 111 xorps xmm4,xmm0 112 movups xmm0,XMMWORD PTR[32+rcx] 113 lea rcx,QWORD PTR[32+rax*1+rcx] 114 neg rax 115 add rax,16 116 117 $L$enc_loop3:: 118 DB 102,15,56,220,209 119 DB 102,15,56,220,217 120 DB 102,15,56,220,225 121 movups xmm1,XMMWORD PTR[rax*1+rcx] 122 add rax,32 123 DB 102,15,56,220,208 124 DB 102,15,56,220,216 125 DB 102,15,56,220,224 126 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 127 jnz $L$enc_loop3 128 129 DB 102,15,56,220,209 130 DB 102,15,56,220,217 131 DB 102,15,56,220,225 132 DB 102,15,56,221,208 133 DB 102,15,56,221,216 134 DB 102,15,56,221,224 135 DB 0F3h,0C3h ;repret 136 _aesni_encrypt3 ENDP 137 138 ALIGN 16 139 _aesni_decrypt3 PROC PRIVATE 140 movups xmm0,XMMWORD PTR[rcx] 141 shl eax,4 142 movups xmm1,XMMWORD PTR[16+rcx] 143 xorps xmm2,xmm0 144 xorps xmm3,xmm0 145 xorps xmm4,xmm0 146 movups xmm0,XMMWORD PTR[32+rcx] 147 lea rcx,QWORD PTR[32+rax*1+rcx] 148 neg rax 149 add rax,16 150 151 $L$dec_loop3:: 152 DB 102,15,56,222,209 153 DB 102,15,56,222,217 154 DB 102,15,56,222,225 155 movups xmm1,XMMWORD PTR[rax*1+rcx] 156 add rax,32 157 DB 102,15,56,222,208 158 DB 102,15,56,222,216 159 DB 102,15,56,222,224 160 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 161 jnz $L$dec_loop3 162 163 DB 102,15,56,222,209 164 DB 102,15,56,222,217 165 DB 102,15,56,222,225 166 DB 102,15,56,223,208 167 DB 102,15,56,223,216 168 DB 102,15,56,223,224 169 DB 0F3h,0C3h ;repret 170 _aesni_decrypt3 ENDP 171 172 ALIGN 16 173 _aesni_encrypt4 PROC PRIVATE 174 movups xmm0,XMMWORD PTR[rcx] 175 shl eax,4 176 movups xmm1,XMMWORD PTR[16+rcx] 177 xorps xmm2,xmm0 178 xorps xmm3,xmm0 179 xorps xmm4,xmm0 180 xorps xmm5,xmm0 181 movups xmm0,XMMWORD PTR[32+rcx] 182 lea rcx,QWORD PTR[32+rax*1+rcx] 183 neg rax 184 DB 00fh,01fh,000h 185 add rax,16 186 187 $L$enc_loop4:: 188 DB 102,15,56,220,209 189 DB 102,15,56,220,217 190 DB 102,15,56,220,225 191 DB 102,15,56,220,233 192 movups xmm1,XMMWORD PTR[rax*1+rcx] 193 add rax,32 194 DB 102,15,56,220,208 195 DB 102,15,56,220,216 196 DB 102,15,56,220,224 197 DB 102,15,56,220,232 198 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 199 jnz $L$enc_loop4 200 201 DB 102,15,56,220,209 202 DB 102,15,56,220,217 203 DB 102,15,56,220,225 204 DB 102,15,56,220,233 205 DB 102,15,56,221,208 206 DB 102,15,56,221,216 207 DB 102,15,56,221,224 208 DB 102,15,56,221,232 209 DB 0F3h,0C3h ;repret 210 _aesni_encrypt4 ENDP 211 212 ALIGN 16 213 _aesni_decrypt4 PROC PRIVATE 214 movups xmm0,XMMWORD PTR[rcx] 215 shl eax,4 216 movups xmm1,XMMWORD PTR[16+rcx] 217 xorps xmm2,xmm0 218 xorps xmm3,xmm0 219 xorps xmm4,xmm0 220 xorps xmm5,xmm0 221 movups xmm0,XMMWORD PTR[32+rcx] 222 lea rcx,QWORD PTR[32+rax*1+rcx] 223 neg rax 224 DB 00fh,01fh,000h 225 add rax,16 226 227 $L$dec_loop4:: 228 DB 102,15,56,222,209 229 DB 102,15,56,222,217 230 DB 102,15,56,222,225 231 DB 102,15,56,222,233 232 movups xmm1,XMMWORD PTR[rax*1+rcx] 233 add rax,32 234 DB 102,15,56,222,208 235 DB 102,15,56,222,216 236 DB 102,15,56,222,224 237 DB 102,15,56,222,232 238 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 239 jnz $L$dec_loop4 240 241 DB 102,15,56,222,209 242 DB 102,15,56,222,217 243 DB 102,15,56,222,225 244 DB 102,15,56,222,233 245 DB 102,15,56,223,208 246 DB 102,15,56,223,216 247 DB 102,15,56,223,224 248 DB 102,15,56,223,232 249 DB 0F3h,0C3h ;repret 250 _aesni_decrypt4 ENDP 251 252 ALIGN 16 253 _aesni_encrypt6 PROC PRIVATE 254 movups xmm0,XMMWORD PTR[rcx] 255 shl eax,4 256 movups xmm1,XMMWORD PTR[16+rcx] 257 xorps xmm2,xmm0 258 pxor xmm3,xmm0 259 pxor xmm4,xmm0 260 DB 102,15,56,220,209 261 lea rcx,QWORD PTR[32+rax*1+rcx] 262 neg rax 263 DB 102,15,56,220,217 264 pxor xmm5,xmm0 265 pxor xmm6,xmm0 266 DB 102,15,56,220,225 267 pxor xmm7,xmm0 268 add rax,16 269 DB 102,15,56,220,233 270 DB 102,15,56,220,241 271 DB 102,15,56,220,249 272 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 273 jmp $L$enc_loop6_enter 274 ALIGN 16 275 $L$enc_loop6:: 276 DB 102,15,56,220,209 277 DB 102,15,56,220,217 278 DB 102,15,56,220,225 279 DB 102,15,56,220,233 280 DB 102,15,56,220,241 281 DB 102,15,56,220,249 282 $L$enc_loop6_enter:: 283 movups xmm1,XMMWORD PTR[rax*1+rcx] 284 add rax,32 285 DB 102,15,56,220,208 286 DB 102,15,56,220,216 287 DB 102,15,56,220,224 288 DB 102,15,56,220,232 289 DB 102,15,56,220,240 290 DB 102,15,56,220,248 291 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 292 jnz $L$enc_loop6 293 294 DB 102,15,56,220,209 295 DB 102,15,56,220,217 296 DB 102,15,56,220,225 297 DB 102,15,56,220,233 298 DB 102,15,56,220,241 299 DB 102,15,56,220,249 300 DB 102,15,56,221,208 301 DB 102,15,56,221,216 302 DB 102,15,56,221,224 303 DB 102,15,56,221,232 304 DB 102,15,56,221,240 305 DB 102,15,56,221,248 306 DB 0F3h,0C3h ;repret 307 _aesni_encrypt6 ENDP 308 309 ALIGN 16 310 _aesni_decrypt6 PROC PRIVATE 311 movups xmm0,XMMWORD PTR[rcx] 312 shl eax,4 313 movups xmm1,XMMWORD PTR[16+rcx] 314 xorps xmm2,xmm0 315 pxor xmm3,xmm0 316 pxor xmm4,xmm0 317 DB 102,15,56,222,209 318 lea rcx,QWORD PTR[32+rax*1+rcx] 319 neg rax 320 DB 102,15,56,222,217 321 pxor xmm5,xmm0 322 pxor xmm6,xmm0 323 DB 102,15,56,222,225 324 pxor xmm7,xmm0 325 add rax,16 326 DB 102,15,56,222,233 327 DB 102,15,56,222,241 328 DB 102,15,56,222,249 329 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 330 jmp $L$dec_loop6_enter 331 ALIGN 16 332 $L$dec_loop6:: 333 DB 102,15,56,222,209 334 DB 102,15,56,222,217 335 DB 102,15,56,222,225 336 DB 102,15,56,222,233 337 DB 102,15,56,222,241 338 DB 102,15,56,222,249 339 $L$dec_loop6_enter:: 340 movups xmm1,XMMWORD PTR[rax*1+rcx] 341 add rax,32 342 DB 102,15,56,222,208 343 DB 102,15,56,222,216 344 DB 102,15,56,222,224 345 DB 102,15,56,222,232 346 DB 102,15,56,222,240 347 DB 102,15,56,222,248 348 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 349 jnz $L$dec_loop6 350 351 DB 102,15,56,222,209 352 DB 102,15,56,222,217 353 DB 102,15,56,222,225 354 DB 102,15,56,222,233 355 DB 102,15,56,222,241 356 DB 102,15,56,222,249 357 DB 102,15,56,223,208 358 DB 102,15,56,223,216 359 DB 102,15,56,223,224 360 DB 102,15,56,223,232 361 DB 102,15,56,223,240 362 DB 102,15,56,223,248 363 DB 0F3h,0C3h ;repret 364 _aesni_decrypt6 ENDP 365 366 ALIGN 16 367 _aesni_encrypt8 PROC PRIVATE 368 movups xmm0,XMMWORD PTR[rcx] 369 shl eax,4 370 movups xmm1,XMMWORD PTR[16+rcx] 371 xorps xmm2,xmm0 372 xorps xmm3,xmm0 373 pxor xmm4,xmm0 374 pxor xmm5,xmm0 375 pxor xmm6,xmm0 376 lea rcx,QWORD PTR[32+rax*1+rcx] 377 neg rax 378 DB 102,15,56,220,209 379 add rax,16 380 pxor xmm7,xmm0 381 DB 102,15,56,220,217 382 pxor xmm8,xmm0 383 pxor xmm9,xmm0 384 DB 102,15,56,220,225 385 DB 102,15,56,220,233 386 DB 102,15,56,220,241 387 DB 102,15,56,220,249 388 DB 102,68,15,56,220,193 389 DB 102,68,15,56,220,201 390 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 391 jmp $L$enc_loop8_enter 392 ALIGN 16 393 $L$enc_loop8:: 394 DB 102,15,56,220,209 395 DB 102,15,56,220,217 396 DB 102,15,56,220,225 397 DB 102,15,56,220,233 398 DB 102,15,56,220,241 399 DB 102,15,56,220,249 400 DB 102,68,15,56,220,193 401 DB 102,68,15,56,220,201 402 $L$enc_loop8_enter:: 403 movups xmm1,XMMWORD PTR[rax*1+rcx] 404 add rax,32 405 DB 102,15,56,220,208 406 DB 102,15,56,220,216 407 DB 102,15,56,220,224 408 DB 102,15,56,220,232 409 DB 102,15,56,220,240 410 DB 102,15,56,220,248 411 DB 102,68,15,56,220,192 412 DB 102,68,15,56,220,200 413 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 414 jnz $L$enc_loop8 415 416 DB 102,15,56,220,209 417 DB 102,15,56,220,217 418 DB 102,15,56,220,225 419 DB 102,15,56,220,233 420 DB 102,15,56,220,241 421 DB 102,15,56,220,249 422 DB 102,68,15,56,220,193 423 DB 102,68,15,56,220,201 424 DB 102,15,56,221,208 425 DB 102,15,56,221,216 426 DB 102,15,56,221,224 427 DB 102,15,56,221,232 428 DB 102,15,56,221,240 429 DB 102,15,56,221,248 430 DB 102,68,15,56,221,192 431 DB 102,68,15,56,221,200 432 DB 0F3h,0C3h ;repret 433 _aesni_encrypt8 ENDP 434 435 ALIGN 16 436 _aesni_decrypt8 PROC PRIVATE 437 movups xmm0,XMMWORD PTR[rcx] 438 shl eax,4 439 movups xmm1,XMMWORD PTR[16+rcx] 440 xorps xmm2,xmm0 441 xorps xmm3,xmm0 442 pxor xmm4,xmm0 443 pxor xmm5,xmm0 444 pxor xmm6,xmm0 445 lea rcx,QWORD PTR[32+rax*1+rcx] 446 neg rax 447 DB 102,15,56,222,209 448 add rax,16 449 pxor xmm7,xmm0 450 DB 102,15,56,222,217 451 pxor xmm8,xmm0 452 pxor xmm9,xmm0 453 DB 102,15,56,222,225 454 DB 102,15,56,222,233 455 DB 102,15,56,222,241 456 DB 102,15,56,222,249 457 DB 102,68,15,56,222,193 458 DB 102,68,15,56,222,201 459 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 460 jmp $L$dec_loop8_enter 461 ALIGN 16 462 $L$dec_loop8:: 463 DB 102,15,56,222,209 464 DB 102,15,56,222,217 465 DB 102,15,56,222,225 466 DB 102,15,56,222,233 467 DB 102,15,56,222,241 468 DB 102,15,56,222,249 469 DB 102,68,15,56,222,193 470 DB 102,68,15,56,222,201 471 $L$dec_loop8_enter:: 472 movups xmm1,XMMWORD PTR[rax*1+rcx] 473 add rax,32 474 DB 102,15,56,222,208 475 DB 102,15,56,222,216 476 DB 102,15,56,222,224 477 DB 102,15,56,222,232 478 DB 102,15,56,222,240 479 DB 102,15,56,222,248 480 DB 102,68,15,56,222,192 481 DB 102,68,15,56,222,200 482 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 483 jnz $L$dec_loop8 484 485 DB 102,15,56,222,209 486 DB 102,15,56,222,217 487 DB 102,15,56,222,225 488 DB 102,15,56,222,233 489 DB 102,15,56,222,241 490 DB 102,15,56,222,249 491 DB 102,68,15,56,222,193 492 DB 102,68,15,56,222,201 493 DB 102,15,56,223,208 494 DB 102,15,56,223,216 495 DB 102,15,56,223,224 496 DB 102,15,56,223,232 497 DB 102,15,56,223,240 498 DB 102,15,56,223,248 499 DB 102,68,15,56,223,192 500 DB 102,68,15,56,223,200 501 DB 0F3h,0C3h ;repret 502 _aesni_decrypt8 ENDP 503 PUBLIC aesni_ecb_encrypt 504 505 ALIGN 16 506 aesni_ecb_encrypt PROC PUBLIC 507 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue 508 mov QWORD PTR[16+rsp],rsi 509 mov rax,rsp 510 $L$SEH_begin_aesni_ecb_encrypt:: 511 mov rdi,rcx 512 mov rsi,rdx 513 mov rdx,r8 514 mov rcx,r9 515 mov r8,QWORD PTR[40+rsp] 516 517 518 and rdx,-16 519 jz $L$ecb_ret 520 521 mov eax,DWORD PTR[240+rcx] 522 movups xmm0,XMMWORD PTR[rcx] 523 mov r11,rcx 524 mov r10d,eax 525 test r8d,r8d 526 jz $L$ecb_decrypt 527 528 cmp rdx,080h 529 jb $L$ecb_enc_tail 530 531 movdqu xmm2,XMMWORD PTR[rdi] 532 movdqu xmm3,XMMWORD PTR[16+rdi] 533 movdqu xmm4,XMMWORD PTR[32+rdi] 534 movdqu xmm5,XMMWORD PTR[48+rdi] 535 movdqu xmm6,XMMWORD PTR[64+rdi] 536 movdqu xmm7,XMMWORD PTR[80+rdi] 537 movdqu xmm8,XMMWORD PTR[96+rdi] 538 movdqu xmm9,XMMWORD PTR[112+rdi] 539 lea rdi,QWORD PTR[128+rdi] 540 sub rdx,080h 541 jmp $L$ecb_enc_loop8_enter 542 ALIGN 16 543 $L$ecb_enc_loop8:: 544 movups XMMWORD PTR[rsi],xmm2 545 mov rcx,r11 546 movdqu xmm2,XMMWORD PTR[rdi] 547 mov eax,r10d 548 movups XMMWORD PTR[16+rsi],xmm3 549 movdqu xmm3,XMMWORD PTR[16+rdi] 550 movups XMMWORD PTR[32+rsi],xmm4 551 movdqu xmm4,XMMWORD PTR[32+rdi] 552 movups XMMWORD PTR[48+rsi],xmm5 553 movdqu xmm5,XMMWORD PTR[48+rdi] 554 movups XMMWORD PTR[64+rsi],xmm6 555 movdqu xmm6,XMMWORD PTR[64+rdi] 556 movups XMMWORD PTR[80+rsi],xmm7 557 movdqu xmm7,XMMWORD PTR[80+rdi] 558 movups XMMWORD PTR[96+rsi],xmm8 559 movdqu xmm8,XMMWORD PTR[96+rdi] 560 movups XMMWORD PTR[112+rsi],xmm9 561 lea rsi,QWORD PTR[128+rsi] 562 movdqu xmm9,XMMWORD PTR[112+rdi] 563 lea rdi,QWORD PTR[128+rdi] 564 $L$ecb_enc_loop8_enter:: 565 566 call _aesni_encrypt8 567 568 sub rdx,080h 569 jnc $L$ecb_enc_loop8 570 571 movups XMMWORD PTR[rsi],xmm2 572 mov rcx,r11 573 movups XMMWORD PTR[16+rsi],xmm3 574 mov eax,r10d 575 movups XMMWORD PTR[32+rsi],xmm4 576 movups XMMWORD PTR[48+rsi],xmm5 577 movups XMMWORD PTR[64+rsi],xmm6 578 movups XMMWORD PTR[80+rsi],xmm7 579 movups XMMWORD PTR[96+rsi],xmm8 580 movups XMMWORD PTR[112+rsi],xmm9 581 lea rsi,QWORD PTR[128+rsi] 582 add rdx,080h 583 jz $L$ecb_ret 584 585 $L$ecb_enc_tail:: 586 movups xmm2,XMMWORD PTR[rdi] 587 cmp rdx,020h 588 jb $L$ecb_enc_one 589 movups xmm3,XMMWORD PTR[16+rdi] 590 je $L$ecb_enc_two 591 movups xmm4,XMMWORD PTR[32+rdi] 592 cmp rdx,040h 593 jb $L$ecb_enc_three 594 movups xmm5,XMMWORD PTR[48+rdi] 595 je $L$ecb_enc_four 596 movups xmm6,XMMWORD PTR[64+rdi] 597 cmp rdx,060h 598 jb $L$ecb_enc_five 599 movups xmm7,XMMWORD PTR[80+rdi] 600 je $L$ecb_enc_six 601 movdqu xmm8,XMMWORD PTR[96+rdi] 602 call _aesni_encrypt8 603 movups XMMWORD PTR[rsi],xmm2 604 movups XMMWORD PTR[16+rsi],xmm3 605 movups XMMWORD PTR[32+rsi],xmm4 606 movups XMMWORD PTR[48+rsi],xmm5 607 movups XMMWORD PTR[64+rsi],xmm6 608 movups XMMWORD PTR[80+rsi],xmm7 609 movups XMMWORD PTR[96+rsi],xmm8 610 jmp $L$ecb_ret 611 ALIGN 16 612 $L$ecb_enc_one:: 613 movups xmm0,XMMWORD PTR[rcx] 614 movups xmm1,XMMWORD PTR[16+rcx] 615 lea rcx,QWORD PTR[32+rcx] 616 xorps xmm2,xmm0 617 $L$oop_enc1_3:: 618 DB 102,15,56,220,209 619 dec eax 620 movups xmm1,XMMWORD PTR[rcx] 621 lea rcx,QWORD PTR[16+rcx] 622 jnz $L$oop_enc1_3 623 DB 102,15,56,221,209 624 movups XMMWORD PTR[rsi],xmm2 625 jmp $L$ecb_ret 626 ALIGN 16 627 $L$ecb_enc_two:: 628 call _aesni_encrypt2 629 movups XMMWORD PTR[rsi],xmm2 630 movups XMMWORD PTR[16+rsi],xmm3 631 jmp $L$ecb_ret 632 ALIGN 16 633 $L$ecb_enc_three:: 634 call _aesni_encrypt3 635 movups XMMWORD PTR[rsi],xmm2 636 movups XMMWORD PTR[16+rsi],xmm3 637 movups XMMWORD PTR[32+rsi],xmm4 638 jmp $L$ecb_ret 639 ALIGN 16 640 $L$ecb_enc_four:: 641 call _aesni_encrypt4 642 movups XMMWORD PTR[rsi],xmm2 643 movups XMMWORD PTR[16+rsi],xmm3 644 movups XMMWORD PTR[32+rsi],xmm4 645 movups XMMWORD PTR[48+rsi],xmm5 646 jmp $L$ecb_ret 647 ALIGN 16 648 $L$ecb_enc_five:: 649 xorps xmm7,xmm7 650 call _aesni_encrypt6 651 movups XMMWORD PTR[rsi],xmm2 652 movups XMMWORD PTR[16+rsi],xmm3 653 movups XMMWORD PTR[32+rsi],xmm4 654 movups XMMWORD PTR[48+rsi],xmm5 655 movups XMMWORD PTR[64+rsi],xmm6 656 jmp $L$ecb_ret 657 ALIGN 16 658 $L$ecb_enc_six:: 659 call _aesni_encrypt6 660 movups XMMWORD PTR[rsi],xmm2 661 movups XMMWORD PTR[16+rsi],xmm3 662 movups XMMWORD PTR[32+rsi],xmm4 663 movups XMMWORD PTR[48+rsi],xmm5 664 movups XMMWORD PTR[64+rsi],xmm6 665 movups XMMWORD PTR[80+rsi],xmm7 666 jmp $L$ecb_ret 667 668 ALIGN 16 669 $L$ecb_decrypt:: 670 cmp rdx,080h 671 jb $L$ecb_dec_tail 672 673 movdqu xmm2,XMMWORD PTR[rdi] 674 movdqu xmm3,XMMWORD PTR[16+rdi] 675 movdqu xmm4,XMMWORD PTR[32+rdi] 676 movdqu xmm5,XMMWORD PTR[48+rdi] 677 movdqu xmm6,XMMWORD PTR[64+rdi] 678 movdqu xmm7,XMMWORD PTR[80+rdi] 679 movdqu xmm8,XMMWORD PTR[96+rdi] 680 movdqu xmm9,XMMWORD PTR[112+rdi] 681 lea rdi,QWORD PTR[128+rdi] 682 sub rdx,080h 683 jmp $L$ecb_dec_loop8_enter 684 ALIGN 16 685 $L$ecb_dec_loop8:: 686 movups XMMWORD PTR[rsi],xmm2 687 mov rcx,r11 688 movdqu xmm2,XMMWORD PTR[rdi] 689 mov eax,r10d 690 movups XMMWORD PTR[16+rsi],xmm3 691 movdqu xmm3,XMMWORD PTR[16+rdi] 692 movups XMMWORD PTR[32+rsi],xmm4 693 movdqu xmm4,XMMWORD PTR[32+rdi] 694 movups XMMWORD PTR[48+rsi],xmm5 695 movdqu xmm5,XMMWORD PTR[48+rdi] 696 movups XMMWORD PTR[64+rsi],xmm6 697 movdqu xmm6,XMMWORD PTR[64+rdi] 698 movups XMMWORD PTR[80+rsi],xmm7 699 movdqu xmm7,XMMWORD PTR[80+rdi] 700 movups XMMWORD PTR[96+rsi],xmm8 701 movdqu xmm8,XMMWORD PTR[96+rdi] 702 movups XMMWORD PTR[112+rsi],xmm9 703 lea rsi,QWORD PTR[128+rsi] 704 movdqu xmm9,XMMWORD PTR[112+rdi] 705 lea rdi,QWORD PTR[128+rdi] 706 $L$ecb_dec_loop8_enter:: 707 708 call _aesni_decrypt8 709 710 movups xmm0,XMMWORD PTR[r11] 711 sub rdx,080h 712 jnc $L$ecb_dec_loop8 713 714 movups XMMWORD PTR[rsi],xmm2 715 mov rcx,r11 716 movups XMMWORD PTR[16+rsi],xmm3 717 mov eax,r10d 718 movups XMMWORD PTR[32+rsi],xmm4 719 movups XMMWORD PTR[48+rsi],xmm5 720 movups XMMWORD PTR[64+rsi],xmm6 721 movups XMMWORD PTR[80+rsi],xmm7 722 movups XMMWORD PTR[96+rsi],xmm8 723 movups XMMWORD PTR[112+rsi],xmm9 724 lea rsi,QWORD PTR[128+rsi] 725 add rdx,080h 726 jz $L$ecb_ret 727 728 $L$ecb_dec_tail:: 729 movups xmm2,XMMWORD PTR[rdi] 730 cmp rdx,020h 731 jb $L$ecb_dec_one 732 movups xmm3,XMMWORD PTR[16+rdi] 733 je $L$ecb_dec_two 734 movups xmm4,XMMWORD PTR[32+rdi] 735 cmp rdx,040h 736 jb $L$ecb_dec_three 737 movups xmm5,XMMWORD PTR[48+rdi] 738 je $L$ecb_dec_four 739 movups xmm6,XMMWORD PTR[64+rdi] 740 cmp rdx,060h 741 jb $L$ecb_dec_five 742 movups xmm7,XMMWORD PTR[80+rdi] 743 je $L$ecb_dec_six 744 movups xmm8,XMMWORD PTR[96+rdi] 745 movups xmm0,XMMWORD PTR[rcx] 746 call _aesni_decrypt8 747 movups XMMWORD PTR[rsi],xmm2 748 movups XMMWORD PTR[16+rsi],xmm3 749 movups XMMWORD PTR[32+rsi],xmm4 750 movups XMMWORD PTR[48+rsi],xmm5 751 movups XMMWORD PTR[64+rsi],xmm6 752 movups XMMWORD PTR[80+rsi],xmm7 753 movups XMMWORD PTR[96+rsi],xmm8 754 jmp $L$ecb_ret 755 ALIGN 16 756 $L$ecb_dec_one:: 757 movups xmm0,XMMWORD PTR[rcx] 758 movups xmm1,XMMWORD PTR[16+rcx] 759 lea rcx,QWORD PTR[32+rcx] 760 xorps xmm2,xmm0 761 $L$oop_dec1_4:: 762 DB 102,15,56,222,209 763 dec eax 764 movups xmm1,XMMWORD PTR[rcx] 765 lea rcx,QWORD PTR[16+rcx] 766 jnz $L$oop_dec1_4 767 DB 102,15,56,223,209 768 movups XMMWORD PTR[rsi],xmm2 769 jmp $L$ecb_ret 770 ALIGN 16 771 $L$ecb_dec_two:: 772 call _aesni_decrypt2 773 movups XMMWORD PTR[rsi],xmm2 774 movups XMMWORD PTR[16+rsi],xmm3 775 jmp $L$ecb_ret 776 ALIGN 16 777 $L$ecb_dec_three:: 778 call _aesni_decrypt3 779 movups XMMWORD PTR[rsi],xmm2 780 movups XMMWORD PTR[16+rsi],xmm3 781 movups XMMWORD PTR[32+rsi],xmm4 782 jmp $L$ecb_ret 783 ALIGN 16 784 $L$ecb_dec_four:: 785 call _aesni_decrypt4 786 movups XMMWORD PTR[rsi],xmm2 787 movups XMMWORD PTR[16+rsi],xmm3 788 movups XMMWORD PTR[32+rsi],xmm4 789 movups XMMWORD PTR[48+rsi],xmm5 790 jmp $L$ecb_ret 791 ALIGN 16 792 $L$ecb_dec_five:: 793 xorps xmm7,xmm7 794 call _aesni_decrypt6 795 movups XMMWORD PTR[rsi],xmm2 796 movups XMMWORD PTR[16+rsi],xmm3 797 movups XMMWORD PTR[32+rsi],xmm4 798 movups XMMWORD PTR[48+rsi],xmm5 799 movups XMMWORD PTR[64+rsi],xmm6 800 jmp $L$ecb_ret 801 ALIGN 16 802 $L$ecb_dec_six:: 803 call _aesni_decrypt6 804 movups XMMWORD PTR[rsi],xmm2 805 movups XMMWORD PTR[16+rsi],xmm3 806 movups XMMWORD PTR[32+rsi],xmm4 807 movups XMMWORD PTR[48+rsi],xmm5 808 movups XMMWORD PTR[64+rsi],xmm6 809 movups XMMWORD PTR[80+rsi],xmm7 810 811 $L$ecb_ret:: 812 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue 813 mov rsi,QWORD PTR[16+rsp] 814 DB 0F3h,0C3h ;repret 815 $L$SEH_end_aesni_ecb_encrypt:: 816 aesni_ecb_encrypt ENDP 817 PUBLIC aesni_ccm64_encrypt_blocks 818 819 ALIGN 16 820 aesni_ccm64_encrypt_blocks PROC PUBLIC 821 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue 822 mov QWORD PTR[16+rsp],rsi 823 mov rax,rsp 824 $L$SEH_begin_aesni_ccm64_encrypt_blocks:: 825 mov rdi,rcx 826 mov rsi,rdx 827 mov rdx,r8 828 mov rcx,r9 829 mov r8,QWORD PTR[40+rsp] 830 mov r9,QWORD PTR[48+rsp] 831 832 833 lea rsp,QWORD PTR[((-88))+rsp] 834 movaps XMMWORD PTR[rsp],xmm6 835 movaps XMMWORD PTR[16+rsp],xmm7 836 movaps XMMWORD PTR[32+rsp],xmm8 837 movaps XMMWORD PTR[48+rsp],xmm9 838 $L$ccm64_enc_body:: 839 mov eax,DWORD PTR[240+rcx] 840 movdqu xmm6,XMMWORD PTR[r8] 841 movdqa xmm9,XMMWORD PTR[$L$increment64] 842 movdqa xmm7,XMMWORD PTR[$L$bswap_mask] 843 844 shl eax,4 845 mov r10d,16 846 lea r11,QWORD PTR[rcx] 847 movdqu xmm3,XMMWORD PTR[r9] 848 movdqa xmm2,xmm6 849 lea rcx,QWORD PTR[32+rax*1+rcx] 850 DB 102,15,56,0,247 851 sub r10,rax 852 jmp $L$ccm64_enc_outer 853 ALIGN 16 854 $L$ccm64_enc_outer:: 855 movups xmm0,XMMWORD PTR[r11] 856 mov rax,r10 857 movups xmm8,XMMWORD PTR[rdi] 858 859 xorps xmm2,xmm0 860 movups xmm1,XMMWORD PTR[16+r11] 861 xorps xmm0,xmm8 862 xorps xmm3,xmm0 863 movups xmm0,XMMWORD PTR[32+r11] 864 865 $L$ccm64_enc2_loop:: 866 DB 102,15,56,220,209 867 DB 102,15,56,220,217 868 movups xmm1,XMMWORD PTR[rax*1+rcx] 869 add rax,32 870 DB 102,15,56,220,208 871 DB 102,15,56,220,216 872 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 873 jnz $L$ccm64_enc2_loop 874 DB 102,15,56,220,209 875 DB 102,15,56,220,217 876 paddq xmm6,xmm9 877 dec rdx 878 DB 102,15,56,221,208 879 DB 102,15,56,221,216 880 881 lea rdi,QWORD PTR[16+rdi] 882 xorps xmm8,xmm2 883 movdqa xmm2,xmm6 884 movups XMMWORD PTR[rsi],xmm8 885 DB 102,15,56,0,215 886 lea rsi,QWORD PTR[16+rsi] 887 jnz $L$ccm64_enc_outer 888 889 movups XMMWORD PTR[r9],xmm3 890 movaps xmm6,XMMWORD PTR[rsp] 891 movaps xmm7,XMMWORD PTR[16+rsp] 892 movaps xmm8,XMMWORD PTR[32+rsp] 893 movaps xmm9,XMMWORD PTR[48+rsp] 894 lea rsp,QWORD PTR[88+rsp] 895 $L$ccm64_enc_ret:: 896 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue 897 mov rsi,QWORD PTR[16+rsp] 898 DB 0F3h,0C3h ;repret 899 $L$SEH_end_aesni_ccm64_encrypt_blocks:: 900 aesni_ccm64_encrypt_blocks ENDP 901 PUBLIC aesni_ccm64_decrypt_blocks 902 903 ALIGN 16 904 aesni_ccm64_decrypt_blocks PROC PUBLIC 905 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue 906 mov QWORD PTR[16+rsp],rsi 907 mov rax,rsp 908 $L$SEH_begin_aesni_ccm64_decrypt_blocks:: 909 mov rdi,rcx 910 mov rsi,rdx 911 mov rdx,r8 912 mov rcx,r9 913 mov r8,QWORD PTR[40+rsp] 914 mov r9,QWORD PTR[48+rsp] 915 916 917 lea rsp,QWORD PTR[((-88))+rsp] 918 movaps XMMWORD PTR[rsp],xmm6 919 movaps XMMWORD PTR[16+rsp],xmm7 920 movaps XMMWORD PTR[32+rsp],xmm8 921 movaps XMMWORD PTR[48+rsp],xmm9 922 $L$ccm64_dec_body:: 923 mov eax,DWORD PTR[240+rcx] 924 movups xmm6,XMMWORD PTR[r8] 925 movdqu xmm3,XMMWORD PTR[r9] 926 movdqa xmm9,XMMWORD PTR[$L$increment64] 927 movdqa xmm7,XMMWORD PTR[$L$bswap_mask] 928 929 movaps xmm2,xmm6 930 mov r10d,eax 931 mov r11,rcx 932 DB 102,15,56,0,247 933 movups xmm0,XMMWORD PTR[rcx] 934 movups xmm1,XMMWORD PTR[16+rcx] 935 lea rcx,QWORD PTR[32+rcx] 936 xorps xmm2,xmm0 937 $L$oop_enc1_5:: 938 DB 102,15,56,220,209 939 dec eax 940 movups xmm1,XMMWORD PTR[rcx] 941 lea rcx,QWORD PTR[16+rcx] 942 jnz $L$oop_enc1_5 943 DB 102,15,56,221,209 944 shl r10d,4 945 mov eax,16 946 movups xmm8,XMMWORD PTR[rdi] 947 paddq xmm6,xmm9 948 lea rdi,QWORD PTR[16+rdi] 949 sub rax,r10 950 lea rcx,QWORD PTR[32+r10*1+r11] 951 mov r10,rax 952 jmp $L$ccm64_dec_outer 953 ALIGN 16 954 $L$ccm64_dec_outer:: 955 xorps xmm8,xmm2 956 movdqa xmm2,xmm6 957 movups XMMWORD PTR[rsi],xmm8 958 lea rsi,QWORD PTR[16+rsi] 959 DB 102,15,56,0,215 960 961 sub rdx,1 962 jz $L$ccm64_dec_break 963 964 movups xmm0,XMMWORD PTR[r11] 965 mov rax,r10 966 movups xmm1,XMMWORD PTR[16+r11] 967 xorps xmm8,xmm0 968 xorps xmm2,xmm0 969 xorps xmm3,xmm8 970 movups xmm0,XMMWORD PTR[32+r11] 971 jmp $L$ccm64_dec2_loop 972 ALIGN 16 973 $L$ccm64_dec2_loop:: 974 DB 102,15,56,220,209 975 DB 102,15,56,220,217 976 movups xmm1,XMMWORD PTR[rax*1+rcx] 977 add rax,32 978 DB 102,15,56,220,208 979 DB 102,15,56,220,216 980 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx] 981 jnz $L$ccm64_dec2_loop 982 movups xmm8,XMMWORD PTR[rdi] 983 paddq xmm6,xmm9 984 DB 102,15,56,220,209 985 DB 102,15,56,220,217 986 DB 102,15,56,221,208 987 DB 102,15,56,221,216 988 lea rdi,QWORD PTR[16+rdi] 989 jmp $L$ccm64_dec_outer 990 991 ALIGN 16 992 $L$ccm64_dec_break:: 993 994 mov eax,DWORD PTR[240+r11] 995 movups xmm0,XMMWORD PTR[r11] 996 movups xmm1,XMMWORD PTR[16+r11] 997 xorps xmm8,xmm0 998 lea r11,QWORD PTR[32+r11] 999 xorps xmm3,xmm8 1000 $L$oop_enc1_6:: 1001 DB 102,15,56,220,217 1002 dec eax 1003 movups xmm1,XMMWORD PTR[r11] 1004 lea r11,QWORD PTR[16+r11] 1005 jnz $L$oop_enc1_6 1006 DB 102,15,56,221,217 1007 movups XMMWORD PTR[r9],xmm3 1008 movaps xmm6,XMMWORD PTR[rsp] 1009 movaps xmm7,XMMWORD PTR[16+rsp] 1010 movaps xmm8,XMMWORD PTR[32+rsp] 1011 movaps xmm9,XMMWORD PTR[48+rsp] 1012 lea rsp,QWORD PTR[88+rsp] 1013 $L$ccm64_dec_ret:: 1014 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue 1015 mov rsi,QWORD PTR[16+rsp] 1016 DB 0F3h,0C3h ;repret 1017 $L$SEH_end_aesni_ccm64_decrypt_blocks:: 1018 aesni_ccm64_decrypt_blocks ENDP 1019 PUBLIC aesni_ctr32_encrypt_blocks 1020 1021 ALIGN 16 1022 aesni_ctr32_encrypt_blocks PROC PUBLIC 1023 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue 1024 mov QWORD PTR[16+rsp],rsi 1025 mov rax,rsp 1026 $L$SEH_begin_aesni_ctr32_encrypt_blocks:: 1027 mov rdi,rcx 1028 mov rsi,rdx 1029 mov rdx,r8 1030 mov rcx,r9 1031 mov r8,QWORD PTR[40+rsp] 1032 1033 1034 lea rax,QWORD PTR[rsp] 1035 push rbp 1036 sub rsp,288 1037 and rsp,-16 1038 movaps XMMWORD PTR[(-168)+rax],xmm6 1039 movaps XMMWORD PTR[(-152)+rax],xmm7 1040 movaps XMMWORD PTR[(-136)+rax],xmm8 1041 movaps XMMWORD PTR[(-120)+rax],xmm9 1042 movaps XMMWORD PTR[(-104)+rax],xmm10 1043 movaps XMMWORD PTR[(-88)+rax],xmm11 1044 movaps XMMWORD PTR[(-72)+rax],xmm12 1045 movaps XMMWORD PTR[(-56)+rax],xmm13 1046 movaps XMMWORD PTR[(-40)+rax],xmm14 1047 movaps XMMWORD PTR[(-24)+rax],xmm15 1048 $L$ctr32_body:: 1049 lea rbp,QWORD PTR[((-8))+rax] 1050 1051 cmp rdx,1 1052 je $L$ctr32_one_shortcut 1053 1054 movdqu xmm2,XMMWORD PTR[r8] 1055 movdqu xmm0,XMMWORD PTR[rcx] 1056 mov r8d,DWORD PTR[12+r8] 1057 pxor xmm2,xmm0 1058 mov r11d,DWORD PTR[12+rcx] 1059 movdqa XMMWORD PTR[rsp],xmm2 1060 bswap r8d 1061 movdqa xmm3,xmm2 1062 movdqa xmm4,xmm2 1063 movdqa xmm5,xmm2 1064 movdqa XMMWORD PTR[64+rsp],xmm2 1065 movdqa XMMWORD PTR[80+rsp],xmm2 1066 movdqa XMMWORD PTR[96+rsp],xmm2 1067 mov r10,rdx 1068 movdqa XMMWORD PTR[112+rsp],xmm2 1069 1070 lea rax,QWORD PTR[1+r8] 1071 lea rdx,QWORD PTR[2+r8] 1072 bswap eax 1073 bswap edx 1074 xor eax,r11d 1075 xor edx,r11d 1076 DB 102,15,58,34,216,3 1077 lea rax,QWORD PTR[3+r8] 1078 movdqa XMMWORD PTR[16+rsp],xmm3 1079 DB 102,15,58,34,226,3 1080 bswap eax 1081 mov rdx,r10 1082 lea r10,QWORD PTR[4+r8] 1083 movdqa XMMWORD PTR[32+rsp],xmm4 1084 xor eax,r11d 1085 bswap r10d 1086 DB 102,15,58,34,232,3 1087 xor r10d,r11d 1088 movdqa XMMWORD PTR[48+rsp],xmm5 1089 lea r9,QWORD PTR[5+r8] 1090 mov DWORD PTR[((64+12))+rsp],r10d 1091 bswap r9d 1092 lea r10,QWORD PTR[6+r8] 1093 mov eax,DWORD PTR[240+rcx] 1094 xor r9d,r11d 1095 bswap r10d 1096 mov DWORD PTR[((80+12))+rsp],r9d 1097 xor r10d,r11d 1098 lea r9,QWORD PTR[7+r8] 1099 mov DWORD PTR[((96+12))+rsp],r10d 1100 bswap r9d 1101 mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+4))] 1102 xor r9d,r11d 1103 and r10d,71303168 1104 mov DWORD PTR[((112+12))+rsp],r9d 1105 1106 movups xmm1,XMMWORD PTR[16+rcx] 1107 1108 movdqa xmm6,XMMWORD PTR[64+rsp] 1109 movdqa xmm7,XMMWORD PTR[80+rsp] 1110 1111 cmp rdx,8 1112 jb $L$ctr32_tail 1113 1114 sub rdx,6 1115 cmp r10d,4194304 1116 je $L$ctr32_6x 1117 1118 lea rcx,QWORD PTR[128+rcx] 1119 sub rdx,2 1120 jmp $L$ctr32_loop8 1121 1122 ALIGN 16 1123 $L$ctr32_6x:: 1124 shl eax,4 1125 mov r10d,48 1126 bswap r11d 1127 lea rcx,QWORD PTR[32+rax*1+rcx] 1128 sub r10,rax 1129 jmp $L$ctr32_loop6 1130 1131 ALIGN 16 1132 $L$ctr32_loop6:: 1133 add r8d,6 1134 movups xmm0,XMMWORD PTR[((-48))+r10*1+rcx] 1135 DB 102,15,56,220,209 1136 mov eax,r8d 1137 xor eax,r11d 1138 DB 102,15,56,220,217 1139 DB 00fh,038h,0f1h,044h,024h,12 1140 lea eax,DWORD PTR[1+r8] 1141 DB 102,15,56,220,225 1142 xor eax,r11d 1143 DB 00fh,038h,0f1h,044h,024h,28 1144 DB 102,15,56,220,233 1145 lea eax,DWORD PTR[2+r8] 1146 xor eax,r11d 1147 DB 102,15,56,220,241 1148 DB 00fh,038h,0f1h,044h,024h,44 1149 lea eax,DWORD PTR[3+r8] 1150 DB 102,15,56,220,249 1151 movups xmm1,XMMWORD PTR[((-32))+r10*1+rcx] 1152 xor eax,r11d 1153 1154 DB 102,15,56,220,208 1155 DB 00fh,038h,0f1h,044h,024h,60 1156 lea eax,DWORD PTR[4+r8] 1157 DB 102,15,56,220,216 1158 xor eax,r11d 1159 DB 00fh,038h,0f1h,044h,024h,76 1160 DB 102,15,56,220,224 1161 lea eax,DWORD PTR[5+r8] 1162 xor eax,r11d 1163 DB 102,15,56,220,232 1164 DB 00fh,038h,0f1h,044h,024h,92 1165 mov rax,r10 1166 DB 102,15,56,220,240 1167 DB 102,15,56,220,248 1168 movups xmm0,XMMWORD PTR[((-16))+r10*1+rcx] 1169 1170 call $L$enc_loop6 1171 1172 movdqu xmm8,XMMWORD PTR[rdi] 1173 movdqu xmm9,XMMWORD PTR[16+rdi] 1174 movdqu xmm10,XMMWORD PTR[32+rdi] 1175 movdqu xmm11,XMMWORD PTR[48+rdi] 1176 movdqu xmm12,XMMWORD PTR[64+rdi] 1177 movdqu xmm13,XMMWORD PTR[80+rdi] 1178 lea rdi,QWORD PTR[96+rdi] 1179 movups xmm1,XMMWORD PTR[((-64))+r10*1+rcx] 1180 pxor xmm8,xmm2 1181 movaps xmm2,XMMWORD PTR[rsp] 1182 pxor xmm9,xmm3 1183 movaps xmm3,XMMWORD PTR[16+rsp] 1184 pxor xmm10,xmm4 1185 movaps xmm4,XMMWORD PTR[32+rsp] 1186 pxor xmm11,xmm5 1187 movaps xmm5,XMMWORD PTR[48+rsp] 1188 pxor xmm12,xmm6 1189 movaps xmm6,XMMWORD PTR[64+rsp] 1190 pxor xmm13,xmm7 1191 movaps xmm7,XMMWORD PTR[80+rsp] 1192 movdqu XMMWORD PTR[rsi],xmm8 1193 movdqu XMMWORD PTR[16+rsi],xmm9 1194 movdqu XMMWORD PTR[32+rsi],xmm10 1195 movdqu XMMWORD PTR[48+rsi],xmm11 1196 movdqu XMMWORD PTR[64+rsi],xmm12 1197 movdqu XMMWORD PTR[80+rsi],xmm13 1198 lea rsi,QWORD PTR[96+rsi] 1199 1200 sub rdx,6 1201 jnc $L$ctr32_loop6 1202 1203 add rdx,6 1204 jz $L$ctr32_done 1205 1206 lea eax,DWORD PTR[((-48))+r10] 1207 lea rcx,QWORD PTR[((-80))+r10*1+rcx] 1208 neg eax 1209 shr eax,4 1210 jmp $L$ctr32_tail 1211 1212 ALIGN 32 1213 $L$ctr32_loop8:: 1214 add r8d,8 1215 movdqa xmm8,XMMWORD PTR[96+rsp] 1216 DB 102,15,56,220,209 1217 mov r9d,r8d 1218 movdqa xmm9,XMMWORD PTR[112+rsp] 1219 DB 102,15,56,220,217 1220 bswap r9d 1221 movups xmm0,XMMWORD PTR[((32-128))+rcx] 1222 DB 102,15,56,220,225 1223 xor r9d,r11d 1224 nop 1225 DB 102,15,56,220,233 1226 mov DWORD PTR[((0+12))+rsp],r9d 1227 lea r9,QWORD PTR[1+r8] 1228 DB 102,15,56,220,241 1229 DB 102,15,56,220,249 1230 DB 102,68,15,56,220,193 1231 DB 102,68,15,56,220,201 1232 movups xmm1,XMMWORD PTR[((48-128))+rcx] 1233 bswap r9d 1234 DB 102,15,56,220,208 1235 DB 102,15,56,220,216 1236 xor r9d,r11d 1237 DB 066h,090h 1238 DB 102,15,56,220,224 1239 DB 102,15,56,220,232 1240 mov DWORD PTR[((16+12))+rsp],r9d 1241 lea r9,QWORD PTR[2+r8] 1242 DB 102,15,56,220,240 1243 DB 102,15,56,220,248 1244 DB 102,68,15,56,220,192 1245 DB 102,68,15,56,220,200 1246 movups xmm0,XMMWORD PTR[((64-128))+rcx] 1247 bswap r9d 1248 DB 102,15,56,220,209 1249 DB 102,15,56,220,217 1250 xor r9d,r11d 1251 DB 066h,090h 1252 DB 102,15,56,220,225 1253 DB 102,15,56,220,233 1254 mov DWORD PTR[((32+12))+rsp],r9d 1255 lea r9,QWORD PTR[3+r8] 1256 DB 102,15,56,220,241 1257 DB 102,15,56,220,249 1258 DB 102,68,15,56,220,193 1259 DB 102,68,15,56,220,201 1260 movups xmm1,XMMWORD PTR[((80-128))+rcx] 1261 bswap r9d 1262 DB 102,15,56,220,208 1263 DB 102,15,56,220,216 1264 xor r9d,r11d 1265 DB 066h,090h 1266 DB 102,15,56,220,224 1267 DB 102,15,56,220,232 1268 mov DWORD PTR[((48+12))+rsp],r9d 1269 lea r9,QWORD PTR[4+r8] 1270 DB 102,15,56,220,240 1271 DB 102,15,56,220,248 1272 DB 102,68,15,56,220,192 1273 DB 102,68,15,56,220,200 1274 movups xmm0,XMMWORD PTR[((96-128))+rcx] 1275 bswap r9d 1276 DB 102,15,56,220,209 1277 DB 102,15,56,220,217 1278 xor r9d,r11d 1279 DB 066h,090h 1280 DB 102,15,56,220,225 1281 DB 102,15,56,220,233 1282 mov DWORD PTR[((64+12))+rsp],r9d 1283 lea r9,QWORD PTR[5+r8] 1284 DB 102,15,56,220,241 1285 DB 102,15,56,220,249 1286 DB 102,68,15,56,220,193 1287 DB 102,68,15,56,220,201 1288 movups xmm1,XMMWORD PTR[((112-128))+rcx] 1289 bswap r9d 1290 DB 102,15,56,220,208 1291 DB 102,15,56,220,216 1292 xor r9d,r11d 1293 DB 066h,090h 1294 DB 102,15,56,220,224 1295 DB 102,15,56,220,232 1296 mov DWORD PTR[((80+12))+rsp],r9d 1297 lea r9,QWORD PTR[6+r8] 1298 DB 102,15,56,220,240 1299 DB 102,15,56,220,248 1300 DB 102,68,15,56,220,192 1301 DB 102,68,15,56,220,200 1302 movups xmm0,XMMWORD PTR[((128-128))+rcx] 1303 bswap r9d 1304 DB 102,15,56,220,209 1305 DB 102,15,56,220,217 1306 xor r9d,r11d 1307 DB 066h,090h 1308 DB 102,15,56,220,225 1309 DB 102,15,56,220,233 1310 mov DWORD PTR[((96+12))+rsp],r9d 1311 lea r9,QWORD PTR[7+r8] 1312 DB 102,15,56,220,241 1313 DB 102,15,56,220,249 1314 DB 102,68,15,56,220,193 1315 DB 102,68,15,56,220,201 1316 movups xmm1,XMMWORD PTR[((144-128))+rcx] 1317 bswap r9d 1318 DB 102,15,56,220,208 1319 DB 102,15,56,220,216 1320 DB 102,15,56,220,224 1321 xor r9d,r11d 1322 movdqu xmm10,XMMWORD PTR[rdi] 1323 DB 102,15,56,220,232 1324 mov DWORD PTR[((112+12))+rsp],r9d 1325 cmp eax,11 1326 DB 102,15,56,220,240 1327 DB 102,15,56,220,248 1328 DB 102,68,15,56,220,192 1329 DB 102,68,15,56,220,200 1330 movups xmm0,XMMWORD PTR[((160-128))+rcx] 1331 1332 jb $L$ctr32_enc_done 1333 1334 DB 102,15,56,220,209 1335 DB 102,15,56,220,217 1336 DB 102,15,56,220,225 1337 DB 102,15,56,220,233 1338 DB 102,15,56,220,241 1339 DB 102,15,56,220,249 1340 DB 102,68,15,56,220,193 1341 DB 102,68,15,56,220,201 1342 movups xmm1,XMMWORD PTR[((176-128))+rcx] 1343 1344 DB 102,15,56,220,208 1345 DB 102,15,56,220,216 1346 DB 102,15,56,220,224 1347 DB 102,15,56,220,232 1348 DB 102,15,56,220,240 1349 DB 102,15,56,220,248 1350 DB 102,68,15,56,220,192 1351 DB 102,68,15,56,220,200 1352 movups xmm0,XMMWORD PTR[((192-128))+rcx] 1353 je $L$ctr32_enc_done 1354 1355 DB 102,15,56,220,209 1356 DB 102,15,56,220,217 1357 DB 102,15,56,220,225 1358 DB 102,15,56,220,233 1359 DB 102,15,56,220,241 1360 DB 102,15,56,220,249 1361 DB 102,68,15,56,220,193 1362 DB 102,68,15,56,220,201 1363 movups xmm1,XMMWORD PTR[((208-128))+rcx] 1364 1365 DB 102,15,56,220,208 1366 DB 102,15,56,220,216 1367 DB 102,15,56,220,224 1368 DB 102,15,56,220,232 1369 DB 102,15,56,220,240 1370 DB 102,15,56,220,248 1371 DB 102,68,15,56,220,192 1372 DB 102,68,15,56,220,200 1373 movups xmm0,XMMWORD PTR[((224-128))+rcx] 1374 jmp $L$ctr32_enc_done 1375 1376 ALIGN 16 1377 $L$ctr32_enc_done:: 1378 movdqu xmm11,XMMWORD PTR[16+rdi] 1379 pxor xmm10,xmm0 1380 movdqu xmm12,XMMWORD PTR[32+rdi] 1381 pxor xmm11,xmm0 1382 movdqu xmm13,XMMWORD PTR[48+rdi] 1383 pxor xmm12,xmm0 1384 movdqu xmm14,XMMWORD PTR[64+rdi] 1385 pxor xmm13,xmm0 1386 movdqu xmm15,XMMWORD PTR[80+rdi] 1387 pxor xmm14,xmm0 1388 pxor xmm15,xmm0 1389 DB 102,15,56,220,209 1390 DB 102,15,56,220,217 1391 DB 102,15,56,220,225 1392 DB 102,15,56,220,233 1393 DB 102,15,56,220,241 1394 DB 102,15,56,220,249 1395 DB 102,68,15,56,220,193 1396 DB 102,68,15,56,220,201 1397 movdqu xmm1,XMMWORD PTR[96+rdi] 1398 lea rdi,QWORD PTR[128+rdi] 1399 1400 DB 102,65,15,56,221,210 1401 pxor xmm1,xmm0 1402 movdqu xmm10,XMMWORD PTR[((112-128))+rdi] 1403 DB 102,65,15,56,221,219 1404 pxor xmm10,xmm0 1405 movdqa xmm11,XMMWORD PTR[rsp] 1406 DB 102,65,15,56,221,228 1407 DB 102,65,15,56,221,237 1408 movdqa xmm12,XMMWORD PTR[16+rsp] 1409 movdqa xmm13,XMMWORD PTR[32+rsp] 1410 DB 102,65,15,56,221,246 1411 DB 102,65,15,56,221,255 1412 movdqa xmm14,XMMWORD PTR[48+rsp] 1413 movdqa xmm15,XMMWORD PTR[64+rsp] 1414 DB 102,68,15,56,221,193 1415 movdqa xmm0,XMMWORD PTR[80+rsp] 1416 movups xmm1,XMMWORD PTR[((16-128))+rcx] 1417 DB 102,69,15,56,221,202 1418 1419 movups XMMWORD PTR[rsi],xmm2 1420 movdqa xmm2,xmm11 1421 movups XMMWORD PTR[16+rsi],xmm3 1422 movdqa xmm3,xmm12 1423 movups XMMWORD PTR[32+rsi],xmm4 1424 movdqa xmm4,xmm13 1425 movups XMMWORD PTR[48+rsi],xmm5 1426 movdqa xmm5,xmm14 1427 movups XMMWORD PTR[64+rsi],xmm6 1428 movdqa xmm6,xmm15 1429 movups XMMWORD PTR[80+rsi],xmm7 1430 movdqa xmm7,xmm0 1431 movups XMMWORD PTR[96+rsi],xmm8 1432 movups XMMWORD PTR[112+rsi],xmm9 1433 lea rsi,QWORD PTR[128+rsi] 1434 1435 sub rdx,8 1436 jnc $L$ctr32_loop8 1437 1438 add rdx,8 1439 jz $L$ctr32_done 1440 lea rcx,QWORD PTR[((-128))+rcx] 1441 1442 $L$ctr32_tail:: 1443 lea rcx,QWORD PTR[16+rcx] 1444 cmp rdx,4 1445 jb $L$ctr32_loop3 1446 je $L$ctr32_loop4 1447 1448 shl eax,4 1449 movdqa xmm8,XMMWORD PTR[96+rsp] 1450 pxor xmm9,xmm9 1451 1452 movups xmm0,XMMWORD PTR[16+rcx] 1453 DB 102,15,56,220,209 1454 DB 102,15,56,220,217 1455 lea rcx,QWORD PTR[((32-16))+rax*1+rcx] 1456 neg rax 1457 DB 102,15,56,220,225 1458 add rax,16 1459 movups xmm10,XMMWORD PTR[rdi] 1460 DB 102,15,56,220,233 1461 DB 102,15,56,220,241 1462 movups xmm11,XMMWORD PTR[16+rdi] 1463 movups xmm12,XMMWORD PTR[32+rdi] 1464 DB 102,15,56,220,249 1465 DB 102,68,15,56,220,193 1466 1467 call $L$enc_loop8_enter 1468 1469 movdqu xmm13,XMMWORD PTR[48+rdi] 1470 pxor xmm2,xmm10 1471 movdqu xmm10,XMMWORD PTR[64+rdi] 1472 pxor xmm3,xmm11 1473 movdqu XMMWORD PTR[rsi],xmm2 1474 pxor xmm4,xmm12 1475 movdqu XMMWORD PTR[16+rsi],xmm3 1476 pxor xmm5,xmm13 1477 movdqu XMMWORD PTR[32+rsi],xmm4 1478 pxor xmm6,xmm10 1479 movdqu XMMWORD PTR[48+rsi],xmm5 1480 movdqu XMMWORD PTR[64+rsi],xmm6 1481 cmp rdx,6 1482 jb $L$ctr32_done 1483 1484 movups xmm11,XMMWORD PTR[80+rdi] 1485 xorps xmm7,xmm11 1486 movups XMMWORD PTR[80+rsi],xmm7 1487 je $L$ctr32_done 1488 1489 movups xmm12,XMMWORD PTR[96+rdi] 1490 xorps xmm8,xmm12 1491 movups XMMWORD PTR[96+rsi],xmm8 1492 jmp $L$ctr32_done 1493 1494 ALIGN 32 1495 $L$ctr32_loop4:: 1496 DB 102,15,56,220,209 1497 lea rcx,QWORD PTR[16+rcx] 1498 dec eax 1499 DB 102,15,56,220,217 1500 DB 102,15,56,220,225 1501 DB 102,15,56,220,233 1502 movups xmm1,XMMWORD PTR[rcx] 1503 jnz $L$ctr32_loop4 1504 DB 102,15,56,221,209 1505 DB 102,15,56,221,217 1506 movups xmm10,XMMWORD PTR[rdi] 1507 movups xmm11,XMMWORD PTR[16+rdi] 1508 DB 102,15,56,221,225 1509 DB 102,15,56,221,233 1510 movups xmm12,XMMWORD PTR[32+rdi] 1511 movups xmm13,XMMWORD PTR[48+rdi] 1512 1513 xorps xmm2,xmm10 1514 movups XMMWORD PTR[rsi],xmm2 1515 xorps xmm3,xmm11 1516 movups XMMWORD PTR[16+rsi],xmm3 1517 pxor xmm4,xmm12 1518 movdqu XMMWORD PTR[32+rsi],xmm4 1519 pxor xmm5,xmm13 1520 movdqu XMMWORD PTR[48+rsi],xmm5 1521 jmp $L$ctr32_done 1522 1523 ALIGN 32 1524 $L$ctr32_loop3:: 1525 DB 102,15,56,220,209 1526 lea rcx,QWORD PTR[16+rcx] 1527 dec eax 1528 DB 102,15,56,220,217 1529 DB 102,15,56,220,225 1530 movups xmm1,XMMWORD PTR[rcx] 1531 jnz $L$ctr32_loop3 1532 DB 102,15,56,221,209 1533 DB 102,15,56,221,217 1534 DB 102,15,56,221,225 1535 1536 movups xmm10,XMMWORD PTR[rdi] 1537 xorps xmm2,xmm10 1538 movups XMMWORD PTR[rsi],xmm2 1539 cmp rdx,2 1540 jb $L$ctr32_done 1541 1542 movups xmm11,XMMWORD PTR[16+rdi] 1543 xorps xmm3,xmm11 1544 movups XMMWORD PTR[16+rsi],xmm3 1545 je $L$ctr32_done 1546 1547 movups xmm12,XMMWORD PTR[32+rdi] 1548 xorps xmm4,xmm12 1549 movups XMMWORD PTR[32+rsi],xmm4 1550 jmp $L$ctr32_done 1551 1552 ALIGN 16 1553 $L$ctr32_one_shortcut:: 1554 movups xmm2,XMMWORD PTR[r8] 1555 movups xmm10,XMMWORD PTR[rdi] 1556 mov eax,DWORD PTR[240+rcx] 1557 movups xmm0,XMMWORD PTR[rcx] 1558 movups xmm1,XMMWORD PTR[16+rcx] 1559 lea rcx,QWORD PTR[32+rcx] 1560 xorps xmm2,xmm0 1561 $L$oop_enc1_7:: 1562 DB 102,15,56,220,209 1563 dec eax 1564 movups xmm1,XMMWORD PTR[rcx] 1565 lea rcx,QWORD PTR[16+rcx] 1566 jnz $L$oop_enc1_7 1567 DB 102,15,56,221,209 1568 xorps xmm2,xmm10 1569 movups XMMWORD PTR[rsi],xmm2 1570 jmp $L$ctr32_done 1571 1572 ALIGN 16 1573 $L$ctr32_done:: 1574 movaps xmm6,XMMWORD PTR[((-160))+rbp] 1575 movaps xmm7,XMMWORD PTR[((-144))+rbp] 1576 movaps xmm8,XMMWORD PTR[((-128))+rbp] 1577 movaps xmm9,XMMWORD PTR[((-112))+rbp] 1578 movaps xmm10,XMMWORD PTR[((-96))+rbp] 1579 movaps xmm11,XMMWORD PTR[((-80))+rbp] 1580 movaps xmm12,XMMWORD PTR[((-64))+rbp] 1581 movaps xmm13,XMMWORD PTR[((-48))+rbp] 1582 movaps xmm14,XMMWORD PTR[((-32))+rbp] 1583 movaps xmm15,XMMWORD PTR[((-16))+rbp] 1584 lea rsp,QWORD PTR[rbp] 1585 pop rbp 1586 $L$ctr32_epilogue:: 1587 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue 1588 mov rsi,QWORD PTR[16+rsp] 1589 DB 0F3h,0C3h ;repret 1590 $L$SEH_end_aesni_ctr32_encrypt_blocks:: 1591 aesni_ctr32_encrypt_blocks ENDP 1592 PUBLIC aesni_xts_encrypt 1593 1594 ALIGN 16 1595 aesni_xts_encrypt PROC PUBLIC 1596 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue 1597 mov QWORD PTR[16+rsp],rsi 1598 mov rax,rsp 1599 $L$SEH_begin_aesni_xts_encrypt:: 1600 mov rdi,rcx 1601 mov rsi,rdx 1602 mov rdx,r8 1603 mov rcx,r9 1604 mov r8,QWORD PTR[40+rsp] 1605 mov r9,QWORD PTR[48+rsp] 1606 1607 1608 lea rax,QWORD PTR[rsp] 1609 push rbp 1610 sub rsp,272 1611 and rsp,-16 1612 movaps XMMWORD PTR[(-168)+rax],xmm6 1613 movaps XMMWORD PTR[(-152)+rax],xmm7 1614 movaps XMMWORD PTR[(-136)+rax],xmm8 1615 movaps XMMWORD PTR[(-120)+rax],xmm9 1616 movaps XMMWORD PTR[(-104)+rax],xmm10 1617 movaps XMMWORD PTR[(-88)+rax],xmm11 1618 movaps XMMWORD PTR[(-72)+rax],xmm12 1619 movaps XMMWORD PTR[(-56)+rax],xmm13 1620 movaps XMMWORD PTR[(-40)+rax],xmm14 1621 movaps XMMWORD PTR[(-24)+rax],xmm15 1622 $L$xts_enc_body:: 1623 lea rbp,QWORD PTR[((-8))+rax] 1624 movups xmm2,XMMWORD PTR[r9] 1625 mov eax,DWORD PTR[240+r8] 1626 mov r10d,DWORD PTR[240+rcx] 1627 movups xmm0,XMMWORD PTR[r8] 1628 movups xmm1,XMMWORD PTR[16+r8] 1629 lea r8,QWORD PTR[32+r8] 1630 xorps xmm2,xmm0 1631 $L$oop_enc1_8:: 1632 DB 102,15,56,220,209 1633 dec eax 1634 movups xmm1,XMMWORD PTR[r8] 1635 lea r8,QWORD PTR[16+r8] 1636 jnz $L$oop_enc1_8 1637 DB 102,15,56,221,209 1638 movups xmm0,XMMWORD PTR[rcx] 1639 mov r11,rcx 1640 mov eax,r10d 1641 shl r10d,4 1642 mov r9,rdx 1643 and rdx,-16 1644 1645 movups xmm1,XMMWORD PTR[16+r10*1+rcx] 1646 1647 movdqa xmm8,XMMWORD PTR[$L$xts_magic] 1648 movdqa xmm15,xmm2 1649 pshufd xmm9,xmm2,05fh 1650 pxor xmm1,xmm0 1651 movdqa xmm14,xmm9 1652 paddd xmm9,xmm9 1653 movdqa xmm10,xmm15 1654 psrad xmm14,31 1655 paddq xmm15,xmm15 1656 pand xmm14,xmm8 1657 pxor xmm10,xmm0 1658 pxor xmm15,xmm14 1659 movdqa xmm14,xmm9 1660 paddd xmm9,xmm9 1661 movdqa xmm11,xmm15 1662 psrad xmm14,31 1663 paddq xmm15,xmm15 1664 pand xmm14,xmm8 1665 pxor xmm11,xmm0 1666 pxor xmm15,xmm14 1667 movdqa xmm14,xmm9 1668 paddd xmm9,xmm9 1669 movdqa xmm12,xmm15 1670 psrad xmm14,31 1671 paddq xmm15,xmm15 1672 pand xmm14,xmm8 1673 pxor xmm12,xmm0 1674 pxor xmm15,xmm14 1675 movdqa xmm14,xmm9 1676 paddd xmm9,xmm9 1677 movdqa xmm13,xmm15 1678 psrad xmm14,31 1679 paddq xmm15,xmm15 1680 pand xmm14,xmm8 1681 pxor xmm13,xmm0 1682 pxor xmm15,xmm14 1683 movdqa xmm14,xmm15 1684 psrad xmm9,31 1685 paddq xmm15,xmm15 1686 pand xmm9,xmm8 1687 pxor xmm14,xmm0 1688 pxor xmm15,xmm9 1689 movaps XMMWORD PTR[96+rsp],xmm1 1690 1691 sub rdx,16*6 1692 jc $L$xts_enc_short 1693 1694 mov eax,16+96 1695 lea rcx,QWORD PTR[32+r10*1+r11] 1696 sub rax,r10 1697 movups xmm1,XMMWORD PTR[16+r11] 1698 mov r10,rax 1699 lea r8,QWORD PTR[$L$xts_magic] 1700 jmp $L$xts_enc_grandloop 1701 1702 ALIGN 32 1703 $L$xts_enc_grandloop:: 1704 movdqu xmm2,XMMWORD PTR[rdi] 1705 movdqa xmm8,xmm0 1706 movdqu xmm3,XMMWORD PTR[16+rdi] 1707 pxor xmm2,xmm10 1708 movdqu xmm4,XMMWORD PTR[32+rdi] 1709 pxor xmm3,xmm11 1710 DB 102,15,56,220,209 1711 movdqu xmm5,XMMWORD PTR[48+rdi] 1712 pxor xmm4,xmm12 1713 DB 102,15,56,220,217 1714 movdqu xmm6,XMMWORD PTR[64+rdi] 1715 pxor xmm5,xmm13 1716 DB 102,15,56,220,225 1717 movdqu xmm7,XMMWORD PTR[80+rdi] 1718 pxor xmm8,xmm15 1719 movdqa xmm9,XMMWORD PTR[96+rsp] 1720 pxor xmm6,xmm14 1721 DB 102,15,56,220,233 1722 movups xmm0,XMMWORD PTR[32+r11] 1723 lea rdi,QWORD PTR[96+rdi] 1724 pxor xmm7,xmm8 1725 1726 pxor xmm10,xmm9 1727 DB 102,15,56,220,241 1728 pxor xmm11,xmm9 1729 movdqa XMMWORD PTR[rsp],xmm10 1730 DB 102,15,56,220,249 1731 movups xmm1,XMMWORD PTR[48+r11] 1732 pxor xmm12,xmm9 1733 1734 DB 102,15,56,220,208 1735 pxor xmm13,xmm9 1736 movdqa XMMWORD PTR[16+rsp],xmm11 1737 DB 102,15,56,220,216 1738 pxor xmm14,xmm9 1739 movdqa XMMWORD PTR[32+rsp],xmm12 1740 DB 102,15,56,220,224 1741 DB 102,15,56,220,232 1742 pxor xmm8,xmm9 1743 movdqa XMMWORD PTR[64+rsp],xmm14 1744 DB 102,15,56,220,240 1745 DB 102,15,56,220,248 1746 movups xmm0,XMMWORD PTR[64+r11] 1747 movdqa XMMWORD PTR[80+rsp],xmm8 1748 pshufd xmm9,xmm15,05fh 1749 jmp $L$xts_enc_loop6 1750 ALIGN 32 1751 $L$xts_enc_loop6:: 1752 DB 102,15,56,220,209 1753 DB 102,15,56,220,217 1754 DB 102,15,56,220,225 1755 DB 102,15,56,220,233 1756 DB 102,15,56,220,241 1757 DB 102,15,56,220,249 1758 movups xmm1,XMMWORD PTR[((-64))+rax*1+rcx] 1759 add rax,32 1760 1761 DB 102,15,56,220,208 1762 DB 102,15,56,220,216 1763 DB 102,15,56,220,224 1764 DB 102,15,56,220,232 1765 DB 102,15,56,220,240 1766 DB 102,15,56,220,248 1767 movups xmm0,XMMWORD PTR[((-80))+rax*1+rcx] 1768 jnz $L$xts_enc_loop6 1769 1770 movdqa xmm8,XMMWORD PTR[r8] 1771 movdqa xmm14,xmm9 1772 paddd xmm9,xmm9 1773 DB 102,15,56,220,209 1774 paddq xmm15,xmm15 1775 psrad xmm14,31 1776 DB 102,15,56,220,217 1777 pand xmm14,xmm8 1778 movups xmm10,XMMWORD PTR[r11] 1779 DB 102,15,56,220,225 1780 DB 102,15,56,220,233 1781 DB 102,15,56,220,241 1782 pxor xmm15,xmm14 1783 movaps xmm11,xmm10 1784 DB 102,15,56,220,249 1785 movups xmm1,XMMWORD PTR[((-64))+rcx] 1786 1787 movdqa xmm14,xmm9 1788 DB 102,15,56,220,208 1789 paddd xmm9,xmm9 1790 pxor xmm10,xmm15 1791 DB 102,15,56,220,216 1792 psrad xmm14,31 1793 paddq xmm15,xmm15 1794 DB 102,15,56,220,224 1795 DB 102,15,56,220,232 1796 pand xmm14,xmm8 1797 movaps xmm12,xmm11 1798 DB 102,15,56,220,240 1799 pxor xmm15,xmm14 1800 movdqa xmm14,xmm9 1801 DB 102,15,56,220,248 1802 movups xmm0,XMMWORD PTR[((-48))+rcx] 1803 1804 paddd xmm9,xmm9 1805 DB 102,15,56,220,209 1806 pxor xmm11,xmm15 1807 psrad xmm14,31 1808 DB 102,15,56,220,217 1809 paddq xmm15,xmm15 1810 pand xmm14,xmm8 1811 DB 102,15,56,220,225 1812 DB 102,15,56,220,233 1813 movdqa XMMWORD PTR[48+rsp],xmm13 1814 pxor xmm15,xmm14 1815 DB 102,15,56,220,241 1816 movaps xmm13,xmm12 1817 movdqa xmm14,xmm9 1818 DB 102,15,56,220,249 1819 movups xmm1,XMMWORD PTR[((-32))+rcx] 1820 1821 paddd xmm9,xmm9 1822 DB 102,15,56,220,208 1823 pxor xmm12,xmm15 1824 psrad xmm14,31 1825 DB 102,15,56,220,216 1826 paddq xmm15,xmm15 1827 pand xmm14,xmm8 1828 DB 102,15,56,220,224 1829 DB 102,15,56,220,232 1830 DB 102,15,56,220,240 1831 pxor xmm15,xmm14 1832 movaps xmm14,xmm13 1833 DB 102,15,56,220,248 1834 1835 movdqa xmm0,xmm9 1836 paddd xmm9,xmm9 1837 DB 102,15,56,220,209 1838 pxor xmm13,xmm15 1839 psrad xmm0,31 1840 DB 102,15,56,220,217 1841 paddq xmm15,xmm15 1842 pand xmm0,xmm8 1843 DB 102,15,56,220,225 1844 DB 102,15,56,220,233 1845 pxor xmm15,xmm0 1846 movups xmm0,XMMWORD PTR[r11] 1847 DB 102,15,56,220,241 1848 DB 102,15,56,220,249 1849 movups xmm1,XMMWORD PTR[16+r11] 1850 1851 pxor xmm14,xmm15 1852 DB 102,15,56,221,84,36,0 1853 psrad xmm9,31 1854 paddq xmm15,xmm15 1855 DB 102,15,56,221,92,36,16 1856 DB 102,15,56,221,100,36,32 1857 pand xmm9,xmm8 1858 mov rax,r10 1859 DB 102,15,56,221,108,36,48 1860 DB 102,15,56,221,116,36,64 1861 DB 102,15,56,221,124,36,80 1862 pxor xmm15,xmm9 1863 1864 lea rsi,QWORD PTR[96+rsi] 1865 movups XMMWORD PTR[(-96)+rsi],xmm2 1866 movups XMMWORD PTR[(-80)+rsi],xmm3 1867 movups XMMWORD PTR[(-64)+rsi],xmm4 1868 movups XMMWORD PTR[(-48)+rsi],xmm5 1869 movups XMMWORD PTR[(-32)+rsi],xmm6 1870 movups XMMWORD PTR[(-16)+rsi],xmm7 1871 sub rdx,16*6 1872 jnc $L$xts_enc_grandloop 1873 1874 mov eax,16+96 1875 sub eax,r10d 1876 mov rcx,r11 1877 shr eax,4 1878 1879 $L$xts_enc_short:: 1880 mov r10d,eax 1881 pxor xmm10,xmm0 1882 add rdx,16*6 1883 jz $L$xts_enc_done 1884 1885 pxor xmm11,xmm0 1886 cmp rdx,020h 1887 jb $L$xts_enc_one 1888 pxor xmm12,xmm0 1889 je $L$xts_enc_two 1890 1891 pxor xmm13,xmm0 1892 cmp rdx,040h 1893 jb $L$xts_enc_three 1894 pxor xmm14,xmm0 1895 je $L$xts_enc_four 1896 1897 movdqu xmm2,XMMWORD PTR[rdi] 1898 movdqu xmm3,XMMWORD PTR[16+rdi] 1899 movdqu xmm4,XMMWORD PTR[32+rdi] 1900 pxor xmm2,xmm10 1901 movdqu xmm5,XMMWORD PTR[48+rdi] 1902 pxor xmm3,xmm11 1903 movdqu xmm6,XMMWORD PTR[64+rdi] 1904 lea rdi,QWORD PTR[80+rdi] 1905 pxor xmm4,xmm12 1906 pxor xmm5,xmm13 1907 pxor xmm6,xmm14 1908 1909 call _aesni_encrypt6 1910 1911 xorps xmm2,xmm10 1912 movdqa xmm10,xmm15 1913 xorps xmm3,xmm11 1914 xorps xmm4,xmm12 1915 movdqu XMMWORD PTR[rsi],xmm2 1916 xorps xmm5,xmm13 1917 movdqu XMMWORD PTR[16+rsi],xmm3 1918 xorps xmm6,xmm14 1919 movdqu XMMWORD PTR[32+rsi],xmm4 1920 movdqu XMMWORD PTR[48+rsi],xmm5 1921 movdqu XMMWORD PTR[64+rsi],xmm6 1922 lea rsi,QWORD PTR[80+rsi] 1923 jmp $L$xts_enc_done 1924 1925 ALIGN 16 1926 $L$xts_enc_one:: 1927 movups xmm2,XMMWORD PTR[rdi] 1928 lea rdi,QWORD PTR[16+rdi] 1929 xorps xmm2,xmm10 1930 movups xmm0,XMMWORD PTR[rcx] 1931 movups xmm1,XMMWORD PTR[16+rcx] 1932 lea rcx,QWORD PTR[32+rcx] 1933 xorps xmm2,xmm0 1934 $L$oop_enc1_9:: 1935 DB 102,15,56,220,209 1936 dec eax 1937 movups xmm1,XMMWORD PTR[rcx] 1938 lea rcx,QWORD PTR[16+rcx] 1939 jnz $L$oop_enc1_9 1940 DB 102,15,56,221,209 1941 xorps xmm2,xmm10 1942 movdqa xmm10,xmm11 1943 movups XMMWORD PTR[rsi],xmm2 1944 lea rsi,QWORD PTR[16+rsi] 1945 jmp $L$xts_enc_done 1946 1947 ALIGN 16 1948 $L$xts_enc_two:: 1949 movups xmm2,XMMWORD PTR[rdi] 1950 movups xmm3,XMMWORD PTR[16+rdi] 1951 lea rdi,QWORD PTR[32+rdi] 1952 xorps xmm2,xmm10 1953 xorps xmm3,xmm11 1954 1955 call _aesni_encrypt2 1956 1957 xorps xmm2,xmm10 1958 movdqa xmm10,xmm12 1959 xorps xmm3,xmm11 1960 movups XMMWORD PTR[rsi],xmm2 1961 movups XMMWORD PTR[16+rsi],xmm3 1962 lea rsi,QWORD PTR[32+rsi] 1963 jmp $L$xts_enc_done 1964 1965 ALIGN 16 1966 $L$xts_enc_three:: 1967 movups xmm2,XMMWORD PTR[rdi] 1968 movups xmm3,XMMWORD PTR[16+rdi] 1969 movups xmm4,XMMWORD PTR[32+rdi] 1970 lea rdi,QWORD PTR[48+rdi] 1971 xorps xmm2,xmm10 1972 xorps xmm3,xmm11 1973 xorps xmm4,xmm12 1974 1975 call _aesni_encrypt3 1976 1977 xorps xmm2,xmm10 1978 movdqa xmm10,xmm13 1979 xorps xmm3,xmm11 1980 xorps xmm4,xmm12 1981 movups XMMWORD PTR[rsi],xmm2 1982 movups XMMWORD PTR[16+rsi],xmm3 1983 movups XMMWORD PTR[32+rsi],xmm4 1984 lea rsi,QWORD PTR[48+rsi] 1985 jmp $L$xts_enc_done 1986 1987 ALIGN 16 1988 $L$xts_enc_four:: 1989 movups xmm2,XMMWORD PTR[rdi] 1990 movups xmm3,XMMWORD PTR[16+rdi] 1991 movups xmm4,XMMWORD PTR[32+rdi] 1992 xorps xmm2,xmm10 1993 movups xmm5,XMMWORD PTR[48+rdi] 1994 lea rdi,QWORD PTR[64+rdi] 1995 xorps xmm3,xmm11 1996 xorps xmm4,xmm12 1997 xorps xmm5,xmm13 1998 1999 call _aesni_encrypt4 2000 2001 pxor xmm2,xmm10 2002 movdqa xmm10,xmm14 2003 pxor xmm3,xmm11 2004 pxor xmm4,xmm12 2005 movdqu XMMWORD PTR[rsi],xmm2 2006 pxor xmm5,xmm13 2007 movdqu XMMWORD PTR[16+rsi],xmm3 2008 movdqu XMMWORD PTR[32+rsi],xmm4 2009 movdqu XMMWORD PTR[48+rsi],xmm5 2010 lea rsi,QWORD PTR[64+rsi] 2011 jmp $L$xts_enc_done 2012 2013 ALIGN 16 2014 $L$xts_enc_done:: 2015 and r9,15 2016 jz $L$xts_enc_ret 2017 mov rdx,r9 2018 2019 $L$xts_enc_steal:: 2020 movzx eax,BYTE PTR[rdi] 2021 movzx ecx,BYTE PTR[((-16))+rsi] 2022 lea rdi,QWORD PTR[1+rdi] 2023 mov BYTE PTR[((-16))+rsi],al 2024 mov BYTE PTR[rsi],cl 2025 lea rsi,QWORD PTR[1+rsi] 2026 sub rdx,1 2027 jnz $L$xts_enc_steal 2028 2029 sub rsi,r9 2030 mov rcx,r11 2031 mov eax,r10d 2032 2033 movups xmm2,XMMWORD PTR[((-16))+rsi] 2034 xorps xmm2,xmm10 2035 movups xmm0,XMMWORD PTR[rcx] 2036 movups xmm1,XMMWORD PTR[16+rcx] 2037 lea rcx,QWORD PTR[32+rcx] 2038 xorps xmm2,xmm0 2039 $L$oop_enc1_10:: 2040 DB 102,15,56,220,209 2041 dec eax 2042 movups xmm1,XMMWORD PTR[rcx] 2043 lea rcx,QWORD PTR[16+rcx] 2044 jnz $L$oop_enc1_10 2045 DB 102,15,56,221,209 2046 xorps xmm2,xmm10 2047 movups XMMWORD PTR[(-16)+rsi],xmm2 2048 2049 $L$xts_enc_ret:: 2050 movaps xmm6,XMMWORD PTR[((-160))+rbp] 2051 movaps xmm7,XMMWORD PTR[((-144))+rbp] 2052 movaps xmm8,XMMWORD PTR[((-128))+rbp] 2053 movaps xmm9,XMMWORD PTR[((-112))+rbp] 2054 movaps xmm10,XMMWORD PTR[((-96))+rbp] 2055 movaps xmm11,XMMWORD PTR[((-80))+rbp] 2056 movaps xmm12,XMMWORD PTR[((-64))+rbp] 2057 movaps xmm13,XMMWORD PTR[((-48))+rbp] 2058 movaps xmm14,XMMWORD PTR[((-32))+rbp] 2059 movaps xmm15,XMMWORD PTR[((-16))+rbp] 2060 lea rsp,QWORD PTR[rbp] 2061 pop rbp 2062 $L$xts_enc_epilogue:: 2063 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue 2064 mov rsi,QWORD PTR[16+rsp] 2065 DB 0F3h,0C3h ;repret 2066 $L$SEH_end_aesni_xts_encrypt:: 2067 aesni_xts_encrypt ENDP 2068 PUBLIC aesni_xts_decrypt 2069 2070 ALIGN 16 2071 aesni_xts_decrypt PROC PUBLIC 2072 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue 2073 mov QWORD PTR[16+rsp],rsi 2074 mov rax,rsp 2075 $L$SEH_begin_aesni_xts_decrypt:: 2076 mov rdi,rcx 2077 mov rsi,rdx 2078 mov rdx,r8 2079 mov rcx,r9 2080 mov r8,QWORD PTR[40+rsp] 2081 mov r9,QWORD PTR[48+rsp] 2082 2083 2084 lea rax,QWORD PTR[rsp] 2085 push rbp 2086 sub rsp,272 2087 and rsp,-16 2088 movaps XMMWORD PTR[(-168)+rax],xmm6 2089 movaps XMMWORD PTR[(-152)+rax],xmm7 2090 movaps XMMWORD PTR[(-136)+rax],xmm8 2091 movaps XMMWORD PTR[(-120)+rax],xmm9 2092 movaps XMMWORD PTR[(-104)+rax],xmm10 2093 movaps XMMWORD PTR[(-88)+rax],xmm11 2094 movaps XMMWORD PTR[(-72)+rax],xmm12 2095 movaps XMMWORD PTR[(-56)+rax],xmm13 2096 movaps XMMWORD PTR[(-40)+rax],xmm14 2097 movaps XMMWORD PTR[(-24)+rax],xmm15 2098 $L$xts_dec_body:: 2099 lea rbp,QWORD PTR[((-8))+rax] 2100 movups xmm2,XMMWORD PTR[r9] 2101 mov eax,DWORD PTR[240+r8] 2102 mov r10d,DWORD PTR[240+rcx] 2103 movups xmm0,XMMWORD PTR[r8] 2104 movups xmm1,XMMWORD PTR[16+r8] 2105 lea r8,QWORD PTR[32+r8] 2106 xorps xmm2,xmm0 2107 $L$oop_enc1_11:: 2108 DB 102,15,56,220,209 2109 dec eax 2110 movups xmm1,XMMWORD PTR[r8] 2111 lea r8,QWORD PTR[16+r8] 2112 jnz $L$oop_enc1_11 2113 DB 102,15,56,221,209 2114 xor eax,eax 2115 test rdx,15 2116 setnz al 2117 shl rax,4 2118 sub rdx,rax 2119 2120 movups xmm0,XMMWORD PTR[rcx] 2121 mov r11,rcx 2122 mov eax,r10d 2123 shl r10d,4 2124 mov r9,rdx 2125 and rdx,-16 2126 2127 movups xmm1,XMMWORD PTR[16+r10*1+rcx] 2128 2129 movdqa xmm8,XMMWORD PTR[$L$xts_magic] 2130 movdqa xmm15,xmm2 2131 pshufd xmm9,xmm2,05fh 2132 pxor xmm1,xmm0 2133 movdqa xmm14,xmm9 2134 paddd xmm9,xmm9 2135 movdqa xmm10,xmm15 2136 psrad xmm14,31 2137 paddq xmm15,xmm15 2138 pand xmm14,xmm8 2139 pxor xmm10,xmm0 2140 pxor xmm15,xmm14 2141 movdqa xmm14,xmm9 2142 paddd xmm9,xmm9 2143 movdqa xmm11,xmm15 2144 psrad xmm14,31 2145 paddq xmm15,xmm15 2146 pand xmm14,xmm8 2147 pxor xmm11,xmm0 2148 pxor xmm15,xmm14 2149 movdqa xmm14,xmm9 2150 paddd xmm9,xmm9 2151 movdqa xmm12,xmm15 2152 psrad xmm14,31 2153 paddq xmm15,xmm15 2154 pand xmm14,xmm8 2155 pxor xmm12,xmm0 2156 pxor xmm15,xmm14 2157 movdqa xmm14,xmm9 2158 paddd xmm9,xmm9 2159 movdqa xmm13,xmm15 2160 psrad xmm14,31 2161 paddq xmm15,xmm15 2162 pand xmm14,xmm8 2163 pxor xmm13,xmm0 2164 pxor xmm15,xmm14 2165 movdqa xmm14,xmm15 2166 psrad xmm9,31 2167 paddq xmm15,xmm15 2168 pand xmm9,xmm8 2169 pxor xmm14,xmm0 2170 pxor xmm15,xmm9 2171 movaps XMMWORD PTR[96+rsp],xmm1 2172 2173 sub rdx,16*6 2174 jc $L$xts_dec_short 2175 2176 mov eax,16+96 2177 lea rcx,QWORD PTR[32+r10*1+r11] 2178 sub rax,r10 2179 movups xmm1,XMMWORD PTR[16+r11] 2180 mov r10,rax 2181 lea r8,QWORD PTR[$L$xts_magic] 2182 jmp $L$xts_dec_grandloop 2183 2184 ALIGN 32 2185 $L$xts_dec_grandloop:: 2186 movdqu xmm2,XMMWORD PTR[rdi] 2187 movdqa xmm8,xmm0 2188 movdqu xmm3,XMMWORD PTR[16+rdi] 2189 pxor xmm2,xmm10 2190 movdqu xmm4,XMMWORD PTR[32+rdi] 2191 pxor xmm3,xmm11 2192 DB 102,15,56,222,209 2193 movdqu xmm5,XMMWORD PTR[48+rdi] 2194 pxor xmm4,xmm12 2195 DB 102,15,56,222,217 2196 movdqu xmm6,XMMWORD PTR[64+rdi] 2197 pxor xmm5,xmm13 2198 DB 102,15,56,222,225 2199 movdqu xmm7,XMMWORD PTR[80+rdi] 2200 pxor xmm8,xmm15 2201 movdqa xmm9,XMMWORD PTR[96+rsp] 2202 pxor xmm6,xmm14 2203 DB 102,15,56,222,233 2204 movups xmm0,XMMWORD PTR[32+r11] 2205 lea rdi,QWORD PTR[96+rdi] 2206 pxor xmm7,xmm8 2207 2208 pxor xmm10,xmm9 2209 DB 102,15,56,222,241 2210 pxor xmm11,xmm9 2211 movdqa XMMWORD PTR[rsp],xmm10 2212 DB 102,15,56,222,249 2213 movups xmm1,XMMWORD PTR[48+r11] 2214 pxor xmm12,xmm9 2215 2216 DB 102,15,56,222,208 2217 pxor xmm13,xmm9 2218 movdqa XMMWORD PTR[16+rsp],xmm11 2219 DB 102,15,56,222,216 2220 pxor xmm14,xmm9 2221 movdqa XMMWORD PTR[32+rsp],xmm12 2222 DB 102,15,56,222,224 2223 DB 102,15,56,222,232 2224 pxor xmm8,xmm9 2225 movdqa XMMWORD PTR[64+rsp],xmm14 2226 DB 102,15,56,222,240 2227 DB 102,15,56,222,248 2228 movups xmm0,XMMWORD PTR[64+r11] 2229 movdqa XMMWORD PTR[80+rsp],xmm8 2230 pshufd xmm9,xmm15,05fh 2231 jmp $L$xts_dec_loop6 2232 ALIGN 32 2233 $L$xts_dec_loop6:: 2234 DB 102,15,56,222,209 2235 DB 102,15,56,222,217 2236 DB 102,15,56,222,225 2237 DB 102,15,56,222,233 2238 DB 102,15,56,222,241 2239 DB 102,15,56,222,249 2240 movups xmm1,XMMWORD PTR[((-64))+rax*1+rcx] 2241 add rax,32 2242 2243 DB 102,15,56,222,208 2244 DB 102,15,56,222,216 2245 DB 102,15,56,222,224 2246 DB 102,15,56,222,232 2247 DB 102,15,56,222,240 2248 DB 102,15,56,222,248 2249 movups xmm0,XMMWORD PTR[((-80))+rax*1+rcx] 2250 jnz $L$xts_dec_loop6 2251 2252 movdqa xmm8,XMMWORD PTR[r8] 2253 movdqa xmm14,xmm9 2254 paddd xmm9,xmm9 2255 DB 102,15,56,222,209 2256 paddq xmm15,xmm15 2257 psrad xmm14,31 2258 DB 102,15,56,222,217 2259 pand xmm14,xmm8 2260 movups xmm10,XMMWORD PTR[r11] 2261 DB 102,15,56,222,225 2262 DB 102,15,56,222,233 2263 DB 102,15,56,222,241 2264 pxor xmm15,xmm14 2265 movaps xmm11,xmm10 2266 DB 102,15,56,222,249 2267 movups xmm1,XMMWORD PTR[((-64))+rcx] 2268 2269 movdqa xmm14,xmm9 2270 DB 102,15,56,222,208 2271 paddd xmm9,xmm9 2272 pxor xmm10,xmm15 2273 DB 102,15,56,222,216 2274 psrad xmm14,31 2275 paddq xmm15,xmm15 2276 DB 102,15,56,222,224 2277 DB 102,15,56,222,232 2278 pand xmm14,xmm8 2279 movaps xmm12,xmm11 2280 DB 102,15,56,222,240 2281 pxor xmm15,xmm14 2282 movdqa xmm14,xmm9 2283 DB 102,15,56,222,248 2284 movups xmm0,XMMWORD PTR[((-48))+rcx] 2285 2286 paddd xmm9,xmm9 2287 DB 102,15,56,222,209 2288 pxor xmm11,xmm15 2289 psrad xmm14,31 2290 DB 102,15,56,222,217 2291 paddq xmm15,xmm15 2292 pand xmm14,xmm8 2293 DB 102,15,56,222,225 2294 DB 102,15,56,222,233 2295 movdqa XMMWORD PTR[48+rsp],xmm13 2296 pxor xmm15,xmm14 2297 DB 102,15,56,222,241 2298 movaps xmm13,xmm12 2299 movdqa xmm14,xmm9 2300 DB 102,15,56,222,249 2301 movups xmm1,XMMWORD PTR[((-32))+rcx] 2302 2303 paddd xmm9,xmm9 2304 DB 102,15,56,222,208 2305 pxor xmm12,xmm15 2306 psrad xmm14,31 2307 DB 102,15,56,222,216 2308 paddq xmm15,xmm15 2309 pand xmm14,xmm8 2310 DB 102,15,56,222,224 2311 DB 102,15,56,222,232 2312 DB 102,15,56,222,240 2313 pxor xmm15,xmm14 2314 movaps xmm14,xmm13 2315 DB 102,15,56,222,248 2316 2317 movdqa xmm0,xmm9 2318 paddd xmm9,xmm9 2319 DB 102,15,56,222,209 2320 pxor xmm13,xmm15 2321 psrad xmm0,31 2322 DB 102,15,56,222,217 2323 paddq xmm15,xmm15 2324 pand xmm0,xmm8 2325 DB 102,15,56,222,225 2326 DB 102,15,56,222,233 2327 pxor xmm15,xmm0 2328 movups xmm0,XMMWORD PTR[r11] 2329 DB 102,15,56,222,241 2330 DB 102,15,56,222,249 2331 movups xmm1,XMMWORD PTR[16+r11] 2332 2333 pxor xmm14,xmm15 2334 DB 102,15,56,223,84,36,0 2335 psrad xmm9,31 2336 paddq xmm15,xmm15 2337 DB 102,15,56,223,92,36,16 2338 DB 102,15,56,223,100,36,32 2339 pand xmm9,xmm8 2340 mov rax,r10 2341 DB 102,15,56,223,108,36,48 2342 DB 102,15,56,223,116,36,64 2343 DB 102,15,56,223,124,36,80 2344 pxor xmm15,xmm9 2345 2346 lea rsi,QWORD PTR[96+rsi] 2347 movups XMMWORD PTR[(-96)+rsi],xmm2 2348 movups XMMWORD PTR[(-80)+rsi],xmm3 2349 movups XMMWORD PTR[(-64)+rsi],xmm4 2350 movups XMMWORD PTR[(-48)+rsi],xmm5 2351 movups XMMWORD PTR[(-32)+rsi],xmm6 2352 movups XMMWORD PTR[(-16)+rsi],xmm7 2353 sub rdx,16*6 2354 jnc $L$xts_dec_grandloop 2355 2356 mov eax,16+96 2357 sub eax,r10d 2358 mov rcx,r11 2359 shr eax,4 2360 2361 $L$xts_dec_short:: 2362 mov r10d,eax 2363 pxor xmm10,xmm0 2364 pxor xmm11,xmm0 2365 add rdx,16*6 2366 jz $L$xts_dec_done 2367 2368 pxor xmm12,xmm0 2369 cmp rdx,020h 2370 jb $L$xts_dec_one 2371 pxor xmm13,xmm0 2372 je $L$xts_dec_two 2373 2374 pxor xmm14,xmm0 2375 cmp rdx,040h 2376 jb $L$xts_dec_three 2377 je $L$xts_dec_four 2378 2379 movdqu xmm2,XMMWORD PTR[rdi] 2380 movdqu xmm3,XMMWORD PTR[16+rdi] 2381 movdqu xmm4,XMMWORD PTR[32+rdi] 2382 pxor xmm2,xmm10 2383 movdqu xmm5,XMMWORD PTR[48+rdi] 2384 pxor xmm3,xmm11 2385 movdqu xmm6,XMMWORD PTR[64+rdi] 2386 lea rdi,QWORD PTR[80+rdi] 2387 pxor xmm4,xmm12 2388 pxor xmm5,xmm13 2389 pxor xmm6,xmm14 2390 2391 call _aesni_decrypt6 2392 2393 xorps xmm2,xmm10 2394 xorps xmm3,xmm11 2395 xorps xmm4,xmm12 2396 movdqu XMMWORD PTR[rsi],xmm2 2397 xorps xmm5,xmm13 2398 movdqu XMMWORD PTR[16+rsi],xmm3 2399 xorps xmm6,xmm14 2400 movdqu XMMWORD PTR[32+rsi],xmm4 2401 pxor xmm14,xmm14 2402 movdqu XMMWORD PTR[48+rsi],xmm5 2403 pcmpgtd xmm14,xmm15 2404 movdqu XMMWORD PTR[64+rsi],xmm6 2405 lea rsi,QWORD PTR[80+rsi] 2406 pshufd xmm11,xmm14,013h 2407 and r9,15 2408 jz $L$xts_dec_ret 2409 2410 movdqa xmm10,xmm15 2411 paddq xmm15,xmm15 2412 pand xmm11,xmm8 2413 pxor xmm11,xmm15 2414 jmp $L$xts_dec_done2 2415 2416 ALIGN 16 2417 $L$xts_dec_one:: 2418 movups xmm2,XMMWORD PTR[rdi] 2419 lea rdi,QWORD PTR[16+rdi] 2420 xorps xmm2,xmm10 2421 movups xmm0,XMMWORD PTR[rcx] 2422 movups xmm1,XMMWORD PTR[16+rcx] 2423 lea rcx,QWORD PTR[32+rcx] 2424 xorps xmm2,xmm0 2425 $L$oop_dec1_12:: 2426 DB 102,15,56,222,209 2427 dec eax 2428 movups xmm1,XMMWORD PTR[rcx] 2429 lea rcx,QWORD PTR[16+rcx] 2430 jnz $L$oop_dec1_12 2431 DB 102,15,56,223,209 2432 xorps xmm2,xmm10 2433 movdqa xmm10,xmm11 2434 movups XMMWORD PTR[rsi],xmm2 2435 movdqa xmm11,xmm12 2436 lea rsi,QWORD PTR[16+rsi] 2437 jmp $L$xts_dec_done 2438 2439 ALIGN 16 2440 $L$xts_dec_two:: 2441 movups xmm2,XMMWORD PTR[rdi] 2442 movups xmm3,XMMWORD PTR[16+rdi] 2443 lea rdi,QWORD PTR[32+rdi] 2444 xorps xmm2,xmm10 2445 xorps xmm3,xmm11 2446 2447 call _aesni_decrypt2 2448 2449 xorps xmm2,xmm10 2450 movdqa xmm10,xmm12 2451 xorps xmm3,xmm11 2452 movdqa xmm11,xmm13 2453 movups XMMWORD PTR[rsi],xmm2 2454 movups XMMWORD PTR[16+rsi],xmm3 2455 lea rsi,QWORD PTR[32+rsi] 2456 jmp $L$xts_dec_done 2457 2458 ALIGN 16 2459 $L$xts_dec_three:: 2460 movups xmm2,XMMWORD PTR[rdi] 2461 movups xmm3,XMMWORD PTR[16+rdi] 2462 movups xmm4,XMMWORD PTR[32+rdi] 2463 lea rdi,QWORD PTR[48+rdi] 2464 xorps xmm2,xmm10 2465 xorps xmm3,xmm11 2466 xorps xmm4,xmm12 2467 2468 call _aesni_decrypt3 2469 2470 xorps xmm2,xmm10 2471 movdqa xmm10,xmm13 2472 xorps xmm3,xmm11 2473 movdqa xmm11,xmm14 2474 xorps xmm4,xmm12 2475 movups XMMWORD PTR[rsi],xmm2 2476 movups XMMWORD PTR[16+rsi],xmm3 2477 movups XMMWORD PTR[32+rsi],xmm4 2478 lea rsi,QWORD PTR[48+rsi] 2479 jmp $L$xts_dec_done 2480 2481 ALIGN 16 2482 $L$xts_dec_four:: 2483 movups xmm2,XMMWORD PTR[rdi] 2484 movups xmm3,XMMWORD PTR[16+rdi] 2485 movups xmm4,XMMWORD PTR[32+rdi] 2486 xorps xmm2,xmm10 2487 movups xmm5,XMMWORD PTR[48+rdi] 2488 lea rdi,QWORD PTR[64+rdi] 2489 xorps xmm3,xmm11 2490 xorps xmm4,xmm12 2491 xorps xmm5,xmm13 2492 2493 call _aesni_decrypt4 2494 2495 pxor xmm2,xmm10 2496 movdqa xmm10,xmm14 2497 pxor xmm3,xmm11 2498 movdqa xmm11,xmm15 2499 pxor xmm4,xmm12 2500 movdqu XMMWORD PTR[rsi],xmm2 2501 pxor xmm5,xmm13 2502 movdqu XMMWORD PTR[16+rsi],xmm3 2503 movdqu XMMWORD PTR[32+rsi],xmm4 2504 movdqu XMMWORD PTR[48+rsi],xmm5 2505 lea rsi,QWORD PTR[64+rsi] 2506 jmp $L$xts_dec_done 2507 2508 ALIGN 16 2509 $L$xts_dec_done:: 2510 and r9,15 2511 jz $L$xts_dec_ret 2512 $L$xts_dec_done2:: 2513 mov rdx,r9 2514 mov rcx,r11 2515 mov eax,r10d 2516 2517 movups xmm2,XMMWORD PTR[rdi] 2518 xorps xmm2,xmm11 2519 movups xmm0,XMMWORD PTR[rcx] 2520 movups xmm1,XMMWORD PTR[16+rcx] 2521 lea rcx,QWORD PTR[32+rcx] 2522 xorps xmm2,xmm0 2523 $L$oop_dec1_13:: 2524 DB 102,15,56,222,209 2525 dec eax 2526 movups xmm1,XMMWORD PTR[rcx] 2527 lea rcx,QWORD PTR[16+rcx] 2528 jnz $L$oop_dec1_13 2529 DB 102,15,56,223,209 2530 xorps xmm2,xmm11 2531 movups XMMWORD PTR[rsi],xmm2 2532 2533 $L$xts_dec_steal:: 2534 movzx eax,BYTE PTR[16+rdi] 2535 movzx ecx,BYTE PTR[rsi] 2536 lea rdi,QWORD PTR[1+rdi] 2537 mov BYTE PTR[rsi],al 2538 mov BYTE PTR[16+rsi],cl 2539 lea rsi,QWORD PTR[1+rsi] 2540 sub rdx,1 2541 jnz $L$xts_dec_steal 2542 2543 sub rsi,r9 2544 mov rcx,r11 2545 mov eax,r10d 2546 2547 movups xmm2,XMMWORD PTR[rsi] 2548 xorps xmm2,xmm10 2549 movups xmm0,XMMWORD PTR[rcx] 2550 movups xmm1,XMMWORD PTR[16+rcx] 2551 lea rcx,QWORD PTR[32+rcx] 2552 xorps xmm2,xmm0 2553 $L$oop_dec1_14:: 2554 DB 102,15,56,222,209 2555 dec eax 2556 movups xmm1,XMMWORD PTR[rcx] 2557 lea rcx,QWORD PTR[16+rcx] 2558 jnz $L$oop_dec1_14 2559 DB 102,15,56,223,209 2560 xorps xmm2,xmm10 2561 movups XMMWORD PTR[rsi],xmm2 2562 2563 $L$xts_dec_ret:: 2564 movaps xmm6,XMMWORD PTR[((-160))+rbp] 2565 movaps xmm7,XMMWORD PTR[((-144))+rbp] 2566 movaps xmm8,XMMWORD PTR[((-128))+rbp] 2567 movaps xmm9,XMMWORD PTR[((-112))+rbp] 2568 movaps xmm10,XMMWORD PTR[((-96))+rbp] 2569 movaps xmm11,XMMWORD PTR[((-80))+rbp] 2570 movaps xmm12,XMMWORD PTR[((-64))+rbp] 2571 movaps xmm13,XMMWORD PTR[((-48))+rbp] 2572 movaps xmm14,XMMWORD PTR[((-32))+rbp] 2573 movaps xmm15,XMMWORD PTR[((-16))+rbp] 2574 lea rsp,QWORD PTR[rbp] 2575 pop rbp 2576 $L$xts_dec_epilogue:: 2577 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue 2578 mov rsi,QWORD PTR[16+rsp] 2579 DB 0F3h,0C3h ;repret 2580 $L$SEH_end_aesni_xts_decrypt:: 2581 aesni_xts_decrypt ENDP 2582 PUBLIC aesni_cbc_encrypt 2583 2584 ALIGN 16 2585 aesni_cbc_encrypt PROC PUBLIC 2586 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue 2587 mov QWORD PTR[16+rsp],rsi 2588 mov rax,rsp 2589 $L$SEH_begin_aesni_cbc_encrypt:: 2590 mov rdi,rcx 2591 mov rsi,rdx 2592 mov rdx,r8 2593 mov rcx,r9 2594 mov r8,QWORD PTR[40+rsp] 2595 mov r9,QWORD PTR[48+rsp] 2596 2597 2598 test rdx,rdx 2599 jz $L$cbc_ret 2600 2601 mov r10d,DWORD PTR[240+rcx] 2602 mov r11,rcx 2603 test r9d,r9d 2604 jz $L$cbc_decrypt 2605 2606 movups xmm2,XMMWORD PTR[r8] 2607 mov eax,r10d 2608 cmp rdx,16 2609 jb $L$cbc_enc_tail 2610 sub rdx,16 2611 jmp $L$cbc_enc_loop 2612 ALIGN 16 2613 $L$cbc_enc_loop:: 2614 movups xmm3,XMMWORD PTR[rdi] 2615 lea rdi,QWORD PTR[16+rdi] 2616 2617 movups xmm0,XMMWORD PTR[rcx] 2618 movups xmm1,XMMWORD PTR[16+rcx] 2619 xorps xmm3,xmm0 2620 lea rcx,QWORD PTR[32+rcx] 2621 xorps xmm2,xmm3 2622 $L$oop_enc1_15:: 2623 DB 102,15,56,220,209 2624 dec eax 2625 movups xmm1,XMMWORD PTR[rcx] 2626 lea rcx,QWORD PTR[16+rcx] 2627 jnz $L$oop_enc1_15 2628 DB 102,15,56,221,209 2629 mov eax,r10d 2630 mov rcx,r11 2631 movups XMMWORD PTR[rsi],xmm2 2632 lea rsi,QWORD PTR[16+rsi] 2633 sub rdx,16 2634 jnc $L$cbc_enc_loop 2635 add rdx,16 2636 jnz $L$cbc_enc_tail 2637 movups XMMWORD PTR[r8],xmm2 2638 jmp $L$cbc_ret 2639 2640 $L$cbc_enc_tail:: 2641 mov rcx,rdx 2642 xchg rsi,rdi 2643 DD 09066A4F3h 2644 mov ecx,16 2645 sub rcx,rdx 2646 xor eax,eax 2647 DD 09066AAF3h 2648 lea rdi,QWORD PTR[((-16))+rdi] 2649 mov eax,r10d 2650 mov rsi,rdi 2651 mov rcx,r11 2652 xor rdx,rdx 2653 jmp $L$cbc_enc_loop 2654 2655 ALIGN 16 2656 $L$cbc_decrypt:: 2657 lea rax,QWORD PTR[rsp] 2658 push rbp 2659 sub rsp,176 2660 and rsp,-16 2661 movaps XMMWORD PTR[16+rsp],xmm6 2662 movaps XMMWORD PTR[32+rsp],xmm7 2663 movaps XMMWORD PTR[48+rsp],xmm8 2664 movaps XMMWORD PTR[64+rsp],xmm9 2665 movaps XMMWORD PTR[80+rsp],xmm10 2666 movaps XMMWORD PTR[96+rsp],xmm11 2667 movaps XMMWORD PTR[112+rsp],xmm12 2668 movaps XMMWORD PTR[128+rsp],xmm13 2669 movaps XMMWORD PTR[144+rsp],xmm14 2670 movaps XMMWORD PTR[160+rsp],xmm15 2671 $L$cbc_decrypt_body:: 2672 lea rbp,QWORD PTR[((-8))+rax] 2673 movups xmm10,XMMWORD PTR[r8] 2674 mov eax,r10d 2675 cmp rdx,050h 2676 jbe $L$cbc_dec_tail 2677 2678 movups xmm0,XMMWORD PTR[rcx] 2679 movdqu xmm2,XMMWORD PTR[rdi] 2680 movdqu xmm3,XMMWORD PTR[16+rdi] 2681 movdqa xmm11,xmm2 2682 movdqu xmm4,XMMWORD PTR[32+rdi] 2683 movdqa xmm12,xmm3 2684 movdqu xmm5,XMMWORD PTR[48+rdi] 2685 movdqa xmm13,xmm4 2686 movdqu xmm6,XMMWORD PTR[64+rdi] 2687 movdqa xmm14,xmm5 2688 movdqu xmm7,XMMWORD PTR[80+rdi] 2689 movdqa xmm15,xmm6 2690 mov r9d,DWORD PTR[((OPENSSL_ia32cap_P+4))] 2691 cmp rdx,070h 2692 jbe $L$cbc_dec_six_or_seven 2693 2694 and r9d,71303168 2695 sub rdx,050h 2696 cmp r9d,4194304 2697 je $L$cbc_dec_loop6_enter 2698 sub rdx,020h 2699 lea rcx,QWORD PTR[112+rcx] 2700 jmp $L$cbc_dec_loop8_enter 2701 ALIGN 16 2702 $L$cbc_dec_loop8:: 2703 movups XMMWORD PTR[rsi],xmm9 2704 lea rsi,QWORD PTR[16+rsi] 2705 $L$cbc_dec_loop8_enter:: 2706 movdqu xmm8,XMMWORD PTR[96+rdi] 2707 pxor xmm2,xmm0 2708 movdqu xmm9,XMMWORD PTR[112+rdi] 2709 pxor xmm3,xmm0 2710 movups xmm1,XMMWORD PTR[((16-112))+rcx] 2711 pxor xmm4,xmm0 2712 xor r11,r11 2713 cmp rdx,070h 2714 pxor xmm5,xmm0 2715 pxor xmm6,xmm0 2716 pxor xmm7,xmm0 2717 pxor xmm8,xmm0 2718 2719 DB 102,15,56,222,209 2720 pxor xmm9,xmm0 2721 movups xmm0,XMMWORD PTR[((32-112))+rcx] 2722 DB 102,15,56,222,217 2723 DB 102,15,56,222,225 2724 DB 102,15,56,222,233 2725 DB 102,15,56,222,241 2726 DB 102,15,56,222,249 2727 DB 102,68,15,56,222,193 2728 setnc r11b 2729 shl r11,7 2730 DB 102,68,15,56,222,201 2731 add r11,rdi 2732 movups xmm1,XMMWORD PTR[((48-112))+rcx] 2733 DB 102,15,56,222,208 2734 DB 102,15,56,222,216 2735 DB 102,15,56,222,224 2736 DB 102,15,56,222,232 2737 DB 102,15,56,222,240 2738 DB 102,15,56,222,248 2739 DB 102,68,15,56,222,192 2740 DB 102,68,15,56,222,200 2741 movups xmm0,XMMWORD PTR[((64-112))+rcx] 2742 nop 2743 DB 102,15,56,222,209 2744 DB 102,15,56,222,217 2745 DB 102,15,56,222,225 2746 DB 102,15,56,222,233 2747 DB 102,15,56,222,241 2748 DB 102,15,56,222,249 2749 DB 102,68,15,56,222,193 2750 DB 102,68,15,56,222,201 2751 movups xmm1,XMMWORD PTR[((80-112))+rcx] 2752 nop 2753 DB 102,15,56,222,208 2754 DB 102,15,56,222,216 2755 DB 102,15,56,222,224 2756 DB 102,15,56,222,232 2757 DB 102,15,56,222,240 2758 DB 102,15,56,222,248 2759 DB 102,68,15,56,222,192 2760 DB 102,68,15,56,222,200 2761 movups xmm0,XMMWORD PTR[((96-112))+rcx] 2762 nop 2763 DB 102,15,56,222,209 2764 DB 102,15,56,222,217 2765 DB 102,15,56,222,225 2766 DB 102,15,56,222,233 2767 DB 102,15,56,222,241 2768 DB 102,15,56,222,249 2769 DB 102,68,15,56,222,193 2770 DB 102,68,15,56,222,201 2771 movups xmm1,XMMWORD PTR[((112-112))+rcx] 2772 nop 2773 DB 102,15,56,222,208 2774 DB 102,15,56,222,216 2775 DB 102,15,56,222,224 2776 DB 102,15,56,222,232 2777 DB 102,15,56,222,240 2778 DB 102,15,56,222,248 2779 DB 102,68,15,56,222,192 2780 DB 102,68,15,56,222,200 2781 movups xmm0,XMMWORD PTR[((128-112))+rcx] 2782 nop 2783 DB 102,15,56,222,209 2784 DB 102,15,56,222,217 2785 DB 102,15,56,222,225 2786 DB 102,15,56,222,233 2787 DB 102,15,56,222,241 2788 DB 102,15,56,222,249 2789 DB 102,68,15,56,222,193 2790 DB 102,68,15,56,222,201 2791 movups xmm1,XMMWORD PTR[((144-112))+rcx] 2792 cmp eax,11 2793 DB 102,15,56,222,208 2794 DB 102,15,56,222,216 2795 DB 102,15,56,222,224 2796 DB 102,15,56,222,232 2797 DB 102,15,56,222,240 2798 DB 102,15,56,222,248 2799 DB 102,68,15,56,222,192 2800 DB 102,68,15,56,222,200 2801 movups xmm0,XMMWORD PTR[((160-112))+rcx] 2802 jb $L$cbc_dec_done 2803 DB 102,15,56,222,209 2804 DB 102,15,56,222,217 2805 DB 102,15,56,222,225 2806 DB 102,15,56,222,233 2807 DB 102,15,56,222,241 2808 DB 102,15,56,222,249 2809 DB 102,68,15,56,222,193 2810 DB 102,68,15,56,222,201 2811 movups xmm1,XMMWORD PTR[((176-112))+rcx] 2812 nop 2813 DB 102,15,56,222,208 2814 DB 102,15,56,222,216 2815 DB 102,15,56,222,224 2816 DB 102,15,56,222,232 2817 DB 102,15,56,222,240 2818 DB 102,15,56,222,248 2819 DB 102,68,15,56,222,192 2820 DB 102,68,15,56,222,200 2821 movups xmm0,XMMWORD PTR[((192-112))+rcx] 2822 je $L$cbc_dec_done 2823 DB 102,15,56,222,209 2824 DB 102,15,56,222,217 2825 DB 102,15,56,222,225 2826 DB 102,15,56,222,233 2827 DB 102,15,56,222,241 2828 DB 102,15,56,222,249 2829 DB 102,68,15,56,222,193 2830 DB 102,68,15,56,222,201 2831 movups xmm1,XMMWORD PTR[((208-112))+rcx] 2832 nop 2833 DB 102,15,56,222,208 2834 DB 102,15,56,222,216 2835 DB 102,15,56,222,224 2836 DB 102,15,56,222,232 2837 DB 102,15,56,222,240 2838 DB 102,15,56,222,248 2839 DB 102,68,15,56,222,192 2840 DB 102,68,15,56,222,200 2841 movups xmm0,XMMWORD PTR[((224-112))+rcx] 2842 jmp $L$cbc_dec_done 2843 ALIGN 16 2844 $L$cbc_dec_done:: 2845 DB 102,15,56,222,209 2846 DB 102,15,56,222,217 2847 pxor xmm10,xmm0 2848 pxor xmm11,xmm0 2849 DB 102,15,56,222,225 2850 DB 102,15,56,222,233 2851 pxor xmm12,xmm0 2852 pxor xmm13,xmm0 2853 DB 102,15,56,222,241 2854 DB 102,15,56,222,249 2855 pxor xmm14,xmm0 2856 pxor xmm15,xmm0 2857 DB 102,68,15,56,222,193 2858 DB 102,68,15,56,222,201 2859 movdqu xmm1,XMMWORD PTR[80+rdi] 2860 2861 DB 102,65,15,56,223,210 2862 movdqu xmm10,XMMWORD PTR[96+rdi] 2863 pxor xmm1,xmm0 2864 DB 102,65,15,56,223,219 2865 pxor xmm10,xmm0 2866 movdqu xmm0,XMMWORD PTR[112+rdi] 2867 DB 102,65,15,56,223,228 2868 lea rdi,QWORD PTR[128+rdi] 2869 movdqu xmm11,XMMWORD PTR[r11] 2870 DB 102,65,15,56,223,237 2871 DB 102,65,15,56,223,246 2872 movdqu xmm12,XMMWORD PTR[16+r11] 2873 movdqu xmm13,XMMWORD PTR[32+r11] 2874 DB 102,65,15,56,223,255 2875 DB 102,68,15,56,223,193 2876 movdqu xmm14,XMMWORD PTR[48+r11] 2877 movdqu xmm15,XMMWORD PTR[64+r11] 2878 DB 102,69,15,56,223,202 2879 movdqa xmm10,xmm0 2880 movdqu xmm1,XMMWORD PTR[80+r11] 2881 movups xmm0,XMMWORD PTR[((-112))+rcx] 2882 2883 movups XMMWORD PTR[rsi],xmm2 2884 movdqa xmm2,xmm11 2885 movups XMMWORD PTR[16+rsi],xmm3 2886 movdqa xmm3,xmm12 2887 movups XMMWORD PTR[32+rsi],xmm4 2888 movdqa xmm4,xmm13 2889 movups XMMWORD PTR[48+rsi],xmm5 2890 movdqa xmm5,xmm14 2891 movups XMMWORD PTR[64+rsi],xmm6 2892 movdqa xmm6,xmm15 2893 movups XMMWORD PTR[80+rsi],xmm7 2894 movdqa xmm7,xmm1 2895 movups XMMWORD PTR[96+rsi],xmm8 2896 lea rsi,QWORD PTR[112+rsi] 2897 2898 sub rdx,080h 2899 ja $L$cbc_dec_loop8 2900 2901 movaps xmm2,xmm9 2902 lea rcx,QWORD PTR[((-112))+rcx] 2903 add rdx,070h 2904 jle $L$cbc_dec_tail_collected 2905 movups XMMWORD PTR[rsi],xmm9 2906 lea rsi,QWORD PTR[16+rsi] 2907 cmp rdx,050h 2908 jbe $L$cbc_dec_tail 2909 2910 movaps xmm2,xmm11 2911 $L$cbc_dec_six_or_seven:: 2912 cmp rdx,060h 2913 ja $L$cbc_dec_seven 2914 2915 movaps xmm8,xmm7 2916 call _aesni_decrypt6 2917 pxor xmm2,xmm10 2918 movaps xmm10,xmm8 2919 pxor xmm3,xmm11 2920 movdqu XMMWORD PTR[rsi],xmm2 2921 pxor xmm4,xmm12 2922 movdqu XMMWORD PTR[16+rsi],xmm3 2923 pxor xmm5,xmm13 2924 movdqu XMMWORD PTR[32+rsi],xmm4 2925 pxor xmm6,xmm14 2926 movdqu XMMWORD PTR[48+rsi],xmm5 2927 pxor xmm7,xmm15 2928 movdqu XMMWORD PTR[64+rsi],xmm6 2929 lea rsi,QWORD PTR[80+rsi] 2930 movdqa xmm2,xmm7 2931 jmp $L$cbc_dec_tail_collected 2932 2933 ALIGN 16 2934 $L$cbc_dec_seven:: 2935 movups xmm8,XMMWORD PTR[96+rdi] 2936 xorps xmm9,xmm9 2937 call _aesni_decrypt8 2938 movups xmm9,XMMWORD PTR[80+rdi] 2939 pxor xmm2,xmm10 2940 movups xmm10,XMMWORD PTR[96+rdi] 2941 pxor xmm3,xmm11 2942 movdqu XMMWORD PTR[rsi],xmm2 2943 pxor xmm4,xmm12 2944 movdqu XMMWORD PTR[16+rsi],xmm3 2945 pxor xmm5,xmm13 2946 movdqu XMMWORD PTR[32+rsi],xmm4 2947 pxor xmm6,xmm14 2948 movdqu XMMWORD PTR[48+rsi],xmm5 2949 pxor xmm7,xmm15 2950 movdqu XMMWORD PTR[64+rsi],xmm6 2951 pxor xmm8,xmm9 2952 movdqu XMMWORD PTR[80+rsi],xmm7 2953 lea rsi,QWORD PTR[96+rsi] 2954 movdqa xmm2,xmm8 2955 jmp $L$cbc_dec_tail_collected 2956 2957 ALIGN 16 2958 $L$cbc_dec_loop6:: 2959 movups XMMWORD PTR[rsi],xmm7 2960 lea rsi,QWORD PTR[16+rsi] 2961 movdqu xmm2,XMMWORD PTR[rdi] 2962 movdqu xmm3,XMMWORD PTR[16+rdi] 2963 movdqa xmm11,xmm2 2964 movdqu xmm4,XMMWORD PTR[32+rdi] 2965 movdqa xmm12,xmm3 2966 movdqu xmm5,XMMWORD PTR[48+rdi] 2967 movdqa xmm13,xmm4 2968 movdqu xmm6,XMMWORD PTR[64+rdi] 2969 movdqa xmm14,xmm5 2970 movdqu xmm7,XMMWORD PTR[80+rdi] 2971 movdqa xmm15,xmm6 2972 $L$cbc_dec_loop6_enter:: 2973 lea rdi,QWORD PTR[96+rdi] 2974 movdqa xmm8,xmm7 2975 2976 call _aesni_decrypt6 2977 2978 pxor xmm2,xmm10 2979 movdqa xmm10,xmm8 2980 pxor xmm3,xmm11 2981 movdqu XMMWORD PTR[rsi],xmm2 2982 pxor xmm4,xmm12 2983 movdqu XMMWORD PTR[16+rsi],xmm3 2984 pxor xmm5,xmm13 2985 movdqu XMMWORD PTR[32+rsi],xmm4 2986 pxor xmm6,xmm14 2987 mov rcx,r11 2988 movdqu XMMWORD PTR[48+rsi],xmm5 2989 pxor xmm7,xmm15 2990 mov eax,r10d 2991 movdqu XMMWORD PTR[64+rsi],xmm6 2992 lea rsi,QWORD PTR[80+rsi] 2993 sub rdx,060h 2994 ja $L$cbc_dec_loop6 2995 2996 movdqa xmm2,xmm7 2997 add rdx,050h 2998 jle $L$cbc_dec_tail_collected 2999 movups XMMWORD PTR[rsi],xmm7 3000 lea rsi,QWORD PTR[16+rsi] 3001 3002 $L$cbc_dec_tail:: 3003 movups xmm2,XMMWORD PTR[rdi] 3004 sub rdx,010h 3005 jbe $L$cbc_dec_one 3006 3007 movups xmm3,XMMWORD PTR[16+rdi] 3008 movaps xmm11,xmm2 3009 sub rdx,010h 3010 jbe $L$cbc_dec_two 3011 3012 movups xmm4,XMMWORD PTR[32+rdi] 3013 movaps xmm12,xmm3 3014 sub rdx,010h 3015 jbe $L$cbc_dec_three 3016 3017 movups xmm5,XMMWORD PTR[48+rdi] 3018 movaps xmm13,xmm4 3019 sub rdx,010h 3020 jbe $L$cbc_dec_four 3021 3022 movups xmm6,XMMWORD PTR[64+rdi] 3023 movaps xmm14,xmm5 3024 movaps xmm15,xmm6 3025 xorps xmm7,xmm7 3026 call _aesni_decrypt6 3027 pxor xmm2,xmm10 3028 movaps xmm10,xmm15 3029 pxor xmm3,xmm11 3030 movdqu XMMWORD PTR[rsi],xmm2 3031 pxor xmm4,xmm12 3032 movdqu XMMWORD PTR[16+rsi],xmm3 3033 pxor xmm5,xmm13 3034 movdqu XMMWORD PTR[32+rsi],xmm4 3035 pxor xmm6,xmm14 3036 movdqu XMMWORD PTR[48+rsi],xmm5 3037 lea rsi,QWORD PTR[64+rsi] 3038 movdqa xmm2,xmm6 3039 sub rdx,010h 3040 jmp $L$cbc_dec_tail_collected 3041 3042 ALIGN 16 3043 $L$cbc_dec_one:: 3044 movaps xmm11,xmm2 3045 movups xmm0,XMMWORD PTR[rcx] 3046 movups xmm1,XMMWORD PTR[16+rcx] 3047 lea rcx,QWORD PTR[32+rcx] 3048 xorps xmm2,xmm0 3049 $L$oop_dec1_16:: 3050 DB 102,15,56,222,209 3051 dec eax 3052 movups xmm1,XMMWORD PTR[rcx] 3053 lea rcx,QWORD PTR[16+rcx] 3054 jnz $L$oop_dec1_16 3055 DB 102,15,56,223,209 3056 xorps xmm2,xmm10 3057 movaps xmm10,xmm11 3058 jmp $L$cbc_dec_tail_collected 3059 ALIGN 16 3060 $L$cbc_dec_two:: 3061 movaps xmm12,xmm3 3062 call _aesni_decrypt2 3063 pxor xmm2,xmm10 3064 movaps xmm10,xmm12 3065 pxor xmm3,xmm11 3066 movdqu XMMWORD PTR[rsi],xmm2 3067 movdqa xmm2,xmm3 3068 lea rsi,QWORD PTR[16+rsi] 3069 jmp $L$cbc_dec_tail_collected 3070 ALIGN 16 3071 $L$cbc_dec_three:: 3072 movaps xmm13,xmm4 3073 call _aesni_decrypt3 3074 pxor xmm2,xmm10 3075 movaps xmm10,xmm13 3076 pxor xmm3,xmm11 3077 movdqu XMMWORD PTR[rsi],xmm2 3078 pxor xmm4,xmm12 3079 movdqu XMMWORD PTR[16+rsi],xmm3 3080 movdqa xmm2,xmm4 3081 lea rsi,QWORD PTR[32+rsi] 3082 jmp $L$cbc_dec_tail_collected 3083 ALIGN 16 3084 $L$cbc_dec_four:: 3085 movaps xmm14,xmm5 3086 call _aesni_decrypt4 3087 pxor xmm2,xmm10 3088 movaps xmm10,xmm14 3089 pxor xmm3,xmm11 3090 movdqu XMMWORD PTR[rsi],xmm2 3091 pxor xmm4,xmm12 3092 movdqu XMMWORD PTR[16+rsi],xmm3 3093 pxor xmm5,xmm13 3094 movdqu XMMWORD PTR[32+rsi],xmm4 3095 movdqa xmm2,xmm5 3096 lea rsi,QWORD PTR[48+rsi] 3097 jmp $L$cbc_dec_tail_collected 3098 3099 ALIGN 16 3100 $L$cbc_dec_tail_collected:: 3101 movups XMMWORD PTR[r8],xmm10 3102 and rdx,15 3103 jnz $L$cbc_dec_tail_partial 3104 movups XMMWORD PTR[rsi],xmm2 3105 jmp $L$cbc_dec_ret 3106 ALIGN 16 3107 $L$cbc_dec_tail_partial:: 3108 movaps XMMWORD PTR[rsp],xmm2 3109 mov rcx,16 3110 mov rdi,rsi 3111 sub rcx,rdx 3112 lea rsi,QWORD PTR[rsp] 3113 DD 09066A4F3h 3114 3115 $L$cbc_dec_ret:: 3116 movaps xmm6,XMMWORD PTR[16+rsp] 3117 movaps xmm7,XMMWORD PTR[32+rsp] 3118 movaps xmm8,XMMWORD PTR[48+rsp] 3119 movaps xmm9,XMMWORD PTR[64+rsp] 3120 movaps xmm10,XMMWORD PTR[80+rsp] 3121 movaps xmm11,XMMWORD PTR[96+rsp] 3122 movaps xmm12,XMMWORD PTR[112+rsp] 3123 movaps xmm13,XMMWORD PTR[128+rsp] 3124 movaps xmm14,XMMWORD PTR[144+rsp] 3125 movaps xmm15,XMMWORD PTR[160+rsp] 3126 lea rsp,QWORD PTR[rbp] 3127 pop rbp 3128 $L$cbc_ret:: 3129 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue 3130 mov rsi,QWORD PTR[16+rsp] 3131 DB 0F3h,0C3h ;repret 3132 $L$SEH_end_aesni_cbc_encrypt:: 3133 aesni_cbc_encrypt ENDP 3134 PUBLIC aesni_set_decrypt_key 3135 3136 ALIGN 16 3137 aesni_set_decrypt_key PROC PUBLIC 3138 DB 048h,083h,0ECh,008h 3139 call __aesni_set_encrypt_key 3140 shl edx,4 3141 test eax,eax 3142 jnz $L$dec_key_ret 3143 lea rcx,QWORD PTR[16+rdx*1+r8] 3144 3145 movups xmm0,XMMWORD PTR[r8] 3146 movups xmm1,XMMWORD PTR[rcx] 3147 movups XMMWORD PTR[rcx],xmm0 3148 movups XMMWORD PTR[r8],xmm1 3149 lea r8,QWORD PTR[16+r8] 3150 lea rcx,QWORD PTR[((-16))+rcx] 3151 3152 $L$dec_key_inverse:: 3153 movups xmm0,XMMWORD PTR[r8] 3154 movups xmm1,XMMWORD PTR[rcx] 3155 DB 102,15,56,219,192 3156 DB 102,15,56,219,201 3157 lea r8,QWORD PTR[16+r8] 3158 lea rcx,QWORD PTR[((-16))+rcx] 3159 movups XMMWORD PTR[16+rcx],xmm0 3160 movups XMMWORD PTR[(-16)+r8],xmm1 3161 cmp rcx,r8 3162 ja $L$dec_key_inverse 3163 3164 movups xmm0,XMMWORD PTR[r8] 3165 DB 102,15,56,219,192 3166 movups XMMWORD PTR[rcx],xmm0 3167 $L$dec_key_ret:: 3168 add rsp,8 3169 DB 0F3h,0C3h ;repret 3170 $L$SEH_end_set_decrypt_key:: 3171 aesni_set_decrypt_key ENDP 3172 PUBLIC aesni_set_encrypt_key 3173 3174 ALIGN 16 3175 aesni_set_encrypt_key PROC PUBLIC 3176 __aesni_set_encrypt_key:: 3177 DB 048h,083h,0ECh,008h 3178 mov rax,-1 3179 test rcx,rcx 3180 jz $L$enc_key_ret 3181 test r8,r8 3182 jz $L$enc_key_ret 3183 3184 movups xmm0,XMMWORD PTR[rcx] 3185 xorps xmm4,xmm4 3186 lea rax,QWORD PTR[16+r8] 3187 cmp edx,256 3188 je $L$14rounds 3189 cmp edx,192 3190 je $L$12rounds 3191 cmp edx,128 3192 jne $L$bad_keybits 3193 3194 $L$10rounds:: 3195 mov edx,9 3196 movups XMMWORD PTR[r8],xmm0 3197 DB 102,15,58,223,200,1 3198 call $L$key_expansion_128_cold 3199 DB 102,15,58,223,200,2 3200 call $L$key_expansion_128 3201 DB 102,15,58,223,200,4 3202 call $L$key_expansion_128 3203 DB 102,15,58,223,200,8 3204 call $L$key_expansion_128 3205 DB 102,15,58,223,200,16 3206 call $L$key_expansion_128 3207 DB 102,15,58,223,200,32 3208 call $L$key_expansion_128 3209 DB 102,15,58,223,200,64 3210 call $L$key_expansion_128 3211 DB 102,15,58,223,200,128 3212 call $L$key_expansion_128 3213 DB 102,15,58,223,200,27 3214 call $L$key_expansion_128 3215 DB 102,15,58,223,200,54 3216 call $L$key_expansion_128 3217 movups XMMWORD PTR[rax],xmm0 3218 mov DWORD PTR[80+rax],edx 3219 xor eax,eax 3220 jmp $L$enc_key_ret 3221 3222 ALIGN 16 3223 $L$12rounds:: 3224 movq xmm2,QWORD PTR[16+rcx] 3225 mov edx,11 3226 movups XMMWORD PTR[r8],xmm0 3227 DB 102,15,58,223,202,1 3228 call $L$key_expansion_192a_cold 3229 DB 102,15,58,223,202,2 3230 call $L$key_expansion_192b 3231 DB 102,15,58,223,202,4 3232 call $L$key_expansion_192a 3233 DB 102,15,58,223,202,8 3234 call $L$key_expansion_192b 3235 DB 102,15,58,223,202,16 3236 call $L$key_expansion_192a 3237 DB 102,15,58,223,202,32 3238 call $L$key_expansion_192b 3239 DB 102,15,58,223,202,64 3240 call $L$key_expansion_192a 3241 DB 102,15,58,223,202,128 3242 call $L$key_expansion_192b 3243 movups XMMWORD PTR[rax],xmm0 3244 mov DWORD PTR[48+rax],edx 3245 xor rax,rax 3246 jmp $L$enc_key_ret 3247 3248 ALIGN 16 3249 $L$14rounds:: 3250 movups xmm2,XMMWORD PTR[16+rcx] 3251 mov edx,13 3252 lea rax,QWORD PTR[16+rax] 3253 movups XMMWORD PTR[r8],xmm0 3254 movups XMMWORD PTR[16+r8],xmm2 3255 DB 102,15,58,223,202,1 3256 call $L$key_expansion_256a_cold 3257 DB 102,15,58,223,200,1 3258 call $L$key_expansion_256b 3259 DB 102,15,58,223,202,2 3260 call $L$key_expansion_256a 3261 DB 102,15,58,223,200,2 3262 call $L$key_expansion_256b 3263 DB 102,15,58,223,202,4 3264 call $L$key_expansion_256a 3265 DB 102,15,58,223,200,4 3266 call $L$key_expansion_256b 3267 DB 102,15,58,223,202,8 3268 call $L$key_expansion_256a 3269 DB 102,15,58,223,200,8 3270 call $L$key_expansion_256b 3271 DB 102,15,58,223,202,16 3272 call $L$key_expansion_256a 3273 DB 102,15,58,223,200,16 3274 call $L$key_expansion_256b 3275 DB 102,15,58,223,202,32 3276 call $L$key_expansion_256a 3277 DB 102,15,58,223,200,32 3278 call $L$key_expansion_256b 3279 DB 102,15,58,223,202,64 3280 call $L$key_expansion_256a 3281 movups XMMWORD PTR[rax],xmm0 3282 mov DWORD PTR[16+rax],edx 3283 xor rax,rax 3284 jmp $L$enc_key_ret 3285 3286 ALIGN 16 3287 $L$bad_keybits:: 3288 mov rax,-2 3289 $L$enc_key_ret:: 3290 add rsp,8 3291 DB 0F3h,0C3h ;repret 3292 $L$SEH_end_set_encrypt_key:: 3293 3294 ALIGN 16 3295 $L$key_expansion_128:: 3296 movups XMMWORD PTR[rax],xmm0 3297 lea rax,QWORD PTR[16+rax] 3298 $L$key_expansion_128_cold:: 3299 shufps xmm4,xmm0,16 3300 xorps xmm0,xmm4 3301 shufps xmm4,xmm0,140 3302 xorps xmm0,xmm4 3303 shufps xmm1,xmm1,255 3304 xorps xmm0,xmm1 3305 DB 0F3h,0C3h ;repret 3306 3307 ALIGN 16 3308 $L$key_expansion_192a:: 3309 movups XMMWORD PTR[rax],xmm0 3310 lea rax,QWORD PTR[16+rax] 3311 $L$key_expansion_192a_cold:: 3312 movaps xmm5,xmm2 3313 $L$key_expansion_192b_warm:: 3314 shufps xmm4,xmm0,16 3315 movdqa xmm3,xmm2 3316 xorps xmm0,xmm4 3317 shufps xmm4,xmm0,140 3318 pslldq xmm3,4 3319 xorps xmm0,xmm4 3320 pshufd xmm1,xmm1,85 3321 pxor xmm2,xmm3 3322 pxor xmm0,xmm1 3323 pshufd xmm3,xmm0,255 3324 pxor xmm2,xmm3 3325 DB 0F3h,0C3h ;repret 3326 3327 ALIGN 16 3328 $L$key_expansion_192b:: 3329 movaps xmm3,xmm0 3330 shufps xmm5,xmm0,68 3331 movups XMMWORD PTR[rax],xmm5 3332 shufps xmm3,xmm2,78 3333 movups XMMWORD PTR[16+rax],xmm3 3334 lea rax,QWORD PTR[32+rax] 3335 jmp $L$key_expansion_192b_warm 3336 3337 ALIGN 16 3338 $L$key_expansion_256a:: 3339 movups XMMWORD PTR[rax],xmm2 3340 lea rax,QWORD PTR[16+rax] 3341 $L$key_expansion_256a_cold:: 3342 shufps xmm4,xmm0,16 3343 xorps xmm0,xmm4 3344 shufps xmm4,xmm0,140 3345 xorps xmm0,xmm4 3346 shufps xmm1,xmm1,255 3347 xorps xmm0,xmm1 3348 DB 0F3h,0C3h ;repret 3349 3350 ALIGN 16 3351 $L$key_expansion_256b:: 3352 movups XMMWORD PTR[rax],xmm0 3353 lea rax,QWORD PTR[16+rax] 3354 3355 shufps xmm4,xmm2,16 3356 xorps xmm2,xmm4 3357 shufps xmm4,xmm2,140 3358 xorps xmm2,xmm4 3359 shufps xmm1,xmm1,170 3360 xorps xmm2,xmm1 3361 DB 0F3h,0C3h ;repret 3362 aesni_set_encrypt_key ENDP 3363 3364 ALIGN 64 3365 $L$bswap_mask:: 3366 DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 3367 $L$increment32:: 3368 DD 6,6,6,0 3369 $L$increment64:: 3370 DD 1,0,0,0 3371 $L$xts_magic:: 3372 DD 087h,0,1,0 3373 $L$increment1:: 3374 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 3375 3376 DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69 3377 DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83 3378 DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 3379 DB 115,108,46,111,114,103,62,0 3380 ALIGN 64 3381 EXTERN __imp_RtlVirtualUnwind:NEAR 3382 3383 ALIGN 16 3384 ecb_se_handler PROC PRIVATE 3385 push rsi 3386 push rdi 3387 push rbx 3388 push rbp 3389 push r12 3390 push r13 3391 push r14 3392 push r15 3393 pushfq 3394 sub rsp,64 3395 3396 mov rax,QWORD PTR[152+r8] 3397 3398 jmp $L$common_seh_tail 3399 ecb_se_handler ENDP 3400 3401 3402 ALIGN 16 3403 ccm64_se_handler PROC PRIVATE 3404 push rsi 3405 push rdi 3406 push rbx 3407 push rbp 3408 push r12 3409 push r13 3410 push r14 3411 push r15 3412 pushfq 3413 sub rsp,64 3414 3415 mov rax,QWORD PTR[120+r8] 3416 mov rbx,QWORD PTR[248+r8] 3417 3418 mov rsi,QWORD PTR[8+r9] 3419 mov r11,QWORD PTR[56+r9] 3420 3421 mov r10d,DWORD PTR[r11] 3422 lea r10,QWORD PTR[r10*1+rsi] 3423 cmp rbx,r10 3424 jb $L$common_seh_tail 3425 3426 mov rax,QWORD PTR[152+r8] 3427 3428 mov r10d,DWORD PTR[4+r11] 3429 lea r10,QWORD PTR[r10*1+rsi] 3430 cmp rbx,r10 3431 jae $L$common_seh_tail 3432 3433 lea rsi,QWORD PTR[rax] 3434 lea rdi,QWORD PTR[512+r8] 3435 mov ecx,8 3436 DD 0a548f3fch 3437 lea rax,QWORD PTR[88+rax] 3438 3439 jmp $L$common_seh_tail 3440 ccm64_se_handler ENDP 3441 3442 3443 ALIGN 16 3444 ctr_xts_se_handler PROC PRIVATE 3445 push rsi 3446 push rdi 3447 push rbx 3448 push rbp 3449 push r12 3450 push r13 3451 push r14 3452 push r15 3453 pushfq 3454 sub rsp,64 3455 3456 mov rax,QWORD PTR[120+r8] 3457 mov rbx,QWORD PTR[248+r8] 3458 3459 mov rsi,QWORD PTR[8+r9] 3460 mov r11,QWORD PTR[56+r9] 3461 3462 mov r10d,DWORD PTR[r11] 3463 lea r10,QWORD PTR[r10*1+rsi] 3464 cmp rbx,r10 3465 jb $L$common_seh_tail 3466 3467 mov rax,QWORD PTR[152+r8] 3468 3469 mov r10d,DWORD PTR[4+r11] 3470 lea r10,QWORD PTR[r10*1+rsi] 3471 cmp rbx,r10 3472 jae $L$common_seh_tail 3473 3474 mov rax,QWORD PTR[160+r8] 3475 lea rsi,QWORD PTR[((-160))+rax] 3476 lea rdi,QWORD PTR[512+r8] 3477 mov ecx,20 3478 DD 0a548f3fch 3479 3480 jmp $L$common_rbp_tail 3481 ctr_xts_se_handler ENDP 3482 3483 ALIGN 16 3484 cbc_se_handler PROC PRIVATE 3485 push rsi 3486 push rdi 3487 push rbx 3488 push rbp 3489 push r12 3490 push r13 3491 push r14 3492 push r15 3493 pushfq 3494 sub rsp,64 3495 3496 mov rax,QWORD PTR[152+r8] 3497 mov rbx,QWORD PTR[248+r8] 3498 3499 lea r10,QWORD PTR[$L$cbc_decrypt] 3500 cmp rbx,r10 3501 jb $L$common_seh_tail 3502 3503 lea r10,QWORD PTR[$L$cbc_decrypt_body] 3504 cmp rbx,r10 3505 jb $L$restore_cbc_rax 3506 3507 lea r10,QWORD PTR[$L$cbc_ret] 3508 cmp rbx,r10 3509 jae $L$common_seh_tail 3510 3511 lea rsi,QWORD PTR[16+rax] 3512 lea rdi,QWORD PTR[512+r8] 3513 mov ecx,20 3514 DD 0a548f3fch 3515 3516 $L$common_rbp_tail:: 3517 mov rax,QWORD PTR[160+r8] 3518 mov rbp,QWORD PTR[rax] 3519 lea rax,QWORD PTR[8+rax] 3520 mov QWORD PTR[160+r8],rbp 3521 jmp $L$common_seh_tail 3522 3523 $L$restore_cbc_rax:: 3524 mov rax,QWORD PTR[120+r8] 3525 3526 $L$common_seh_tail:: 3527 mov rdi,QWORD PTR[8+rax] 3528 mov rsi,QWORD PTR[16+rax] 3529 mov QWORD PTR[152+r8],rax 3530 mov QWORD PTR[168+r8],rsi 3531 mov QWORD PTR[176+r8],rdi 3532 3533 mov rdi,QWORD PTR[40+r9] 3534 mov rsi,r8 3535 mov ecx,154 3536 DD 0a548f3fch 3537 3538 mov rsi,r9 3539 xor rcx,rcx 3540 mov rdx,QWORD PTR[8+rsi] 3541 mov r8,QWORD PTR[rsi] 3542 mov r9,QWORD PTR[16+rsi] 3543 mov r10,QWORD PTR[40+rsi] 3544 lea r11,QWORD PTR[56+rsi] 3545 lea r12,QWORD PTR[24+rsi] 3546 mov QWORD PTR[32+rsp],r10 3547 mov QWORD PTR[40+rsp],r11 3548 mov QWORD PTR[48+rsp],r12 3549 mov QWORD PTR[56+rsp],rcx 3550 call QWORD PTR[__imp_RtlVirtualUnwind] 3551 3552 mov eax,1 3553 add rsp,64 3554 popfq 3555 pop r15 3556 pop r14 3557 pop r13 3558 pop r12 3559 pop rbp 3560 pop rbx 3561 pop rdi 3562 pop rsi 3563 DB 0F3h,0C3h ;repret 3564 cbc_se_handler ENDP 3565 3566 .text$ ENDS 3567 .pdata SEGMENT READONLY ALIGN(4) 3568 ALIGN 4 3569 DD imagerel $L$SEH_begin_aesni_ecb_encrypt 3570 DD imagerel $L$SEH_end_aesni_ecb_encrypt 3571 DD imagerel $L$SEH_info_ecb 3572 3573 DD imagerel $L$SEH_begin_aesni_ccm64_encrypt_blocks 3574 DD imagerel $L$SEH_end_aesni_ccm64_encrypt_blocks 3575 DD imagerel $L$SEH_info_ccm64_enc 3576 3577 DD imagerel $L$SEH_begin_aesni_ccm64_decrypt_blocks 3578 DD imagerel $L$SEH_end_aesni_ccm64_decrypt_blocks 3579 DD imagerel $L$SEH_info_ccm64_dec 3580 3581 DD imagerel $L$SEH_begin_aesni_ctr32_encrypt_blocks 3582 DD imagerel $L$SEH_end_aesni_ctr32_encrypt_blocks 3583 DD imagerel $L$SEH_info_ctr32 3584 3585 DD imagerel $L$SEH_begin_aesni_xts_encrypt 3586 DD imagerel $L$SEH_end_aesni_xts_encrypt 3587 DD imagerel $L$SEH_info_xts_enc 3588 3589 DD imagerel $L$SEH_begin_aesni_xts_decrypt 3590 DD imagerel $L$SEH_end_aesni_xts_decrypt 3591 DD imagerel $L$SEH_info_xts_dec 3592 DD imagerel $L$SEH_begin_aesni_cbc_encrypt 3593 DD imagerel $L$SEH_end_aesni_cbc_encrypt 3594 DD imagerel $L$SEH_info_cbc 3595 3596 DD imagerel aesni_set_decrypt_key 3597 DD imagerel $L$SEH_end_set_decrypt_key 3598 DD imagerel $L$SEH_info_key 3599 3600 DD imagerel aesni_set_encrypt_key 3601 DD imagerel $L$SEH_end_set_encrypt_key 3602 DD imagerel $L$SEH_info_key 3603 .pdata ENDS 3604 .xdata SEGMENT READONLY ALIGN(8) 3605 ALIGN 8 3606 $L$SEH_info_ecb:: 3607 DB 9,0,0,0 3608 DD imagerel ecb_se_handler 3609 $L$SEH_info_ccm64_enc:: 3610 DB 9,0,0,0 3611 DD imagerel ccm64_se_handler 3612 DD imagerel $L$ccm64_enc_body,imagerel $L$ccm64_enc_ret 3613 $L$SEH_info_ccm64_dec:: 3614 DB 9,0,0,0 3615 DD imagerel ccm64_se_handler 3616 DD imagerel $L$ccm64_dec_body,imagerel $L$ccm64_dec_ret 3617 $L$SEH_info_ctr32:: 3618 DB 9,0,0,0 3619 DD imagerel ctr_xts_se_handler 3620 DD imagerel $L$ctr32_body,imagerel $L$ctr32_epilogue 3621 $L$SEH_info_xts_enc:: 3622 DB 9,0,0,0 3623 DD imagerel ctr_xts_se_handler 3624 DD imagerel $L$xts_enc_body,imagerel $L$xts_enc_epilogue 3625 $L$SEH_info_xts_dec:: 3626 DB 9,0,0,0 3627 DD imagerel ctr_xts_se_handler 3628 DD imagerel $L$xts_dec_body,imagerel $L$xts_dec_epilogue 3629 $L$SEH_info_cbc:: 3630 DB 9,0,0,0 3631 DD imagerel cbc_se_handler 3632 $L$SEH_info_key:: 3633 DB 001h,004h,001h,000h 3634 DB 004h,002h,000h,000h 3635 3636 .xdata ENDS 3637 END 3638