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

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

Issue 377783004: Add BoringSSL GYP files. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Final Python fix. Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 OPTION DOTNAME
2 .text$ SEGMENT ALIGN(64) 'CODE'
3 EXTERN OPENSSL_ia32cap_P:NEAR
4 PUBLIC aesni_encrypt
5
6 ALIGN 16
7 aesni_encrypt PROC PUBLIC
8 movups xmm2,XMMWORD PTR[rcx]
9 mov eax,DWORD PTR[240+r8]
10 movups xmm0,XMMWORD PTR[r8]
11 movups xmm1,XMMWORD PTR[16+r8]
12 lea r8,QWORD PTR[32+r8]
13 xorps xmm2,xmm0
14 $L$oop_enc1_1::
15 DB 102,15,56,220,209
16 dec eax
17 movups xmm1,XMMWORD PTR[r8]
18 lea r8,QWORD PTR[16+r8]
19 jnz $L$oop_enc1_1
20 DB 102,15,56,221,209
21 movups XMMWORD PTR[rdx],xmm2
22 DB 0F3h,0C3h ;repret
23 aesni_encrypt ENDP
24
25 PUBLIC aesni_decrypt
26
27 ALIGN 16
28 aesni_decrypt PROC PUBLIC
29 movups xmm2,XMMWORD PTR[rcx]
30 mov eax,DWORD PTR[240+r8]
31 movups xmm0,XMMWORD PTR[r8]
32 movups xmm1,XMMWORD PTR[16+r8]
33 lea r8,QWORD PTR[32+r8]
34 xorps xmm2,xmm0
35 $L$oop_dec1_2::
36 DB 102,15,56,222,209
37 dec eax
38 movups xmm1,XMMWORD PTR[r8]
39 lea r8,QWORD PTR[16+r8]
40 jnz $L$oop_dec1_2
41 DB 102,15,56,223,209
42 movups XMMWORD PTR[rdx],xmm2
43 DB 0F3h,0C3h ;repret
44 aesni_decrypt ENDP
45
46 ALIGN 16
47 _aesni_encrypt2 PROC PRIVATE
48 movups xmm0,XMMWORD PTR[rcx]
49 shl eax,4
50 movups xmm1,XMMWORD PTR[16+rcx]
51 xorps xmm2,xmm0
52 xorps xmm3,xmm0
53 movups xmm0,XMMWORD PTR[32+rcx]
54 lea rcx,QWORD PTR[32+rax*1+rcx]
55 neg rax
56 add rax,16
57
58 $L$enc_loop2::
59 DB 102,15,56,220,209
60 DB 102,15,56,220,217
61 movups xmm1,XMMWORD PTR[rax*1+rcx]
62 add rax,32
63 DB 102,15,56,220,208
64 DB 102,15,56,220,216
65 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
66 jnz $L$enc_loop2
67
68 DB 102,15,56,220,209
69 DB 102,15,56,220,217
70 DB 102,15,56,221,208
71 DB 102,15,56,221,216
72 DB 0F3h,0C3h ;repret
73 _aesni_encrypt2 ENDP
74
75 ALIGN 16
76 _aesni_decrypt2 PROC PRIVATE
77 movups xmm0,XMMWORD PTR[rcx]
78 shl eax,4
79 movups xmm1,XMMWORD PTR[16+rcx]
80 xorps xmm2,xmm0
81 xorps xmm3,xmm0
82 movups xmm0,XMMWORD PTR[32+rcx]
83 lea rcx,QWORD PTR[32+rax*1+rcx]
84 neg rax
85 add rax,16
86
87 $L$dec_loop2::
88 DB 102,15,56,222,209
89 DB 102,15,56,222,217
90 movups xmm1,XMMWORD PTR[rax*1+rcx]
91 add rax,32
92 DB 102,15,56,222,208
93 DB 102,15,56,222,216
94 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
95 jnz $L$dec_loop2
96
97 DB 102,15,56,222,209
98 DB 102,15,56,222,217
99 DB 102,15,56,223,208
100 DB 102,15,56,223,216
101 DB 0F3h,0C3h ;repret
102 _aesni_decrypt2 ENDP
103
104 ALIGN 16
105 _aesni_encrypt3 PROC PRIVATE
106 movups xmm0,XMMWORD PTR[rcx]
107 shl eax,4
108 movups xmm1,XMMWORD PTR[16+rcx]
109 xorps xmm2,xmm0
110 xorps xmm3,xmm0
111 xorps xmm4,xmm0
112 movups xmm0,XMMWORD PTR[32+rcx]
113 lea rcx,QWORD PTR[32+rax*1+rcx]
114 neg rax
115 add rax,16
116
117 $L$enc_loop3::
118 DB 102,15,56,220,209
119 DB 102,15,56,220,217
120 DB 102,15,56,220,225
121 movups xmm1,XMMWORD PTR[rax*1+rcx]
122 add rax,32
123 DB 102,15,56,220,208
124 DB 102,15,56,220,216
125 DB 102,15,56,220,224
126 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
127 jnz $L$enc_loop3
128
129 DB 102,15,56,220,209
130 DB 102,15,56,220,217
131 DB 102,15,56,220,225
132 DB 102,15,56,221,208
133 DB 102,15,56,221,216
134 DB 102,15,56,221,224
135 DB 0F3h,0C3h ;repret
136 _aesni_encrypt3 ENDP
137
138 ALIGN 16
139 _aesni_decrypt3 PROC PRIVATE
140 movups xmm0,XMMWORD PTR[rcx]
141 shl eax,4
142 movups xmm1,XMMWORD PTR[16+rcx]
143 xorps xmm2,xmm0
144 xorps xmm3,xmm0
145 xorps xmm4,xmm0
146 movups xmm0,XMMWORD PTR[32+rcx]
147 lea rcx,QWORD PTR[32+rax*1+rcx]
148 neg rax
149 add rax,16
150
151 $L$dec_loop3::
152 DB 102,15,56,222,209
153 DB 102,15,56,222,217
154 DB 102,15,56,222,225
155 movups xmm1,XMMWORD PTR[rax*1+rcx]
156 add rax,32
157 DB 102,15,56,222,208
158 DB 102,15,56,222,216
159 DB 102,15,56,222,224
160 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
161 jnz $L$dec_loop3
162
163 DB 102,15,56,222,209
164 DB 102,15,56,222,217
165 DB 102,15,56,222,225
166 DB 102,15,56,223,208
167 DB 102,15,56,223,216
168 DB 102,15,56,223,224
169 DB 0F3h,0C3h ;repret
170 _aesni_decrypt3 ENDP
171
172 ALIGN 16
173 _aesni_encrypt4 PROC PRIVATE
174 movups xmm0,XMMWORD PTR[rcx]
175 shl eax,4
176 movups xmm1,XMMWORD PTR[16+rcx]
177 xorps xmm2,xmm0
178 xorps xmm3,xmm0
179 xorps xmm4,xmm0
180 xorps xmm5,xmm0
181 movups xmm0,XMMWORD PTR[32+rcx]
182 lea rcx,QWORD PTR[32+rax*1+rcx]
183 neg rax
184 DB 00fh,01fh,000h
185 add rax,16
186
187 $L$enc_loop4::
188 DB 102,15,56,220,209
189 DB 102,15,56,220,217
190 DB 102,15,56,220,225
191 DB 102,15,56,220,233
192 movups xmm1,XMMWORD PTR[rax*1+rcx]
193 add rax,32
194 DB 102,15,56,220,208
195 DB 102,15,56,220,216
196 DB 102,15,56,220,224
197 DB 102,15,56,220,232
198 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
199 jnz $L$enc_loop4
200
201 DB 102,15,56,220,209
202 DB 102,15,56,220,217
203 DB 102,15,56,220,225
204 DB 102,15,56,220,233
205 DB 102,15,56,221,208
206 DB 102,15,56,221,216
207 DB 102,15,56,221,224
208 DB 102,15,56,221,232
209 DB 0F3h,0C3h ;repret
210 _aesni_encrypt4 ENDP
211
212 ALIGN 16
213 _aesni_decrypt4 PROC PRIVATE
214 movups xmm0,XMMWORD PTR[rcx]
215 shl eax,4
216 movups xmm1,XMMWORD PTR[16+rcx]
217 xorps xmm2,xmm0
218 xorps xmm3,xmm0
219 xorps xmm4,xmm0
220 xorps xmm5,xmm0
221 movups xmm0,XMMWORD PTR[32+rcx]
222 lea rcx,QWORD PTR[32+rax*1+rcx]
223 neg rax
224 DB 00fh,01fh,000h
225 add rax,16
226
227 $L$dec_loop4::
228 DB 102,15,56,222,209
229 DB 102,15,56,222,217
230 DB 102,15,56,222,225
231 DB 102,15,56,222,233
232 movups xmm1,XMMWORD PTR[rax*1+rcx]
233 add rax,32
234 DB 102,15,56,222,208
235 DB 102,15,56,222,216
236 DB 102,15,56,222,224
237 DB 102,15,56,222,232
238 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
239 jnz $L$dec_loop4
240
241 DB 102,15,56,222,209
242 DB 102,15,56,222,217
243 DB 102,15,56,222,225
244 DB 102,15,56,222,233
245 DB 102,15,56,223,208
246 DB 102,15,56,223,216
247 DB 102,15,56,223,224
248 DB 102,15,56,223,232
249 DB 0F3h,0C3h ;repret
250 _aesni_decrypt4 ENDP
251
252 ALIGN 16
253 _aesni_encrypt6 PROC PRIVATE
254 movups xmm0,XMMWORD PTR[rcx]
255 shl eax,4
256 movups xmm1,XMMWORD PTR[16+rcx]
257 xorps xmm2,xmm0
258 pxor xmm3,xmm0
259 pxor xmm4,xmm0
260 DB 102,15,56,220,209
261 lea rcx,QWORD PTR[32+rax*1+rcx]
262 neg rax
263 DB 102,15,56,220,217
264 pxor xmm5,xmm0
265 pxor xmm6,xmm0
266 DB 102,15,56,220,225
267 pxor xmm7,xmm0
268 add rax,16
269 DB 102,15,56,220,233
270 DB 102,15,56,220,241
271 DB 102,15,56,220,249
272 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
273 jmp $L$enc_loop6_enter
274 ALIGN 16
275 $L$enc_loop6::
276 DB 102,15,56,220,209
277 DB 102,15,56,220,217
278 DB 102,15,56,220,225
279 DB 102,15,56,220,233
280 DB 102,15,56,220,241
281 DB 102,15,56,220,249
282 $L$enc_loop6_enter::
283 movups xmm1,XMMWORD PTR[rax*1+rcx]
284 add rax,32
285 DB 102,15,56,220,208
286 DB 102,15,56,220,216
287 DB 102,15,56,220,224
288 DB 102,15,56,220,232
289 DB 102,15,56,220,240
290 DB 102,15,56,220,248
291 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
292 jnz $L$enc_loop6
293
294 DB 102,15,56,220,209
295 DB 102,15,56,220,217
296 DB 102,15,56,220,225
297 DB 102,15,56,220,233
298 DB 102,15,56,220,241
299 DB 102,15,56,220,249
300 DB 102,15,56,221,208
301 DB 102,15,56,221,216
302 DB 102,15,56,221,224
303 DB 102,15,56,221,232
304 DB 102,15,56,221,240
305 DB 102,15,56,221,248
306 DB 0F3h,0C3h ;repret
307 _aesni_encrypt6 ENDP
308
309 ALIGN 16
310 _aesni_decrypt6 PROC PRIVATE
311 movups xmm0,XMMWORD PTR[rcx]
312 shl eax,4
313 movups xmm1,XMMWORD PTR[16+rcx]
314 xorps xmm2,xmm0
315 pxor xmm3,xmm0
316 pxor xmm4,xmm0
317 DB 102,15,56,222,209
318 lea rcx,QWORD PTR[32+rax*1+rcx]
319 neg rax
320 DB 102,15,56,222,217
321 pxor xmm5,xmm0
322 pxor xmm6,xmm0
323 DB 102,15,56,222,225
324 pxor xmm7,xmm0
325 add rax,16
326 DB 102,15,56,222,233
327 DB 102,15,56,222,241
328 DB 102,15,56,222,249
329 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
330 jmp $L$dec_loop6_enter
331 ALIGN 16
332 $L$dec_loop6::
333 DB 102,15,56,222,209
334 DB 102,15,56,222,217
335 DB 102,15,56,222,225
336 DB 102,15,56,222,233
337 DB 102,15,56,222,241
338 DB 102,15,56,222,249
339 $L$dec_loop6_enter::
340 movups xmm1,XMMWORD PTR[rax*1+rcx]
341 add rax,32
342 DB 102,15,56,222,208
343 DB 102,15,56,222,216
344 DB 102,15,56,222,224
345 DB 102,15,56,222,232
346 DB 102,15,56,222,240
347 DB 102,15,56,222,248
348 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
349 jnz $L$dec_loop6
350
351 DB 102,15,56,222,209
352 DB 102,15,56,222,217
353 DB 102,15,56,222,225
354 DB 102,15,56,222,233
355 DB 102,15,56,222,241
356 DB 102,15,56,222,249
357 DB 102,15,56,223,208
358 DB 102,15,56,223,216
359 DB 102,15,56,223,224
360 DB 102,15,56,223,232
361 DB 102,15,56,223,240
362 DB 102,15,56,223,248
363 DB 0F3h,0C3h ;repret
364 _aesni_decrypt6 ENDP
365
366 ALIGN 16
367 _aesni_encrypt8 PROC PRIVATE
368 movups xmm0,XMMWORD PTR[rcx]
369 shl eax,4
370 movups xmm1,XMMWORD PTR[16+rcx]
371 xorps xmm2,xmm0
372 xorps xmm3,xmm0
373 pxor xmm4,xmm0
374 pxor xmm5,xmm0
375 pxor xmm6,xmm0
376 lea rcx,QWORD PTR[32+rax*1+rcx]
377 neg rax
378 DB 102,15,56,220,209
379 add rax,16
380 pxor xmm7,xmm0
381 DB 102,15,56,220,217
382 pxor xmm8,xmm0
383 pxor xmm9,xmm0
384 DB 102,15,56,220,225
385 DB 102,15,56,220,233
386 DB 102,15,56,220,241
387 DB 102,15,56,220,249
388 DB 102,68,15,56,220,193
389 DB 102,68,15,56,220,201
390 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
391 jmp $L$enc_loop8_enter
392 ALIGN 16
393 $L$enc_loop8::
394 DB 102,15,56,220,209
395 DB 102,15,56,220,217
396 DB 102,15,56,220,225
397 DB 102,15,56,220,233
398 DB 102,15,56,220,241
399 DB 102,15,56,220,249
400 DB 102,68,15,56,220,193
401 DB 102,68,15,56,220,201
402 $L$enc_loop8_enter::
403 movups xmm1,XMMWORD PTR[rax*1+rcx]
404 add rax,32
405 DB 102,15,56,220,208
406 DB 102,15,56,220,216
407 DB 102,15,56,220,224
408 DB 102,15,56,220,232
409 DB 102,15,56,220,240
410 DB 102,15,56,220,248
411 DB 102,68,15,56,220,192
412 DB 102,68,15,56,220,200
413 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
414 jnz $L$enc_loop8
415
416 DB 102,15,56,220,209
417 DB 102,15,56,220,217
418 DB 102,15,56,220,225
419 DB 102,15,56,220,233
420 DB 102,15,56,220,241
421 DB 102,15,56,220,249
422 DB 102,68,15,56,220,193
423 DB 102,68,15,56,220,201
424 DB 102,15,56,221,208
425 DB 102,15,56,221,216
426 DB 102,15,56,221,224
427 DB 102,15,56,221,232
428 DB 102,15,56,221,240
429 DB 102,15,56,221,248
430 DB 102,68,15,56,221,192
431 DB 102,68,15,56,221,200
432 DB 0F3h,0C3h ;repret
433 _aesni_encrypt8 ENDP
434
435 ALIGN 16
436 _aesni_decrypt8 PROC PRIVATE
437 movups xmm0,XMMWORD PTR[rcx]
438 shl eax,4
439 movups xmm1,XMMWORD PTR[16+rcx]
440 xorps xmm2,xmm0
441 xorps xmm3,xmm0
442 pxor xmm4,xmm0
443 pxor xmm5,xmm0
444 pxor xmm6,xmm0
445 lea rcx,QWORD PTR[32+rax*1+rcx]
446 neg rax
447 DB 102,15,56,222,209
448 add rax,16
449 pxor xmm7,xmm0
450 DB 102,15,56,222,217
451 pxor xmm8,xmm0
452 pxor xmm9,xmm0
453 DB 102,15,56,222,225
454 DB 102,15,56,222,233
455 DB 102,15,56,222,241
456 DB 102,15,56,222,249
457 DB 102,68,15,56,222,193
458 DB 102,68,15,56,222,201
459 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
460 jmp $L$dec_loop8_enter
461 ALIGN 16
462 $L$dec_loop8::
463 DB 102,15,56,222,209
464 DB 102,15,56,222,217
465 DB 102,15,56,222,225
466 DB 102,15,56,222,233
467 DB 102,15,56,222,241
468 DB 102,15,56,222,249
469 DB 102,68,15,56,222,193
470 DB 102,68,15,56,222,201
471 $L$dec_loop8_enter::
472 movups xmm1,XMMWORD PTR[rax*1+rcx]
473 add rax,32
474 DB 102,15,56,222,208
475 DB 102,15,56,222,216
476 DB 102,15,56,222,224
477 DB 102,15,56,222,232
478 DB 102,15,56,222,240
479 DB 102,15,56,222,248
480 DB 102,68,15,56,222,192
481 DB 102,68,15,56,222,200
482 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
483 jnz $L$dec_loop8
484
485 DB 102,15,56,222,209
486 DB 102,15,56,222,217
487 DB 102,15,56,222,225
488 DB 102,15,56,222,233
489 DB 102,15,56,222,241
490 DB 102,15,56,222,249
491 DB 102,68,15,56,222,193
492 DB 102,68,15,56,222,201
493 DB 102,15,56,223,208
494 DB 102,15,56,223,216
495 DB 102,15,56,223,224
496 DB 102,15,56,223,232
497 DB 102,15,56,223,240
498 DB 102,15,56,223,248
499 DB 102,68,15,56,223,192
500 DB 102,68,15,56,223,200
501 DB 0F3h,0C3h ;repret
502 _aesni_decrypt8 ENDP
503 PUBLIC aesni_ecb_encrypt
504
505 ALIGN 16
506 aesni_ecb_encrypt PROC PUBLIC
507 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
508 mov QWORD PTR[16+rsp],rsi
509 mov rax,rsp
510 $L$SEH_begin_aesni_ecb_encrypt::
511 mov rdi,rcx
512 mov rsi,rdx
513 mov rdx,r8
514 mov rcx,r9
515 mov r8,QWORD PTR[40+rsp]
516
517
518 and rdx,-16
519 jz $L$ecb_ret
520
521 mov eax,DWORD PTR[240+rcx]
522 movups xmm0,XMMWORD PTR[rcx]
523 mov r11,rcx
524 mov r10d,eax
525 test r8d,r8d
526 jz $L$ecb_decrypt
527
528 cmp rdx,080h
529 jb $L$ecb_enc_tail
530
531 movdqu xmm2,XMMWORD PTR[rdi]
532 movdqu xmm3,XMMWORD PTR[16+rdi]
533 movdqu xmm4,XMMWORD PTR[32+rdi]
534 movdqu xmm5,XMMWORD PTR[48+rdi]
535 movdqu xmm6,XMMWORD PTR[64+rdi]
536 movdqu xmm7,XMMWORD PTR[80+rdi]
537 movdqu xmm8,XMMWORD PTR[96+rdi]
538 movdqu xmm9,XMMWORD PTR[112+rdi]
539 lea rdi,QWORD PTR[128+rdi]
540 sub rdx,080h
541 jmp $L$ecb_enc_loop8_enter
542 ALIGN 16
543 $L$ecb_enc_loop8::
544 movups XMMWORD PTR[rsi],xmm2
545 mov rcx,r11
546 movdqu xmm2,XMMWORD PTR[rdi]
547 mov eax,r10d
548 movups XMMWORD PTR[16+rsi],xmm3
549 movdqu xmm3,XMMWORD PTR[16+rdi]
550 movups XMMWORD PTR[32+rsi],xmm4
551 movdqu xmm4,XMMWORD PTR[32+rdi]
552 movups XMMWORD PTR[48+rsi],xmm5
553 movdqu xmm5,XMMWORD PTR[48+rdi]
554 movups XMMWORD PTR[64+rsi],xmm6
555 movdqu xmm6,XMMWORD PTR[64+rdi]
556 movups XMMWORD PTR[80+rsi],xmm7
557 movdqu xmm7,XMMWORD PTR[80+rdi]
558 movups XMMWORD PTR[96+rsi],xmm8
559 movdqu xmm8,XMMWORD PTR[96+rdi]
560 movups XMMWORD PTR[112+rsi],xmm9
561 lea rsi,QWORD PTR[128+rsi]
562 movdqu xmm9,XMMWORD PTR[112+rdi]
563 lea rdi,QWORD PTR[128+rdi]
564 $L$ecb_enc_loop8_enter::
565
566 call _aesni_encrypt8
567
568 sub rdx,080h
569 jnc $L$ecb_enc_loop8
570
571 movups XMMWORD PTR[rsi],xmm2
572 mov rcx,r11
573 movups XMMWORD PTR[16+rsi],xmm3
574 mov eax,r10d
575 movups XMMWORD PTR[32+rsi],xmm4
576 movups XMMWORD PTR[48+rsi],xmm5
577 movups XMMWORD PTR[64+rsi],xmm6
578 movups XMMWORD PTR[80+rsi],xmm7
579 movups XMMWORD PTR[96+rsi],xmm8
580 movups XMMWORD PTR[112+rsi],xmm9
581 lea rsi,QWORD PTR[128+rsi]
582 add rdx,080h
583 jz $L$ecb_ret
584
585 $L$ecb_enc_tail::
586 movups xmm2,XMMWORD PTR[rdi]
587 cmp rdx,020h
588 jb $L$ecb_enc_one
589 movups xmm3,XMMWORD PTR[16+rdi]
590 je $L$ecb_enc_two
591 movups xmm4,XMMWORD PTR[32+rdi]
592 cmp rdx,040h
593 jb $L$ecb_enc_three
594 movups xmm5,XMMWORD PTR[48+rdi]
595 je $L$ecb_enc_four
596 movups xmm6,XMMWORD PTR[64+rdi]
597 cmp rdx,060h
598 jb $L$ecb_enc_five
599 movups xmm7,XMMWORD PTR[80+rdi]
600 je $L$ecb_enc_six
601 movdqu xmm8,XMMWORD PTR[96+rdi]
602 call _aesni_encrypt8
603 movups XMMWORD PTR[rsi],xmm2
604 movups XMMWORD PTR[16+rsi],xmm3
605 movups XMMWORD PTR[32+rsi],xmm4
606 movups XMMWORD PTR[48+rsi],xmm5
607 movups XMMWORD PTR[64+rsi],xmm6
608 movups XMMWORD PTR[80+rsi],xmm7
609 movups XMMWORD PTR[96+rsi],xmm8
610 jmp $L$ecb_ret
611 ALIGN 16
612 $L$ecb_enc_one::
613 movups xmm0,XMMWORD PTR[rcx]
614 movups xmm1,XMMWORD PTR[16+rcx]
615 lea rcx,QWORD PTR[32+rcx]
616 xorps xmm2,xmm0
617 $L$oop_enc1_3::
618 DB 102,15,56,220,209
619 dec eax
620 movups xmm1,XMMWORD PTR[rcx]
621 lea rcx,QWORD PTR[16+rcx]
622 jnz $L$oop_enc1_3
623 DB 102,15,56,221,209
624 movups XMMWORD PTR[rsi],xmm2
625 jmp $L$ecb_ret
626 ALIGN 16
627 $L$ecb_enc_two::
628 call _aesni_encrypt2
629 movups XMMWORD PTR[rsi],xmm2
630 movups XMMWORD PTR[16+rsi],xmm3
631 jmp $L$ecb_ret
632 ALIGN 16
633 $L$ecb_enc_three::
634 call _aesni_encrypt3
635 movups XMMWORD PTR[rsi],xmm2
636 movups XMMWORD PTR[16+rsi],xmm3
637 movups XMMWORD PTR[32+rsi],xmm4
638 jmp $L$ecb_ret
639 ALIGN 16
640 $L$ecb_enc_four::
641 call _aesni_encrypt4
642 movups XMMWORD PTR[rsi],xmm2
643 movups XMMWORD PTR[16+rsi],xmm3
644 movups XMMWORD PTR[32+rsi],xmm4
645 movups XMMWORD PTR[48+rsi],xmm5
646 jmp $L$ecb_ret
647 ALIGN 16
648 $L$ecb_enc_five::
649 xorps xmm7,xmm7
650 call _aesni_encrypt6
651 movups XMMWORD PTR[rsi],xmm2
652 movups XMMWORD PTR[16+rsi],xmm3
653 movups XMMWORD PTR[32+rsi],xmm4
654 movups XMMWORD PTR[48+rsi],xmm5
655 movups XMMWORD PTR[64+rsi],xmm6
656 jmp $L$ecb_ret
657 ALIGN 16
658 $L$ecb_enc_six::
659 call _aesni_encrypt6
660 movups XMMWORD PTR[rsi],xmm2
661 movups XMMWORD PTR[16+rsi],xmm3
662 movups XMMWORD PTR[32+rsi],xmm4
663 movups XMMWORD PTR[48+rsi],xmm5
664 movups XMMWORD PTR[64+rsi],xmm6
665 movups XMMWORD PTR[80+rsi],xmm7
666 jmp $L$ecb_ret
667
668 ALIGN 16
669 $L$ecb_decrypt::
670 cmp rdx,080h
671 jb $L$ecb_dec_tail
672
673 movdqu xmm2,XMMWORD PTR[rdi]
674 movdqu xmm3,XMMWORD PTR[16+rdi]
675 movdqu xmm4,XMMWORD PTR[32+rdi]
676 movdqu xmm5,XMMWORD PTR[48+rdi]
677 movdqu xmm6,XMMWORD PTR[64+rdi]
678 movdqu xmm7,XMMWORD PTR[80+rdi]
679 movdqu xmm8,XMMWORD PTR[96+rdi]
680 movdqu xmm9,XMMWORD PTR[112+rdi]
681 lea rdi,QWORD PTR[128+rdi]
682 sub rdx,080h
683 jmp $L$ecb_dec_loop8_enter
684 ALIGN 16
685 $L$ecb_dec_loop8::
686 movups XMMWORD PTR[rsi],xmm2
687 mov rcx,r11
688 movdqu xmm2,XMMWORD PTR[rdi]
689 mov eax,r10d
690 movups XMMWORD PTR[16+rsi],xmm3
691 movdqu xmm3,XMMWORD PTR[16+rdi]
692 movups XMMWORD PTR[32+rsi],xmm4
693 movdqu xmm4,XMMWORD PTR[32+rdi]
694 movups XMMWORD PTR[48+rsi],xmm5
695 movdqu xmm5,XMMWORD PTR[48+rdi]
696 movups XMMWORD PTR[64+rsi],xmm6
697 movdqu xmm6,XMMWORD PTR[64+rdi]
698 movups XMMWORD PTR[80+rsi],xmm7
699 movdqu xmm7,XMMWORD PTR[80+rdi]
700 movups XMMWORD PTR[96+rsi],xmm8
701 movdqu xmm8,XMMWORD PTR[96+rdi]
702 movups XMMWORD PTR[112+rsi],xmm9
703 lea rsi,QWORD PTR[128+rsi]
704 movdqu xmm9,XMMWORD PTR[112+rdi]
705 lea rdi,QWORD PTR[128+rdi]
706 $L$ecb_dec_loop8_enter::
707
708 call _aesni_decrypt8
709
710 movups xmm0,XMMWORD PTR[r11]
711 sub rdx,080h
712 jnc $L$ecb_dec_loop8
713
714 movups XMMWORD PTR[rsi],xmm2
715 mov rcx,r11
716 movups XMMWORD PTR[16+rsi],xmm3
717 mov eax,r10d
718 movups XMMWORD PTR[32+rsi],xmm4
719 movups XMMWORD PTR[48+rsi],xmm5
720 movups XMMWORD PTR[64+rsi],xmm6
721 movups XMMWORD PTR[80+rsi],xmm7
722 movups XMMWORD PTR[96+rsi],xmm8
723 movups XMMWORD PTR[112+rsi],xmm9
724 lea rsi,QWORD PTR[128+rsi]
725 add rdx,080h
726 jz $L$ecb_ret
727
728 $L$ecb_dec_tail::
729 movups xmm2,XMMWORD PTR[rdi]
730 cmp rdx,020h
731 jb $L$ecb_dec_one
732 movups xmm3,XMMWORD PTR[16+rdi]
733 je $L$ecb_dec_two
734 movups xmm4,XMMWORD PTR[32+rdi]
735 cmp rdx,040h
736 jb $L$ecb_dec_three
737 movups xmm5,XMMWORD PTR[48+rdi]
738 je $L$ecb_dec_four
739 movups xmm6,XMMWORD PTR[64+rdi]
740 cmp rdx,060h
741 jb $L$ecb_dec_five
742 movups xmm7,XMMWORD PTR[80+rdi]
743 je $L$ecb_dec_six
744 movups xmm8,XMMWORD PTR[96+rdi]
745 movups xmm0,XMMWORD PTR[rcx]
746 call _aesni_decrypt8
747 movups XMMWORD PTR[rsi],xmm2
748 movups XMMWORD PTR[16+rsi],xmm3
749 movups XMMWORD PTR[32+rsi],xmm4
750 movups XMMWORD PTR[48+rsi],xmm5
751 movups XMMWORD PTR[64+rsi],xmm6
752 movups XMMWORD PTR[80+rsi],xmm7
753 movups XMMWORD PTR[96+rsi],xmm8
754 jmp $L$ecb_ret
755 ALIGN 16
756 $L$ecb_dec_one::
757 movups xmm0,XMMWORD PTR[rcx]
758 movups xmm1,XMMWORD PTR[16+rcx]
759 lea rcx,QWORD PTR[32+rcx]
760 xorps xmm2,xmm0
761 $L$oop_dec1_4::
762 DB 102,15,56,222,209
763 dec eax
764 movups xmm1,XMMWORD PTR[rcx]
765 lea rcx,QWORD PTR[16+rcx]
766 jnz $L$oop_dec1_4
767 DB 102,15,56,223,209
768 movups XMMWORD PTR[rsi],xmm2
769 jmp $L$ecb_ret
770 ALIGN 16
771 $L$ecb_dec_two::
772 call _aesni_decrypt2
773 movups XMMWORD PTR[rsi],xmm2
774 movups XMMWORD PTR[16+rsi],xmm3
775 jmp $L$ecb_ret
776 ALIGN 16
777 $L$ecb_dec_three::
778 call _aesni_decrypt3
779 movups XMMWORD PTR[rsi],xmm2
780 movups XMMWORD PTR[16+rsi],xmm3
781 movups XMMWORD PTR[32+rsi],xmm4
782 jmp $L$ecb_ret
783 ALIGN 16
784 $L$ecb_dec_four::
785 call _aesni_decrypt4
786 movups XMMWORD PTR[rsi],xmm2
787 movups XMMWORD PTR[16+rsi],xmm3
788 movups XMMWORD PTR[32+rsi],xmm4
789 movups XMMWORD PTR[48+rsi],xmm5
790 jmp $L$ecb_ret
791 ALIGN 16
792 $L$ecb_dec_five::
793 xorps xmm7,xmm7
794 call _aesni_decrypt6
795 movups XMMWORD PTR[rsi],xmm2
796 movups XMMWORD PTR[16+rsi],xmm3
797 movups XMMWORD PTR[32+rsi],xmm4
798 movups XMMWORD PTR[48+rsi],xmm5
799 movups XMMWORD PTR[64+rsi],xmm6
800 jmp $L$ecb_ret
801 ALIGN 16
802 $L$ecb_dec_six::
803 call _aesni_decrypt6
804 movups XMMWORD PTR[rsi],xmm2
805 movups XMMWORD PTR[16+rsi],xmm3
806 movups XMMWORD PTR[32+rsi],xmm4
807 movups XMMWORD PTR[48+rsi],xmm5
808 movups XMMWORD PTR[64+rsi],xmm6
809 movups XMMWORD PTR[80+rsi],xmm7
810
811 $L$ecb_ret::
812 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
813 mov rsi,QWORD PTR[16+rsp]
814 DB 0F3h,0C3h ;repret
815 $L$SEH_end_aesni_ecb_encrypt::
816 aesni_ecb_encrypt ENDP
817 PUBLIC aesni_ccm64_encrypt_blocks
818
819 ALIGN 16
820 aesni_ccm64_encrypt_blocks PROC PUBLIC
821 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
822 mov QWORD PTR[16+rsp],rsi
823 mov rax,rsp
824 $L$SEH_begin_aesni_ccm64_encrypt_blocks::
825 mov rdi,rcx
826 mov rsi,rdx
827 mov rdx,r8
828 mov rcx,r9
829 mov r8,QWORD PTR[40+rsp]
830 mov r9,QWORD PTR[48+rsp]
831
832
833 lea rsp,QWORD PTR[((-88))+rsp]
834 movaps XMMWORD PTR[rsp],xmm6
835 movaps XMMWORD PTR[16+rsp],xmm7
836 movaps XMMWORD PTR[32+rsp],xmm8
837 movaps XMMWORD PTR[48+rsp],xmm9
838 $L$ccm64_enc_body::
839 mov eax,DWORD PTR[240+rcx]
840 movdqu xmm6,XMMWORD PTR[r8]
841 movdqa xmm9,XMMWORD PTR[$L$increment64]
842 movdqa xmm7,XMMWORD PTR[$L$bswap_mask]
843
844 shl eax,4
845 mov r10d,16
846 lea r11,QWORD PTR[rcx]
847 movdqu xmm3,XMMWORD PTR[r9]
848 movdqa xmm2,xmm6
849 lea rcx,QWORD PTR[32+rax*1+rcx]
850 DB 102,15,56,0,247
851 sub r10,rax
852 jmp $L$ccm64_enc_outer
853 ALIGN 16
854 $L$ccm64_enc_outer::
855 movups xmm0,XMMWORD PTR[r11]
856 mov rax,r10
857 movups xmm8,XMMWORD PTR[rdi]
858
859 xorps xmm2,xmm0
860 movups xmm1,XMMWORD PTR[16+r11]
861 xorps xmm0,xmm8
862 xorps xmm3,xmm0
863 movups xmm0,XMMWORD PTR[32+r11]
864
865 $L$ccm64_enc2_loop::
866 DB 102,15,56,220,209
867 DB 102,15,56,220,217
868 movups xmm1,XMMWORD PTR[rax*1+rcx]
869 add rax,32
870 DB 102,15,56,220,208
871 DB 102,15,56,220,216
872 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
873 jnz $L$ccm64_enc2_loop
874 DB 102,15,56,220,209
875 DB 102,15,56,220,217
876 paddq xmm6,xmm9
877 dec rdx
878 DB 102,15,56,221,208
879 DB 102,15,56,221,216
880
881 lea rdi,QWORD PTR[16+rdi]
882 xorps xmm8,xmm2
883 movdqa xmm2,xmm6
884 movups XMMWORD PTR[rsi],xmm8
885 DB 102,15,56,0,215
886 lea rsi,QWORD PTR[16+rsi]
887 jnz $L$ccm64_enc_outer
888
889 movups XMMWORD PTR[r9],xmm3
890 movaps xmm6,XMMWORD PTR[rsp]
891 movaps xmm7,XMMWORD PTR[16+rsp]
892 movaps xmm8,XMMWORD PTR[32+rsp]
893 movaps xmm9,XMMWORD PTR[48+rsp]
894 lea rsp,QWORD PTR[88+rsp]
895 $L$ccm64_enc_ret::
896 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
897 mov rsi,QWORD PTR[16+rsp]
898 DB 0F3h,0C3h ;repret
899 $L$SEH_end_aesni_ccm64_encrypt_blocks::
900 aesni_ccm64_encrypt_blocks ENDP
901 PUBLIC aesni_ccm64_decrypt_blocks
902
903 ALIGN 16
904 aesni_ccm64_decrypt_blocks PROC PUBLIC
905 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
906 mov QWORD PTR[16+rsp],rsi
907 mov rax,rsp
908 $L$SEH_begin_aesni_ccm64_decrypt_blocks::
909 mov rdi,rcx
910 mov rsi,rdx
911 mov rdx,r8
912 mov rcx,r9
913 mov r8,QWORD PTR[40+rsp]
914 mov r9,QWORD PTR[48+rsp]
915
916
917 lea rsp,QWORD PTR[((-88))+rsp]
918 movaps XMMWORD PTR[rsp],xmm6
919 movaps XMMWORD PTR[16+rsp],xmm7
920 movaps XMMWORD PTR[32+rsp],xmm8
921 movaps XMMWORD PTR[48+rsp],xmm9
922 $L$ccm64_dec_body::
923 mov eax,DWORD PTR[240+rcx]
924 movups xmm6,XMMWORD PTR[r8]
925 movdqu xmm3,XMMWORD PTR[r9]
926 movdqa xmm9,XMMWORD PTR[$L$increment64]
927 movdqa xmm7,XMMWORD PTR[$L$bswap_mask]
928
929 movaps xmm2,xmm6
930 mov r10d,eax
931 mov r11,rcx
932 DB 102,15,56,0,247
933 movups xmm0,XMMWORD PTR[rcx]
934 movups xmm1,XMMWORD PTR[16+rcx]
935 lea rcx,QWORD PTR[32+rcx]
936 xorps xmm2,xmm0
937 $L$oop_enc1_5::
938 DB 102,15,56,220,209
939 dec eax
940 movups xmm1,XMMWORD PTR[rcx]
941 lea rcx,QWORD PTR[16+rcx]
942 jnz $L$oop_enc1_5
943 DB 102,15,56,221,209
944 shl r10d,4
945 mov eax,16
946 movups xmm8,XMMWORD PTR[rdi]
947 paddq xmm6,xmm9
948 lea rdi,QWORD PTR[16+rdi]
949 sub rax,r10
950 lea rcx,QWORD PTR[32+r10*1+r11]
951 mov r10,rax
952 jmp $L$ccm64_dec_outer
953 ALIGN 16
954 $L$ccm64_dec_outer::
955 xorps xmm8,xmm2
956 movdqa xmm2,xmm6
957 movups XMMWORD PTR[rsi],xmm8
958 lea rsi,QWORD PTR[16+rsi]
959 DB 102,15,56,0,215
960
961 sub rdx,1
962 jz $L$ccm64_dec_break
963
964 movups xmm0,XMMWORD PTR[r11]
965 mov rax,r10
966 movups xmm1,XMMWORD PTR[16+r11]
967 xorps xmm8,xmm0
968 xorps xmm2,xmm0
969 xorps xmm3,xmm8
970 movups xmm0,XMMWORD PTR[32+r11]
971 jmp $L$ccm64_dec2_loop
972 ALIGN 16
973 $L$ccm64_dec2_loop::
974 DB 102,15,56,220,209
975 DB 102,15,56,220,217
976 movups xmm1,XMMWORD PTR[rax*1+rcx]
977 add rax,32
978 DB 102,15,56,220,208
979 DB 102,15,56,220,216
980 movups xmm0,XMMWORD PTR[((-16))+rax*1+rcx]
981 jnz $L$ccm64_dec2_loop
982 movups xmm8,XMMWORD PTR[rdi]
983 paddq xmm6,xmm9
984 DB 102,15,56,220,209
985 DB 102,15,56,220,217
986 DB 102,15,56,221,208
987 DB 102,15,56,221,216
988 lea rdi,QWORD PTR[16+rdi]
989 jmp $L$ccm64_dec_outer
990
991 ALIGN 16
992 $L$ccm64_dec_break::
993
994 mov eax,DWORD PTR[240+r11]
995 movups xmm0,XMMWORD PTR[r11]
996 movups xmm1,XMMWORD PTR[16+r11]
997 xorps xmm8,xmm0
998 lea r11,QWORD PTR[32+r11]
999 xorps xmm3,xmm8
1000 $L$oop_enc1_6::
1001 DB 102,15,56,220,217
1002 dec eax
1003 movups xmm1,XMMWORD PTR[r11]
1004 lea r11,QWORD PTR[16+r11]
1005 jnz $L$oop_enc1_6
1006 DB 102,15,56,221,217
1007 movups XMMWORD PTR[r9],xmm3
1008 movaps xmm6,XMMWORD PTR[rsp]
1009 movaps xmm7,XMMWORD PTR[16+rsp]
1010 movaps xmm8,XMMWORD PTR[32+rsp]
1011 movaps xmm9,XMMWORD PTR[48+rsp]
1012 lea rsp,QWORD PTR[88+rsp]
1013 $L$ccm64_dec_ret::
1014 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
1015 mov rsi,QWORD PTR[16+rsp]
1016 DB 0F3h,0C3h ;repret
1017 $L$SEH_end_aesni_ccm64_decrypt_blocks::
1018 aesni_ccm64_decrypt_blocks ENDP
1019 PUBLIC aesni_ctr32_encrypt_blocks
1020
1021 ALIGN 16
1022 aesni_ctr32_encrypt_blocks PROC PUBLIC
1023 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
1024 mov QWORD PTR[16+rsp],rsi
1025 mov rax,rsp
1026 $L$SEH_begin_aesni_ctr32_encrypt_blocks::
1027 mov rdi,rcx
1028 mov rsi,rdx
1029 mov rdx,r8
1030 mov rcx,r9
1031 mov r8,QWORD PTR[40+rsp]
1032
1033
1034 lea rax,QWORD PTR[rsp]
1035 push rbp
1036 sub rsp,288
1037 and rsp,-16
1038 movaps XMMWORD PTR[(-168)+rax],xmm6
1039 movaps XMMWORD PTR[(-152)+rax],xmm7
1040 movaps XMMWORD PTR[(-136)+rax],xmm8
1041 movaps XMMWORD PTR[(-120)+rax],xmm9
1042 movaps XMMWORD PTR[(-104)+rax],xmm10
1043 movaps XMMWORD PTR[(-88)+rax],xmm11
1044 movaps XMMWORD PTR[(-72)+rax],xmm12
1045 movaps XMMWORD PTR[(-56)+rax],xmm13
1046 movaps XMMWORD PTR[(-40)+rax],xmm14
1047 movaps XMMWORD PTR[(-24)+rax],xmm15
1048 $L$ctr32_body::
1049 lea rbp,QWORD PTR[((-8))+rax]
1050
1051 cmp rdx,1
1052 je $L$ctr32_one_shortcut
1053
1054 movdqu xmm2,XMMWORD PTR[r8]
1055 movdqu xmm0,XMMWORD PTR[rcx]
1056 mov r8d,DWORD PTR[12+r8]
1057 pxor xmm2,xmm0
1058 mov r11d,DWORD PTR[12+rcx]
1059 movdqa XMMWORD PTR[rsp],xmm2
1060 bswap r8d
1061 movdqa xmm3,xmm2
1062 movdqa xmm4,xmm2
1063 movdqa xmm5,xmm2
1064 movdqa XMMWORD PTR[64+rsp],xmm2
1065 movdqa XMMWORD PTR[80+rsp],xmm2
1066 movdqa XMMWORD PTR[96+rsp],xmm2
1067 mov r10,rdx
1068 movdqa XMMWORD PTR[112+rsp],xmm2
1069
1070 lea rax,QWORD PTR[1+r8]
1071 lea rdx,QWORD PTR[2+r8]
1072 bswap eax
1073 bswap edx
1074 xor eax,r11d
1075 xor edx,r11d
1076 DB 102,15,58,34,216,3
1077 lea rax,QWORD PTR[3+r8]
1078 movdqa XMMWORD PTR[16+rsp],xmm3
1079 DB 102,15,58,34,226,3
1080 bswap eax
1081 mov rdx,r10
1082 lea r10,QWORD PTR[4+r8]
1083 movdqa XMMWORD PTR[32+rsp],xmm4
1084 xor eax,r11d
1085 bswap r10d
1086 DB 102,15,58,34,232,3
1087 xor r10d,r11d
1088 movdqa XMMWORD PTR[48+rsp],xmm5
1089 lea r9,QWORD PTR[5+r8]
1090 mov DWORD PTR[((64+12))+rsp],r10d
1091 bswap r9d
1092 lea r10,QWORD PTR[6+r8]
1093 mov eax,DWORD PTR[240+rcx]
1094 xor r9d,r11d
1095 bswap r10d
1096 mov DWORD PTR[((80+12))+rsp],r9d
1097 xor r10d,r11d
1098 lea r9,QWORD PTR[7+r8]
1099 mov DWORD PTR[((96+12))+rsp],r10d
1100 bswap r9d
1101 mov r10d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
1102 xor r9d,r11d
1103 and r10d,71303168
1104 mov DWORD PTR[((112+12))+rsp],r9d
1105
1106 movups xmm1,XMMWORD PTR[16+rcx]
1107
1108 movdqa xmm6,XMMWORD PTR[64+rsp]
1109 movdqa xmm7,XMMWORD PTR[80+rsp]
1110
1111 cmp rdx,8
1112 jb $L$ctr32_tail
1113
1114 sub rdx,6
1115 cmp r10d,4194304
1116 je $L$ctr32_6x
1117
1118 lea rcx,QWORD PTR[128+rcx]
1119 sub rdx,2
1120 jmp $L$ctr32_loop8
1121
1122 ALIGN 16
1123 $L$ctr32_6x::
1124 shl eax,4
1125 mov r10d,48
1126 bswap r11d
1127 lea rcx,QWORD PTR[32+rax*1+rcx]
1128 sub r10,rax
1129 jmp $L$ctr32_loop6
1130
1131 ALIGN 16
1132 $L$ctr32_loop6::
1133 add r8d,6
1134 movups xmm0,XMMWORD PTR[((-48))+r10*1+rcx]
1135 DB 102,15,56,220,209
1136 mov eax,r8d
1137 xor eax,r11d
1138 DB 102,15,56,220,217
1139 DB 00fh,038h,0f1h,044h,024h,12
1140 lea eax,DWORD PTR[1+r8]
1141 DB 102,15,56,220,225
1142 xor eax,r11d
1143 DB 00fh,038h,0f1h,044h,024h,28
1144 DB 102,15,56,220,233
1145 lea eax,DWORD PTR[2+r8]
1146 xor eax,r11d
1147 DB 102,15,56,220,241
1148 DB 00fh,038h,0f1h,044h,024h,44
1149 lea eax,DWORD PTR[3+r8]
1150 DB 102,15,56,220,249
1151 movups xmm1,XMMWORD PTR[((-32))+r10*1+rcx]
1152 xor eax,r11d
1153
1154 DB 102,15,56,220,208
1155 DB 00fh,038h,0f1h,044h,024h,60
1156 lea eax,DWORD PTR[4+r8]
1157 DB 102,15,56,220,216
1158 xor eax,r11d
1159 DB 00fh,038h,0f1h,044h,024h,76
1160 DB 102,15,56,220,224
1161 lea eax,DWORD PTR[5+r8]
1162 xor eax,r11d
1163 DB 102,15,56,220,232
1164 DB 00fh,038h,0f1h,044h,024h,92
1165 mov rax,r10
1166 DB 102,15,56,220,240
1167 DB 102,15,56,220,248
1168 movups xmm0,XMMWORD PTR[((-16))+r10*1+rcx]
1169
1170 call $L$enc_loop6
1171
1172 movdqu xmm8,XMMWORD PTR[rdi]
1173 movdqu xmm9,XMMWORD PTR[16+rdi]
1174 movdqu xmm10,XMMWORD PTR[32+rdi]
1175 movdqu xmm11,XMMWORD PTR[48+rdi]
1176 movdqu xmm12,XMMWORD PTR[64+rdi]
1177 movdqu xmm13,XMMWORD PTR[80+rdi]
1178 lea rdi,QWORD PTR[96+rdi]
1179 movups xmm1,XMMWORD PTR[((-64))+r10*1+rcx]
1180 pxor xmm8,xmm2
1181 movaps xmm2,XMMWORD PTR[rsp]
1182 pxor xmm9,xmm3
1183 movaps xmm3,XMMWORD PTR[16+rsp]
1184 pxor xmm10,xmm4
1185 movaps xmm4,XMMWORD PTR[32+rsp]
1186 pxor xmm11,xmm5
1187 movaps xmm5,XMMWORD PTR[48+rsp]
1188 pxor xmm12,xmm6
1189 movaps xmm6,XMMWORD PTR[64+rsp]
1190 pxor xmm13,xmm7
1191 movaps xmm7,XMMWORD PTR[80+rsp]
1192 movdqu XMMWORD PTR[rsi],xmm8
1193 movdqu XMMWORD PTR[16+rsi],xmm9
1194 movdqu XMMWORD PTR[32+rsi],xmm10
1195 movdqu XMMWORD PTR[48+rsi],xmm11
1196 movdqu XMMWORD PTR[64+rsi],xmm12
1197 movdqu XMMWORD PTR[80+rsi],xmm13
1198 lea rsi,QWORD PTR[96+rsi]
1199
1200 sub rdx,6
1201 jnc $L$ctr32_loop6
1202
1203 add rdx,6
1204 jz $L$ctr32_done
1205
1206 lea eax,DWORD PTR[((-48))+r10]
1207 lea rcx,QWORD PTR[((-80))+r10*1+rcx]
1208 neg eax
1209 shr eax,4
1210 jmp $L$ctr32_tail
1211
1212 ALIGN 32
1213 $L$ctr32_loop8::
1214 add r8d,8
1215 movdqa xmm8,XMMWORD PTR[96+rsp]
1216 DB 102,15,56,220,209
1217 mov r9d,r8d
1218 movdqa xmm9,XMMWORD PTR[112+rsp]
1219 DB 102,15,56,220,217
1220 bswap r9d
1221 movups xmm0,XMMWORD PTR[((32-128))+rcx]
1222 DB 102,15,56,220,225
1223 xor r9d,r11d
1224 nop
1225 DB 102,15,56,220,233
1226 mov DWORD PTR[((0+12))+rsp],r9d
1227 lea r9,QWORD PTR[1+r8]
1228 DB 102,15,56,220,241
1229 DB 102,15,56,220,249
1230 DB 102,68,15,56,220,193
1231 DB 102,68,15,56,220,201
1232 movups xmm1,XMMWORD PTR[((48-128))+rcx]
1233 bswap r9d
1234 DB 102,15,56,220,208
1235 DB 102,15,56,220,216
1236 xor r9d,r11d
1237 DB 066h,090h
1238 DB 102,15,56,220,224
1239 DB 102,15,56,220,232
1240 mov DWORD PTR[((16+12))+rsp],r9d
1241 lea r9,QWORD PTR[2+r8]
1242 DB 102,15,56,220,240
1243 DB 102,15,56,220,248
1244 DB 102,68,15,56,220,192
1245 DB 102,68,15,56,220,200
1246 movups xmm0,XMMWORD PTR[((64-128))+rcx]
1247 bswap r9d
1248 DB 102,15,56,220,209
1249 DB 102,15,56,220,217
1250 xor r9d,r11d
1251 DB 066h,090h
1252 DB 102,15,56,220,225
1253 DB 102,15,56,220,233
1254 mov DWORD PTR[((32+12))+rsp],r9d
1255 lea r9,QWORD PTR[3+r8]
1256 DB 102,15,56,220,241
1257 DB 102,15,56,220,249
1258 DB 102,68,15,56,220,193
1259 DB 102,68,15,56,220,201
1260 movups xmm1,XMMWORD PTR[((80-128))+rcx]
1261 bswap r9d
1262 DB 102,15,56,220,208
1263 DB 102,15,56,220,216
1264 xor r9d,r11d
1265 DB 066h,090h
1266 DB 102,15,56,220,224
1267 DB 102,15,56,220,232
1268 mov DWORD PTR[((48+12))+rsp],r9d
1269 lea r9,QWORD PTR[4+r8]
1270 DB 102,15,56,220,240
1271 DB 102,15,56,220,248
1272 DB 102,68,15,56,220,192
1273 DB 102,68,15,56,220,200
1274 movups xmm0,XMMWORD PTR[((96-128))+rcx]
1275 bswap r9d
1276 DB 102,15,56,220,209
1277 DB 102,15,56,220,217
1278 xor r9d,r11d
1279 DB 066h,090h
1280 DB 102,15,56,220,225
1281 DB 102,15,56,220,233
1282 mov DWORD PTR[((64+12))+rsp],r9d
1283 lea r9,QWORD PTR[5+r8]
1284 DB 102,15,56,220,241
1285 DB 102,15,56,220,249
1286 DB 102,68,15,56,220,193
1287 DB 102,68,15,56,220,201
1288 movups xmm1,XMMWORD PTR[((112-128))+rcx]
1289 bswap r9d
1290 DB 102,15,56,220,208
1291 DB 102,15,56,220,216
1292 xor r9d,r11d
1293 DB 066h,090h
1294 DB 102,15,56,220,224
1295 DB 102,15,56,220,232
1296 mov DWORD PTR[((80+12))+rsp],r9d
1297 lea r9,QWORD PTR[6+r8]
1298 DB 102,15,56,220,240
1299 DB 102,15,56,220,248
1300 DB 102,68,15,56,220,192
1301 DB 102,68,15,56,220,200
1302 movups xmm0,XMMWORD PTR[((128-128))+rcx]
1303 bswap r9d
1304 DB 102,15,56,220,209
1305 DB 102,15,56,220,217
1306 xor r9d,r11d
1307 DB 066h,090h
1308 DB 102,15,56,220,225
1309 DB 102,15,56,220,233
1310 mov DWORD PTR[((96+12))+rsp],r9d
1311 lea r9,QWORD PTR[7+r8]
1312 DB 102,15,56,220,241
1313 DB 102,15,56,220,249
1314 DB 102,68,15,56,220,193
1315 DB 102,68,15,56,220,201
1316 movups xmm1,XMMWORD PTR[((144-128))+rcx]
1317 bswap r9d
1318 DB 102,15,56,220,208
1319 DB 102,15,56,220,216
1320 DB 102,15,56,220,224
1321 xor r9d,r11d
1322 movdqu xmm10,XMMWORD PTR[rdi]
1323 DB 102,15,56,220,232
1324 mov DWORD PTR[((112+12))+rsp],r9d
1325 cmp eax,11
1326 DB 102,15,56,220,240
1327 DB 102,15,56,220,248
1328 DB 102,68,15,56,220,192
1329 DB 102,68,15,56,220,200
1330 movups xmm0,XMMWORD PTR[((160-128))+rcx]
1331
1332 jb $L$ctr32_enc_done
1333
1334 DB 102,15,56,220,209
1335 DB 102,15,56,220,217
1336 DB 102,15,56,220,225
1337 DB 102,15,56,220,233
1338 DB 102,15,56,220,241
1339 DB 102,15,56,220,249
1340 DB 102,68,15,56,220,193
1341 DB 102,68,15,56,220,201
1342 movups xmm1,XMMWORD PTR[((176-128))+rcx]
1343
1344 DB 102,15,56,220,208
1345 DB 102,15,56,220,216
1346 DB 102,15,56,220,224
1347 DB 102,15,56,220,232
1348 DB 102,15,56,220,240
1349 DB 102,15,56,220,248
1350 DB 102,68,15,56,220,192
1351 DB 102,68,15,56,220,200
1352 movups xmm0,XMMWORD PTR[((192-128))+rcx]
1353 je $L$ctr32_enc_done
1354
1355 DB 102,15,56,220,209
1356 DB 102,15,56,220,217
1357 DB 102,15,56,220,225
1358 DB 102,15,56,220,233
1359 DB 102,15,56,220,241
1360 DB 102,15,56,220,249
1361 DB 102,68,15,56,220,193
1362 DB 102,68,15,56,220,201
1363 movups xmm1,XMMWORD PTR[((208-128))+rcx]
1364
1365 DB 102,15,56,220,208
1366 DB 102,15,56,220,216
1367 DB 102,15,56,220,224
1368 DB 102,15,56,220,232
1369 DB 102,15,56,220,240
1370 DB 102,15,56,220,248
1371 DB 102,68,15,56,220,192
1372 DB 102,68,15,56,220,200
1373 movups xmm0,XMMWORD PTR[((224-128))+rcx]
1374 jmp $L$ctr32_enc_done
1375
1376 ALIGN 16
1377 $L$ctr32_enc_done::
1378 movdqu xmm11,XMMWORD PTR[16+rdi]
1379 pxor xmm10,xmm0
1380 movdqu xmm12,XMMWORD PTR[32+rdi]
1381 pxor xmm11,xmm0
1382 movdqu xmm13,XMMWORD PTR[48+rdi]
1383 pxor xmm12,xmm0
1384 movdqu xmm14,XMMWORD PTR[64+rdi]
1385 pxor xmm13,xmm0
1386 movdqu xmm15,XMMWORD PTR[80+rdi]
1387 pxor xmm14,xmm0
1388 pxor xmm15,xmm0
1389 DB 102,15,56,220,209
1390 DB 102,15,56,220,217
1391 DB 102,15,56,220,225
1392 DB 102,15,56,220,233
1393 DB 102,15,56,220,241
1394 DB 102,15,56,220,249
1395 DB 102,68,15,56,220,193
1396 DB 102,68,15,56,220,201
1397 movdqu xmm1,XMMWORD PTR[96+rdi]
1398 lea rdi,QWORD PTR[128+rdi]
1399
1400 DB 102,65,15,56,221,210
1401 pxor xmm1,xmm0
1402 movdqu xmm10,XMMWORD PTR[((112-128))+rdi]
1403 DB 102,65,15,56,221,219
1404 pxor xmm10,xmm0
1405 movdqa xmm11,XMMWORD PTR[rsp]
1406 DB 102,65,15,56,221,228
1407 DB 102,65,15,56,221,237
1408 movdqa xmm12,XMMWORD PTR[16+rsp]
1409 movdqa xmm13,XMMWORD PTR[32+rsp]
1410 DB 102,65,15,56,221,246
1411 DB 102,65,15,56,221,255
1412 movdqa xmm14,XMMWORD PTR[48+rsp]
1413 movdqa xmm15,XMMWORD PTR[64+rsp]
1414 DB 102,68,15,56,221,193
1415 movdqa xmm0,XMMWORD PTR[80+rsp]
1416 movups xmm1,XMMWORD PTR[((16-128))+rcx]
1417 DB 102,69,15,56,221,202
1418
1419 movups XMMWORD PTR[rsi],xmm2
1420 movdqa xmm2,xmm11
1421 movups XMMWORD PTR[16+rsi],xmm3
1422 movdqa xmm3,xmm12
1423 movups XMMWORD PTR[32+rsi],xmm4
1424 movdqa xmm4,xmm13
1425 movups XMMWORD PTR[48+rsi],xmm5
1426 movdqa xmm5,xmm14
1427 movups XMMWORD PTR[64+rsi],xmm6
1428 movdqa xmm6,xmm15
1429 movups XMMWORD PTR[80+rsi],xmm7
1430 movdqa xmm7,xmm0
1431 movups XMMWORD PTR[96+rsi],xmm8
1432 movups XMMWORD PTR[112+rsi],xmm9
1433 lea rsi,QWORD PTR[128+rsi]
1434
1435 sub rdx,8
1436 jnc $L$ctr32_loop8
1437
1438 add rdx,8
1439 jz $L$ctr32_done
1440 lea rcx,QWORD PTR[((-128))+rcx]
1441
1442 $L$ctr32_tail::
1443 lea rcx,QWORD PTR[16+rcx]
1444 cmp rdx,4
1445 jb $L$ctr32_loop3
1446 je $L$ctr32_loop4
1447
1448 shl eax,4
1449 movdqa xmm8,XMMWORD PTR[96+rsp]
1450 pxor xmm9,xmm9
1451
1452 movups xmm0,XMMWORD PTR[16+rcx]
1453 DB 102,15,56,220,209
1454 DB 102,15,56,220,217
1455 lea rcx,QWORD PTR[((32-16))+rax*1+rcx]
1456 neg rax
1457 DB 102,15,56,220,225
1458 add rax,16
1459 movups xmm10,XMMWORD PTR[rdi]
1460 DB 102,15,56,220,233
1461 DB 102,15,56,220,241
1462 movups xmm11,XMMWORD PTR[16+rdi]
1463 movups xmm12,XMMWORD PTR[32+rdi]
1464 DB 102,15,56,220,249
1465 DB 102,68,15,56,220,193
1466
1467 call $L$enc_loop8_enter
1468
1469 movdqu xmm13,XMMWORD PTR[48+rdi]
1470 pxor xmm2,xmm10
1471 movdqu xmm10,XMMWORD PTR[64+rdi]
1472 pxor xmm3,xmm11
1473 movdqu XMMWORD PTR[rsi],xmm2
1474 pxor xmm4,xmm12
1475 movdqu XMMWORD PTR[16+rsi],xmm3
1476 pxor xmm5,xmm13
1477 movdqu XMMWORD PTR[32+rsi],xmm4
1478 pxor xmm6,xmm10
1479 movdqu XMMWORD PTR[48+rsi],xmm5
1480 movdqu XMMWORD PTR[64+rsi],xmm6
1481 cmp rdx,6
1482 jb $L$ctr32_done
1483
1484 movups xmm11,XMMWORD PTR[80+rdi]
1485 xorps xmm7,xmm11
1486 movups XMMWORD PTR[80+rsi],xmm7
1487 je $L$ctr32_done
1488
1489 movups xmm12,XMMWORD PTR[96+rdi]
1490 xorps xmm8,xmm12
1491 movups XMMWORD PTR[96+rsi],xmm8
1492 jmp $L$ctr32_done
1493
1494 ALIGN 32
1495 $L$ctr32_loop4::
1496 DB 102,15,56,220,209
1497 lea rcx,QWORD PTR[16+rcx]
1498 dec eax
1499 DB 102,15,56,220,217
1500 DB 102,15,56,220,225
1501 DB 102,15,56,220,233
1502 movups xmm1,XMMWORD PTR[rcx]
1503 jnz $L$ctr32_loop4
1504 DB 102,15,56,221,209
1505 DB 102,15,56,221,217
1506 movups xmm10,XMMWORD PTR[rdi]
1507 movups xmm11,XMMWORD PTR[16+rdi]
1508 DB 102,15,56,221,225
1509 DB 102,15,56,221,233
1510 movups xmm12,XMMWORD PTR[32+rdi]
1511 movups xmm13,XMMWORD PTR[48+rdi]
1512
1513 xorps xmm2,xmm10
1514 movups XMMWORD PTR[rsi],xmm2
1515 xorps xmm3,xmm11
1516 movups XMMWORD PTR[16+rsi],xmm3
1517 pxor xmm4,xmm12
1518 movdqu XMMWORD PTR[32+rsi],xmm4
1519 pxor xmm5,xmm13
1520 movdqu XMMWORD PTR[48+rsi],xmm5
1521 jmp $L$ctr32_done
1522
1523 ALIGN 32
1524 $L$ctr32_loop3::
1525 DB 102,15,56,220,209
1526 lea rcx,QWORD PTR[16+rcx]
1527 dec eax
1528 DB 102,15,56,220,217
1529 DB 102,15,56,220,225
1530 movups xmm1,XMMWORD PTR[rcx]
1531 jnz $L$ctr32_loop3
1532 DB 102,15,56,221,209
1533 DB 102,15,56,221,217
1534 DB 102,15,56,221,225
1535
1536 movups xmm10,XMMWORD PTR[rdi]
1537 xorps xmm2,xmm10
1538 movups XMMWORD PTR[rsi],xmm2
1539 cmp rdx,2
1540 jb $L$ctr32_done
1541
1542 movups xmm11,XMMWORD PTR[16+rdi]
1543 xorps xmm3,xmm11
1544 movups XMMWORD PTR[16+rsi],xmm3
1545 je $L$ctr32_done
1546
1547 movups xmm12,XMMWORD PTR[32+rdi]
1548 xorps xmm4,xmm12
1549 movups XMMWORD PTR[32+rsi],xmm4
1550 jmp $L$ctr32_done
1551
1552 ALIGN 16
1553 $L$ctr32_one_shortcut::
1554 movups xmm2,XMMWORD PTR[r8]
1555 movups xmm10,XMMWORD PTR[rdi]
1556 mov eax,DWORD PTR[240+rcx]
1557 movups xmm0,XMMWORD PTR[rcx]
1558 movups xmm1,XMMWORD PTR[16+rcx]
1559 lea rcx,QWORD PTR[32+rcx]
1560 xorps xmm2,xmm0
1561 $L$oop_enc1_7::
1562 DB 102,15,56,220,209
1563 dec eax
1564 movups xmm1,XMMWORD PTR[rcx]
1565 lea rcx,QWORD PTR[16+rcx]
1566 jnz $L$oop_enc1_7
1567 DB 102,15,56,221,209
1568 xorps xmm2,xmm10
1569 movups XMMWORD PTR[rsi],xmm2
1570 jmp $L$ctr32_done
1571
1572 ALIGN 16
1573 $L$ctr32_done::
1574 movaps xmm6,XMMWORD PTR[((-160))+rbp]
1575 movaps xmm7,XMMWORD PTR[((-144))+rbp]
1576 movaps xmm8,XMMWORD PTR[((-128))+rbp]
1577 movaps xmm9,XMMWORD PTR[((-112))+rbp]
1578 movaps xmm10,XMMWORD PTR[((-96))+rbp]
1579 movaps xmm11,XMMWORD PTR[((-80))+rbp]
1580 movaps xmm12,XMMWORD PTR[((-64))+rbp]
1581 movaps xmm13,XMMWORD PTR[((-48))+rbp]
1582 movaps xmm14,XMMWORD PTR[((-32))+rbp]
1583 movaps xmm15,XMMWORD PTR[((-16))+rbp]
1584 lea rsp,QWORD PTR[rbp]
1585 pop rbp
1586 $L$ctr32_epilogue::
1587 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
1588 mov rsi,QWORD PTR[16+rsp]
1589 DB 0F3h,0C3h ;repret
1590 $L$SEH_end_aesni_ctr32_encrypt_blocks::
1591 aesni_ctr32_encrypt_blocks ENDP
1592 PUBLIC aesni_xts_encrypt
1593
1594 ALIGN 16
1595 aesni_xts_encrypt PROC PUBLIC
1596 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
1597 mov QWORD PTR[16+rsp],rsi
1598 mov rax,rsp
1599 $L$SEH_begin_aesni_xts_encrypt::
1600 mov rdi,rcx
1601 mov rsi,rdx
1602 mov rdx,r8
1603 mov rcx,r9
1604 mov r8,QWORD PTR[40+rsp]
1605 mov r9,QWORD PTR[48+rsp]
1606
1607
1608 lea rax,QWORD PTR[rsp]
1609 push rbp
1610 sub rsp,272
1611 and rsp,-16
1612 movaps XMMWORD PTR[(-168)+rax],xmm6
1613 movaps XMMWORD PTR[(-152)+rax],xmm7
1614 movaps XMMWORD PTR[(-136)+rax],xmm8
1615 movaps XMMWORD PTR[(-120)+rax],xmm9
1616 movaps XMMWORD PTR[(-104)+rax],xmm10
1617 movaps XMMWORD PTR[(-88)+rax],xmm11
1618 movaps XMMWORD PTR[(-72)+rax],xmm12
1619 movaps XMMWORD PTR[(-56)+rax],xmm13
1620 movaps XMMWORD PTR[(-40)+rax],xmm14
1621 movaps XMMWORD PTR[(-24)+rax],xmm15
1622 $L$xts_enc_body::
1623 lea rbp,QWORD PTR[((-8))+rax]
1624 movups xmm2,XMMWORD PTR[r9]
1625 mov eax,DWORD PTR[240+r8]
1626 mov r10d,DWORD PTR[240+rcx]
1627 movups xmm0,XMMWORD PTR[r8]
1628 movups xmm1,XMMWORD PTR[16+r8]
1629 lea r8,QWORD PTR[32+r8]
1630 xorps xmm2,xmm0
1631 $L$oop_enc1_8::
1632 DB 102,15,56,220,209
1633 dec eax
1634 movups xmm1,XMMWORD PTR[r8]
1635 lea r8,QWORD PTR[16+r8]
1636 jnz $L$oop_enc1_8
1637 DB 102,15,56,221,209
1638 movups xmm0,XMMWORD PTR[rcx]
1639 mov r11,rcx
1640 mov eax,r10d
1641 shl r10d,4
1642 mov r9,rdx
1643 and rdx,-16
1644
1645 movups xmm1,XMMWORD PTR[16+r10*1+rcx]
1646
1647 movdqa xmm8,XMMWORD PTR[$L$xts_magic]
1648 movdqa xmm15,xmm2
1649 pshufd xmm9,xmm2,05fh
1650 pxor xmm1,xmm0
1651 movdqa xmm14,xmm9
1652 paddd xmm9,xmm9
1653 movdqa xmm10,xmm15
1654 psrad xmm14,31
1655 paddq xmm15,xmm15
1656 pand xmm14,xmm8
1657 pxor xmm10,xmm0
1658 pxor xmm15,xmm14
1659 movdqa xmm14,xmm9
1660 paddd xmm9,xmm9
1661 movdqa xmm11,xmm15
1662 psrad xmm14,31
1663 paddq xmm15,xmm15
1664 pand xmm14,xmm8
1665 pxor xmm11,xmm0
1666 pxor xmm15,xmm14
1667 movdqa xmm14,xmm9
1668 paddd xmm9,xmm9
1669 movdqa xmm12,xmm15
1670 psrad xmm14,31
1671 paddq xmm15,xmm15
1672 pand xmm14,xmm8
1673 pxor xmm12,xmm0
1674 pxor xmm15,xmm14
1675 movdqa xmm14,xmm9
1676 paddd xmm9,xmm9
1677 movdqa xmm13,xmm15
1678 psrad xmm14,31
1679 paddq xmm15,xmm15
1680 pand xmm14,xmm8
1681 pxor xmm13,xmm0
1682 pxor xmm15,xmm14
1683 movdqa xmm14,xmm15
1684 psrad xmm9,31
1685 paddq xmm15,xmm15
1686 pand xmm9,xmm8
1687 pxor xmm14,xmm0
1688 pxor xmm15,xmm9
1689 movaps XMMWORD PTR[96+rsp],xmm1
1690
1691 sub rdx,16*6
1692 jc $L$xts_enc_short
1693
1694 mov eax,16+96
1695 lea rcx,QWORD PTR[32+r10*1+r11]
1696 sub rax,r10
1697 movups xmm1,XMMWORD PTR[16+r11]
1698 mov r10,rax
1699 lea r8,QWORD PTR[$L$xts_magic]
1700 jmp $L$xts_enc_grandloop
1701
1702 ALIGN 32
1703 $L$xts_enc_grandloop::
1704 movdqu xmm2,XMMWORD PTR[rdi]
1705 movdqa xmm8,xmm0
1706 movdqu xmm3,XMMWORD PTR[16+rdi]
1707 pxor xmm2,xmm10
1708 movdqu xmm4,XMMWORD PTR[32+rdi]
1709 pxor xmm3,xmm11
1710 DB 102,15,56,220,209
1711 movdqu xmm5,XMMWORD PTR[48+rdi]
1712 pxor xmm4,xmm12
1713 DB 102,15,56,220,217
1714 movdqu xmm6,XMMWORD PTR[64+rdi]
1715 pxor xmm5,xmm13
1716 DB 102,15,56,220,225
1717 movdqu xmm7,XMMWORD PTR[80+rdi]
1718 pxor xmm8,xmm15
1719 movdqa xmm9,XMMWORD PTR[96+rsp]
1720 pxor xmm6,xmm14
1721 DB 102,15,56,220,233
1722 movups xmm0,XMMWORD PTR[32+r11]
1723 lea rdi,QWORD PTR[96+rdi]
1724 pxor xmm7,xmm8
1725
1726 pxor xmm10,xmm9
1727 DB 102,15,56,220,241
1728 pxor xmm11,xmm9
1729 movdqa XMMWORD PTR[rsp],xmm10
1730 DB 102,15,56,220,249
1731 movups xmm1,XMMWORD PTR[48+r11]
1732 pxor xmm12,xmm9
1733
1734 DB 102,15,56,220,208
1735 pxor xmm13,xmm9
1736 movdqa XMMWORD PTR[16+rsp],xmm11
1737 DB 102,15,56,220,216
1738 pxor xmm14,xmm9
1739 movdqa XMMWORD PTR[32+rsp],xmm12
1740 DB 102,15,56,220,224
1741 DB 102,15,56,220,232
1742 pxor xmm8,xmm9
1743 movdqa XMMWORD PTR[64+rsp],xmm14
1744 DB 102,15,56,220,240
1745 DB 102,15,56,220,248
1746 movups xmm0,XMMWORD PTR[64+r11]
1747 movdqa XMMWORD PTR[80+rsp],xmm8
1748 pshufd xmm9,xmm15,05fh
1749 jmp $L$xts_enc_loop6
1750 ALIGN 32
1751 $L$xts_enc_loop6::
1752 DB 102,15,56,220,209
1753 DB 102,15,56,220,217
1754 DB 102,15,56,220,225
1755 DB 102,15,56,220,233
1756 DB 102,15,56,220,241
1757 DB 102,15,56,220,249
1758 movups xmm1,XMMWORD PTR[((-64))+rax*1+rcx]
1759 add rax,32
1760
1761 DB 102,15,56,220,208
1762 DB 102,15,56,220,216
1763 DB 102,15,56,220,224
1764 DB 102,15,56,220,232
1765 DB 102,15,56,220,240
1766 DB 102,15,56,220,248
1767 movups xmm0,XMMWORD PTR[((-80))+rax*1+rcx]
1768 jnz $L$xts_enc_loop6
1769
1770 movdqa xmm8,XMMWORD PTR[r8]
1771 movdqa xmm14,xmm9
1772 paddd xmm9,xmm9
1773 DB 102,15,56,220,209
1774 paddq xmm15,xmm15
1775 psrad xmm14,31
1776 DB 102,15,56,220,217
1777 pand xmm14,xmm8
1778 movups xmm10,XMMWORD PTR[r11]
1779 DB 102,15,56,220,225
1780 DB 102,15,56,220,233
1781 DB 102,15,56,220,241
1782 pxor xmm15,xmm14
1783 movaps xmm11,xmm10
1784 DB 102,15,56,220,249
1785 movups xmm1,XMMWORD PTR[((-64))+rcx]
1786
1787 movdqa xmm14,xmm9
1788 DB 102,15,56,220,208
1789 paddd xmm9,xmm9
1790 pxor xmm10,xmm15
1791 DB 102,15,56,220,216
1792 psrad xmm14,31
1793 paddq xmm15,xmm15
1794 DB 102,15,56,220,224
1795 DB 102,15,56,220,232
1796 pand xmm14,xmm8
1797 movaps xmm12,xmm11
1798 DB 102,15,56,220,240
1799 pxor xmm15,xmm14
1800 movdqa xmm14,xmm9
1801 DB 102,15,56,220,248
1802 movups xmm0,XMMWORD PTR[((-48))+rcx]
1803
1804 paddd xmm9,xmm9
1805 DB 102,15,56,220,209
1806 pxor xmm11,xmm15
1807 psrad xmm14,31
1808 DB 102,15,56,220,217
1809 paddq xmm15,xmm15
1810 pand xmm14,xmm8
1811 DB 102,15,56,220,225
1812 DB 102,15,56,220,233
1813 movdqa XMMWORD PTR[48+rsp],xmm13
1814 pxor xmm15,xmm14
1815 DB 102,15,56,220,241
1816 movaps xmm13,xmm12
1817 movdqa xmm14,xmm9
1818 DB 102,15,56,220,249
1819 movups xmm1,XMMWORD PTR[((-32))+rcx]
1820
1821 paddd xmm9,xmm9
1822 DB 102,15,56,220,208
1823 pxor xmm12,xmm15
1824 psrad xmm14,31
1825 DB 102,15,56,220,216
1826 paddq xmm15,xmm15
1827 pand xmm14,xmm8
1828 DB 102,15,56,220,224
1829 DB 102,15,56,220,232
1830 DB 102,15,56,220,240
1831 pxor xmm15,xmm14
1832 movaps xmm14,xmm13
1833 DB 102,15,56,220,248
1834
1835 movdqa xmm0,xmm9
1836 paddd xmm9,xmm9
1837 DB 102,15,56,220,209
1838 pxor xmm13,xmm15
1839 psrad xmm0,31
1840 DB 102,15,56,220,217
1841 paddq xmm15,xmm15
1842 pand xmm0,xmm8
1843 DB 102,15,56,220,225
1844 DB 102,15,56,220,233
1845 pxor xmm15,xmm0
1846 movups xmm0,XMMWORD PTR[r11]
1847 DB 102,15,56,220,241
1848 DB 102,15,56,220,249
1849 movups xmm1,XMMWORD PTR[16+r11]
1850
1851 pxor xmm14,xmm15
1852 DB 102,15,56,221,84,36,0
1853 psrad xmm9,31
1854 paddq xmm15,xmm15
1855 DB 102,15,56,221,92,36,16
1856 DB 102,15,56,221,100,36,32
1857 pand xmm9,xmm8
1858 mov rax,r10
1859 DB 102,15,56,221,108,36,48
1860 DB 102,15,56,221,116,36,64
1861 DB 102,15,56,221,124,36,80
1862 pxor xmm15,xmm9
1863
1864 lea rsi,QWORD PTR[96+rsi]
1865 movups XMMWORD PTR[(-96)+rsi],xmm2
1866 movups XMMWORD PTR[(-80)+rsi],xmm3
1867 movups XMMWORD PTR[(-64)+rsi],xmm4
1868 movups XMMWORD PTR[(-48)+rsi],xmm5
1869 movups XMMWORD PTR[(-32)+rsi],xmm6
1870 movups XMMWORD PTR[(-16)+rsi],xmm7
1871 sub rdx,16*6
1872 jnc $L$xts_enc_grandloop
1873
1874 mov eax,16+96
1875 sub eax,r10d
1876 mov rcx,r11
1877 shr eax,4
1878
1879 $L$xts_enc_short::
1880 mov r10d,eax
1881 pxor xmm10,xmm0
1882 add rdx,16*6
1883 jz $L$xts_enc_done
1884
1885 pxor xmm11,xmm0
1886 cmp rdx,020h
1887 jb $L$xts_enc_one
1888 pxor xmm12,xmm0
1889 je $L$xts_enc_two
1890
1891 pxor xmm13,xmm0
1892 cmp rdx,040h
1893 jb $L$xts_enc_three
1894 pxor xmm14,xmm0
1895 je $L$xts_enc_four
1896
1897 movdqu xmm2,XMMWORD PTR[rdi]
1898 movdqu xmm3,XMMWORD PTR[16+rdi]
1899 movdqu xmm4,XMMWORD PTR[32+rdi]
1900 pxor xmm2,xmm10
1901 movdqu xmm5,XMMWORD PTR[48+rdi]
1902 pxor xmm3,xmm11
1903 movdqu xmm6,XMMWORD PTR[64+rdi]
1904 lea rdi,QWORD PTR[80+rdi]
1905 pxor xmm4,xmm12
1906 pxor xmm5,xmm13
1907 pxor xmm6,xmm14
1908
1909 call _aesni_encrypt6
1910
1911 xorps xmm2,xmm10
1912 movdqa xmm10,xmm15
1913 xorps xmm3,xmm11
1914 xorps xmm4,xmm12
1915 movdqu XMMWORD PTR[rsi],xmm2
1916 xorps xmm5,xmm13
1917 movdqu XMMWORD PTR[16+rsi],xmm3
1918 xorps xmm6,xmm14
1919 movdqu XMMWORD PTR[32+rsi],xmm4
1920 movdqu XMMWORD PTR[48+rsi],xmm5
1921 movdqu XMMWORD PTR[64+rsi],xmm6
1922 lea rsi,QWORD PTR[80+rsi]
1923 jmp $L$xts_enc_done
1924
1925 ALIGN 16
1926 $L$xts_enc_one::
1927 movups xmm2,XMMWORD PTR[rdi]
1928 lea rdi,QWORD PTR[16+rdi]
1929 xorps xmm2,xmm10
1930 movups xmm0,XMMWORD PTR[rcx]
1931 movups xmm1,XMMWORD PTR[16+rcx]
1932 lea rcx,QWORD PTR[32+rcx]
1933 xorps xmm2,xmm0
1934 $L$oop_enc1_9::
1935 DB 102,15,56,220,209
1936 dec eax
1937 movups xmm1,XMMWORD PTR[rcx]
1938 lea rcx,QWORD PTR[16+rcx]
1939 jnz $L$oop_enc1_9
1940 DB 102,15,56,221,209
1941 xorps xmm2,xmm10
1942 movdqa xmm10,xmm11
1943 movups XMMWORD PTR[rsi],xmm2
1944 lea rsi,QWORD PTR[16+rsi]
1945 jmp $L$xts_enc_done
1946
1947 ALIGN 16
1948 $L$xts_enc_two::
1949 movups xmm2,XMMWORD PTR[rdi]
1950 movups xmm3,XMMWORD PTR[16+rdi]
1951 lea rdi,QWORD PTR[32+rdi]
1952 xorps xmm2,xmm10
1953 xorps xmm3,xmm11
1954
1955 call _aesni_encrypt2
1956
1957 xorps xmm2,xmm10
1958 movdqa xmm10,xmm12
1959 xorps xmm3,xmm11
1960 movups XMMWORD PTR[rsi],xmm2
1961 movups XMMWORD PTR[16+rsi],xmm3
1962 lea rsi,QWORD PTR[32+rsi]
1963 jmp $L$xts_enc_done
1964
1965 ALIGN 16
1966 $L$xts_enc_three::
1967 movups xmm2,XMMWORD PTR[rdi]
1968 movups xmm3,XMMWORD PTR[16+rdi]
1969 movups xmm4,XMMWORD PTR[32+rdi]
1970 lea rdi,QWORD PTR[48+rdi]
1971 xorps xmm2,xmm10
1972 xorps xmm3,xmm11
1973 xorps xmm4,xmm12
1974
1975 call _aesni_encrypt3
1976
1977 xorps xmm2,xmm10
1978 movdqa xmm10,xmm13
1979 xorps xmm3,xmm11
1980 xorps xmm4,xmm12
1981 movups XMMWORD PTR[rsi],xmm2
1982 movups XMMWORD PTR[16+rsi],xmm3
1983 movups XMMWORD PTR[32+rsi],xmm4
1984 lea rsi,QWORD PTR[48+rsi]
1985 jmp $L$xts_enc_done
1986
1987 ALIGN 16
1988 $L$xts_enc_four::
1989 movups xmm2,XMMWORD PTR[rdi]
1990 movups xmm3,XMMWORD PTR[16+rdi]
1991 movups xmm4,XMMWORD PTR[32+rdi]
1992 xorps xmm2,xmm10
1993 movups xmm5,XMMWORD PTR[48+rdi]
1994 lea rdi,QWORD PTR[64+rdi]
1995 xorps xmm3,xmm11
1996 xorps xmm4,xmm12
1997 xorps xmm5,xmm13
1998
1999 call _aesni_encrypt4
2000
2001 pxor xmm2,xmm10
2002 movdqa xmm10,xmm14
2003 pxor xmm3,xmm11
2004 pxor xmm4,xmm12
2005 movdqu XMMWORD PTR[rsi],xmm2
2006 pxor xmm5,xmm13
2007 movdqu XMMWORD PTR[16+rsi],xmm3
2008 movdqu XMMWORD PTR[32+rsi],xmm4
2009 movdqu XMMWORD PTR[48+rsi],xmm5
2010 lea rsi,QWORD PTR[64+rsi]
2011 jmp $L$xts_enc_done
2012
2013 ALIGN 16
2014 $L$xts_enc_done::
2015 and r9,15
2016 jz $L$xts_enc_ret
2017 mov rdx,r9
2018
2019 $L$xts_enc_steal::
2020 movzx eax,BYTE PTR[rdi]
2021 movzx ecx,BYTE PTR[((-16))+rsi]
2022 lea rdi,QWORD PTR[1+rdi]
2023 mov BYTE PTR[((-16))+rsi],al
2024 mov BYTE PTR[rsi],cl
2025 lea rsi,QWORD PTR[1+rsi]
2026 sub rdx,1
2027 jnz $L$xts_enc_steal
2028
2029 sub rsi,r9
2030 mov rcx,r11
2031 mov eax,r10d
2032
2033 movups xmm2,XMMWORD PTR[((-16))+rsi]
2034 xorps xmm2,xmm10
2035 movups xmm0,XMMWORD PTR[rcx]
2036 movups xmm1,XMMWORD PTR[16+rcx]
2037 lea rcx,QWORD PTR[32+rcx]
2038 xorps xmm2,xmm0
2039 $L$oop_enc1_10::
2040 DB 102,15,56,220,209
2041 dec eax
2042 movups xmm1,XMMWORD PTR[rcx]
2043 lea rcx,QWORD PTR[16+rcx]
2044 jnz $L$oop_enc1_10
2045 DB 102,15,56,221,209
2046 xorps xmm2,xmm10
2047 movups XMMWORD PTR[(-16)+rsi],xmm2
2048
2049 $L$xts_enc_ret::
2050 movaps xmm6,XMMWORD PTR[((-160))+rbp]
2051 movaps xmm7,XMMWORD PTR[((-144))+rbp]
2052 movaps xmm8,XMMWORD PTR[((-128))+rbp]
2053 movaps xmm9,XMMWORD PTR[((-112))+rbp]
2054 movaps xmm10,XMMWORD PTR[((-96))+rbp]
2055 movaps xmm11,XMMWORD PTR[((-80))+rbp]
2056 movaps xmm12,XMMWORD PTR[((-64))+rbp]
2057 movaps xmm13,XMMWORD PTR[((-48))+rbp]
2058 movaps xmm14,XMMWORD PTR[((-32))+rbp]
2059 movaps xmm15,XMMWORD PTR[((-16))+rbp]
2060 lea rsp,QWORD PTR[rbp]
2061 pop rbp
2062 $L$xts_enc_epilogue::
2063 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
2064 mov rsi,QWORD PTR[16+rsp]
2065 DB 0F3h,0C3h ;repret
2066 $L$SEH_end_aesni_xts_encrypt::
2067 aesni_xts_encrypt ENDP
2068 PUBLIC aesni_xts_decrypt
2069
2070 ALIGN 16
2071 aesni_xts_decrypt PROC PUBLIC
2072 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
2073 mov QWORD PTR[16+rsp],rsi
2074 mov rax,rsp
2075 $L$SEH_begin_aesni_xts_decrypt::
2076 mov rdi,rcx
2077 mov rsi,rdx
2078 mov rdx,r8
2079 mov rcx,r9
2080 mov r8,QWORD PTR[40+rsp]
2081 mov r9,QWORD PTR[48+rsp]
2082
2083
2084 lea rax,QWORD PTR[rsp]
2085 push rbp
2086 sub rsp,272
2087 and rsp,-16
2088 movaps XMMWORD PTR[(-168)+rax],xmm6
2089 movaps XMMWORD PTR[(-152)+rax],xmm7
2090 movaps XMMWORD PTR[(-136)+rax],xmm8
2091 movaps XMMWORD PTR[(-120)+rax],xmm9
2092 movaps XMMWORD PTR[(-104)+rax],xmm10
2093 movaps XMMWORD PTR[(-88)+rax],xmm11
2094 movaps XMMWORD PTR[(-72)+rax],xmm12
2095 movaps XMMWORD PTR[(-56)+rax],xmm13
2096 movaps XMMWORD PTR[(-40)+rax],xmm14
2097 movaps XMMWORD PTR[(-24)+rax],xmm15
2098 $L$xts_dec_body::
2099 lea rbp,QWORD PTR[((-8))+rax]
2100 movups xmm2,XMMWORD PTR[r9]
2101 mov eax,DWORD PTR[240+r8]
2102 mov r10d,DWORD PTR[240+rcx]
2103 movups xmm0,XMMWORD PTR[r8]
2104 movups xmm1,XMMWORD PTR[16+r8]
2105 lea r8,QWORD PTR[32+r8]
2106 xorps xmm2,xmm0
2107 $L$oop_enc1_11::
2108 DB 102,15,56,220,209
2109 dec eax
2110 movups xmm1,XMMWORD PTR[r8]
2111 lea r8,QWORD PTR[16+r8]
2112 jnz $L$oop_enc1_11
2113 DB 102,15,56,221,209
2114 xor eax,eax
2115 test rdx,15
2116 setnz al
2117 shl rax,4
2118 sub rdx,rax
2119
2120 movups xmm0,XMMWORD PTR[rcx]
2121 mov r11,rcx
2122 mov eax,r10d
2123 shl r10d,4
2124 mov r9,rdx
2125 and rdx,-16
2126
2127 movups xmm1,XMMWORD PTR[16+r10*1+rcx]
2128
2129 movdqa xmm8,XMMWORD PTR[$L$xts_magic]
2130 movdqa xmm15,xmm2
2131 pshufd xmm9,xmm2,05fh
2132 pxor xmm1,xmm0
2133 movdqa xmm14,xmm9
2134 paddd xmm9,xmm9
2135 movdqa xmm10,xmm15
2136 psrad xmm14,31
2137 paddq xmm15,xmm15
2138 pand xmm14,xmm8
2139 pxor xmm10,xmm0
2140 pxor xmm15,xmm14
2141 movdqa xmm14,xmm9
2142 paddd xmm9,xmm9
2143 movdqa xmm11,xmm15
2144 psrad xmm14,31
2145 paddq xmm15,xmm15
2146 pand xmm14,xmm8
2147 pxor xmm11,xmm0
2148 pxor xmm15,xmm14
2149 movdqa xmm14,xmm9
2150 paddd xmm9,xmm9
2151 movdqa xmm12,xmm15
2152 psrad xmm14,31
2153 paddq xmm15,xmm15
2154 pand xmm14,xmm8
2155 pxor xmm12,xmm0
2156 pxor xmm15,xmm14
2157 movdqa xmm14,xmm9
2158 paddd xmm9,xmm9
2159 movdqa xmm13,xmm15
2160 psrad xmm14,31
2161 paddq xmm15,xmm15
2162 pand xmm14,xmm8
2163 pxor xmm13,xmm0
2164 pxor xmm15,xmm14
2165 movdqa xmm14,xmm15
2166 psrad xmm9,31
2167 paddq xmm15,xmm15
2168 pand xmm9,xmm8
2169 pxor xmm14,xmm0
2170 pxor xmm15,xmm9
2171 movaps XMMWORD PTR[96+rsp],xmm1
2172
2173 sub rdx,16*6
2174 jc $L$xts_dec_short
2175
2176 mov eax,16+96
2177 lea rcx,QWORD PTR[32+r10*1+r11]
2178 sub rax,r10
2179 movups xmm1,XMMWORD PTR[16+r11]
2180 mov r10,rax
2181 lea r8,QWORD PTR[$L$xts_magic]
2182 jmp $L$xts_dec_grandloop
2183
2184 ALIGN 32
2185 $L$xts_dec_grandloop::
2186 movdqu xmm2,XMMWORD PTR[rdi]
2187 movdqa xmm8,xmm0
2188 movdqu xmm3,XMMWORD PTR[16+rdi]
2189 pxor xmm2,xmm10
2190 movdqu xmm4,XMMWORD PTR[32+rdi]
2191 pxor xmm3,xmm11
2192 DB 102,15,56,222,209
2193 movdqu xmm5,XMMWORD PTR[48+rdi]
2194 pxor xmm4,xmm12
2195 DB 102,15,56,222,217
2196 movdqu xmm6,XMMWORD PTR[64+rdi]
2197 pxor xmm5,xmm13
2198 DB 102,15,56,222,225
2199 movdqu xmm7,XMMWORD PTR[80+rdi]
2200 pxor xmm8,xmm15
2201 movdqa xmm9,XMMWORD PTR[96+rsp]
2202 pxor xmm6,xmm14
2203 DB 102,15,56,222,233
2204 movups xmm0,XMMWORD PTR[32+r11]
2205 lea rdi,QWORD PTR[96+rdi]
2206 pxor xmm7,xmm8
2207
2208 pxor xmm10,xmm9
2209 DB 102,15,56,222,241
2210 pxor xmm11,xmm9
2211 movdqa XMMWORD PTR[rsp],xmm10
2212 DB 102,15,56,222,249
2213 movups xmm1,XMMWORD PTR[48+r11]
2214 pxor xmm12,xmm9
2215
2216 DB 102,15,56,222,208
2217 pxor xmm13,xmm9
2218 movdqa XMMWORD PTR[16+rsp],xmm11
2219 DB 102,15,56,222,216
2220 pxor xmm14,xmm9
2221 movdqa XMMWORD PTR[32+rsp],xmm12
2222 DB 102,15,56,222,224
2223 DB 102,15,56,222,232
2224 pxor xmm8,xmm9
2225 movdqa XMMWORD PTR[64+rsp],xmm14
2226 DB 102,15,56,222,240
2227 DB 102,15,56,222,248
2228 movups xmm0,XMMWORD PTR[64+r11]
2229 movdqa XMMWORD PTR[80+rsp],xmm8
2230 pshufd xmm9,xmm15,05fh
2231 jmp $L$xts_dec_loop6
2232 ALIGN 32
2233 $L$xts_dec_loop6::
2234 DB 102,15,56,222,209
2235 DB 102,15,56,222,217
2236 DB 102,15,56,222,225
2237 DB 102,15,56,222,233
2238 DB 102,15,56,222,241
2239 DB 102,15,56,222,249
2240 movups xmm1,XMMWORD PTR[((-64))+rax*1+rcx]
2241 add rax,32
2242
2243 DB 102,15,56,222,208
2244 DB 102,15,56,222,216
2245 DB 102,15,56,222,224
2246 DB 102,15,56,222,232
2247 DB 102,15,56,222,240
2248 DB 102,15,56,222,248
2249 movups xmm0,XMMWORD PTR[((-80))+rax*1+rcx]
2250 jnz $L$xts_dec_loop6
2251
2252 movdqa xmm8,XMMWORD PTR[r8]
2253 movdqa xmm14,xmm9
2254 paddd xmm9,xmm9
2255 DB 102,15,56,222,209
2256 paddq xmm15,xmm15
2257 psrad xmm14,31
2258 DB 102,15,56,222,217
2259 pand xmm14,xmm8
2260 movups xmm10,XMMWORD PTR[r11]
2261 DB 102,15,56,222,225
2262 DB 102,15,56,222,233
2263 DB 102,15,56,222,241
2264 pxor xmm15,xmm14
2265 movaps xmm11,xmm10
2266 DB 102,15,56,222,249
2267 movups xmm1,XMMWORD PTR[((-64))+rcx]
2268
2269 movdqa xmm14,xmm9
2270 DB 102,15,56,222,208
2271 paddd xmm9,xmm9
2272 pxor xmm10,xmm15
2273 DB 102,15,56,222,216
2274 psrad xmm14,31
2275 paddq xmm15,xmm15
2276 DB 102,15,56,222,224
2277 DB 102,15,56,222,232
2278 pand xmm14,xmm8
2279 movaps xmm12,xmm11
2280 DB 102,15,56,222,240
2281 pxor xmm15,xmm14
2282 movdqa xmm14,xmm9
2283 DB 102,15,56,222,248
2284 movups xmm0,XMMWORD PTR[((-48))+rcx]
2285
2286 paddd xmm9,xmm9
2287 DB 102,15,56,222,209
2288 pxor xmm11,xmm15
2289 psrad xmm14,31
2290 DB 102,15,56,222,217
2291 paddq xmm15,xmm15
2292 pand xmm14,xmm8
2293 DB 102,15,56,222,225
2294 DB 102,15,56,222,233
2295 movdqa XMMWORD PTR[48+rsp],xmm13
2296 pxor xmm15,xmm14
2297 DB 102,15,56,222,241
2298 movaps xmm13,xmm12
2299 movdqa xmm14,xmm9
2300 DB 102,15,56,222,249
2301 movups xmm1,XMMWORD PTR[((-32))+rcx]
2302
2303 paddd xmm9,xmm9
2304 DB 102,15,56,222,208
2305 pxor xmm12,xmm15
2306 psrad xmm14,31
2307 DB 102,15,56,222,216
2308 paddq xmm15,xmm15
2309 pand xmm14,xmm8
2310 DB 102,15,56,222,224
2311 DB 102,15,56,222,232
2312 DB 102,15,56,222,240
2313 pxor xmm15,xmm14
2314 movaps xmm14,xmm13
2315 DB 102,15,56,222,248
2316
2317 movdqa xmm0,xmm9
2318 paddd xmm9,xmm9
2319 DB 102,15,56,222,209
2320 pxor xmm13,xmm15
2321 psrad xmm0,31
2322 DB 102,15,56,222,217
2323 paddq xmm15,xmm15
2324 pand xmm0,xmm8
2325 DB 102,15,56,222,225
2326 DB 102,15,56,222,233
2327 pxor xmm15,xmm0
2328 movups xmm0,XMMWORD PTR[r11]
2329 DB 102,15,56,222,241
2330 DB 102,15,56,222,249
2331 movups xmm1,XMMWORD PTR[16+r11]
2332
2333 pxor xmm14,xmm15
2334 DB 102,15,56,223,84,36,0
2335 psrad xmm9,31
2336 paddq xmm15,xmm15
2337 DB 102,15,56,223,92,36,16
2338 DB 102,15,56,223,100,36,32
2339 pand xmm9,xmm8
2340 mov rax,r10
2341 DB 102,15,56,223,108,36,48
2342 DB 102,15,56,223,116,36,64
2343 DB 102,15,56,223,124,36,80
2344 pxor xmm15,xmm9
2345
2346 lea rsi,QWORD PTR[96+rsi]
2347 movups XMMWORD PTR[(-96)+rsi],xmm2
2348 movups XMMWORD PTR[(-80)+rsi],xmm3
2349 movups XMMWORD PTR[(-64)+rsi],xmm4
2350 movups XMMWORD PTR[(-48)+rsi],xmm5
2351 movups XMMWORD PTR[(-32)+rsi],xmm6
2352 movups XMMWORD PTR[(-16)+rsi],xmm7
2353 sub rdx,16*6
2354 jnc $L$xts_dec_grandloop
2355
2356 mov eax,16+96
2357 sub eax,r10d
2358 mov rcx,r11
2359 shr eax,4
2360
2361 $L$xts_dec_short::
2362 mov r10d,eax
2363 pxor xmm10,xmm0
2364 pxor xmm11,xmm0
2365 add rdx,16*6
2366 jz $L$xts_dec_done
2367
2368 pxor xmm12,xmm0
2369 cmp rdx,020h
2370 jb $L$xts_dec_one
2371 pxor xmm13,xmm0
2372 je $L$xts_dec_two
2373
2374 pxor xmm14,xmm0
2375 cmp rdx,040h
2376 jb $L$xts_dec_three
2377 je $L$xts_dec_four
2378
2379 movdqu xmm2,XMMWORD PTR[rdi]
2380 movdqu xmm3,XMMWORD PTR[16+rdi]
2381 movdqu xmm4,XMMWORD PTR[32+rdi]
2382 pxor xmm2,xmm10
2383 movdqu xmm5,XMMWORD PTR[48+rdi]
2384 pxor xmm3,xmm11
2385 movdqu xmm6,XMMWORD PTR[64+rdi]
2386 lea rdi,QWORD PTR[80+rdi]
2387 pxor xmm4,xmm12
2388 pxor xmm5,xmm13
2389 pxor xmm6,xmm14
2390
2391 call _aesni_decrypt6
2392
2393 xorps xmm2,xmm10
2394 xorps xmm3,xmm11
2395 xorps xmm4,xmm12
2396 movdqu XMMWORD PTR[rsi],xmm2
2397 xorps xmm5,xmm13
2398 movdqu XMMWORD PTR[16+rsi],xmm3
2399 xorps xmm6,xmm14
2400 movdqu XMMWORD PTR[32+rsi],xmm4
2401 pxor xmm14,xmm14
2402 movdqu XMMWORD PTR[48+rsi],xmm5
2403 pcmpgtd xmm14,xmm15
2404 movdqu XMMWORD PTR[64+rsi],xmm6
2405 lea rsi,QWORD PTR[80+rsi]
2406 pshufd xmm11,xmm14,013h
2407 and r9,15
2408 jz $L$xts_dec_ret
2409
2410 movdqa xmm10,xmm15
2411 paddq xmm15,xmm15
2412 pand xmm11,xmm8
2413 pxor xmm11,xmm15
2414 jmp $L$xts_dec_done2
2415
2416 ALIGN 16
2417 $L$xts_dec_one::
2418 movups xmm2,XMMWORD PTR[rdi]
2419 lea rdi,QWORD PTR[16+rdi]
2420 xorps xmm2,xmm10
2421 movups xmm0,XMMWORD PTR[rcx]
2422 movups xmm1,XMMWORD PTR[16+rcx]
2423 lea rcx,QWORD PTR[32+rcx]
2424 xorps xmm2,xmm0
2425 $L$oop_dec1_12::
2426 DB 102,15,56,222,209
2427 dec eax
2428 movups xmm1,XMMWORD PTR[rcx]
2429 lea rcx,QWORD PTR[16+rcx]
2430 jnz $L$oop_dec1_12
2431 DB 102,15,56,223,209
2432 xorps xmm2,xmm10
2433 movdqa xmm10,xmm11
2434 movups XMMWORD PTR[rsi],xmm2
2435 movdqa xmm11,xmm12
2436 lea rsi,QWORD PTR[16+rsi]
2437 jmp $L$xts_dec_done
2438
2439 ALIGN 16
2440 $L$xts_dec_two::
2441 movups xmm2,XMMWORD PTR[rdi]
2442 movups xmm3,XMMWORD PTR[16+rdi]
2443 lea rdi,QWORD PTR[32+rdi]
2444 xorps xmm2,xmm10
2445 xorps xmm3,xmm11
2446
2447 call _aesni_decrypt2
2448
2449 xorps xmm2,xmm10
2450 movdqa xmm10,xmm12
2451 xorps xmm3,xmm11
2452 movdqa xmm11,xmm13
2453 movups XMMWORD PTR[rsi],xmm2
2454 movups XMMWORD PTR[16+rsi],xmm3
2455 lea rsi,QWORD PTR[32+rsi]
2456 jmp $L$xts_dec_done
2457
2458 ALIGN 16
2459 $L$xts_dec_three::
2460 movups xmm2,XMMWORD PTR[rdi]
2461 movups xmm3,XMMWORD PTR[16+rdi]
2462 movups xmm4,XMMWORD PTR[32+rdi]
2463 lea rdi,QWORD PTR[48+rdi]
2464 xorps xmm2,xmm10
2465 xorps xmm3,xmm11
2466 xorps xmm4,xmm12
2467
2468 call _aesni_decrypt3
2469
2470 xorps xmm2,xmm10
2471 movdqa xmm10,xmm13
2472 xorps xmm3,xmm11
2473 movdqa xmm11,xmm14
2474 xorps xmm4,xmm12
2475 movups XMMWORD PTR[rsi],xmm2
2476 movups XMMWORD PTR[16+rsi],xmm3
2477 movups XMMWORD PTR[32+rsi],xmm4
2478 lea rsi,QWORD PTR[48+rsi]
2479 jmp $L$xts_dec_done
2480
2481 ALIGN 16
2482 $L$xts_dec_four::
2483 movups xmm2,XMMWORD PTR[rdi]
2484 movups xmm3,XMMWORD PTR[16+rdi]
2485 movups xmm4,XMMWORD PTR[32+rdi]
2486 xorps xmm2,xmm10
2487 movups xmm5,XMMWORD PTR[48+rdi]
2488 lea rdi,QWORD PTR[64+rdi]
2489 xorps xmm3,xmm11
2490 xorps xmm4,xmm12
2491 xorps xmm5,xmm13
2492
2493 call _aesni_decrypt4
2494
2495 pxor xmm2,xmm10
2496 movdqa xmm10,xmm14
2497 pxor xmm3,xmm11
2498 movdqa xmm11,xmm15
2499 pxor xmm4,xmm12
2500 movdqu XMMWORD PTR[rsi],xmm2
2501 pxor xmm5,xmm13
2502 movdqu XMMWORD PTR[16+rsi],xmm3
2503 movdqu XMMWORD PTR[32+rsi],xmm4
2504 movdqu XMMWORD PTR[48+rsi],xmm5
2505 lea rsi,QWORD PTR[64+rsi]
2506 jmp $L$xts_dec_done
2507
2508 ALIGN 16
2509 $L$xts_dec_done::
2510 and r9,15
2511 jz $L$xts_dec_ret
2512 $L$xts_dec_done2::
2513 mov rdx,r9
2514 mov rcx,r11
2515 mov eax,r10d
2516
2517 movups xmm2,XMMWORD PTR[rdi]
2518 xorps xmm2,xmm11
2519 movups xmm0,XMMWORD PTR[rcx]
2520 movups xmm1,XMMWORD PTR[16+rcx]
2521 lea rcx,QWORD PTR[32+rcx]
2522 xorps xmm2,xmm0
2523 $L$oop_dec1_13::
2524 DB 102,15,56,222,209
2525 dec eax
2526 movups xmm1,XMMWORD PTR[rcx]
2527 lea rcx,QWORD PTR[16+rcx]
2528 jnz $L$oop_dec1_13
2529 DB 102,15,56,223,209
2530 xorps xmm2,xmm11
2531 movups XMMWORD PTR[rsi],xmm2
2532
2533 $L$xts_dec_steal::
2534 movzx eax,BYTE PTR[16+rdi]
2535 movzx ecx,BYTE PTR[rsi]
2536 lea rdi,QWORD PTR[1+rdi]
2537 mov BYTE PTR[rsi],al
2538 mov BYTE PTR[16+rsi],cl
2539 lea rsi,QWORD PTR[1+rsi]
2540 sub rdx,1
2541 jnz $L$xts_dec_steal
2542
2543 sub rsi,r9
2544 mov rcx,r11
2545 mov eax,r10d
2546
2547 movups xmm2,XMMWORD PTR[rsi]
2548 xorps xmm2,xmm10
2549 movups xmm0,XMMWORD PTR[rcx]
2550 movups xmm1,XMMWORD PTR[16+rcx]
2551 lea rcx,QWORD PTR[32+rcx]
2552 xorps xmm2,xmm0
2553 $L$oop_dec1_14::
2554 DB 102,15,56,222,209
2555 dec eax
2556 movups xmm1,XMMWORD PTR[rcx]
2557 lea rcx,QWORD PTR[16+rcx]
2558 jnz $L$oop_dec1_14
2559 DB 102,15,56,223,209
2560 xorps xmm2,xmm10
2561 movups XMMWORD PTR[rsi],xmm2
2562
2563 $L$xts_dec_ret::
2564 movaps xmm6,XMMWORD PTR[((-160))+rbp]
2565 movaps xmm7,XMMWORD PTR[((-144))+rbp]
2566 movaps xmm8,XMMWORD PTR[((-128))+rbp]
2567 movaps xmm9,XMMWORD PTR[((-112))+rbp]
2568 movaps xmm10,XMMWORD PTR[((-96))+rbp]
2569 movaps xmm11,XMMWORD PTR[((-80))+rbp]
2570 movaps xmm12,XMMWORD PTR[((-64))+rbp]
2571 movaps xmm13,XMMWORD PTR[((-48))+rbp]
2572 movaps xmm14,XMMWORD PTR[((-32))+rbp]
2573 movaps xmm15,XMMWORD PTR[((-16))+rbp]
2574 lea rsp,QWORD PTR[rbp]
2575 pop rbp
2576 $L$xts_dec_epilogue::
2577 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
2578 mov rsi,QWORD PTR[16+rsp]
2579 DB 0F3h,0C3h ;repret
2580 $L$SEH_end_aesni_xts_decrypt::
2581 aesni_xts_decrypt ENDP
2582 PUBLIC aesni_cbc_encrypt
2583
2584 ALIGN 16
2585 aesni_cbc_encrypt PROC PUBLIC
2586 mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
2587 mov QWORD PTR[16+rsp],rsi
2588 mov rax,rsp
2589 $L$SEH_begin_aesni_cbc_encrypt::
2590 mov rdi,rcx
2591 mov rsi,rdx
2592 mov rdx,r8
2593 mov rcx,r9
2594 mov r8,QWORD PTR[40+rsp]
2595 mov r9,QWORD PTR[48+rsp]
2596
2597
2598 test rdx,rdx
2599 jz $L$cbc_ret
2600
2601 mov r10d,DWORD PTR[240+rcx]
2602 mov r11,rcx
2603 test r9d,r9d
2604 jz $L$cbc_decrypt
2605
2606 movups xmm2,XMMWORD PTR[r8]
2607 mov eax,r10d
2608 cmp rdx,16
2609 jb $L$cbc_enc_tail
2610 sub rdx,16
2611 jmp $L$cbc_enc_loop
2612 ALIGN 16
2613 $L$cbc_enc_loop::
2614 movups xmm3,XMMWORD PTR[rdi]
2615 lea rdi,QWORD PTR[16+rdi]
2616
2617 movups xmm0,XMMWORD PTR[rcx]
2618 movups xmm1,XMMWORD PTR[16+rcx]
2619 xorps xmm3,xmm0
2620 lea rcx,QWORD PTR[32+rcx]
2621 xorps xmm2,xmm3
2622 $L$oop_enc1_15::
2623 DB 102,15,56,220,209
2624 dec eax
2625 movups xmm1,XMMWORD PTR[rcx]
2626 lea rcx,QWORD PTR[16+rcx]
2627 jnz $L$oop_enc1_15
2628 DB 102,15,56,221,209
2629 mov eax,r10d
2630 mov rcx,r11
2631 movups XMMWORD PTR[rsi],xmm2
2632 lea rsi,QWORD PTR[16+rsi]
2633 sub rdx,16
2634 jnc $L$cbc_enc_loop
2635 add rdx,16
2636 jnz $L$cbc_enc_tail
2637 movups XMMWORD PTR[r8],xmm2
2638 jmp $L$cbc_ret
2639
2640 $L$cbc_enc_tail::
2641 mov rcx,rdx
2642 xchg rsi,rdi
2643 DD 09066A4F3h
2644 mov ecx,16
2645 sub rcx,rdx
2646 xor eax,eax
2647 DD 09066AAF3h
2648 lea rdi,QWORD PTR[((-16))+rdi]
2649 mov eax,r10d
2650 mov rsi,rdi
2651 mov rcx,r11
2652 xor rdx,rdx
2653 jmp $L$cbc_enc_loop
2654
2655 ALIGN 16
2656 $L$cbc_decrypt::
2657 lea rax,QWORD PTR[rsp]
2658 push rbp
2659 sub rsp,176
2660 and rsp,-16
2661 movaps XMMWORD PTR[16+rsp],xmm6
2662 movaps XMMWORD PTR[32+rsp],xmm7
2663 movaps XMMWORD PTR[48+rsp],xmm8
2664 movaps XMMWORD PTR[64+rsp],xmm9
2665 movaps XMMWORD PTR[80+rsp],xmm10
2666 movaps XMMWORD PTR[96+rsp],xmm11
2667 movaps XMMWORD PTR[112+rsp],xmm12
2668 movaps XMMWORD PTR[128+rsp],xmm13
2669 movaps XMMWORD PTR[144+rsp],xmm14
2670 movaps XMMWORD PTR[160+rsp],xmm15
2671 $L$cbc_decrypt_body::
2672 lea rbp,QWORD PTR[((-8))+rax]
2673 movups xmm10,XMMWORD PTR[r8]
2674 mov eax,r10d
2675 cmp rdx,050h
2676 jbe $L$cbc_dec_tail
2677
2678 movups xmm0,XMMWORD PTR[rcx]
2679 movdqu xmm2,XMMWORD PTR[rdi]
2680 movdqu xmm3,XMMWORD PTR[16+rdi]
2681 movdqa xmm11,xmm2
2682 movdqu xmm4,XMMWORD PTR[32+rdi]
2683 movdqa xmm12,xmm3
2684 movdqu xmm5,XMMWORD PTR[48+rdi]
2685 movdqa xmm13,xmm4
2686 movdqu xmm6,XMMWORD PTR[64+rdi]
2687 movdqa xmm14,xmm5
2688 movdqu xmm7,XMMWORD PTR[80+rdi]
2689 movdqa xmm15,xmm6
2690 mov r9d,DWORD PTR[((OPENSSL_ia32cap_P+4))]
2691 cmp rdx,070h
2692 jbe $L$cbc_dec_six_or_seven
2693
2694 and r9d,71303168
2695 sub rdx,050h
2696 cmp r9d,4194304
2697 je $L$cbc_dec_loop6_enter
2698 sub rdx,020h
2699 lea rcx,QWORD PTR[112+rcx]
2700 jmp $L$cbc_dec_loop8_enter
2701 ALIGN 16
2702 $L$cbc_dec_loop8::
2703 movups XMMWORD PTR[rsi],xmm9
2704 lea rsi,QWORD PTR[16+rsi]
2705 $L$cbc_dec_loop8_enter::
2706 movdqu xmm8,XMMWORD PTR[96+rdi]
2707 pxor xmm2,xmm0
2708 movdqu xmm9,XMMWORD PTR[112+rdi]
2709 pxor xmm3,xmm0
2710 movups xmm1,XMMWORD PTR[((16-112))+rcx]
2711 pxor xmm4,xmm0
2712 xor r11,r11
2713 cmp rdx,070h
2714 pxor xmm5,xmm0
2715 pxor xmm6,xmm0
2716 pxor xmm7,xmm0
2717 pxor xmm8,xmm0
2718
2719 DB 102,15,56,222,209
2720 pxor xmm9,xmm0
2721 movups xmm0,XMMWORD PTR[((32-112))+rcx]
2722 DB 102,15,56,222,217
2723 DB 102,15,56,222,225
2724 DB 102,15,56,222,233
2725 DB 102,15,56,222,241
2726 DB 102,15,56,222,249
2727 DB 102,68,15,56,222,193
2728 setnc r11b
2729 shl r11,7
2730 DB 102,68,15,56,222,201
2731 add r11,rdi
2732 movups xmm1,XMMWORD PTR[((48-112))+rcx]
2733 DB 102,15,56,222,208
2734 DB 102,15,56,222,216
2735 DB 102,15,56,222,224
2736 DB 102,15,56,222,232
2737 DB 102,15,56,222,240
2738 DB 102,15,56,222,248
2739 DB 102,68,15,56,222,192
2740 DB 102,68,15,56,222,200
2741 movups xmm0,XMMWORD PTR[((64-112))+rcx]
2742 nop
2743 DB 102,15,56,222,209
2744 DB 102,15,56,222,217
2745 DB 102,15,56,222,225
2746 DB 102,15,56,222,233
2747 DB 102,15,56,222,241
2748 DB 102,15,56,222,249
2749 DB 102,68,15,56,222,193
2750 DB 102,68,15,56,222,201
2751 movups xmm1,XMMWORD PTR[((80-112))+rcx]
2752 nop
2753 DB 102,15,56,222,208
2754 DB 102,15,56,222,216
2755 DB 102,15,56,222,224
2756 DB 102,15,56,222,232
2757 DB 102,15,56,222,240
2758 DB 102,15,56,222,248
2759 DB 102,68,15,56,222,192
2760 DB 102,68,15,56,222,200
2761 movups xmm0,XMMWORD PTR[((96-112))+rcx]
2762 nop
2763 DB 102,15,56,222,209
2764 DB 102,15,56,222,217
2765 DB 102,15,56,222,225
2766 DB 102,15,56,222,233
2767 DB 102,15,56,222,241
2768 DB 102,15,56,222,249
2769 DB 102,68,15,56,222,193
2770 DB 102,68,15,56,222,201
2771 movups xmm1,XMMWORD PTR[((112-112))+rcx]
2772 nop
2773 DB 102,15,56,222,208
2774 DB 102,15,56,222,216
2775 DB 102,15,56,222,224
2776 DB 102,15,56,222,232
2777 DB 102,15,56,222,240
2778 DB 102,15,56,222,248
2779 DB 102,68,15,56,222,192
2780 DB 102,68,15,56,222,200
2781 movups xmm0,XMMWORD PTR[((128-112))+rcx]
2782 nop
2783 DB 102,15,56,222,209
2784 DB 102,15,56,222,217
2785 DB 102,15,56,222,225
2786 DB 102,15,56,222,233
2787 DB 102,15,56,222,241
2788 DB 102,15,56,222,249
2789 DB 102,68,15,56,222,193
2790 DB 102,68,15,56,222,201
2791 movups xmm1,XMMWORD PTR[((144-112))+rcx]
2792 cmp eax,11
2793 DB 102,15,56,222,208
2794 DB 102,15,56,222,216
2795 DB 102,15,56,222,224
2796 DB 102,15,56,222,232
2797 DB 102,15,56,222,240
2798 DB 102,15,56,222,248
2799 DB 102,68,15,56,222,192
2800 DB 102,68,15,56,222,200
2801 movups xmm0,XMMWORD PTR[((160-112))+rcx]
2802 jb $L$cbc_dec_done
2803 DB 102,15,56,222,209
2804 DB 102,15,56,222,217
2805 DB 102,15,56,222,225
2806 DB 102,15,56,222,233
2807 DB 102,15,56,222,241
2808 DB 102,15,56,222,249
2809 DB 102,68,15,56,222,193
2810 DB 102,68,15,56,222,201
2811 movups xmm1,XMMWORD PTR[((176-112))+rcx]
2812 nop
2813 DB 102,15,56,222,208
2814 DB 102,15,56,222,216
2815 DB 102,15,56,222,224
2816 DB 102,15,56,222,232
2817 DB 102,15,56,222,240
2818 DB 102,15,56,222,248
2819 DB 102,68,15,56,222,192
2820 DB 102,68,15,56,222,200
2821 movups xmm0,XMMWORD PTR[((192-112))+rcx]
2822 je $L$cbc_dec_done
2823 DB 102,15,56,222,209
2824 DB 102,15,56,222,217
2825 DB 102,15,56,222,225
2826 DB 102,15,56,222,233
2827 DB 102,15,56,222,241
2828 DB 102,15,56,222,249
2829 DB 102,68,15,56,222,193
2830 DB 102,68,15,56,222,201
2831 movups xmm1,XMMWORD PTR[((208-112))+rcx]
2832 nop
2833 DB 102,15,56,222,208
2834 DB 102,15,56,222,216
2835 DB 102,15,56,222,224
2836 DB 102,15,56,222,232
2837 DB 102,15,56,222,240
2838 DB 102,15,56,222,248
2839 DB 102,68,15,56,222,192
2840 DB 102,68,15,56,222,200
2841 movups xmm0,XMMWORD PTR[((224-112))+rcx]
2842 jmp $L$cbc_dec_done
2843 ALIGN 16
2844 $L$cbc_dec_done::
2845 DB 102,15,56,222,209
2846 DB 102,15,56,222,217
2847 pxor xmm10,xmm0
2848 pxor xmm11,xmm0
2849 DB 102,15,56,222,225
2850 DB 102,15,56,222,233
2851 pxor xmm12,xmm0
2852 pxor xmm13,xmm0
2853 DB 102,15,56,222,241
2854 DB 102,15,56,222,249
2855 pxor xmm14,xmm0
2856 pxor xmm15,xmm0
2857 DB 102,68,15,56,222,193
2858 DB 102,68,15,56,222,201
2859 movdqu xmm1,XMMWORD PTR[80+rdi]
2860
2861 DB 102,65,15,56,223,210
2862 movdqu xmm10,XMMWORD PTR[96+rdi]
2863 pxor xmm1,xmm0
2864 DB 102,65,15,56,223,219
2865 pxor xmm10,xmm0
2866 movdqu xmm0,XMMWORD PTR[112+rdi]
2867 DB 102,65,15,56,223,228
2868 lea rdi,QWORD PTR[128+rdi]
2869 movdqu xmm11,XMMWORD PTR[r11]
2870 DB 102,65,15,56,223,237
2871 DB 102,65,15,56,223,246
2872 movdqu xmm12,XMMWORD PTR[16+r11]
2873 movdqu xmm13,XMMWORD PTR[32+r11]
2874 DB 102,65,15,56,223,255
2875 DB 102,68,15,56,223,193
2876 movdqu xmm14,XMMWORD PTR[48+r11]
2877 movdqu xmm15,XMMWORD PTR[64+r11]
2878 DB 102,69,15,56,223,202
2879 movdqa xmm10,xmm0
2880 movdqu xmm1,XMMWORD PTR[80+r11]
2881 movups xmm0,XMMWORD PTR[((-112))+rcx]
2882
2883 movups XMMWORD PTR[rsi],xmm2
2884 movdqa xmm2,xmm11
2885 movups XMMWORD PTR[16+rsi],xmm3
2886 movdqa xmm3,xmm12
2887 movups XMMWORD PTR[32+rsi],xmm4
2888 movdqa xmm4,xmm13
2889 movups XMMWORD PTR[48+rsi],xmm5
2890 movdqa xmm5,xmm14
2891 movups XMMWORD PTR[64+rsi],xmm6
2892 movdqa xmm6,xmm15
2893 movups XMMWORD PTR[80+rsi],xmm7
2894 movdqa xmm7,xmm1
2895 movups XMMWORD PTR[96+rsi],xmm8
2896 lea rsi,QWORD PTR[112+rsi]
2897
2898 sub rdx,080h
2899 ja $L$cbc_dec_loop8
2900
2901 movaps xmm2,xmm9
2902 lea rcx,QWORD PTR[((-112))+rcx]
2903 add rdx,070h
2904 jle $L$cbc_dec_tail_collected
2905 movups XMMWORD PTR[rsi],xmm9
2906 lea rsi,QWORD PTR[16+rsi]
2907 cmp rdx,050h
2908 jbe $L$cbc_dec_tail
2909
2910 movaps xmm2,xmm11
2911 $L$cbc_dec_six_or_seven::
2912 cmp rdx,060h
2913 ja $L$cbc_dec_seven
2914
2915 movaps xmm8,xmm7
2916 call _aesni_decrypt6
2917 pxor xmm2,xmm10
2918 movaps xmm10,xmm8
2919 pxor xmm3,xmm11
2920 movdqu XMMWORD PTR[rsi],xmm2
2921 pxor xmm4,xmm12
2922 movdqu XMMWORD PTR[16+rsi],xmm3
2923 pxor xmm5,xmm13
2924 movdqu XMMWORD PTR[32+rsi],xmm4
2925 pxor xmm6,xmm14
2926 movdqu XMMWORD PTR[48+rsi],xmm5
2927 pxor xmm7,xmm15
2928 movdqu XMMWORD PTR[64+rsi],xmm6
2929 lea rsi,QWORD PTR[80+rsi]
2930 movdqa xmm2,xmm7
2931 jmp $L$cbc_dec_tail_collected
2932
2933 ALIGN 16
2934 $L$cbc_dec_seven::
2935 movups xmm8,XMMWORD PTR[96+rdi]
2936 xorps xmm9,xmm9
2937 call _aesni_decrypt8
2938 movups xmm9,XMMWORD PTR[80+rdi]
2939 pxor xmm2,xmm10
2940 movups xmm10,XMMWORD PTR[96+rdi]
2941 pxor xmm3,xmm11
2942 movdqu XMMWORD PTR[rsi],xmm2
2943 pxor xmm4,xmm12
2944 movdqu XMMWORD PTR[16+rsi],xmm3
2945 pxor xmm5,xmm13
2946 movdqu XMMWORD PTR[32+rsi],xmm4
2947 pxor xmm6,xmm14
2948 movdqu XMMWORD PTR[48+rsi],xmm5
2949 pxor xmm7,xmm15
2950 movdqu XMMWORD PTR[64+rsi],xmm6
2951 pxor xmm8,xmm9
2952 movdqu XMMWORD PTR[80+rsi],xmm7
2953 lea rsi,QWORD PTR[96+rsi]
2954 movdqa xmm2,xmm8
2955 jmp $L$cbc_dec_tail_collected
2956
2957 ALIGN 16
2958 $L$cbc_dec_loop6::
2959 movups XMMWORD PTR[rsi],xmm7
2960 lea rsi,QWORD PTR[16+rsi]
2961 movdqu xmm2,XMMWORD PTR[rdi]
2962 movdqu xmm3,XMMWORD PTR[16+rdi]
2963 movdqa xmm11,xmm2
2964 movdqu xmm4,XMMWORD PTR[32+rdi]
2965 movdqa xmm12,xmm3
2966 movdqu xmm5,XMMWORD PTR[48+rdi]
2967 movdqa xmm13,xmm4
2968 movdqu xmm6,XMMWORD PTR[64+rdi]
2969 movdqa xmm14,xmm5
2970 movdqu xmm7,XMMWORD PTR[80+rdi]
2971 movdqa xmm15,xmm6
2972 $L$cbc_dec_loop6_enter::
2973 lea rdi,QWORD PTR[96+rdi]
2974 movdqa xmm8,xmm7
2975
2976 call _aesni_decrypt6
2977
2978 pxor xmm2,xmm10
2979 movdqa xmm10,xmm8
2980 pxor xmm3,xmm11
2981 movdqu XMMWORD PTR[rsi],xmm2
2982 pxor xmm4,xmm12
2983 movdqu XMMWORD PTR[16+rsi],xmm3
2984 pxor xmm5,xmm13
2985 movdqu XMMWORD PTR[32+rsi],xmm4
2986 pxor xmm6,xmm14
2987 mov rcx,r11
2988 movdqu XMMWORD PTR[48+rsi],xmm5
2989 pxor xmm7,xmm15
2990 mov eax,r10d
2991 movdqu XMMWORD PTR[64+rsi],xmm6
2992 lea rsi,QWORD PTR[80+rsi]
2993 sub rdx,060h
2994 ja $L$cbc_dec_loop6
2995
2996 movdqa xmm2,xmm7
2997 add rdx,050h
2998 jle $L$cbc_dec_tail_collected
2999 movups XMMWORD PTR[rsi],xmm7
3000 lea rsi,QWORD PTR[16+rsi]
3001
3002 $L$cbc_dec_tail::
3003 movups xmm2,XMMWORD PTR[rdi]
3004 sub rdx,010h
3005 jbe $L$cbc_dec_one
3006
3007 movups xmm3,XMMWORD PTR[16+rdi]
3008 movaps xmm11,xmm2
3009 sub rdx,010h
3010 jbe $L$cbc_dec_two
3011
3012 movups xmm4,XMMWORD PTR[32+rdi]
3013 movaps xmm12,xmm3
3014 sub rdx,010h
3015 jbe $L$cbc_dec_three
3016
3017 movups xmm5,XMMWORD PTR[48+rdi]
3018 movaps xmm13,xmm4
3019 sub rdx,010h
3020 jbe $L$cbc_dec_four
3021
3022 movups xmm6,XMMWORD PTR[64+rdi]
3023 movaps xmm14,xmm5
3024 movaps xmm15,xmm6
3025 xorps xmm7,xmm7
3026 call _aesni_decrypt6
3027 pxor xmm2,xmm10
3028 movaps xmm10,xmm15
3029 pxor xmm3,xmm11
3030 movdqu XMMWORD PTR[rsi],xmm2
3031 pxor xmm4,xmm12
3032 movdqu XMMWORD PTR[16+rsi],xmm3
3033 pxor xmm5,xmm13
3034 movdqu XMMWORD PTR[32+rsi],xmm4
3035 pxor xmm6,xmm14
3036 movdqu XMMWORD PTR[48+rsi],xmm5
3037 lea rsi,QWORD PTR[64+rsi]
3038 movdqa xmm2,xmm6
3039 sub rdx,010h
3040 jmp $L$cbc_dec_tail_collected
3041
3042 ALIGN 16
3043 $L$cbc_dec_one::
3044 movaps xmm11,xmm2
3045 movups xmm0,XMMWORD PTR[rcx]
3046 movups xmm1,XMMWORD PTR[16+rcx]
3047 lea rcx,QWORD PTR[32+rcx]
3048 xorps xmm2,xmm0
3049 $L$oop_dec1_16::
3050 DB 102,15,56,222,209
3051 dec eax
3052 movups xmm1,XMMWORD PTR[rcx]
3053 lea rcx,QWORD PTR[16+rcx]
3054 jnz $L$oop_dec1_16
3055 DB 102,15,56,223,209
3056 xorps xmm2,xmm10
3057 movaps xmm10,xmm11
3058 jmp $L$cbc_dec_tail_collected
3059 ALIGN 16
3060 $L$cbc_dec_two::
3061 movaps xmm12,xmm3
3062 call _aesni_decrypt2
3063 pxor xmm2,xmm10
3064 movaps xmm10,xmm12
3065 pxor xmm3,xmm11
3066 movdqu XMMWORD PTR[rsi],xmm2
3067 movdqa xmm2,xmm3
3068 lea rsi,QWORD PTR[16+rsi]
3069 jmp $L$cbc_dec_tail_collected
3070 ALIGN 16
3071 $L$cbc_dec_three::
3072 movaps xmm13,xmm4
3073 call _aesni_decrypt3
3074 pxor xmm2,xmm10
3075 movaps xmm10,xmm13
3076 pxor xmm3,xmm11
3077 movdqu XMMWORD PTR[rsi],xmm2
3078 pxor xmm4,xmm12
3079 movdqu XMMWORD PTR[16+rsi],xmm3
3080 movdqa xmm2,xmm4
3081 lea rsi,QWORD PTR[32+rsi]
3082 jmp $L$cbc_dec_tail_collected
3083 ALIGN 16
3084 $L$cbc_dec_four::
3085 movaps xmm14,xmm5
3086 call _aesni_decrypt4
3087 pxor xmm2,xmm10
3088 movaps xmm10,xmm14
3089 pxor xmm3,xmm11
3090 movdqu XMMWORD PTR[rsi],xmm2
3091 pxor xmm4,xmm12
3092 movdqu XMMWORD PTR[16+rsi],xmm3
3093 pxor xmm5,xmm13
3094 movdqu XMMWORD PTR[32+rsi],xmm4
3095 movdqa xmm2,xmm5
3096 lea rsi,QWORD PTR[48+rsi]
3097 jmp $L$cbc_dec_tail_collected
3098
3099 ALIGN 16
3100 $L$cbc_dec_tail_collected::
3101 movups XMMWORD PTR[r8],xmm10
3102 and rdx,15
3103 jnz $L$cbc_dec_tail_partial
3104 movups XMMWORD PTR[rsi],xmm2
3105 jmp $L$cbc_dec_ret
3106 ALIGN 16
3107 $L$cbc_dec_tail_partial::
3108 movaps XMMWORD PTR[rsp],xmm2
3109 mov rcx,16
3110 mov rdi,rsi
3111 sub rcx,rdx
3112 lea rsi,QWORD PTR[rsp]
3113 DD 09066A4F3h
3114
3115 $L$cbc_dec_ret::
3116 movaps xmm6,XMMWORD PTR[16+rsp]
3117 movaps xmm7,XMMWORD PTR[32+rsp]
3118 movaps xmm8,XMMWORD PTR[48+rsp]
3119 movaps xmm9,XMMWORD PTR[64+rsp]
3120 movaps xmm10,XMMWORD PTR[80+rsp]
3121 movaps xmm11,XMMWORD PTR[96+rsp]
3122 movaps xmm12,XMMWORD PTR[112+rsp]
3123 movaps xmm13,XMMWORD PTR[128+rsp]
3124 movaps xmm14,XMMWORD PTR[144+rsp]
3125 movaps xmm15,XMMWORD PTR[160+rsp]
3126 lea rsp,QWORD PTR[rbp]
3127 pop rbp
3128 $L$cbc_ret::
3129 mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
3130 mov rsi,QWORD PTR[16+rsp]
3131 DB 0F3h,0C3h ;repret
3132 $L$SEH_end_aesni_cbc_encrypt::
3133 aesni_cbc_encrypt ENDP
3134 PUBLIC aesni_set_decrypt_key
3135
3136 ALIGN 16
3137 aesni_set_decrypt_key PROC PUBLIC
3138 DB 048h,083h,0ECh,008h
3139 call __aesni_set_encrypt_key
3140 shl edx,4
3141 test eax,eax
3142 jnz $L$dec_key_ret
3143 lea rcx,QWORD PTR[16+rdx*1+r8]
3144
3145 movups xmm0,XMMWORD PTR[r8]
3146 movups xmm1,XMMWORD PTR[rcx]
3147 movups XMMWORD PTR[rcx],xmm0
3148 movups XMMWORD PTR[r8],xmm1
3149 lea r8,QWORD PTR[16+r8]
3150 lea rcx,QWORD PTR[((-16))+rcx]
3151
3152 $L$dec_key_inverse::
3153 movups xmm0,XMMWORD PTR[r8]
3154 movups xmm1,XMMWORD PTR[rcx]
3155 DB 102,15,56,219,192
3156 DB 102,15,56,219,201
3157 lea r8,QWORD PTR[16+r8]
3158 lea rcx,QWORD PTR[((-16))+rcx]
3159 movups XMMWORD PTR[16+rcx],xmm0
3160 movups XMMWORD PTR[(-16)+r8],xmm1
3161 cmp rcx,r8
3162 ja $L$dec_key_inverse
3163
3164 movups xmm0,XMMWORD PTR[r8]
3165 DB 102,15,56,219,192
3166 movups XMMWORD PTR[rcx],xmm0
3167 $L$dec_key_ret::
3168 add rsp,8
3169 DB 0F3h,0C3h ;repret
3170 $L$SEH_end_set_decrypt_key::
3171 aesni_set_decrypt_key ENDP
3172 PUBLIC aesni_set_encrypt_key
3173
3174 ALIGN 16
3175 aesni_set_encrypt_key PROC PUBLIC
3176 __aesni_set_encrypt_key::
3177 DB 048h,083h,0ECh,008h
3178 mov rax,-1
3179 test rcx,rcx
3180 jz $L$enc_key_ret
3181 test r8,r8
3182 jz $L$enc_key_ret
3183
3184 movups xmm0,XMMWORD PTR[rcx]
3185 xorps xmm4,xmm4
3186 lea rax,QWORD PTR[16+r8]
3187 cmp edx,256
3188 je $L$14rounds
3189 cmp edx,192
3190 je $L$12rounds
3191 cmp edx,128
3192 jne $L$bad_keybits
3193
3194 $L$10rounds::
3195 mov edx,9
3196 movups XMMWORD PTR[r8],xmm0
3197 DB 102,15,58,223,200,1
3198 call $L$key_expansion_128_cold
3199 DB 102,15,58,223,200,2
3200 call $L$key_expansion_128
3201 DB 102,15,58,223,200,4
3202 call $L$key_expansion_128
3203 DB 102,15,58,223,200,8
3204 call $L$key_expansion_128
3205 DB 102,15,58,223,200,16
3206 call $L$key_expansion_128
3207 DB 102,15,58,223,200,32
3208 call $L$key_expansion_128
3209 DB 102,15,58,223,200,64
3210 call $L$key_expansion_128
3211 DB 102,15,58,223,200,128
3212 call $L$key_expansion_128
3213 DB 102,15,58,223,200,27
3214 call $L$key_expansion_128
3215 DB 102,15,58,223,200,54
3216 call $L$key_expansion_128
3217 movups XMMWORD PTR[rax],xmm0
3218 mov DWORD PTR[80+rax],edx
3219 xor eax,eax
3220 jmp $L$enc_key_ret
3221
3222 ALIGN 16
3223 $L$12rounds::
3224 movq xmm2,QWORD PTR[16+rcx]
3225 mov edx,11
3226 movups XMMWORD PTR[r8],xmm0
3227 DB 102,15,58,223,202,1
3228 call $L$key_expansion_192a_cold
3229 DB 102,15,58,223,202,2
3230 call $L$key_expansion_192b
3231 DB 102,15,58,223,202,4
3232 call $L$key_expansion_192a
3233 DB 102,15,58,223,202,8
3234 call $L$key_expansion_192b
3235 DB 102,15,58,223,202,16
3236 call $L$key_expansion_192a
3237 DB 102,15,58,223,202,32
3238 call $L$key_expansion_192b
3239 DB 102,15,58,223,202,64
3240 call $L$key_expansion_192a
3241 DB 102,15,58,223,202,128
3242 call $L$key_expansion_192b
3243 movups XMMWORD PTR[rax],xmm0
3244 mov DWORD PTR[48+rax],edx
3245 xor rax,rax
3246 jmp $L$enc_key_ret
3247
3248 ALIGN 16
3249 $L$14rounds::
3250 movups xmm2,XMMWORD PTR[16+rcx]
3251 mov edx,13
3252 lea rax,QWORD PTR[16+rax]
3253 movups XMMWORD PTR[r8],xmm0
3254 movups XMMWORD PTR[16+r8],xmm2
3255 DB 102,15,58,223,202,1
3256 call $L$key_expansion_256a_cold
3257 DB 102,15,58,223,200,1
3258 call $L$key_expansion_256b
3259 DB 102,15,58,223,202,2
3260 call $L$key_expansion_256a
3261 DB 102,15,58,223,200,2
3262 call $L$key_expansion_256b
3263 DB 102,15,58,223,202,4
3264 call $L$key_expansion_256a
3265 DB 102,15,58,223,200,4
3266 call $L$key_expansion_256b
3267 DB 102,15,58,223,202,8
3268 call $L$key_expansion_256a
3269 DB 102,15,58,223,200,8
3270 call $L$key_expansion_256b
3271 DB 102,15,58,223,202,16
3272 call $L$key_expansion_256a
3273 DB 102,15,58,223,200,16
3274 call $L$key_expansion_256b
3275 DB 102,15,58,223,202,32
3276 call $L$key_expansion_256a
3277 DB 102,15,58,223,200,32
3278 call $L$key_expansion_256b
3279 DB 102,15,58,223,202,64
3280 call $L$key_expansion_256a
3281 movups XMMWORD PTR[rax],xmm0
3282 mov DWORD PTR[16+rax],edx
3283 xor rax,rax
3284 jmp $L$enc_key_ret
3285
3286 ALIGN 16
3287 $L$bad_keybits::
3288 mov rax,-2
3289 $L$enc_key_ret::
3290 add rsp,8
3291 DB 0F3h,0C3h ;repret
3292 $L$SEH_end_set_encrypt_key::
3293
3294 ALIGN 16
3295 $L$key_expansion_128::
3296 movups XMMWORD PTR[rax],xmm0
3297 lea rax,QWORD PTR[16+rax]
3298 $L$key_expansion_128_cold::
3299 shufps xmm4,xmm0,16
3300 xorps xmm0,xmm4
3301 shufps xmm4,xmm0,140
3302 xorps xmm0,xmm4
3303 shufps xmm1,xmm1,255
3304 xorps xmm0,xmm1
3305 DB 0F3h,0C3h ;repret
3306
3307 ALIGN 16
3308 $L$key_expansion_192a::
3309 movups XMMWORD PTR[rax],xmm0
3310 lea rax,QWORD PTR[16+rax]
3311 $L$key_expansion_192a_cold::
3312 movaps xmm5,xmm2
3313 $L$key_expansion_192b_warm::
3314 shufps xmm4,xmm0,16
3315 movdqa xmm3,xmm2
3316 xorps xmm0,xmm4
3317 shufps xmm4,xmm0,140
3318 pslldq xmm3,4
3319 xorps xmm0,xmm4
3320 pshufd xmm1,xmm1,85
3321 pxor xmm2,xmm3
3322 pxor xmm0,xmm1
3323 pshufd xmm3,xmm0,255
3324 pxor xmm2,xmm3
3325 DB 0F3h,0C3h ;repret
3326
3327 ALIGN 16
3328 $L$key_expansion_192b::
3329 movaps xmm3,xmm0
3330 shufps xmm5,xmm0,68
3331 movups XMMWORD PTR[rax],xmm5
3332 shufps xmm3,xmm2,78
3333 movups XMMWORD PTR[16+rax],xmm3
3334 lea rax,QWORD PTR[32+rax]
3335 jmp $L$key_expansion_192b_warm
3336
3337 ALIGN 16
3338 $L$key_expansion_256a::
3339 movups XMMWORD PTR[rax],xmm2
3340 lea rax,QWORD PTR[16+rax]
3341 $L$key_expansion_256a_cold::
3342 shufps xmm4,xmm0,16
3343 xorps xmm0,xmm4
3344 shufps xmm4,xmm0,140
3345 xorps xmm0,xmm4
3346 shufps xmm1,xmm1,255
3347 xorps xmm0,xmm1
3348 DB 0F3h,0C3h ;repret
3349
3350 ALIGN 16
3351 $L$key_expansion_256b::
3352 movups XMMWORD PTR[rax],xmm0
3353 lea rax,QWORD PTR[16+rax]
3354
3355 shufps xmm4,xmm2,16
3356 xorps xmm2,xmm4
3357 shufps xmm4,xmm2,140
3358 xorps xmm2,xmm4
3359 shufps xmm1,xmm1,170
3360 xorps xmm2,xmm1
3361 DB 0F3h,0C3h ;repret
3362 aesni_set_encrypt_key ENDP
3363
3364 ALIGN 64
3365 $L$bswap_mask::
3366 DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
3367 $L$increment32::
3368 DD 6,6,6,0
3369 $L$increment64::
3370 DD 1,0,0,0
3371 $L$xts_magic::
3372 DD 087h,0,1,0
3373 $L$increment1::
3374 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
3375
3376 DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
3377 DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
3378 DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
3379 DB 115,108,46,111,114,103,62,0
3380 ALIGN 64
3381 EXTERN __imp_RtlVirtualUnwind:NEAR
3382
3383 ALIGN 16
3384 ecb_se_handler PROC PRIVATE
3385 push rsi
3386 push rdi
3387 push rbx
3388 push rbp
3389 push r12
3390 push r13
3391 push r14
3392 push r15
3393 pushfq
3394 sub rsp,64
3395
3396 mov rax,QWORD PTR[152+r8]
3397
3398 jmp $L$common_seh_tail
3399 ecb_se_handler ENDP
3400
3401
3402 ALIGN 16
3403 ccm64_se_handler PROC PRIVATE
3404 push rsi
3405 push rdi
3406 push rbx
3407 push rbp
3408 push r12
3409 push r13
3410 push r14
3411 push r15
3412 pushfq
3413 sub rsp,64
3414
3415 mov rax,QWORD PTR[120+r8]
3416 mov rbx,QWORD PTR[248+r8]
3417
3418 mov rsi,QWORD PTR[8+r9]
3419 mov r11,QWORD PTR[56+r9]
3420
3421 mov r10d,DWORD PTR[r11]
3422 lea r10,QWORD PTR[r10*1+rsi]
3423 cmp rbx,r10
3424 jb $L$common_seh_tail
3425
3426 mov rax,QWORD PTR[152+r8]
3427
3428 mov r10d,DWORD PTR[4+r11]
3429 lea r10,QWORD PTR[r10*1+rsi]
3430 cmp rbx,r10
3431 jae $L$common_seh_tail
3432
3433 lea rsi,QWORD PTR[rax]
3434 lea rdi,QWORD PTR[512+r8]
3435 mov ecx,8
3436 DD 0a548f3fch
3437 lea rax,QWORD PTR[88+rax]
3438
3439 jmp $L$common_seh_tail
3440 ccm64_se_handler ENDP
3441
3442
3443 ALIGN 16
3444 ctr_xts_se_handler PROC PRIVATE
3445 push rsi
3446 push rdi
3447 push rbx
3448 push rbp
3449 push r12
3450 push r13
3451 push r14
3452 push r15
3453 pushfq
3454 sub rsp,64
3455
3456 mov rax,QWORD PTR[120+r8]
3457 mov rbx,QWORD PTR[248+r8]
3458
3459 mov rsi,QWORD PTR[8+r9]
3460 mov r11,QWORD PTR[56+r9]
3461
3462 mov r10d,DWORD PTR[r11]
3463 lea r10,QWORD PTR[r10*1+rsi]
3464 cmp rbx,r10
3465 jb $L$common_seh_tail
3466
3467 mov rax,QWORD PTR[152+r8]
3468
3469 mov r10d,DWORD PTR[4+r11]
3470 lea r10,QWORD PTR[r10*1+rsi]
3471 cmp rbx,r10
3472 jae $L$common_seh_tail
3473
3474 mov rax,QWORD PTR[160+r8]
3475 lea rsi,QWORD PTR[((-160))+rax]
3476 lea rdi,QWORD PTR[512+r8]
3477 mov ecx,20
3478 DD 0a548f3fch
3479
3480 jmp $L$common_rbp_tail
3481 ctr_xts_se_handler ENDP
3482
3483 ALIGN 16
3484 cbc_se_handler PROC PRIVATE
3485 push rsi
3486 push rdi
3487 push rbx
3488 push rbp
3489 push r12
3490 push r13
3491 push r14
3492 push r15
3493 pushfq
3494 sub rsp,64
3495
3496 mov rax,QWORD PTR[152+r8]
3497 mov rbx,QWORD PTR[248+r8]
3498
3499 lea r10,QWORD PTR[$L$cbc_decrypt]
3500 cmp rbx,r10
3501 jb $L$common_seh_tail
3502
3503 lea r10,QWORD PTR[$L$cbc_decrypt_body]
3504 cmp rbx,r10
3505 jb $L$restore_cbc_rax
3506
3507 lea r10,QWORD PTR[$L$cbc_ret]
3508 cmp rbx,r10
3509 jae $L$common_seh_tail
3510
3511 lea rsi,QWORD PTR[16+rax]
3512 lea rdi,QWORD PTR[512+r8]
3513 mov ecx,20
3514 DD 0a548f3fch
3515
3516 $L$common_rbp_tail::
3517 mov rax,QWORD PTR[160+r8]
3518 mov rbp,QWORD PTR[rax]
3519 lea rax,QWORD PTR[8+rax]
3520 mov QWORD PTR[160+r8],rbp
3521 jmp $L$common_seh_tail
3522
3523 $L$restore_cbc_rax::
3524 mov rax,QWORD PTR[120+r8]
3525
3526 $L$common_seh_tail::
3527 mov rdi,QWORD PTR[8+rax]
3528 mov rsi,QWORD PTR[16+rax]
3529 mov QWORD PTR[152+r8],rax
3530 mov QWORD PTR[168+r8],rsi
3531 mov QWORD PTR[176+r8],rdi
3532
3533 mov rdi,QWORD PTR[40+r9]
3534 mov rsi,r8
3535 mov ecx,154
3536 DD 0a548f3fch
3537
3538 mov rsi,r9
3539 xor rcx,rcx
3540 mov rdx,QWORD PTR[8+rsi]
3541 mov r8,QWORD PTR[rsi]
3542 mov r9,QWORD PTR[16+rsi]
3543 mov r10,QWORD PTR[40+rsi]
3544 lea r11,QWORD PTR[56+rsi]
3545 lea r12,QWORD PTR[24+rsi]
3546 mov QWORD PTR[32+rsp],r10
3547 mov QWORD PTR[40+rsp],r11
3548 mov QWORD PTR[48+rsp],r12
3549 mov QWORD PTR[56+rsp],rcx
3550 call QWORD PTR[__imp_RtlVirtualUnwind]
3551
3552 mov eax,1
3553 add rsp,64
3554 popfq
3555 pop r15
3556 pop r14
3557 pop r13
3558 pop r12
3559 pop rbp
3560 pop rbx
3561 pop rdi
3562 pop rsi
3563 DB 0F3h,0C3h ;repret
3564 cbc_se_handler ENDP
3565
3566 .text$ ENDS
3567 .pdata SEGMENT READONLY ALIGN(4)
3568 ALIGN 4
3569 DD imagerel $L$SEH_begin_aesni_ecb_encrypt
3570 DD imagerel $L$SEH_end_aesni_ecb_encrypt
3571 DD imagerel $L$SEH_info_ecb
3572
3573 DD imagerel $L$SEH_begin_aesni_ccm64_encrypt_blocks
3574 DD imagerel $L$SEH_end_aesni_ccm64_encrypt_blocks
3575 DD imagerel $L$SEH_info_ccm64_enc
3576
3577 DD imagerel $L$SEH_begin_aesni_ccm64_decrypt_blocks
3578 DD imagerel $L$SEH_end_aesni_ccm64_decrypt_blocks
3579 DD imagerel $L$SEH_info_ccm64_dec
3580
3581 DD imagerel $L$SEH_begin_aesni_ctr32_encrypt_blocks
3582 DD imagerel $L$SEH_end_aesni_ctr32_encrypt_blocks
3583 DD imagerel $L$SEH_info_ctr32
3584
3585 DD imagerel $L$SEH_begin_aesni_xts_encrypt
3586 DD imagerel $L$SEH_end_aesni_xts_encrypt
3587 DD imagerel $L$SEH_info_xts_enc
3588
3589 DD imagerel $L$SEH_begin_aesni_xts_decrypt
3590 DD imagerel $L$SEH_end_aesni_xts_decrypt
3591 DD imagerel $L$SEH_info_xts_dec
3592 DD imagerel $L$SEH_begin_aesni_cbc_encrypt
3593 DD imagerel $L$SEH_end_aesni_cbc_encrypt
3594 DD imagerel $L$SEH_info_cbc
3595
3596 DD imagerel aesni_set_decrypt_key
3597 DD imagerel $L$SEH_end_set_decrypt_key
3598 DD imagerel $L$SEH_info_key
3599
3600 DD imagerel aesni_set_encrypt_key
3601 DD imagerel $L$SEH_end_set_encrypt_key
3602 DD imagerel $L$SEH_info_key
3603 .pdata ENDS
3604 .xdata SEGMENT READONLY ALIGN(8)
3605 ALIGN 8
3606 $L$SEH_info_ecb::
3607 DB 9,0,0,0
3608 DD imagerel ecb_se_handler
3609 $L$SEH_info_ccm64_enc::
3610 DB 9,0,0,0
3611 DD imagerel ccm64_se_handler
3612 DD imagerel $L$ccm64_enc_body,imagerel $L$ccm64_enc_ret
3613 $L$SEH_info_ccm64_dec::
3614 DB 9,0,0,0
3615 DD imagerel ccm64_se_handler
3616 DD imagerel $L$ccm64_dec_body,imagerel $L$ccm64_dec_ret
3617 $L$SEH_info_ctr32::
3618 DB 9,0,0,0
3619 DD imagerel ctr_xts_se_handler
3620 DD imagerel $L$ctr32_body,imagerel $L$ctr32_epilogue
3621 $L$SEH_info_xts_enc::
3622 DB 9,0,0,0
3623 DD imagerel ctr_xts_se_handler
3624 DD imagerel $L$xts_enc_body,imagerel $L$xts_enc_epilogue
3625 $L$SEH_info_xts_dec::
3626 DB 9,0,0,0
3627 DD imagerel ctr_xts_se_handler
3628 DD imagerel $L$xts_dec_body,imagerel $L$xts_dec_epilogue
3629 $L$SEH_info_cbc::
3630 DB 9,0,0,0
3631 DD imagerel cbc_se_handler
3632 $L$SEH_info_key::
3633 DB 001h,004h,001h,000h
3634 DB 004h,002h,000h,000h
3635
3636 .xdata ENDS
3637 END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698