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
72 .type _vpaes_preheat,@function
76 movdqa -48(%ebp),%xmm7
77 movdqa -16(%ebp),%xmm6
79 .size _vpaes_preheat,.-_vpaes_preheat
80 .type _vpaes_encrypt_core,@function
101 movdqa 32(%ebp),%xmm4
102 movdqa 48(%ebp),%xmm0
103 .byte 102,15,56,0,226
104 .byte 102,15,56,0,195
106 movdqa 64(%ebp),%xmm5
108 movdqa -64(%ebx,%ecx,1),%xmm1
109 .byte 102,15,56,0,234
110 movdqa 80(%ebp),%xmm2
111 movdqa (%ebx,%ecx,1),%xmm4
112 .byte 102,15,56,0,211
115 .byte 102,15,56,0,193
118 .byte 102,15,56,0,220
121 .byte 102,15,56,0,193
127 movdqa -32(%ebp),%xmm5
131 .byte 102,15,56,0,232
134 .byte 102,15,56,0,217
137 .byte 102,15,56,0,224
140 .byte 102,15,56,0,211
143 .byte 102,15,56,0,220
147 movdqa 96(%ebp),%xmm4
148 movdqa 112(%ebp),%xmm0
149 .byte 102,15,56,0,226
151 .byte 102,15,56,0,195
152 movdqa 64(%ebx,%ecx,1),%xmm1
154 .byte 102,15,56,0,193
156 .size _vpaes_encrypt_core,.-_vpaes_encrypt_core
157 .type _vpaes_decrypt_core,@function
163 movdqa -64(%ebx),%xmm2
170 .byte 102,15,56,0,208
171 movdqa -48(%ebx),%xmm0
173 .byte 102,15,56,0,193
176 movdqa 176(%ebp),%xmm5
179 leal -352(%ebx,%ecx,1),%ecx
183 movdqa -32(%ebx),%xmm4
184 movdqa -16(%ebx),%xmm1
185 .byte 102,15,56,0,226
186 .byte 102,15,56,0,203
190 movdqa 16(%ebx),%xmm1
191 .byte 102,15,56,0,226
192 .byte 102,15,56,0,197
193 .byte 102,15,56,0,203
195 movdqa 32(%ebx),%xmm4
197 movdqa 48(%ebx),%xmm1
198 .byte 102,15,56,0,226
199 .byte 102,15,56,0,197
200 .byte 102,15,56,0,203
202 movdqa 64(%ebx),%xmm4
204 movdqa 80(%ebx),%xmm1
205 .byte 102,15,56,0,226
206 .byte 102,15,56,0,197
207 .byte 102,15,56,0,203
210 .byte 102,15,58,15,237,12
215 movdqa -32(%ebp),%xmm2
219 .byte 102,15,56,0,208
222 .byte 102,15,56,0,217
225 .byte 102,15,56,0,224
228 .byte 102,15,56,0,211
231 .byte 102,15,56,0,220
235 movdqa 96(%ebx),%xmm4
236 .byte 102,15,56,0,226
238 movdqa 112(%ebx),%xmm0
240 .byte 102,15,56,0,195
242 .byte 102,15,56,0,194
244 .size _vpaes_decrypt_core,.-_vpaes_decrypt_core
245 .type _vpaes_schedule_core,@function
247 _vpaes_schedule_core:
250 movdqa 320(%ebp),%xmm2
254 call _vpaes_schedule_transform
257 jnz .L004schedule_am_decrypting
260 .L004schedule_am_decrypting:
261 movdqa 256(%ebp,%ecx,1),%xmm1
262 .byte 102,15,56,0,217
271 .L009loop_schedule_128:
272 call _vpaes_schedule_round
274 jz .L010schedule_mangle_last
275 call _vpaes_schedule_mangle
276 jmp .L009loop_schedule_128
280 call _vpaes_schedule_transform
285 .L011loop_schedule_192:
286 call _vpaes_schedule_round
287 .byte 102,15,58,15,198,8
288 call _vpaes_schedule_mangle
289 call _vpaes_schedule_192_smear
290 call _vpaes_schedule_mangle
291 call _vpaes_schedule_round
293 jz .L010schedule_mangle_last
294 call _vpaes_schedule_mangle
295 call _vpaes_schedule_192_smear
296 jmp .L011loop_schedule_192
299 movdqu 16(%esi),%xmm0
300 call _vpaes_schedule_transform
302 .L012loop_schedule_256:
303 call _vpaes_schedule_mangle
305 call _vpaes_schedule_round
307 jz .L010schedule_mangle_last
308 call _vpaes_schedule_mangle
309 pshufd $255,%xmm0,%xmm0
310 movdqa %xmm7,20(%esp)
312 call .L_vpaes_schedule_low_round
313 movdqa 20(%esp),%xmm7
314 jmp .L012loop_schedule_256
316 .L010schedule_mangle_last:
319 jnz .L013schedule_mangle_last_dec
320 movdqa 256(%ebp,%ecx,1),%xmm1
321 .byte 102,15,56,0,193
324 .L013schedule_mangle_last_dec:
327 call _vpaes_schedule_transform
338 .size _vpaes_schedule_core,.-_vpaes_schedule_core
339 .type _vpaes_schedule_192_smear,@function
341 _vpaes_schedule_192_smear:
342 pshufd $128,%xmm6,%xmm1
343 pshufd $254,%xmm7,%xmm0
350 .size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
351 .type _vpaes_schedule_round,@function
353 _vpaes_schedule_round:
356 .byte 102,15,58,15,202,15
357 .byte 102,15,58,15,210,15
359 pshufd $255,%xmm0,%xmm0
360 .byte 102,15,58,15,192,1
362 .L_vpaes_schedule_low_round:
370 movdqa -16(%ebp),%xmm4
371 movdqa -48(%ebp),%xmm5
376 movdqa -32(%ebp),%xmm2
377 .byte 102,15,56,0,208
380 .byte 102,15,56,0,217
383 .byte 102,15,56,0,224
386 .byte 102,15,56,0,211
389 .byte 102,15,56,0,220
391 movdqa 32(%ebp),%xmm4
392 .byte 102,15,56,0,226
393 movdqa 48(%ebp),%xmm0
394 .byte 102,15,56,0,195
399 .size _vpaes_schedule_round,.-_vpaes_schedule_round
400 .type _vpaes_schedule_transform,@function
402 _vpaes_schedule_transform:
403 movdqa -16(%ebp),%xmm2
409 .byte 102,15,56,0,208
410 movdqa 16(%ebx),%xmm0
411 .byte 102,15,56,0,193
414 .size _vpaes_schedule_transform,.-_vpaes_schedule_transform
415 .type _vpaes_schedule_mangle,@function
417 _vpaes_schedule_mangle:
419 movdqa 128(%ebp),%xmm5
421 jnz .L014schedule_mangle_dec
424 .byte 102,15,56,0,229
426 .byte 102,15,56,0,229
428 .byte 102,15,56,0,229
430 jmp .L015schedule_mangle_both
432 .L014schedule_mangle_dec:
433 movdqa -16(%ebp),%xmm2
440 .byte 102,15,56,0,212
441 movdqa 16(%esi),%xmm3
442 .byte 102,15,56,0,217
444 .byte 102,15,56,0,221
445 movdqa 32(%esi),%xmm2
446 .byte 102,15,56,0,212
448 movdqa 48(%esi),%xmm3
449 .byte 102,15,56,0,217
451 .byte 102,15,56,0,221
452 movdqa 64(%esi),%xmm2
453 .byte 102,15,56,0,212
455 movdqa 80(%esi),%xmm3
456 .byte 102,15,56,0,217
458 .byte 102,15,56,0,221
459 movdqa 96(%esi),%xmm2
460 .byte 102,15,56,0,212
462 movdqa 112(%esi),%xmm3
463 .byte 102,15,56,0,217
466 .L015schedule_mangle_both:
467 movdqa 256(%ebp,%ecx,1),%xmm1
468 .byte 102,15,56,0,217
473 .size _vpaes_schedule_mangle,.-_vpaes_schedule_mangle
474 .globl vpaes_set_encrypt_key
475 .type vpaes_set_encrypt_key,@function
477 vpaes_set_encrypt_key:
478 .L_vpaes_set_encrypt_key_begin:
496 leal .L_vpaes_consts+0x30-.L016pic_point,%ebp
497 call _vpaes_schedule_core
506 .size vpaes_set_encrypt_key,.-.L_vpaes_set_encrypt_key_begin
507 .globl vpaes_set_decrypt_key
508 .type vpaes_set_decrypt_key,@function
510 vpaes_set_decrypt_key:
511 .L_vpaes_set_decrypt_key_begin:
528 leal 16(%edx,%ebx,1),%edx
534 leal .L_vpaes_consts+0x30-.L017pic_point,%ebp
535 call _vpaes_schedule_core
544 .size vpaes_set_decrypt_key,.-.L_vpaes_set_decrypt_key_begin
546 .type vpaes_encrypt,@function
549 .L_vpaes_encrypt_begin:
554 leal .L_vpaes_consts+0x30-.L018pic_point,%ebp
565 call _vpaes_encrypt_core
573 .size vpaes_encrypt,.-.L_vpaes_encrypt_begin
575 .type vpaes_decrypt,@function
578 .L_vpaes_decrypt_begin:
583 leal .L_vpaes_consts+0x30-.L019pic_point,%ebp
594 call _vpaes_decrypt_core
602 .size vpaes_decrypt,.-.L_vpaes_decrypt_begin
603 .globl vpaes_cbc_encrypt
604 .type vpaes_cbc_encrypt,@function
607 .L_vpaes_cbc_encrypt_begin:
630 leal .L_vpaes_consts+0x30-.L021pic_point,%ebp
635 jmp .L023cbc_enc_loop
640 call _vpaes_encrypt_core
644 movdqu %xmm0,(%ebx,%esi,1)
647 jnc .L023cbc_enc_loop
652 movdqa %xmm1,16(%esp)
653 movdqa %xmm0,32(%esp)
654 call _vpaes_decrypt_core
658 movdqa 32(%esp),%xmm1
659 movdqu %xmm0,(%ebx,%esi,1)
662 jnc .L022cbc_dec_loop
673 .size vpaes_cbc_encrypt,.-.L_vpaes_cbc_encrypt_begin
675 .section .note.GNU-stack,"",%progbits