1 ######################################################################
2 ## Constant-time SSSE3 AES core implementation.
5 ## By Mike Hamburg (Stanford University), 2009
8 ## For details see http://shiftleft.org/papers/vector_aes/ and
9 ## http://crypto.stanford.edu/vpaes/.
11 # *** This file is auto-generated ***
37 movdqa L$k_ipt(%rip),%xmm2
43 movdqa L$k_ipt+16(%rip),%xmm0
48 leaq L$k_mc_backward(%rip),%r10
61 movdqa -64(%r11,%r10,1),%xmm1
63 movdqa (%r11,%r10,1),%xmm4
104 movdqa -96(%r10),%xmm4
105 movdqa -80(%r10),%xmm0
106 .byte 102,15,56,0,226
108 .byte 102,15,56,0,195
109 movdqa 64(%r11,%r10,1),%xmm1
111 .byte 102,15,56,0,193
126 movdqa L$k_dipt(%rip),%xmm2
133 .byte 102,15,56,0,208
134 movdqa L$k_dipt+16(%rip),%xmm0
136 leaq L$k_dsbd(%rip),%r10
137 .byte 102,15,56,0,193
140 movdqa L$k_mc_forward+48(%rip),%xmm5
151 movdqa -32(%r10),%xmm4
152 movdqa -16(%r10),%xmm1
153 .byte 102,15,56,0,226
154 .byte 102,15,56,0,203
158 movdqa 16(%r10),%xmm1
160 .byte 102,15,56,0,226
161 .byte 102,15,56,0,197
162 .byte 102,15,56,0,203
164 movdqa 32(%r10),%xmm4
166 movdqa 48(%r10),%xmm1
168 .byte 102,15,56,0,226
169 .byte 102,15,56,0,197
170 .byte 102,15,56,0,203
172 movdqa 64(%r10),%xmm4
174 movdqa 80(%r10),%xmm1
176 .byte 102,15,56,0,226
177 .byte 102,15,56,0,197
178 .byte 102,15,56,0,203
181 .byte 102,15,58,15,237,12
192 .byte 102,15,56,0,208
195 .byte 102,15,56,0,217
198 .byte 102,15,56,0,224
201 .byte 102,15,56,0,211
204 .byte 102,15,56,0,220
210 movdqa 96(%r10),%xmm4
211 .byte 102,15,56,0,226
213 movdqa 112(%r10),%xmm0
214 movdqa -352(%r11),%xmm2
215 .byte 102,15,56,0,195
217 .byte 102,15,56,0,194
228 _vpaes_schedule_core:
235 movdqa L$k_rcon(%rip),%xmm8
240 leaq L$k_ipt(%rip),%r11
241 call _vpaes_schedule_transform
244 leaq L$k_sr(%rip),%r10
246 jnz L$schedule_am_decrypting
252 L$schedule_am_decrypting:
254 movdqa (%r8,%r10,1),%xmm1
255 .byte 102,15,56,0,217
277 call _vpaes_schedule_round
279 jz L$schedule_mangle_last
280 call _vpaes_schedule_mangle
281 jmp L$oop_schedule_128
301 call _vpaes_schedule_transform
308 call _vpaes_schedule_round
309 .byte 102,15,58,15,198,8
310 call _vpaes_schedule_mangle
311 call _vpaes_schedule_192_smear
312 call _vpaes_schedule_mangle
313 call _vpaes_schedule_round
315 jz L$schedule_mangle_last
316 call _vpaes_schedule_mangle
317 call _vpaes_schedule_192_smear
318 jmp L$oop_schedule_192
332 movdqu 16(%rdi),%xmm0
333 call _vpaes_schedule_transform
337 call _vpaes_schedule_mangle
341 call _vpaes_schedule_round
343 jz L$schedule_mangle_last
344 call _vpaes_schedule_mangle
347 pshufd $255,%xmm0,%xmm0
350 call _vpaes_schedule_low_round
353 jmp L$oop_schedule_256
367 L$schedule_mangle_last:
369 leaq L$k_deskew(%rip),%r11
371 jnz L$schedule_mangle_last_dec
374 movdqa (%r8,%r10,1),%xmm1
375 .byte 102,15,56,0,193
376 leaq L$k_opt(%rip),%r11
379 L$schedule_mangle_last_dec:
381 pxor L$k_s63(%rip),%xmm0
382 call _vpaes_schedule_transform
413 _vpaes_schedule_192_smear:
414 pshufd $128,%xmm6,%xmm1
415 pshufd $254,%xmm7,%xmm0
444 _vpaes_schedule_round:
447 .byte 102,65,15,58,15,200,15
448 .byte 102,69,15,58,15,192,15
452 pshufd $255,%xmm0,%xmm0
453 .byte 102,15,58,15,192,1
458 _vpaes_schedule_low_round:
466 pxor L$k_s63(%rip),%xmm7
474 .byte 102,15,56,0,208
477 .byte 102,15,56,0,217
480 .byte 102,15,56,0,224
483 .byte 102,15,56,0,211
486 .byte 102,15,56,0,220
489 .byte 102,15,56,0,226
491 .byte 102,15,56,0,195
511 _vpaes_schedule_transform:
517 .byte 102,15,56,0,208
518 movdqa 16(%r11),%xmm0
519 .byte 102,15,56,0,193
549 _vpaes_schedule_mangle:
551 movdqa L$k_mc_forward(%rip),%xmm5
553 jnz L$schedule_mangle_dec
557 pxor L$k_s63(%rip),%xmm4
558 .byte 102,15,56,0,229
560 .byte 102,15,56,0,229
562 .byte 102,15,56,0,229
565 jmp L$schedule_mangle_both
567 L$schedule_mangle_dec:
569 leaq L$k_dksd(%rip),%r11
576 .byte 102,15,56,0,212
577 movdqa 16(%r11),%xmm3
578 .byte 102,15,56,0,217
580 .byte 102,15,56,0,221
582 movdqa 32(%r11),%xmm2
583 .byte 102,15,56,0,212
585 movdqa 48(%r11),%xmm3
586 .byte 102,15,56,0,217
588 .byte 102,15,56,0,221
590 movdqa 64(%r11),%xmm2
591 .byte 102,15,56,0,212
593 movdqa 80(%r11),%xmm3
594 .byte 102,15,56,0,217
596 .byte 102,15,56,0,221
598 movdqa 96(%r11),%xmm2
599 .byte 102,15,56,0,212
601 movdqa 112(%r11),%xmm3
602 .byte 102,15,56,0,217
607 L$schedule_mangle_both:
608 movdqa (%r8,%r10,1),%xmm1
609 .byte 102,15,56,0,217
619 .globl _vpaes_set_encrypt_key
622 _vpaes_set_encrypt_key:
630 call _vpaes_schedule_core
635 .globl _vpaes_set_decrypt_key
638 _vpaes_set_decrypt_key:
644 leaq 16(%rdx,%rax,1),%rdx
651 call _vpaes_schedule_core
656 .globl _vpaes_encrypt
662 call _vpaes_encrypt_core
667 .globl _vpaes_decrypt
673 call _vpaes_decrypt_core
677 .globl _vpaes_cbc_encrypt
694 call _vpaes_encrypt_core
696 movdqu %xmm0,(%rsi,%rdi,1)
705 call _vpaes_decrypt_core
708 movdqu %xmm0,(%rsi,%rdi,1)
726 leaq L$k_s0F(%rip),%r10
727 movdqa -32(%r10),%xmm10
728 movdqa -16(%r10),%xmm11
730 movdqa 48(%r10),%xmm13
731 movdqa 64(%r10),%xmm12
732 movdqa 80(%r10),%xmm15
733 movdqa 96(%r10),%xmm14
745 .quad 0x0E05060F0D080180, 0x040703090A0B0C02
746 .quad 0x01040A060F0B0780, 0x030D0E0C02050809
749 .quad 0x0F0F0F0F0F0F0F0F, 0x0F0F0F0F0F0F0F0F
752 .quad 0xC2B2E8985A2A7000, 0xCABAE09052227808
753 .quad 0x4C01307D317C4D00, 0xCD80B1FCB0FDCC81
756 .quad 0xB19BE18FCB503E00, 0xA5DF7A6E142AF544
757 .quad 0x3618D415FAE22300, 0x3BF7CCC10D2ED9EF
759 .quad 0xE27A93C60B712400, 0x5EB7E955BC982FCD
760 .quad 0x69EB88400AE12900, 0xC2A163C8AB82234A
762 .quad 0xD0D26D176FBDC700, 0x15AABF7AC502A878
763 .quad 0xCFE474A55FBB6A00, 0x8E1E90D1412B35FA
766 .quad 0x0407060500030201, 0x0C0F0E0D080B0A09
767 .quad 0x080B0A0904070605, 0x000302010C0F0E0D
768 .quad 0x0C0F0E0D080B0A09, 0x0407060500030201
769 .quad 0x000302010C0F0E0D, 0x080B0A0904070605
772 .quad 0x0605040702010003, 0x0E0D0C0F0A09080B
773 .quad 0x020100030E0D0C0F, 0x0A09080B06050407
774 .quad 0x0E0D0C0F0A09080B, 0x0605040702010003
775 .quad 0x0A09080B06050407, 0x020100030E0D0C0F
778 .quad 0x0706050403020100, 0x0F0E0D0C0B0A0908
779 .quad 0x030E09040F0A0500, 0x0B06010C07020D08
780 .quad 0x0F060D040B020900, 0x070E050C030A0108
781 .quad 0x0B0E0104070A0D00, 0x0306090C0F020508
784 .quad 0x1F8391B9AF9DEEB6, 0x702A98084D7C7D81
787 .quad 0x5B5B5B5B5B5B5B5B, 0x5B5B5B5B5B5B5B5B
790 .quad 0xFF9F4929D6B66000, 0xF7974121DEBE6808
791 .quad 0x01EDBD5150BCEC00, 0xE10D5DB1B05C0CE0
794 .quad 0x07E4A34047A4E300, 0x1DFEB95A5DBEF91A
795 .quad 0x5F36B5DC83EA6900, 0x2841C2ABF49D1E77
802 .quad 0xFEB91A5DA3E44700, 0x0740E3A45A1DBEF9
803 .quad 0x41C277F4B5368300, 0x5FDC69EAAB289D1E
805 .quad 0x9A4FCA1F8550D500, 0x03D653861CC94C99
806 .quad 0x115BEDA7B6FC4A00, 0xD993256F7E3482C8
808 .quad 0xD5031CCA1FC9D600, 0x53859A4C994F5086
809 .quad 0xA23196054FDC7BE8, 0xCD5EF96A20B31487
811 .quad 0xB6116FC87ED9A700, 0x4AED933482255BFC
812 .quad 0x4576516227143300, 0x8BB89FACE9DAFDCE
819 .quad 0x0F505B040B545F00, 0x154A411E114E451A
820 .quad 0x86E383E660056500, 0x12771772F491F194
823 .quad 0x851C03539A86D600, 0xCAD51F504F994CC9
824 .quad 0xC03B1789ECD74900, 0x725E2C9EB2FBA565
826 .quad 0x7D57CCDFE6B1A200, 0xF56E9B13882A4439
827 .quad 0x3CE2FAF724C6CB00, 0x2931180D15DEEFD3
829 .quad 0xD022649296B44200, 0x602646F6B0F2D404
830 .quad 0xC19498A6CD596700, 0xF3FF0C3E3255AA6B
832 .quad 0x46F2929626D4D000, 0x2242600464B4F6B0
833 .quad 0x0C55A6CDFFAAC100, 0x9467F36B98593E32
835 .quad 0x1387EA537EF94000, 0xC7AA6DB9D4943E2D
836 .quad 0x12D7560F93441D00, 0xCA4B8159D8C58E9C
837 .byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,105,111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54,52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105,118,101,114,115,105,116,121,41,0
841 .section .note.GNU-stack,"",%progbits