1#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM) 2.data 3 4.p2align 4 5one: 6.quad 1,0 7two: 8.quad 2,0 9three: 10.quad 3,0 11four: 12.quad 4,0 13five: 14.quad 5,0 15six: 16.quad 6,0 17seven: 18.quad 7,0 19eight: 20.quad 8,0 21 22OR_MASK: 23.long 0x00000000,0x00000000,0x00000000,0x80000000 24poly: 25.quad 0x1, 0xc200000000000000 26mask: 27.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d 28con1: 29.long 1,1,1,1 30con2: 31.long 0x1b,0x1b,0x1b,0x1b 32con3: 33.byte -1,-1,-1,-1,-1,-1,-1,-1,4,5,6,7,4,5,6,7 34and_mask: 35.long 0,0xffffffff, 0xffffffff, 0xffffffff 36.text 37 38.p2align 4 39GFMUL: 40 41 vpclmulqdq $0x00,%xmm1,%xmm0,%xmm2 42 vpclmulqdq $0x11,%xmm1,%xmm0,%xmm5 43 vpclmulqdq $0x10,%xmm1,%xmm0,%xmm3 44 vpclmulqdq $0x01,%xmm1,%xmm0,%xmm4 45 vpxor %xmm4,%xmm3,%xmm3 46 vpslldq $8,%xmm3,%xmm4 47 vpsrldq $8,%xmm3,%xmm3 48 vpxor %xmm4,%xmm2,%xmm2 49 vpxor %xmm3,%xmm5,%xmm5 50 51 vpclmulqdq $0x10,poly(%rip),%xmm2,%xmm3 52 vpshufd $78,%xmm2,%xmm4 53 vpxor %xmm4,%xmm3,%xmm2 54 55 vpclmulqdq $0x10,poly(%rip),%xmm2,%xmm3 56 vpshufd $78,%xmm2,%xmm4 57 vpxor %xmm4,%xmm3,%xmm2 58 59 vpxor %xmm5,%xmm2,%xmm0 60 .byte 0xf3,0xc3 61 62 63.globl _aesgcmsiv_htable_init 64.private_extern _aesgcmsiv_htable_init 65 66.p2align 4 67_aesgcmsiv_htable_init: 68 69 vmovdqa (%rsi),%xmm0 70 vmovdqa %xmm0,%xmm1 71 vmovdqa %xmm0,(%rdi) 72 call GFMUL 73 vmovdqa %xmm0,16(%rdi) 74 call GFMUL 75 vmovdqa %xmm0,32(%rdi) 76 call GFMUL 77 vmovdqa %xmm0,48(%rdi) 78 call GFMUL 79 vmovdqa %xmm0,64(%rdi) 80 call GFMUL 81 vmovdqa %xmm0,80(%rdi) 82 call GFMUL 83 vmovdqa %xmm0,96(%rdi) 84 call GFMUL 85 vmovdqa %xmm0,112(%rdi) 86 .byte 0xf3,0xc3 87 88 89.globl _aesgcmsiv_htable6_init 90.private_extern _aesgcmsiv_htable6_init 91 92.p2align 4 93_aesgcmsiv_htable6_init: 94 95 vmovdqa (%rsi),%xmm0 96 vmovdqa %xmm0,%xmm1 97 vmovdqa %xmm0,(%rdi) 98 call GFMUL 99 vmovdqa %xmm0,16(%rdi) 100 call GFMUL 101 vmovdqa %xmm0,32(%rdi) 102 call GFMUL 103 vmovdqa %xmm0,48(%rdi) 104 call GFMUL 105 vmovdqa %xmm0,64(%rdi) 106 call GFMUL 107 vmovdqa %xmm0,80(%rdi) 108 .byte 0xf3,0xc3 109 110 111.globl _aesgcmsiv_htable_polyval 112.private_extern _aesgcmsiv_htable_polyval 113 114.p2align 4 115_aesgcmsiv_htable_polyval: 116 117 testq %rdx,%rdx 118 jnz L$htable_polyval_start 119 .byte 0xf3,0xc3 120 121L$htable_polyval_start: 122 vzeroall 123 124 125 126 movq %rdx,%r11 127 andq $127,%r11 128 129 jz L$htable_polyval_no_prefix 130 131 vpxor %xmm9,%xmm9,%xmm9 132 vmovdqa (%rcx),%xmm1 133 subq %r11,%rdx 134 135 subq $16,%r11 136 137 138 vmovdqu (%rsi),%xmm0 139 vpxor %xmm1,%xmm0,%xmm0 140 141 vpclmulqdq $0x01,(%rdi,%r11,1),%xmm0,%xmm5 142 vpclmulqdq $0x00,(%rdi,%r11,1),%xmm0,%xmm3 143 vpclmulqdq $0x11,(%rdi,%r11,1),%xmm0,%xmm4 144 vpclmulqdq $0x10,(%rdi,%r11,1),%xmm0,%xmm6 145 vpxor %xmm6,%xmm5,%xmm5 146 147 leaq 16(%rsi),%rsi 148 testq %r11,%r11 149 jnz L$htable_polyval_prefix_loop 150 jmp L$htable_polyval_prefix_complete 151 152 153.p2align 6 154L$htable_polyval_prefix_loop: 155 subq $16,%r11 156 157 vmovdqu (%rsi),%xmm0 158 159 vpclmulqdq $0x00,(%rdi,%r11,1),%xmm0,%xmm6 160 vpxor %xmm6,%xmm3,%xmm3 161 vpclmulqdq $0x11,(%rdi,%r11,1),%xmm0,%xmm6 162 vpxor %xmm6,%xmm4,%xmm4 163 vpclmulqdq $0x01,(%rdi,%r11,1),%xmm0,%xmm6 164 vpxor %xmm6,%xmm5,%xmm5 165 vpclmulqdq $0x10,(%rdi,%r11,1),%xmm0,%xmm6 166 vpxor %xmm6,%xmm5,%xmm5 167 168 testq %r11,%r11 169 170 leaq 16(%rsi),%rsi 171 172 jnz L$htable_polyval_prefix_loop 173 174L$htable_polyval_prefix_complete: 175 vpsrldq $8,%xmm5,%xmm6 176 vpslldq $8,%xmm5,%xmm5 177 178 vpxor %xmm6,%xmm4,%xmm9 179 vpxor %xmm5,%xmm3,%xmm1 180 181 jmp L$htable_polyval_main_loop 182 183L$htable_polyval_no_prefix: 184 185 186 187 188 vpxor %xmm1,%xmm1,%xmm1 189 vmovdqa (%rcx),%xmm9 190 191.p2align 6 192L$htable_polyval_main_loop: 193 subq $0x80,%rdx 194 jb L$htable_polyval_out 195 196 vmovdqu 112(%rsi),%xmm0 197 198 vpclmulqdq $0x01,(%rdi),%xmm0,%xmm5 199 vpclmulqdq $0x00,(%rdi),%xmm0,%xmm3 200 vpclmulqdq $0x11,(%rdi),%xmm0,%xmm4 201 vpclmulqdq $0x10,(%rdi),%xmm0,%xmm6 202 vpxor %xmm6,%xmm5,%xmm5 203 204 205 vmovdqu 96(%rsi),%xmm0 206 vpclmulqdq $0x01,16(%rdi),%xmm0,%xmm6 207 vpxor %xmm6,%xmm5,%xmm5 208 vpclmulqdq $0x00,16(%rdi),%xmm0,%xmm6 209 vpxor %xmm6,%xmm3,%xmm3 210 vpclmulqdq $0x11,16(%rdi),%xmm0,%xmm6 211 vpxor %xmm6,%xmm4,%xmm4 212 vpclmulqdq $0x10,16(%rdi),%xmm0,%xmm6 213 vpxor %xmm6,%xmm5,%xmm5 214 215 216 217 vmovdqu 80(%rsi),%xmm0 218 219 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm7 220 vpalignr $8,%xmm1,%xmm1,%xmm1 221 222 vpclmulqdq $0x01,32(%rdi),%xmm0,%xmm6 223 vpxor %xmm6,%xmm5,%xmm5 224 vpclmulqdq $0x00,32(%rdi),%xmm0,%xmm6 225 vpxor %xmm6,%xmm3,%xmm3 226 vpclmulqdq $0x11,32(%rdi),%xmm0,%xmm6 227 vpxor %xmm6,%xmm4,%xmm4 228 vpclmulqdq $0x10,32(%rdi),%xmm0,%xmm6 229 vpxor %xmm6,%xmm5,%xmm5 230 231 232 vpxor %xmm7,%xmm1,%xmm1 233 234 vmovdqu 64(%rsi),%xmm0 235 236 vpclmulqdq $0x01,48(%rdi),%xmm0,%xmm6 237 vpxor %xmm6,%xmm5,%xmm5 238 vpclmulqdq $0x00,48(%rdi),%xmm0,%xmm6 239 vpxor %xmm6,%xmm3,%xmm3 240 vpclmulqdq $0x11,48(%rdi),%xmm0,%xmm6 241 vpxor %xmm6,%xmm4,%xmm4 242 vpclmulqdq $0x10,48(%rdi),%xmm0,%xmm6 243 vpxor %xmm6,%xmm5,%xmm5 244 245 246 vmovdqu 48(%rsi),%xmm0 247 248 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm7 249 vpalignr $8,%xmm1,%xmm1,%xmm1 250 251 vpclmulqdq $0x01,64(%rdi),%xmm0,%xmm6 252 vpxor %xmm6,%xmm5,%xmm5 253 vpclmulqdq $0x00,64(%rdi),%xmm0,%xmm6 254 vpxor %xmm6,%xmm3,%xmm3 255 vpclmulqdq $0x11,64(%rdi),%xmm0,%xmm6 256 vpxor %xmm6,%xmm4,%xmm4 257 vpclmulqdq $0x10,64(%rdi),%xmm0,%xmm6 258 vpxor %xmm6,%xmm5,%xmm5 259 260 261 vpxor %xmm7,%xmm1,%xmm1 262 263 vmovdqu 32(%rsi),%xmm0 264 265 vpclmulqdq $0x01,80(%rdi),%xmm0,%xmm6 266 vpxor %xmm6,%xmm5,%xmm5 267 vpclmulqdq $0x00,80(%rdi),%xmm0,%xmm6 268 vpxor %xmm6,%xmm3,%xmm3 269 vpclmulqdq $0x11,80(%rdi),%xmm0,%xmm6 270 vpxor %xmm6,%xmm4,%xmm4 271 vpclmulqdq $0x10,80(%rdi),%xmm0,%xmm6 272 vpxor %xmm6,%xmm5,%xmm5 273 274 275 vpxor %xmm9,%xmm1,%xmm1 276 277 vmovdqu 16(%rsi),%xmm0 278 279 vpclmulqdq $0x01,96(%rdi),%xmm0,%xmm6 280 vpxor %xmm6,%xmm5,%xmm5 281 vpclmulqdq $0x00,96(%rdi),%xmm0,%xmm6 282 vpxor %xmm6,%xmm3,%xmm3 283 vpclmulqdq $0x11,96(%rdi),%xmm0,%xmm6 284 vpxor %xmm6,%xmm4,%xmm4 285 vpclmulqdq $0x10,96(%rdi),%xmm0,%xmm6 286 vpxor %xmm6,%xmm5,%xmm5 287 288 289 vmovdqu 0(%rsi),%xmm0 290 vpxor %xmm1,%xmm0,%xmm0 291 292 vpclmulqdq $0x01,112(%rdi),%xmm0,%xmm6 293 vpxor %xmm6,%xmm5,%xmm5 294 vpclmulqdq $0x00,112(%rdi),%xmm0,%xmm6 295 vpxor %xmm6,%xmm3,%xmm3 296 vpclmulqdq $0x11,112(%rdi),%xmm0,%xmm6 297 vpxor %xmm6,%xmm4,%xmm4 298 vpclmulqdq $0x10,112(%rdi),%xmm0,%xmm6 299 vpxor %xmm6,%xmm5,%xmm5 300 301 302 vpsrldq $8,%xmm5,%xmm6 303 vpslldq $8,%xmm5,%xmm5 304 305 vpxor %xmm6,%xmm4,%xmm9 306 vpxor %xmm5,%xmm3,%xmm1 307 308 leaq 128(%rsi),%rsi 309 jmp L$htable_polyval_main_loop 310 311 312 313L$htable_polyval_out: 314 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm6 315 vpalignr $8,%xmm1,%xmm1,%xmm1 316 vpxor %xmm6,%xmm1,%xmm1 317 318 vpclmulqdq $0x10,poly(%rip),%xmm1,%xmm6 319 vpalignr $8,%xmm1,%xmm1,%xmm1 320 vpxor %xmm6,%xmm1,%xmm1 321 vpxor %xmm9,%xmm1,%xmm1 322 323 vmovdqu %xmm1,(%rcx) 324 vzeroupper 325 .byte 0xf3,0xc3 326 327 328.globl _aesgcmsiv_polyval_horner 329.private_extern _aesgcmsiv_polyval_horner 330 331.p2align 4 332_aesgcmsiv_polyval_horner: 333 334 testq %rcx,%rcx 335 jnz L$polyval_horner_start 336 .byte 0xf3,0xc3 337 338L$polyval_horner_start: 339 340 341 342 xorq %r10,%r10 343 shlq $4,%rcx 344 345 vmovdqa (%rsi),%xmm1 346 vmovdqa (%rdi),%xmm0 347 348L$polyval_horner_loop: 349 vpxor (%rdx,%r10,1),%xmm0,%xmm0 350 call GFMUL 351 352 addq $16,%r10 353 cmpq %r10,%rcx 354 jne L$polyval_horner_loop 355 356 357 vmovdqa %xmm0,(%rdi) 358 .byte 0xf3,0xc3 359 360 361.globl _aes128gcmsiv_aes_ks 362.private_extern _aes128gcmsiv_aes_ks 363 364.p2align 4 365_aes128gcmsiv_aes_ks: 366 367 vmovdqu (%rdi),%xmm1 368 vmovdqa %xmm1,(%rsi) 369 370 vmovdqa con1(%rip),%xmm0 371 vmovdqa mask(%rip),%xmm15 372 373 movq $8,%rax 374 375L$ks128_loop: 376 addq $16,%rsi 377 subq $1,%rax 378 vpshufb %xmm15,%xmm1,%xmm2 379 vaesenclast %xmm0,%xmm2,%xmm2 380 vpslld $1,%xmm0,%xmm0 381 vpslldq $4,%xmm1,%xmm3 382 vpxor %xmm3,%xmm1,%xmm1 383 vpslldq $4,%xmm3,%xmm3 384 vpxor %xmm3,%xmm1,%xmm1 385 vpslldq $4,%xmm3,%xmm3 386 vpxor %xmm3,%xmm1,%xmm1 387 vpxor %xmm2,%xmm1,%xmm1 388 vmovdqa %xmm1,(%rsi) 389 jne L$ks128_loop 390 391 vmovdqa con2(%rip),%xmm0 392 vpshufb %xmm15,%xmm1,%xmm2 393 vaesenclast %xmm0,%xmm2,%xmm2 394 vpslld $1,%xmm0,%xmm0 395 vpslldq $4,%xmm1,%xmm3 396 vpxor %xmm3,%xmm1,%xmm1 397 vpslldq $4,%xmm3,%xmm3 398 vpxor %xmm3,%xmm1,%xmm1 399 vpslldq $4,%xmm3,%xmm3 400 vpxor %xmm3,%xmm1,%xmm1 401 vpxor %xmm2,%xmm1,%xmm1 402 vmovdqa %xmm1,16(%rsi) 403 404 vpshufb %xmm15,%xmm1,%xmm2 405 vaesenclast %xmm0,%xmm2,%xmm2 406 vpslldq $4,%xmm1,%xmm3 407 vpxor %xmm3,%xmm1,%xmm1 408 vpslldq $4,%xmm3,%xmm3 409 vpxor %xmm3,%xmm1,%xmm1 410 vpslldq $4,%xmm3,%xmm3 411 vpxor %xmm3,%xmm1,%xmm1 412 vpxor %xmm2,%xmm1,%xmm1 413 vmovdqa %xmm1,32(%rsi) 414 .byte 0xf3,0xc3 415 416 417.globl _aes256gcmsiv_aes_ks 418.private_extern _aes256gcmsiv_aes_ks 419 420.p2align 4 421_aes256gcmsiv_aes_ks: 422 423 vmovdqu (%rdi),%xmm1 424 vmovdqu 16(%rdi),%xmm3 425 vmovdqa %xmm1,(%rsi) 426 vmovdqa %xmm3,16(%rsi) 427 vmovdqa con1(%rip),%xmm0 428 vmovdqa mask(%rip),%xmm15 429 vpxor %xmm14,%xmm14,%xmm14 430 movq $6,%rax 431 432L$ks256_loop: 433 addq $32,%rsi 434 subq $1,%rax 435 vpshufb %xmm15,%xmm3,%xmm2 436 vaesenclast %xmm0,%xmm2,%xmm2 437 vpslld $1,%xmm0,%xmm0 438 vpsllq $32,%xmm1,%xmm4 439 vpxor %xmm4,%xmm1,%xmm1 440 vpshufb con3(%rip),%xmm1,%xmm4 441 vpxor %xmm4,%xmm1,%xmm1 442 vpxor %xmm2,%xmm1,%xmm1 443 vmovdqa %xmm1,(%rsi) 444 vpshufd $0xff,%xmm1,%xmm2 445 vaesenclast %xmm14,%xmm2,%xmm2 446 vpsllq $32,%xmm3,%xmm4 447 vpxor %xmm4,%xmm3,%xmm3 448 vpshufb con3(%rip),%xmm3,%xmm4 449 vpxor %xmm4,%xmm3,%xmm3 450 vpxor %xmm2,%xmm3,%xmm3 451 vmovdqa %xmm3,16(%rsi) 452 jne L$ks256_loop 453 454 vpshufb %xmm15,%xmm3,%xmm2 455 vaesenclast %xmm0,%xmm2,%xmm2 456 vpsllq $32,%xmm1,%xmm4 457 vpxor %xmm4,%xmm1,%xmm1 458 vpshufb con3(%rip),%xmm1,%xmm4 459 vpxor %xmm4,%xmm1,%xmm1 460 vpxor %xmm2,%xmm1,%xmm1 461 vmovdqa %xmm1,32(%rsi) 462 .byte 0xf3,0xc3 463 464.globl _aes128gcmsiv_aes_ks_enc_x1 465.private_extern _aes128gcmsiv_aes_ks_enc_x1 466 467.p2align 4 468_aes128gcmsiv_aes_ks_enc_x1: 469 470 vmovdqa (%rcx),%xmm1 471 vmovdqa 0(%rdi),%xmm4 472 473 vmovdqa %xmm1,(%rdx) 474 vpxor %xmm1,%xmm4,%xmm4 475 476 vmovdqa con1(%rip),%xmm0 477 vmovdqa mask(%rip),%xmm15 478 479 vpshufb %xmm15,%xmm1,%xmm2 480 vaesenclast %xmm0,%xmm2,%xmm2 481 vpslld $1,%xmm0,%xmm0 482 vpsllq $32,%xmm1,%xmm3 483 vpxor %xmm3,%xmm1,%xmm1 484 vpshufb con3(%rip),%xmm1,%xmm3 485 vpxor %xmm3,%xmm1,%xmm1 486 vpxor %xmm2,%xmm1,%xmm1 487 488 vaesenc %xmm1,%xmm4,%xmm4 489 vmovdqa %xmm1,16(%rdx) 490 491 vpshufb %xmm15,%xmm1,%xmm2 492 vaesenclast %xmm0,%xmm2,%xmm2 493 vpslld $1,%xmm0,%xmm0 494 vpsllq $32,%xmm1,%xmm3 495 vpxor %xmm3,%xmm1,%xmm1 496 vpshufb con3(%rip),%xmm1,%xmm3 497 vpxor %xmm3,%xmm1,%xmm1 498 vpxor %xmm2,%xmm1,%xmm1 499 500 vaesenc %xmm1,%xmm4,%xmm4 501 vmovdqa %xmm1,32(%rdx) 502 503 vpshufb %xmm15,%xmm1,%xmm2 504 vaesenclast %xmm0,%xmm2,%xmm2 505 vpslld $1,%xmm0,%xmm0 506 vpsllq $32,%xmm1,%xmm3 507 vpxor %xmm3,%xmm1,%xmm1 508 vpshufb con3(%rip),%xmm1,%xmm3 509 vpxor %xmm3,%xmm1,%xmm1 510 vpxor %xmm2,%xmm1,%xmm1 511 512 vaesenc %xmm1,%xmm4,%xmm4 513 vmovdqa %xmm1,48(%rdx) 514 515 vpshufb %xmm15,%xmm1,%xmm2 516 vaesenclast %xmm0,%xmm2,%xmm2 517 vpslld $1,%xmm0,%xmm0 518 vpsllq $32,%xmm1,%xmm3 519 vpxor %xmm3,%xmm1,%xmm1 520 vpshufb con3(%rip),%xmm1,%xmm3 521 vpxor %xmm3,%xmm1,%xmm1 522 vpxor %xmm2,%xmm1,%xmm1 523 524 vaesenc %xmm1,%xmm4,%xmm4 525 vmovdqa %xmm1,64(%rdx) 526 527 vpshufb %xmm15,%xmm1,%xmm2 528 vaesenclast %xmm0,%xmm2,%xmm2 529 vpslld $1,%xmm0,%xmm0 530 vpsllq $32,%xmm1,%xmm3 531 vpxor %xmm3,%xmm1,%xmm1 532 vpshufb con3(%rip),%xmm1,%xmm3 533 vpxor %xmm3,%xmm1,%xmm1 534 vpxor %xmm2,%xmm1,%xmm1 535 536 vaesenc %xmm1,%xmm4,%xmm4 537 vmovdqa %xmm1,80(%rdx) 538 539 vpshufb %xmm15,%xmm1,%xmm2 540 vaesenclast %xmm0,%xmm2,%xmm2 541 vpslld $1,%xmm0,%xmm0 542 vpsllq $32,%xmm1,%xmm3 543 vpxor %xmm3,%xmm1,%xmm1 544 vpshufb con3(%rip),%xmm1,%xmm3 545 vpxor %xmm3,%xmm1,%xmm1 546 vpxor %xmm2,%xmm1,%xmm1 547 548 vaesenc %xmm1,%xmm4,%xmm4 549 vmovdqa %xmm1,96(%rdx) 550 551 vpshufb %xmm15,%xmm1,%xmm2 552 vaesenclast %xmm0,%xmm2,%xmm2 553 vpslld $1,%xmm0,%xmm0 554 vpsllq $32,%xmm1,%xmm3 555 vpxor %xmm3,%xmm1,%xmm1 556 vpshufb con3(%rip),%xmm1,%xmm3 557 vpxor %xmm3,%xmm1,%xmm1 558 vpxor %xmm2,%xmm1,%xmm1 559 560 vaesenc %xmm1,%xmm4,%xmm4 561 vmovdqa %xmm1,112(%rdx) 562 563 vpshufb %xmm15,%xmm1,%xmm2 564 vaesenclast %xmm0,%xmm2,%xmm2 565 vpslld $1,%xmm0,%xmm0 566 vpsllq $32,%xmm1,%xmm3 567 vpxor %xmm3,%xmm1,%xmm1 568 vpshufb con3(%rip),%xmm1,%xmm3 569 vpxor %xmm3,%xmm1,%xmm1 570 vpxor %xmm2,%xmm1,%xmm1 571 572 vaesenc %xmm1,%xmm4,%xmm4 573 vmovdqa %xmm1,128(%rdx) 574 575 576 vmovdqa con2(%rip),%xmm0 577 578 vpshufb %xmm15,%xmm1,%xmm2 579 vaesenclast %xmm0,%xmm2,%xmm2 580 vpslld $1,%xmm0,%xmm0 581 vpsllq $32,%xmm1,%xmm3 582 vpxor %xmm3,%xmm1,%xmm1 583 vpshufb con3(%rip),%xmm1,%xmm3 584 vpxor %xmm3,%xmm1,%xmm1 585 vpxor %xmm2,%xmm1,%xmm1 586 587 vaesenc %xmm1,%xmm4,%xmm4 588 vmovdqa %xmm1,144(%rdx) 589 590 vpshufb %xmm15,%xmm1,%xmm2 591 vaesenclast %xmm0,%xmm2,%xmm2 592 vpsllq $32,%xmm1,%xmm3 593 vpxor %xmm3,%xmm1,%xmm1 594 vpshufb con3(%rip),%xmm1,%xmm3 595 vpxor %xmm3,%xmm1,%xmm1 596 vpxor %xmm2,%xmm1,%xmm1 597 598 vaesenclast %xmm1,%xmm4,%xmm4 599 vmovdqa %xmm1,160(%rdx) 600 601 602 vmovdqa %xmm4,0(%rsi) 603 .byte 0xf3,0xc3 604 605 606.globl _aes128gcmsiv_kdf 607.private_extern _aes128gcmsiv_kdf 608 609.p2align 4 610_aes128gcmsiv_kdf: 611 612 613 614 615 616 vmovdqa (%rdx),%xmm1 617 vmovdqa 0(%rdi),%xmm9 618 vmovdqa and_mask(%rip),%xmm12 619 vmovdqa one(%rip),%xmm13 620 vpshufd $0x90,%xmm9,%xmm9 621 vpand %xmm12,%xmm9,%xmm9 622 vpaddd %xmm13,%xmm9,%xmm10 623 vpaddd %xmm13,%xmm10,%xmm11 624 vpaddd %xmm13,%xmm11,%xmm12 625 626 vpxor %xmm1,%xmm9,%xmm9 627 vpxor %xmm1,%xmm10,%xmm10 628 vpxor %xmm1,%xmm11,%xmm11 629 vpxor %xmm1,%xmm12,%xmm12 630 631 vmovdqa 16(%rdx),%xmm1 632 vaesenc %xmm1,%xmm9,%xmm9 633 vaesenc %xmm1,%xmm10,%xmm10 634 vaesenc %xmm1,%xmm11,%xmm11 635 vaesenc %xmm1,%xmm12,%xmm12 636 637 vmovdqa 32(%rdx),%xmm2 638 vaesenc %xmm2,%xmm9,%xmm9 639 vaesenc %xmm2,%xmm10,%xmm10 640 vaesenc %xmm2,%xmm11,%xmm11 641 vaesenc %xmm2,%xmm12,%xmm12 642 643 vmovdqa 48(%rdx),%xmm1 644 vaesenc %xmm1,%xmm9,%xmm9 645 vaesenc %xmm1,%xmm10,%xmm10 646 vaesenc %xmm1,%xmm11,%xmm11 647 vaesenc %xmm1,%xmm12,%xmm12 648 649 vmovdqa 64(%rdx),%xmm2 650 vaesenc %xmm2,%xmm9,%xmm9 651 vaesenc %xmm2,%xmm10,%xmm10 652 vaesenc %xmm2,%xmm11,%xmm11 653 vaesenc %xmm2,%xmm12,%xmm12 654 655 vmovdqa 80(%rdx),%xmm1 656 vaesenc %xmm1,%xmm9,%xmm9 657 vaesenc %xmm1,%xmm10,%xmm10 658 vaesenc %xmm1,%xmm11,%xmm11 659 vaesenc %xmm1,%xmm12,%xmm12 660 661 vmovdqa 96(%rdx),%xmm2 662 vaesenc %xmm2,%xmm9,%xmm9 663 vaesenc %xmm2,%xmm10,%xmm10 664 vaesenc %xmm2,%xmm11,%xmm11 665 vaesenc %xmm2,%xmm12,%xmm12 666 667 vmovdqa 112(%rdx),%xmm1 668 vaesenc %xmm1,%xmm9,%xmm9 669 vaesenc %xmm1,%xmm10,%xmm10 670 vaesenc %xmm1,%xmm11,%xmm11 671 vaesenc %xmm1,%xmm12,%xmm12 672 673 vmovdqa 128(%rdx),%xmm2 674 vaesenc %xmm2,%xmm9,%xmm9 675 vaesenc %xmm2,%xmm10,%xmm10 676 vaesenc %xmm2,%xmm11,%xmm11 677 vaesenc %xmm2,%xmm12,%xmm12 678 679 vmovdqa 144(%rdx),%xmm1 680 vaesenc %xmm1,%xmm9,%xmm9 681 vaesenc %xmm1,%xmm10,%xmm10 682 vaesenc %xmm1,%xmm11,%xmm11 683 vaesenc %xmm1,%xmm12,%xmm12 684 685 vmovdqa 160(%rdx),%xmm2 686 vaesenclast %xmm2,%xmm9,%xmm9 687 vaesenclast %xmm2,%xmm10,%xmm10 688 vaesenclast %xmm2,%xmm11,%xmm11 689 vaesenclast %xmm2,%xmm12,%xmm12 690 691 692 vmovdqa %xmm9,0(%rsi) 693 vmovdqa %xmm10,16(%rsi) 694 vmovdqa %xmm11,32(%rsi) 695 vmovdqa %xmm12,48(%rsi) 696 .byte 0xf3,0xc3 697 698 699.globl _aes128gcmsiv_enc_msg_x4 700.private_extern _aes128gcmsiv_enc_msg_x4 701 702.p2align 4 703_aes128gcmsiv_enc_msg_x4: 704 705 testq %r8,%r8 706 jnz L$128_enc_msg_x4_start 707 .byte 0xf3,0xc3 708 709L$128_enc_msg_x4_start: 710 pushq %r12 711 712 pushq %r13 713 714 715 shrq $4,%r8 716 movq %r8,%r10 717 shlq $62,%r10 718 shrq $62,%r10 719 720 721 vmovdqa (%rdx),%xmm15 722 vpor OR_MASK(%rip),%xmm15,%xmm15 723 724 vmovdqu four(%rip),%xmm4 725 vmovdqa %xmm15,%xmm0 726 vpaddd one(%rip),%xmm15,%xmm1 727 vpaddd two(%rip),%xmm15,%xmm2 728 vpaddd three(%rip),%xmm15,%xmm3 729 730 shrq $2,%r8 731 je L$128_enc_msg_x4_check_remainder 732 733 subq $64,%rsi 734 subq $64,%rdi 735 736L$128_enc_msg_x4_loop1: 737 addq $64,%rsi 738 addq $64,%rdi 739 740 vmovdqa %xmm0,%xmm5 741 vmovdqa %xmm1,%xmm6 742 vmovdqa %xmm2,%xmm7 743 vmovdqa %xmm3,%xmm8 744 745 vpxor (%rcx),%xmm5,%xmm5 746 vpxor (%rcx),%xmm6,%xmm6 747 vpxor (%rcx),%xmm7,%xmm7 748 vpxor (%rcx),%xmm8,%xmm8 749 750 vmovdqu 16(%rcx),%xmm12 751 vaesenc %xmm12,%xmm5,%xmm5 752 vaesenc %xmm12,%xmm6,%xmm6 753 vaesenc %xmm12,%xmm7,%xmm7 754 vaesenc %xmm12,%xmm8,%xmm8 755 756 vpaddd %xmm4,%xmm0,%xmm0 757 vmovdqu 32(%rcx),%xmm12 758 vaesenc %xmm12,%xmm5,%xmm5 759 vaesenc %xmm12,%xmm6,%xmm6 760 vaesenc %xmm12,%xmm7,%xmm7 761 vaesenc %xmm12,%xmm8,%xmm8 762 763 vpaddd %xmm4,%xmm1,%xmm1 764 vmovdqu 48(%rcx),%xmm12 765 vaesenc %xmm12,%xmm5,%xmm5 766 vaesenc %xmm12,%xmm6,%xmm6 767 vaesenc %xmm12,%xmm7,%xmm7 768 vaesenc %xmm12,%xmm8,%xmm8 769 770 vpaddd %xmm4,%xmm2,%xmm2 771 vmovdqu 64(%rcx),%xmm12 772 vaesenc %xmm12,%xmm5,%xmm5 773 vaesenc %xmm12,%xmm6,%xmm6 774 vaesenc %xmm12,%xmm7,%xmm7 775 vaesenc %xmm12,%xmm8,%xmm8 776 777 vpaddd %xmm4,%xmm3,%xmm3 778 779 vmovdqu 80(%rcx),%xmm12 780 vaesenc %xmm12,%xmm5,%xmm5 781 vaesenc %xmm12,%xmm6,%xmm6 782 vaesenc %xmm12,%xmm7,%xmm7 783 vaesenc %xmm12,%xmm8,%xmm8 784 785 vmovdqu 96(%rcx),%xmm12 786 vaesenc %xmm12,%xmm5,%xmm5 787 vaesenc %xmm12,%xmm6,%xmm6 788 vaesenc %xmm12,%xmm7,%xmm7 789 vaesenc %xmm12,%xmm8,%xmm8 790 791 vmovdqu 112(%rcx),%xmm12 792 vaesenc %xmm12,%xmm5,%xmm5 793 vaesenc %xmm12,%xmm6,%xmm6 794 vaesenc %xmm12,%xmm7,%xmm7 795 vaesenc %xmm12,%xmm8,%xmm8 796 797 vmovdqu 128(%rcx),%xmm12 798 vaesenc %xmm12,%xmm5,%xmm5 799 vaesenc %xmm12,%xmm6,%xmm6 800 vaesenc %xmm12,%xmm7,%xmm7 801 vaesenc %xmm12,%xmm8,%xmm8 802 803 vmovdqu 144(%rcx),%xmm12 804 vaesenc %xmm12,%xmm5,%xmm5 805 vaesenc %xmm12,%xmm6,%xmm6 806 vaesenc %xmm12,%xmm7,%xmm7 807 vaesenc %xmm12,%xmm8,%xmm8 808 809 vmovdqu 160(%rcx),%xmm12 810 vaesenclast %xmm12,%xmm5,%xmm5 811 vaesenclast %xmm12,%xmm6,%xmm6 812 vaesenclast %xmm12,%xmm7,%xmm7 813 vaesenclast %xmm12,%xmm8,%xmm8 814 815 816 817 vpxor 0(%rdi),%xmm5,%xmm5 818 vpxor 16(%rdi),%xmm6,%xmm6 819 vpxor 32(%rdi),%xmm7,%xmm7 820 vpxor 48(%rdi),%xmm8,%xmm8 821 822 subq $1,%r8 823 824 vmovdqu %xmm5,0(%rsi) 825 vmovdqu %xmm6,16(%rsi) 826 vmovdqu %xmm7,32(%rsi) 827 vmovdqu %xmm8,48(%rsi) 828 829 jne L$128_enc_msg_x4_loop1 830 831 addq $64,%rsi 832 addq $64,%rdi 833 834L$128_enc_msg_x4_check_remainder: 835 cmpq $0,%r10 836 je L$128_enc_msg_x4_out 837 838L$128_enc_msg_x4_loop2: 839 840 841 vmovdqa %xmm0,%xmm5 842 vpaddd one(%rip),%xmm0,%xmm0 843 844 vpxor (%rcx),%xmm5,%xmm5 845 vaesenc 16(%rcx),%xmm5,%xmm5 846 vaesenc 32(%rcx),%xmm5,%xmm5 847 vaesenc 48(%rcx),%xmm5,%xmm5 848 vaesenc 64(%rcx),%xmm5,%xmm5 849 vaesenc 80(%rcx),%xmm5,%xmm5 850 vaesenc 96(%rcx),%xmm5,%xmm5 851 vaesenc 112(%rcx),%xmm5,%xmm5 852 vaesenc 128(%rcx),%xmm5,%xmm5 853 vaesenc 144(%rcx),%xmm5,%xmm5 854 vaesenclast 160(%rcx),%xmm5,%xmm5 855 856 857 vpxor (%rdi),%xmm5,%xmm5 858 vmovdqu %xmm5,(%rsi) 859 860 addq $16,%rdi 861 addq $16,%rsi 862 863 subq $1,%r10 864 jne L$128_enc_msg_x4_loop2 865 866L$128_enc_msg_x4_out: 867 popq %r13 868 869 popq %r12 870 871 .byte 0xf3,0xc3 872 873 874.globl _aes128gcmsiv_enc_msg_x8 875.private_extern _aes128gcmsiv_enc_msg_x8 876 877.p2align 4 878_aes128gcmsiv_enc_msg_x8: 879 880 testq %r8,%r8 881 jnz L$128_enc_msg_x8_start 882 .byte 0xf3,0xc3 883 884L$128_enc_msg_x8_start: 885 pushq %r12 886 887 pushq %r13 888 889 pushq %rbp 890 891 movq %rsp,%rbp 892 893 894 895 subq $128,%rsp 896 andq $-64,%rsp 897 898 shrq $4,%r8 899 movq %r8,%r10 900 shlq $61,%r10 901 shrq $61,%r10 902 903 904 vmovdqu (%rdx),%xmm1 905 vpor OR_MASK(%rip),%xmm1,%xmm1 906 907 908 vpaddd seven(%rip),%xmm1,%xmm0 909 vmovdqu %xmm0,(%rsp) 910 vpaddd one(%rip),%xmm1,%xmm9 911 vpaddd two(%rip),%xmm1,%xmm10 912 vpaddd three(%rip),%xmm1,%xmm11 913 vpaddd four(%rip),%xmm1,%xmm12 914 vpaddd five(%rip),%xmm1,%xmm13 915 vpaddd six(%rip),%xmm1,%xmm14 916 vmovdqa %xmm1,%xmm0 917 918 shrq $3,%r8 919 je L$128_enc_msg_x8_check_remainder 920 921 subq $128,%rsi 922 subq $128,%rdi 923 924L$128_enc_msg_x8_loop1: 925 addq $128,%rsi 926 addq $128,%rdi 927 928 vmovdqa %xmm0,%xmm1 929 vmovdqa %xmm9,%xmm2 930 vmovdqa %xmm10,%xmm3 931 vmovdqa %xmm11,%xmm4 932 vmovdqa %xmm12,%xmm5 933 vmovdqa %xmm13,%xmm6 934 vmovdqa %xmm14,%xmm7 935 936 vmovdqu (%rsp),%xmm8 937 938 vpxor (%rcx),%xmm1,%xmm1 939 vpxor (%rcx),%xmm2,%xmm2 940 vpxor (%rcx),%xmm3,%xmm3 941 vpxor (%rcx),%xmm4,%xmm4 942 vpxor (%rcx),%xmm5,%xmm5 943 vpxor (%rcx),%xmm6,%xmm6 944 vpxor (%rcx),%xmm7,%xmm7 945 vpxor (%rcx),%xmm8,%xmm8 946 947 vmovdqu 16(%rcx),%xmm15 948 vaesenc %xmm15,%xmm1,%xmm1 949 vaesenc %xmm15,%xmm2,%xmm2 950 vaesenc %xmm15,%xmm3,%xmm3 951 vaesenc %xmm15,%xmm4,%xmm4 952 vaesenc %xmm15,%xmm5,%xmm5 953 vaesenc %xmm15,%xmm6,%xmm6 954 vaesenc %xmm15,%xmm7,%xmm7 955 vaesenc %xmm15,%xmm8,%xmm8 956 957 vmovdqu (%rsp),%xmm14 958 vpaddd eight(%rip),%xmm14,%xmm14 959 vmovdqu %xmm14,(%rsp) 960 vmovdqu 32(%rcx),%xmm15 961 vaesenc %xmm15,%xmm1,%xmm1 962 vaesenc %xmm15,%xmm2,%xmm2 963 vaesenc %xmm15,%xmm3,%xmm3 964 vaesenc %xmm15,%xmm4,%xmm4 965 vaesenc %xmm15,%xmm5,%xmm5 966 vaesenc %xmm15,%xmm6,%xmm6 967 vaesenc %xmm15,%xmm7,%xmm7 968 vaesenc %xmm15,%xmm8,%xmm8 969 970 vpsubd one(%rip),%xmm14,%xmm14 971 vmovdqu 48(%rcx),%xmm15 972 vaesenc %xmm15,%xmm1,%xmm1 973 vaesenc %xmm15,%xmm2,%xmm2 974 vaesenc %xmm15,%xmm3,%xmm3 975 vaesenc %xmm15,%xmm4,%xmm4 976 vaesenc %xmm15,%xmm5,%xmm5 977 vaesenc %xmm15,%xmm6,%xmm6 978 vaesenc %xmm15,%xmm7,%xmm7 979 vaesenc %xmm15,%xmm8,%xmm8 980 981 vpaddd eight(%rip),%xmm0,%xmm0 982 vmovdqu 64(%rcx),%xmm15 983 vaesenc %xmm15,%xmm1,%xmm1 984 vaesenc %xmm15,%xmm2,%xmm2 985 vaesenc %xmm15,%xmm3,%xmm3 986 vaesenc %xmm15,%xmm4,%xmm4 987 vaesenc %xmm15,%xmm5,%xmm5 988 vaesenc %xmm15,%xmm6,%xmm6 989 vaesenc %xmm15,%xmm7,%xmm7 990 vaesenc %xmm15,%xmm8,%xmm8 991 992 vpaddd eight(%rip),%xmm9,%xmm9 993 vmovdqu 80(%rcx),%xmm15 994 vaesenc %xmm15,%xmm1,%xmm1 995 vaesenc %xmm15,%xmm2,%xmm2 996 vaesenc %xmm15,%xmm3,%xmm3 997 vaesenc %xmm15,%xmm4,%xmm4 998 vaesenc %xmm15,%xmm5,%xmm5 999 vaesenc %xmm15,%xmm6,%xmm6 1000 vaesenc %xmm15,%xmm7,%xmm7 1001 vaesenc %xmm15,%xmm8,%xmm8 1002 1003 vpaddd eight(%rip),%xmm10,%xmm10 1004 vmovdqu 96(%rcx),%xmm15 1005 vaesenc %xmm15,%xmm1,%xmm1 1006 vaesenc %xmm15,%xmm2,%xmm2 1007 vaesenc %xmm15,%xmm3,%xmm3 1008 vaesenc %xmm15,%xmm4,%xmm4 1009 vaesenc %xmm15,%xmm5,%xmm5 1010 vaesenc %xmm15,%xmm6,%xmm6 1011 vaesenc %xmm15,%xmm7,%xmm7 1012 vaesenc %xmm15,%xmm8,%xmm8 1013 1014 vpaddd eight(%rip),%xmm11,%xmm11 1015 vmovdqu 112(%rcx),%xmm15 1016 vaesenc %xmm15,%xmm1,%xmm1 1017 vaesenc %xmm15,%xmm2,%xmm2 1018 vaesenc %xmm15,%xmm3,%xmm3 1019 vaesenc %xmm15,%xmm4,%xmm4 1020 vaesenc %xmm15,%xmm5,%xmm5 1021 vaesenc %xmm15,%xmm6,%xmm6 1022 vaesenc %xmm15,%xmm7,%xmm7 1023 vaesenc %xmm15,%xmm8,%xmm8 1024 1025 vpaddd eight(%rip),%xmm12,%xmm12 1026 vmovdqu 128(%rcx),%xmm15 1027 vaesenc %xmm15,%xmm1,%xmm1 1028 vaesenc %xmm15,%xmm2,%xmm2 1029 vaesenc %xmm15,%xmm3,%xmm3 1030 vaesenc %xmm15,%xmm4,%xmm4 1031 vaesenc %xmm15,%xmm5,%xmm5 1032 vaesenc %xmm15,%xmm6,%xmm6 1033 vaesenc %xmm15,%xmm7,%xmm7 1034 vaesenc %xmm15,%xmm8,%xmm8 1035 1036 vpaddd eight(%rip),%xmm13,%xmm13 1037 vmovdqu 144(%rcx),%xmm15 1038 vaesenc %xmm15,%xmm1,%xmm1 1039 vaesenc %xmm15,%xmm2,%xmm2 1040 vaesenc %xmm15,%xmm3,%xmm3 1041 vaesenc %xmm15,%xmm4,%xmm4 1042 vaesenc %xmm15,%xmm5,%xmm5 1043 vaesenc %xmm15,%xmm6,%xmm6 1044 vaesenc %xmm15,%xmm7,%xmm7 1045 vaesenc %xmm15,%xmm8,%xmm8 1046 1047 vmovdqu 160(%rcx),%xmm15 1048 vaesenclast %xmm15,%xmm1,%xmm1 1049 vaesenclast %xmm15,%xmm2,%xmm2 1050 vaesenclast %xmm15,%xmm3,%xmm3 1051 vaesenclast %xmm15,%xmm4,%xmm4 1052 vaesenclast %xmm15,%xmm5,%xmm5 1053 vaesenclast %xmm15,%xmm6,%xmm6 1054 vaesenclast %xmm15,%xmm7,%xmm7 1055 vaesenclast %xmm15,%xmm8,%xmm8 1056 1057 1058 1059 vpxor 0(%rdi),%xmm1,%xmm1 1060 vpxor 16(%rdi),%xmm2,%xmm2 1061 vpxor 32(%rdi),%xmm3,%xmm3 1062 vpxor 48(%rdi),%xmm4,%xmm4 1063 vpxor 64(%rdi),%xmm5,%xmm5 1064 vpxor 80(%rdi),%xmm6,%xmm6 1065 vpxor 96(%rdi),%xmm7,%xmm7 1066 vpxor 112(%rdi),%xmm8,%xmm8 1067 1068 decq %r8 1069 1070 vmovdqu %xmm1,0(%rsi) 1071 vmovdqu %xmm2,16(%rsi) 1072 vmovdqu %xmm3,32(%rsi) 1073 vmovdqu %xmm4,48(%rsi) 1074 vmovdqu %xmm5,64(%rsi) 1075 vmovdqu %xmm6,80(%rsi) 1076 vmovdqu %xmm7,96(%rsi) 1077 vmovdqu %xmm8,112(%rsi) 1078 1079 jne L$128_enc_msg_x8_loop1 1080 1081 addq $128,%rsi 1082 addq $128,%rdi 1083 1084L$128_enc_msg_x8_check_remainder: 1085 cmpq $0,%r10 1086 je L$128_enc_msg_x8_out 1087 1088L$128_enc_msg_x8_loop2: 1089 1090 1091 vmovdqa %xmm0,%xmm1 1092 vpaddd one(%rip),%xmm0,%xmm0 1093 1094 vpxor (%rcx),%xmm1,%xmm1 1095 vaesenc 16(%rcx),%xmm1,%xmm1 1096 vaesenc 32(%rcx),%xmm1,%xmm1 1097 vaesenc 48(%rcx),%xmm1,%xmm1 1098 vaesenc 64(%rcx),%xmm1,%xmm1 1099 vaesenc 80(%rcx),%xmm1,%xmm1 1100 vaesenc 96(%rcx),%xmm1,%xmm1 1101 vaesenc 112(%rcx),%xmm1,%xmm1 1102 vaesenc 128(%rcx),%xmm1,%xmm1 1103 vaesenc 144(%rcx),%xmm1,%xmm1 1104 vaesenclast 160(%rcx),%xmm1,%xmm1 1105 1106 1107 vpxor (%rdi),%xmm1,%xmm1 1108 1109 vmovdqu %xmm1,(%rsi) 1110 1111 addq $16,%rdi 1112 addq $16,%rsi 1113 1114 decq %r10 1115 jne L$128_enc_msg_x8_loop2 1116 1117L$128_enc_msg_x8_out: 1118 movq %rbp,%rsp 1119 1120 popq %rbp 1121 1122 popq %r13 1123 1124 popq %r12 1125 1126 .byte 0xf3,0xc3 1127 1128 1129.globl _aes128gcmsiv_dec 1130.private_extern _aes128gcmsiv_dec 1131 1132.p2align 4 1133_aes128gcmsiv_dec: 1134 1135 testq $~15,%r9 1136 jnz L$128_dec_start 1137 .byte 0xf3,0xc3 1138 1139L$128_dec_start: 1140 vzeroupper 1141 vmovdqa (%rdx),%xmm0 1142 movq %rdx,%rax 1143 1144 leaq 32(%rax),%rax 1145 leaq 32(%rcx),%rcx 1146 1147 1148 vmovdqu (%rdi,%r9,1),%xmm15 1149 vpor OR_MASK(%rip),%xmm15,%xmm15 1150 andq $~15,%r9 1151 1152 1153 cmpq $96,%r9 1154 jb L$128_dec_loop2 1155 1156 1157 subq $96,%r9 1158 vmovdqa %xmm15,%xmm7 1159 vpaddd one(%rip),%xmm7,%xmm8 1160 vpaddd two(%rip),%xmm7,%xmm9 1161 vpaddd one(%rip),%xmm9,%xmm10 1162 vpaddd two(%rip),%xmm9,%xmm11 1163 vpaddd one(%rip),%xmm11,%xmm12 1164 vpaddd two(%rip),%xmm11,%xmm15 1165 1166 vpxor (%r8),%xmm7,%xmm7 1167 vpxor (%r8),%xmm8,%xmm8 1168 vpxor (%r8),%xmm9,%xmm9 1169 vpxor (%r8),%xmm10,%xmm10 1170 vpxor (%r8),%xmm11,%xmm11 1171 vpxor (%r8),%xmm12,%xmm12 1172 1173 vmovdqu 16(%r8),%xmm4 1174 vaesenc %xmm4,%xmm7,%xmm7 1175 vaesenc %xmm4,%xmm8,%xmm8 1176 vaesenc %xmm4,%xmm9,%xmm9 1177 vaesenc %xmm4,%xmm10,%xmm10 1178 vaesenc %xmm4,%xmm11,%xmm11 1179 vaesenc %xmm4,%xmm12,%xmm12 1180 1181 vmovdqu 32(%r8),%xmm4 1182 vaesenc %xmm4,%xmm7,%xmm7 1183 vaesenc %xmm4,%xmm8,%xmm8 1184 vaesenc %xmm4,%xmm9,%xmm9 1185 vaesenc %xmm4,%xmm10,%xmm10 1186 vaesenc %xmm4,%xmm11,%xmm11 1187 vaesenc %xmm4,%xmm12,%xmm12 1188 1189 vmovdqu 48(%r8),%xmm4 1190 vaesenc %xmm4,%xmm7,%xmm7 1191 vaesenc %xmm4,%xmm8,%xmm8 1192 vaesenc %xmm4,%xmm9,%xmm9 1193 vaesenc %xmm4,%xmm10,%xmm10 1194 vaesenc %xmm4,%xmm11,%xmm11 1195 vaesenc %xmm4,%xmm12,%xmm12 1196 1197 vmovdqu 64(%r8),%xmm4 1198 vaesenc %xmm4,%xmm7,%xmm7 1199 vaesenc %xmm4,%xmm8,%xmm8 1200 vaesenc %xmm4,%xmm9,%xmm9 1201 vaesenc %xmm4,%xmm10,%xmm10 1202 vaesenc %xmm4,%xmm11,%xmm11 1203 vaesenc %xmm4,%xmm12,%xmm12 1204 1205 vmovdqu 80(%r8),%xmm4 1206 vaesenc %xmm4,%xmm7,%xmm7 1207 vaesenc %xmm4,%xmm8,%xmm8 1208 vaesenc %xmm4,%xmm9,%xmm9 1209 vaesenc %xmm4,%xmm10,%xmm10 1210 vaesenc %xmm4,%xmm11,%xmm11 1211 vaesenc %xmm4,%xmm12,%xmm12 1212 1213 vmovdqu 96(%r8),%xmm4 1214 vaesenc %xmm4,%xmm7,%xmm7 1215 vaesenc %xmm4,%xmm8,%xmm8 1216 vaesenc %xmm4,%xmm9,%xmm9 1217 vaesenc %xmm4,%xmm10,%xmm10 1218 vaesenc %xmm4,%xmm11,%xmm11 1219 vaesenc %xmm4,%xmm12,%xmm12 1220 1221 vmovdqu 112(%r8),%xmm4 1222 vaesenc %xmm4,%xmm7,%xmm7 1223 vaesenc %xmm4,%xmm8,%xmm8 1224 vaesenc %xmm4,%xmm9,%xmm9 1225 vaesenc %xmm4,%xmm10,%xmm10 1226 vaesenc %xmm4,%xmm11,%xmm11 1227 vaesenc %xmm4,%xmm12,%xmm12 1228 1229 vmovdqu 128(%r8),%xmm4 1230 vaesenc %xmm4,%xmm7,%xmm7 1231 vaesenc %xmm4,%xmm8,%xmm8 1232 vaesenc %xmm4,%xmm9,%xmm9 1233 vaesenc %xmm4,%xmm10,%xmm10 1234 vaesenc %xmm4,%xmm11,%xmm11 1235 vaesenc %xmm4,%xmm12,%xmm12 1236 1237 vmovdqu 144(%r8),%xmm4 1238 vaesenc %xmm4,%xmm7,%xmm7 1239 vaesenc %xmm4,%xmm8,%xmm8 1240 vaesenc %xmm4,%xmm9,%xmm9 1241 vaesenc %xmm4,%xmm10,%xmm10 1242 vaesenc %xmm4,%xmm11,%xmm11 1243 vaesenc %xmm4,%xmm12,%xmm12 1244 1245 vmovdqu 160(%r8),%xmm4 1246 vaesenclast %xmm4,%xmm7,%xmm7 1247 vaesenclast %xmm4,%xmm8,%xmm8 1248 vaesenclast %xmm4,%xmm9,%xmm9 1249 vaesenclast %xmm4,%xmm10,%xmm10 1250 vaesenclast %xmm4,%xmm11,%xmm11 1251 vaesenclast %xmm4,%xmm12,%xmm12 1252 1253 1254 vpxor 0(%rdi),%xmm7,%xmm7 1255 vpxor 16(%rdi),%xmm8,%xmm8 1256 vpxor 32(%rdi),%xmm9,%xmm9 1257 vpxor 48(%rdi),%xmm10,%xmm10 1258 vpxor 64(%rdi),%xmm11,%xmm11 1259 vpxor 80(%rdi),%xmm12,%xmm12 1260 1261 vmovdqu %xmm7,0(%rsi) 1262 vmovdqu %xmm8,16(%rsi) 1263 vmovdqu %xmm9,32(%rsi) 1264 vmovdqu %xmm10,48(%rsi) 1265 vmovdqu %xmm11,64(%rsi) 1266 vmovdqu %xmm12,80(%rsi) 1267 1268 addq $96,%rdi 1269 addq $96,%rsi 1270 jmp L$128_dec_loop1 1271 1272 1273.p2align 6 1274L$128_dec_loop1: 1275 cmpq $96,%r9 1276 jb L$128_dec_finish_96 1277 subq $96,%r9 1278 1279 vmovdqa %xmm12,%xmm6 1280 vmovdqa %xmm11,16-32(%rax) 1281 vmovdqa %xmm10,32-32(%rax) 1282 vmovdqa %xmm9,48-32(%rax) 1283 vmovdqa %xmm8,64-32(%rax) 1284 vmovdqa %xmm7,80-32(%rax) 1285 1286 vmovdqa %xmm15,%xmm7 1287 vpaddd one(%rip),%xmm7,%xmm8 1288 vpaddd two(%rip),%xmm7,%xmm9 1289 vpaddd one(%rip),%xmm9,%xmm10 1290 vpaddd two(%rip),%xmm9,%xmm11 1291 vpaddd one(%rip),%xmm11,%xmm12 1292 vpaddd two(%rip),%xmm11,%xmm15 1293 1294 vmovdqa (%r8),%xmm4 1295 vpxor %xmm4,%xmm7,%xmm7 1296 vpxor %xmm4,%xmm8,%xmm8 1297 vpxor %xmm4,%xmm9,%xmm9 1298 vpxor %xmm4,%xmm10,%xmm10 1299 vpxor %xmm4,%xmm11,%xmm11 1300 vpxor %xmm4,%xmm12,%xmm12 1301 1302 vmovdqu 0-32(%rcx),%xmm4 1303 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2 1304 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3 1305 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm1 1306 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm4 1307 vpxor %xmm4,%xmm1,%xmm1 1308 1309 vmovdqu 16(%r8),%xmm4 1310 vaesenc %xmm4,%xmm7,%xmm7 1311 vaesenc %xmm4,%xmm8,%xmm8 1312 vaesenc %xmm4,%xmm9,%xmm9 1313 vaesenc %xmm4,%xmm10,%xmm10 1314 vaesenc %xmm4,%xmm11,%xmm11 1315 vaesenc %xmm4,%xmm12,%xmm12 1316 1317 vmovdqu -16(%rax),%xmm6 1318 vmovdqu -16(%rcx),%xmm13 1319 1320 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1321 vpxor %xmm4,%xmm1,%xmm1 1322 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1323 vpxor %xmm4,%xmm2,%xmm2 1324 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1325 vpxor %xmm4,%xmm3,%xmm3 1326 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1327 vpxor %xmm4,%xmm1,%xmm1 1328 1329 1330 vmovdqu 32(%r8),%xmm4 1331 vaesenc %xmm4,%xmm7,%xmm7 1332 vaesenc %xmm4,%xmm8,%xmm8 1333 vaesenc %xmm4,%xmm9,%xmm9 1334 vaesenc %xmm4,%xmm10,%xmm10 1335 vaesenc %xmm4,%xmm11,%xmm11 1336 vaesenc %xmm4,%xmm12,%xmm12 1337 1338 vmovdqu 0(%rax),%xmm6 1339 vmovdqu 0(%rcx),%xmm13 1340 1341 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1342 vpxor %xmm4,%xmm1,%xmm1 1343 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1344 vpxor %xmm4,%xmm2,%xmm2 1345 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1346 vpxor %xmm4,%xmm3,%xmm3 1347 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1348 vpxor %xmm4,%xmm1,%xmm1 1349 1350 1351 vmovdqu 48(%r8),%xmm4 1352 vaesenc %xmm4,%xmm7,%xmm7 1353 vaesenc %xmm4,%xmm8,%xmm8 1354 vaesenc %xmm4,%xmm9,%xmm9 1355 vaesenc %xmm4,%xmm10,%xmm10 1356 vaesenc %xmm4,%xmm11,%xmm11 1357 vaesenc %xmm4,%xmm12,%xmm12 1358 1359 vmovdqu 16(%rax),%xmm6 1360 vmovdqu 16(%rcx),%xmm13 1361 1362 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1363 vpxor %xmm4,%xmm1,%xmm1 1364 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1365 vpxor %xmm4,%xmm2,%xmm2 1366 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1367 vpxor %xmm4,%xmm3,%xmm3 1368 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1369 vpxor %xmm4,%xmm1,%xmm1 1370 1371 1372 vmovdqu 64(%r8),%xmm4 1373 vaesenc %xmm4,%xmm7,%xmm7 1374 vaesenc %xmm4,%xmm8,%xmm8 1375 vaesenc %xmm4,%xmm9,%xmm9 1376 vaesenc %xmm4,%xmm10,%xmm10 1377 vaesenc %xmm4,%xmm11,%xmm11 1378 vaesenc %xmm4,%xmm12,%xmm12 1379 1380 vmovdqu 32(%rax),%xmm6 1381 vmovdqu 32(%rcx),%xmm13 1382 1383 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1384 vpxor %xmm4,%xmm1,%xmm1 1385 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1386 vpxor %xmm4,%xmm2,%xmm2 1387 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1388 vpxor %xmm4,%xmm3,%xmm3 1389 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1390 vpxor %xmm4,%xmm1,%xmm1 1391 1392 1393 vmovdqu 80(%r8),%xmm4 1394 vaesenc %xmm4,%xmm7,%xmm7 1395 vaesenc %xmm4,%xmm8,%xmm8 1396 vaesenc %xmm4,%xmm9,%xmm9 1397 vaesenc %xmm4,%xmm10,%xmm10 1398 vaesenc %xmm4,%xmm11,%xmm11 1399 vaesenc %xmm4,%xmm12,%xmm12 1400 1401 vmovdqu 96(%r8),%xmm4 1402 vaesenc %xmm4,%xmm7,%xmm7 1403 vaesenc %xmm4,%xmm8,%xmm8 1404 vaesenc %xmm4,%xmm9,%xmm9 1405 vaesenc %xmm4,%xmm10,%xmm10 1406 vaesenc %xmm4,%xmm11,%xmm11 1407 vaesenc %xmm4,%xmm12,%xmm12 1408 1409 vmovdqu 112(%r8),%xmm4 1410 vaesenc %xmm4,%xmm7,%xmm7 1411 vaesenc %xmm4,%xmm8,%xmm8 1412 vaesenc %xmm4,%xmm9,%xmm9 1413 vaesenc %xmm4,%xmm10,%xmm10 1414 vaesenc %xmm4,%xmm11,%xmm11 1415 vaesenc %xmm4,%xmm12,%xmm12 1416 1417 1418 vmovdqa 80-32(%rax),%xmm6 1419 vpxor %xmm0,%xmm6,%xmm6 1420 vmovdqu 80-32(%rcx),%xmm5 1421 1422 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4 1423 vpxor %xmm4,%xmm1,%xmm1 1424 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4 1425 vpxor %xmm4,%xmm2,%xmm2 1426 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4 1427 vpxor %xmm4,%xmm3,%xmm3 1428 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4 1429 vpxor %xmm4,%xmm1,%xmm1 1430 1431 vmovdqu 128(%r8),%xmm4 1432 vaesenc %xmm4,%xmm7,%xmm7 1433 vaesenc %xmm4,%xmm8,%xmm8 1434 vaesenc %xmm4,%xmm9,%xmm9 1435 vaesenc %xmm4,%xmm10,%xmm10 1436 vaesenc %xmm4,%xmm11,%xmm11 1437 vaesenc %xmm4,%xmm12,%xmm12 1438 1439 1440 vpsrldq $8,%xmm1,%xmm4 1441 vpxor %xmm4,%xmm2,%xmm5 1442 vpslldq $8,%xmm1,%xmm4 1443 vpxor %xmm4,%xmm3,%xmm0 1444 1445 vmovdqa poly(%rip),%xmm3 1446 1447 vmovdqu 144(%r8),%xmm4 1448 vaesenc %xmm4,%xmm7,%xmm7 1449 vaesenc %xmm4,%xmm8,%xmm8 1450 vaesenc %xmm4,%xmm9,%xmm9 1451 vaesenc %xmm4,%xmm10,%xmm10 1452 vaesenc %xmm4,%xmm11,%xmm11 1453 vaesenc %xmm4,%xmm12,%xmm12 1454 1455 vmovdqu 160(%r8),%xmm6 1456 vpalignr $8,%xmm0,%xmm0,%xmm2 1457 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 1458 vpxor %xmm0,%xmm2,%xmm0 1459 1460 vpxor 0(%rdi),%xmm6,%xmm4 1461 vaesenclast %xmm4,%xmm7,%xmm7 1462 vpxor 16(%rdi),%xmm6,%xmm4 1463 vaesenclast %xmm4,%xmm8,%xmm8 1464 vpxor 32(%rdi),%xmm6,%xmm4 1465 vaesenclast %xmm4,%xmm9,%xmm9 1466 vpxor 48(%rdi),%xmm6,%xmm4 1467 vaesenclast %xmm4,%xmm10,%xmm10 1468 vpxor 64(%rdi),%xmm6,%xmm4 1469 vaesenclast %xmm4,%xmm11,%xmm11 1470 vpxor 80(%rdi),%xmm6,%xmm4 1471 vaesenclast %xmm4,%xmm12,%xmm12 1472 1473 vpalignr $8,%xmm0,%xmm0,%xmm2 1474 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 1475 vpxor %xmm0,%xmm2,%xmm0 1476 1477 vmovdqu %xmm7,0(%rsi) 1478 vmovdqu %xmm8,16(%rsi) 1479 vmovdqu %xmm9,32(%rsi) 1480 vmovdqu %xmm10,48(%rsi) 1481 vmovdqu %xmm11,64(%rsi) 1482 vmovdqu %xmm12,80(%rsi) 1483 1484 vpxor %xmm5,%xmm0,%xmm0 1485 1486 leaq 96(%rdi),%rdi 1487 leaq 96(%rsi),%rsi 1488 jmp L$128_dec_loop1 1489 1490L$128_dec_finish_96: 1491 vmovdqa %xmm12,%xmm6 1492 vmovdqa %xmm11,16-32(%rax) 1493 vmovdqa %xmm10,32-32(%rax) 1494 vmovdqa %xmm9,48-32(%rax) 1495 vmovdqa %xmm8,64-32(%rax) 1496 vmovdqa %xmm7,80-32(%rax) 1497 1498 vmovdqu 0-32(%rcx),%xmm4 1499 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm1 1500 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2 1501 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3 1502 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm4 1503 vpxor %xmm4,%xmm1,%xmm1 1504 1505 vmovdqu -16(%rax),%xmm6 1506 vmovdqu -16(%rcx),%xmm13 1507 1508 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1509 vpxor %xmm4,%xmm1,%xmm1 1510 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1511 vpxor %xmm4,%xmm2,%xmm2 1512 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1513 vpxor %xmm4,%xmm3,%xmm3 1514 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1515 vpxor %xmm4,%xmm1,%xmm1 1516 1517 vmovdqu 0(%rax),%xmm6 1518 vmovdqu 0(%rcx),%xmm13 1519 1520 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1521 vpxor %xmm4,%xmm1,%xmm1 1522 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1523 vpxor %xmm4,%xmm2,%xmm2 1524 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1525 vpxor %xmm4,%xmm3,%xmm3 1526 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1527 vpxor %xmm4,%xmm1,%xmm1 1528 1529 vmovdqu 16(%rax),%xmm6 1530 vmovdqu 16(%rcx),%xmm13 1531 1532 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1533 vpxor %xmm4,%xmm1,%xmm1 1534 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1535 vpxor %xmm4,%xmm2,%xmm2 1536 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1537 vpxor %xmm4,%xmm3,%xmm3 1538 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1539 vpxor %xmm4,%xmm1,%xmm1 1540 1541 vmovdqu 32(%rax),%xmm6 1542 vmovdqu 32(%rcx),%xmm13 1543 1544 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 1545 vpxor %xmm4,%xmm1,%xmm1 1546 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 1547 vpxor %xmm4,%xmm2,%xmm2 1548 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 1549 vpxor %xmm4,%xmm3,%xmm3 1550 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 1551 vpxor %xmm4,%xmm1,%xmm1 1552 1553 1554 vmovdqu 80-32(%rax),%xmm6 1555 vpxor %xmm0,%xmm6,%xmm6 1556 vmovdqu 80-32(%rcx),%xmm5 1557 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4 1558 vpxor %xmm4,%xmm2,%xmm2 1559 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4 1560 vpxor %xmm4,%xmm3,%xmm3 1561 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4 1562 vpxor %xmm4,%xmm1,%xmm1 1563 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4 1564 vpxor %xmm4,%xmm1,%xmm1 1565 1566 vpsrldq $8,%xmm1,%xmm4 1567 vpxor %xmm4,%xmm2,%xmm5 1568 vpslldq $8,%xmm1,%xmm4 1569 vpxor %xmm4,%xmm3,%xmm0 1570 1571 vmovdqa poly(%rip),%xmm3 1572 1573 vpalignr $8,%xmm0,%xmm0,%xmm2 1574 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 1575 vpxor %xmm0,%xmm2,%xmm0 1576 1577 vpalignr $8,%xmm0,%xmm0,%xmm2 1578 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 1579 vpxor %xmm0,%xmm2,%xmm0 1580 1581 vpxor %xmm5,%xmm0,%xmm0 1582 1583L$128_dec_loop2: 1584 1585 1586 1587 cmpq $16,%r9 1588 jb L$128_dec_out 1589 subq $16,%r9 1590 1591 vmovdqa %xmm15,%xmm2 1592 vpaddd one(%rip),%xmm15,%xmm15 1593 1594 vpxor 0(%r8),%xmm2,%xmm2 1595 vaesenc 16(%r8),%xmm2,%xmm2 1596 vaesenc 32(%r8),%xmm2,%xmm2 1597 vaesenc 48(%r8),%xmm2,%xmm2 1598 vaesenc 64(%r8),%xmm2,%xmm2 1599 vaesenc 80(%r8),%xmm2,%xmm2 1600 vaesenc 96(%r8),%xmm2,%xmm2 1601 vaesenc 112(%r8),%xmm2,%xmm2 1602 vaesenc 128(%r8),%xmm2,%xmm2 1603 vaesenc 144(%r8),%xmm2,%xmm2 1604 vaesenclast 160(%r8),%xmm2,%xmm2 1605 vpxor (%rdi),%xmm2,%xmm2 1606 vmovdqu %xmm2,(%rsi) 1607 addq $16,%rdi 1608 addq $16,%rsi 1609 1610 vpxor %xmm2,%xmm0,%xmm0 1611 vmovdqa -32(%rcx),%xmm1 1612 call GFMUL 1613 1614 jmp L$128_dec_loop2 1615 1616L$128_dec_out: 1617 vmovdqu %xmm0,(%rdx) 1618 .byte 0xf3,0xc3 1619 1620 1621.globl _aes128gcmsiv_ecb_enc_block 1622.private_extern _aes128gcmsiv_ecb_enc_block 1623 1624.p2align 4 1625_aes128gcmsiv_ecb_enc_block: 1626 1627 vmovdqa (%rdi),%xmm1 1628 1629 vpxor (%rdx),%xmm1,%xmm1 1630 vaesenc 16(%rdx),%xmm1,%xmm1 1631 vaesenc 32(%rdx),%xmm1,%xmm1 1632 vaesenc 48(%rdx),%xmm1,%xmm1 1633 vaesenc 64(%rdx),%xmm1,%xmm1 1634 vaesenc 80(%rdx),%xmm1,%xmm1 1635 vaesenc 96(%rdx),%xmm1,%xmm1 1636 vaesenc 112(%rdx),%xmm1,%xmm1 1637 vaesenc 128(%rdx),%xmm1,%xmm1 1638 vaesenc 144(%rdx),%xmm1,%xmm1 1639 vaesenclast 160(%rdx),%xmm1,%xmm1 1640 1641 vmovdqa %xmm1,(%rsi) 1642 1643 .byte 0xf3,0xc3 1644 1645 1646.globl _aes256gcmsiv_aes_ks_enc_x1 1647.private_extern _aes256gcmsiv_aes_ks_enc_x1 1648 1649.p2align 4 1650_aes256gcmsiv_aes_ks_enc_x1: 1651 1652 vmovdqa con1(%rip),%xmm0 1653 vmovdqa mask(%rip),%xmm15 1654 vmovdqa (%rdi),%xmm8 1655 vmovdqa (%rcx),%xmm1 1656 vmovdqa 16(%rcx),%xmm3 1657 vpxor %xmm1,%xmm8,%xmm8 1658 vaesenc %xmm3,%xmm8,%xmm8 1659 vmovdqu %xmm1,(%rdx) 1660 vmovdqu %xmm3,16(%rdx) 1661 vpxor %xmm14,%xmm14,%xmm14 1662 1663 vpshufb %xmm15,%xmm3,%xmm2 1664 vaesenclast %xmm0,%xmm2,%xmm2 1665 vpslld $1,%xmm0,%xmm0 1666 vpslldq $4,%xmm1,%xmm4 1667 vpxor %xmm4,%xmm1,%xmm1 1668 vpslldq $4,%xmm4,%xmm4 1669 vpxor %xmm4,%xmm1,%xmm1 1670 vpslldq $4,%xmm4,%xmm4 1671 vpxor %xmm4,%xmm1,%xmm1 1672 vpxor %xmm2,%xmm1,%xmm1 1673 vaesenc %xmm1,%xmm8,%xmm8 1674 vmovdqu %xmm1,32(%rdx) 1675 1676 vpshufd $0xff,%xmm1,%xmm2 1677 vaesenclast %xmm14,%xmm2,%xmm2 1678 vpslldq $4,%xmm3,%xmm4 1679 vpxor %xmm4,%xmm3,%xmm3 1680 vpslldq $4,%xmm4,%xmm4 1681 vpxor %xmm4,%xmm3,%xmm3 1682 vpslldq $4,%xmm4,%xmm4 1683 vpxor %xmm4,%xmm3,%xmm3 1684 vpxor %xmm2,%xmm3,%xmm3 1685 vaesenc %xmm3,%xmm8,%xmm8 1686 vmovdqu %xmm3,48(%rdx) 1687 1688 vpshufb %xmm15,%xmm3,%xmm2 1689 vaesenclast %xmm0,%xmm2,%xmm2 1690 vpslld $1,%xmm0,%xmm0 1691 vpslldq $4,%xmm1,%xmm4 1692 vpxor %xmm4,%xmm1,%xmm1 1693 vpslldq $4,%xmm4,%xmm4 1694 vpxor %xmm4,%xmm1,%xmm1 1695 vpslldq $4,%xmm4,%xmm4 1696 vpxor %xmm4,%xmm1,%xmm1 1697 vpxor %xmm2,%xmm1,%xmm1 1698 vaesenc %xmm1,%xmm8,%xmm8 1699 vmovdqu %xmm1,64(%rdx) 1700 1701 vpshufd $0xff,%xmm1,%xmm2 1702 vaesenclast %xmm14,%xmm2,%xmm2 1703 vpslldq $4,%xmm3,%xmm4 1704 vpxor %xmm4,%xmm3,%xmm3 1705 vpslldq $4,%xmm4,%xmm4 1706 vpxor %xmm4,%xmm3,%xmm3 1707 vpslldq $4,%xmm4,%xmm4 1708 vpxor %xmm4,%xmm3,%xmm3 1709 vpxor %xmm2,%xmm3,%xmm3 1710 vaesenc %xmm3,%xmm8,%xmm8 1711 vmovdqu %xmm3,80(%rdx) 1712 1713 vpshufb %xmm15,%xmm3,%xmm2 1714 vaesenclast %xmm0,%xmm2,%xmm2 1715 vpslld $1,%xmm0,%xmm0 1716 vpslldq $4,%xmm1,%xmm4 1717 vpxor %xmm4,%xmm1,%xmm1 1718 vpslldq $4,%xmm4,%xmm4 1719 vpxor %xmm4,%xmm1,%xmm1 1720 vpslldq $4,%xmm4,%xmm4 1721 vpxor %xmm4,%xmm1,%xmm1 1722 vpxor %xmm2,%xmm1,%xmm1 1723 vaesenc %xmm1,%xmm8,%xmm8 1724 vmovdqu %xmm1,96(%rdx) 1725 1726 vpshufd $0xff,%xmm1,%xmm2 1727 vaesenclast %xmm14,%xmm2,%xmm2 1728 vpslldq $4,%xmm3,%xmm4 1729 vpxor %xmm4,%xmm3,%xmm3 1730 vpslldq $4,%xmm4,%xmm4 1731 vpxor %xmm4,%xmm3,%xmm3 1732 vpslldq $4,%xmm4,%xmm4 1733 vpxor %xmm4,%xmm3,%xmm3 1734 vpxor %xmm2,%xmm3,%xmm3 1735 vaesenc %xmm3,%xmm8,%xmm8 1736 vmovdqu %xmm3,112(%rdx) 1737 1738 vpshufb %xmm15,%xmm3,%xmm2 1739 vaesenclast %xmm0,%xmm2,%xmm2 1740 vpslld $1,%xmm0,%xmm0 1741 vpslldq $4,%xmm1,%xmm4 1742 vpxor %xmm4,%xmm1,%xmm1 1743 vpslldq $4,%xmm4,%xmm4 1744 vpxor %xmm4,%xmm1,%xmm1 1745 vpslldq $4,%xmm4,%xmm4 1746 vpxor %xmm4,%xmm1,%xmm1 1747 vpxor %xmm2,%xmm1,%xmm1 1748 vaesenc %xmm1,%xmm8,%xmm8 1749 vmovdqu %xmm1,128(%rdx) 1750 1751 vpshufd $0xff,%xmm1,%xmm2 1752 vaesenclast %xmm14,%xmm2,%xmm2 1753 vpslldq $4,%xmm3,%xmm4 1754 vpxor %xmm4,%xmm3,%xmm3 1755 vpslldq $4,%xmm4,%xmm4 1756 vpxor %xmm4,%xmm3,%xmm3 1757 vpslldq $4,%xmm4,%xmm4 1758 vpxor %xmm4,%xmm3,%xmm3 1759 vpxor %xmm2,%xmm3,%xmm3 1760 vaesenc %xmm3,%xmm8,%xmm8 1761 vmovdqu %xmm3,144(%rdx) 1762 1763 vpshufb %xmm15,%xmm3,%xmm2 1764 vaesenclast %xmm0,%xmm2,%xmm2 1765 vpslld $1,%xmm0,%xmm0 1766 vpslldq $4,%xmm1,%xmm4 1767 vpxor %xmm4,%xmm1,%xmm1 1768 vpslldq $4,%xmm4,%xmm4 1769 vpxor %xmm4,%xmm1,%xmm1 1770 vpslldq $4,%xmm4,%xmm4 1771 vpxor %xmm4,%xmm1,%xmm1 1772 vpxor %xmm2,%xmm1,%xmm1 1773 vaesenc %xmm1,%xmm8,%xmm8 1774 vmovdqu %xmm1,160(%rdx) 1775 1776 vpshufd $0xff,%xmm1,%xmm2 1777 vaesenclast %xmm14,%xmm2,%xmm2 1778 vpslldq $4,%xmm3,%xmm4 1779 vpxor %xmm4,%xmm3,%xmm3 1780 vpslldq $4,%xmm4,%xmm4 1781 vpxor %xmm4,%xmm3,%xmm3 1782 vpslldq $4,%xmm4,%xmm4 1783 vpxor %xmm4,%xmm3,%xmm3 1784 vpxor %xmm2,%xmm3,%xmm3 1785 vaesenc %xmm3,%xmm8,%xmm8 1786 vmovdqu %xmm3,176(%rdx) 1787 1788 vpshufb %xmm15,%xmm3,%xmm2 1789 vaesenclast %xmm0,%xmm2,%xmm2 1790 vpslld $1,%xmm0,%xmm0 1791 vpslldq $4,%xmm1,%xmm4 1792 vpxor %xmm4,%xmm1,%xmm1 1793 vpslldq $4,%xmm4,%xmm4 1794 vpxor %xmm4,%xmm1,%xmm1 1795 vpslldq $4,%xmm4,%xmm4 1796 vpxor %xmm4,%xmm1,%xmm1 1797 vpxor %xmm2,%xmm1,%xmm1 1798 vaesenc %xmm1,%xmm8,%xmm8 1799 vmovdqu %xmm1,192(%rdx) 1800 1801 vpshufd $0xff,%xmm1,%xmm2 1802 vaesenclast %xmm14,%xmm2,%xmm2 1803 vpslldq $4,%xmm3,%xmm4 1804 vpxor %xmm4,%xmm3,%xmm3 1805 vpslldq $4,%xmm4,%xmm4 1806 vpxor %xmm4,%xmm3,%xmm3 1807 vpslldq $4,%xmm4,%xmm4 1808 vpxor %xmm4,%xmm3,%xmm3 1809 vpxor %xmm2,%xmm3,%xmm3 1810 vaesenc %xmm3,%xmm8,%xmm8 1811 vmovdqu %xmm3,208(%rdx) 1812 1813 vpshufb %xmm15,%xmm3,%xmm2 1814 vaesenclast %xmm0,%xmm2,%xmm2 1815 vpslldq $4,%xmm1,%xmm4 1816 vpxor %xmm4,%xmm1,%xmm1 1817 vpslldq $4,%xmm4,%xmm4 1818 vpxor %xmm4,%xmm1,%xmm1 1819 vpslldq $4,%xmm4,%xmm4 1820 vpxor %xmm4,%xmm1,%xmm1 1821 vpxor %xmm2,%xmm1,%xmm1 1822 vaesenclast %xmm1,%xmm8,%xmm8 1823 vmovdqu %xmm1,224(%rdx) 1824 1825 vmovdqa %xmm8,(%rsi) 1826 .byte 0xf3,0xc3 1827 1828 1829.globl _aes256gcmsiv_ecb_enc_block 1830.private_extern _aes256gcmsiv_ecb_enc_block 1831 1832.p2align 4 1833_aes256gcmsiv_ecb_enc_block: 1834 1835 vmovdqa (%rdi),%xmm1 1836 vpxor (%rdx),%xmm1,%xmm1 1837 vaesenc 16(%rdx),%xmm1,%xmm1 1838 vaesenc 32(%rdx),%xmm1,%xmm1 1839 vaesenc 48(%rdx),%xmm1,%xmm1 1840 vaesenc 64(%rdx),%xmm1,%xmm1 1841 vaesenc 80(%rdx),%xmm1,%xmm1 1842 vaesenc 96(%rdx),%xmm1,%xmm1 1843 vaesenc 112(%rdx),%xmm1,%xmm1 1844 vaesenc 128(%rdx),%xmm1,%xmm1 1845 vaesenc 144(%rdx),%xmm1,%xmm1 1846 vaesenc 160(%rdx),%xmm1,%xmm1 1847 vaesenc 176(%rdx),%xmm1,%xmm1 1848 vaesenc 192(%rdx),%xmm1,%xmm1 1849 vaesenc 208(%rdx),%xmm1,%xmm1 1850 vaesenclast 224(%rdx),%xmm1,%xmm1 1851 vmovdqa %xmm1,(%rsi) 1852 .byte 0xf3,0xc3 1853 1854 1855.globl _aes256gcmsiv_enc_msg_x4 1856.private_extern _aes256gcmsiv_enc_msg_x4 1857 1858.p2align 4 1859_aes256gcmsiv_enc_msg_x4: 1860 1861 testq %r8,%r8 1862 jnz L$256_enc_msg_x4_start 1863 .byte 0xf3,0xc3 1864 1865L$256_enc_msg_x4_start: 1866 movq %r8,%r10 1867 shrq $4,%r8 1868 shlq $60,%r10 1869 jz L$256_enc_msg_x4_start2 1870 addq $1,%r8 1871 1872L$256_enc_msg_x4_start2: 1873 movq %r8,%r10 1874 shlq $62,%r10 1875 shrq $62,%r10 1876 1877 1878 vmovdqa (%rdx),%xmm15 1879 vpor OR_MASK(%rip),%xmm15,%xmm15 1880 1881 vmovdqa four(%rip),%xmm4 1882 vmovdqa %xmm15,%xmm0 1883 vpaddd one(%rip),%xmm15,%xmm1 1884 vpaddd two(%rip),%xmm15,%xmm2 1885 vpaddd three(%rip),%xmm15,%xmm3 1886 1887 shrq $2,%r8 1888 je L$256_enc_msg_x4_check_remainder 1889 1890 subq $64,%rsi 1891 subq $64,%rdi 1892 1893L$256_enc_msg_x4_loop1: 1894 addq $64,%rsi 1895 addq $64,%rdi 1896 1897 vmovdqa %xmm0,%xmm5 1898 vmovdqa %xmm1,%xmm6 1899 vmovdqa %xmm2,%xmm7 1900 vmovdqa %xmm3,%xmm8 1901 1902 vpxor (%rcx),%xmm5,%xmm5 1903 vpxor (%rcx),%xmm6,%xmm6 1904 vpxor (%rcx),%xmm7,%xmm7 1905 vpxor (%rcx),%xmm8,%xmm8 1906 1907 vmovdqu 16(%rcx),%xmm12 1908 vaesenc %xmm12,%xmm5,%xmm5 1909 vaesenc %xmm12,%xmm6,%xmm6 1910 vaesenc %xmm12,%xmm7,%xmm7 1911 vaesenc %xmm12,%xmm8,%xmm8 1912 1913 vpaddd %xmm4,%xmm0,%xmm0 1914 vmovdqu 32(%rcx),%xmm12 1915 vaesenc %xmm12,%xmm5,%xmm5 1916 vaesenc %xmm12,%xmm6,%xmm6 1917 vaesenc %xmm12,%xmm7,%xmm7 1918 vaesenc %xmm12,%xmm8,%xmm8 1919 1920 vpaddd %xmm4,%xmm1,%xmm1 1921 vmovdqu 48(%rcx),%xmm12 1922 vaesenc %xmm12,%xmm5,%xmm5 1923 vaesenc %xmm12,%xmm6,%xmm6 1924 vaesenc %xmm12,%xmm7,%xmm7 1925 vaesenc %xmm12,%xmm8,%xmm8 1926 1927 vpaddd %xmm4,%xmm2,%xmm2 1928 vmovdqu 64(%rcx),%xmm12 1929 vaesenc %xmm12,%xmm5,%xmm5 1930 vaesenc %xmm12,%xmm6,%xmm6 1931 vaesenc %xmm12,%xmm7,%xmm7 1932 vaesenc %xmm12,%xmm8,%xmm8 1933 1934 vpaddd %xmm4,%xmm3,%xmm3 1935 1936 vmovdqu 80(%rcx),%xmm12 1937 vaesenc %xmm12,%xmm5,%xmm5 1938 vaesenc %xmm12,%xmm6,%xmm6 1939 vaesenc %xmm12,%xmm7,%xmm7 1940 vaesenc %xmm12,%xmm8,%xmm8 1941 1942 vmovdqu 96(%rcx),%xmm12 1943 vaesenc %xmm12,%xmm5,%xmm5 1944 vaesenc %xmm12,%xmm6,%xmm6 1945 vaesenc %xmm12,%xmm7,%xmm7 1946 vaesenc %xmm12,%xmm8,%xmm8 1947 1948 vmovdqu 112(%rcx),%xmm12 1949 vaesenc %xmm12,%xmm5,%xmm5 1950 vaesenc %xmm12,%xmm6,%xmm6 1951 vaesenc %xmm12,%xmm7,%xmm7 1952 vaesenc %xmm12,%xmm8,%xmm8 1953 1954 vmovdqu 128(%rcx),%xmm12 1955 vaesenc %xmm12,%xmm5,%xmm5 1956 vaesenc %xmm12,%xmm6,%xmm6 1957 vaesenc %xmm12,%xmm7,%xmm7 1958 vaesenc %xmm12,%xmm8,%xmm8 1959 1960 vmovdqu 144(%rcx),%xmm12 1961 vaesenc %xmm12,%xmm5,%xmm5 1962 vaesenc %xmm12,%xmm6,%xmm6 1963 vaesenc %xmm12,%xmm7,%xmm7 1964 vaesenc %xmm12,%xmm8,%xmm8 1965 1966 vmovdqu 160(%rcx),%xmm12 1967 vaesenc %xmm12,%xmm5,%xmm5 1968 vaesenc %xmm12,%xmm6,%xmm6 1969 vaesenc %xmm12,%xmm7,%xmm7 1970 vaesenc %xmm12,%xmm8,%xmm8 1971 1972 vmovdqu 176(%rcx),%xmm12 1973 vaesenc %xmm12,%xmm5,%xmm5 1974 vaesenc %xmm12,%xmm6,%xmm6 1975 vaesenc %xmm12,%xmm7,%xmm7 1976 vaesenc %xmm12,%xmm8,%xmm8 1977 1978 vmovdqu 192(%rcx),%xmm12 1979 vaesenc %xmm12,%xmm5,%xmm5 1980 vaesenc %xmm12,%xmm6,%xmm6 1981 vaesenc %xmm12,%xmm7,%xmm7 1982 vaesenc %xmm12,%xmm8,%xmm8 1983 1984 vmovdqu 208(%rcx),%xmm12 1985 vaesenc %xmm12,%xmm5,%xmm5 1986 vaesenc %xmm12,%xmm6,%xmm6 1987 vaesenc %xmm12,%xmm7,%xmm7 1988 vaesenc %xmm12,%xmm8,%xmm8 1989 1990 vmovdqu 224(%rcx),%xmm12 1991 vaesenclast %xmm12,%xmm5,%xmm5 1992 vaesenclast %xmm12,%xmm6,%xmm6 1993 vaesenclast %xmm12,%xmm7,%xmm7 1994 vaesenclast %xmm12,%xmm8,%xmm8 1995 1996 1997 1998 vpxor 0(%rdi),%xmm5,%xmm5 1999 vpxor 16(%rdi),%xmm6,%xmm6 2000 vpxor 32(%rdi),%xmm7,%xmm7 2001 vpxor 48(%rdi),%xmm8,%xmm8 2002 2003 subq $1,%r8 2004 2005 vmovdqu %xmm5,0(%rsi) 2006 vmovdqu %xmm6,16(%rsi) 2007 vmovdqu %xmm7,32(%rsi) 2008 vmovdqu %xmm8,48(%rsi) 2009 2010 jne L$256_enc_msg_x4_loop1 2011 2012 addq $64,%rsi 2013 addq $64,%rdi 2014 2015L$256_enc_msg_x4_check_remainder: 2016 cmpq $0,%r10 2017 je L$256_enc_msg_x4_out 2018 2019L$256_enc_msg_x4_loop2: 2020 2021 2022 2023 vmovdqa %xmm0,%xmm5 2024 vpaddd one(%rip),%xmm0,%xmm0 2025 vpxor (%rcx),%xmm5,%xmm5 2026 vaesenc 16(%rcx),%xmm5,%xmm5 2027 vaesenc 32(%rcx),%xmm5,%xmm5 2028 vaesenc 48(%rcx),%xmm5,%xmm5 2029 vaesenc 64(%rcx),%xmm5,%xmm5 2030 vaesenc 80(%rcx),%xmm5,%xmm5 2031 vaesenc 96(%rcx),%xmm5,%xmm5 2032 vaesenc 112(%rcx),%xmm5,%xmm5 2033 vaesenc 128(%rcx),%xmm5,%xmm5 2034 vaesenc 144(%rcx),%xmm5,%xmm5 2035 vaesenc 160(%rcx),%xmm5,%xmm5 2036 vaesenc 176(%rcx),%xmm5,%xmm5 2037 vaesenc 192(%rcx),%xmm5,%xmm5 2038 vaesenc 208(%rcx),%xmm5,%xmm5 2039 vaesenclast 224(%rcx),%xmm5,%xmm5 2040 2041 2042 vpxor (%rdi),%xmm5,%xmm5 2043 2044 vmovdqu %xmm5,(%rsi) 2045 2046 addq $16,%rdi 2047 addq $16,%rsi 2048 2049 subq $1,%r10 2050 jne L$256_enc_msg_x4_loop2 2051 2052L$256_enc_msg_x4_out: 2053 .byte 0xf3,0xc3 2054 2055 2056.globl _aes256gcmsiv_enc_msg_x8 2057.private_extern _aes256gcmsiv_enc_msg_x8 2058 2059.p2align 4 2060_aes256gcmsiv_enc_msg_x8: 2061 2062 testq %r8,%r8 2063 jnz L$256_enc_msg_x8_start 2064 .byte 0xf3,0xc3 2065 2066L$256_enc_msg_x8_start: 2067 2068 movq %rsp,%r11 2069 subq $16,%r11 2070 andq $-64,%r11 2071 2072 movq %r8,%r10 2073 shrq $4,%r8 2074 shlq $60,%r10 2075 jz L$256_enc_msg_x8_start2 2076 addq $1,%r8 2077 2078L$256_enc_msg_x8_start2: 2079 movq %r8,%r10 2080 shlq $61,%r10 2081 shrq $61,%r10 2082 2083 2084 vmovdqa (%rdx),%xmm1 2085 vpor OR_MASK(%rip),%xmm1,%xmm1 2086 2087 2088 vpaddd seven(%rip),%xmm1,%xmm0 2089 vmovdqa %xmm0,(%r11) 2090 vpaddd one(%rip),%xmm1,%xmm9 2091 vpaddd two(%rip),%xmm1,%xmm10 2092 vpaddd three(%rip),%xmm1,%xmm11 2093 vpaddd four(%rip),%xmm1,%xmm12 2094 vpaddd five(%rip),%xmm1,%xmm13 2095 vpaddd six(%rip),%xmm1,%xmm14 2096 vmovdqa %xmm1,%xmm0 2097 2098 shrq $3,%r8 2099 jz L$256_enc_msg_x8_check_remainder 2100 2101 subq $128,%rsi 2102 subq $128,%rdi 2103 2104L$256_enc_msg_x8_loop1: 2105 addq $128,%rsi 2106 addq $128,%rdi 2107 2108 vmovdqa %xmm0,%xmm1 2109 vmovdqa %xmm9,%xmm2 2110 vmovdqa %xmm10,%xmm3 2111 vmovdqa %xmm11,%xmm4 2112 vmovdqa %xmm12,%xmm5 2113 vmovdqa %xmm13,%xmm6 2114 vmovdqa %xmm14,%xmm7 2115 2116 vmovdqa (%r11),%xmm8 2117 2118 vpxor (%rcx),%xmm1,%xmm1 2119 vpxor (%rcx),%xmm2,%xmm2 2120 vpxor (%rcx),%xmm3,%xmm3 2121 vpxor (%rcx),%xmm4,%xmm4 2122 vpxor (%rcx),%xmm5,%xmm5 2123 vpxor (%rcx),%xmm6,%xmm6 2124 vpxor (%rcx),%xmm7,%xmm7 2125 vpxor (%rcx),%xmm8,%xmm8 2126 2127 vmovdqu 16(%rcx),%xmm15 2128 vaesenc %xmm15,%xmm1,%xmm1 2129 vaesenc %xmm15,%xmm2,%xmm2 2130 vaesenc %xmm15,%xmm3,%xmm3 2131 vaesenc %xmm15,%xmm4,%xmm4 2132 vaesenc %xmm15,%xmm5,%xmm5 2133 vaesenc %xmm15,%xmm6,%xmm6 2134 vaesenc %xmm15,%xmm7,%xmm7 2135 vaesenc %xmm15,%xmm8,%xmm8 2136 2137 vmovdqa (%r11),%xmm14 2138 vpaddd eight(%rip),%xmm14,%xmm14 2139 vmovdqa %xmm14,(%r11) 2140 vmovdqu 32(%rcx),%xmm15 2141 vaesenc %xmm15,%xmm1,%xmm1 2142 vaesenc %xmm15,%xmm2,%xmm2 2143 vaesenc %xmm15,%xmm3,%xmm3 2144 vaesenc %xmm15,%xmm4,%xmm4 2145 vaesenc %xmm15,%xmm5,%xmm5 2146 vaesenc %xmm15,%xmm6,%xmm6 2147 vaesenc %xmm15,%xmm7,%xmm7 2148 vaesenc %xmm15,%xmm8,%xmm8 2149 2150 vpsubd one(%rip),%xmm14,%xmm14 2151 vmovdqu 48(%rcx),%xmm15 2152 vaesenc %xmm15,%xmm1,%xmm1 2153 vaesenc %xmm15,%xmm2,%xmm2 2154 vaesenc %xmm15,%xmm3,%xmm3 2155 vaesenc %xmm15,%xmm4,%xmm4 2156 vaesenc %xmm15,%xmm5,%xmm5 2157 vaesenc %xmm15,%xmm6,%xmm6 2158 vaesenc %xmm15,%xmm7,%xmm7 2159 vaesenc %xmm15,%xmm8,%xmm8 2160 2161 vpaddd eight(%rip),%xmm0,%xmm0 2162 vmovdqu 64(%rcx),%xmm15 2163 vaesenc %xmm15,%xmm1,%xmm1 2164 vaesenc %xmm15,%xmm2,%xmm2 2165 vaesenc %xmm15,%xmm3,%xmm3 2166 vaesenc %xmm15,%xmm4,%xmm4 2167 vaesenc %xmm15,%xmm5,%xmm5 2168 vaesenc %xmm15,%xmm6,%xmm6 2169 vaesenc %xmm15,%xmm7,%xmm7 2170 vaesenc %xmm15,%xmm8,%xmm8 2171 2172 vpaddd eight(%rip),%xmm9,%xmm9 2173 vmovdqu 80(%rcx),%xmm15 2174 vaesenc %xmm15,%xmm1,%xmm1 2175 vaesenc %xmm15,%xmm2,%xmm2 2176 vaesenc %xmm15,%xmm3,%xmm3 2177 vaesenc %xmm15,%xmm4,%xmm4 2178 vaesenc %xmm15,%xmm5,%xmm5 2179 vaesenc %xmm15,%xmm6,%xmm6 2180 vaesenc %xmm15,%xmm7,%xmm7 2181 vaesenc %xmm15,%xmm8,%xmm8 2182 2183 vpaddd eight(%rip),%xmm10,%xmm10 2184 vmovdqu 96(%rcx),%xmm15 2185 vaesenc %xmm15,%xmm1,%xmm1 2186 vaesenc %xmm15,%xmm2,%xmm2 2187 vaesenc %xmm15,%xmm3,%xmm3 2188 vaesenc %xmm15,%xmm4,%xmm4 2189 vaesenc %xmm15,%xmm5,%xmm5 2190 vaesenc %xmm15,%xmm6,%xmm6 2191 vaesenc %xmm15,%xmm7,%xmm7 2192 vaesenc %xmm15,%xmm8,%xmm8 2193 2194 vpaddd eight(%rip),%xmm11,%xmm11 2195 vmovdqu 112(%rcx),%xmm15 2196 vaesenc %xmm15,%xmm1,%xmm1 2197 vaesenc %xmm15,%xmm2,%xmm2 2198 vaesenc %xmm15,%xmm3,%xmm3 2199 vaesenc %xmm15,%xmm4,%xmm4 2200 vaesenc %xmm15,%xmm5,%xmm5 2201 vaesenc %xmm15,%xmm6,%xmm6 2202 vaesenc %xmm15,%xmm7,%xmm7 2203 vaesenc %xmm15,%xmm8,%xmm8 2204 2205 vpaddd eight(%rip),%xmm12,%xmm12 2206 vmovdqu 128(%rcx),%xmm15 2207 vaesenc %xmm15,%xmm1,%xmm1 2208 vaesenc %xmm15,%xmm2,%xmm2 2209 vaesenc %xmm15,%xmm3,%xmm3 2210 vaesenc %xmm15,%xmm4,%xmm4 2211 vaesenc %xmm15,%xmm5,%xmm5 2212 vaesenc %xmm15,%xmm6,%xmm6 2213 vaesenc %xmm15,%xmm7,%xmm7 2214 vaesenc %xmm15,%xmm8,%xmm8 2215 2216 vpaddd eight(%rip),%xmm13,%xmm13 2217 vmovdqu 144(%rcx),%xmm15 2218 vaesenc %xmm15,%xmm1,%xmm1 2219 vaesenc %xmm15,%xmm2,%xmm2 2220 vaesenc %xmm15,%xmm3,%xmm3 2221 vaesenc %xmm15,%xmm4,%xmm4 2222 vaesenc %xmm15,%xmm5,%xmm5 2223 vaesenc %xmm15,%xmm6,%xmm6 2224 vaesenc %xmm15,%xmm7,%xmm7 2225 vaesenc %xmm15,%xmm8,%xmm8 2226 2227 vmovdqu 160(%rcx),%xmm15 2228 vaesenc %xmm15,%xmm1,%xmm1 2229 vaesenc %xmm15,%xmm2,%xmm2 2230 vaesenc %xmm15,%xmm3,%xmm3 2231 vaesenc %xmm15,%xmm4,%xmm4 2232 vaesenc %xmm15,%xmm5,%xmm5 2233 vaesenc %xmm15,%xmm6,%xmm6 2234 vaesenc %xmm15,%xmm7,%xmm7 2235 vaesenc %xmm15,%xmm8,%xmm8 2236 2237 vmovdqu 176(%rcx),%xmm15 2238 vaesenc %xmm15,%xmm1,%xmm1 2239 vaesenc %xmm15,%xmm2,%xmm2 2240 vaesenc %xmm15,%xmm3,%xmm3 2241 vaesenc %xmm15,%xmm4,%xmm4 2242 vaesenc %xmm15,%xmm5,%xmm5 2243 vaesenc %xmm15,%xmm6,%xmm6 2244 vaesenc %xmm15,%xmm7,%xmm7 2245 vaesenc %xmm15,%xmm8,%xmm8 2246 2247 vmovdqu 192(%rcx),%xmm15 2248 vaesenc %xmm15,%xmm1,%xmm1 2249 vaesenc %xmm15,%xmm2,%xmm2 2250 vaesenc %xmm15,%xmm3,%xmm3 2251 vaesenc %xmm15,%xmm4,%xmm4 2252 vaesenc %xmm15,%xmm5,%xmm5 2253 vaesenc %xmm15,%xmm6,%xmm6 2254 vaesenc %xmm15,%xmm7,%xmm7 2255 vaesenc %xmm15,%xmm8,%xmm8 2256 2257 vmovdqu 208(%rcx),%xmm15 2258 vaesenc %xmm15,%xmm1,%xmm1 2259 vaesenc %xmm15,%xmm2,%xmm2 2260 vaesenc %xmm15,%xmm3,%xmm3 2261 vaesenc %xmm15,%xmm4,%xmm4 2262 vaesenc %xmm15,%xmm5,%xmm5 2263 vaesenc %xmm15,%xmm6,%xmm6 2264 vaesenc %xmm15,%xmm7,%xmm7 2265 vaesenc %xmm15,%xmm8,%xmm8 2266 2267 vmovdqu 224(%rcx),%xmm15 2268 vaesenclast %xmm15,%xmm1,%xmm1 2269 vaesenclast %xmm15,%xmm2,%xmm2 2270 vaesenclast %xmm15,%xmm3,%xmm3 2271 vaesenclast %xmm15,%xmm4,%xmm4 2272 vaesenclast %xmm15,%xmm5,%xmm5 2273 vaesenclast %xmm15,%xmm6,%xmm6 2274 vaesenclast %xmm15,%xmm7,%xmm7 2275 vaesenclast %xmm15,%xmm8,%xmm8 2276 2277 2278 2279 vpxor 0(%rdi),%xmm1,%xmm1 2280 vpxor 16(%rdi),%xmm2,%xmm2 2281 vpxor 32(%rdi),%xmm3,%xmm3 2282 vpxor 48(%rdi),%xmm4,%xmm4 2283 vpxor 64(%rdi),%xmm5,%xmm5 2284 vpxor 80(%rdi),%xmm6,%xmm6 2285 vpxor 96(%rdi),%xmm7,%xmm7 2286 vpxor 112(%rdi),%xmm8,%xmm8 2287 2288 subq $1,%r8 2289 2290 vmovdqu %xmm1,0(%rsi) 2291 vmovdqu %xmm2,16(%rsi) 2292 vmovdqu %xmm3,32(%rsi) 2293 vmovdqu %xmm4,48(%rsi) 2294 vmovdqu %xmm5,64(%rsi) 2295 vmovdqu %xmm6,80(%rsi) 2296 vmovdqu %xmm7,96(%rsi) 2297 vmovdqu %xmm8,112(%rsi) 2298 2299 jne L$256_enc_msg_x8_loop1 2300 2301 addq $128,%rsi 2302 addq $128,%rdi 2303 2304L$256_enc_msg_x8_check_remainder: 2305 cmpq $0,%r10 2306 je L$256_enc_msg_x8_out 2307 2308L$256_enc_msg_x8_loop2: 2309 2310 2311 vmovdqa %xmm0,%xmm1 2312 vpaddd one(%rip),%xmm0,%xmm0 2313 2314 vpxor (%rcx),%xmm1,%xmm1 2315 vaesenc 16(%rcx),%xmm1,%xmm1 2316 vaesenc 32(%rcx),%xmm1,%xmm1 2317 vaesenc 48(%rcx),%xmm1,%xmm1 2318 vaesenc 64(%rcx),%xmm1,%xmm1 2319 vaesenc 80(%rcx),%xmm1,%xmm1 2320 vaesenc 96(%rcx),%xmm1,%xmm1 2321 vaesenc 112(%rcx),%xmm1,%xmm1 2322 vaesenc 128(%rcx),%xmm1,%xmm1 2323 vaesenc 144(%rcx),%xmm1,%xmm1 2324 vaesenc 160(%rcx),%xmm1,%xmm1 2325 vaesenc 176(%rcx),%xmm1,%xmm1 2326 vaesenc 192(%rcx),%xmm1,%xmm1 2327 vaesenc 208(%rcx),%xmm1,%xmm1 2328 vaesenclast 224(%rcx),%xmm1,%xmm1 2329 2330 2331 vpxor (%rdi),%xmm1,%xmm1 2332 2333 vmovdqu %xmm1,(%rsi) 2334 2335 addq $16,%rdi 2336 addq $16,%rsi 2337 subq $1,%r10 2338 jnz L$256_enc_msg_x8_loop2 2339 2340L$256_enc_msg_x8_out: 2341 .byte 0xf3,0xc3 2342 2343 2344 2345.globl _aes256gcmsiv_dec 2346.private_extern _aes256gcmsiv_dec 2347 2348.p2align 4 2349_aes256gcmsiv_dec: 2350 2351 testq $~15,%r9 2352 jnz L$256_dec_start 2353 .byte 0xf3,0xc3 2354 2355L$256_dec_start: 2356 vzeroupper 2357 vmovdqa (%rdx),%xmm0 2358 movq %rdx,%rax 2359 2360 leaq 32(%rax),%rax 2361 leaq 32(%rcx),%rcx 2362 2363 2364 vmovdqu (%rdi,%r9,1),%xmm15 2365 vpor OR_MASK(%rip),%xmm15,%xmm15 2366 andq $~15,%r9 2367 2368 2369 cmpq $96,%r9 2370 jb L$256_dec_loop2 2371 2372 2373 subq $96,%r9 2374 vmovdqa %xmm15,%xmm7 2375 vpaddd one(%rip),%xmm7,%xmm8 2376 vpaddd two(%rip),%xmm7,%xmm9 2377 vpaddd one(%rip),%xmm9,%xmm10 2378 vpaddd two(%rip),%xmm9,%xmm11 2379 vpaddd one(%rip),%xmm11,%xmm12 2380 vpaddd two(%rip),%xmm11,%xmm15 2381 2382 vpxor (%r8),%xmm7,%xmm7 2383 vpxor (%r8),%xmm8,%xmm8 2384 vpxor (%r8),%xmm9,%xmm9 2385 vpxor (%r8),%xmm10,%xmm10 2386 vpxor (%r8),%xmm11,%xmm11 2387 vpxor (%r8),%xmm12,%xmm12 2388 2389 vmovdqu 16(%r8),%xmm4 2390 vaesenc %xmm4,%xmm7,%xmm7 2391 vaesenc %xmm4,%xmm8,%xmm8 2392 vaesenc %xmm4,%xmm9,%xmm9 2393 vaesenc %xmm4,%xmm10,%xmm10 2394 vaesenc %xmm4,%xmm11,%xmm11 2395 vaesenc %xmm4,%xmm12,%xmm12 2396 2397 vmovdqu 32(%r8),%xmm4 2398 vaesenc %xmm4,%xmm7,%xmm7 2399 vaesenc %xmm4,%xmm8,%xmm8 2400 vaesenc %xmm4,%xmm9,%xmm9 2401 vaesenc %xmm4,%xmm10,%xmm10 2402 vaesenc %xmm4,%xmm11,%xmm11 2403 vaesenc %xmm4,%xmm12,%xmm12 2404 2405 vmovdqu 48(%r8),%xmm4 2406 vaesenc %xmm4,%xmm7,%xmm7 2407 vaesenc %xmm4,%xmm8,%xmm8 2408 vaesenc %xmm4,%xmm9,%xmm9 2409 vaesenc %xmm4,%xmm10,%xmm10 2410 vaesenc %xmm4,%xmm11,%xmm11 2411 vaesenc %xmm4,%xmm12,%xmm12 2412 2413 vmovdqu 64(%r8),%xmm4 2414 vaesenc %xmm4,%xmm7,%xmm7 2415 vaesenc %xmm4,%xmm8,%xmm8 2416 vaesenc %xmm4,%xmm9,%xmm9 2417 vaesenc %xmm4,%xmm10,%xmm10 2418 vaesenc %xmm4,%xmm11,%xmm11 2419 vaesenc %xmm4,%xmm12,%xmm12 2420 2421 vmovdqu 80(%r8),%xmm4 2422 vaesenc %xmm4,%xmm7,%xmm7 2423 vaesenc %xmm4,%xmm8,%xmm8 2424 vaesenc %xmm4,%xmm9,%xmm9 2425 vaesenc %xmm4,%xmm10,%xmm10 2426 vaesenc %xmm4,%xmm11,%xmm11 2427 vaesenc %xmm4,%xmm12,%xmm12 2428 2429 vmovdqu 96(%r8),%xmm4 2430 vaesenc %xmm4,%xmm7,%xmm7 2431 vaesenc %xmm4,%xmm8,%xmm8 2432 vaesenc %xmm4,%xmm9,%xmm9 2433 vaesenc %xmm4,%xmm10,%xmm10 2434 vaesenc %xmm4,%xmm11,%xmm11 2435 vaesenc %xmm4,%xmm12,%xmm12 2436 2437 vmovdqu 112(%r8),%xmm4 2438 vaesenc %xmm4,%xmm7,%xmm7 2439 vaesenc %xmm4,%xmm8,%xmm8 2440 vaesenc %xmm4,%xmm9,%xmm9 2441 vaesenc %xmm4,%xmm10,%xmm10 2442 vaesenc %xmm4,%xmm11,%xmm11 2443 vaesenc %xmm4,%xmm12,%xmm12 2444 2445 vmovdqu 128(%r8),%xmm4 2446 vaesenc %xmm4,%xmm7,%xmm7 2447 vaesenc %xmm4,%xmm8,%xmm8 2448 vaesenc %xmm4,%xmm9,%xmm9 2449 vaesenc %xmm4,%xmm10,%xmm10 2450 vaesenc %xmm4,%xmm11,%xmm11 2451 vaesenc %xmm4,%xmm12,%xmm12 2452 2453 vmovdqu 144(%r8),%xmm4 2454 vaesenc %xmm4,%xmm7,%xmm7 2455 vaesenc %xmm4,%xmm8,%xmm8 2456 vaesenc %xmm4,%xmm9,%xmm9 2457 vaesenc %xmm4,%xmm10,%xmm10 2458 vaesenc %xmm4,%xmm11,%xmm11 2459 vaesenc %xmm4,%xmm12,%xmm12 2460 2461 vmovdqu 160(%r8),%xmm4 2462 vaesenc %xmm4,%xmm7,%xmm7 2463 vaesenc %xmm4,%xmm8,%xmm8 2464 vaesenc %xmm4,%xmm9,%xmm9 2465 vaesenc %xmm4,%xmm10,%xmm10 2466 vaesenc %xmm4,%xmm11,%xmm11 2467 vaesenc %xmm4,%xmm12,%xmm12 2468 2469 vmovdqu 176(%r8),%xmm4 2470 vaesenc %xmm4,%xmm7,%xmm7 2471 vaesenc %xmm4,%xmm8,%xmm8 2472 vaesenc %xmm4,%xmm9,%xmm9 2473 vaesenc %xmm4,%xmm10,%xmm10 2474 vaesenc %xmm4,%xmm11,%xmm11 2475 vaesenc %xmm4,%xmm12,%xmm12 2476 2477 vmovdqu 192(%r8),%xmm4 2478 vaesenc %xmm4,%xmm7,%xmm7 2479 vaesenc %xmm4,%xmm8,%xmm8 2480 vaesenc %xmm4,%xmm9,%xmm9 2481 vaesenc %xmm4,%xmm10,%xmm10 2482 vaesenc %xmm4,%xmm11,%xmm11 2483 vaesenc %xmm4,%xmm12,%xmm12 2484 2485 vmovdqu 208(%r8),%xmm4 2486 vaesenc %xmm4,%xmm7,%xmm7 2487 vaesenc %xmm4,%xmm8,%xmm8 2488 vaesenc %xmm4,%xmm9,%xmm9 2489 vaesenc %xmm4,%xmm10,%xmm10 2490 vaesenc %xmm4,%xmm11,%xmm11 2491 vaesenc %xmm4,%xmm12,%xmm12 2492 2493 vmovdqu 224(%r8),%xmm4 2494 vaesenclast %xmm4,%xmm7,%xmm7 2495 vaesenclast %xmm4,%xmm8,%xmm8 2496 vaesenclast %xmm4,%xmm9,%xmm9 2497 vaesenclast %xmm4,%xmm10,%xmm10 2498 vaesenclast %xmm4,%xmm11,%xmm11 2499 vaesenclast %xmm4,%xmm12,%xmm12 2500 2501 2502 vpxor 0(%rdi),%xmm7,%xmm7 2503 vpxor 16(%rdi),%xmm8,%xmm8 2504 vpxor 32(%rdi),%xmm9,%xmm9 2505 vpxor 48(%rdi),%xmm10,%xmm10 2506 vpxor 64(%rdi),%xmm11,%xmm11 2507 vpxor 80(%rdi),%xmm12,%xmm12 2508 2509 vmovdqu %xmm7,0(%rsi) 2510 vmovdqu %xmm8,16(%rsi) 2511 vmovdqu %xmm9,32(%rsi) 2512 vmovdqu %xmm10,48(%rsi) 2513 vmovdqu %xmm11,64(%rsi) 2514 vmovdqu %xmm12,80(%rsi) 2515 2516 addq $96,%rdi 2517 addq $96,%rsi 2518 jmp L$256_dec_loop1 2519 2520 2521.p2align 6 2522L$256_dec_loop1: 2523 cmpq $96,%r9 2524 jb L$256_dec_finish_96 2525 subq $96,%r9 2526 2527 vmovdqa %xmm12,%xmm6 2528 vmovdqa %xmm11,16-32(%rax) 2529 vmovdqa %xmm10,32-32(%rax) 2530 vmovdqa %xmm9,48-32(%rax) 2531 vmovdqa %xmm8,64-32(%rax) 2532 vmovdqa %xmm7,80-32(%rax) 2533 2534 vmovdqa %xmm15,%xmm7 2535 vpaddd one(%rip),%xmm7,%xmm8 2536 vpaddd two(%rip),%xmm7,%xmm9 2537 vpaddd one(%rip),%xmm9,%xmm10 2538 vpaddd two(%rip),%xmm9,%xmm11 2539 vpaddd one(%rip),%xmm11,%xmm12 2540 vpaddd two(%rip),%xmm11,%xmm15 2541 2542 vmovdqa (%r8),%xmm4 2543 vpxor %xmm4,%xmm7,%xmm7 2544 vpxor %xmm4,%xmm8,%xmm8 2545 vpxor %xmm4,%xmm9,%xmm9 2546 vpxor %xmm4,%xmm10,%xmm10 2547 vpxor %xmm4,%xmm11,%xmm11 2548 vpxor %xmm4,%xmm12,%xmm12 2549 2550 vmovdqu 0-32(%rcx),%xmm4 2551 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2 2552 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3 2553 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm1 2554 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm4 2555 vpxor %xmm4,%xmm1,%xmm1 2556 2557 vmovdqu 16(%r8),%xmm4 2558 vaesenc %xmm4,%xmm7,%xmm7 2559 vaesenc %xmm4,%xmm8,%xmm8 2560 vaesenc %xmm4,%xmm9,%xmm9 2561 vaesenc %xmm4,%xmm10,%xmm10 2562 vaesenc %xmm4,%xmm11,%xmm11 2563 vaesenc %xmm4,%xmm12,%xmm12 2564 2565 vmovdqu -16(%rax),%xmm6 2566 vmovdqu -16(%rcx),%xmm13 2567 2568 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2569 vpxor %xmm4,%xmm1,%xmm1 2570 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2571 vpxor %xmm4,%xmm2,%xmm2 2572 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2573 vpxor %xmm4,%xmm3,%xmm3 2574 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2575 vpxor %xmm4,%xmm1,%xmm1 2576 2577 2578 vmovdqu 32(%r8),%xmm4 2579 vaesenc %xmm4,%xmm7,%xmm7 2580 vaesenc %xmm4,%xmm8,%xmm8 2581 vaesenc %xmm4,%xmm9,%xmm9 2582 vaesenc %xmm4,%xmm10,%xmm10 2583 vaesenc %xmm4,%xmm11,%xmm11 2584 vaesenc %xmm4,%xmm12,%xmm12 2585 2586 vmovdqu 0(%rax),%xmm6 2587 vmovdqu 0(%rcx),%xmm13 2588 2589 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2590 vpxor %xmm4,%xmm1,%xmm1 2591 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2592 vpxor %xmm4,%xmm2,%xmm2 2593 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2594 vpxor %xmm4,%xmm3,%xmm3 2595 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2596 vpxor %xmm4,%xmm1,%xmm1 2597 2598 2599 vmovdqu 48(%r8),%xmm4 2600 vaesenc %xmm4,%xmm7,%xmm7 2601 vaesenc %xmm4,%xmm8,%xmm8 2602 vaesenc %xmm4,%xmm9,%xmm9 2603 vaesenc %xmm4,%xmm10,%xmm10 2604 vaesenc %xmm4,%xmm11,%xmm11 2605 vaesenc %xmm4,%xmm12,%xmm12 2606 2607 vmovdqu 16(%rax),%xmm6 2608 vmovdqu 16(%rcx),%xmm13 2609 2610 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2611 vpxor %xmm4,%xmm1,%xmm1 2612 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2613 vpxor %xmm4,%xmm2,%xmm2 2614 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2615 vpxor %xmm4,%xmm3,%xmm3 2616 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2617 vpxor %xmm4,%xmm1,%xmm1 2618 2619 2620 vmovdqu 64(%r8),%xmm4 2621 vaesenc %xmm4,%xmm7,%xmm7 2622 vaesenc %xmm4,%xmm8,%xmm8 2623 vaesenc %xmm4,%xmm9,%xmm9 2624 vaesenc %xmm4,%xmm10,%xmm10 2625 vaesenc %xmm4,%xmm11,%xmm11 2626 vaesenc %xmm4,%xmm12,%xmm12 2627 2628 vmovdqu 32(%rax),%xmm6 2629 vmovdqu 32(%rcx),%xmm13 2630 2631 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2632 vpxor %xmm4,%xmm1,%xmm1 2633 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2634 vpxor %xmm4,%xmm2,%xmm2 2635 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2636 vpxor %xmm4,%xmm3,%xmm3 2637 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2638 vpxor %xmm4,%xmm1,%xmm1 2639 2640 2641 vmovdqu 80(%r8),%xmm4 2642 vaesenc %xmm4,%xmm7,%xmm7 2643 vaesenc %xmm4,%xmm8,%xmm8 2644 vaesenc %xmm4,%xmm9,%xmm9 2645 vaesenc %xmm4,%xmm10,%xmm10 2646 vaesenc %xmm4,%xmm11,%xmm11 2647 vaesenc %xmm4,%xmm12,%xmm12 2648 2649 vmovdqu 96(%r8),%xmm4 2650 vaesenc %xmm4,%xmm7,%xmm7 2651 vaesenc %xmm4,%xmm8,%xmm8 2652 vaesenc %xmm4,%xmm9,%xmm9 2653 vaesenc %xmm4,%xmm10,%xmm10 2654 vaesenc %xmm4,%xmm11,%xmm11 2655 vaesenc %xmm4,%xmm12,%xmm12 2656 2657 vmovdqu 112(%r8),%xmm4 2658 vaesenc %xmm4,%xmm7,%xmm7 2659 vaesenc %xmm4,%xmm8,%xmm8 2660 vaesenc %xmm4,%xmm9,%xmm9 2661 vaesenc %xmm4,%xmm10,%xmm10 2662 vaesenc %xmm4,%xmm11,%xmm11 2663 vaesenc %xmm4,%xmm12,%xmm12 2664 2665 2666 vmovdqa 80-32(%rax),%xmm6 2667 vpxor %xmm0,%xmm6,%xmm6 2668 vmovdqu 80-32(%rcx),%xmm5 2669 2670 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4 2671 vpxor %xmm4,%xmm1,%xmm1 2672 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4 2673 vpxor %xmm4,%xmm2,%xmm2 2674 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4 2675 vpxor %xmm4,%xmm3,%xmm3 2676 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4 2677 vpxor %xmm4,%xmm1,%xmm1 2678 2679 vmovdqu 128(%r8),%xmm4 2680 vaesenc %xmm4,%xmm7,%xmm7 2681 vaesenc %xmm4,%xmm8,%xmm8 2682 vaesenc %xmm4,%xmm9,%xmm9 2683 vaesenc %xmm4,%xmm10,%xmm10 2684 vaesenc %xmm4,%xmm11,%xmm11 2685 vaesenc %xmm4,%xmm12,%xmm12 2686 2687 2688 vpsrldq $8,%xmm1,%xmm4 2689 vpxor %xmm4,%xmm2,%xmm5 2690 vpslldq $8,%xmm1,%xmm4 2691 vpxor %xmm4,%xmm3,%xmm0 2692 2693 vmovdqa poly(%rip),%xmm3 2694 2695 vmovdqu 144(%r8),%xmm4 2696 vaesenc %xmm4,%xmm7,%xmm7 2697 vaesenc %xmm4,%xmm8,%xmm8 2698 vaesenc %xmm4,%xmm9,%xmm9 2699 vaesenc %xmm4,%xmm10,%xmm10 2700 vaesenc %xmm4,%xmm11,%xmm11 2701 vaesenc %xmm4,%xmm12,%xmm12 2702 2703 vmovdqu 160(%r8),%xmm4 2704 vaesenc %xmm4,%xmm7,%xmm7 2705 vaesenc %xmm4,%xmm8,%xmm8 2706 vaesenc %xmm4,%xmm9,%xmm9 2707 vaesenc %xmm4,%xmm10,%xmm10 2708 vaesenc %xmm4,%xmm11,%xmm11 2709 vaesenc %xmm4,%xmm12,%xmm12 2710 2711 vmovdqu 176(%r8),%xmm4 2712 vaesenc %xmm4,%xmm7,%xmm7 2713 vaesenc %xmm4,%xmm8,%xmm8 2714 vaesenc %xmm4,%xmm9,%xmm9 2715 vaesenc %xmm4,%xmm10,%xmm10 2716 vaesenc %xmm4,%xmm11,%xmm11 2717 vaesenc %xmm4,%xmm12,%xmm12 2718 2719 vmovdqu 192(%r8),%xmm4 2720 vaesenc %xmm4,%xmm7,%xmm7 2721 vaesenc %xmm4,%xmm8,%xmm8 2722 vaesenc %xmm4,%xmm9,%xmm9 2723 vaesenc %xmm4,%xmm10,%xmm10 2724 vaesenc %xmm4,%xmm11,%xmm11 2725 vaesenc %xmm4,%xmm12,%xmm12 2726 2727 vmovdqu 208(%r8),%xmm4 2728 vaesenc %xmm4,%xmm7,%xmm7 2729 vaesenc %xmm4,%xmm8,%xmm8 2730 vaesenc %xmm4,%xmm9,%xmm9 2731 vaesenc %xmm4,%xmm10,%xmm10 2732 vaesenc %xmm4,%xmm11,%xmm11 2733 vaesenc %xmm4,%xmm12,%xmm12 2734 2735 vmovdqu 224(%r8),%xmm6 2736 vpalignr $8,%xmm0,%xmm0,%xmm2 2737 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 2738 vpxor %xmm0,%xmm2,%xmm0 2739 2740 vpxor 0(%rdi),%xmm6,%xmm4 2741 vaesenclast %xmm4,%xmm7,%xmm7 2742 vpxor 16(%rdi),%xmm6,%xmm4 2743 vaesenclast %xmm4,%xmm8,%xmm8 2744 vpxor 32(%rdi),%xmm6,%xmm4 2745 vaesenclast %xmm4,%xmm9,%xmm9 2746 vpxor 48(%rdi),%xmm6,%xmm4 2747 vaesenclast %xmm4,%xmm10,%xmm10 2748 vpxor 64(%rdi),%xmm6,%xmm4 2749 vaesenclast %xmm4,%xmm11,%xmm11 2750 vpxor 80(%rdi),%xmm6,%xmm4 2751 vaesenclast %xmm4,%xmm12,%xmm12 2752 2753 vpalignr $8,%xmm0,%xmm0,%xmm2 2754 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 2755 vpxor %xmm0,%xmm2,%xmm0 2756 2757 vmovdqu %xmm7,0(%rsi) 2758 vmovdqu %xmm8,16(%rsi) 2759 vmovdqu %xmm9,32(%rsi) 2760 vmovdqu %xmm10,48(%rsi) 2761 vmovdqu %xmm11,64(%rsi) 2762 vmovdqu %xmm12,80(%rsi) 2763 2764 vpxor %xmm5,%xmm0,%xmm0 2765 2766 leaq 96(%rdi),%rdi 2767 leaq 96(%rsi),%rsi 2768 jmp L$256_dec_loop1 2769 2770L$256_dec_finish_96: 2771 vmovdqa %xmm12,%xmm6 2772 vmovdqa %xmm11,16-32(%rax) 2773 vmovdqa %xmm10,32-32(%rax) 2774 vmovdqa %xmm9,48-32(%rax) 2775 vmovdqa %xmm8,64-32(%rax) 2776 vmovdqa %xmm7,80-32(%rax) 2777 2778 vmovdqu 0-32(%rcx),%xmm4 2779 vpclmulqdq $0x10,%xmm4,%xmm6,%xmm1 2780 vpclmulqdq $0x11,%xmm4,%xmm6,%xmm2 2781 vpclmulqdq $0x00,%xmm4,%xmm6,%xmm3 2782 vpclmulqdq $0x01,%xmm4,%xmm6,%xmm4 2783 vpxor %xmm4,%xmm1,%xmm1 2784 2785 vmovdqu -16(%rax),%xmm6 2786 vmovdqu -16(%rcx),%xmm13 2787 2788 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2789 vpxor %xmm4,%xmm1,%xmm1 2790 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2791 vpxor %xmm4,%xmm2,%xmm2 2792 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2793 vpxor %xmm4,%xmm3,%xmm3 2794 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2795 vpxor %xmm4,%xmm1,%xmm1 2796 2797 vmovdqu 0(%rax),%xmm6 2798 vmovdqu 0(%rcx),%xmm13 2799 2800 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2801 vpxor %xmm4,%xmm1,%xmm1 2802 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2803 vpxor %xmm4,%xmm2,%xmm2 2804 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2805 vpxor %xmm4,%xmm3,%xmm3 2806 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2807 vpxor %xmm4,%xmm1,%xmm1 2808 2809 vmovdqu 16(%rax),%xmm6 2810 vmovdqu 16(%rcx),%xmm13 2811 2812 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2813 vpxor %xmm4,%xmm1,%xmm1 2814 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2815 vpxor %xmm4,%xmm2,%xmm2 2816 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2817 vpxor %xmm4,%xmm3,%xmm3 2818 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2819 vpxor %xmm4,%xmm1,%xmm1 2820 2821 vmovdqu 32(%rax),%xmm6 2822 vmovdqu 32(%rcx),%xmm13 2823 2824 vpclmulqdq $0x10,%xmm13,%xmm6,%xmm4 2825 vpxor %xmm4,%xmm1,%xmm1 2826 vpclmulqdq $0x11,%xmm13,%xmm6,%xmm4 2827 vpxor %xmm4,%xmm2,%xmm2 2828 vpclmulqdq $0x00,%xmm13,%xmm6,%xmm4 2829 vpxor %xmm4,%xmm3,%xmm3 2830 vpclmulqdq $0x01,%xmm13,%xmm6,%xmm4 2831 vpxor %xmm4,%xmm1,%xmm1 2832 2833 2834 vmovdqu 80-32(%rax),%xmm6 2835 vpxor %xmm0,%xmm6,%xmm6 2836 vmovdqu 80-32(%rcx),%xmm5 2837 vpclmulqdq $0x11,%xmm5,%xmm6,%xmm4 2838 vpxor %xmm4,%xmm2,%xmm2 2839 vpclmulqdq $0x00,%xmm5,%xmm6,%xmm4 2840 vpxor %xmm4,%xmm3,%xmm3 2841 vpclmulqdq $0x10,%xmm5,%xmm6,%xmm4 2842 vpxor %xmm4,%xmm1,%xmm1 2843 vpclmulqdq $0x01,%xmm5,%xmm6,%xmm4 2844 vpxor %xmm4,%xmm1,%xmm1 2845 2846 vpsrldq $8,%xmm1,%xmm4 2847 vpxor %xmm4,%xmm2,%xmm5 2848 vpslldq $8,%xmm1,%xmm4 2849 vpxor %xmm4,%xmm3,%xmm0 2850 2851 vmovdqa poly(%rip),%xmm3 2852 2853 vpalignr $8,%xmm0,%xmm0,%xmm2 2854 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 2855 vpxor %xmm0,%xmm2,%xmm0 2856 2857 vpalignr $8,%xmm0,%xmm0,%xmm2 2858 vpclmulqdq $0x10,%xmm3,%xmm0,%xmm0 2859 vpxor %xmm0,%xmm2,%xmm0 2860 2861 vpxor %xmm5,%xmm0,%xmm0 2862 2863L$256_dec_loop2: 2864 2865 2866 2867 cmpq $16,%r9 2868 jb L$256_dec_out 2869 subq $16,%r9 2870 2871 vmovdqa %xmm15,%xmm2 2872 vpaddd one(%rip),%xmm15,%xmm15 2873 2874 vpxor 0(%r8),%xmm2,%xmm2 2875 vaesenc 16(%r8),%xmm2,%xmm2 2876 vaesenc 32(%r8),%xmm2,%xmm2 2877 vaesenc 48(%r8),%xmm2,%xmm2 2878 vaesenc 64(%r8),%xmm2,%xmm2 2879 vaesenc 80(%r8),%xmm2,%xmm2 2880 vaesenc 96(%r8),%xmm2,%xmm2 2881 vaesenc 112(%r8),%xmm2,%xmm2 2882 vaesenc 128(%r8),%xmm2,%xmm2 2883 vaesenc 144(%r8),%xmm2,%xmm2 2884 vaesenc 160(%r8),%xmm2,%xmm2 2885 vaesenc 176(%r8),%xmm2,%xmm2 2886 vaesenc 192(%r8),%xmm2,%xmm2 2887 vaesenc 208(%r8),%xmm2,%xmm2 2888 vaesenclast 224(%r8),%xmm2,%xmm2 2889 vpxor (%rdi),%xmm2,%xmm2 2890 vmovdqu %xmm2,(%rsi) 2891 addq $16,%rdi 2892 addq $16,%rsi 2893 2894 vpxor %xmm2,%xmm0,%xmm0 2895 vmovdqa -32(%rcx),%xmm1 2896 call GFMUL 2897 2898 jmp L$256_dec_loop2 2899 2900L$256_dec_out: 2901 vmovdqu %xmm0,(%rdx) 2902 .byte 0xf3,0xc3 2903 2904 2905.globl _aes256gcmsiv_kdf 2906.private_extern _aes256gcmsiv_kdf 2907 2908.p2align 4 2909_aes256gcmsiv_kdf: 2910 2911 2912 2913 2914 2915 vmovdqa (%rdx),%xmm1 2916 vmovdqa 0(%rdi),%xmm4 2917 vmovdqa and_mask(%rip),%xmm11 2918 vmovdqa one(%rip),%xmm8 2919 vpshufd $0x90,%xmm4,%xmm4 2920 vpand %xmm11,%xmm4,%xmm4 2921 vpaddd %xmm8,%xmm4,%xmm6 2922 vpaddd %xmm8,%xmm6,%xmm7 2923 vpaddd %xmm8,%xmm7,%xmm11 2924 vpaddd %xmm8,%xmm11,%xmm12 2925 vpaddd %xmm8,%xmm12,%xmm13 2926 2927 vpxor %xmm1,%xmm4,%xmm4 2928 vpxor %xmm1,%xmm6,%xmm6 2929 vpxor %xmm1,%xmm7,%xmm7 2930 vpxor %xmm1,%xmm11,%xmm11 2931 vpxor %xmm1,%xmm12,%xmm12 2932 vpxor %xmm1,%xmm13,%xmm13 2933 2934 vmovdqa 16(%rdx),%xmm1 2935 vaesenc %xmm1,%xmm4,%xmm4 2936 vaesenc %xmm1,%xmm6,%xmm6 2937 vaesenc %xmm1,%xmm7,%xmm7 2938 vaesenc %xmm1,%xmm11,%xmm11 2939 vaesenc %xmm1,%xmm12,%xmm12 2940 vaesenc %xmm1,%xmm13,%xmm13 2941 2942 vmovdqa 32(%rdx),%xmm2 2943 vaesenc %xmm2,%xmm4,%xmm4 2944 vaesenc %xmm2,%xmm6,%xmm6 2945 vaesenc %xmm2,%xmm7,%xmm7 2946 vaesenc %xmm2,%xmm11,%xmm11 2947 vaesenc %xmm2,%xmm12,%xmm12 2948 vaesenc %xmm2,%xmm13,%xmm13 2949 2950 vmovdqa 48(%rdx),%xmm1 2951 vaesenc %xmm1,%xmm4,%xmm4 2952 vaesenc %xmm1,%xmm6,%xmm6 2953 vaesenc %xmm1,%xmm7,%xmm7 2954 vaesenc %xmm1,%xmm11,%xmm11 2955 vaesenc %xmm1,%xmm12,%xmm12 2956 vaesenc %xmm1,%xmm13,%xmm13 2957 2958 vmovdqa 64(%rdx),%xmm2 2959 vaesenc %xmm2,%xmm4,%xmm4 2960 vaesenc %xmm2,%xmm6,%xmm6 2961 vaesenc %xmm2,%xmm7,%xmm7 2962 vaesenc %xmm2,%xmm11,%xmm11 2963 vaesenc %xmm2,%xmm12,%xmm12 2964 vaesenc %xmm2,%xmm13,%xmm13 2965 2966 vmovdqa 80(%rdx),%xmm1 2967 vaesenc %xmm1,%xmm4,%xmm4 2968 vaesenc %xmm1,%xmm6,%xmm6 2969 vaesenc %xmm1,%xmm7,%xmm7 2970 vaesenc %xmm1,%xmm11,%xmm11 2971 vaesenc %xmm1,%xmm12,%xmm12 2972 vaesenc %xmm1,%xmm13,%xmm13 2973 2974 vmovdqa 96(%rdx),%xmm2 2975 vaesenc %xmm2,%xmm4,%xmm4 2976 vaesenc %xmm2,%xmm6,%xmm6 2977 vaesenc %xmm2,%xmm7,%xmm7 2978 vaesenc %xmm2,%xmm11,%xmm11 2979 vaesenc %xmm2,%xmm12,%xmm12 2980 vaesenc %xmm2,%xmm13,%xmm13 2981 2982 vmovdqa 112(%rdx),%xmm1 2983 vaesenc %xmm1,%xmm4,%xmm4 2984 vaesenc %xmm1,%xmm6,%xmm6 2985 vaesenc %xmm1,%xmm7,%xmm7 2986 vaesenc %xmm1,%xmm11,%xmm11 2987 vaesenc %xmm1,%xmm12,%xmm12 2988 vaesenc %xmm1,%xmm13,%xmm13 2989 2990 vmovdqa 128(%rdx),%xmm2 2991 vaesenc %xmm2,%xmm4,%xmm4 2992 vaesenc %xmm2,%xmm6,%xmm6 2993 vaesenc %xmm2,%xmm7,%xmm7 2994 vaesenc %xmm2,%xmm11,%xmm11 2995 vaesenc %xmm2,%xmm12,%xmm12 2996 vaesenc %xmm2,%xmm13,%xmm13 2997 2998 vmovdqa 144(%rdx),%xmm1 2999 vaesenc %xmm1,%xmm4,%xmm4 3000 vaesenc %xmm1,%xmm6,%xmm6 3001 vaesenc %xmm1,%xmm7,%xmm7 3002 vaesenc %xmm1,%xmm11,%xmm11 3003 vaesenc %xmm1,%xmm12,%xmm12 3004 vaesenc %xmm1,%xmm13,%xmm13 3005 3006 vmovdqa 160(%rdx),%xmm2 3007 vaesenc %xmm2,%xmm4,%xmm4 3008 vaesenc %xmm2,%xmm6,%xmm6 3009 vaesenc %xmm2,%xmm7,%xmm7 3010 vaesenc %xmm2,%xmm11,%xmm11 3011 vaesenc %xmm2,%xmm12,%xmm12 3012 vaesenc %xmm2,%xmm13,%xmm13 3013 3014 vmovdqa 176(%rdx),%xmm1 3015 vaesenc %xmm1,%xmm4,%xmm4 3016 vaesenc %xmm1,%xmm6,%xmm6 3017 vaesenc %xmm1,%xmm7,%xmm7 3018 vaesenc %xmm1,%xmm11,%xmm11 3019 vaesenc %xmm1,%xmm12,%xmm12 3020 vaesenc %xmm1,%xmm13,%xmm13 3021 3022 vmovdqa 192(%rdx),%xmm2 3023 vaesenc %xmm2,%xmm4,%xmm4 3024 vaesenc %xmm2,%xmm6,%xmm6 3025 vaesenc %xmm2,%xmm7,%xmm7 3026 vaesenc %xmm2,%xmm11,%xmm11 3027 vaesenc %xmm2,%xmm12,%xmm12 3028 vaesenc %xmm2,%xmm13,%xmm13 3029 3030 vmovdqa 208(%rdx),%xmm1 3031 vaesenc %xmm1,%xmm4,%xmm4 3032 vaesenc %xmm1,%xmm6,%xmm6 3033 vaesenc %xmm1,%xmm7,%xmm7 3034 vaesenc %xmm1,%xmm11,%xmm11 3035 vaesenc %xmm1,%xmm12,%xmm12 3036 vaesenc %xmm1,%xmm13,%xmm13 3037 3038 vmovdqa 224(%rdx),%xmm2 3039 vaesenclast %xmm2,%xmm4,%xmm4 3040 vaesenclast %xmm2,%xmm6,%xmm6 3041 vaesenclast %xmm2,%xmm7,%xmm7 3042 vaesenclast %xmm2,%xmm11,%xmm11 3043 vaesenclast %xmm2,%xmm12,%xmm12 3044 vaesenclast %xmm2,%xmm13,%xmm13 3045 3046 3047 vmovdqa %xmm4,0(%rsi) 3048 vmovdqa %xmm6,16(%rsi) 3049 vmovdqa %xmm7,32(%rsi) 3050 vmovdqa %xmm11,48(%rsi) 3051 vmovdqa %xmm12,64(%rsi) 3052 vmovdqa %xmm13,80(%rsi) 3053 .byte 0xf3,0xc3 3054 3055 3056#endif 3057