blob: c8a5262c8d364f596f922dbd0cf55252d713cf62 [file] [log] [blame]
Robert Sloan8ff03552017-06-14 12:40:58 -07001#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