Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(399)

Side by Side Diff: third_party/boringssl/win-x86_64/crypto/aes/bsaes-x86_64.asm

Issue 2354623003: Pull boringssl generated source from boringssl_gen (Closed)
Patch Set: . Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 default rel
2 %define XMMWORD
3 %define YMMWORD
4 %define ZMMWORD
5 section .text code align=64
6
7
8 EXTERN asm_AES_encrypt
9 EXTERN asm_AES_decrypt
10
11
12 ALIGN 64
13 _bsaes_encrypt8:
14 lea r11,[$L$BS0]
15
16 movdqa xmm8,XMMWORD[rax]
17 lea rax,[16+rax]
18 movdqa xmm7,XMMWORD[80+r11]
19 pxor xmm15,xmm8
20 pxor xmm0,xmm8
21 pxor xmm1,xmm8
22 pxor xmm2,xmm8
23 DB 102,68,15,56,0,255
24 DB 102,15,56,0,199
25 pxor xmm3,xmm8
26 pxor xmm4,xmm8
27 DB 102,15,56,0,207
28 DB 102,15,56,0,215
29 pxor xmm5,xmm8
30 pxor xmm6,xmm8
31 DB 102,15,56,0,223
32 DB 102,15,56,0,231
33 DB 102,15,56,0,239
34 DB 102,15,56,0,247
35 _bsaes_encrypt8_bitslice:
36 movdqa xmm7,XMMWORD[r11]
37 movdqa xmm8,XMMWORD[16+r11]
38 movdqa xmm9,xmm5
39 psrlq xmm5,1
40 movdqa xmm10,xmm3
41 psrlq xmm3,1
42 pxor xmm5,xmm6
43 pxor xmm3,xmm4
44 pand xmm5,xmm7
45 pand xmm3,xmm7
46 pxor xmm6,xmm5
47 psllq xmm5,1
48 pxor xmm4,xmm3
49 psllq xmm3,1
50 pxor xmm5,xmm9
51 pxor xmm3,xmm10
52 movdqa xmm9,xmm1
53 psrlq xmm1,1
54 movdqa xmm10,xmm15
55 psrlq xmm15,1
56 pxor xmm1,xmm2
57 pxor xmm15,xmm0
58 pand xmm1,xmm7
59 pand xmm15,xmm7
60 pxor xmm2,xmm1
61 psllq xmm1,1
62 pxor xmm0,xmm15
63 psllq xmm15,1
64 pxor xmm1,xmm9
65 pxor xmm15,xmm10
66 movdqa xmm7,XMMWORD[32+r11]
67 movdqa xmm9,xmm4
68 psrlq xmm4,2
69 movdqa xmm10,xmm3
70 psrlq xmm3,2
71 pxor xmm4,xmm6
72 pxor xmm3,xmm5
73 pand xmm4,xmm8
74 pand xmm3,xmm8
75 pxor xmm6,xmm4
76 psllq xmm4,2
77 pxor xmm5,xmm3
78 psllq xmm3,2
79 pxor xmm4,xmm9
80 pxor xmm3,xmm10
81 movdqa xmm9,xmm0
82 psrlq xmm0,2
83 movdqa xmm10,xmm15
84 psrlq xmm15,2
85 pxor xmm0,xmm2
86 pxor xmm15,xmm1
87 pand xmm0,xmm8
88 pand xmm15,xmm8
89 pxor xmm2,xmm0
90 psllq xmm0,2
91 pxor xmm1,xmm15
92 psllq xmm15,2
93 pxor xmm0,xmm9
94 pxor xmm15,xmm10
95 movdqa xmm9,xmm2
96 psrlq xmm2,4
97 movdqa xmm10,xmm1
98 psrlq xmm1,4
99 pxor xmm2,xmm6
100 pxor xmm1,xmm5
101 pand xmm2,xmm7
102 pand xmm1,xmm7
103 pxor xmm6,xmm2
104 psllq xmm2,4
105 pxor xmm5,xmm1
106 psllq xmm1,4
107 pxor xmm2,xmm9
108 pxor xmm1,xmm10
109 movdqa xmm9,xmm0
110 psrlq xmm0,4
111 movdqa xmm10,xmm15
112 psrlq xmm15,4
113 pxor xmm0,xmm4
114 pxor xmm15,xmm3
115 pand xmm0,xmm7
116 pand xmm15,xmm7
117 pxor xmm4,xmm0
118 psllq xmm0,4
119 pxor xmm3,xmm15
120 psllq xmm15,4
121 pxor xmm0,xmm9
122 pxor xmm15,xmm10
123 dec r10d
124 jmp NEAR $L$enc_sbox
125 ALIGN 16
126 $L$enc_loop:
127 pxor xmm15,XMMWORD[rax]
128 pxor xmm0,XMMWORD[16+rax]
129 pxor xmm1,XMMWORD[32+rax]
130 pxor xmm2,XMMWORD[48+rax]
131 DB 102,68,15,56,0,255
132 DB 102,15,56,0,199
133 pxor xmm3,XMMWORD[64+rax]
134 pxor xmm4,XMMWORD[80+rax]
135 DB 102,15,56,0,207
136 DB 102,15,56,0,215
137 pxor xmm5,XMMWORD[96+rax]
138 pxor xmm6,XMMWORD[112+rax]
139 DB 102,15,56,0,223
140 DB 102,15,56,0,231
141 DB 102,15,56,0,239
142 DB 102,15,56,0,247
143 lea rax,[128+rax]
144 $L$enc_sbox:
145 pxor xmm4,xmm5
146 pxor xmm1,xmm0
147 pxor xmm2,xmm15
148 pxor xmm5,xmm1
149 pxor xmm4,xmm15
150
151 pxor xmm5,xmm2
152 pxor xmm2,xmm6
153 pxor xmm6,xmm4
154 pxor xmm2,xmm3
155 pxor xmm3,xmm4
156 pxor xmm2,xmm0
157
158 pxor xmm1,xmm6
159 pxor xmm0,xmm4
160 movdqa xmm10,xmm6
161 movdqa xmm9,xmm0
162 movdqa xmm8,xmm4
163 movdqa xmm12,xmm1
164 movdqa xmm11,xmm5
165
166 pxor xmm10,xmm3
167 pxor xmm9,xmm1
168 pxor xmm8,xmm2
169 movdqa xmm13,xmm10
170 pxor xmm12,xmm3
171 movdqa xmm7,xmm9
172 pxor xmm11,xmm15
173 movdqa xmm14,xmm10
174
175 por xmm9,xmm8
176 por xmm10,xmm11
177 pxor xmm14,xmm7
178 pand xmm13,xmm11
179 pxor xmm11,xmm8
180 pand xmm7,xmm8
181 pand xmm14,xmm11
182 movdqa xmm11,xmm2
183 pxor xmm11,xmm15
184 pand xmm12,xmm11
185 pxor xmm10,xmm12
186 pxor xmm9,xmm12
187 movdqa xmm12,xmm6
188 movdqa xmm11,xmm4
189 pxor xmm12,xmm0
190 pxor xmm11,xmm5
191 movdqa xmm8,xmm12
192 pand xmm12,xmm11
193 por xmm8,xmm11
194 pxor xmm7,xmm12
195 pxor xmm10,xmm14
196 pxor xmm9,xmm13
197 pxor xmm8,xmm14
198 movdqa xmm11,xmm1
199 pxor xmm7,xmm13
200 movdqa xmm12,xmm3
201 pxor xmm8,xmm13
202 movdqa xmm13,xmm0
203 pand xmm11,xmm2
204 movdqa xmm14,xmm6
205 pand xmm12,xmm15
206 pand xmm13,xmm4
207 por xmm14,xmm5
208 pxor xmm10,xmm11
209 pxor xmm9,xmm12
210 pxor xmm8,xmm13
211 pxor xmm7,xmm14
212
213
214
215
216
217 movdqa xmm11,xmm10
218 pand xmm10,xmm8
219 pxor xmm11,xmm9
220
221 movdqa xmm13,xmm7
222 movdqa xmm14,xmm11
223 pxor xmm13,xmm10
224 pand xmm14,xmm13
225
226 movdqa xmm12,xmm8
227 pxor xmm14,xmm9
228 pxor xmm12,xmm7
229
230 pxor xmm10,xmm9
231
232 pand xmm12,xmm10
233
234 movdqa xmm9,xmm13
235 pxor xmm12,xmm7
236
237 pxor xmm9,xmm12
238 pxor xmm8,xmm12
239
240 pand xmm9,xmm7
241
242 pxor xmm13,xmm9
243 pxor xmm8,xmm9
244
245 pand xmm13,xmm14
246
247 pxor xmm13,xmm11
248 movdqa xmm11,xmm5
249 movdqa xmm7,xmm4
250 movdqa xmm9,xmm14
251 pxor xmm9,xmm13
252 pand xmm9,xmm5
253 pxor xmm5,xmm4
254 pand xmm4,xmm14
255 pand xmm5,xmm13
256 pxor xmm5,xmm4
257 pxor xmm4,xmm9
258 pxor xmm11,xmm15
259 pxor xmm7,xmm2
260 pxor xmm14,xmm12
261 pxor xmm13,xmm8
262 movdqa xmm10,xmm14
263 movdqa xmm9,xmm12
264 pxor xmm10,xmm13
265 pxor xmm9,xmm8
266 pand xmm10,xmm11
267 pand xmm9,xmm15
268 pxor xmm11,xmm7
269 pxor xmm15,xmm2
270 pand xmm7,xmm14
271 pand xmm2,xmm12
272 pand xmm11,xmm13
273 pand xmm15,xmm8
274 pxor xmm7,xmm11
275 pxor xmm15,xmm2
276 pxor xmm11,xmm10
277 pxor xmm2,xmm9
278 pxor xmm5,xmm11
279 pxor xmm15,xmm11
280 pxor xmm4,xmm7
281 pxor xmm2,xmm7
282
283 movdqa xmm11,xmm6
284 movdqa xmm7,xmm0
285 pxor xmm11,xmm3
286 pxor xmm7,xmm1
287 movdqa xmm10,xmm14
288 movdqa xmm9,xmm12
289 pxor xmm10,xmm13
290 pxor xmm9,xmm8
291 pand xmm10,xmm11
292 pand xmm9,xmm3
293 pxor xmm11,xmm7
294 pxor xmm3,xmm1
295 pand xmm7,xmm14
296 pand xmm1,xmm12
297 pand xmm11,xmm13
298 pand xmm3,xmm8
299 pxor xmm7,xmm11
300 pxor xmm3,xmm1
301 pxor xmm11,xmm10
302 pxor xmm1,xmm9
303 pxor xmm14,xmm12
304 pxor xmm13,xmm8
305 movdqa xmm10,xmm14
306 pxor xmm10,xmm13
307 pand xmm10,xmm6
308 pxor xmm6,xmm0
309 pand xmm0,xmm14
310 pand xmm6,xmm13
311 pxor xmm6,xmm0
312 pxor xmm0,xmm10
313 pxor xmm6,xmm11
314 pxor xmm3,xmm11
315 pxor xmm0,xmm7
316 pxor xmm1,xmm7
317 pxor xmm6,xmm15
318 pxor xmm0,xmm5
319 pxor xmm3,xmm6
320 pxor xmm5,xmm15
321 pxor xmm15,xmm0
322
323 pxor xmm0,xmm4
324 pxor xmm4,xmm1
325 pxor xmm1,xmm2
326 pxor xmm2,xmm4
327 pxor xmm3,xmm4
328
329 pxor xmm5,xmm2
330 dec r10d
331 jl NEAR $L$enc_done
332 pshufd xmm7,xmm15,0x93
333 pshufd xmm8,xmm0,0x93
334 pxor xmm15,xmm7
335 pshufd xmm9,xmm3,0x93
336 pxor xmm0,xmm8
337 pshufd xmm10,xmm5,0x93
338 pxor xmm3,xmm9
339 pshufd xmm11,xmm2,0x93
340 pxor xmm5,xmm10
341 pshufd xmm12,xmm6,0x93
342 pxor xmm2,xmm11
343 pshufd xmm13,xmm1,0x93
344 pxor xmm6,xmm12
345 pshufd xmm14,xmm4,0x93
346 pxor xmm1,xmm13
347 pxor xmm4,xmm14
348
349 pxor xmm8,xmm15
350 pxor xmm7,xmm4
351 pxor xmm8,xmm4
352 pshufd xmm15,xmm15,0x4E
353 pxor xmm9,xmm0
354 pshufd xmm0,xmm0,0x4E
355 pxor xmm12,xmm2
356 pxor xmm15,xmm7
357 pxor xmm13,xmm6
358 pxor xmm0,xmm8
359 pxor xmm11,xmm5
360 pshufd xmm7,xmm2,0x4E
361 pxor xmm14,xmm1
362 pshufd xmm8,xmm6,0x4E
363 pxor xmm10,xmm3
364 pshufd xmm2,xmm5,0x4E
365 pxor xmm10,xmm4
366 pshufd xmm6,xmm4,0x4E
367 pxor xmm11,xmm4
368 pshufd xmm5,xmm1,0x4E
369 pxor xmm7,xmm11
370 pshufd xmm1,xmm3,0x4E
371 pxor xmm8,xmm12
372 pxor xmm2,xmm10
373 pxor xmm6,xmm14
374 pxor xmm5,xmm13
375 movdqa xmm3,xmm7
376 pxor xmm1,xmm9
377 movdqa xmm4,xmm8
378 movdqa xmm7,XMMWORD[48+r11]
379 jnz NEAR $L$enc_loop
380 movdqa xmm7,XMMWORD[64+r11]
381 jmp NEAR $L$enc_loop
382 ALIGN 16
383 $L$enc_done:
384 movdqa xmm7,XMMWORD[r11]
385 movdqa xmm8,XMMWORD[16+r11]
386 movdqa xmm9,xmm1
387 psrlq xmm1,1
388 movdqa xmm10,xmm2
389 psrlq xmm2,1
390 pxor xmm1,xmm4
391 pxor xmm2,xmm6
392 pand xmm1,xmm7
393 pand xmm2,xmm7
394 pxor xmm4,xmm1
395 psllq xmm1,1
396 pxor xmm6,xmm2
397 psllq xmm2,1
398 pxor xmm1,xmm9
399 pxor xmm2,xmm10
400 movdqa xmm9,xmm3
401 psrlq xmm3,1
402 movdqa xmm10,xmm15
403 psrlq xmm15,1
404 pxor xmm3,xmm5
405 pxor xmm15,xmm0
406 pand xmm3,xmm7
407 pand xmm15,xmm7
408 pxor xmm5,xmm3
409 psllq xmm3,1
410 pxor xmm0,xmm15
411 psllq xmm15,1
412 pxor xmm3,xmm9
413 pxor xmm15,xmm10
414 movdqa xmm7,XMMWORD[32+r11]
415 movdqa xmm9,xmm6
416 psrlq xmm6,2
417 movdqa xmm10,xmm2
418 psrlq xmm2,2
419 pxor xmm6,xmm4
420 pxor xmm2,xmm1
421 pand xmm6,xmm8
422 pand xmm2,xmm8
423 pxor xmm4,xmm6
424 psllq xmm6,2
425 pxor xmm1,xmm2
426 psllq xmm2,2
427 pxor xmm6,xmm9
428 pxor xmm2,xmm10
429 movdqa xmm9,xmm0
430 psrlq xmm0,2
431 movdqa xmm10,xmm15
432 psrlq xmm15,2
433 pxor xmm0,xmm5
434 pxor xmm15,xmm3
435 pand xmm0,xmm8
436 pand xmm15,xmm8
437 pxor xmm5,xmm0
438 psllq xmm0,2
439 pxor xmm3,xmm15
440 psllq xmm15,2
441 pxor xmm0,xmm9
442 pxor xmm15,xmm10
443 movdqa xmm9,xmm5
444 psrlq xmm5,4
445 movdqa xmm10,xmm3
446 psrlq xmm3,4
447 pxor xmm5,xmm4
448 pxor xmm3,xmm1
449 pand xmm5,xmm7
450 pand xmm3,xmm7
451 pxor xmm4,xmm5
452 psllq xmm5,4
453 pxor xmm1,xmm3
454 psllq xmm3,4
455 pxor xmm5,xmm9
456 pxor xmm3,xmm10
457 movdqa xmm9,xmm0
458 psrlq xmm0,4
459 movdqa xmm10,xmm15
460 psrlq xmm15,4
461 pxor xmm0,xmm6
462 pxor xmm15,xmm2
463 pand xmm0,xmm7
464 pand xmm15,xmm7
465 pxor xmm6,xmm0
466 psllq xmm0,4
467 pxor xmm2,xmm15
468 psllq xmm15,4
469 pxor xmm0,xmm9
470 pxor xmm15,xmm10
471 movdqa xmm7,XMMWORD[rax]
472 pxor xmm3,xmm7
473 pxor xmm5,xmm7
474 pxor xmm2,xmm7
475 pxor xmm6,xmm7
476 pxor xmm1,xmm7
477 pxor xmm4,xmm7
478 pxor xmm15,xmm7
479 pxor xmm0,xmm7
480 DB 0F3h,0C3h ;repret
481
482
483
484 ALIGN 64
485 _bsaes_decrypt8:
486 lea r11,[$L$BS0]
487
488 movdqa xmm8,XMMWORD[rax]
489 lea rax,[16+rax]
490 movdqa xmm7,XMMWORD[((-48))+r11]
491 pxor xmm15,xmm8
492 pxor xmm0,xmm8
493 pxor xmm1,xmm8
494 pxor xmm2,xmm8
495 DB 102,68,15,56,0,255
496 DB 102,15,56,0,199
497 pxor xmm3,xmm8
498 pxor xmm4,xmm8
499 DB 102,15,56,0,207
500 DB 102,15,56,0,215
501 pxor xmm5,xmm8
502 pxor xmm6,xmm8
503 DB 102,15,56,0,223
504 DB 102,15,56,0,231
505 DB 102,15,56,0,239
506 DB 102,15,56,0,247
507 movdqa xmm7,XMMWORD[r11]
508 movdqa xmm8,XMMWORD[16+r11]
509 movdqa xmm9,xmm5
510 psrlq xmm5,1
511 movdqa xmm10,xmm3
512 psrlq xmm3,1
513 pxor xmm5,xmm6
514 pxor xmm3,xmm4
515 pand xmm5,xmm7
516 pand xmm3,xmm7
517 pxor xmm6,xmm5
518 psllq xmm5,1
519 pxor xmm4,xmm3
520 psllq xmm3,1
521 pxor xmm5,xmm9
522 pxor xmm3,xmm10
523 movdqa xmm9,xmm1
524 psrlq xmm1,1
525 movdqa xmm10,xmm15
526 psrlq xmm15,1
527 pxor xmm1,xmm2
528 pxor xmm15,xmm0
529 pand xmm1,xmm7
530 pand xmm15,xmm7
531 pxor xmm2,xmm1
532 psllq xmm1,1
533 pxor xmm0,xmm15
534 psllq xmm15,1
535 pxor xmm1,xmm9
536 pxor xmm15,xmm10
537 movdqa xmm7,XMMWORD[32+r11]
538 movdqa xmm9,xmm4
539 psrlq xmm4,2
540 movdqa xmm10,xmm3
541 psrlq xmm3,2
542 pxor xmm4,xmm6
543 pxor xmm3,xmm5
544 pand xmm4,xmm8
545 pand xmm3,xmm8
546 pxor xmm6,xmm4
547 psllq xmm4,2
548 pxor xmm5,xmm3
549 psllq xmm3,2
550 pxor xmm4,xmm9
551 pxor xmm3,xmm10
552 movdqa xmm9,xmm0
553 psrlq xmm0,2
554 movdqa xmm10,xmm15
555 psrlq xmm15,2
556 pxor xmm0,xmm2
557 pxor xmm15,xmm1
558 pand xmm0,xmm8
559 pand xmm15,xmm8
560 pxor xmm2,xmm0
561 psllq xmm0,2
562 pxor xmm1,xmm15
563 psllq xmm15,2
564 pxor xmm0,xmm9
565 pxor xmm15,xmm10
566 movdqa xmm9,xmm2
567 psrlq xmm2,4
568 movdqa xmm10,xmm1
569 psrlq xmm1,4
570 pxor xmm2,xmm6
571 pxor xmm1,xmm5
572 pand xmm2,xmm7
573 pand xmm1,xmm7
574 pxor xmm6,xmm2
575 psllq xmm2,4
576 pxor xmm5,xmm1
577 psllq xmm1,4
578 pxor xmm2,xmm9
579 pxor xmm1,xmm10
580 movdqa xmm9,xmm0
581 psrlq xmm0,4
582 movdqa xmm10,xmm15
583 psrlq xmm15,4
584 pxor xmm0,xmm4
585 pxor xmm15,xmm3
586 pand xmm0,xmm7
587 pand xmm15,xmm7
588 pxor xmm4,xmm0
589 psllq xmm0,4
590 pxor xmm3,xmm15
591 psllq xmm15,4
592 pxor xmm0,xmm9
593 pxor xmm15,xmm10
594 dec r10d
595 jmp NEAR $L$dec_sbox
596 ALIGN 16
597 $L$dec_loop:
598 pxor xmm15,XMMWORD[rax]
599 pxor xmm0,XMMWORD[16+rax]
600 pxor xmm1,XMMWORD[32+rax]
601 pxor xmm2,XMMWORD[48+rax]
602 DB 102,68,15,56,0,255
603 DB 102,15,56,0,199
604 pxor xmm3,XMMWORD[64+rax]
605 pxor xmm4,XMMWORD[80+rax]
606 DB 102,15,56,0,207
607 DB 102,15,56,0,215
608 pxor xmm5,XMMWORD[96+rax]
609 pxor xmm6,XMMWORD[112+rax]
610 DB 102,15,56,0,223
611 DB 102,15,56,0,231
612 DB 102,15,56,0,239
613 DB 102,15,56,0,247
614 lea rax,[128+rax]
615 $L$dec_sbox:
616 pxor xmm2,xmm3
617
618 pxor xmm3,xmm6
619 pxor xmm1,xmm6
620 pxor xmm5,xmm3
621 pxor xmm6,xmm5
622 pxor xmm0,xmm6
623
624 pxor xmm15,xmm0
625 pxor xmm1,xmm4
626 pxor xmm2,xmm15
627 pxor xmm4,xmm15
628 pxor xmm0,xmm2
629 movdqa xmm10,xmm2
630 movdqa xmm9,xmm6
631 movdqa xmm8,xmm0
632 movdqa xmm12,xmm3
633 movdqa xmm11,xmm4
634
635 pxor xmm10,xmm15
636 pxor xmm9,xmm3
637 pxor xmm8,xmm5
638 movdqa xmm13,xmm10
639 pxor xmm12,xmm15
640 movdqa xmm7,xmm9
641 pxor xmm11,xmm1
642 movdqa xmm14,xmm10
643
644 por xmm9,xmm8
645 por xmm10,xmm11
646 pxor xmm14,xmm7
647 pand xmm13,xmm11
648 pxor xmm11,xmm8
649 pand xmm7,xmm8
650 pand xmm14,xmm11
651 movdqa xmm11,xmm5
652 pxor xmm11,xmm1
653 pand xmm12,xmm11
654 pxor xmm10,xmm12
655 pxor xmm9,xmm12
656 movdqa xmm12,xmm2
657 movdqa xmm11,xmm0
658 pxor xmm12,xmm6
659 pxor xmm11,xmm4
660 movdqa xmm8,xmm12
661 pand xmm12,xmm11
662 por xmm8,xmm11
663 pxor xmm7,xmm12
664 pxor xmm10,xmm14
665 pxor xmm9,xmm13
666 pxor xmm8,xmm14
667 movdqa xmm11,xmm3
668 pxor xmm7,xmm13
669 movdqa xmm12,xmm15
670 pxor xmm8,xmm13
671 movdqa xmm13,xmm6
672 pand xmm11,xmm5
673 movdqa xmm14,xmm2
674 pand xmm12,xmm1
675 pand xmm13,xmm0
676 por xmm14,xmm4
677 pxor xmm10,xmm11
678 pxor xmm9,xmm12
679 pxor xmm8,xmm13
680 pxor xmm7,xmm14
681
682
683
684
685
686 movdqa xmm11,xmm10
687 pand xmm10,xmm8
688 pxor xmm11,xmm9
689
690 movdqa xmm13,xmm7
691 movdqa xmm14,xmm11
692 pxor xmm13,xmm10
693 pand xmm14,xmm13
694
695 movdqa xmm12,xmm8
696 pxor xmm14,xmm9
697 pxor xmm12,xmm7
698
699 pxor xmm10,xmm9
700
701 pand xmm12,xmm10
702
703 movdqa xmm9,xmm13
704 pxor xmm12,xmm7
705
706 pxor xmm9,xmm12
707 pxor xmm8,xmm12
708
709 pand xmm9,xmm7
710
711 pxor xmm13,xmm9
712 pxor xmm8,xmm9
713
714 pand xmm13,xmm14
715
716 pxor xmm13,xmm11
717 movdqa xmm11,xmm4
718 movdqa xmm7,xmm0
719 movdqa xmm9,xmm14
720 pxor xmm9,xmm13
721 pand xmm9,xmm4
722 pxor xmm4,xmm0
723 pand xmm0,xmm14
724 pand xmm4,xmm13
725 pxor xmm4,xmm0
726 pxor xmm0,xmm9
727 pxor xmm11,xmm1
728 pxor xmm7,xmm5
729 pxor xmm14,xmm12
730 pxor xmm13,xmm8
731 movdqa xmm10,xmm14
732 movdqa xmm9,xmm12
733 pxor xmm10,xmm13
734 pxor xmm9,xmm8
735 pand xmm10,xmm11
736 pand xmm9,xmm1
737 pxor xmm11,xmm7
738 pxor xmm1,xmm5
739 pand xmm7,xmm14
740 pand xmm5,xmm12
741 pand xmm11,xmm13
742 pand xmm1,xmm8
743 pxor xmm7,xmm11
744 pxor xmm1,xmm5
745 pxor xmm11,xmm10
746 pxor xmm5,xmm9
747 pxor xmm4,xmm11
748 pxor xmm1,xmm11
749 pxor xmm0,xmm7
750 pxor xmm5,xmm7
751
752 movdqa xmm11,xmm2
753 movdqa xmm7,xmm6
754 pxor xmm11,xmm15
755 pxor xmm7,xmm3
756 movdqa xmm10,xmm14
757 movdqa xmm9,xmm12
758 pxor xmm10,xmm13
759 pxor xmm9,xmm8
760 pand xmm10,xmm11
761 pand xmm9,xmm15
762 pxor xmm11,xmm7
763 pxor xmm15,xmm3
764 pand xmm7,xmm14
765 pand xmm3,xmm12
766 pand xmm11,xmm13
767 pand xmm15,xmm8
768 pxor xmm7,xmm11
769 pxor xmm15,xmm3
770 pxor xmm11,xmm10
771 pxor xmm3,xmm9
772 pxor xmm14,xmm12
773 pxor xmm13,xmm8
774 movdqa xmm10,xmm14
775 pxor xmm10,xmm13
776 pand xmm10,xmm2
777 pxor xmm2,xmm6
778 pand xmm6,xmm14
779 pand xmm2,xmm13
780 pxor xmm2,xmm6
781 pxor xmm6,xmm10
782 pxor xmm2,xmm11
783 pxor xmm15,xmm11
784 pxor xmm6,xmm7
785 pxor xmm3,xmm7
786 pxor xmm0,xmm6
787 pxor xmm5,xmm4
788
789 pxor xmm3,xmm0
790 pxor xmm1,xmm6
791 pxor xmm4,xmm6
792 pxor xmm3,xmm1
793 pxor xmm6,xmm15
794 pxor xmm3,xmm4
795 pxor xmm2,xmm5
796 pxor xmm5,xmm0
797 pxor xmm2,xmm3
798
799 pxor xmm3,xmm15
800 pxor xmm6,xmm2
801 dec r10d
802 jl NEAR $L$dec_done
803
804 pshufd xmm7,xmm15,0x4E
805 pshufd xmm13,xmm2,0x4E
806 pxor xmm7,xmm15
807 pshufd xmm14,xmm4,0x4E
808 pxor xmm13,xmm2
809 pshufd xmm8,xmm0,0x4E
810 pxor xmm14,xmm4
811 pshufd xmm9,xmm5,0x4E
812 pxor xmm8,xmm0
813 pshufd xmm10,xmm3,0x4E
814 pxor xmm9,xmm5
815 pxor xmm15,xmm13
816 pxor xmm0,xmm13
817 pshufd xmm11,xmm1,0x4E
818 pxor xmm10,xmm3
819 pxor xmm5,xmm7
820 pxor xmm3,xmm8
821 pshufd xmm12,xmm6,0x4E
822 pxor xmm11,xmm1
823 pxor xmm0,xmm14
824 pxor xmm1,xmm9
825 pxor xmm12,xmm6
826
827 pxor xmm5,xmm14
828 pxor xmm3,xmm13
829 pxor xmm1,xmm13
830 pxor xmm6,xmm10
831 pxor xmm2,xmm11
832 pxor xmm1,xmm14
833 pxor xmm6,xmm14
834 pxor xmm4,xmm12
835 pshufd xmm7,xmm15,0x93
836 pshufd xmm8,xmm0,0x93
837 pxor xmm15,xmm7
838 pshufd xmm9,xmm5,0x93
839 pxor xmm0,xmm8
840 pshufd xmm10,xmm3,0x93
841 pxor xmm5,xmm9
842 pshufd xmm11,xmm1,0x93
843 pxor xmm3,xmm10
844 pshufd xmm12,xmm6,0x93
845 pxor xmm1,xmm11
846 pshufd xmm13,xmm2,0x93
847 pxor xmm6,xmm12
848 pshufd xmm14,xmm4,0x93
849 pxor xmm2,xmm13
850 pxor xmm4,xmm14
851
852 pxor xmm8,xmm15
853 pxor xmm7,xmm4
854 pxor xmm8,xmm4
855 pshufd xmm15,xmm15,0x4E
856 pxor xmm9,xmm0
857 pshufd xmm0,xmm0,0x4E
858 pxor xmm12,xmm1
859 pxor xmm15,xmm7
860 pxor xmm13,xmm6
861 pxor xmm0,xmm8
862 pxor xmm11,xmm3
863 pshufd xmm7,xmm1,0x4E
864 pxor xmm14,xmm2
865 pshufd xmm8,xmm6,0x4E
866 pxor xmm10,xmm5
867 pshufd xmm1,xmm3,0x4E
868 pxor xmm10,xmm4
869 pshufd xmm6,xmm4,0x4E
870 pxor xmm11,xmm4
871 pshufd xmm3,xmm2,0x4E
872 pxor xmm7,xmm11
873 pshufd xmm2,xmm5,0x4E
874 pxor xmm8,xmm12
875 pxor xmm10,xmm1
876 pxor xmm6,xmm14
877 pxor xmm13,xmm3
878 movdqa xmm3,xmm7
879 pxor xmm2,xmm9
880 movdqa xmm5,xmm13
881 movdqa xmm4,xmm8
882 movdqa xmm1,xmm2
883 movdqa xmm2,xmm10
884 movdqa xmm7,XMMWORD[((-16))+r11]
885 jnz NEAR $L$dec_loop
886 movdqa xmm7,XMMWORD[((-32))+r11]
887 jmp NEAR $L$dec_loop
888 ALIGN 16
889 $L$dec_done:
890 movdqa xmm7,XMMWORD[r11]
891 movdqa xmm8,XMMWORD[16+r11]
892 movdqa xmm9,xmm2
893 psrlq xmm2,1
894 movdqa xmm10,xmm1
895 psrlq xmm1,1
896 pxor xmm2,xmm4
897 pxor xmm1,xmm6
898 pand xmm2,xmm7
899 pand xmm1,xmm7
900 pxor xmm4,xmm2
901 psllq xmm2,1
902 pxor xmm6,xmm1
903 psllq xmm1,1
904 pxor xmm2,xmm9
905 pxor xmm1,xmm10
906 movdqa xmm9,xmm5
907 psrlq xmm5,1
908 movdqa xmm10,xmm15
909 psrlq xmm15,1
910 pxor xmm5,xmm3
911 pxor xmm15,xmm0
912 pand xmm5,xmm7
913 pand xmm15,xmm7
914 pxor xmm3,xmm5
915 psllq xmm5,1
916 pxor xmm0,xmm15
917 psllq xmm15,1
918 pxor xmm5,xmm9
919 pxor xmm15,xmm10
920 movdqa xmm7,XMMWORD[32+r11]
921 movdqa xmm9,xmm6
922 psrlq xmm6,2
923 movdqa xmm10,xmm1
924 psrlq xmm1,2
925 pxor xmm6,xmm4
926 pxor xmm1,xmm2
927 pand xmm6,xmm8
928 pand xmm1,xmm8
929 pxor xmm4,xmm6
930 psllq xmm6,2
931 pxor xmm2,xmm1
932 psllq xmm1,2
933 pxor xmm6,xmm9
934 pxor xmm1,xmm10
935 movdqa xmm9,xmm0
936 psrlq xmm0,2
937 movdqa xmm10,xmm15
938 psrlq xmm15,2
939 pxor xmm0,xmm3
940 pxor xmm15,xmm5
941 pand xmm0,xmm8
942 pand xmm15,xmm8
943 pxor xmm3,xmm0
944 psllq xmm0,2
945 pxor xmm5,xmm15
946 psllq xmm15,2
947 pxor xmm0,xmm9
948 pxor xmm15,xmm10
949 movdqa xmm9,xmm3
950 psrlq xmm3,4
951 movdqa xmm10,xmm5
952 psrlq xmm5,4
953 pxor xmm3,xmm4
954 pxor xmm5,xmm2
955 pand xmm3,xmm7
956 pand xmm5,xmm7
957 pxor xmm4,xmm3
958 psllq xmm3,4
959 pxor xmm2,xmm5
960 psllq xmm5,4
961 pxor xmm3,xmm9
962 pxor xmm5,xmm10
963 movdqa xmm9,xmm0
964 psrlq xmm0,4
965 movdqa xmm10,xmm15
966 psrlq xmm15,4
967 pxor xmm0,xmm6
968 pxor xmm15,xmm1
969 pand xmm0,xmm7
970 pand xmm15,xmm7
971 pxor xmm6,xmm0
972 psllq xmm0,4
973 pxor xmm1,xmm15
974 psllq xmm15,4
975 pxor xmm0,xmm9
976 pxor xmm15,xmm10
977 movdqa xmm7,XMMWORD[rax]
978 pxor xmm5,xmm7
979 pxor xmm3,xmm7
980 pxor xmm1,xmm7
981 pxor xmm6,xmm7
982 pxor xmm2,xmm7
983 pxor xmm4,xmm7
984 pxor xmm15,xmm7
985 pxor xmm0,xmm7
986 DB 0F3h,0C3h ;repret
987
988
989 ALIGN 16
990 _bsaes_key_convert:
991 lea r11,[$L$masks]
992 movdqu xmm7,XMMWORD[rcx]
993 lea rcx,[16+rcx]
994 movdqa xmm0,XMMWORD[r11]
995 movdqa xmm1,XMMWORD[16+r11]
996 movdqa xmm2,XMMWORD[32+r11]
997 movdqa xmm3,XMMWORD[48+r11]
998 movdqa xmm4,XMMWORD[64+r11]
999 pcmpeqd xmm5,xmm5
1000
1001 movdqu xmm6,XMMWORD[rcx]
1002 movdqa XMMWORD[rax],xmm7
1003 lea rax,[16+rax]
1004 dec r10d
1005 jmp NEAR $L$key_loop
1006 ALIGN 16
1007 $L$key_loop:
1008 DB 102,15,56,0,244
1009
1010 movdqa xmm8,xmm0
1011 movdqa xmm9,xmm1
1012
1013 pand xmm8,xmm6
1014 pand xmm9,xmm6
1015 movdqa xmm10,xmm2
1016 pcmpeqb xmm8,xmm0
1017 psllq xmm0,4
1018 movdqa xmm11,xmm3
1019 pcmpeqb xmm9,xmm1
1020 psllq xmm1,4
1021
1022 pand xmm10,xmm6
1023 pand xmm11,xmm6
1024 movdqa xmm12,xmm0
1025 pcmpeqb xmm10,xmm2
1026 psllq xmm2,4
1027 movdqa xmm13,xmm1
1028 pcmpeqb xmm11,xmm3
1029 psllq xmm3,4
1030
1031 movdqa xmm14,xmm2
1032 movdqa xmm15,xmm3
1033 pxor xmm8,xmm5
1034 pxor xmm9,xmm5
1035
1036 pand xmm12,xmm6
1037 pand xmm13,xmm6
1038 movdqa XMMWORD[rax],xmm8
1039 pcmpeqb xmm12,xmm0
1040 psrlq xmm0,4
1041 movdqa XMMWORD[16+rax],xmm9
1042 pcmpeqb xmm13,xmm1
1043 psrlq xmm1,4
1044 lea rcx,[16+rcx]
1045
1046 pand xmm14,xmm6
1047 pand xmm15,xmm6
1048 movdqa XMMWORD[32+rax],xmm10
1049 pcmpeqb xmm14,xmm2
1050 psrlq xmm2,4
1051 movdqa XMMWORD[48+rax],xmm11
1052 pcmpeqb xmm15,xmm3
1053 psrlq xmm3,4
1054 movdqu xmm6,XMMWORD[rcx]
1055
1056 pxor xmm13,xmm5
1057 pxor xmm14,xmm5
1058 movdqa XMMWORD[64+rax],xmm12
1059 movdqa XMMWORD[80+rax],xmm13
1060 movdqa XMMWORD[96+rax],xmm14
1061 movdqa XMMWORD[112+rax],xmm15
1062 lea rax,[128+rax]
1063 dec r10d
1064 jnz NEAR $L$key_loop
1065
1066 movdqa xmm7,XMMWORD[80+r11]
1067
1068 DB 0F3h,0C3h ;repret
1069
1070 EXTERN asm_AES_cbc_encrypt
1071 global bsaes_cbc_encrypt
1072
1073 ALIGN 16
1074 bsaes_cbc_encrypt:
1075 mov r11d,DWORD[48+rsp]
1076 cmp r11d,0
1077 jne NEAR asm_AES_cbc_encrypt
1078 cmp r8,128
1079 jb NEAR asm_AES_cbc_encrypt
1080
1081 mov rax,rsp
1082 $L$cbc_dec_prologue:
1083 push rbp
1084 push rbx
1085 push r12
1086 push r13
1087 push r14
1088 push r15
1089 lea rsp,[((-72))+rsp]
1090 mov r10,QWORD[160+rsp]
1091 lea rsp,[((-160))+rsp]
1092 movaps XMMWORD[64+rsp],xmm6
1093 movaps XMMWORD[80+rsp],xmm7
1094 movaps XMMWORD[96+rsp],xmm8
1095 movaps XMMWORD[112+rsp],xmm9
1096 movaps XMMWORD[128+rsp],xmm10
1097 movaps XMMWORD[144+rsp],xmm11
1098 movaps XMMWORD[160+rsp],xmm12
1099 movaps XMMWORD[176+rsp],xmm13
1100 movaps XMMWORD[192+rsp],xmm14
1101 movaps XMMWORD[208+rsp],xmm15
1102 $L$cbc_dec_body:
1103 mov rbp,rsp
1104 mov eax,DWORD[240+r9]
1105 mov r12,rcx
1106 mov r13,rdx
1107 mov r14,r8
1108 mov r15,r9
1109 mov rbx,r10
1110 shr r14,4
1111
1112 mov edx,eax
1113 shl rax,7
1114 sub rax,96
1115 sub rsp,rax
1116
1117 mov rax,rsp
1118 mov rcx,r15
1119 mov r10d,edx
1120 call _bsaes_key_convert
1121 pxor xmm7,XMMWORD[rsp]
1122 movdqa XMMWORD[rax],xmm6
1123 movdqa XMMWORD[rsp],xmm7
1124
1125 movdqu xmm14,XMMWORD[rbx]
1126 sub r14,8
1127 $L$cbc_dec_loop:
1128 movdqu xmm15,XMMWORD[r12]
1129 movdqu xmm0,XMMWORD[16+r12]
1130 movdqu xmm1,XMMWORD[32+r12]
1131 movdqu xmm2,XMMWORD[48+r12]
1132 movdqu xmm3,XMMWORD[64+r12]
1133 movdqu xmm4,XMMWORD[80+r12]
1134 mov rax,rsp
1135 movdqu xmm5,XMMWORD[96+r12]
1136 mov r10d,edx
1137 movdqu xmm6,XMMWORD[112+r12]
1138 movdqa XMMWORD[32+rbp],xmm14
1139
1140 call _bsaes_decrypt8
1141
1142 pxor xmm15,XMMWORD[32+rbp]
1143 movdqu xmm7,XMMWORD[r12]
1144 movdqu xmm8,XMMWORD[16+r12]
1145 pxor xmm0,xmm7
1146 movdqu xmm9,XMMWORD[32+r12]
1147 pxor xmm5,xmm8
1148 movdqu xmm10,XMMWORD[48+r12]
1149 pxor xmm3,xmm9
1150 movdqu xmm11,XMMWORD[64+r12]
1151 pxor xmm1,xmm10
1152 movdqu xmm12,XMMWORD[80+r12]
1153 pxor xmm6,xmm11
1154 movdqu xmm13,XMMWORD[96+r12]
1155 pxor xmm2,xmm12
1156 movdqu xmm14,XMMWORD[112+r12]
1157 pxor xmm4,xmm13
1158 movdqu XMMWORD[r13],xmm15
1159 lea r12,[128+r12]
1160 movdqu XMMWORD[16+r13],xmm0
1161 movdqu XMMWORD[32+r13],xmm5
1162 movdqu XMMWORD[48+r13],xmm3
1163 movdqu XMMWORD[64+r13],xmm1
1164 movdqu XMMWORD[80+r13],xmm6
1165 movdqu XMMWORD[96+r13],xmm2
1166 movdqu XMMWORD[112+r13],xmm4
1167 lea r13,[128+r13]
1168 sub r14,8
1169 jnc NEAR $L$cbc_dec_loop
1170
1171 add r14,8
1172 jz NEAR $L$cbc_dec_done
1173
1174 movdqu xmm15,XMMWORD[r12]
1175 mov rax,rsp
1176 mov r10d,edx
1177 cmp r14,2
1178 jb NEAR $L$cbc_dec_one
1179 movdqu xmm0,XMMWORD[16+r12]
1180 je NEAR $L$cbc_dec_two
1181 movdqu xmm1,XMMWORD[32+r12]
1182 cmp r14,4
1183 jb NEAR $L$cbc_dec_three
1184 movdqu xmm2,XMMWORD[48+r12]
1185 je NEAR $L$cbc_dec_four
1186 movdqu xmm3,XMMWORD[64+r12]
1187 cmp r14,6
1188 jb NEAR $L$cbc_dec_five
1189 movdqu xmm4,XMMWORD[80+r12]
1190 je NEAR $L$cbc_dec_six
1191 movdqu xmm5,XMMWORD[96+r12]
1192 movdqa XMMWORD[32+rbp],xmm14
1193 call _bsaes_decrypt8
1194 pxor xmm15,XMMWORD[32+rbp]
1195 movdqu xmm7,XMMWORD[r12]
1196 movdqu xmm8,XMMWORD[16+r12]
1197 pxor xmm0,xmm7
1198 movdqu xmm9,XMMWORD[32+r12]
1199 pxor xmm5,xmm8
1200 movdqu xmm10,XMMWORD[48+r12]
1201 pxor xmm3,xmm9
1202 movdqu xmm11,XMMWORD[64+r12]
1203 pxor xmm1,xmm10
1204 movdqu xmm12,XMMWORD[80+r12]
1205 pxor xmm6,xmm11
1206 movdqu xmm14,XMMWORD[96+r12]
1207 pxor xmm2,xmm12
1208 movdqu XMMWORD[r13],xmm15
1209 movdqu XMMWORD[16+r13],xmm0
1210 movdqu XMMWORD[32+r13],xmm5
1211 movdqu XMMWORD[48+r13],xmm3
1212 movdqu XMMWORD[64+r13],xmm1
1213 movdqu XMMWORD[80+r13],xmm6
1214 movdqu XMMWORD[96+r13],xmm2
1215 jmp NEAR $L$cbc_dec_done
1216 ALIGN 16
1217 $L$cbc_dec_six:
1218 movdqa XMMWORD[32+rbp],xmm14
1219 call _bsaes_decrypt8
1220 pxor xmm15,XMMWORD[32+rbp]
1221 movdqu xmm7,XMMWORD[r12]
1222 movdqu xmm8,XMMWORD[16+r12]
1223 pxor xmm0,xmm7
1224 movdqu xmm9,XMMWORD[32+r12]
1225 pxor xmm5,xmm8
1226 movdqu xmm10,XMMWORD[48+r12]
1227 pxor xmm3,xmm9
1228 movdqu xmm11,XMMWORD[64+r12]
1229 pxor xmm1,xmm10
1230 movdqu xmm14,XMMWORD[80+r12]
1231 pxor xmm6,xmm11
1232 movdqu XMMWORD[r13],xmm15
1233 movdqu XMMWORD[16+r13],xmm0
1234 movdqu XMMWORD[32+r13],xmm5
1235 movdqu XMMWORD[48+r13],xmm3
1236 movdqu XMMWORD[64+r13],xmm1
1237 movdqu XMMWORD[80+r13],xmm6
1238 jmp NEAR $L$cbc_dec_done
1239 ALIGN 16
1240 $L$cbc_dec_five:
1241 movdqa XMMWORD[32+rbp],xmm14
1242 call _bsaes_decrypt8
1243 pxor xmm15,XMMWORD[32+rbp]
1244 movdqu xmm7,XMMWORD[r12]
1245 movdqu xmm8,XMMWORD[16+r12]
1246 pxor xmm0,xmm7
1247 movdqu xmm9,XMMWORD[32+r12]
1248 pxor xmm5,xmm8
1249 movdqu xmm10,XMMWORD[48+r12]
1250 pxor xmm3,xmm9
1251 movdqu xmm14,XMMWORD[64+r12]
1252 pxor xmm1,xmm10
1253 movdqu XMMWORD[r13],xmm15
1254 movdqu XMMWORD[16+r13],xmm0
1255 movdqu XMMWORD[32+r13],xmm5
1256 movdqu XMMWORD[48+r13],xmm3
1257 movdqu XMMWORD[64+r13],xmm1
1258 jmp NEAR $L$cbc_dec_done
1259 ALIGN 16
1260 $L$cbc_dec_four:
1261 movdqa XMMWORD[32+rbp],xmm14
1262 call _bsaes_decrypt8
1263 pxor xmm15,XMMWORD[32+rbp]
1264 movdqu xmm7,XMMWORD[r12]
1265 movdqu xmm8,XMMWORD[16+r12]
1266 pxor xmm0,xmm7
1267 movdqu xmm9,XMMWORD[32+r12]
1268 pxor xmm5,xmm8
1269 movdqu xmm14,XMMWORD[48+r12]
1270 pxor xmm3,xmm9
1271 movdqu XMMWORD[r13],xmm15
1272 movdqu XMMWORD[16+r13],xmm0
1273 movdqu XMMWORD[32+r13],xmm5
1274 movdqu XMMWORD[48+r13],xmm3
1275 jmp NEAR $L$cbc_dec_done
1276 ALIGN 16
1277 $L$cbc_dec_three:
1278 movdqa XMMWORD[32+rbp],xmm14
1279 call _bsaes_decrypt8
1280 pxor xmm15,XMMWORD[32+rbp]
1281 movdqu xmm7,XMMWORD[r12]
1282 movdqu xmm8,XMMWORD[16+r12]
1283 pxor xmm0,xmm7
1284 movdqu xmm14,XMMWORD[32+r12]
1285 pxor xmm5,xmm8
1286 movdqu XMMWORD[r13],xmm15
1287 movdqu XMMWORD[16+r13],xmm0
1288 movdqu XMMWORD[32+r13],xmm5
1289 jmp NEAR $L$cbc_dec_done
1290 ALIGN 16
1291 $L$cbc_dec_two:
1292 movdqa XMMWORD[32+rbp],xmm14
1293 call _bsaes_decrypt8
1294 pxor xmm15,XMMWORD[32+rbp]
1295 movdqu xmm7,XMMWORD[r12]
1296 movdqu xmm14,XMMWORD[16+r12]
1297 pxor xmm0,xmm7
1298 movdqu XMMWORD[r13],xmm15
1299 movdqu XMMWORD[16+r13],xmm0
1300 jmp NEAR $L$cbc_dec_done
1301 ALIGN 16
1302 $L$cbc_dec_one:
1303 lea rcx,[r12]
1304 lea rdx,[32+rbp]
1305 lea r8,[r15]
1306 call asm_AES_decrypt
1307 pxor xmm14,XMMWORD[32+rbp]
1308 movdqu XMMWORD[r13],xmm14
1309 movdqa xmm14,xmm15
1310
1311 $L$cbc_dec_done:
1312 movdqu XMMWORD[rbx],xmm14
1313 lea rax,[rsp]
1314 pxor xmm0,xmm0
1315 $L$cbc_dec_bzero:
1316 movdqa XMMWORD[rax],xmm0
1317 movdqa XMMWORD[16+rax],xmm0
1318 lea rax,[32+rax]
1319 cmp rbp,rax
1320 ja NEAR $L$cbc_dec_bzero
1321
1322 lea rsp,[rbp]
1323 movaps xmm6,XMMWORD[64+rbp]
1324 movaps xmm7,XMMWORD[80+rbp]
1325 movaps xmm8,XMMWORD[96+rbp]
1326 movaps xmm9,XMMWORD[112+rbp]
1327 movaps xmm10,XMMWORD[128+rbp]
1328 movaps xmm11,XMMWORD[144+rbp]
1329 movaps xmm12,XMMWORD[160+rbp]
1330 movaps xmm13,XMMWORD[176+rbp]
1331 movaps xmm14,XMMWORD[192+rbp]
1332 movaps xmm15,XMMWORD[208+rbp]
1333 lea rsp,[160+rbp]
1334 mov r15,QWORD[72+rsp]
1335 mov r14,QWORD[80+rsp]
1336 mov r13,QWORD[88+rsp]
1337 mov r12,QWORD[96+rsp]
1338 mov rbx,QWORD[104+rsp]
1339 mov rax,QWORD[112+rsp]
1340 lea rsp,[120+rsp]
1341 mov rbp,rax
1342 $L$cbc_dec_epilogue:
1343 DB 0F3h,0C3h ;repret
1344
1345
1346 global bsaes_ctr32_encrypt_blocks
1347
1348 ALIGN 16
1349 bsaes_ctr32_encrypt_blocks:
1350 mov rax,rsp
1351 $L$ctr_enc_prologue:
1352 push rbp
1353 push rbx
1354 push r12
1355 push r13
1356 push r14
1357 push r15
1358 lea rsp,[((-72))+rsp]
1359 mov r10,QWORD[160+rsp]
1360 lea rsp,[((-160))+rsp]
1361 movaps XMMWORD[64+rsp],xmm6
1362 movaps XMMWORD[80+rsp],xmm7
1363 movaps XMMWORD[96+rsp],xmm8
1364 movaps XMMWORD[112+rsp],xmm9
1365 movaps XMMWORD[128+rsp],xmm10
1366 movaps XMMWORD[144+rsp],xmm11
1367 movaps XMMWORD[160+rsp],xmm12
1368 movaps XMMWORD[176+rsp],xmm13
1369 movaps XMMWORD[192+rsp],xmm14
1370 movaps XMMWORD[208+rsp],xmm15
1371 $L$ctr_enc_body:
1372 mov rbp,rsp
1373 movdqu xmm0,XMMWORD[r10]
1374 mov eax,DWORD[240+r9]
1375 mov r12,rcx
1376 mov r13,rdx
1377 mov r14,r8
1378 mov r15,r9
1379 movdqa XMMWORD[32+rbp],xmm0
1380 cmp r8,8
1381 jb NEAR $L$ctr_enc_short
1382
1383 mov ebx,eax
1384 shl rax,7
1385 sub rax,96
1386 sub rsp,rax
1387
1388 mov rax,rsp
1389 mov rcx,r15
1390 mov r10d,ebx
1391 call _bsaes_key_convert
1392 pxor xmm7,xmm6
1393 movdqa XMMWORD[rax],xmm7
1394
1395 movdqa xmm8,XMMWORD[rsp]
1396 lea r11,[$L$ADD1]
1397 movdqa xmm15,XMMWORD[32+rbp]
1398 movdqa xmm7,XMMWORD[((-32))+r11]
1399 DB 102,68,15,56,0,199
1400 DB 102,68,15,56,0,255
1401 movdqa XMMWORD[rsp],xmm8
1402 jmp NEAR $L$ctr_enc_loop
1403 ALIGN 16
1404 $L$ctr_enc_loop:
1405 movdqa XMMWORD[32+rbp],xmm15
1406 movdqa xmm0,xmm15
1407 movdqa xmm1,xmm15
1408 paddd xmm0,XMMWORD[r11]
1409 movdqa xmm2,xmm15
1410 paddd xmm1,XMMWORD[16+r11]
1411 movdqa xmm3,xmm15
1412 paddd xmm2,XMMWORD[32+r11]
1413 movdqa xmm4,xmm15
1414 paddd xmm3,XMMWORD[48+r11]
1415 movdqa xmm5,xmm15
1416 paddd xmm4,XMMWORD[64+r11]
1417 movdqa xmm6,xmm15
1418 paddd xmm5,XMMWORD[80+r11]
1419 paddd xmm6,XMMWORD[96+r11]
1420
1421
1422
1423 movdqa xmm8,XMMWORD[rsp]
1424 lea rax,[16+rsp]
1425 movdqa xmm7,XMMWORD[((-16))+r11]
1426 pxor xmm15,xmm8
1427 pxor xmm0,xmm8
1428 pxor xmm1,xmm8
1429 pxor xmm2,xmm8
1430 DB 102,68,15,56,0,255
1431 DB 102,15,56,0,199
1432 pxor xmm3,xmm8
1433 pxor xmm4,xmm8
1434 DB 102,15,56,0,207
1435 DB 102,15,56,0,215
1436 pxor xmm5,xmm8
1437 pxor xmm6,xmm8
1438 DB 102,15,56,0,223
1439 DB 102,15,56,0,231
1440 DB 102,15,56,0,239
1441 DB 102,15,56,0,247
1442 lea r11,[$L$BS0]
1443 mov r10d,ebx
1444
1445 call _bsaes_encrypt8_bitslice
1446
1447 sub r14,8
1448 jc NEAR $L$ctr_enc_loop_done
1449
1450 movdqu xmm7,XMMWORD[r12]
1451 movdqu xmm8,XMMWORD[16+r12]
1452 movdqu xmm9,XMMWORD[32+r12]
1453 movdqu xmm10,XMMWORD[48+r12]
1454 movdqu xmm11,XMMWORD[64+r12]
1455 movdqu xmm12,XMMWORD[80+r12]
1456 movdqu xmm13,XMMWORD[96+r12]
1457 movdqu xmm14,XMMWORD[112+r12]
1458 lea r12,[128+r12]
1459 pxor xmm7,xmm15
1460 movdqa xmm15,XMMWORD[32+rbp]
1461 pxor xmm0,xmm8
1462 movdqu XMMWORD[r13],xmm7
1463 pxor xmm3,xmm9
1464 movdqu XMMWORD[16+r13],xmm0
1465 pxor xmm5,xmm10
1466 movdqu XMMWORD[32+r13],xmm3
1467 pxor xmm2,xmm11
1468 movdqu XMMWORD[48+r13],xmm5
1469 pxor xmm6,xmm12
1470 movdqu XMMWORD[64+r13],xmm2
1471 pxor xmm1,xmm13
1472 movdqu XMMWORD[80+r13],xmm6
1473 pxor xmm4,xmm14
1474 movdqu XMMWORD[96+r13],xmm1
1475 lea r11,[$L$ADD1]
1476 movdqu XMMWORD[112+r13],xmm4
1477 lea r13,[128+r13]
1478 paddd xmm15,XMMWORD[112+r11]
1479 jnz NEAR $L$ctr_enc_loop
1480
1481 jmp NEAR $L$ctr_enc_done
1482 ALIGN 16
1483 $L$ctr_enc_loop_done:
1484 add r14,8
1485 movdqu xmm7,XMMWORD[r12]
1486 pxor xmm15,xmm7
1487 movdqu XMMWORD[r13],xmm15
1488 cmp r14,2
1489 jb NEAR $L$ctr_enc_done
1490 movdqu xmm8,XMMWORD[16+r12]
1491 pxor xmm0,xmm8
1492 movdqu XMMWORD[16+r13],xmm0
1493 je NEAR $L$ctr_enc_done
1494 movdqu xmm9,XMMWORD[32+r12]
1495 pxor xmm3,xmm9
1496 movdqu XMMWORD[32+r13],xmm3
1497 cmp r14,4
1498 jb NEAR $L$ctr_enc_done
1499 movdqu xmm10,XMMWORD[48+r12]
1500 pxor xmm5,xmm10
1501 movdqu XMMWORD[48+r13],xmm5
1502 je NEAR $L$ctr_enc_done
1503 movdqu xmm11,XMMWORD[64+r12]
1504 pxor xmm2,xmm11
1505 movdqu XMMWORD[64+r13],xmm2
1506 cmp r14,6
1507 jb NEAR $L$ctr_enc_done
1508 movdqu xmm12,XMMWORD[80+r12]
1509 pxor xmm6,xmm12
1510 movdqu XMMWORD[80+r13],xmm6
1511 je NEAR $L$ctr_enc_done
1512 movdqu xmm13,XMMWORD[96+r12]
1513 pxor xmm1,xmm13
1514 movdqu XMMWORD[96+r13],xmm1
1515 jmp NEAR $L$ctr_enc_done
1516
1517 ALIGN 16
1518 $L$ctr_enc_short:
1519 lea rcx,[32+rbp]
1520 lea rdx,[48+rbp]
1521 lea r8,[r15]
1522 call asm_AES_encrypt
1523 movdqu xmm0,XMMWORD[r12]
1524 lea r12,[16+r12]
1525 mov eax,DWORD[44+rbp]
1526 bswap eax
1527 pxor xmm0,XMMWORD[48+rbp]
1528 inc eax
1529 movdqu XMMWORD[r13],xmm0
1530 bswap eax
1531 lea r13,[16+r13]
1532 mov DWORD[44+rsp],eax
1533 dec r14
1534 jnz NEAR $L$ctr_enc_short
1535
1536 $L$ctr_enc_done:
1537 lea rax,[rsp]
1538 pxor xmm0,xmm0
1539 $L$ctr_enc_bzero:
1540 movdqa XMMWORD[rax],xmm0
1541 movdqa XMMWORD[16+rax],xmm0
1542 lea rax,[32+rax]
1543 cmp rbp,rax
1544 ja NEAR $L$ctr_enc_bzero
1545
1546 lea rsp,[rbp]
1547 movaps xmm6,XMMWORD[64+rbp]
1548 movaps xmm7,XMMWORD[80+rbp]
1549 movaps xmm8,XMMWORD[96+rbp]
1550 movaps xmm9,XMMWORD[112+rbp]
1551 movaps xmm10,XMMWORD[128+rbp]
1552 movaps xmm11,XMMWORD[144+rbp]
1553 movaps xmm12,XMMWORD[160+rbp]
1554 movaps xmm13,XMMWORD[176+rbp]
1555 movaps xmm14,XMMWORD[192+rbp]
1556 movaps xmm15,XMMWORD[208+rbp]
1557 lea rsp,[160+rbp]
1558 mov r15,QWORD[72+rsp]
1559 mov r14,QWORD[80+rsp]
1560 mov r13,QWORD[88+rsp]
1561 mov r12,QWORD[96+rsp]
1562 mov rbx,QWORD[104+rsp]
1563 mov rax,QWORD[112+rsp]
1564 lea rsp,[120+rsp]
1565 mov rbp,rax
1566 $L$ctr_enc_epilogue:
1567 DB 0F3h,0C3h ;repret
1568
1569 global bsaes_xts_encrypt
1570
1571 ALIGN 16
1572 bsaes_xts_encrypt:
1573 mov rax,rsp
1574 $L$xts_enc_prologue:
1575 push rbp
1576 push rbx
1577 push r12
1578 push r13
1579 push r14
1580 push r15
1581 lea rsp,[((-72))+rsp]
1582 mov r10,QWORD[160+rsp]
1583 mov r11,QWORD[168+rsp]
1584 lea rsp,[((-160))+rsp]
1585 movaps XMMWORD[64+rsp],xmm6
1586 movaps XMMWORD[80+rsp],xmm7
1587 movaps XMMWORD[96+rsp],xmm8
1588 movaps XMMWORD[112+rsp],xmm9
1589 movaps XMMWORD[128+rsp],xmm10
1590 movaps XMMWORD[144+rsp],xmm11
1591 movaps XMMWORD[160+rsp],xmm12
1592 movaps XMMWORD[176+rsp],xmm13
1593 movaps XMMWORD[192+rsp],xmm14
1594 movaps XMMWORD[208+rsp],xmm15
1595 $L$xts_enc_body:
1596 mov rbp,rsp
1597 mov r12,rcx
1598 mov r13,rdx
1599 mov r14,r8
1600 mov r15,r9
1601
1602 lea rcx,[r11]
1603 lea rdx,[32+rbp]
1604 lea r8,[r10]
1605 call asm_AES_encrypt
1606
1607 mov eax,DWORD[240+r15]
1608 mov rbx,r14
1609
1610 mov edx,eax
1611 shl rax,7
1612 sub rax,96
1613 sub rsp,rax
1614
1615 mov rax,rsp
1616 mov rcx,r15
1617 mov r10d,edx
1618 call _bsaes_key_convert
1619 pxor xmm7,xmm6
1620 movdqa XMMWORD[rax],xmm7
1621
1622 and r14,-16
1623 sub rsp,0x80
1624 movdqa xmm6,XMMWORD[32+rbp]
1625
1626 pxor xmm14,xmm14
1627 movdqa xmm12,XMMWORD[$L$xts_magic]
1628 pcmpgtd xmm14,xmm6
1629
1630 sub r14,0x80
1631 jc NEAR $L$xts_enc_short
1632 jmp NEAR $L$xts_enc_loop
1633
1634 ALIGN 16
1635 $L$xts_enc_loop:
1636 pshufd xmm13,xmm14,0x13
1637 pxor xmm14,xmm14
1638 movdqa xmm15,xmm6
1639 movdqa XMMWORD[rsp],xmm6
1640 paddq xmm6,xmm6
1641 pand xmm13,xmm12
1642 pcmpgtd xmm14,xmm6
1643 pxor xmm6,xmm13
1644 pshufd xmm13,xmm14,0x13
1645 pxor xmm14,xmm14
1646 movdqa xmm0,xmm6
1647 movdqa XMMWORD[16+rsp],xmm6
1648 paddq xmm6,xmm6
1649 pand xmm13,xmm12
1650 pcmpgtd xmm14,xmm6
1651 pxor xmm6,xmm13
1652 movdqu xmm7,XMMWORD[r12]
1653 pshufd xmm13,xmm14,0x13
1654 pxor xmm14,xmm14
1655 movdqa xmm1,xmm6
1656 movdqa XMMWORD[32+rsp],xmm6
1657 paddq xmm6,xmm6
1658 pand xmm13,xmm12
1659 pcmpgtd xmm14,xmm6
1660 pxor xmm6,xmm13
1661 movdqu xmm8,XMMWORD[16+r12]
1662 pxor xmm15,xmm7
1663 pshufd xmm13,xmm14,0x13
1664 pxor xmm14,xmm14
1665 movdqa xmm2,xmm6
1666 movdqa XMMWORD[48+rsp],xmm6
1667 paddq xmm6,xmm6
1668 pand xmm13,xmm12
1669 pcmpgtd xmm14,xmm6
1670 pxor xmm6,xmm13
1671 movdqu xmm9,XMMWORD[32+r12]
1672 pxor xmm0,xmm8
1673 pshufd xmm13,xmm14,0x13
1674 pxor xmm14,xmm14
1675 movdqa xmm3,xmm6
1676 movdqa XMMWORD[64+rsp],xmm6
1677 paddq xmm6,xmm6
1678 pand xmm13,xmm12
1679 pcmpgtd xmm14,xmm6
1680 pxor xmm6,xmm13
1681 movdqu xmm10,XMMWORD[48+r12]
1682 pxor xmm1,xmm9
1683 pshufd xmm13,xmm14,0x13
1684 pxor xmm14,xmm14
1685 movdqa xmm4,xmm6
1686 movdqa XMMWORD[80+rsp],xmm6
1687 paddq xmm6,xmm6
1688 pand xmm13,xmm12
1689 pcmpgtd xmm14,xmm6
1690 pxor xmm6,xmm13
1691 movdqu xmm11,XMMWORD[64+r12]
1692 pxor xmm2,xmm10
1693 pshufd xmm13,xmm14,0x13
1694 pxor xmm14,xmm14
1695 movdqa xmm5,xmm6
1696 movdqa XMMWORD[96+rsp],xmm6
1697 paddq xmm6,xmm6
1698 pand xmm13,xmm12
1699 pcmpgtd xmm14,xmm6
1700 pxor xmm6,xmm13
1701 movdqu xmm12,XMMWORD[80+r12]
1702 pxor xmm3,xmm11
1703 movdqu xmm13,XMMWORD[96+r12]
1704 pxor xmm4,xmm12
1705 movdqu xmm14,XMMWORD[112+r12]
1706 lea r12,[128+r12]
1707 movdqa XMMWORD[112+rsp],xmm6
1708 pxor xmm5,xmm13
1709 lea rax,[128+rsp]
1710 pxor xmm6,xmm14
1711 mov r10d,edx
1712
1713 call _bsaes_encrypt8
1714
1715 pxor xmm15,XMMWORD[rsp]
1716 pxor xmm0,XMMWORD[16+rsp]
1717 movdqu XMMWORD[r13],xmm15
1718 pxor xmm3,XMMWORD[32+rsp]
1719 movdqu XMMWORD[16+r13],xmm0
1720 pxor xmm5,XMMWORD[48+rsp]
1721 movdqu XMMWORD[32+r13],xmm3
1722 pxor xmm2,XMMWORD[64+rsp]
1723 movdqu XMMWORD[48+r13],xmm5
1724 pxor xmm6,XMMWORD[80+rsp]
1725 movdqu XMMWORD[64+r13],xmm2
1726 pxor xmm1,XMMWORD[96+rsp]
1727 movdqu XMMWORD[80+r13],xmm6
1728 pxor xmm4,XMMWORD[112+rsp]
1729 movdqu XMMWORD[96+r13],xmm1
1730 movdqu XMMWORD[112+r13],xmm4
1731 lea r13,[128+r13]
1732
1733 movdqa xmm6,XMMWORD[112+rsp]
1734 pxor xmm14,xmm14
1735 movdqa xmm12,XMMWORD[$L$xts_magic]
1736 pcmpgtd xmm14,xmm6
1737 pshufd xmm13,xmm14,0x13
1738 pxor xmm14,xmm14
1739 paddq xmm6,xmm6
1740 pand xmm13,xmm12
1741 pcmpgtd xmm14,xmm6
1742 pxor xmm6,xmm13
1743
1744 sub r14,0x80
1745 jnc NEAR $L$xts_enc_loop
1746
1747 $L$xts_enc_short:
1748 add r14,0x80
1749 jz NEAR $L$xts_enc_done
1750 pshufd xmm13,xmm14,0x13
1751 pxor xmm14,xmm14
1752 movdqa xmm15,xmm6
1753 movdqa XMMWORD[rsp],xmm6
1754 paddq xmm6,xmm6
1755 pand xmm13,xmm12
1756 pcmpgtd xmm14,xmm6
1757 pxor xmm6,xmm13
1758 pshufd xmm13,xmm14,0x13
1759 pxor xmm14,xmm14
1760 movdqa xmm0,xmm6
1761 movdqa XMMWORD[16+rsp],xmm6
1762 paddq xmm6,xmm6
1763 pand xmm13,xmm12
1764 pcmpgtd xmm14,xmm6
1765 pxor xmm6,xmm13
1766 movdqu xmm7,XMMWORD[r12]
1767 cmp r14,16
1768 je NEAR $L$xts_enc_1
1769 pshufd xmm13,xmm14,0x13
1770 pxor xmm14,xmm14
1771 movdqa xmm1,xmm6
1772 movdqa XMMWORD[32+rsp],xmm6
1773 paddq xmm6,xmm6
1774 pand xmm13,xmm12
1775 pcmpgtd xmm14,xmm6
1776 pxor xmm6,xmm13
1777 movdqu xmm8,XMMWORD[16+r12]
1778 cmp r14,32
1779 je NEAR $L$xts_enc_2
1780 pxor xmm15,xmm7
1781 pshufd xmm13,xmm14,0x13
1782 pxor xmm14,xmm14
1783 movdqa xmm2,xmm6
1784 movdqa XMMWORD[48+rsp],xmm6
1785 paddq xmm6,xmm6
1786 pand xmm13,xmm12
1787 pcmpgtd xmm14,xmm6
1788 pxor xmm6,xmm13
1789 movdqu xmm9,XMMWORD[32+r12]
1790 cmp r14,48
1791 je NEAR $L$xts_enc_3
1792 pxor xmm0,xmm8
1793 pshufd xmm13,xmm14,0x13
1794 pxor xmm14,xmm14
1795 movdqa xmm3,xmm6
1796 movdqa XMMWORD[64+rsp],xmm6
1797 paddq xmm6,xmm6
1798 pand xmm13,xmm12
1799 pcmpgtd xmm14,xmm6
1800 pxor xmm6,xmm13
1801 movdqu xmm10,XMMWORD[48+r12]
1802 cmp r14,64
1803 je NEAR $L$xts_enc_4
1804 pxor xmm1,xmm9
1805 pshufd xmm13,xmm14,0x13
1806 pxor xmm14,xmm14
1807 movdqa xmm4,xmm6
1808 movdqa XMMWORD[80+rsp],xmm6
1809 paddq xmm6,xmm6
1810 pand xmm13,xmm12
1811 pcmpgtd xmm14,xmm6
1812 pxor xmm6,xmm13
1813 movdqu xmm11,XMMWORD[64+r12]
1814 cmp r14,80
1815 je NEAR $L$xts_enc_5
1816 pxor xmm2,xmm10
1817 pshufd xmm13,xmm14,0x13
1818 pxor xmm14,xmm14
1819 movdqa xmm5,xmm6
1820 movdqa XMMWORD[96+rsp],xmm6
1821 paddq xmm6,xmm6
1822 pand xmm13,xmm12
1823 pcmpgtd xmm14,xmm6
1824 pxor xmm6,xmm13
1825 movdqu xmm12,XMMWORD[80+r12]
1826 cmp r14,96
1827 je NEAR $L$xts_enc_6
1828 pxor xmm3,xmm11
1829 movdqu xmm13,XMMWORD[96+r12]
1830 pxor xmm4,xmm12
1831 movdqa XMMWORD[112+rsp],xmm6
1832 lea r12,[112+r12]
1833 pxor xmm5,xmm13
1834 lea rax,[128+rsp]
1835 mov r10d,edx
1836
1837 call _bsaes_encrypt8
1838
1839 pxor xmm15,XMMWORD[rsp]
1840 pxor xmm0,XMMWORD[16+rsp]
1841 movdqu XMMWORD[r13],xmm15
1842 pxor xmm3,XMMWORD[32+rsp]
1843 movdqu XMMWORD[16+r13],xmm0
1844 pxor xmm5,XMMWORD[48+rsp]
1845 movdqu XMMWORD[32+r13],xmm3
1846 pxor xmm2,XMMWORD[64+rsp]
1847 movdqu XMMWORD[48+r13],xmm5
1848 pxor xmm6,XMMWORD[80+rsp]
1849 movdqu XMMWORD[64+r13],xmm2
1850 pxor xmm1,XMMWORD[96+rsp]
1851 movdqu XMMWORD[80+r13],xmm6
1852 movdqu XMMWORD[96+r13],xmm1
1853 lea r13,[112+r13]
1854
1855 movdqa xmm6,XMMWORD[112+rsp]
1856 jmp NEAR $L$xts_enc_done
1857 ALIGN 16
1858 $L$xts_enc_6:
1859 pxor xmm3,xmm11
1860 lea r12,[96+r12]
1861 pxor xmm4,xmm12
1862 lea rax,[128+rsp]
1863 mov r10d,edx
1864
1865 call _bsaes_encrypt8
1866
1867 pxor xmm15,XMMWORD[rsp]
1868 pxor xmm0,XMMWORD[16+rsp]
1869 movdqu XMMWORD[r13],xmm15
1870 pxor xmm3,XMMWORD[32+rsp]
1871 movdqu XMMWORD[16+r13],xmm0
1872 pxor xmm5,XMMWORD[48+rsp]
1873 movdqu XMMWORD[32+r13],xmm3
1874 pxor xmm2,XMMWORD[64+rsp]
1875 movdqu XMMWORD[48+r13],xmm5
1876 pxor xmm6,XMMWORD[80+rsp]
1877 movdqu XMMWORD[64+r13],xmm2
1878 movdqu XMMWORD[80+r13],xmm6
1879 lea r13,[96+r13]
1880
1881 movdqa xmm6,XMMWORD[96+rsp]
1882 jmp NEAR $L$xts_enc_done
1883 ALIGN 16
1884 $L$xts_enc_5:
1885 pxor xmm2,xmm10
1886 lea r12,[80+r12]
1887 pxor xmm3,xmm11
1888 lea rax,[128+rsp]
1889 mov r10d,edx
1890
1891 call _bsaes_encrypt8
1892
1893 pxor xmm15,XMMWORD[rsp]
1894 pxor xmm0,XMMWORD[16+rsp]
1895 movdqu XMMWORD[r13],xmm15
1896 pxor xmm3,XMMWORD[32+rsp]
1897 movdqu XMMWORD[16+r13],xmm0
1898 pxor xmm5,XMMWORD[48+rsp]
1899 movdqu XMMWORD[32+r13],xmm3
1900 pxor xmm2,XMMWORD[64+rsp]
1901 movdqu XMMWORD[48+r13],xmm5
1902 movdqu XMMWORD[64+r13],xmm2
1903 lea r13,[80+r13]
1904
1905 movdqa xmm6,XMMWORD[80+rsp]
1906 jmp NEAR $L$xts_enc_done
1907 ALIGN 16
1908 $L$xts_enc_4:
1909 pxor xmm1,xmm9
1910 lea r12,[64+r12]
1911 pxor xmm2,xmm10
1912 lea rax,[128+rsp]
1913 mov r10d,edx
1914
1915 call _bsaes_encrypt8
1916
1917 pxor xmm15,XMMWORD[rsp]
1918 pxor xmm0,XMMWORD[16+rsp]
1919 movdqu XMMWORD[r13],xmm15
1920 pxor xmm3,XMMWORD[32+rsp]
1921 movdqu XMMWORD[16+r13],xmm0
1922 pxor xmm5,XMMWORD[48+rsp]
1923 movdqu XMMWORD[32+r13],xmm3
1924 movdqu XMMWORD[48+r13],xmm5
1925 lea r13,[64+r13]
1926
1927 movdqa xmm6,XMMWORD[64+rsp]
1928 jmp NEAR $L$xts_enc_done
1929 ALIGN 16
1930 $L$xts_enc_3:
1931 pxor xmm0,xmm8
1932 lea r12,[48+r12]
1933 pxor xmm1,xmm9
1934 lea rax,[128+rsp]
1935 mov r10d,edx
1936
1937 call _bsaes_encrypt8
1938
1939 pxor xmm15,XMMWORD[rsp]
1940 pxor xmm0,XMMWORD[16+rsp]
1941 movdqu XMMWORD[r13],xmm15
1942 pxor xmm3,XMMWORD[32+rsp]
1943 movdqu XMMWORD[16+r13],xmm0
1944 movdqu XMMWORD[32+r13],xmm3
1945 lea r13,[48+r13]
1946
1947 movdqa xmm6,XMMWORD[48+rsp]
1948 jmp NEAR $L$xts_enc_done
1949 ALIGN 16
1950 $L$xts_enc_2:
1951 pxor xmm15,xmm7
1952 lea r12,[32+r12]
1953 pxor xmm0,xmm8
1954 lea rax,[128+rsp]
1955 mov r10d,edx
1956
1957 call _bsaes_encrypt8
1958
1959 pxor xmm15,XMMWORD[rsp]
1960 pxor xmm0,XMMWORD[16+rsp]
1961 movdqu XMMWORD[r13],xmm15
1962 movdqu XMMWORD[16+r13],xmm0
1963 lea r13,[32+r13]
1964
1965 movdqa xmm6,XMMWORD[32+rsp]
1966 jmp NEAR $L$xts_enc_done
1967 ALIGN 16
1968 $L$xts_enc_1:
1969 pxor xmm7,xmm15
1970 lea r12,[16+r12]
1971 movdqa XMMWORD[32+rbp],xmm7
1972 lea rcx,[32+rbp]
1973 lea rdx,[32+rbp]
1974 lea r8,[r15]
1975 call asm_AES_encrypt
1976 pxor xmm15,XMMWORD[32+rbp]
1977
1978
1979
1980
1981
1982 movdqu XMMWORD[r13],xmm15
1983 lea r13,[16+r13]
1984
1985 movdqa xmm6,XMMWORD[16+rsp]
1986
1987 $L$xts_enc_done:
1988 and ebx,15
1989 jz NEAR $L$xts_enc_ret
1990 mov rdx,r13
1991
1992 $L$xts_enc_steal:
1993 movzx eax,BYTE[r12]
1994 movzx ecx,BYTE[((-16))+rdx]
1995 lea r12,[1+r12]
1996 mov BYTE[((-16))+rdx],al
1997 mov BYTE[rdx],cl
1998 lea rdx,[1+rdx]
1999 sub ebx,1
2000 jnz NEAR $L$xts_enc_steal
2001
2002 movdqu xmm15,XMMWORD[((-16))+r13]
2003 lea rcx,[32+rbp]
2004 pxor xmm15,xmm6
2005 lea rdx,[32+rbp]
2006 movdqa XMMWORD[32+rbp],xmm15
2007 lea r8,[r15]
2008 call asm_AES_encrypt
2009 pxor xmm6,XMMWORD[32+rbp]
2010 movdqu XMMWORD[(-16)+r13],xmm6
2011
2012 $L$xts_enc_ret:
2013 lea rax,[rsp]
2014 pxor xmm0,xmm0
2015 $L$xts_enc_bzero:
2016 movdqa XMMWORD[rax],xmm0
2017 movdqa XMMWORD[16+rax],xmm0
2018 lea rax,[32+rax]
2019 cmp rbp,rax
2020 ja NEAR $L$xts_enc_bzero
2021
2022 lea rsp,[rbp]
2023 movaps xmm6,XMMWORD[64+rbp]
2024 movaps xmm7,XMMWORD[80+rbp]
2025 movaps xmm8,XMMWORD[96+rbp]
2026 movaps xmm9,XMMWORD[112+rbp]
2027 movaps xmm10,XMMWORD[128+rbp]
2028 movaps xmm11,XMMWORD[144+rbp]
2029 movaps xmm12,XMMWORD[160+rbp]
2030 movaps xmm13,XMMWORD[176+rbp]
2031 movaps xmm14,XMMWORD[192+rbp]
2032 movaps xmm15,XMMWORD[208+rbp]
2033 lea rsp,[160+rbp]
2034 mov r15,QWORD[72+rsp]
2035 mov r14,QWORD[80+rsp]
2036 mov r13,QWORD[88+rsp]
2037 mov r12,QWORD[96+rsp]
2038 mov rbx,QWORD[104+rsp]
2039 mov rax,QWORD[112+rsp]
2040 lea rsp,[120+rsp]
2041 mov rbp,rax
2042 $L$xts_enc_epilogue:
2043 DB 0F3h,0C3h ;repret
2044
2045
2046 global bsaes_xts_decrypt
2047
2048 ALIGN 16
2049 bsaes_xts_decrypt:
2050 mov rax,rsp
2051 $L$xts_dec_prologue:
2052 push rbp
2053 push rbx
2054 push r12
2055 push r13
2056 push r14
2057 push r15
2058 lea rsp,[((-72))+rsp]
2059 mov r10,QWORD[160+rsp]
2060 mov r11,QWORD[168+rsp]
2061 lea rsp,[((-160))+rsp]
2062 movaps XMMWORD[64+rsp],xmm6
2063 movaps XMMWORD[80+rsp],xmm7
2064 movaps XMMWORD[96+rsp],xmm8
2065 movaps XMMWORD[112+rsp],xmm9
2066 movaps XMMWORD[128+rsp],xmm10
2067 movaps XMMWORD[144+rsp],xmm11
2068 movaps XMMWORD[160+rsp],xmm12
2069 movaps XMMWORD[176+rsp],xmm13
2070 movaps XMMWORD[192+rsp],xmm14
2071 movaps XMMWORD[208+rsp],xmm15
2072 $L$xts_dec_body:
2073 mov rbp,rsp
2074 mov r12,rcx
2075 mov r13,rdx
2076 mov r14,r8
2077 mov r15,r9
2078
2079 lea rcx,[r11]
2080 lea rdx,[32+rbp]
2081 lea r8,[r10]
2082 call asm_AES_encrypt
2083
2084 mov eax,DWORD[240+r15]
2085 mov rbx,r14
2086
2087 mov edx,eax
2088 shl rax,7
2089 sub rax,96
2090 sub rsp,rax
2091
2092 mov rax,rsp
2093 mov rcx,r15
2094 mov r10d,edx
2095 call _bsaes_key_convert
2096 pxor xmm7,XMMWORD[rsp]
2097 movdqa XMMWORD[rax],xmm6
2098 movdqa XMMWORD[rsp],xmm7
2099
2100 xor eax,eax
2101 and r14,-16
2102 test ebx,15
2103 setnz al
2104 shl rax,4
2105 sub r14,rax
2106
2107 sub rsp,0x80
2108 movdqa xmm6,XMMWORD[32+rbp]
2109
2110 pxor xmm14,xmm14
2111 movdqa xmm12,XMMWORD[$L$xts_magic]
2112 pcmpgtd xmm14,xmm6
2113
2114 sub r14,0x80
2115 jc NEAR $L$xts_dec_short
2116 jmp NEAR $L$xts_dec_loop
2117
2118 ALIGN 16
2119 $L$xts_dec_loop:
2120 pshufd xmm13,xmm14,0x13
2121 pxor xmm14,xmm14
2122 movdqa xmm15,xmm6
2123 movdqa XMMWORD[rsp],xmm6
2124 paddq xmm6,xmm6
2125 pand xmm13,xmm12
2126 pcmpgtd xmm14,xmm6
2127 pxor xmm6,xmm13
2128 pshufd xmm13,xmm14,0x13
2129 pxor xmm14,xmm14
2130 movdqa xmm0,xmm6
2131 movdqa XMMWORD[16+rsp],xmm6
2132 paddq xmm6,xmm6
2133 pand xmm13,xmm12
2134 pcmpgtd xmm14,xmm6
2135 pxor xmm6,xmm13
2136 movdqu xmm7,XMMWORD[r12]
2137 pshufd xmm13,xmm14,0x13
2138 pxor xmm14,xmm14
2139 movdqa xmm1,xmm6
2140 movdqa XMMWORD[32+rsp],xmm6
2141 paddq xmm6,xmm6
2142 pand xmm13,xmm12
2143 pcmpgtd xmm14,xmm6
2144 pxor xmm6,xmm13
2145 movdqu xmm8,XMMWORD[16+r12]
2146 pxor xmm15,xmm7
2147 pshufd xmm13,xmm14,0x13
2148 pxor xmm14,xmm14
2149 movdqa xmm2,xmm6
2150 movdqa XMMWORD[48+rsp],xmm6
2151 paddq xmm6,xmm6
2152 pand xmm13,xmm12
2153 pcmpgtd xmm14,xmm6
2154 pxor xmm6,xmm13
2155 movdqu xmm9,XMMWORD[32+r12]
2156 pxor xmm0,xmm8
2157 pshufd xmm13,xmm14,0x13
2158 pxor xmm14,xmm14
2159 movdqa xmm3,xmm6
2160 movdqa XMMWORD[64+rsp],xmm6
2161 paddq xmm6,xmm6
2162 pand xmm13,xmm12
2163 pcmpgtd xmm14,xmm6
2164 pxor xmm6,xmm13
2165 movdqu xmm10,XMMWORD[48+r12]
2166 pxor xmm1,xmm9
2167 pshufd xmm13,xmm14,0x13
2168 pxor xmm14,xmm14
2169 movdqa xmm4,xmm6
2170 movdqa XMMWORD[80+rsp],xmm6
2171 paddq xmm6,xmm6
2172 pand xmm13,xmm12
2173 pcmpgtd xmm14,xmm6
2174 pxor xmm6,xmm13
2175 movdqu xmm11,XMMWORD[64+r12]
2176 pxor xmm2,xmm10
2177 pshufd xmm13,xmm14,0x13
2178 pxor xmm14,xmm14
2179 movdqa xmm5,xmm6
2180 movdqa XMMWORD[96+rsp],xmm6
2181 paddq xmm6,xmm6
2182 pand xmm13,xmm12
2183 pcmpgtd xmm14,xmm6
2184 pxor xmm6,xmm13
2185 movdqu xmm12,XMMWORD[80+r12]
2186 pxor xmm3,xmm11
2187 movdqu xmm13,XMMWORD[96+r12]
2188 pxor xmm4,xmm12
2189 movdqu xmm14,XMMWORD[112+r12]
2190 lea r12,[128+r12]
2191 movdqa XMMWORD[112+rsp],xmm6
2192 pxor xmm5,xmm13
2193 lea rax,[128+rsp]
2194 pxor xmm6,xmm14
2195 mov r10d,edx
2196
2197 call _bsaes_decrypt8
2198
2199 pxor xmm15,XMMWORD[rsp]
2200 pxor xmm0,XMMWORD[16+rsp]
2201 movdqu XMMWORD[r13],xmm15
2202 pxor xmm5,XMMWORD[32+rsp]
2203 movdqu XMMWORD[16+r13],xmm0
2204 pxor xmm3,XMMWORD[48+rsp]
2205 movdqu XMMWORD[32+r13],xmm5
2206 pxor xmm1,XMMWORD[64+rsp]
2207 movdqu XMMWORD[48+r13],xmm3
2208 pxor xmm6,XMMWORD[80+rsp]
2209 movdqu XMMWORD[64+r13],xmm1
2210 pxor xmm2,XMMWORD[96+rsp]
2211 movdqu XMMWORD[80+r13],xmm6
2212 pxor xmm4,XMMWORD[112+rsp]
2213 movdqu XMMWORD[96+r13],xmm2
2214 movdqu XMMWORD[112+r13],xmm4
2215 lea r13,[128+r13]
2216
2217 movdqa xmm6,XMMWORD[112+rsp]
2218 pxor xmm14,xmm14
2219 movdqa xmm12,XMMWORD[$L$xts_magic]
2220 pcmpgtd xmm14,xmm6
2221 pshufd xmm13,xmm14,0x13
2222 pxor xmm14,xmm14
2223 paddq xmm6,xmm6
2224 pand xmm13,xmm12
2225 pcmpgtd xmm14,xmm6
2226 pxor xmm6,xmm13
2227
2228 sub r14,0x80
2229 jnc NEAR $L$xts_dec_loop
2230
2231 $L$xts_dec_short:
2232 add r14,0x80
2233 jz NEAR $L$xts_dec_done
2234 pshufd xmm13,xmm14,0x13
2235 pxor xmm14,xmm14
2236 movdqa xmm15,xmm6
2237 movdqa XMMWORD[rsp],xmm6
2238 paddq xmm6,xmm6
2239 pand xmm13,xmm12
2240 pcmpgtd xmm14,xmm6
2241 pxor xmm6,xmm13
2242 pshufd xmm13,xmm14,0x13
2243 pxor xmm14,xmm14
2244 movdqa xmm0,xmm6
2245 movdqa XMMWORD[16+rsp],xmm6
2246 paddq xmm6,xmm6
2247 pand xmm13,xmm12
2248 pcmpgtd xmm14,xmm6
2249 pxor xmm6,xmm13
2250 movdqu xmm7,XMMWORD[r12]
2251 cmp r14,16
2252 je NEAR $L$xts_dec_1
2253 pshufd xmm13,xmm14,0x13
2254 pxor xmm14,xmm14
2255 movdqa xmm1,xmm6
2256 movdqa XMMWORD[32+rsp],xmm6
2257 paddq xmm6,xmm6
2258 pand xmm13,xmm12
2259 pcmpgtd xmm14,xmm6
2260 pxor xmm6,xmm13
2261 movdqu xmm8,XMMWORD[16+r12]
2262 cmp r14,32
2263 je NEAR $L$xts_dec_2
2264 pxor xmm15,xmm7
2265 pshufd xmm13,xmm14,0x13
2266 pxor xmm14,xmm14
2267 movdqa xmm2,xmm6
2268 movdqa XMMWORD[48+rsp],xmm6
2269 paddq xmm6,xmm6
2270 pand xmm13,xmm12
2271 pcmpgtd xmm14,xmm6
2272 pxor xmm6,xmm13
2273 movdqu xmm9,XMMWORD[32+r12]
2274 cmp r14,48
2275 je NEAR $L$xts_dec_3
2276 pxor xmm0,xmm8
2277 pshufd xmm13,xmm14,0x13
2278 pxor xmm14,xmm14
2279 movdqa xmm3,xmm6
2280 movdqa XMMWORD[64+rsp],xmm6
2281 paddq xmm6,xmm6
2282 pand xmm13,xmm12
2283 pcmpgtd xmm14,xmm6
2284 pxor xmm6,xmm13
2285 movdqu xmm10,XMMWORD[48+r12]
2286 cmp r14,64
2287 je NEAR $L$xts_dec_4
2288 pxor xmm1,xmm9
2289 pshufd xmm13,xmm14,0x13
2290 pxor xmm14,xmm14
2291 movdqa xmm4,xmm6
2292 movdqa XMMWORD[80+rsp],xmm6
2293 paddq xmm6,xmm6
2294 pand xmm13,xmm12
2295 pcmpgtd xmm14,xmm6
2296 pxor xmm6,xmm13
2297 movdqu xmm11,XMMWORD[64+r12]
2298 cmp r14,80
2299 je NEAR $L$xts_dec_5
2300 pxor xmm2,xmm10
2301 pshufd xmm13,xmm14,0x13
2302 pxor xmm14,xmm14
2303 movdqa xmm5,xmm6
2304 movdqa XMMWORD[96+rsp],xmm6
2305 paddq xmm6,xmm6
2306 pand xmm13,xmm12
2307 pcmpgtd xmm14,xmm6
2308 pxor xmm6,xmm13
2309 movdqu xmm12,XMMWORD[80+r12]
2310 cmp r14,96
2311 je NEAR $L$xts_dec_6
2312 pxor xmm3,xmm11
2313 movdqu xmm13,XMMWORD[96+r12]
2314 pxor xmm4,xmm12
2315 movdqa XMMWORD[112+rsp],xmm6
2316 lea r12,[112+r12]
2317 pxor xmm5,xmm13
2318 lea rax,[128+rsp]
2319 mov r10d,edx
2320
2321 call _bsaes_decrypt8
2322
2323 pxor xmm15,XMMWORD[rsp]
2324 pxor xmm0,XMMWORD[16+rsp]
2325 movdqu XMMWORD[r13],xmm15
2326 pxor xmm5,XMMWORD[32+rsp]
2327 movdqu XMMWORD[16+r13],xmm0
2328 pxor xmm3,XMMWORD[48+rsp]
2329 movdqu XMMWORD[32+r13],xmm5
2330 pxor xmm1,XMMWORD[64+rsp]
2331 movdqu XMMWORD[48+r13],xmm3
2332 pxor xmm6,XMMWORD[80+rsp]
2333 movdqu XMMWORD[64+r13],xmm1
2334 pxor xmm2,XMMWORD[96+rsp]
2335 movdqu XMMWORD[80+r13],xmm6
2336 movdqu XMMWORD[96+r13],xmm2
2337 lea r13,[112+r13]
2338
2339 movdqa xmm6,XMMWORD[112+rsp]
2340 jmp NEAR $L$xts_dec_done
2341 ALIGN 16
2342 $L$xts_dec_6:
2343 pxor xmm3,xmm11
2344 lea r12,[96+r12]
2345 pxor xmm4,xmm12
2346 lea rax,[128+rsp]
2347 mov r10d,edx
2348
2349 call _bsaes_decrypt8
2350
2351 pxor xmm15,XMMWORD[rsp]
2352 pxor xmm0,XMMWORD[16+rsp]
2353 movdqu XMMWORD[r13],xmm15
2354 pxor xmm5,XMMWORD[32+rsp]
2355 movdqu XMMWORD[16+r13],xmm0
2356 pxor xmm3,XMMWORD[48+rsp]
2357 movdqu XMMWORD[32+r13],xmm5
2358 pxor xmm1,XMMWORD[64+rsp]
2359 movdqu XMMWORD[48+r13],xmm3
2360 pxor xmm6,XMMWORD[80+rsp]
2361 movdqu XMMWORD[64+r13],xmm1
2362 movdqu XMMWORD[80+r13],xmm6
2363 lea r13,[96+r13]
2364
2365 movdqa xmm6,XMMWORD[96+rsp]
2366 jmp NEAR $L$xts_dec_done
2367 ALIGN 16
2368 $L$xts_dec_5:
2369 pxor xmm2,xmm10
2370 lea r12,[80+r12]
2371 pxor xmm3,xmm11
2372 lea rax,[128+rsp]
2373 mov r10d,edx
2374
2375 call _bsaes_decrypt8
2376
2377 pxor xmm15,XMMWORD[rsp]
2378 pxor xmm0,XMMWORD[16+rsp]
2379 movdqu XMMWORD[r13],xmm15
2380 pxor xmm5,XMMWORD[32+rsp]
2381 movdqu XMMWORD[16+r13],xmm0
2382 pxor xmm3,XMMWORD[48+rsp]
2383 movdqu XMMWORD[32+r13],xmm5
2384 pxor xmm1,XMMWORD[64+rsp]
2385 movdqu XMMWORD[48+r13],xmm3
2386 movdqu XMMWORD[64+r13],xmm1
2387 lea r13,[80+r13]
2388
2389 movdqa xmm6,XMMWORD[80+rsp]
2390 jmp NEAR $L$xts_dec_done
2391 ALIGN 16
2392 $L$xts_dec_4:
2393 pxor xmm1,xmm9
2394 lea r12,[64+r12]
2395 pxor xmm2,xmm10
2396 lea rax,[128+rsp]
2397 mov r10d,edx
2398
2399 call _bsaes_decrypt8
2400
2401 pxor xmm15,XMMWORD[rsp]
2402 pxor xmm0,XMMWORD[16+rsp]
2403 movdqu XMMWORD[r13],xmm15
2404 pxor xmm5,XMMWORD[32+rsp]
2405 movdqu XMMWORD[16+r13],xmm0
2406 pxor xmm3,XMMWORD[48+rsp]
2407 movdqu XMMWORD[32+r13],xmm5
2408 movdqu XMMWORD[48+r13],xmm3
2409 lea r13,[64+r13]
2410
2411 movdqa xmm6,XMMWORD[64+rsp]
2412 jmp NEAR $L$xts_dec_done
2413 ALIGN 16
2414 $L$xts_dec_3:
2415 pxor xmm0,xmm8
2416 lea r12,[48+r12]
2417 pxor xmm1,xmm9
2418 lea rax,[128+rsp]
2419 mov r10d,edx
2420
2421 call _bsaes_decrypt8
2422
2423 pxor xmm15,XMMWORD[rsp]
2424 pxor xmm0,XMMWORD[16+rsp]
2425 movdqu XMMWORD[r13],xmm15
2426 pxor xmm5,XMMWORD[32+rsp]
2427 movdqu XMMWORD[16+r13],xmm0
2428 movdqu XMMWORD[32+r13],xmm5
2429 lea r13,[48+r13]
2430
2431 movdqa xmm6,XMMWORD[48+rsp]
2432 jmp NEAR $L$xts_dec_done
2433 ALIGN 16
2434 $L$xts_dec_2:
2435 pxor xmm15,xmm7
2436 lea r12,[32+r12]
2437 pxor xmm0,xmm8
2438 lea rax,[128+rsp]
2439 mov r10d,edx
2440
2441 call _bsaes_decrypt8
2442
2443 pxor xmm15,XMMWORD[rsp]
2444 pxor xmm0,XMMWORD[16+rsp]
2445 movdqu XMMWORD[r13],xmm15
2446 movdqu XMMWORD[16+r13],xmm0
2447 lea r13,[32+r13]
2448
2449 movdqa xmm6,XMMWORD[32+rsp]
2450 jmp NEAR $L$xts_dec_done
2451 ALIGN 16
2452 $L$xts_dec_1:
2453 pxor xmm7,xmm15
2454 lea r12,[16+r12]
2455 movdqa XMMWORD[32+rbp],xmm7
2456 lea rcx,[32+rbp]
2457 lea rdx,[32+rbp]
2458 lea r8,[r15]
2459 call asm_AES_decrypt
2460 pxor xmm15,XMMWORD[32+rbp]
2461
2462
2463
2464
2465
2466 movdqu XMMWORD[r13],xmm15
2467 lea r13,[16+r13]
2468
2469 movdqa xmm6,XMMWORD[16+rsp]
2470
2471 $L$xts_dec_done:
2472 and ebx,15
2473 jz NEAR $L$xts_dec_ret
2474
2475 pxor xmm14,xmm14
2476 movdqa xmm12,XMMWORD[$L$xts_magic]
2477 pcmpgtd xmm14,xmm6
2478 pshufd xmm13,xmm14,0x13
2479 movdqa xmm5,xmm6
2480 paddq xmm6,xmm6
2481 pand xmm13,xmm12
2482 movdqu xmm15,XMMWORD[r12]
2483 pxor xmm6,xmm13
2484
2485 lea rcx,[32+rbp]
2486 pxor xmm15,xmm6
2487 lea rdx,[32+rbp]
2488 movdqa XMMWORD[32+rbp],xmm15
2489 lea r8,[r15]
2490 call asm_AES_decrypt
2491 pxor xmm6,XMMWORD[32+rbp]
2492 mov rdx,r13
2493 movdqu XMMWORD[r13],xmm6
2494
2495 $L$xts_dec_steal:
2496 movzx eax,BYTE[16+r12]
2497 movzx ecx,BYTE[rdx]
2498 lea r12,[1+r12]
2499 mov BYTE[rdx],al
2500 mov BYTE[16+rdx],cl
2501 lea rdx,[1+rdx]
2502 sub ebx,1
2503 jnz NEAR $L$xts_dec_steal
2504
2505 movdqu xmm15,XMMWORD[r13]
2506 lea rcx,[32+rbp]
2507 pxor xmm15,xmm5
2508 lea rdx,[32+rbp]
2509 movdqa XMMWORD[32+rbp],xmm15
2510 lea r8,[r15]
2511 call asm_AES_decrypt
2512 pxor xmm5,XMMWORD[32+rbp]
2513 movdqu XMMWORD[r13],xmm5
2514
2515 $L$xts_dec_ret:
2516 lea rax,[rsp]
2517 pxor xmm0,xmm0
2518 $L$xts_dec_bzero:
2519 movdqa XMMWORD[rax],xmm0
2520 movdqa XMMWORD[16+rax],xmm0
2521 lea rax,[32+rax]
2522 cmp rbp,rax
2523 ja NEAR $L$xts_dec_bzero
2524
2525 lea rsp,[rbp]
2526 movaps xmm6,XMMWORD[64+rbp]
2527 movaps xmm7,XMMWORD[80+rbp]
2528 movaps xmm8,XMMWORD[96+rbp]
2529 movaps xmm9,XMMWORD[112+rbp]
2530 movaps xmm10,XMMWORD[128+rbp]
2531 movaps xmm11,XMMWORD[144+rbp]
2532 movaps xmm12,XMMWORD[160+rbp]
2533 movaps xmm13,XMMWORD[176+rbp]
2534 movaps xmm14,XMMWORD[192+rbp]
2535 movaps xmm15,XMMWORD[208+rbp]
2536 lea rsp,[160+rbp]
2537 mov r15,QWORD[72+rsp]
2538 mov r14,QWORD[80+rsp]
2539 mov r13,QWORD[88+rsp]
2540 mov r12,QWORD[96+rsp]
2541 mov rbx,QWORD[104+rsp]
2542 mov rax,QWORD[112+rsp]
2543 lea rsp,[120+rsp]
2544 mov rbp,rax
2545 $L$xts_dec_epilogue:
2546 DB 0F3h,0C3h ;repret
2547
2548
2549 ALIGN 64
2550 _bsaes_const:
2551 $L$M0ISR:
2552 DQ 0x0a0e0206070b0f03,0x0004080c0d010509
2553 $L$ISRM0:
2554 DQ 0x01040b0e0205080f,0x0306090c00070a0d
2555 $L$ISR:
2556 DQ 0x0504070602010003,0x0f0e0d0c080b0a09
2557 $L$BS0:
2558 DQ 0x5555555555555555,0x5555555555555555
2559 $L$BS1:
2560 DQ 0x3333333333333333,0x3333333333333333
2561 $L$BS2:
2562 DQ 0x0f0f0f0f0f0f0f0f,0x0f0f0f0f0f0f0f0f
2563 $L$SR:
2564 DQ 0x0504070600030201,0x0f0e0d0c0a09080b
2565 $L$SRM0:
2566 DQ 0x0304090e00050a0f,0x01060b0c0207080d
2567 $L$M0SR:
2568 DQ 0x0a0e02060f03070b,0x0004080c05090d01
2569 $L$SWPUP:
2570 DQ 0x0706050403020100,0x0c0d0e0f0b0a0908
2571 $L$SWPUPM0SR:
2572 DQ 0x0a0d02060c03070b,0x0004080f05090e01
2573 $L$ADD1:
2574 DQ 0x0000000000000000,0x0000000100000000
2575 $L$ADD2:
2576 DQ 0x0000000000000000,0x0000000200000000
2577 $L$ADD3:
2578 DQ 0x0000000000000000,0x0000000300000000
2579 $L$ADD4:
2580 DQ 0x0000000000000000,0x0000000400000000
2581 $L$ADD5:
2582 DQ 0x0000000000000000,0x0000000500000000
2583 $L$ADD6:
2584 DQ 0x0000000000000000,0x0000000600000000
2585 $L$ADD7:
2586 DQ 0x0000000000000000,0x0000000700000000
2587 $L$ADD8:
2588 DQ 0x0000000000000000,0x0000000800000000
2589 $L$xts_magic:
2590 DD 0x87,0,1,0
2591 $L$masks:
2592 DQ 0x0101010101010101,0x0101010101010101
2593 DQ 0x0202020202020202,0x0202020202020202
2594 DQ 0x0404040404040404,0x0404040404040404
2595 DQ 0x0808080808080808,0x0808080808080808
2596 $L$M0:
2597 DQ 0x02060a0e03070b0f,0x0004080c0105090d
2598 $L$63:
2599 DQ 0x6363636363636363,0x6363636363636363
2600 DB 66,105,116,45,115,108,105,99,101,100,32,65,69,83,32,102
2601 DB 111,114,32,120,56,54,95,54,52,47,83,83,83,69,51,44
2602 DB 32,69,109,105,108,105,97,32,75,195,164,115,112,101,114,44
2603 DB 32,80,101,116,101,114,32,83,99,104,119,97,98,101,44,32
2604 DB 65,110,100,121,32,80,111,108,121,97,107,111,118,0
2605 ALIGN 64
2606
2607 EXTERN __imp_RtlVirtualUnwind
2608
2609 ALIGN 16
2610 se_handler:
2611 push rsi
2612 push rdi
2613 push rbx
2614 push rbp
2615 push r12
2616 push r13
2617 push r14
2618 push r15
2619 pushfq
2620 sub rsp,64
2621
2622 mov rax,QWORD[120+r8]
2623 mov rbx,QWORD[248+r8]
2624
2625 mov rsi,QWORD[8+r9]
2626 mov r11,QWORD[56+r9]
2627
2628 mov r10d,DWORD[r11]
2629 lea r10,[r10*1+rsi]
2630 cmp rbx,r10
2631 jb NEAR $L$in_prologue
2632
2633 mov rax,QWORD[152+r8]
2634
2635 mov r10d,DWORD[4+r11]
2636 lea r10,[r10*1+rsi]
2637 cmp rbx,r10
2638 jae NEAR $L$in_prologue
2639
2640 mov rax,QWORD[160+r8]
2641
2642 lea rsi,[64+rax]
2643 lea rdi,[512+r8]
2644 mov ecx,20
2645 DD 0xa548f3fc
2646 lea rax,[160+rax]
2647
2648 mov rbp,QWORD[112+rax]
2649 mov rbx,QWORD[104+rax]
2650 mov r12,QWORD[96+rax]
2651 mov r13,QWORD[88+rax]
2652 mov r14,QWORD[80+rax]
2653 mov r15,QWORD[72+rax]
2654 lea rax,[120+rax]
2655 mov QWORD[144+r8],rbx
2656 mov QWORD[160+r8],rbp
2657 mov QWORD[216+r8],r12
2658 mov QWORD[224+r8],r13
2659 mov QWORD[232+r8],r14
2660 mov QWORD[240+r8],r15
2661
2662 $L$in_prologue:
2663 mov QWORD[152+r8],rax
2664
2665 mov rdi,QWORD[40+r9]
2666 mov rsi,r8
2667 mov ecx,154
2668 DD 0xa548f3fc
2669
2670 mov rsi,r9
2671 xor rcx,rcx
2672 mov rdx,QWORD[8+rsi]
2673 mov r8,QWORD[rsi]
2674 mov r9,QWORD[16+rsi]
2675 mov r10,QWORD[40+rsi]
2676 lea r11,[56+rsi]
2677 lea r12,[24+rsi]
2678 mov QWORD[32+rsp],r10
2679 mov QWORD[40+rsp],r11
2680 mov QWORD[48+rsp],r12
2681 mov QWORD[56+rsp],rcx
2682 call QWORD[__imp_RtlVirtualUnwind]
2683
2684 mov eax,1
2685 add rsp,64
2686 popfq
2687 pop r15
2688 pop r14
2689 pop r13
2690 pop r12
2691 pop rbp
2692 pop rbx
2693 pop rdi
2694 pop rsi
2695 DB 0F3h,0C3h ;repret
2696
2697
2698 section .pdata rdata align=4
2699 ALIGN 4
2700 DD $L$cbc_dec_prologue wrt ..imagebase
2701 DD $L$cbc_dec_epilogue wrt ..imagebase
2702 DD $L$cbc_dec_info wrt ..imagebase
2703
2704 DD $L$ctr_enc_prologue wrt ..imagebase
2705 DD $L$ctr_enc_epilogue wrt ..imagebase
2706 DD $L$ctr_enc_info wrt ..imagebase
2707
2708 DD $L$xts_enc_prologue wrt ..imagebase
2709 DD $L$xts_enc_epilogue wrt ..imagebase
2710 DD $L$xts_enc_info wrt ..imagebase
2711
2712 DD $L$xts_dec_prologue wrt ..imagebase
2713 DD $L$xts_dec_epilogue wrt ..imagebase
2714 DD $L$xts_dec_info wrt ..imagebase
2715
2716 section .xdata rdata align=8
2717 ALIGN 8
2718 $L$cbc_dec_info:
2719 DB 9,0,0,0
2720 DD se_handler wrt ..imagebase
2721 DD $L$cbc_dec_body wrt ..imagebase,$L$cbc_dec_epilogue wrt ..imageb ase
2722 $L$ctr_enc_info:
2723 DB 9,0,0,0
2724 DD se_handler wrt ..imagebase
2725 DD $L$ctr_enc_body wrt ..imagebase,$L$ctr_enc_epilogue wrt ..imageb ase
2726 $L$xts_enc_info:
2727 DB 9,0,0,0
2728 DD se_handler wrt ..imagebase
2729 DD $L$xts_enc_body wrt ..imagebase,$L$xts_enc_epilogue wrt ..imageb ase
2730 $L$xts_dec_info:
2731 DB 9,0,0,0
2732 DD se_handler wrt ..imagebase
2733 DD $L$xts_dec_body wrt ..imagebase,$L$xts_dec_epilogue wrt ..imageb ase
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698