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 ***
17 .long 218628480,235210255,168496130,67568393
18 .long 252381056,17041926,33884169,51187212
19 .long 252645135,252645135,252645135,252645135
20 .long 1512730624,3266504856,1377990664,3401244816
21 .long 830229760,1275146365,2969422977,3447763452
22 .long 3411033600,2979783055,338359620,2782886510
23 .long 4209124096,907596821,221174255,1006095553
24 .long 191964160,3799684038,3164090317,1589111125
25 .long 182528256,1777043520,2877432650,3265356744
26 .long 1874708224,3503451415,3305285752,363511674
27 .long 1606117888,3487855781,1093350906,2384367825
28 .long 197121,67569157,134941193,202313229
29 .long 67569157,134941193,202313229,197121
30 .long 134941193,202313229,197121,67569157
31 .long 202313229,197121,67569157,134941193
32 .long 33619971,100992007,168364043,235736079
33 .long 235736079,33619971,100992007,168364043
34 .long 168364043,235736079,33619971,100992007
35 .long 100992007,168364043,235736079,33619971
36 .long 50462976,117835012,185207048,252579084
37 .long 252314880,51251460,117574920,184942860
38 .long 184682752,252054788,50987272,118359308
39 .long 118099200,185467140,251790600,50727180
40 .long 2946363062,528716217,1300004225,1881839624
41 .long 1532713819,1532713819,1532713819,1532713819
42 .long 3602276352,4288629033,3737020424,4153884961
43 .long 1354558464,32357713,2958822624,3775749553
44 .long 1201988352,132424512,1572796698,503232858
45 .long 2213177600,1597421020,4103937655,675398315
46 .long 2749646592,4273543773,1511898873,121693092
47 .long 3040248576,1103263732,2871565598,1608280554
48 .long 2236667136,2588920351,482954393,64377734
49 .long 3069987328,291237287,2117370568,3650299247
50 .long 533321216,3573750986,2572112006,1401264716
51 .long 1339849704,2721158661,548607111,3445553514
52 .long 2128193280,3054596040,2183486460,1257083700
53 .long 655635200,1165381986,3923443150,2344132524
54 .long 190078720,256924420,290342170,357187870
55 .long 1610966272,2263057382,4103205268,309794674
56 .long 2592527872,2233205587,1335446729,3402964816
57 .long 3973531904,3225098121,3002836325,1918774430
58 .long 3870401024,2102906079,2284471353,4117666579
59 .long 617007872,1021508343,366931923,691083277
60 .long 2528395776,3491914898,2968704004,1613121270
61 .long 3445188352,3247741094,844474987,4093578302
62 .long 651481088,1190302358,1689581232,574775300
63 .long 4289380608,206939853,2555985458,2489840491
64 .long 2130264064,327674451,3566485037,3349835193
65 .long 2470714624,316102159,3636825756,3393945945
66 .byte 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
67 .byte 111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
68 .byte 83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
69 .byte 114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
70 .byte 118,101,114,115,105,116,121,41,0
75 movdqa -48(%ebp),%xmm7
76 movdqa -16(%ebp),%xmm6
100 .byte 102,15,56,0,226
101 .byte 102,15,56,0,195
103 movdqa 64(%ebp),%xmm5
105 movdqa -64(%ebx,%ecx,1),%xmm1
106 .byte 102,15,56,0,234
107 movdqa 80(%ebp),%xmm2
108 movdqa (%ebx,%ecx,1),%xmm4
109 .byte 102,15,56,0,211
112 .byte 102,15,56,0,193
115 .byte 102,15,56,0,220
118 .byte 102,15,56,0,193
124 movdqa -32(%ebp),%xmm5
128 .byte 102,15,56,0,232
131 .byte 102,15,56,0,217
134 .byte 102,15,56,0,224
137 .byte 102,15,56,0,211
140 .byte 102,15,56,0,220
144 movdqa 96(%ebp),%xmm4
145 movdqa 112(%ebp),%xmm0
146 .byte 102,15,56,0,226
148 .byte 102,15,56,0,195
149 movdqa 64(%ebx,%ecx,1),%xmm1
151 .byte 102,15,56,0,193
154 __vpaes_decrypt_core:
158 movdqa -64(%ebx),%xmm2
165 .byte 102,15,56,0,208
166 movdqa -48(%ebx),%xmm0
168 .byte 102,15,56,0,193
171 movdqa 176(%ebp),%xmm5
174 leal -352(%ebx,%ecx,1),%ecx
178 movdqa -32(%ebx),%xmm4
179 movdqa -16(%ebx),%xmm1
180 .byte 102,15,56,0,226
181 .byte 102,15,56,0,203
185 movdqa 16(%ebx),%xmm1
186 .byte 102,15,56,0,226
187 .byte 102,15,56,0,197
188 .byte 102,15,56,0,203
190 movdqa 32(%ebx),%xmm4
192 movdqa 48(%ebx),%xmm1
193 .byte 102,15,56,0,226
194 .byte 102,15,56,0,197
195 .byte 102,15,56,0,203
197 movdqa 64(%ebx),%xmm4
199 movdqa 80(%ebx),%xmm1
200 .byte 102,15,56,0,226
201 .byte 102,15,56,0,197
202 .byte 102,15,56,0,203
205 .byte 102,15,58,15,237,12
210 movdqa -32(%ebp),%xmm2
214 .byte 102,15,56,0,208
217 .byte 102,15,56,0,217
220 .byte 102,15,56,0,224
223 .byte 102,15,56,0,211
226 .byte 102,15,56,0,220
230 movdqa 96(%ebx),%xmm4
231 .byte 102,15,56,0,226
233 movdqa 112(%ebx),%xmm0
235 .byte 102,15,56,0,195
237 .byte 102,15,56,0,194
240 __vpaes_schedule_core:
243 movdqa 320(%ebp),%xmm2
247 call __vpaes_schedule_transform
250 jnz L004schedule_am_decrypting
253 L004schedule_am_decrypting:
254 movdqa 256(%ebp,%ecx,1),%xmm1
255 .byte 102,15,56,0,217
264 L009loop_schedule_128:
265 call __vpaes_schedule_round
267 jz L010schedule_mangle_last
268 call __vpaes_schedule_mangle
269 jmp L009loop_schedule_128
273 call __vpaes_schedule_transform
278 L011loop_schedule_192:
279 call __vpaes_schedule_round
280 .byte 102,15,58,15,198,8
281 call __vpaes_schedule_mangle
282 call __vpaes_schedule_192_smear
283 call __vpaes_schedule_mangle
284 call __vpaes_schedule_round
286 jz L010schedule_mangle_last
287 call __vpaes_schedule_mangle
288 call __vpaes_schedule_192_smear
289 jmp L011loop_schedule_192
292 movdqu 16(%esi),%xmm0
293 call __vpaes_schedule_transform
295 L012loop_schedule_256:
296 call __vpaes_schedule_mangle
298 call __vpaes_schedule_round
300 jz L010schedule_mangle_last
301 call __vpaes_schedule_mangle
302 pshufd $255,%xmm0,%xmm0
303 movdqa %xmm7,20(%esp)
305 call L_vpaes_schedule_low_round
306 movdqa 20(%esp),%xmm7
307 jmp L012loop_schedule_256
309 L010schedule_mangle_last:
312 jnz L013schedule_mangle_last_dec
313 movdqa 256(%ebp,%ecx,1),%xmm1
314 .byte 102,15,56,0,193
317 L013schedule_mangle_last_dec:
320 call __vpaes_schedule_transform
332 __vpaes_schedule_192_smear:
333 pshufd $128,%xmm6,%xmm1
334 pshufd $254,%xmm7,%xmm0
342 __vpaes_schedule_round:
345 .byte 102,15,58,15,202,15
346 .byte 102,15,58,15,210,15
348 pshufd $255,%xmm0,%xmm0
349 .byte 102,15,58,15,192,1
351 L_vpaes_schedule_low_round:
359 movdqa -16(%ebp),%xmm4
360 movdqa -48(%ebp),%xmm5
365 movdqa -32(%ebp),%xmm2
366 .byte 102,15,56,0,208
369 .byte 102,15,56,0,217
372 .byte 102,15,56,0,224
375 .byte 102,15,56,0,211
378 .byte 102,15,56,0,220
380 movdqa 32(%ebp),%xmm4
381 .byte 102,15,56,0,226
382 movdqa 48(%ebp),%xmm0
383 .byte 102,15,56,0,195
389 __vpaes_schedule_transform:
390 movdqa -16(%ebp),%xmm2
396 .byte 102,15,56,0,208
397 movdqa 16(%ebx),%xmm0
398 .byte 102,15,56,0,193
402 __vpaes_schedule_mangle:
404 movdqa 128(%ebp),%xmm5
406 jnz L014schedule_mangle_dec
409 .byte 102,15,56,0,229
411 .byte 102,15,56,0,229
413 .byte 102,15,56,0,229
415 jmp L015schedule_mangle_both
417 L014schedule_mangle_dec:
418 movdqa -16(%ebp),%xmm2
425 .byte 102,15,56,0,212
426 movdqa 16(%esi),%xmm3
427 .byte 102,15,56,0,217
429 .byte 102,15,56,0,221
430 movdqa 32(%esi),%xmm2
431 .byte 102,15,56,0,212
433 movdqa 48(%esi),%xmm3
434 .byte 102,15,56,0,217
436 .byte 102,15,56,0,221
437 movdqa 64(%esi),%xmm2
438 .byte 102,15,56,0,212
440 movdqa 80(%esi),%xmm3
441 .byte 102,15,56,0,217
443 .byte 102,15,56,0,221
444 movdqa 96(%esi),%xmm2
445 .byte 102,15,56,0,212
447 movdqa 112(%esi),%xmm3
448 .byte 102,15,56,0,217
451 L015schedule_mangle_both:
452 movdqa 256(%ebp,%ecx,1),%xmm1
453 .byte 102,15,56,0,217
458 .globl _vpaes_set_encrypt_key
460 _vpaes_set_encrypt_key:
461 L_vpaes_set_encrypt_key_begin:
479 leal L_vpaes_consts+0x30-L016pic_point,%ebp
480 call __vpaes_schedule_core
489 .globl _vpaes_set_decrypt_key
491 _vpaes_set_decrypt_key:
492 L_vpaes_set_decrypt_key_begin:
509 leal 16(%edx,%ebx,1),%edx
515 leal L_vpaes_consts+0x30-L017pic_point,%ebp
516 call __vpaes_schedule_core
525 .globl _vpaes_encrypt
528 L_vpaes_encrypt_begin:
533 leal L_vpaes_consts+0x30-L018pic_point,%ebp
544 call __vpaes_encrypt_core
552 .globl _vpaes_decrypt
555 L_vpaes_decrypt_begin:
560 leal L_vpaes_consts+0x30-L019pic_point,%ebp
571 call __vpaes_decrypt_core
579 .globl _vpaes_cbc_encrypt
582 L_vpaes_cbc_encrypt_begin:
605 leal L_vpaes_consts+0x30-L021pic_point,%ebp
615 call __vpaes_encrypt_core
619 movdqu %xmm0,(%ebx,%esi,1)
627 movdqa %xmm1,16(%esp)
628 movdqa %xmm0,32(%esp)
629 call __vpaes_decrypt_core
633 movdqa 32(%esp),%xmm1
634 movdqu %xmm0,(%ebx,%esi,1)
649 .section .note.GNU-stack,"",%progbits