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

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

Issue 2829743002: Roll src/third_party/boringssl/src bc6a76b0e..777fdd644 (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 default rel
2 %define XMMWORD
3 %define YMMWORD
4 %define ZMMWORD
5 section .text code align=64
6
7 EXTERN OPENSSL_ia32cap_P
8 global aesni_encrypt
9
10 ALIGN 16
11 aesni_encrypt:
12 movups xmm2,XMMWORD[rcx]
13 mov eax,DWORD[240+r8]
14 movups xmm0,XMMWORD[r8]
15 movups xmm1,XMMWORD[16+r8]
16 lea r8,[32+r8]
17 xorps xmm2,xmm0
18 $L$oop_enc1_1:
19 DB 102,15,56,220,209
20 dec eax
21 movups xmm1,XMMWORD[r8]
22 lea r8,[16+r8]
23 jnz NEAR $L$oop_enc1_1
24 DB 102,15,56,221,209
25 pxor xmm0,xmm0
26 pxor xmm1,xmm1
27 movups XMMWORD[rdx],xmm2
28 pxor xmm2,xmm2
29 DB 0F3h,0C3h ;repret
30
31
32 global aesni_decrypt
33
34 ALIGN 16
35 aesni_decrypt:
36 movups xmm2,XMMWORD[rcx]
37 mov eax,DWORD[240+r8]
38 movups xmm0,XMMWORD[r8]
39 movups xmm1,XMMWORD[16+r8]
40 lea r8,[32+r8]
41 xorps xmm2,xmm0
42 $L$oop_dec1_2:
43 DB 102,15,56,222,209
44 dec eax
45 movups xmm1,XMMWORD[r8]
46 lea r8,[16+r8]
47 jnz NEAR $L$oop_dec1_2
48 DB 102,15,56,223,209
49 pxor xmm0,xmm0
50 pxor xmm1,xmm1
51 movups XMMWORD[rdx],xmm2
52 pxor xmm2,xmm2
53 DB 0F3h,0C3h ;repret
54
55
56 ALIGN 16
57 _aesni_encrypt2:
58 movups xmm0,XMMWORD[rcx]
59 shl eax,4
60 movups xmm1,XMMWORD[16+rcx]
61 xorps xmm2,xmm0
62 xorps xmm3,xmm0
63 movups xmm0,XMMWORD[32+rcx]
64 lea rcx,[32+rax*1+rcx]
65 neg rax
66 add rax,16
67
68 $L$enc_loop2:
69 DB 102,15,56,220,209
70 DB 102,15,56,220,217
71 movups xmm1,XMMWORD[rax*1+rcx]
72 add rax,32
73 DB 102,15,56,220,208
74 DB 102,15,56,220,216
75 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
76 jnz NEAR $L$enc_loop2
77
78 DB 102,15,56,220,209
79 DB 102,15,56,220,217
80 DB 102,15,56,221,208
81 DB 102,15,56,221,216
82 DB 0F3h,0C3h ;repret
83
84
85 ALIGN 16
86 _aesni_decrypt2:
87 movups xmm0,XMMWORD[rcx]
88 shl eax,4
89 movups xmm1,XMMWORD[16+rcx]
90 xorps xmm2,xmm0
91 xorps xmm3,xmm0
92 movups xmm0,XMMWORD[32+rcx]
93 lea rcx,[32+rax*1+rcx]
94 neg rax
95 add rax,16
96
97 $L$dec_loop2:
98 DB 102,15,56,222,209
99 DB 102,15,56,222,217
100 movups xmm1,XMMWORD[rax*1+rcx]
101 add rax,32
102 DB 102,15,56,222,208
103 DB 102,15,56,222,216
104 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
105 jnz NEAR $L$dec_loop2
106
107 DB 102,15,56,222,209
108 DB 102,15,56,222,217
109 DB 102,15,56,223,208
110 DB 102,15,56,223,216
111 DB 0F3h,0C3h ;repret
112
113
114 ALIGN 16
115 _aesni_encrypt3:
116 movups xmm0,XMMWORD[rcx]
117 shl eax,4
118 movups xmm1,XMMWORD[16+rcx]
119 xorps xmm2,xmm0
120 xorps xmm3,xmm0
121 xorps xmm4,xmm0
122 movups xmm0,XMMWORD[32+rcx]
123 lea rcx,[32+rax*1+rcx]
124 neg rax
125 add rax,16
126
127 $L$enc_loop3:
128 DB 102,15,56,220,209
129 DB 102,15,56,220,217
130 DB 102,15,56,220,225
131 movups xmm1,XMMWORD[rax*1+rcx]
132 add rax,32
133 DB 102,15,56,220,208
134 DB 102,15,56,220,216
135 DB 102,15,56,220,224
136 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
137 jnz NEAR $L$enc_loop3
138
139 DB 102,15,56,220,209
140 DB 102,15,56,220,217
141 DB 102,15,56,220,225
142 DB 102,15,56,221,208
143 DB 102,15,56,221,216
144 DB 102,15,56,221,224
145 DB 0F3h,0C3h ;repret
146
147
148 ALIGN 16
149 _aesni_decrypt3:
150 movups xmm0,XMMWORD[rcx]
151 shl eax,4
152 movups xmm1,XMMWORD[16+rcx]
153 xorps xmm2,xmm0
154 xorps xmm3,xmm0
155 xorps xmm4,xmm0
156 movups xmm0,XMMWORD[32+rcx]
157 lea rcx,[32+rax*1+rcx]
158 neg rax
159 add rax,16
160
161 $L$dec_loop3:
162 DB 102,15,56,222,209
163 DB 102,15,56,222,217
164 DB 102,15,56,222,225
165 movups xmm1,XMMWORD[rax*1+rcx]
166 add rax,32
167 DB 102,15,56,222,208
168 DB 102,15,56,222,216
169 DB 102,15,56,222,224
170 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
171 jnz NEAR $L$dec_loop3
172
173 DB 102,15,56,222,209
174 DB 102,15,56,222,217
175 DB 102,15,56,222,225
176 DB 102,15,56,223,208
177 DB 102,15,56,223,216
178 DB 102,15,56,223,224
179 DB 0F3h,0C3h ;repret
180
181
182 ALIGN 16
183 _aesni_encrypt4:
184 movups xmm0,XMMWORD[rcx]
185 shl eax,4
186 movups xmm1,XMMWORD[16+rcx]
187 xorps xmm2,xmm0
188 xorps xmm3,xmm0
189 xorps xmm4,xmm0
190 xorps xmm5,xmm0
191 movups xmm0,XMMWORD[32+rcx]
192 lea rcx,[32+rax*1+rcx]
193 neg rax
194 DB 0x0f,0x1f,0x00
195 add rax,16
196
197 $L$enc_loop4:
198 DB 102,15,56,220,209
199 DB 102,15,56,220,217
200 DB 102,15,56,220,225
201 DB 102,15,56,220,233
202 movups xmm1,XMMWORD[rax*1+rcx]
203 add rax,32
204 DB 102,15,56,220,208
205 DB 102,15,56,220,216
206 DB 102,15,56,220,224
207 DB 102,15,56,220,232
208 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
209 jnz NEAR $L$enc_loop4
210
211 DB 102,15,56,220,209
212 DB 102,15,56,220,217
213 DB 102,15,56,220,225
214 DB 102,15,56,220,233
215 DB 102,15,56,221,208
216 DB 102,15,56,221,216
217 DB 102,15,56,221,224
218 DB 102,15,56,221,232
219 DB 0F3h,0C3h ;repret
220
221
222 ALIGN 16
223 _aesni_decrypt4:
224 movups xmm0,XMMWORD[rcx]
225 shl eax,4
226 movups xmm1,XMMWORD[16+rcx]
227 xorps xmm2,xmm0
228 xorps xmm3,xmm0
229 xorps xmm4,xmm0
230 xorps xmm5,xmm0
231 movups xmm0,XMMWORD[32+rcx]
232 lea rcx,[32+rax*1+rcx]
233 neg rax
234 DB 0x0f,0x1f,0x00
235 add rax,16
236
237 $L$dec_loop4:
238 DB 102,15,56,222,209
239 DB 102,15,56,222,217
240 DB 102,15,56,222,225
241 DB 102,15,56,222,233
242 movups xmm1,XMMWORD[rax*1+rcx]
243 add rax,32
244 DB 102,15,56,222,208
245 DB 102,15,56,222,216
246 DB 102,15,56,222,224
247 DB 102,15,56,222,232
248 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
249 jnz NEAR $L$dec_loop4
250
251 DB 102,15,56,222,209
252 DB 102,15,56,222,217
253 DB 102,15,56,222,225
254 DB 102,15,56,222,233
255 DB 102,15,56,223,208
256 DB 102,15,56,223,216
257 DB 102,15,56,223,224
258 DB 102,15,56,223,232
259 DB 0F3h,0C3h ;repret
260
261
262 ALIGN 16
263 _aesni_encrypt6:
264 movups xmm0,XMMWORD[rcx]
265 shl eax,4
266 movups xmm1,XMMWORD[16+rcx]
267 xorps xmm2,xmm0
268 pxor xmm3,xmm0
269 pxor xmm4,xmm0
270 DB 102,15,56,220,209
271 lea rcx,[32+rax*1+rcx]
272 neg rax
273 DB 102,15,56,220,217
274 pxor xmm5,xmm0
275 pxor xmm6,xmm0
276 DB 102,15,56,220,225
277 pxor xmm7,xmm0
278 movups xmm0,XMMWORD[rax*1+rcx]
279 add rax,16
280 jmp NEAR $L$enc_loop6_enter
281 ALIGN 16
282 $L$enc_loop6:
283 DB 102,15,56,220,209
284 DB 102,15,56,220,217
285 DB 102,15,56,220,225
286 $L$enc_loop6_enter:
287 DB 102,15,56,220,233
288 DB 102,15,56,220,241
289 DB 102,15,56,220,249
290 movups xmm1,XMMWORD[rax*1+rcx]
291 add rax,32
292 DB 102,15,56,220,208
293 DB 102,15,56,220,216
294 DB 102,15,56,220,224
295 DB 102,15,56,220,232
296 DB 102,15,56,220,240
297 DB 102,15,56,220,248
298 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
299 jnz NEAR $L$enc_loop6
300
301 DB 102,15,56,220,209
302 DB 102,15,56,220,217
303 DB 102,15,56,220,225
304 DB 102,15,56,220,233
305 DB 102,15,56,220,241
306 DB 102,15,56,220,249
307 DB 102,15,56,221,208
308 DB 102,15,56,221,216
309 DB 102,15,56,221,224
310 DB 102,15,56,221,232
311 DB 102,15,56,221,240
312 DB 102,15,56,221,248
313 DB 0F3h,0C3h ;repret
314
315
316 ALIGN 16
317 _aesni_decrypt6:
318 movups xmm0,XMMWORD[rcx]
319 shl eax,4
320 movups xmm1,XMMWORD[16+rcx]
321 xorps xmm2,xmm0
322 pxor xmm3,xmm0
323 pxor xmm4,xmm0
324 DB 102,15,56,222,209
325 lea rcx,[32+rax*1+rcx]
326 neg rax
327 DB 102,15,56,222,217
328 pxor xmm5,xmm0
329 pxor xmm6,xmm0
330 DB 102,15,56,222,225
331 pxor xmm7,xmm0
332 movups xmm0,XMMWORD[rax*1+rcx]
333 add rax,16
334 jmp NEAR $L$dec_loop6_enter
335 ALIGN 16
336 $L$dec_loop6:
337 DB 102,15,56,222,209
338 DB 102,15,56,222,217
339 DB 102,15,56,222,225
340 $L$dec_loop6_enter:
341 DB 102,15,56,222,233
342 DB 102,15,56,222,241
343 DB 102,15,56,222,249
344 movups xmm1,XMMWORD[rax*1+rcx]
345 add rax,32
346 DB 102,15,56,222,208
347 DB 102,15,56,222,216
348 DB 102,15,56,222,224
349 DB 102,15,56,222,232
350 DB 102,15,56,222,240
351 DB 102,15,56,222,248
352 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
353 jnz NEAR $L$dec_loop6
354
355 DB 102,15,56,222,209
356 DB 102,15,56,222,217
357 DB 102,15,56,222,225
358 DB 102,15,56,222,233
359 DB 102,15,56,222,241
360 DB 102,15,56,222,249
361 DB 102,15,56,223,208
362 DB 102,15,56,223,216
363 DB 102,15,56,223,224
364 DB 102,15,56,223,232
365 DB 102,15,56,223,240
366 DB 102,15,56,223,248
367 DB 0F3h,0C3h ;repret
368
369
370 ALIGN 16
371 _aesni_encrypt8:
372 movups xmm0,XMMWORD[rcx]
373 shl eax,4
374 movups xmm1,XMMWORD[16+rcx]
375 xorps xmm2,xmm0
376 xorps xmm3,xmm0
377 pxor xmm4,xmm0
378 pxor xmm5,xmm0
379 pxor xmm6,xmm0
380 lea rcx,[32+rax*1+rcx]
381 neg rax
382 DB 102,15,56,220,209
383 pxor xmm7,xmm0
384 pxor xmm8,xmm0
385 DB 102,15,56,220,217
386 pxor xmm9,xmm0
387 movups xmm0,XMMWORD[rax*1+rcx]
388 add rax,16
389 jmp NEAR $L$enc_loop8_inner
390 ALIGN 16
391 $L$enc_loop8:
392 DB 102,15,56,220,209
393 DB 102,15,56,220,217
394 $L$enc_loop8_inner:
395 DB 102,15,56,220,225
396 DB 102,15,56,220,233
397 DB 102,15,56,220,241
398 DB 102,15,56,220,249
399 DB 102,68,15,56,220,193
400 DB 102,68,15,56,220,201
401 $L$enc_loop8_enter:
402 movups xmm1,XMMWORD[rax*1+rcx]
403 add rax,32
404 DB 102,15,56,220,208
405 DB 102,15,56,220,216
406 DB 102,15,56,220,224
407 DB 102,15,56,220,232
408 DB 102,15,56,220,240
409 DB 102,15,56,220,248
410 DB 102,68,15,56,220,192
411 DB 102,68,15,56,220,200
412 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
413 jnz NEAR $L$enc_loop8
414
415 DB 102,15,56,220,209
416 DB 102,15,56,220,217
417 DB 102,15,56,220,225
418 DB 102,15,56,220,233
419 DB 102,15,56,220,241
420 DB 102,15,56,220,249
421 DB 102,68,15,56,220,193
422 DB 102,68,15,56,220,201
423 DB 102,15,56,221,208
424 DB 102,15,56,221,216
425 DB 102,15,56,221,224
426 DB 102,15,56,221,232
427 DB 102,15,56,221,240
428 DB 102,15,56,221,248
429 DB 102,68,15,56,221,192
430 DB 102,68,15,56,221,200
431 DB 0F3h,0C3h ;repret
432
433
434 ALIGN 16
435 _aesni_decrypt8:
436 movups xmm0,XMMWORD[rcx]
437 shl eax,4
438 movups xmm1,XMMWORD[16+rcx]
439 xorps xmm2,xmm0
440 xorps xmm3,xmm0
441 pxor xmm4,xmm0
442 pxor xmm5,xmm0
443 pxor xmm6,xmm0
444 lea rcx,[32+rax*1+rcx]
445 neg rax
446 DB 102,15,56,222,209
447 pxor xmm7,xmm0
448 pxor xmm8,xmm0
449 DB 102,15,56,222,217
450 pxor xmm9,xmm0
451 movups xmm0,XMMWORD[rax*1+rcx]
452 add rax,16
453 jmp NEAR $L$dec_loop8_inner
454 ALIGN 16
455 $L$dec_loop8:
456 DB 102,15,56,222,209
457 DB 102,15,56,222,217
458 $L$dec_loop8_inner:
459 DB 102,15,56,222,225
460 DB 102,15,56,222,233
461 DB 102,15,56,222,241
462 DB 102,15,56,222,249
463 DB 102,68,15,56,222,193
464 DB 102,68,15,56,222,201
465 $L$dec_loop8_enter:
466 movups xmm1,XMMWORD[rax*1+rcx]
467 add rax,32
468 DB 102,15,56,222,208
469 DB 102,15,56,222,216
470 DB 102,15,56,222,224
471 DB 102,15,56,222,232
472 DB 102,15,56,222,240
473 DB 102,15,56,222,248
474 DB 102,68,15,56,222,192
475 DB 102,68,15,56,222,200
476 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
477 jnz NEAR $L$dec_loop8
478
479 DB 102,15,56,222,209
480 DB 102,15,56,222,217
481 DB 102,15,56,222,225
482 DB 102,15,56,222,233
483 DB 102,15,56,222,241
484 DB 102,15,56,222,249
485 DB 102,68,15,56,222,193
486 DB 102,68,15,56,222,201
487 DB 102,15,56,223,208
488 DB 102,15,56,223,216
489 DB 102,15,56,223,224
490 DB 102,15,56,223,232
491 DB 102,15,56,223,240
492 DB 102,15,56,223,248
493 DB 102,68,15,56,223,192
494 DB 102,68,15,56,223,200
495 DB 0F3h,0C3h ;repret
496
497 global aesni_ecb_encrypt
498
499 ALIGN 16
500 aesni_ecb_encrypt:
501 mov QWORD[8+rsp],rdi ;WIN64 prologue
502 mov QWORD[16+rsp],rsi
503 mov rax,rsp
504 $L$SEH_begin_aesni_ecb_encrypt:
505 mov rdi,rcx
506 mov rsi,rdx
507 mov rdx,r8
508 mov rcx,r9
509 mov r8,QWORD[40+rsp]
510
511
512 lea rsp,[((-88))+rsp]
513 movaps XMMWORD[rsp],xmm6
514 movaps XMMWORD[16+rsp],xmm7
515 movaps XMMWORD[32+rsp],xmm8
516 movaps XMMWORD[48+rsp],xmm9
517 $L$ecb_enc_body:
518 and rdx,-16
519 jz NEAR $L$ecb_ret
520
521 mov eax,DWORD[240+rcx]
522 movups xmm0,XMMWORD[rcx]
523 mov r11,rcx
524 mov r10d,eax
525 test r8d,r8d
526 jz NEAR $L$ecb_decrypt
527
528 cmp rdx,0x80
529 jb NEAR $L$ecb_enc_tail
530
531 movdqu xmm2,XMMWORD[rdi]
532 movdqu xmm3,XMMWORD[16+rdi]
533 movdqu xmm4,XMMWORD[32+rdi]
534 movdqu xmm5,XMMWORD[48+rdi]
535 movdqu xmm6,XMMWORD[64+rdi]
536 movdqu xmm7,XMMWORD[80+rdi]
537 movdqu xmm8,XMMWORD[96+rdi]
538 movdqu xmm9,XMMWORD[112+rdi]
539 lea rdi,[128+rdi]
540 sub rdx,0x80
541 jmp NEAR $L$ecb_enc_loop8_enter
542 ALIGN 16
543 $L$ecb_enc_loop8:
544 movups XMMWORD[rsi],xmm2
545 mov rcx,r11
546 movdqu xmm2,XMMWORD[rdi]
547 mov eax,r10d
548 movups XMMWORD[16+rsi],xmm3
549 movdqu xmm3,XMMWORD[16+rdi]
550 movups XMMWORD[32+rsi],xmm4
551 movdqu xmm4,XMMWORD[32+rdi]
552 movups XMMWORD[48+rsi],xmm5
553 movdqu xmm5,XMMWORD[48+rdi]
554 movups XMMWORD[64+rsi],xmm6
555 movdqu xmm6,XMMWORD[64+rdi]
556 movups XMMWORD[80+rsi],xmm7
557 movdqu xmm7,XMMWORD[80+rdi]
558 movups XMMWORD[96+rsi],xmm8
559 movdqu xmm8,XMMWORD[96+rdi]
560 movups XMMWORD[112+rsi],xmm9
561 lea rsi,[128+rsi]
562 movdqu xmm9,XMMWORD[112+rdi]
563 lea rdi,[128+rdi]
564 $L$ecb_enc_loop8_enter:
565
566 call _aesni_encrypt8
567
568 sub rdx,0x80
569 jnc NEAR $L$ecb_enc_loop8
570
571 movups XMMWORD[rsi],xmm2
572 mov rcx,r11
573 movups XMMWORD[16+rsi],xmm3
574 mov eax,r10d
575 movups XMMWORD[32+rsi],xmm4
576 movups XMMWORD[48+rsi],xmm5
577 movups XMMWORD[64+rsi],xmm6
578 movups XMMWORD[80+rsi],xmm7
579 movups XMMWORD[96+rsi],xmm8
580 movups XMMWORD[112+rsi],xmm9
581 lea rsi,[128+rsi]
582 add rdx,0x80
583 jz NEAR $L$ecb_ret
584
585 $L$ecb_enc_tail:
586 movups xmm2,XMMWORD[rdi]
587 cmp rdx,0x20
588 jb NEAR $L$ecb_enc_one
589 movups xmm3,XMMWORD[16+rdi]
590 je NEAR $L$ecb_enc_two
591 movups xmm4,XMMWORD[32+rdi]
592 cmp rdx,0x40
593 jb NEAR $L$ecb_enc_three
594 movups xmm5,XMMWORD[48+rdi]
595 je NEAR $L$ecb_enc_four
596 movups xmm6,XMMWORD[64+rdi]
597 cmp rdx,0x60
598 jb NEAR $L$ecb_enc_five
599 movups xmm7,XMMWORD[80+rdi]
600 je NEAR $L$ecb_enc_six
601 movdqu xmm8,XMMWORD[96+rdi]
602 xorps xmm9,xmm9
603 call _aesni_encrypt8
604 movups XMMWORD[rsi],xmm2
605 movups XMMWORD[16+rsi],xmm3
606 movups XMMWORD[32+rsi],xmm4
607 movups XMMWORD[48+rsi],xmm5
608 movups XMMWORD[64+rsi],xmm6
609 movups XMMWORD[80+rsi],xmm7
610 movups XMMWORD[96+rsi],xmm8
611 jmp NEAR $L$ecb_ret
612 ALIGN 16
613 $L$ecb_enc_one:
614 movups xmm0,XMMWORD[rcx]
615 movups xmm1,XMMWORD[16+rcx]
616 lea rcx,[32+rcx]
617 xorps xmm2,xmm0
618 $L$oop_enc1_3:
619 DB 102,15,56,220,209
620 dec eax
621 movups xmm1,XMMWORD[rcx]
622 lea rcx,[16+rcx]
623 jnz NEAR $L$oop_enc1_3
624 DB 102,15,56,221,209
625 movups XMMWORD[rsi],xmm2
626 jmp NEAR $L$ecb_ret
627 ALIGN 16
628 $L$ecb_enc_two:
629 call _aesni_encrypt2
630 movups XMMWORD[rsi],xmm2
631 movups XMMWORD[16+rsi],xmm3
632 jmp NEAR $L$ecb_ret
633 ALIGN 16
634 $L$ecb_enc_three:
635 call _aesni_encrypt3
636 movups XMMWORD[rsi],xmm2
637 movups XMMWORD[16+rsi],xmm3
638 movups XMMWORD[32+rsi],xmm4
639 jmp NEAR $L$ecb_ret
640 ALIGN 16
641 $L$ecb_enc_four:
642 call _aesni_encrypt4
643 movups XMMWORD[rsi],xmm2
644 movups XMMWORD[16+rsi],xmm3
645 movups XMMWORD[32+rsi],xmm4
646 movups XMMWORD[48+rsi],xmm5
647 jmp NEAR $L$ecb_ret
648 ALIGN 16
649 $L$ecb_enc_five:
650 xorps xmm7,xmm7
651 call _aesni_encrypt6
652 movups XMMWORD[rsi],xmm2
653 movups XMMWORD[16+rsi],xmm3
654 movups XMMWORD[32+rsi],xmm4
655 movups XMMWORD[48+rsi],xmm5
656 movups XMMWORD[64+rsi],xmm6
657 jmp NEAR $L$ecb_ret
658 ALIGN 16
659 $L$ecb_enc_six:
660 call _aesni_encrypt6
661 movups XMMWORD[rsi],xmm2
662 movups XMMWORD[16+rsi],xmm3
663 movups XMMWORD[32+rsi],xmm4
664 movups XMMWORD[48+rsi],xmm5
665 movups XMMWORD[64+rsi],xmm6
666 movups XMMWORD[80+rsi],xmm7
667 jmp NEAR $L$ecb_ret
668
669 ALIGN 16
670 $L$ecb_decrypt:
671 cmp rdx,0x80
672 jb NEAR $L$ecb_dec_tail
673
674 movdqu xmm2,XMMWORD[rdi]
675 movdqu xmm3,XMMWORD[16+rdi]
676 movdqu xmm4,XMMWORD[32+rdi]
677 movdqu xmm5,XMMWORD[48+rdi]
678 movdqu xmm6,XMMWORD[64+rdi]
679 movdqu xmm7,XMMWORD[80+rdi]
680 movdqu xmm8,XMMWORD[96+rdi]
681 movdqu xmm9,XMMWORD[112+rdi]
682 lea rdi,[128+rdi]
683 sub rdx,0x80
684 jmp NEAR $L$ecb_dec_loop8_enter
685 ALIGN 16
686 $L$ecb_dec_loop8:
687 movups XMMWORD[rsi],xmm2
688 mov rcx,r11
689 movdqu xmm2,XMMWORD[rdi]
690 mov eax,r10d
691 movups XMMWORD[16+rsi],xmm3
692 movdqu xmm3,XMMWORD[16+rdi]
693 movups XMMWORD[32+rsi],xmm4
694 movdqu xmm4,XMMWORD[32+rdi]
695 movups XMMWORD[48+rsi],xmm5
696 movdqu xmm5,XMMWORD[48+rdi]
697 movups XMMWORD[64+rsi],xmm6
698 movdqu xmm6,XMMWORD[64+rdi]
699 movups XMMWORD[80+rsi],xmm7
700 movdqu xmm7,XMMWORD[80+rdi]
701 movups XMMWORD[96+rsi],xmm8
702 movdqu xmm8,XMMWORD[96+rdi]
703 movups XMMWORD[112+rsi],xmm9
704 lea rsi,[128+rsi]
705 movdqu xmm9,XMMWORD[112+rdi]
706 lea rdi,[128+rdi]
707 $L$ecb_dec_loop8_enter:
708
709 call _aesni_decrypt8
710
711 movups xmm0,XMMWORD[r11]
712 sub rdx,0x80
713 jnc NEAR $L$ecb_dec_loop8
714
715 movups XMMWORD[rsi],xmm2
716 pxor xmm2,xmm2
717 mov rcx,r11
718 movups XMMWORD[16+rsi],xmm3
719 pxor xmm3,xmm3
720 mov eax,r10d
721 movups XMMWORD[32+rsi],xmm4
722 pxor xmm4,xmm4
723 movups XMMWORD[48+rsi],xmm5
724 pxor xmm5,xmm5
725 movups XMMWORD[64+rsi],xmm6
726 pxor xmm6,xmm6
727 movups XMMWORD[80+rsi],xmm7
728 pxor xmm7,xmm7
729 movups XMMWORD[96+rsi],xmm8
730 pxor xmm8,xmm8
731 movups XMMWORD[112+rsi],xmm9
732 pxor xmm9,xmm9
733 lea rsi,[128+rsi]
734 add rdx,0x80
735 jz NEAR $L$ecb_ret
736
737 $L$ecb_dec_tail:
738 movups xmm2,XMMWORD[rdi]
739 cmp rdx,0x20
740 jb NEAR $L$ecb_dec_one
741 movups xmm3,XMMWORD[16+rdi]
742 je NEAR $L$ecb_dec_two
743 movups xmm4,XMMWORD[32+rdi]
744 cmp rdx,0x40
745 jb NEAR $L$ecb_dec_three
746 movups xmm5,XMMWORD[48+rdi]
747 je NEAR $L$ecb_dec_four
748 movups xmm6,XMMWORD[64+rdi]
749 cmp rdx,0x60
750 jb NEAR $L$ecb_dec_five
751 movups xmm7,XMMWORD[80+rdi]
752 je NEAR $L$ecb_dec_six
753 movups xmm8,XMMWORD[96+rdi]
754 movups xmm0,XMMWORD[rcx]
755 xorps xmm9,xmm9
756 call _aesni_decrypt8
757 movups XMMWORD[rsi],xmm2
758 pxor xmm2,xmm2
759 movups XMMWORD[16+rsi],xmm3
760 pxor xmm3,xmm3
761 movups XMMWORD[32+rsi],xmm4
762 pxor xmm4,xmm4
763 movups XMMWORD[48+rsi],xmm5
764 pxor xmm5,xmm5
765 movups XMMWORD[64+rsi],xmm6
766 pxor xmm6,xmm6
767 movups XMMWORD[80+rsi],xmm7
768 pxor xmm7,xmm7
769 movups XMMWORD[96+rsi],xmm8
770 pxor xmm8,xmm8
771 pxor xmm9,xmm9
772 jmp NEAR $L$ecb_ret
773 ALIGN 16
774 $L$ecb_dec_one:
775 movups xmm0,XMMWORD[rcx]
776 movups xmm1,XMMWORD[16+rcx]
777 lea rcx,[32+rcx]
778 xorps xmm2,xmm0
779 $L$oop_dec1_4:
780 DB 102,15,56,222,209
781 dec eax
782 movups xmm1,XMMWORD[rcx]
783 lea rcx,[16+rcx]
784 jnz NEAR $L$oop_dec1_4
785 DB 102,15,56,223,209
786 movups XMMWORD[rsi],xmm2
787 pxor xmm2,xmm2
788 jmp NEAR $L$ecb_ret
789 ALIGN 16
790 $L$ecb_dec_two:
791 call _aesni_decrypt2
792 movups XMMWORD[rsi],xmm2
793 pxor xmm2,xmm2
794 movups XMMWORD[16+rsi],xmm3
795 pxor xmm3,xmm3
796 jmp NEAR $L$ecb_ret
797 ALIGN 16
798 $L$ecb_dec_three:
799 call _aesni_decrypt3
800 movups XMMWORD[rsi],xmm2
801 pxor xmm2,xmm2
802 movups XMMWORD[16+rsi],xmm3
803 pxor xmm3,xmm3
804 movups XMMWORD[32+rsi],xmm4
805 pxor xmm4,xmm4
806 jmp NEAR $L$ecb_ret
807 ALIGN 16
808 $L$ecb_dec_four:
809 call _aesni_decrypt4
810 movups XMMWORD[rsi],xmm2
811 pxor xmm2,xmm2
812 movups XMMWORD[16+rsi],xmm3
813 pxor xmm3,xmm3
814 movups XMMWORD[32+rsi],xmm4
815 pxor xmm4,xmm4
816 movups XMMWORD[48+rsi],xmm5
817 pxor xmm5,xmm5
818 jmp NEAR $L$ecb_ret
819 ALIGN 16
820 $L$ecb_dec_five:
821 xorps xmm7,xmm7
822 call _aesni_decrypt6
823 movups XMMWORD[rsi],xmm2
824 pxor xmm2,xmm2
825 movups XMMWORD[16+rsi],xmm3
826 pxor xmm3,xmm3
827 movups XMMWORD[32+rsi],xmm4
828 pxor xmm4,xmm4
829 movups XMMWORD[48+rsi],xmm5
830 pxor xmm5,xmm5
831 movups XMMWORD[64+rsi],xmm6
832 pxor xmm6,xmm6
833 pxor xmm7,xmm7
834 jmp NEAR $L$ecb_ret
835 ALIGN 16
836 $L$ecb_dec_six:
837 call _aesni_decrypt6
838 movups XMMWORD[rsi],xmm2
839 pxor xmm2,xmm2
840 movups XMMWORD[16+rsi],xmm3
841 pxor xmm3,xmm3
842 movups XMMWORD[32+rsi],xmm4
843 pxor xmm4,xmm4
844 movups XMMWORD[48+rsi],xmm5
845 pxor xmm5,xmm5
846 movups XMMWORD[64+rsi],xmm6
847 pxor xmm6,xmm6
848 movups XMMWORD[80+rsi],xmm7
849 pxor xmm7,xmm7
850
851 $L$ecb_ret:
852 xorps xmm0,xmm0
853 pxor xmm1,xmm1
854 movaps xmm6,XMMWORD[rsp]
855 movaps XMMWORD[rsp],xmm0
856 movaps xmm7,XMMWORD[16+rsp]
857 movaps XMMWORD[16+rsp],xmm0
858 movaps xmm8,XMMWORD[32+rsp]
859 movaps XMMWORD[32+rsp],xmm0
860 movaps xmm9,XMMWORD[48+rsp]
861 movaps XMMWORD[48+rsp],xmm0
862 lea rsp,[88+rsp]
863 $L$ecb_enc_ret:
864 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
865 mov rsi,QWORD[16+rsp]
866 DB 0F3h,0C3h ;repret
867 $L$SEH_end_aesni_ecb_encrypt:
868 global aesni_ccm64_encrypt_blocks
869
870 ALIGN 16
871 aesni_ccm64_encrypt_blocks:
872 mov QWORD[8+rsp],rdi ;WIN64 prologue
873 mov QWORD[16+rsp],rsi
874 mov rax,rsp
875 $L$SEH_begin_aesni_ccm64_encrypt_blocks:
876 mov rdi,rcx
877 mov rsi,rdx
878 mov rdx,r8
879 mov rcx,r9
880 mov r8,QWORD[40+rsp]
881 mov r9,QWORD[48+rsp]
882
883
884 lea rsp,[((-88))+rsp]
885 movaps XMMWORD[rsp],xmm6
886 movaps XMMWORD[16+rsp],xmm7
887 movaps XMMWORD[32+rsp],xmm8
888 movaps XMMWORD[48+rsp],xmm9
889 $L$ccm64_enc_body:
890 mov eax,DWORD[240+rcx]
891 movdqu xmm6,XMMWORD[r8]
892 movdqa xmm9,XMMWORD[$L$increment64]
893 movdqa xmm7,XMMWORD[$L$bswap_mask]
894
895 shl eax,4
896 mov r10d,16
897 lea r11,[rcx]
898 movdqu xmm3,XMMWORD[r9]
899 movdqa xmm2,xmm6
900 lea rcx,[32+rax*1+rcx]
901 DB 102,15,56,0,247
902 sub r10,rax
903 jmp NEAR $L$ccm64_enc_outer
904 ALIGN 16
905 $L$ccm64_enc_outer:
906 movups xmm0,XMMWORD[r11]
907 mov rax,r10
908 movups xmm8,XMMWORD[rdi]
909
910 xorps xmm2,xmm0
911 movups xmm1,XMMWORD[16+r11]
912 xorps xmm0,xmm8
913 xorps xmm3,xmm0
914 movups xmm0,XMMWORD[32+r11]
915
916 $L$ccm64_enc2_loop:
917 DB 102,15,56,220,209
918 DB 102,15,56,220,217
919 movups xmm1,XMMWORD[rax*1+rcx]
920 add rax,32
921 DB 102,15,56,220,208
922 DB 102,15,56,220,216
923 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
924 jnz NEAR $L$ccm64_enc2_loop
925 DB 102,15,56,220,209
926 DB 102,15,56,220,217
927 paddq xmm6,xmm9
928 dec rdx
929 DB 102,15,56,221,208
930 DB 102,15,56,221,216
931
932 lea rdi,[16+rdi]
933 xorps xmm8,xmm2
934 movdqa xmm2,xmm6
935 movups XMMWORD[rsi],xmm8
936 DB 102,15,56,0,215
937 lea rsi,[16+rsi]
938 jnz NEAR $L$ccm64_enc_outer
939
940 pxor xmm0,xmm0
941 pxor xmm1,xmm1
942 pxor xmm2,xmm2
943 movups XMMWORD[r9],xmm3
944 pxor xmm3,xmm3
945 pxor xmm8,xmm8
946 pxor xmm6,xmm6
947 movaps xmm6,XMMWORD[rsp]
948 movaps XMMWORD[rsp],xmm0
949 movaps xmm7,XMMWORD[16+rsp]
950 movaps XMMWORD[16+rsp],xmm0
951 movaps xmm8,XMMWORD[32+rsp]
952 movaps XMMWORD[32+rsp],xmm0
953 movaps xmm9,XMMWORD[48+rsp]
954 movaps XMMWORD[48+rsp],xmm0
955 lea rsp,[88+rsp]
956 $L$ccm64_enc_ret:
957 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
958 mov rsi,QWORD[16+rsp]
959 DB 0F3h,0C3h ;repret
960 $L$SEH_end_aesni_ccm64_encrypt_blocks:
961 global aesni_ccm64_decrypt_blocks
962
963 ALIGN 16
964 aesni_ccm64_decrypt_blocks:
965 mov QWORD[8+rsp],rdi ;WIN64 prologue
966 mov QWORD[16+rsp],rsi
967 mov rax,rsp
968 $L$SEH_begin_aesni_ccm64_decrypt_blocks:
969 mov rdi,rcx
970 mov rsi,rdx
971 mov rdx,r8
972 mov rcx,r9
973 mov r8,QWORD[40+rsp]
974 mov r9,QWORD[48+rsp]
975
976
977 lea rsp,[((-88))+rsp]
978 movaps XMMWORD[rsp],xmm6
979 movaps XMMWORD[16+rsp],xmm7
980 movaps XMMWORD[32+rsp],xmm8
981 movaps XMMWORD[48+rsp],xmm9
982 $L$ccm64_dec_body:
983 mov eax,DWORD[240+rcx]
984 movups xmm6,XMMWORD[r8]
985 movdqu xmm3,XMMWORD[r9]
986 movdqa xmm9,XMMWORD[$L$increment64]
987 movdqa xmm7,XMMWORD[$L$bswap_mask]
988
989 movaps xmm2,xmm6
990 mov r10d,eax
991 mov r11,rcx
992 DB 102,15,56,0,247
993 movups xmm0,XMMWORD[rcx]
994 movups xmm1,XMMWORD[16+rcx]
995 lea rcx,[32+rcx]
996 xorps xmm2,xmm0
997 $L$oop_enc1_5:
998 DB 102,15,56,220,209
999 dec eax
1000 movups xmm1,XMMWORD[rcx]
1001 lea rcx,[16+rcx]
1002 jnz NEAR $L$oop_enc1_5
1003 DB 102,15,56,221,209
1004 shl r10d,4
1005 mov eax,16
1006 movups xmm8,XMMWORD[rdi]
1007 paddq xmm6,xmm9
1008 lea rdi,[16+rdi]
1009 sub rax,r10
1010 lea rcx,[32+r10*1+r11]
1011 mov r10,rax
1012 jmp NEAR $L$ccm64_dec_outer
1013 ALIGN 16
1014 $L$ccm64_dec_outer:
1015 xorps xmm8,xmm2
1016 movdqa xmm2,xmm6
1017 movups XMMWORD[rsi],xmm8
1018 lea rsi,[16+rsi]
1019 DB 102,15,56,0,215
1020
1021 sub rdx,1
1022 jz NEAR $L$ccm64_dec_break
1023
1024 movups xmm0,XMMWORD[r11]
1025 mov rax,r10
1026 movups xmm1,XMMWORD[16+r11]
1027 xorps xmm8,xmm0
1028 xorps xmm2,xmm0
1029 xorps xmm3,xmm8
1030 movups xmm0,XMMWORD[32+r11]
1031 jmp NEAR $L$ccm64_dec2_loop
1032 ALIGN 16
1033 $L$ccm64_dec2_loop:
1034 DB 102,15,56,220,209
1035 DB 102,15,56,220,217
1036 movups xmm1,XMMWORD[rax*1+rcx]
1037 add rax,32
1038 DB 102,15,56,220,208
1039 DB 102,15,56,220,216
1040 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
1041 jnz NEAR $L$ccm64_dec2_loop
1042 movups xmm8,XMMWORD[rdi]
1043 paddq xmm6,xmm9
1044 DB 102,15,56,220,209
1045 DB 102,15,56,220,217
1046 DB 102,15,56,221,208
1047 DB 102,15,56,221,216
1048 lea rdi,[16+rdi]
1049 jmp NEAR $L$ccm64_dec_outer
1050
1051 ALIGN 16
1052 $L$ccm64_dec_break:
1053
1054 mov eax,DWORD[240+r11]
1055 movups xmm0,XMMWORD[r11]
1056 movups xmm1,XMMWORD[16+r11]
1057 xorps xmm8,xmm0
1058 lea r11,[32+r11]
1059 xorps xmm3,xmm8
1060 $L$oop_enc1_6:
1061 DB 102,15,56,220,217
1062 dec eax
1063 movups xmm1,XMMWORD[r11]
1064 lea r11,[16+r11]
1065 jnz NEAR $L$oop_enc1_6
1066 DB 102,15,56,221,217
1067 pxor xmm0,xmm0
1068 pxor xmm1,xmm1
1069 pxor xmm2,xmm2
1070 movups XMMWORD[r9],xmm3
1071 pxor xmm3,xmm3
1072 pxor xmm8,xmm8
1073 pxor xmm6,xmm6
1074 movaps xmm6,XMMWORD[rsp]
1075 movaps XMMWORD[rsp],xmm0
1076 movaps xmm7,XMMWORD[16+rsp]
1077 movaps XMMWORD[16+rsp],xmm0
1078 movaps xmm8,XMMWORD[32+rsp]
1079 movaps XMMWORD[32+rsp],xmm0
1080 movaps xmm9,XMMWORD[48+rsp]
1081 movaps XMMWORD[48+rsp],xmm0
1082 lea rsp,[88+rsp]
1083 $L$ccm64_dec_ret:
1084 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
1085 mov rsi,QWORD[16+rsp]
1086 DB 0F3h,0C3h ;repret
1087 $L$SEH_end_aesni_ccm64_decrypt_blocks:
1088 global aesni_ctr32_encrypt_blocks
1089
1090 ALIGN 16
1091 aesni_ctr32_encrypt_blocks:
1092 mov QWORD[8+rsp],rdi ;WIN64 prologue
1093 mov QWORD[16+rsp],rsi
1094 mov rax,rsp
1095 $L$SEH_begin_aesni_ctr32_encrypt_blocks:
1096 mov rdi,rcx
1097 mov rsi,rdx
1098 mov rdx,r8
1099 mov rcx,r9
1100 mov r8,QWORD[40+rsp]
1101
1102
1103 cmp rdx,1
1104 jne NEAR $L$ctr32_bulk
1105
1106
1107
1108 movups xmm2,XMMWORD[r8]
1109 movups xmm3,XMMWORD[rdi]
1110 mov edx,DWORD[240+rcx]
1111 movups xmm0,XMMWORD[rcx]
1112 movups xmm1,XMMWORD[16+rcx]
1113 lea rcx,[32+rcx]
1114 xorps xmm2,xmm0
1115 $L$oop_enc1_7:
1116 DB 102,15,56,220,209
1117 dec edx
1118 movups xmm1,XMMWORD[rcx]
1119 lea rcx,[16+rcx]
1120 jnz NEAR $L$oop_enc1_7
1121 DB 102,15,56,221,209
1122 pxor xmm0,xmm0
1123 pxor xmm1,xmm1
1124 xorps xmm2,xmm3
1125 pxor xmm3,xmm3
1126 movups XMMWORD[rsi],xmm2
1127 xorps xmm2,xmm2
1128 jmp NEAR $L$ctr32_epilogue
1129
1130 ALIGN 16
1131 $L$ctr32_bulk:
1132 lea r11,[rsp]
1133 push rbp
1134 sub rsp,288
1135 and rsp,-16
1136 movaps XMMWORD[(-168)+r11],xmm6
1137 movaps XMMWORD[(-152)+r11],xmm7
1138 movaps XMMWORD[(-136)+r11],xmm8
1139 movaps XMMWORD[(-120)+r11],xmm9
1140 movaps XMMWORD[(-104)+r11],xmm10
1141 movaps XMMWORD[(-88)+r11],xmm11
1142 movaps XMMWORD[(-72)+r11],xmm12
1143 movaps XMMWORD[(-56)+r11],xmm13
1144 movaps XMMWORD[(-40)+r11],xmm14
1145 movaps XMMWORD[(-24)+r11],xmm15
1146 $L$ctr32_body:
1147
1148
1149
1150
1151 movdqu xmm2,XMMWORD[r8]
1152 movdqu xmm0,XMMWORD[rcx]
1153 mov r8d,DWORD[12+r8]
1154 pxor xmm2,xmm0
1155 mov ebp,DWORD[12+rcx]
1156 movdqa XMMWORD[rsp],xmm2
1157 bswap r8d
1158 movdqa xmm3,xmm2
1159 movdqa xmm4,xmm2
1160 movdqa xmm5,xmm2
1161 movdqa XMMWORD[64+rsp],xmm2
1162 movdqa XMMWORD[80+rsp],xmm2
1163 movdqa XMMWORD[96+rsp],xmm2
1164 mov r10,rdx
1165 movdqa XMMWORD[112+rsp],xmm2
1166
1167 lea rax,[1+r8]
1168 lea rdx,[2+r8]
1169 bswap eax
1170 bswap edx
1171 xor eax,ebp
1172 xor edx,ebp
1173 DB 102,15,58,34,216,3
1174 lea rax,[3+r8]
1175 movdqa XMMWORD[16+rsp],xmm3
1176 DB 102,15,58,34,226,3
1177 bswap eax
1178 mov rdx,r10
1179 lea r10,[4+r8]
1180 movdqa XMMWORD[32+rsp],xmm4
1181 xor eax,ebp
1182 bswap r10d
1183 DB 102,15,58,34,232,3
1184 xor r10d,ebp
1185 movdqa XMMWORD[48+rsp],xmm5
1186 lea r9,[5+r8]
1187 mov DWORD[((64+12))+rsp],r10d
1188 bswap r9d
1189 lea r10,[6+r8]
1190 mov eax,DWORD[240+rcx]
1191 xor r9d,ebp
1192 bswap r10d
1193 mov DWORD[((80+12))+rsp],r9d
1194 xor r10d,ebp
1195 lea r9,[7+r8]
1196 mov DWORD[((96+12))+rsp],r10d
1197 bswap r9d
1198 mov r10d,DWORD[((OPENSSL_ia32cap_P+4))]
1199 xor r9d,ebp
1200 and r10d,71303168
1201 mov DWORD[((112+12))+rsp],r9d
1202
1203 movups xmm1,XMMWORD[16+rcx]
1204
1205 movdqa xmm6,XMMWORD[64+rsp]
1206 movdqa xmm7,XMMWORD[80+rsp]
1207
1208 cmp rdx,8
1209 jb NEAR $L$ctr32_tail
1210
1211 sub rdx,6
1212 cmp r10d,4194304
1213 je NEAR $L$ctr32_6x
1214
1215 lea rcx,[128+rcx]
1216 sub rdx,2
1217 jmp NEAR $L$ctr32_loop8
1218
1219 ALIGN 16
1220 $L$ctr32_6x:
1221 shl eax,4
1222 mov r10d,48
1223 bswap ebp
1224 lea rcx,[32+rax*1+rcx]
1225 sub r10,rax
1226 jmp NEAR $L$ctr32_loop6
1227
1228 ALIGN 16
1229 $L$ctr32_loop6:
1230 add r8d,6
1231 movups xmm0,XMMWORD[((-48))+r10*1+rcx]
1232 DB 102,15,56,220,209
1233 mov eax,r8d
1234 xor eax,ebp
1235 DB 102,15,56,220,217
1236 DB 0x0f,0x38,0xf1,0x44,0x24,12
1237 lea eax,[1+r8]
1238 DB 102,15,56,220,225
1239 xor eax,ebp
1240 DB 0x0f,0x38,0xf1,0x44,0x24,28
1241 DB 102,15,56,220,233
1242 lea eax,[2+r8]
1243 xor eax,ebp
1244 DB 102,15,56,220,241
1245 DB 0x0f,0x38,0xf1,0x44,0x24,44
1246 lea eax,[3+r8]
1247 DB 102,15,56,220,249
1248 movups xmm1,XMMWORD[((-32))+r10*1+rcx]
1249 xor eax,ebp
1250
1251 DB 102,15,56,220,208
1252 DB 0x0f,0x38,0xf1,0x44,0x24,60
1253 lea eax,[4+r8]
1254 DB 102,15,56,220,216
1255 xor eax,ebp
1256 DB 0x0f,0x38,0xf1,0x44,0x24,76
1257 DB 102,15,56,220,224
1258 lea eax,[5+r8]
1259 xor eax,ebp
1260 DB 102,15,56,220,232
1261 DB 0x0f,0x38,0xf1,0x44,0x24,92
1262 mov rax,r10
1263 DB 102,15,56,220,240
1264 DB 102,15,56,220,248
1265 movups xmm0,XMMWORD[((-16))+r10*1+rcx]
1266
1267 call $L$enc_loop6
1268
1269 movdqu xmm8,XMMWORD[rdi]
1270 movdqu xmm9,XMMWORD[16+rdi]
1271 movdqu xmm10,XMMWORD[32+rdi]
1272 movdqu xmm11,XMMWORD[48+rdi]
1273 movdqu xmm12,XMMWORD[64+rdi]
1274 movdqu xmm13,XMMWORD[80+rdi]
1275 lea rdi,[96+rdi]
1276 movups xmm1,XMMWORD[((-64))+r10*1+rcx]
1277 pxor xmm8,xmm2
1278 movaps xmm2,XMMWORD[rsp]
1279 pxor xmm9,xmm3
1280 movaps xmm3,XMMWORD[16+rsp]
1281 pxor xmm10,xmm4
1282 movaps xmm4,XMMWORD[32+rsp]
1283 pxor xmm11,xmm5
1284 movaps xmm5,XMMWORD[48+rsp]
1285 pxor xmm12,xmm6
1286 movaps xmm6,XMMWORD[64+rsp]
1287 pxor xmm13,xmm7
1288 movaps xmm7,XMMWORD[80+rsp]
1289 movdqu XMMWORD[rsi],xmm8
1290 movdqu XMMWORD[16+rsi],xmm9
1291 movdqu XMMWORD[32+rsi],xmm10
1292 movdqu XMMWORD[48+rsi],xmm11
1293 movdqu XMMWORD[64+rsi],xmm12
1294 movdqu XMMWORD[80+rsi],xmm13
1295 lea rsi,[96+rsi]
1296
1297 sub rdx,6
1298 jnc NEAR $L$ctr32_loop6
1299
1300 add rdx,6
1301 jz NEAR $L$ctr32_done
1302
1303 lea eax,[((-48))+r10]
1304 lea rcx,[((-80))+r10*1+rcx]
1305 neg eax
1306 shr eax,4
1307 jmp NEAR $L$ctr32_tail
1308
1309 ALIGN 32
1310 $L$ctr32_loop8:
1311 add r8d,8
1312 movdqa xmm8,XMMWORD[96+rsp]
1313 DB 102,15,56,220,209
1314 mov r9d,r8d
1315 movdqa xmm9,XMMWORD[112+rsp]
1316 DB 102,15,56,220,217
1317 bswap r9d
1318 movups xmm0,XMMWORD[((32-128))+rcx]
1319 DB 102,15,56,220,225
1320 xor r9d,ebp
1321 nop
1322 DB 102,15,56,220,233
1323 mov DWORD[((0+12))+rsp],r9d
1324 lea r9,[1+r8]
1325 DB 102,15,56,220,241
1326 DB 102,15,56,220,249
1327 DB 102,68,15,56,220,193
1328 DB 102,68,15,56,220,201
1329 movups xmm1,XMMWORD[((48-128))+rcx]
1330 bswap r9d
1331 DB 102,15,56,220,208
1332 DB 102,15,56,220,216
1333 xor r9d,ebp
1334 DB 0x66,0x90
1335 DB 102,15,56,220,224
1336 DB 102,15,56,220,232
1337 mov DWORD[((16+12))+rsp],r9d
1338 lea r9,[2+r8]
1339 DB 102,15,56,220,240
1340 DB 102,15,56,220,248
1341 DB 102,68,15,56,220,192
1342 DB 102,68,15,56,220,200
1343 movups xmm0,XMMWORD[((64-128))+rcx]
1344 bswap r9d
1345 DB 102,15,56,220,209
1346 DB 102,15,56,220,217
1347 xor r9d,ebp
1348 DB 0x66,0x90
1349 DB 102,15,56,220,225
1350 DB 102,15,56,220,233
1351 mov DWORD[((32+12))+rsp],r9d
1352 lea r9,[3+r8]
1353 DB 102,15,56,220,241
1354 DB 102,15,56,220,249
1355 DB 102,68,15,56,220,193
1356 DB 102,68,15,56,220,201
1357 movups xmm1,XMMWORD[((80-128))+rcx]
1358 bswap r9d
1359 DB 102,15,56,220,208
1360 DB 102,15,56,220,216
1361 xor r9d,ebp
1362 DB 0x66,0x90
1363 DB 102,15,56,220,224
1364 DB 102,15,56,220,232
1365 mov DWORD[((48+12))+rsp],r9d
1366 lea r9,[4+r8]
1367 DB 102,15,56,220,240
1368 DB 102,15,56,220,248
1369 DB 102,68,15,56,220,192
1370 DB 102,68,15,56,220,200
1371 movups xmm0,XMMWORD[((96-128))+rcx]
1372 bswap r9d
1373 DB 102,15,56,220,209
1374 DB 102,15,56,220,217
1375 xor r9d,ebp
1376 DB 0x66,0x90
1377 DB 102,15,56,220,225
1378 DB 102,15,56,220,233
1379 mov DWORD[((64+12))+rsp],r9d
1380 lea r9,[5+r8]
1381 DB 102,15,56,220,241
1382 DB 102,15,56,220,249
1383 DB 102,68,15,56,220,193
1384 DB 102,68,15,56,220,201
1385 movups xmm1,XMMWORD[((112-128))+rcx]
1386 bswap r9d
1387 DB 102,15,56,220,208
1388 DB 102,15,56,220,216
1389 xor r9d,ebp
1390 DB 0x66,0x90
1391 DB 102,15,56,220,224
1392 DB 102,15,56,220,232
1393 mov DWORD[((80+12))+rsp],r9d
1394 lea r9,[6+r8]
1395 DB 102,15,56,220,240
1396 DB 102,15,56,220,248
1397 DB 102,68,15,56,220,192
1398 DB 102,68,15,56,220,200
1399 movups xmm0,XMMWORD[((128-128))+rcx]
1400 bswap r9d
1401 DB 102,15,56,220,209
1402 DB 102,15,56,220,217
1403 xor r9d,ebp
1404 DB 0x66,0x90
1405 DB 102,15,56,220,225
1406 DB 102,15,56,220,233
1407 mov DWORD[((96+12))+rsp],r9d
1408 lea r9,[7+r8]
1409 DB 102,15,56,220,241
1410 DB 102,15,56,220,249
1411 DB 102,68,15,56,220,193
1412 DB 102,68,15,56,220,201
1413 movups xmm1,XMMWORD[((144-128))+rcx]
1414 bswap r9d
1415 DB 102,15,56,220,208
1416 DB 102,15,56,220,216
1417 DB 102,15,56,220,224
1418 xor r9d,ebp
1419 movdqu xmm10,XMMWORD[rdi]
1420 DB 102,15,56,220,232
1421 mov DWORD[((112+12))+rsp],r9d
1422 cmp eax,11
1423 DB 102,15,56,220,240
1424 DB 102,15,56,220,248
1425 DB 102,68,15,56,220,192
1426 DB 102,68,15,56,220,200
1427 movups xmm0,XMMWORD[((160-128))+rcx]
1428
1429 jb NEAR $L$ctr32_enc_done
1430
1431 DB 102,15,56,220,209
1432 DB 102,15,56,220,217
1433 DB 102,15,56,220,225
1434 DB 102,15,56,220,233
1435 DB 102,15,56,220,241
1436 DB 102,15,56,220,249
1437 DB 102,68,15,56,220,193
1438 DB 102,68,15,56,220,201
1439 movups xmm1,XMMWORD[((176-128))+rcx]
1440
1441 DB 102,15,56,220,208
1442 DB 102,15,56,220,216
1443 DB 102,15,56,220,224
1444 DB 102,15,56,220,232
1445 DB 102,15,56,220,240
1446 DB 102,15,56,220,248
1447 DB 102,68,15,56,220,192
1448 DB 102,68,15,56,220,200
1449 movups xmm0,XMMWORD[((192-128))+rcx]
1450 je NEAR $L$ctr32_enc_done
1451
1452 DB 102,15,56,220,209
1453 DB 102,15,56,220,217
1454 DB 102,15,56,220,225
1455 DB 102,15,56,220,233
1456 DB 102,15,56,220,241
1457 DB 102,15,56,220,249
1458 DB 102,68,15,56,220,193
1459 DB 102,68,15,56,220,201
1460 movups xmm1,XMMWORD[((208-128))+rcx]
1461
1462 DB 102,15,56,220,208
1463 DB 102,15,56,220,216
1464 DB 102,15,56,220,224
1465 DB 102,15,56,220,232
1466 DB 102,15,56,220,240
1467 DB 102,15,56,220,248
1468 DB 102,68,15,56,220,192
1469 DB 102,68,15,56,220,200
1470 movups xmm0,XMMWORD[((224-128))+rcx]
1471 jmp NEAR $L$ctr32_enc_done
1472
1473 ALIGN 16
1474 $L$ctr32_enc_done:
1475 movdqu xmm11,XMMWORD[16+rdi]
1476 pxor xmm10,xmm0
1477 movdqu xmm12,XMMWORD[32+rdi]
1478 pxor xmm11,xmm0
1479 movdqu xmm13,XMMWORD[48+rdi]
1480 pxor xmm12,xmm0
1481 movdqu xmm14,XMMWORD[64+rdi]
1482 pxor xmm13,xmm0
1483 movdqu xmm15,XMMWORD[80+rdi]
1484 pxor xmm14,xmm0
1485 pxor xmm15,xmm0
1486 DB 102,15,56,220,209
1487 DB 102,15,56,220,217
1488 DB 102,15,56,220,225
1489 DB 102,15,56,220,233
1490 DB 102,15,56,220,241
1491 DB 102,15,56,220,249
1492 DB 102,68,15,56,220,193
1493 DB 102,68,15,56,220,201
1494 movdqu xmm1,XMMWORD[96+rdi]
1495 lea rdi,[128+rdi]
1496
1497 DB 102,65,15,56,221,210
1498 pxor xmm1,xmm0
1499 movdqu xmm10,XMMWORD[((112-128))+rdi]
1500 DB 102,65,15,56,221,219
1501 pxor xmm10,xmm0
1502 movdqa xmm11,XMMWORD[rsp]
1503 DB 102,65,15,56,221,228
1504 DB 102,65,15,56,221,237
1505 movdqa xmm12,XMMWORD[16+rsp]
1506 movdqa xmm13,XMMWORD[32+rsp]
1507 DB 102,65,15,56,221,246
1508 DB 102,65,15,56,221,255
1509 movdqa xmm14,XMMWORD[48+rsp]
1510 movdqa xmm15,XMMWORD[64+rsp]
1511 DB 102,68,15,56,221,193
1512 movdqa xmm0,XMMWORD[80+rsp]
1513 movups xmm1,XMMWORD[((16-128))+rcx]
1514 DB 102,69,15,56,221,202
1515
1516 movups XMMWORD[rsi],xmm2
1517 movdqa xmm2,xmm11
1518 movups XMMWORD[16+rsi],xmm3
1519 movdqa xmm3,xmm12
1520 movups XMMWORD[32+rsi],xmm4
1521 movdqa xmm4,xmm13
1522 movups XMMWORD[48+rsi],xmm5
1523 movdqa xmm5,xmm14
1524 movups XMMWORD[64+rsi],xmm6
1525 movdqa xmm6,xmm15
1526 movups XMMWORD[80+rsi],xmm7
1527 movdqa xmm7,xmm0
1528 movups XMMWORD[96+rsi],xmm8
1529 movups XMMWORD[112+rsi],xmm9
1530 lea rsi,[128+rsi]
1531
1532 sub rdx,8
1533 jnc NEAR $L$ctr32_loop8
1534
1535 add rdx,8
1536 jz NEAR $L$ctr32_done
1537 lea rcx,[((-128))+rcx]
1538
1539 $L$ctr32_tail:
1540
1541
1542 lea rcx,[16+rcx]
1543 cmp rdx,4
1544 jb NEAR $L$ctr32_loop3
1545 je NEAR $L$ctr32_loop4
1546
1547
1548 shl eax,4
1549 movdqa xmm8,XMMWORD[96+rsp]
1550 pxor xmm9,xmm9
1551
1552 movups xmm0,XMMWORD[16+rcx]
1553 DB 102,15,56,220,209
1554 DB 102,15,56,220,217
1555 lea rcx,[((32-16))+rax*1+rcx]
1556 neg rax
1557 DB 102,15,56,220,225
1558 add rax,16
1559 movups xmm10,XMMWORD[rdi]
1560 DB 102,15,56,220,233
1561 DB 102,15,56,220,241
1562 movups xmm11,XMMWORD[16+rdi]
1563 movups xmm12,XMMWORD[32+rdi]
1564 DB 102,15,56,220,249
1565 DB 102,68,15,56,220,193
1566
1567 call $L$enc_loop8_enter
1568
1569 movdqu xmm13,XMMWORD[48+rdi]
1570 pxor xmm2,xmm10
1571 movdqu xmm10,XMMWORD[64+rdi]
1572 pxor xmm3,xmm11
1573 movdqu XMMWORD[rsi],xmm2
1574 pxor xmm4,xmm12
1575 movdqu XMMWORD[16+rsi],xmm3
1576 pxor xmm5,xmm13
1577 movdqu XMMWORD[32+rsi],xmm4
1578 pxor xmm6,xmm10
1579 movdqu XMMWORD[48+rsi],xmm5
1580 movdqu XMMWORD[64+rsi],xmm6
1581 cmp rdx,6
1582 jb NEAR $L$ctr32_done
1583
1584 movups xmm11,XMMWORD[80+rdi]
1585 xorps xmm7,xmm11
1586 movups XMMWORD[80+rsi],xmm7
1587 je NEAR $L$ctr32_done
1588
1589 movups xmm12,XMMWORD[96+rdi]
1590 xorps xmm8,xmm12
1591 movups XMMWORD[96+rsi],xmm8
1592 jmp NEAR $L$ctr32_done
1593
1594 ALIGN 32
1595 $L$ctr32_loop4:
1596 DB 102,15,56,220,209
1597 lea rcx,[16+rcx]
1598 dec eax
1599 DB 102,15,56,220,217
1600 DB 102,15,56,220,225
1601 DB 102,15,56,220,233
1602 movups xmm1,XMMWORD[rcx]
1603 jnz NEAR $L$ctr32_loop4
1604 DB 102,15,56,221,209
1605 DB 102,15,56,221,217
1606 movups xmm10,XMMWORD[rdi]
1607 movups xmm11,XMMWORD[16+rdi]
1608 DB 102,15,56,221,225
1609 DB 102,15,56,221,233
1610 movups xmm12,XMMWORD[32+rdi]
1611 movups xmm13,XMMWORD[48+rdi]
1612
1613 xorps xmm2,xmm10
1614 movups XMMWORD[rsi],xmm2
1615 xorps xmm3,xmm11
1616 movups XMMWORD[16+rsi],xmm3
1617 pxor xmm4,xmm12
1618 movdqu XMMWORD[32+rsi],xmm4
1619 pxor xmm5,xmm13
1620 movdqu XMMWORD[48+rsi],xmm5
1621 jmp NEAR $L$ctr32_done
1622
1623 ALIGN 32
1624 $L$ctr32_loop3:
1625 DB 102,15,56,220,209
1626 lea rcx,[16+rcx]
1627 dec eax
1628 DB 102,15,56,220,217
1629 DB 102,15,56,220,225
1630 movups xmm1,XMMWORD[rcx]
1631 jnz NEAR $L$ctr32_loop3
1632 DB 102,15,56,221,209
1633 DB 102,15,56,221,217
1634 DB 102,15,56,221,225
1635
1636 movups xmm10,XMMWORD[rdi]
1637 xorps xmm2,xmm10
1638 movups XMMWORD[rsi],xmm2
1639 cmp rdx,2
1640 jb NEAR $L$ctr32_done
1641
1642 movups xmm11,XMMWORD[16+rdi]
1643 xorps xmm3,xmm11
1644 movups XMMWORD[16+rsi],xmm3
1645 je NEAR $L$ctr32_done
1646
1647 movups xmm12,XMMWORD[32+rdi]
1648 xorps xmm4,xmm12
1649 movups XMMWORD[32+rsi],xmm4
1650
1651 $L$ctr32_done:
1652 xorps xmm0,xmm0
1653 xor ebp,ebp
1654 pxor xmm1,xmm1
1655 pxor xmm2,xmm2
1656 pxor xmm3,xmm3
1657 pxor xmm4,xmm4
1658 pxor xmm5,xmm5
1659 movaps xmm6,XMMWORD[((-168))+r11]
1660 movaps XMMWORD[(-168)+r11],xmm0
1661 movaps xmm7,XMMWORD[((-152))+r11]
1662 movaps XMMWORD[(-152)+r11],xmm0
1663 movaps xmm8,XMMWORD[((-136))+r11]
1664 movaps XMMWORD[(-136)+r11],xmm0
1665 movaps xmm9,XMMWORD[((-120))+r11]
1666 movaps XMMWORD[(-120)+r11],xmm0
1667 movaps xmm10,XMMWORD[((-104))+r11]
1668 movaps XMMWORD[(-104)+r11],xmm0
1669 movaps xmm11,XMMWORD[((-88))+r11]
1670 movaps XMMWORD[(-88)+r11],xmm0
1671 movaps xmm12,XMMWORD[((-72))+r11]
1672 movaps XMMWORD[(-72)+r11],xmm0
1673 movaps xmm13,XMMWORD[((-56))+r11]
1674 movaps XMMWORD[(-56)+r11],xmm0
1675 movaps xmm14,XMMWORD[((-40))+r11]
1676 movaps XMMWORD[(-40)+r11],xmm0
1677 movaps xmm15,XMMWORD[((-24))+r11]
1678 movaps XMMWORD[(-24)+r11],xmm0
1679 movaps XMMWORD[rsp],xmm0
1680 movaps XMMWORD[16+rsp],xmm0
1681 movaps XMMWORD[32+rsp],xmm0
1682 movaps XMMWORD[48+rsp],xmm0
1683 movaps XMMWORD[64+rsp],xmm0
1684 movaps XMMWORD[80+rsp],xmm0
1685 movaps XMMWORD[96+rsp],xmm0
1686 movaps XMMWORD[112+rsp],xmm0
1687 mov rbp,QWORD[((-8))+r11]
1688 lea rsp,[r11]
1689 $L$ctr32_epilogue:
1690 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
1691 mov rsi,QWORD[16+rsp]
1692 DB 0F3h,0C3h ;repret
1693 $L$SEH_end_aesni_ctr32_encrypt_blocks:
1694 global aesni_xts_encrypt
1695
1696 ALIGN 16
1697 aesni_xts_encrypt:
1698 mov QWORD[8+rsp],rdi ;WIN64 prologue
1699 mov QWORD[16+rsp],rsi
1700 mov rax,rsp
1701 $L$SEH_begin_aesni_xts_encrypt:
1702 mov rdi,rcx
1703 mov rsi,rdx
1704 mov rdx,r8
1705 mov rcx,r9
1706 mov r8,QWORD[40+rsp]
1707 mov r9,QWORD[48+rsp]
1708
1709
1710 lea r11,[rsp]
1711 push rbp
1712 sub rsp,272
1713 and rsp,-16
1714 movaps XMMWORD[(-168)+r11],xmm6
1715 movaps XMMWORD[(-152)+r11],xmm7
1716 movaps XMMWORD[(-136)+r11],xmm8
1717 movaps XMMWORD[(-120)+r11],xmm9
1718 movaps XMMWORD[(-104)+r11],xmm10
1719 movaps XMMWORD[(-88)+r11],xmm11
1720 movaps XMMWORD[(-72)+r11],xmm12
1721 movaps XMMWORD[(-56)+r11],xmm13
1722 movaps XMMWORD[(-40)+r11],xmm14
1723 movaps XMMWORD[(-24)+r11],xmm15
1724 $L$xts_enc_body:
1725 movups xmm2,XMMWORD[r9]
1726 mov eax,DWORD[240+r8]
1727 mov r10d,DWORD[240+rcx]
1728 movups xmm0,XMMWORD[r8]
1729 movups xmm1,XMMWORD[16+r8]
1730 lea r8,[32+r8]
1731 xorps xmm2,xmm0
1732 $L$oop_enc1_8:
1733 DB 102,15,56,220,209
1734 dec eax
1735 movups xmm1,XMMWORD[r8]
1736 lea r8,[16+r8]
1737 jnz NEAR $L$oop_enc1_8
1738 DB 102,15,56,221,209
1739 movups xmm0,XMMWORD[rcx]
1740 mov rbp,rcx
1741 mov eax,r10d
1742 shl r10d,4
1743 mov r9,rdx
1744 and rdx,-16
1745
1746 movups xmm1,XMMWORD[16+r10*1+rcx]
1747
1748 movdqa xmm8,XMMWORD[$L$xts_magic]
1749 movdqa xmm15,xmm2
1750 pshufd xmm9,xmm2,0x5f
1751 pxor xmm1,xmm0
1752 movdqa xmm14,xmm9
1753 paddd xmm9,xmm9
1754 movdqa xmm10,xmm15
1755 psrad xmm14,31
1756 paddq xmm15,xmm15
1757 pand xmm14,xmm8
1758 pxor xmm10,xmm0
1759 pxor xmm15,xmm14
1760 movdqa xmm14,xmm9
1761 paddd xmm9,xmm9
1762 movdqa xmm11,xmm15
1763 psrad xmm14,31
1764 paddq xmm15,xmm15
1765 pand xmm14,xmm8
1766 pxor xmm11,xmm0
1767 pxor xmm15,xmm14
1768 movdqa xmm14,xmm9
1769 paddd xmm9,xmm9
1770 movdqa xmm12,xmm15
1771 psrad xmm14,31
1772 paddq xmm15,xmm15
1773 pand xmm14,xmm8
1774 pxor xmm12,xmm0
1775 pxor xmm15,xmm14
1776 movdqa xmm14,xmm9
1777 paddd xmm9,xmm9
1778 movdqa xmm13,xmm15
1779 psrad xmm14,31
1780 paddq xmm15,xmm15
1781 pand xmm14,xmm8
1782 pxor xmm13,xmm0
1783 pxor xmm15,xmm14
1784 movdqa xmm14,xmm15
1785 psrad xmm9,31
1786 paddq xmm15,xmm15
1787 pand xmm9,xmm8
1788 pxor xmm14,xmm0
1789 pxor xmm15,xmm9
1790 movaps XMMWORD[96+rsp],xmm1
1791
1792 sub rdx,16*6
1793 jc NEAR $L$xts_enc_short
1794
1795 mov eax,16+96
1796 lea rcx,[32+r10*1+rbp]
1797 sub rax,r10
1798 movups xmm1,XMMWORD[16+rbp]
1799 mov r10,rax
1800 lea r8,[$L$xts_magic]
1801 jmp NEAR $L$xts_enc_grandloop
1802
1803 ALIGN 32
1804 $L$xts_enc_grandloop:
1805 movdqu xmm2,XMMWORD[rdi]
1806 movdqa xmm8,xmm0
1807 movdqu xmm3,XMMWORD[16+rdi]
1808 pxor xmm2,xmm10
1809 movdqu xmm4,XMMWORD[32+rdi]
1810 pxor xmm3,xmm11
1811 DB 102,15,56,220,209
1812 movdqu xmm5,XMMWORD[48+rdi]
1813 pxor xmm4,xmm12
1814 DB 102,15,56,220,217
1815 movdqu xmm6,XMMWORD[64+rdi]
1816 pxor xmm5,xmm13
1817 DB 102,15,56,220,225
1818 movdqu xmm7,XMMWORD[80+rdi]
1819 pxor xmm8,xmm15
1820 movdqa xmm9,XMMWORD[96+rsp]
1821 pxor xmm6,xmm14
1822 DB 102,15,56,220,233
1823 movups xmm0,XMMWORD[32+rbp]
1824 lea rdi,[96+rdi]
1825 pxor xmm7,xmm8
1826
1827 pxor xmm10,xmm9
1828 DB 102,15,56,220,241
1829 pxor xmm11,xmm9
1830 movdqa XMMWORD[rsp],xmm10
1831 DB 102,15,56,220,249
1832 movups xmm1,XMMWORD[48+rbp]
1833 pxor xmm12,xmm9
1834
1835 DB 102,15,56,220,208
1836 pxor xmm13,xmm9
1837 movdqa XMMWORD[16+rsp],xmm11
1838 DB 102,15,56,220,216
1839 pxor xmm14,xmm9
1840 movdqa XMMWORD[32+rsp],xmm12
1841 DB 102,15,56,220,224
1842 DB 102,15,56,220,232
1843 pxor xmm8,xmm9
1844 movdqa XMMWORD[64+rsp],xmm14
1845 DB 102,15,56,220,240
1846 DB 102,15,56,220,248
1847 movups xmm0,XMMWORD[64+rbp]
1848 movdqa XMMWORD[80+rsp],xmm8
1849 pshufd xmm9,xmm15,0x5f
1850 jmp NEAR $L$xts_enc_loop6
1851 ALIGN 32
1852 $L$xts_enc_loop6:
1853 DB 102,15,56,220,209
1854 DB 102,15,56,220,217
1855 DB 102,15,56,220,225
1856 DB 102,15,56,220,233
1857 DB 102,15,56,220,241
1858 DB 102,15,56,220,249
1859 movups xmm1,XMMWORD[((-64))+rax*1+rcx]
1860 add rax,32
1861
1862 DB 102,15,56,220,208
1863 DB 102,15,56,220,216
1864 DB 102,15,56,220,224
1865 DB 102,15,56,220,232
1866 DB 102,15,56,220,240
1867 DB 102,15,56,220,248
1868 movups xmm0,XMMWORD[((-80))+rax*1+rcx]
1869 jnz NEAR $L$xts_enc_loop6
1870
1871 movdqa xmm8,XMMWORD[r8]
1872 movdqa xmm14,xmm9
1873 paddd xmm9,xmm9
1874 DB 102,15,56,220,209
1875 paddq xmm15,xmm15
1876 psrad xmm14,31
1877 DB 102,15,56,220,217
1878 pand xmm14,xmm8
1879 movups xmm10,XMMWORD[rbp]
1880 DB 102,15,56,220,225
1881 DB 102,15,56,220,233
1882 DB 102,15,56,220,241
1883 pxor xmm15,xmm14
1884 movaps xmm11,xmm10
1885 DB 102,15,56,220,249
1886 movups xmm1,XMMWORD[((-64))+rcx]
1887
1888 movdqa xmm14,xmm9
1889 DB 102,15,56,220,208
1890 paddd xmm9,xmm9
1891 pxor xmm10,xmm15
1892 DB 102,15,56,220,216
1893 psrad xmm14,31
1894 paddq xmm15,xmm15
1895 DB 102,15,56,220,224
1896 DB 102,15,56,220,232
1897 pand xmm14,xmm8
1898 movaps xmm12,xmm11
1899 DB 102,15,56,220,240
1900 pxor xmm15,xmm14
1901 movdqa xmm14,xmm9
1902 DB 102,15,56,220,248
1903 movups xmm0,XMMWORD[((-48))+rcx]
1904
1905 paddd xmm9,xmm9
1906 DB 102,15,56,220,209
1907 pxor xmm11,xmm15
1908 psrad xmm14,31
1909 DB 102,15,56,220,217
1910 paddq xmm15,xmm15
1911 pand xmm14,xmm8
1912 DB 102,15,56,220,225
1913 DB 102,15,56,220,233
1914 movdqa XMMWORD[48+rsp],xmm13
1915 pxor xmm15,xmm14
1916 DB 102,15,56,220,241
1917 movaps xmm13,xmm12
1918 movdqa xmm14,xmm9
1919 DB 102,15,56,220,249
1920 movups xmm1,XMMWORD[((-32))+rcx]
1921
1922 paddd xmm9,xmm9
1923 DB 102,15,56,220,208
1924 pxor xmm12,xmm15
1925 psrad xmm14,31
1926 DB 102,15,56,220,216
1927 paddq xmm15,xmm15
1928 pand xmm14,xmm8
1929 DB 102,15,56,220,224
1930 DB 102,15,56,220,232
1931 DB 102,15,56,220,240
1932 pxor xmm15,xmm14
1933 movaps xmm14,xmm13
1934 DB 102,15,56,220,248
1935
1936 movdqa xmm0,xmm9
1937 paddd xmm9,xmm9
1938 DB 102,15,56,220,209
1939 pxor xmm13,xmm15
1940 psrad xmm0,31
1941 DB 102,15,56,220,217
1942 paddq xmm15,xmm15
1943 pand xmm0,xmm8
1944 DB 102,15,56,220,225
1945 DB 102,15,56,220,233
1946 pxor xmm15,xmm0
1947 movups xmm0,XMMWORD[rbp]
1948 DB 102,15,56,220,241
1949 DB 102,15,56,220,249
1950 movups xmm1,XMMWORD[16+rbp]
1951
1952 pxor xmm14,xmm15
1953 DB 102,15,56,221,84,36,0
1954 psrad xmm9,31
1955 paddq xmm15,xmm15
1956 DB 102,15,56,221,92,36,16
1957 DB 102,15,56,221,100,36,32
1958 pand xmm9,xmm8
1959 mov rax,r10
1960 DB 102,15,56,221,108,36,48
1961 DB 102,15,56,221,116,36,64
1962 DB 102,15,56,221,124,36,80
1963 pxor xmm15,xmm9
1964
1965 lea rsi,[96+rsi]
1966 movups XMMWORD[(-96)+rsi],xmm2
1967 movups XMMWORD[(-80)+rsi],xmm3
1968 movups XMMWORD[(-64)+rsi],xmm4
1969 movups XMMWORD[(-48)+rsi],xmm5
1970 movups XMMWORD[(-32)+rsi],xmm6
1971 movups XMMWORD[(-16)+rsi],xmm7
1972 sub rdx,16*6
1973 jnc NEAR $L$xts_enc_grandloop
1974
1975 mov eax,16+96
1976 sub eax,r10d
1977 mov rcx,rbp
1978 shr eax,4
1979
1980 $L$xts_enc_short:
1981
1982 mov r10d,eax
1983 pxor xmm10,xmm0
1984 add rdx,16*6
1985 jz NEAR $L$xts_enc_done
1986
1987 pxor xmm11,xmm0
1988 cmp rdx,0x20
1989 jb NEAR $L$xts_enc_one
1990 pxor xmm12,xmm0
1991 je NEAR $L$xts_enc_two
1992
1993 pxor xmm13,xmm0
1994 cmp rdx,0x40
1995 jb NEAR $L$xts_enc_three
1996 pxor xmm14,xmm0
1997 je NEAR $L$xts_enc_four
1998
1999 movdqu xmm2,XMMWORD[rdi]
2000 movdqu xmm3,XMMWORD[16+rdi]
2001 movdqu xmm4,XMMWORD[32+rdi]
2002 pxor xmm2,xmm10
2003 movdqu xmm5,XMMWORD[48+rdi]
2004 pxor xmm3,xmm11
2005 movdqu xmm6,XMMWORD[64+rdi]
2006 lea rdi,[80+rdi]
2007 pxor xmm4,xmm12
2008 pxor xmm5,xmm13
2009 pxor xmm6,xmm14
2010 pxor xmm7,xmm7
2011
2012 call _aesni_encrypt6
2013
2014 xorps xmm2,xmm10
2015 movdqa xmm10,xmm15
2016 xorps xmm3,xmm11
2017 xorps xmm4,xmm12
2018 movdqu XMMWORD[rsi],xmm2
2019 xorps xmm5,xmm13
2020 movdqu XMMWORD[16+rsi],xmm3
2021 xorps xmm6,xmm14
2022 movdqu XMMWORD[32+rsi],xmm4
2023 movdqu XMMWORD[48+rsi],xmm5
2024 movdqu XMMWORD[64+rsi],xmm6
2025 lea rsi,[80+rsi]
2026 jmp NEAR $L$xts_enc_done
2027
2028 ALIGN 16
2029 $L$xts_enc_one:
2030 movups xmm2,XMMWORD[rdi]
2031 lea rdi,[16+rdi]
2032 xorps xmm2,xmm10
2033 movups xmm0,XMMWORD[rcx]
2034 movups xmm1,XMMWORD[16+rcx]
2035 lea rcx,[32+rcx]
2036 xorps xmm2,xmm0
2037 $L$oop_enc1_9:
2038 DB 102,15,56,220,209
2039 dec eax
2040 movups xmm1,XMMWORD[rcx]
2041 lea rcx,[16+rcx]
2042 jnz NEAR $L$oop_enc1_9
2043 DB 102,15,56,221,209
2044 xorps xmm2,xmm10
2045 movdqa xmm10,xmm11
2046 movups XMMWORD[rsi],xmm2
2047 lea rsi,[16+rsi]
2048 jmp NEAR $L$xts_enc_done
2049
2050 ALIGN 16
2051 $L$xts_enc_two:
2052 movups xmm2,XMMWORD[rdi]
2053 movups xmm3,XMMWORD[16+rdi]
2054 lea rdi,[32+rdi]
2055 xorps xmm2,xmm10
2056 xorps xmm3,xmm11
2057
2058 call _aesni_encrypt2
2059
2060 xorps xmm2,xmm10
2061 movdqa xmm10,xmm12
2062 xorps xmm3,xmm11
2063 movups XMMWORD[rsi],xmm2
2064 movups XMMWORD[16+rsi],xmm3
2065 lea rsi,[32+rsi]
2066 jmp NEAR $L$xts_enc_done
2067
2068 ALIGN 16
2069 $L$xts_enc_three:
2070 movups xmm2,XMMWORD[rdi]
2071 movups xmm3,XMMWORD[16+rdi]
2072 movups xmm4,XMMWORD[32+rdi]
2073 lea rdi,[48+rdi]
2074 xorps xmm2,xmm10
2075 xorps xmm3,xmm11
2076 xorps xmm4,xmm12
2077
2078 call _aesni_encrypt3
2079
2080 xorps xmm2,xmm10
2081 movdqa xmm10,xmm13
2082 xorps xmm3,xmm11
2083 xorps xmm4,xmm12
2084 movups XMMWORD[rsi],xmm2
2085 movups XMMWORD[16+rsi],xmm3
2086 movups XMMWORD[32+rsi],xmm4
2087 lea rsi,[48+rsi]
2088 jmp NEAR $L$xts_enc_done
2089
2090 ALIGN 16
2091 $L$xts_enc_four:
2092 movups xmm2,XMMWORD[rdi]
2093 movups xmm3,XMMWORD[16+rdi]
2094 movups xmm4,XMMWORD[32+rdi]
2095 xorps xmm2,xmm10
2096 movups xmm5,XMMWORD[48+rdi]
2097 lea rdi,[64+rdi]
2098 xorps xmm3,xmm11
2099 xorps xmm4,xmm12
2100 xorps xmm5,xmm13
2101
2102 call _aesni_encrypt4
2103
2104 pxor xmm2,xmm10
2105 movdqa xmm10,xmm14
2106 pxor xmm3,xmm11
2107 pxor xmm4,xmm12
2108 movdqu XMMWORD[rsi],xmm2
2109 pxor xmm5,xmm13
2110 movdqu XMMWORD[16+rsi],xmm3
2111 movdqu XMMWORD[32+rsi],xmm4
2112 movdqu XMMWORD[48+rsi],xmm5
2113 lea rsi,[64+rsi]
2114 jmp NEAR $L$xts_enc_done
2115
2116 ALIGN 16
2117 $L$xts_enc_done:
2118 and r9,15
2119 jz NEAR $L$xts_enc_ret
2120 mov rdx,r9
2121
2122 $L$xts_enc_steal:
2123 movzx eax,BYTE[rdi]
2124 movzx ecx,BYTE[((-16))+rsi]
2125 lea rdi,[1+rdi]
2126 mov BYTE[((-16))+rsi],al
2127 mov BYTE[rsi],cl
2128 lea rsi,[1+rsi]
2129 sub rdx,1
2130 jnz NEAR $L$xts_enc_steal
2131
2132 sub rsi,r9
2133 mov rcx,rbp
2134 mov eax,r10d
2135
2136 movups xmm2,XMMWORD[((-16))+rsi]
2137 xorps xmm2,xmm10
2138 movups xmm0,XMMWORD[rcx]
2139 movups xmm1,XMMWORD[16+rcx]
2140 lea rcx,[32+rcx]
2141 xorps xmm2,xmm0
2142 $L$oop_enc1_10:
2143 DB 102,15,56,220,209
2144 dec eax
2145 movups xmm1,XMMWORD[rcx]
2146 lea rcx,[16+rcx]
2147 jnz NEAR $L$oop_enc1_10
2148 DB 102,15,56,221,209
2149 xorps xmm2,xmm10
2150 movups XMMWORD[(-16)+rsi],xmm2
2151
2152 $L$xts_enc_ret:
2153 xorps xmm0,xmm0
2154 pxor xmm1,xmm1
2155 pxor xmm2,xmm2
2156 pxor xmm3,xmm3
2157 pxor xmm4,xmm4
2158 pxor xmm5,xmm5
2159 movaps xmm6,XMMWORD[((-168))+r11]
2160 movaps XMMWORD[(-168)+r11],xmm0
2161 movaps xmm7,XMMWORD[((-152))+r11]
2162 movaps XMMWORD[(-152)+r11],xmm0
2163 movaps xmm8,XMMWORD[((-136))+r11]
2164 movaps XMMWORD[(-136)+r11],xmm0
2165 movaps xmm9,XMMWORD[((-120))+r11]
2166 movaps XMMWORD[(-120)+r11],xmm0
2167 movaps xmm10,XMMWORD[((-104))+r11]
2168 movaps XMMWORD[(-104)+r11],xmm0
2169 movaps xmm11,XMMWORD[((-88))+r11]
2170 movaps XMMWORD[(-88)+r11],xmm0
2171 movaps xmm12,XMMWORD[((-72))+r11]
2172 movaps XMMWORD[(-72)+r11],xmm0
2173 movaps xmm13,XMMWORD[((-56))+r11]
2174 movaps XMMWORD[(-56)+r11],xmm0
2175 movaps xmm14,XMMWORD[((-40))+r11]
2176 movaps XMMWORD[(-40)+r11],xmm0
2177 movaps xmm15,XMMWORD[((-24))+r11]
2178 movaps XMMWORD[(-24)+r11],xmm0
2179 movaps XMMWORD[rsp],xmm0
2180 movaps XMMWORD[16+rsp],xmm0
2181 movaps XMMWORD[32+rsp],xmm0
2182 movaps XMMWORD[48+rsp],xmm0
2183 movaps XMMWORD[64+rsp],xmm0
2184 movaps XMMWORD[80+rsp],xmm0
2185 movaps XMMWORD[96+rsp],xmm0
2186 mov rbp,QWORD[((-8))+r11]
2187 lea rsp,[r11]
2188 $L$xts_enc_epilogue:
2189 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
2190 mov rsi,QWORD[16+rsp]
2191 DB 0F3h,0C3h ;repret
2192 $L$SEH_end_aesni_xts_encrypt:
2193 global aesni_xts_decrypt
2194
2195 ALIGN 16
2196 aesni_xts_decrypt:
2197 mov QWORD[8+rsp],rdi ;WIN64 prologue
2198 mov QWORD[16+rsp],rsi
2199 mov rax,rsp
2200 $L$SEH_begin_aesni_xts_decrypt:
2201 mov rdi,rcx
2202 mov rsi,rdx
2203 mov rdx,r8
2204 mov rcx,r9
2205 mov r8,QWORD[40+rsp]
2206 mov r9,QWORD[48+rsp]
2207
2208
2209 lea r11,[rsp]
2210 push rbp
2211 sub rsp,272
2212 and rsp,-16
2213 movaps XMMWORD[(-168)+r11],xmm6
2214 movaps XMMWORD[(-152)+r11],xmm7
2215 movaps XMMWORD[(-136)+r11],xmm8
2216 movaps XMMWORD[(-120)+r11],xmm9
2217 movaps XMMWORD[(-104)+r11],xmm10
2218 movaps XMMWORD[(-88)+r11],xmm11
2219 movaps XMMWORD[(-72)+r11],xmm12
2220 movaps XMMWORD[(-56)+r11],xmm13
2221 movaps XMMWORD[(-40)+r11],xmm14
2222 movaps XMMWORD[(-24)+r11],xmm15
2223 $L$xts_dec_body:
2224 movups xmm2,XMMWORD[r9]
2225 mov eax,DWORD[240+r8]
2226 mov r10d,DWORD[240+rcx]
2227 movups xmm0,XMMWORD[r8]
2228 movups xmm1,XMMWORD[16+r8]
2229 lea r8,[32+r8]
2230 xorps xmm2,xmm0
2231 $L$oop_enc1_11:
2232 DB 102,15,56,220,209
2233 dec eax
2234 movups xmm1,XMMWORD[r8]
2235 lea r8,[16+r8]
2236 jnz NEAR $L$oop_enc1_11
2237 DB 102,15,56,221,209
2238 xor eax,eax
2239 test rdx,15
2240 setnz al
2241 shl rax,4
2242 sub rdx,rax
2243
2244 movups xmm0,XMMWORD[rcx]
2245 mov rbp,rcx
2246 mov eax,r10d
2247 shl r10d,4
2248 mov r9,rdx
2249 and rdx,-16
2250
2251 movups xmm1,XMMWORD[16+r10*1+rcx]
2252
2253 movdqa xmm8,XMMWORD[$L$xts_magic]
2254 movdqa xmm15,xmm2
2255 pshufd xmm9,xmm2,0x5f
2256 pxor xmm1,xmm0
2257 movdqa xmm14,xmm9
2258 paddd xmm9,xmm9
2259 movdqa xmm10,xmm15
2260 psrad xmm14,31
2261 paddq xmm15,xmm15
2262 pand xmm14,xmm8
2263 pxor xmm10,xmm0
2264 pxor xmm15,xmm14
2265 movdqa xmm14,xmm9
2266 paddd xmm9,xmm9
2267 movdqa xmm11,xmm15
2268 psrad xmm14,31
2269 paddq xmm15,xmm15
2270 pand xmm14,xmm8
2271 pxor xmm11,xmm0
2272 pxor xmm15,xmm14
2273 movdqa xmm14,xmm9
2274 paddd xmm9,xmm9
2275 movdqa xmm12,xmm15
2276 psrad xmm14,31
2277 paddq xmm15,xmm15
2278 pand xmm14,xmm8
2279 pxor xmm12,xmm0
2280 pxor xmm15,xmm14
2281 movdqa xmm14,xmm9
2282 paddd xmm9,xmm9
2283 movdqa xmm13,xmm15
2284 psrad xmm14,31
2285 paddq xmm15,xmm15
2286 pand xmm14,xmm8
2287 pxor xmm13,xmm0
2288 pxor xmm15,xmm14
2289 movdqa xmm14,xmm15
2290 psrad xmm9,31
2291 paddq xmm15,xmm15
2292 pand xmm9,xmm8
2293 pxor xmm14,xmm0
2294 pxor xmm15,xmm9
2295 movaps XMMWORD[96+rsp],xmm1
2296
2297 sub rdx,16*6
2298 jc NEAR $L$xts_dec_short
2299
2300 mov eax,16+96
2301 lea rcx,[32+r10*1+rbp]
2302 sub rax,r10
2303 movups xmm1,XMMWORD[16+rbp]
2304 mov r10,rax
2305 lea r8,[$L$xts_magic]
2306 jmp NEAR $L$xts_dec_grandloop
2307
2308 ALIGN 32
2309 $L$xts_dec_grandloop:
2310 movdqu xmm2,XMMWORD[rdi]
2311 movdqa xmm8,xmm0
2312 movdqu xmm3,XMMWORD[16+rdi]
2313 pxor xmm2,xmm10
2314 movdqu xmm4,XMMWORD[32+rdi]
2315 pxor xmm3,xmm11
2316 DB 102,15,56,222,209
2317 movdqu xmm5,XMMWORD[48+rdi]
2318 pxor xmm4,xmm12
2319 DB 102,15,56,222,217
2320 movdqu xmm6,XMMWORD[64+rdi]
2321 pxor xmm5,xmm13
2322 DB 102,15,56,222,225
2323 movdqu xmm7,XMMWORD[80+rdi]
2324 pxor xmm8,xmm15
2325 movdqa xmm9,XMMWORD[96+rsp]
2326 pxor xmm6,xmm14
2327 DB 102,15,56,222,233
2328 movups xmm0,XMMWORD[32+rbp]
2329 lea rdi,[96+rdi]
2330 pxor xmm7,xmm8
2331
2332 pxor xmm10,xmm9
2333 DB 102,15,56,222,241
2334 pxor xmm11,xmm9
2335 movdqa XMMWORD[rsp],xmm10
2336 DB 102,15,56,222,249
2337 movups xmm1,XMMWORD[48+rbp]
2338 pxor xmm12,xmm9
2339
2340 DB 102,15,56,222,208
2341 pxor xmm13,xmm9
2342 movdqa XMMWORD[16+rsp],xmm11
2343 DB 102,15,56,222,216
2344 pxor xmm14,xmm9
2345 movdqa XMMWORD[32+rsp],xmm12
2346 DB 102,15,56,222,224
2347 DB 102,15,56,222,232
2348 pxor xmm8,xmm9
2349 movdqa XMMWORD[64+rsp],xmm14
2350 DB 102,15,56,222,240
2351 DB 102,15,56,222,248
2352 movups xmm0,XMMWORD[64+rbp]
2353 movdqa XMMWORD[80+rsp],xmm8
2354 pshufd xmm9,xmm15,0x5f
2355 jmp NEAR $L$xts_dec_loop6
2356 ALIGN 32
2357 $L$xts_dec_loop6:
2358 DB 102,15,56,222,209
2359 DB 102,15,56,222,217
2360 DB 102,15,56,222,225
2361 DB 102,15,56,222,233
2362 DB 102,15,56,222,241
2363 DB 102,15,56,222,249
2364 movups xmm1,XMMWORD[((-64))+rax*1+rcx]
2365 add rax,32
2366
2367 DB 102,15,56,222,208
2368 DB 102,15,56,222,216
2369 DB 102,15,56,222,224
2370 DB 102,15,56,222,232
2371 DB 102,15,56,222,240
2372 DB 102,15,56,222,248
2373 movups xmm0,XMMWORD[((-80))+rax*1+rcx]
2374 jnz NEAR $L$xts_dec_loop6
2375
2376 movdqa xmm8,XMMWORD[r8]
2377 movdqa xmm14,xmm9
2378 paddd xmm9,xmm9
2379 DB 102,15,56,222,209
2380 paddq xmm15,xmm15
2381 psrad xmm14,31
2382 DB 102,15,56,222,217
2383 pand xmm14,xmm8
2384 movups xmm10,XMMWORD[rbp]
2385 DB 102,15,56,222,225
2386 DB 102,15,56,222,233
2387 DB 102,15,56,222,241
2388 pxor xmm15,xmm14
2389 movaps xmm11,xmm10
2390 DB 102,15,56,222,249
2391 movups xmm1,XMMWORD[((-64))+rcx]
2392
2393 movdqa xmm14,xmm9
2394 DB 102,15,56,222,208
2395 paddd xmm9,xmm9
2396 pxor xmm10,xmm15
2397 DB 102,15,56,222,216
2398 psrad xmm14,31
2399 paddq xmm15,xmm15
2400 DB 102,15,56,222,224
2401 DB 102,15,56,222,232
2402 pand xmm14,xmm8
2403 movaps xmm12,xmm11
2404 DB 102,15,56,222,240
2405 pxor xmm15,xmm14
2406 movdqa xmm14,xmm9
2407 DB 102,15,56,222,248
2408 movups xmm0,XMMWORD[((-48))+rcx]
2409
2410 paddd xmm9,xmm9
2411 DB 102,15,56,222,209
2412 pxor xmm11,xmm15
2413 psrad xmm14,31
2414 DB 102,15,56,222,217
2415 paddq xmm15,xmm15
2416 pand xmm14,xmm8
2417 DB 102,15,56,222,225
2418 DB 102,15,56,222,233
2419 movdqa XMMWORD[48+rsp],xmm13
2420 pxor xmm15,xmm14
2421 DB 102,15,56,222,241
2422 movaps xmm13,xmm12
2423 movdqa xmm14,xmm9
2424 DB 102,15,56,222,249
2425 movups xmm1,XMMWORD[((-32))+rcx]
2426
2427 paddd xmm9,xmm9
2428 DB 102,15,56,222,208
2429 pxor xmm12,xmm15
2430 psrad xmm14,31
2431 DB 102,15,56,222,216
2432 paddq xmm15,xmm15
2433 pand xmm14,xmm8
2434 DB 102,15,56,222,224
2435 DB 102,15,56,222,232
2436 DB 102,15,56,222,240
2437 pxor xmm15,xmm14
2438 movaps xmm14,xmm13
2439 DB 102,15,56,222,248
2440
2441 movdqa xmm0,xmm9
2442 paddd xmm9,xmm9
2443 DB 102,15,56,222,209
2444 pxor xmm13,xmm15
2445 psrad xmm0,31
2446 DB 102,15,56,222,217
2447 paddq xmm15,xmm15
2448 pand xmm0,xmm8
2449 DB 102,15,56,222,225
2450 DB 102,15,56,222,233
2451 pxor xmm15,xmm0
2452 movups xmm0,XMMWORD[rbp]
2453 DB 102,15,56,222,241
2454 DB 102,15,56,222,249
2455 movups xmm1,XMMWORD[16+rbp]
2456
2457 pxor xmm14,xmm15
2458 DB 102,15,56,223,84,36,0
2459 psrad xmm9,31
2460 paddq xmm15,xmm15
2461 DB 102,15,56,223,92,36,16
2462 DB 102,15,56,223,100,36,32
2463 pand xmm9,xmm8
2464 mov rax,r10
2465 DB 102,15,56,223,108,36,48
2466 DB 102,15,56,223,116,36,64
2467 DB 102,15,56,223,124,36,80
2468 pxor xmm15,xmm9
2469
2470 lea rsi,[96+rsi]
2471 movups XMMWORD[(-96)+rsi],xmm2
2472 movups XMMWORD[(-80)+rsi],xmm3
2473 movups XMMWORD[(-64)+rsi],xmm4
2474 movups XMMWORD[(-48)+rsi],xmm5
2475 movups XMMWORD[(-32)+rsi],xmm6
2476 movups XMMWORD[(-16)+rsi],xmm7
2477 sub rdx,16*6
2478 jnc NEAR $L$xts_dec_grandloop
2479
2480 mov eax,16+96
2481 sub eax,r10d
2482 mov rcx,rbp
2483 shr eax,4
2484
2485 $L$xts_dec_short:
2486
2487 mov r10d,eax
2488 pxor xmm10,xmm0
2489 pxor xmm11,xmm0
2490 add rdx,16*6
2491 jz NEAR $L$xts_dec_done
2492
2493 pxor xmm12,xmm0
2494 cmp rdx,0x20
2495 jb NEAR $L$xts_dec_one
2496 pxor xmm13,xmm0
2497 je NEAR $L$xts_dec_two
2498
2499 pxor xmm14,xmm0
2500 cmp rdx,0x40
2501 jb NEAR $L$xts_dec_three
2502 je NEAR $L$xts_dec_four
2503
2504 movdqu xmm2,XMMWORD[rdi]
2505 movdqu xmm3,XMMWORD[16+rdi]
2506 movdqu xmm4,XMMWORD[32+rdi]
2507 pxor xmm2,xmm10
2508 movdqu xmm5,XMMWORD[48+rdi]
2509 pxor xmm3,xmm11
2510 movdqu xmm6,XMMWORD[64+rdi]
2511 lea rdi,[80+rdi]
2512 pxor xmm4,xmm12
2513 pxor xmm5,xmm13
2514 pxor xmm6,xmm14
2515
2516 call _aesni_decrypt6
2517
2518 xorps xmm2,xmm10
2519 xorps xmm3,xmm11
2520 xorps xmm4,xmm12
2521 movdqu XMMWORD[rsi],xmm2
2522 xorps xmm5,xmm13
2523 movdqu XMMWORD[16+rsi],xmm3
2524 xorps xmm6,xmm14
2525 movdqu XMMWORD[32+rsi],xmm4
2526 pxor xmm14,xmm14
2527 movdqu XMMWORD[48+rsi],xmm5
2528 pcmpgtd xmm14,xmm15
2529 movdqu XMMWORD[64+rsi],xmm6
2530 lea rsi,[80+rsi]
2531 pshufd xmm11,xmm14,0x13
2532 and r9,15
2533 jz NEAR $L$xts_dec_ret
2534
2535 movdqa xmm10,xmm15
2536 paddq xmm15,xmm15
2537 pand xmm11,xmm8
2538 pxor xmm11,xmm15
2539 jmp NEAR $L$xts_dec_done2
2540
2541 ALIGN 16
2542 $L$xts_dec_one:
2543 movups xmm2,XMMWORD[rdi]
2544 lea rdi,[16+rdi]
2545 xorps xmm2,xmm10
2546 movups xmm0,XMMWORD[rcx]
2547 movups xmm1,XMMWORD[16+rcx]
2548 lea rcx,[32+rcx]
2549 xorps xmm2,xmm0
2550 $L$oop_dec1_12:
2551 DB 102,15,56,222,209
2552 dec eax
2553 movups xmm1,XMMWORD[rcx]
2554 lea rcx,[16+rcx]
2555 jnz NEAR $L$oop_dec1_12
2556 DB 102,15,56,223,209
2557 xorps xmm2,xmm10
2558 movdqa xmm10,xmm11
2559 movups XMMWORD[rsi],xmm2
2560 movdqa xmm11,xmm12
2561 lea rsi,[16+rsi]
2562 jmp NEAR $L$xts_dec_done
2563
2564 ALIGN 16
2565 $L$xts_dec_two:
2566 movups xmm2,XMMWORD[rdi]
2567 movups xmm3,XMMWORD[16+rdi]
2568 lea rdi,[32+rdi]
2569 xorps xmm2,xmm10
2570 xorps xmm3,xmm11
2571
2572 call _aesni_decrypt2
2573
2574 xorps xmm2,xmm10
2575 movdqa xmm10,xmm12
2576 xorps xmm3,xmm11
2577 movdqa xmm11,xmm13
2578 movups XMMWORD[rsi],xmm2
2579 movups XMMWORD[16+rsi],xmm3
2580 lea rsi,[32+rsi]
2581 jmp NEAR $L$xts_dec_done
2582
2583 ALIGN 16
2584 $L$xts_dec_three:
2585 movups xmm2,XMMWORD[rdi]
2586 movups xmm3,XMMWORD[16+rdi]
2587 movups xmm4,XMMWORD[32+rdi]
2588 lea rdi,[48+rdi]
2589 xorps xmm2,xmm10
2590 xorps xmm3,xmm11
2591 xorps xmm4,xmm12
2592
2593 call _aesni_decrypt3
2594
2595 xorps xmm2,xmm10
2596 movdqa xmm10,xmm13
2597 xorps xmm3,xmm11
2598 movdqa xmm11,xmm14
2599 xorps xmm4,xmm12
2600 movups XMMWORD[rsi],xmm2
2601 movups XMMWORD[16+rsi],xmm3
2602 movups XMMWORD[32+rsi],xmm4
2603 lea rsi,[48+rsi]
2604 jmp NEAR $L$xts_dec_done
2605
2606 ALIGN 16
2607 $L$xts_dec_four:
2608 movups xmm2,XMMWORD[rdi]
2609 movups xmm3,XMMWORD[16+rdi]
2610 movups xmm4,XMMWORD[32+rdi]
2611 xorps xmm2,xmm10
2612 movups xmm5,XMMWORD[48+rdi]
2613 lea rdi,[64+rdi]
2614 xorps xmm3,xmm11
2615 xorps xmm4,xmm12
2616 xorps xmm5,xmm13
2617
2618 call _aesni_decrypt4
2619
2620 pxor xmm2,xmm10
2621 movdqa xmm10,xmm14
2622 pxor xmm3,xmm11
2623 movdqa xmm11,xmm15
2624 pxor xmm4,xmm12
2625 movdqu XMMWORD[rsi],xmm2
2626 pxor xmm5,xmm13
2627 movdqu XMMWORD[16+rsi],xmm3
2628 movdqu XMMWORD[32+rsi],xmm4
2629 movdqu XMMWORD[48+rsi],xmm5
2630 lea rsi,[64+rsi]
2631 jmp NEAR $L$xts_dec_done
2632
2633 ALIGN 16
2634 $L$xts_dec_done:
2635 and r9,15
2636 jz NEAR $L$xts_dec_ret
2637 $L$xts_dec_done2:
2638 mov rdx,r9
2639 mov rcx,rbp
2640 mov eax,r10d
2641
2642 movups xmm2,XMMWORD[rdi]
2643 xorps xmm2,xmm11
2644 movups xmm0,XMMWORD[rcx]
2645 movups xmm1,XMMWORD[16+rcx]
2646 lea rcx,[32+rcx]
2647 xorps xmm2,xmm0
2648 $L$oop_dec1_13:
2649 DB 102,15,56,222,209
2650 dec eax
2651 movups xmm1,XMMWORD[rcx]
2652 lea rcx,[16+rcx]
2653 jnz NEAR $L$oop_dec1_13
2654 DB 102,15,56,223,209
2655 xorps xmm2,xmm11
2656 movups XMMWORD[rsi],xmm2
2657
2658 $L$xts_dec_steal:
2659 movzx eax,BYTE[16+rdi]
2660 movzx ecx,BYTE[rsi]
2661 lea rdi,[1+rdi]
2662 mov BYTE[rsi],al
2663 mov BYTE[16+rsi],cl
2664 lea rsi,[1+rsi]
2665 sub rdx,1
2666 jnz NEAR $L$xts_dec_steal
2667
2668 sub rsi,r9
2669 mov rcx,rbp
2670 mov eax,r10d
2671
2672 movups xmm2,XMMWORD[rsi]
2673 xorps xmm2,xmm10
2674 movups xmm0,XMMWORD[rcx]
2675 movups xmm1,XMMWORD[16+rcx]
2676 lea rcx,[32+rcx]
2677 xorps xmm2,xmm0
2678 $L$oop_dec1_14:
2679 DB 102,15,56,222,209
2680 dec eax
2681 movups xmm1,XMMWORD[rcx]
2682 lea rcx,[16+rcx]
2683 jnz NEAR $L$oop_dec1_14
2684 DB 102,15,56,223,209
2685 xorps xmm2,xmm10
2686 movups XMMWORD[rsi],xmm2
2687
2688 $L$xts_dec_ret:
2689 xorps xmm0,xmm0
2690 pxor xmm1,xmm1
2691 pxor xmm2,xmm2
2692 pxor xmm3,xmm3
2693 pxor xmm4,xmm4
2694 pxor xmm5,xmm5
2695 movaps xmm6,XMMWORD[((-168))+r11]
2696 movaps XMMWORD[(-168)+r11],xmm0
2697 movaps xmm7,XMMWORD[((-152))+r11]
2698 movaps XMMWORD[(-152)+r11],xmm0
2699 movaps xmm8,XMMWORD[((-136))+r11]
2700 movaps XMMWORD[(-136)+r11],xmm0
2701 movaps xmm9,XMMWORD[((-120))+r11]
2702 movaps XMMWORD[(-120)+r11],xmm0
2703 movaps xmm10,XMMWORD[((-104))+r11]
2704 movaps XMMWORD[(-104)+r11],xmm0
2705 movaps xmm11,XMMWORD[((-88))+r11]
2706 movaps XMMWORD[(-88)+r11],xmm0
2707 movaps xmm12,XMMWORD[((-72))+r11]
2708 movaps XMMWORD[(-72)+r11],xmm0
2709 movaps xmm13,XMMWORD[((-56))+r11]
2710 movaps XMMWORD[(-56)+r11],xmm0
2711 movaps xmm14,XMMWORD[((-40))+r11]
2712 movaps XMMWORD[(-40)+r11],xmm0
2713 movaps xmm15,XMMWORD[((-24))+r11]
2714 movaps XMMWORD[(-24)+r11],xmm0
2715 movaps XMMWORD[rsp],xmm0
2716 movaps XMMWORD[16+rsp],xmm0
2717 movaps XMMWORD[32+rsp],xmm0
2718 movaps XMMWORD[48+rsp],xmm0
2719 movaps XMMWORD[64+rsp],xmm0
2720 movaps XMMWORD[80+rsp],xmm0
2721 movaps XMMWORD[96+rsp],xmm0
2722 mov rbp,QWORD[((-8))+r11]
2723 lea rsp,[r11]
2724 $L$xts_dec_epilogue:
2725 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
2726 mov rsi,QWORD[16+rsp]
2727 DB 0F3h,0C3h ;repret
2728 $L$SEH_end_aesni_xts_decrypt:
2729 global aesni_ocb_encrypt
2730
2731 ALIGN 32
2732 aesni_ocb_encrypt:
2733 mov QWORD[8+rsp],rdi ;WIN64 prologue
2734 mov QWORD[16+rsp],rsi
2735 mov rax,rsp
2736 $L$SEH_begin_aesni_ocb_encrypt:
2737 mov rdi,rcx
2738 mov rsi,rdx
2739 mov rdx,r8
2740 mov rcx,r9
2741 mov r8,QWORD[40+rsp]
2742 mov r9,QWORD[48+rsp]
2743
2744
2745 lea rax,[rsp]
2746 push rbx
2747 push rbp
2748 push r12
2749 push r13
2750 push r14
2751 lea rsp,[((-160))+rsp]
2752 movaps XMMWORD[rsp],xmm6
2753 movaps XMMWORD[16+rsp],xmm7
2754 movaps XMMWORD[32+rsp],xmm8
2755 movaps XMMWORD[48+rsp],xmm9
2756 movaps XMMWORD[64+rsp],xmm10
2757 movaps XMMWORD[80+rsp],xmm11
2758 movaps XMMWORD[96+rsp],xmm12
2759 movaps XMMWORD[112+rsp],xmm13
2760 movaps XMMWORD[128+rsp],xmm14
2761 movaps XMMWORD[144+rsp],xmm15
2762 $L$ocb_enc_body:
2763 mov rbx,QWORD[56+rax]
2764 mov rbp,QWORD[((56+8))+rax]
2765
2766 mov r10d,DWORD[240+rcx]
2767 mov r11,rcx
2768 shl r10d,4
2769 movups xmm9,XMMWORD[rcx]
2770 movups xmm1,XMMWORD[16+r10*1+rcx]
2771
2772 movdqu xmm15,XMMWORD[r9]
2773 pxor xmm9,xmm1
2774 pxor xmm15,xmm1
2775
2776 mov eax,16+32
2777 lea rcx,[32+r10*1+r11]
2778 movups xmm1,XMMWORD[16+r11]
2779 sub rax,r10
2780 mov r10,rax
2781
2782 movdqu xmm10,XMMWORD[rbx]
2783 movdqu xmm8,XMMWORD[rbp]
2784
2785 test r8,1
2786 jnz NEAR $L$ocb_enc_odd
2787
2788 bsf r12,r8
2789 add r8,1
2790 shl r12,4
2791 movdqu xmm7,XMMWORD[r12*1+rbx]
2792 movdqu xmm2,XMMWORD[rdi]
2793 lea rdi,[16+rdi]
2794
2795 call __ocb_encrypt1
2796
2797 movdqa xmm15,xmm7
2798 movups XMMWORD[rsi],xmm2
2799 lea rsi,[16+rsi]
2800 sub rdx,1
2801 jz NEAR $L$ocb_enc_done
2802
2803 $L$ocb_enc_odd:
2804 lea r12,[1+r8]
2805 lea r13,[3+r8]
2806 lea r14,[5+r8]
2807 lea r8,[6+r8]
2808 bsf r12,r12
2809 bsf r13,r13
2810 bsf r14,r14
2811 shl r12,4
2812 shl r13,4
2813 shl r14,4
2814
2815 sub rdx,6
2816 jc NEAR $L$ocb_enc_short
2817 jmp NEAR $L$ocb_enc_grandloop
2818
2819 ALIGN 32
2820 $L$ocb_enc_grandloop:
2821 movdqu xmm2,XMMWORD[rdi]
2822 movdqu xmm3,XMMWORD[16+rdi]
2823 movdqu xmm4,XMMWORD[32+rdi]
2824 movdqu xmm5,XMMWORD[48+rdi]
2825 movdqu xmm6,XMMWORD[64+rdi]
2826 movdqu xmm7,XMMWORD[80+rdi]
2827 lea rdi,[96+rdi]
2828
2829 call __ocb_encrypt6
2830
2831 movups XMMWORD[rsi],xmm2
2832 movups XMMWORD[16+rsi],xmm3
2833 movups XMMWORD[32+rsi],xmm4
2834 movups XMMWORD[48+rsi],xmm5
2835 movups XMMWORD[64+rsi],xmm6
2836 movups XMMWORD[80+rsi],xmm7
2837 lea rsi,[96+rsi]
2838 sub rdx,6
2839 jnc NEAR $L$ocb_enc_grandloop
2840
2841 $L$ocb_enc_short:
2842 add rdx,6
2843 jz NEAR $L$ocb_enc_done
2844
2845 movdqu xmm2,XMMWORD[rdi]
2846 cmp rdx,2
2847 jb NEAR $L$ocb_enc_one
2848 movdqu xmm3,XMMWORD[16+rdi]
2849 je NEAR $L$ocb_enc_two
2850
2851 movdqu xmm4,XMMWORD[32+rdi]
2852 cmp rdx,4
2853 jb NEAR $L$ocb_enc_three
2854 movdqu xmm5,XMMWORD[48+rdi]
2855 je NEAR $L$ocb_enc_four
2856
2857 movdqu xmm6,XMMWORD[64+rdi]
2858 pxor xmm7,xmm7
2859
2860 call __ocb_encrypt6
2861
2862 movdqa xmm15,xmm14
2863 movups XMMWORD[rsi],xmm2
2864 movups XMMWORD[16+rsi],xmm3
2865 movups XMMWORD[32+rsi],xmm4
2866 movups XMMWORD[48+rsi],xmm5
2867 movups XMMWORD[64+rsi],xmm6
2868
2869 jmp NEAR $L$ocb_enc_done
2870
2871 ALIGN 16
2872 $L$ocb_enc_one:
2873 movdqa xmm7,xmm10
2874
2875 call __ocb_encrypt1
2876
2877 movdqa xmm15,xmm7
2878 movups XMMWORD[rsi],xmm2
2879 jmp NEAR $L$ocb_enc_done
2880
2881 ALIGN 16
2882 $L$ocb_enc_two:
2883 pxor xmm4,xmm4
2884 pxor xmm5,xmm5
2885
2886 call __ocb_encrypt4
2887
2888 movdqa xmm15,xmm11
2889 movups XMMWORD[rsi],xmm2
2890 movups XMMWORD[16+rsi],xmm3
2891
2892 jmp NEAR $L$ocb_enc_done
2893
2894 ALIGN 16
2895 $L$ocb_enc_three:
2896 pxor xmm5,xmm5
2897
2898 call __ocb_encrypt4
2899
2900 movdqa xmm15,xmm12
2901 movups XMMWORD[rsi],xmm2
2902 movups XMMWORD[16+rsi],xmm3
2903 movups XMMWORD[32+rsi],xmm4
2904
2905 jmp NEAR $L$ocb_enc_done
2906
2907 ALIGN 16
2908 $L$ocb_enc_four:
2909 call __ocb_encrypt4
2910
2911 movdqa xmm15,xmm13
2912 movups XMMWORD[rsi],xmm2
2913 movups XMMWORD[16+rsi],xmm3
2914 movups XMMWORD[32+rsi],xmm4
2915 movups XMMWORD[48+rsi],xmm5
2916
2917 $L$ocb_enc_done:
2918 pxor xmm15,xmm0
2919 movdqu XMMWORD[rbp],xmm8
2920 movdqu XMMWORD[r9],xmm15
2921
2922 xorps xmm0,xmm0
2923 pxor xmm1,xmm1
2924 pxor xmm2,xmm2
2925 pxor xmm3,xmm3
2926 pxor xmm4,xmm4
2927 pxor xmm5,xmm5
2928 movaps xmm6,XMMWORD[rsp]
2929 movaps XMMWORD[rsp],xmm0
2930 movaps xmm7,XMMWORD[16+rsp]
2931 movaps XMMWORD[16+rsp],xmm0
2932 movaps xmm8,XMMWORD[32+rsp]
2933 movaps XMMWORD[32+rsp],xmm0
2934 movaps xmm9,XMMWORD[48+rsp]
2935 movaps XMMWORD[48+rsp],xmm0
2936 movaps xmm10,XMMWORD[64+rsp]
2937 movaps XMMWORD[64+rsp],xmm0
2938 movaps xmm11,XMMWORD[80+rsp]
2939 movaps XMMWORD[80+rsp],xmm0
2940 movaps xmm12,XMMWORD[96+rsp]
2941 movaps XMMWORD[96+rsp],xmm0
2942 movaps xmm13,XMMWORD[112+rsp]
2943 movaps XMMWORD[112+rsp],xmm0
2944 movaps xmm14,XMMWORD[128+rsp]
2945 movaps XMMWORD[128+rsp],xmm0
2946 movaps xmm15,XMMWORD[144+rsp]
2947 movaps XMMWORD[144+rsp],xmm0
2948 lea rax,[((160+40))+rsp]
2949 $L$ocb_enc_pop:
2950 mov r14,QWORD[((-40))+rax]
2951 mov r13,QWORD[((-32))+rax]
2952 mov r12,QWORD[((-24))+rax]
2953 mov rbp,QWORD[((-16))+rax]
2954 mov rbx,QWORD[((-8))+rax]
2955 lea rsp,[rax]
2956 $L$ocb_enc_epilogue:
2957 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
2958 mov rsi,QWORD[16+rsp]
2959 DB 0F3h,0C3h ;repret
2960 $L$SEH_end_aesni_ocb_encrypt:
2961
2962
2963 ALIGN 32
2964 __ocb_encrypt6:
2965 pxor xmm15,xmm9
2966 movdqu xmm11,XMMWORD[r12*1+rbx]
2967 movdqa xmm12,xmm10
2968 movdqu xmm13,XMMWORD[r13*1+rbx]
2969 movdqa xmm14,xmm10
2970 pxor xmm10,xmm15
2971 movdqu xmm15,XMMWORD[r14*1+rbx]
2972 pxor xmm11,xmm10
2973 pxor xmm8,xmm2
2974 pxor xmm2,xmm10
2975 pxor xmm12,xmm11
2976 pxor xmm8,xmm3
2977 pxor xmm3,xmm11
2978 pxor xmm13,xmm12
2979 pxor xmm8,xmm4
2980 pxor xmm4,xmm12
2981 pxor xmm14,xmm13
2982 pxor xmm8,xmm5
2983 pxor xmm5,xmm13
2984 pxor xmm15,xmm14
2985 pxor xmm8,xmm6
2986 pxor xmm6,xmm14
2987 pxor xmm8,xmm7
2988 pxor xmm7,xmm15
2989 movups xmm0,XMMWORD[32+r11]
2990
2991 lea r12,[1+r8]
2992 lea r13,[3+r8]
2993 lea r14,[5+r8]
2994 add r8,6
2995 pxor xmm10,xmm9
2996 bsf r12,r12
2997 bsf r13,r13
2998 bsf r14,r14
2999
3000 DB 102,15,56,220,209
3001 DB 102,15,56,220,217
3002 DB 102,15,56,220,225
3003 DB 102,15,56,220,233
3004 pxor xmm11,xmm9
3005 pxor xmm12,xmm9
3006 DB 102,15,56,220,241
3007 pxor xmm13,xmm9
3008 pxor xmm14,xmm9
3009 DB 102,15,56,220,249
3010 movups xmm1,XMMWORD[48+r11]
3011 pxor xmm15,xmm9
3012
3013 DB 102,15,56,220,208
3014 DB 102,15,56,220,216
3015 DB 102,15,56,220,224
3016 DB 102,15,56,220,232
3017 DB 102,15,56,220,240
3018 DB 102,15,56,220,248
3019 movups xmm0,XMMWORD[64+r11]
3020 shl r12,4
3021 shl r13,4
3022 jmp NEAR $L$ocb_enc_loop6
3023
3024 ALIGN 32
3025 $L$ocb_enc_loop6:
3026 DB 102,15,56,220,209
3027 DB 102,15,56,220,217
3028 DB 102,15,56,220,225
3029 DB 102,15,56,220,233
3030 DB 102,15,56,220,241
3031 DB 102,15,56,220,249
3032 movups xmm1,XMMWORD[rax*1+rcx]
3033 add rax,32
3034
3035 DB 102,15,56,220,208
3036 DB 102,15,56,220,216
3037 DB 102,15,56,220,224
3038 DB 102,15,56,220,232
3039 DB 102,15,56,220,240
3040 DB 102,15,56,220,248
3041 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
3042 jnz NEAR $L$ocb_enc_loop6
3043
3044 DB 102,15,56,220,209
3045 DB 102,15,56,220,217
3046 DB 102,15,56,220,225
3047 DB 102,15,56,220,233
3048 DB 102,15,56,220,241
3049 DB 102,15,56,220,249
3050 movups xmm1,XMMWORD[16+r11]
3051 shl r14,4
3052
3053 DB 102,65,15,56,221,210
3054 movdqu xmm10,XMMWORD[rbx]
3055 mov rax,r10
3056 DB 102,65,15,56,221,219
3057 DB 102,65,15,56,221,228
3058 DB 102,65,15,56,221,237
3059 DB 102,65,15,56,221,246
3060 DB 102,65,15,56,221,255
3061 DB 0F3h,0C3h ;repret
3062
3063
3064
3065 ALIGN 32
3066 __ocb_encrypt4:
3067 pxor xmm15,xmm9
3068 movdqu xmm11,XMMWORD[r12*1+rbx]
3069 movdqa xmm12,xmm10
3070 movdqu xmm13,XMMWORD[r13*1+rbx]
3071 pxor xmm10,xmm15
3072 pxor xmm11,xmm10
3073 pxor xmm8,xmm2
3074 pxor xmm2,xmm10
3075 pxor xmm12,xmm11
3076 pxor xmm8,xmm3
3077 pxor xmm3,xmm11
3078 pxor xmm13,xmm12
3079 pxor xmm8,xmm4
3080 pxor xmm4,xmm12
3081 pxor xmm8,xmm5
3082 pxor xmm5,xmm13
3083 movups xmm0,XMMWORD[32+r11]
3084
3085 pxor xmm10,xmm9
3086 pxor xmm11,xmm9
3087 pxor xmm12,xmm9
3088 pxor xmm13,xmm9
3089
3090 DB 102,15,56,220,209
3091 DB 102,15,56,220,217
3092 DB 102,15,56,220,225
3093 DB 102,15,56,220,233
3094 movups xmm1,XMMWORD[48+r11]
3095
3096 DB 102,15,56,220,208
3097 DB 102,15,56,220,216
3098 DB 102,15,56,220,224
3099 DB 102,15,56,220,232
3100 movups xmm0,XMMWORD[64+r11]
3101 jmp NEAR $L$ocb_enc_loop4
3102
3103 ALIGN 32
3104 $L$ocb_enc_loop4:
3105 DB 102,15,56,220,209
3106 DB 102,15,56,220,217
3107 DB 102,15,56,220,225
3108 DB 102,15,56,220,233
3109 movups xmm1,XMMWORD[rax*1+rcx]
3110 add rax,32
3111
3112 DB 102,15,56,220,208
3113 DB 102,15,56,220,216
3114 DB 102,15,56,220,224
3115 DB 102,15,56,220,232
3116 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
3117 jnz NEAR $L$ocb_enc_loop4
3118
3119 DB 102,15,56,220,209
3120 DB 102,15,56,220,217
3121 DB 102,15,56,220,225
3122 DB 102,15,56,220,233
3123 movups xmm1,XMMWORD[16+r11]
3124 mov rax,r10
3125
3126 DB 102,65,15,56,221,210
3127 DB 102,65,15,56,221,219
3128 DB 102,65,15,56,221,228
3129 DB 102,65,15,56,221,237
3130 DB 0F3h,0C3h ;repret
3131
3132
3133
3134 ALIGN 32
3135 __ocb_encrypt1:
3136 pxor xmm7,xmm15
3137 pxor xmm7,xmm9
3138 pxor xmm8,xmm2
3139 pxor xmm2,xmm7
3140 movups xmm0,XMMWORD[32+r11]
3141
3142 DB 102,15,56,220,209
3143 movups xmm1,XMMWORD[48+r11]
3144 pxor xmm7,xmm9
3145
3146 DB 102,15,56,220,208
3147 movups xmm0,XMMWORD[64+r11]
3148 jmp NEAR $L$ocb_enc_loop1
3149
3150 ALIGN 32
3151 $L$ocb_enc_loop1:
3152 DB 102,15,56,220,209
3153 movups xmm1,XMMWORD[rax*1+rcx]
3154 add rax,32
3155
3156 DB 102,15,56,220,208
3157 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
3158 jnz NEAR $L$ocb_enc_loop1
3159
3160 DB 102,15,56,220,209
3161 movups xmm1,XMMWORD[16+r11]
3162 mov rax,r10
3163
3164 DB 102,15,56,221,215
3165 DB 0F3h,0C3h ;repret
3166
3167
3168 global aesni_ocb_decrypt
3169
3170 ALIGN 32
3171 aesni_ocb_decrypt:
3172 mov QWORD[8+rsp],rdi ;WIN64 prologue
3173 mov QWORD[16+rsp],rsi
3174 mov rax,rsp
3175 $L$SEH_begin_aesni_ocb_decrypt:
3176 mov rdi,rcx
3177 mov rsi,rdx
3178 mov rdx,r8
3179 mov rcx,r9
3180 mov r8,QWORD[40+rsp]
3181 mov r9,QWORD[48+rsp]
3182
3183
3184 lea rax,[rsp]
3185 push rbx
3186 push rbp
3187 push r12
3188 push r13
3189 push r14
3190 lea rsp,[((-160))+rsp]
3191 movaps XMMWORD[rsp],xmm6
3192 movaps XMMWORD[16+rsp],xmm7
3193 movaps XMMWORD[32+rsp],xmm8
3194 movaps XMMWORD[48+rsp],xmm9
3195 movaps XMMWORD[64+rsp],xmm10
3196 movaps XMMWORD[80+rsp],xmm11
3197 movaps XMMWORD[96+rsp],xmm12
3198 movaps XMMWORD[112+rsp],xmm13
3199 movaps XMMWORD[128+rsp],xmm14
3200 movaps XMMWORD[144+rsp],xmm15
3201 $L$ocb_dec_body:
3202 mov rbx,QWORD[56+rax]
3203 mov rbp,QWORD[((56+8))+rax]
3204
3205 mov r10d,DWORD[240+rcx]
3206 mov r11,rcx
3207 shl r10d,4
3208 movups xmm9,XMMWORD[rcx]
3209 movups xmm1,XMMWORD[16+r10*1+rcx]
3210
3211 movdqu xmm15,XMMWORD[r9]
3212 pxor xmm9,xmm1
3213 pxor xmm15,xmm1
3214
3215 mov eax,16+32
3216 lea rcx,[32+r10*1+r11]
3217 movups xmm1,XMMWORD[16+r11]
3218 sub rax,r10
3219 mov r10,rax
3220
3221 movdqu xmm10,XMMWORD[rbx]
3222 movdqu xmm8,XMMWORD[rbp]
3223
3224 test r8,1
3225 jnz NEAR $L$ocb_dec_odd
3226
3227 bsf r12,r8
3228 add r8,1
3229 shl r12,4
3230 movdqu xmm7,XMMWORD[r12*1+rbx]
3231 movdqu xmm2,XMMWORD[rdi]
3232 lea rdi,[16+rdi]
3233
3234 call __ocb_decrypt1
3235
3236 movdqa xmm15,xmm7
3237 movups XMMWORD[rsi],xmm2
3238 xorps xmm8,xmm2
3239 lea rsi,[16+rsi]
3240 sub rdx,1
3241 jz NEAR $L$ocb_dec_done
3242
3243 $L$ocb_dec_odd:
3244 lea r12,[1+r8]
3245 lea r13,[3+r8]
3246 lea r14,[5+r8]
3247 lea r8,[6+r8]
3248 bsf r12,r12
3249 bsf r13,r13
3250 bsf r14,r14
3251 shl r12,4
3252 shl r13,4
3253 shl r14,4
3254
3255 sub rdx,6
3256 jc NEAR $L$ocb_dec_short
3257 jmp NEAR $L$ocb_dec_grandloop
3258
3259 ALIGN 32
3260 $L$ocb_dec_grandloop:
3261 movdqu xmm2,XMMWORD[rdi]
3262 movdqu xmm3,XMMWORD[16+rdi]
3263 movdqu xmm4,XMMWORD[32+rdi]
3264 movdqu xmm5,XMMWORD[48+rdi]
3265 movdqu xmm6,XMMWORD[64+rdi]
3266 movdqu xmm7,XMMWORD[80+rdi]
3267 lea rdi,[96+rdi]
3268
3269 call __ocb_decrypt6
3270
3271 movups XMMWORD[rsi],xmm2
3272 pxor xmm8,xmm2
3273 movups XMMWORD[16+rsi],xmm3
3274 pxor xmm8,xmm3
3275 movups XMMWORD[32+rsi],xmm4
3276 pxor xmm8,xmm4
3277 movups XMMWORD[48+rsi],xmm5
3278 pxor xmm8,xmm5
3279 movups XMMWORD[64+rsi],xmm6
3280 pxor xmm8,xmm6
3281 movups XMMWORD[80+rsi],xmm7
3282 pxor xmm8,xmm7
3283 lea rsi,[96+rsi]
3284 sub rdx,6
3285 jnc NEAR $L$ocb_dec_grandloop
3286
3287 $L$ocb_dec_short:
3288 add rdx,6
3289 jz NEAR $L$ocb_dec_done
3290
3291 movdqu xmm2,XMMWORD[rdi]
3292 cmp rdx,2
3293 jb NEAR $L$ocb_dec_one
3294 movdqu xmm3,XMMWORD[16+rdi]
3295 je NEAR $L$ocb_dec_two
3296
3297 movdqu xmm4,XMMWORD[32+rdi]
3298 cmp rdx,4
3299 jb NEAR $L$ocb_dec_three
3300 movdqu xmm5,XMMWORD[48+rdi]
3301 je NEAR $L$ocb_dec_four
3302
3303 movdqu xmm6,XMMWORD[64+rdi]
3304 pxor xmm7,xmm7
3305
3306 call __ocb_decrypt6
3307
3308 movdqa xmm15,xmm14
3309 movups XMMWORD[rsi],xmm2
3310 pxor xmm8,xmm2
3311 movups XMMWORD[16+rsi],xmm3
3312 pxor xmm8,xmm3
3313 movups XMMWORD[32+rsi],xmm4
3314 pxor xmm8,xmm4
3315 movups XMMWORD[48+rsi],xmm5
3316 pxor xmm8,xmm5
3317 movups XMMWORD[64+rsi],xmm6
3318 pxor xmm8,xmm6
3319
3320 jmp NEAR $L$ocb_dec_done
3321
3322 ALIGN 16
3323 $L$ocb_dec_one:
3324 movdqa xmm7,xmm10
3325
3326 call __ocb_decrypt1
3327
3328 movdqa xmm15,xmm7
3329 movups XMMWORD[rsi],xmm2
3330 xorps xmm8,xmm2
3331 jmp NEAR $L$ocb_dec_done
3332
3333 ALIGN 16
3334 $L$ocb_dec_two:
3335 pxor xmm4,xmm4
3336 pxor xmm5,xmm5
3337
3338 call __ocb_decrypt4
3339
3340 movdqa xmm15,xmm11
3341 movups XMMWORD[rsi],xmm2
3342 xorps xmm8,xmm2
3343 movups XMMWORD[16+rsi],xmm3
3344 xorps xmm8,xmm3
3345
3346 jmp NEAR $L$ocb_dec_done
3347
3348 ALIGN 16
3349 $L$ocb_dec_three:
3350 pxor xmm5,xmm5
3351
3352 call __ocb_decrypt4
3353
3354 movdqa xmm15,xmm12
3355 movups XMMWORD[rsi],xmm2
3356 xorps xmm8,xmm2
3357 movups XMMWORD[16+rsi],xmm3
3358 xorps xmm8,xmm3
3359 movups XMMWORD[32+rsi],xmm4
3360 xorps xmm8,xmm4
3361
3362 jmp NEAR $L$ocb_dec_done
3363
3364 ALIGN 16
3365 $L$ocb_dec_four:
3366 call __ocb_decrypt4
3367
3368 movdqa xmm15,xmm13
3369 movups XMMWORD[rsi],xmm2
3370 pxor xmm8,xmm2
3371 movups XMMWORD[16+rsi],xmm3
3372 pxor xmm8,xmm3
3373 movups XMMWORD[32+rsi],xmm4
3374 pxor xmm8,xmm4
3375 movups XMMWORD[48+rsi],xmm5
3376 pxor xmm8,xmm5
3377
3378 $L$ocb_dec_done:
3379 pxor xmm15,xmm0
3380 movdqu XMMWORD[rbp],xmm8
3381 movdqu XMMWORD[r9],xmm15
3382
3383 xorps xmm0,xmm0
3384 pxor xmm1,xmm1
3385 pxor xmm2,xmm2
3386 pxor xmm3,xmm3
3387 pxor xmm4,xmm4
3388 pxor xmm5,xmm5
3389 movaps xmm6,XMMWORD[rsp]
3390 movaps XMMWORD[rsp],xmm0
3391 movaps xmm7,XMMWORD[16+rsp]
3392 movaps XMMWORD[16+rsp],xmm0
3393 movaps xmm8,XMMWORD[32+rsp]
3394 movaps XMMWORD[32+rsp],xmm0
3395 movaps xmm9,XMMWORD[48+rsp]
3396 movaps XMMWORD[48+rsp],xmm0
3397 movaps xmm10,XMMWORD[64+rsp]
3398 movaps XMMWORD[64+rsp],xmm0
3399 movaps xmm11,XMMWORD[80+rsp]
3400 movaps XMMWORD[80+rsp],xmm0
3401 movaps xmm12,XMMWORD[96+rsp]
3402 movaps XMMWORD[96+rsp],xmm0
3403 movaps xmm13,XMMWORD[112+rsp]
3404 movaps XMMWORD[112+rsp],xmm0
3405 movaps xmm14,XMMWORD[128+rsp]
3406 movaps XMMWORD[128+rsp],xmm0
3407 movaps xmm15,XMMWORD[144+rsp]
3408 movaps XMMWORD[144+rsp],xmm0
3409 lea rax,[((160+40))+rsp]
3410 $L$ocb_dec_pop:
3411 mov r14,QWORD[((-40))+rax]
3412 mov r13,QWORD[((-32))+rax]
3413 mov r12,QWORD[((-24))+rax]
3414 mov rbp,QWORD[((-16))+rax]
3415 mov rbx,QWORD[((-8))+rax]
3416 lea rsp,[rax]
3417 $L$ocb_dec_epilogue:
3418 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
3419 mov rsi,QWORD[16+rsp]
3420 DB 0F3h,0C3h ;repret
3421 $L$SEH_end_aesni_ocb_decrypt:
3422
3423
3424 ALIGN 32
3425 __ocb_decrypt6:
3426 pxor xmm15,xmm9
3427 movdqu xmm11,XMMWORD[r12*1+rbx]
3428 movdqa xmm12,xmm10
3429 movdqu xmm13,XMMWORD[r13*1+rbx]
3430 movdqa xmm14,xmm10
3431 pxor xmm10,xmm15
3432 movdqu xmm15,XMMWORD[r14*1+rbx]
3433 pxor xmm11,xmm10
3434 pxor xmm2,xmm10
3435 pxor xmm12,xmm11
3436 pxor xmm3,xmm11
3437 pxor xmm13,xmm12
3438 pxor xmm4,xmm12
3439 pxor xmm14,xmm13
3440 pxor xmm5,xmm13
3441 pxor xmm15,xmm14
3442 pxor xmm6,xmm14
3443 pxor xmm7,xmm15
3444 movups xmm0,XMMWORD[32+r11]
3445
3446 lea r12,[1+r8]
3447 lea r13,[3+r8]
3448 lea r14,[5+r8]
3449 add r8,6
3450 pxor xmm10,xmm9
3451 bsf r12,r12
3452 bsf r13,r13
3453 bsf r14,r14
3454
3455 DB 102,15,56,222,209
3456 DB 102,15,56,222,217
3457 DB 102,15,56,222,225
3458 DB 102,15,56,222,233
3459 pxor xmm11,xmm9
3460 pxor xmm12,xmm9
3461 DB 102,15,56,222,241
3462 pxor xmm13,xmm9
3463 pxor xmm14,xmm9
3464 DB 102,15,56,222,249
3465 movups xmm1,XMMWORD[48+r11]
3466 pxor xmm15,xmm9
3467
3468 DB 102,15,56,222,208
3469 DB 102,15,56,222,216
3470 DB 102,15,56,222,224
3471 DB 102,15,56,222,232
3472 DB 102,15,56,222,240
3473 DB 102,15,56,222,248
3474 movups xmm0,XMMWORD[64+r11]
3475 shl r12,4
3476 shl r13,4
3477 jmp NEAR $L$ocb_dec_loop6
3478
3479 ALIGN 32
3480 $L$ocb_dec_loop6:
3481 DB 102,15,56,222,209
3482 DB 102,15,56,222,217
3483 DB 102,15,56,222,225
3484 DB 102,15,56,222,233
3485 DB 102,15,56,222,241
3486 DB 102,15,56,222,249
3487 movups xmm1,XMMWORD[rax*1+rcx]
3488 add rax,32
3489
3490 DB 102,15,56,222,208
3491 DB 102,15,56,222,216
3492 DB 102,15,56,222,224
3493 DB 102,15,56,222,232
3494 DB 102,15,56,222,240
3495 DB 102,15,56,222,248
3496 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
3497 jnz NEAR $L$ocb_dec_loop6
3498
3499 DB 102,15,56,222,209
3500 DB 102,15,56,222,217
3501 DB 102,15,56,222,225
3502 DB 102,15,56,222,233
3503 DB 102,15,56,222,241
3504 DB 102,15,56,222,249
3505 movups xmm1,XMMWORD[16+r11]
3506 shl r14,4
3507
3508 DB 102,65,15,56,223,210
3509 movdqu xmm10,XMMWORD[rbx]
3510 mov rax,r10
3511 DB 102,65,15,56,223,219
3512 DB 102,65,15,56,223,228
3513 DB 102,65,15,56,223,237
3514 DB 102,65,15,56,223,246
3515 DB 102,65,15,56,223,255
3516 DB 0F3h,0C3h ;repret
3517
3518
3519
3520 ALIGN 32
3521 __ocb_decrypt4:
3522 pxor xmm15,xmm9
3523 movdqu xmm11,XMMWORD[r12*1+rbx]
3524 movdqa xmm12,xmm10
3525 movdqu xmm13,XMMWORD[r13*1+rbx]
3526 pxor xmm10,xmm15
3527 pxor xmm11,xmm10
3528 pxor xmm2,xmm10
3529 pxor xmm12,xmm11
3530 pxor xmm3,xmm11
3531 pxor xmm13,xmm12
3532 pxor xmm4,xmm12
3533 pxor xmm5,xmm13
3534 movups xmm0,XMMWORD[32+r11]
3535
3536 pxor xmm10,xmm9
3537 pxor xmm11,xmm9
3538 pxor xmm12,xmm9
3539 pxor xmm13,xmm9
3540
3541 DB 102,15,56,222,209
3542 DB 102,15,56,222,217
3543 DB 102,15,56,222,225
3544 DB 102,15,56,222,233
3545 movups xmm1,XMMWORD[48+r11]
3546
3547 DB 102,15,56,222,208
3548 DB 102,15,56,222,216
3549 DB 102,15,56,222,224
3550 DB 102,15,56,222,232
3551 movups xmm0,XMMWORD[64+r11]
3552 jmp NEAR $L$ocb_dec_loop4
3553
3554 ALIGN 32
3555 $L$ocb_dec_loop4:
3556 DB 102,15,56,222,209
3557 DB 102,15,56,222,217
3558 DB 102,15,56,222,225
3559 DB 102,15,56,222,233
3560 movups xmm1,XMMWORD[rax*1+rcx]
3561 add rax,32
3562
3563 DB 102,15,56,222,208
3564 DB 102,15,56,222,216
3565 DB 102,15,56,222,224
3566 DB 102,15,56,222,232
3567 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
3568 jnz NEAR $L$ocb_dec_loop4
3569
3570 DB 102,15,56,222,209
3571 DB 102,15,56,222,217
3572 DB 102,15,56,222,225
3573 DB 102,15,56,222,233
3574 movups xmm1,XMMWORD[16+r11]
3575 mov rax,r10
3576
3577 DB 102,65,15,56,223,210
3578 DB 102,65,15,56,223,219
3579 DB 102,65,15,56,223,228
3580 DB 102,65,15,56,223,237
3581 DB 0F3h,0C3h ;repret
3582
3583
3584
3585 ALIGN 32
3586 __ocb_decrypt1:
3587 pxor xmm7,xmm15
3588 pxor xmm7,xmm9
3589 pxor xmm2,xmm7
3590 movups xmm0,XMMWORD[32+r11]
3591
3592 DB 102,15,56,222,209
3593 movups xmm1,XMMWORD[48+r11]
3594 pxor xmm7,xmm9
3595
3596 DB 102,15,56,222,208
3597 movups xmm0,XMMWORD[64+r11]
3598 jmp NEAR $L$ocb_dec_loop1
3599
3600 ALIGN 32
3601 $L$ocb_dec_loop1:
3602 DB 102,15,56,222,209
3603 movups xmm1,XMMWORD[rax*1+rcx]
3604 add rax,32
3605
3606 DB 102,15,56,222,208
3607 movups xmm0,XMMWORD[((-16))+rax*1+rcx]
3608 jnz NEAR $L$ocb_dec_loop1
3609
3610 DB 102,15,56,222,209
3611 movups xmm1,XMMWORD[16+r11]
3612 mov rax,r10
3613
3614 DB 102,15,56,223,215
3615 DB 0F3h,0C3h ;repret
3616
3617 global aesni_cbc_encrypt
3618
3619 ALIGN 16
3620 aesni_cbc_encrypt:
3621 mov QWORD[8+rsp],rdi ;WIN64 prologue
3622 mov QWORD[16+rsp],rsi
3623 mov rax,rsp
3624 $L$SEH_begin_aesni_cbc_encrypt:
3625 mov rdi,rcx
3626 mov rsi,rdx
3627 mov rdx,r8
3628 mov rcx,r9
3629 mov r8,QWORD[40+rsp]
3630 mov r9,QWORD[48+rsp]
3631
3632
3633 test rdx,rdx
3634 jz NEAR $L$cbc_ret
3635
3636 mov r10d,DWORD[240+rcx]
3637 mov r11,rcx
3638 test r9d,r9d
3639 jz NEAR $L$cbc_decrypt
3640
3641 movups xmm2,XMMWORD[r8]
3642 mov eax,r10d
3643 cmp rdx,16
3644 jb NEAR $L$cbc_enc_tail
3645 sub rdx,16
3646 jmp NEAR $L$cbc_enc_loop
3647 ALIGN 16
3648 $L$cbc_enc_loop:
3649 movups xmm3,XMMWORD[rdi]
3650 lea rdi,[16+rdi]
3651
3652 movups xmm0,XMMWORD[rcx]
3653 movups xmm1,XMMWORD[16+rcx]
3654 xorps xmm3,xmm0
3655 lea rcx,[32+rcx]
3656 xorps xmm2,xmm3
3657 $L$oop_enc1_15:
3658 DB 102,15,56,220,209
3659 dec eax
3660 movups xmm1,XMMWORD[rcx]
3661 lea rcx,[16+rcx]
3662 jnz NEAR $L$oop_enc1_15
3663 DB 102,15,56,221,209
3664 mov eax,r10d
3665 mov rcx,r11
3666 movups XMMWORD[rsi],xmm2
3667 lea rsi,[16+rsi]
3668 sub rdx,16
3669 jnc NEAR $L$cbc_enc_loop
3670 add rdx,16
3671 jnz NEAR $L$cbc_enc_tail
3672 pxor xmm0,xmm0
3673 pxor xmm1,xmm1
3674 movups XMMWORD[r8],xmm2
3675 pxor xmm2,xmm2
3676 pxor xmm3,xmm3
3677 jmp NEAR $L$cbc_ret
3678
3679 $L$cbc_enc_tail:
3680 mov rcx,rdx
3681 xchg rsi,rdi
3682 DD 0x9066A4F3
3683 mov ecx,16
3684 sub rcx,rdx
3685 xor eax,eax
3686 DD 0x9066AAF3
3687 lea rdi,[((-16))+rdi]
3688 mov eax,r10d
3689 mov rsi,rdi
3690 mov rcx,r11
3691 xor rdx,rdx
3692 jmp NEAR $L$cbc_enc_loop
3693
3694 ALIGN 16
3695 $L$cbc_decrypt:
3696 cmp rdx,16
3697 jne NEAR $L$cbc_decrypt_bulk
3698
3699
3700
3701 movdqu xmm2,XMMWORD[rdi]
3702 movdqu xmm3,XMMWORD[r8]
3703 movdqa xmm4,xmm2
3704 movups xmm0,XMMWORD[rcx]
3705 movups xmm1,XMMWORD[16+rcx]
3706 lea rcx,[32+rcx]
3707 xorps xmm2,xmm0
3708 $L$oop_dec1_16:
3709 DB 102,15,56,222,209
3710 dec r10d
3711 movups xmm1,XMMWORD[rcx]
3712 lea rcx,[16+rcx]
3713 jnz NEAR $L$oop_dec1_16
3714 DB 102,15,56,223,209
3715 pxor xmm0,xmm0
3716 pxor xmm1,xmm1
3717 movdqu XMMWORD[r8],xmm4
3718 xorps xmm2,xmm3
3719 pxor xmm3,xmm3
3720 movups XMMWORD[rsi],xmm2
3721 pxor xmm2,xmm2
3722 jmp NEAR $L$cbc_ret
3723 ALIGN 16
3724 $L$cbc_decrypt_bulk:
3725 lea r11,[rsp]
3726 push rbp
3727 sub rsp,176
3728 and rsp,-16
3729 movaps XMMWORD[16+rsp],xmm6
3730 movaps XMMWORD[32+rsp],xmm7
3731 movaps XMMWORD[48+rsp],xmm8
3732 movaps XMMWORD[64+rsp],xmm9
3733 movaps XMMWORD[80+rsp],xmm10
3734 movaps XMMWORD[96+rsp],xmm11
3735 movaps XMMWORD[112+rsp],xmm12
3736 movaps XMMWORD[128+rsp],xmm13
3737 movaps XMMWORD[144+rsp],xmm14
3738 movaps XMMWORD[160+rsp],xmm15
3739 $L$cbc_decrypt_body:
3740 mov rbp,rcx
3741 movups xmm10,XMMWORD[r8]
3742 mov eax,r10d
3743 cmp rdx,0x50
3744 jbe NEAR $L$cbc_dec_tail
3745
3746 movups xmm0,XMMWORD[rcx]
3747 movdqu xmm2,XMMWORD[rdi]
3748 movdqu xmm3,XMMWORD[16+rdi]
3749 movdqa xmm11,xmm2
3750 movdqu xmm4,XMMWORD[32+rdi]
3751 movdqa xmm12,xmm3
3752 movdqu xmm5,XMMWORD[48+rdi]
3753 movdqa xmm13,xmm4
3754 movdqu xmm6,XMMWORD[64+rdi]
3755 movdqa xmm14,xmm5
3756 movdqu xmm7,XMMWORD[80+rdi]
3757 movdqa xmm15,xmm6
3758 mov r9d,DWORD[((OPENSSL_ia32cap_P+4))]
3759 cmp rdx,0x70
3760 jbe NEAR $L$cbc_dec_six_or_seven
3761
3762 and r9d,71303168
3763 sub rdx,0x50
3764 cmp r9d,4194304
3765 je NEAR $L$cbc_dec_loop6_enter
3766 sub rdx,0x20
3767 lea rcx,[112+rcx]
3768 jmp NEAR $L$cbc_dec_loop8_enter
3769 ALIGN 16
3770 $L$cbc_dec_loop8:
3771 movups XMMWORD[rsi],xmm9
3772 lea rsi,[16+rsi]
3773 $L$cbc_dec_loop8_enter:
3774 movdqu xmm8,XMMWORD[96+rdi]
3775 pxor xmm2,xmm0
3776 movdqu xmm9,XMMWORD[112+rdi]
3777 pxor xmm3,xmm0
3778 movups xmm1,XMMWORD[((16-112))+rcx]
3779 pxor xmm4,xmm0
3780 mov rbp,-1
3781 cmp rdx,0x70
3782 pxor xmm5,xmm0
3783 pxor xmm6,xmm0
3784 pxor xmm7,xmm0
3785 pxor xmm8,xmm0
3786
3787 DB 102,15,56,222,209
3788 pxor xmm9,xmm0
3789 movups xmm0,XMMWORD[((32-112))+rcx]
3790 DB 102,15,56,222,217
3791 DB 102,15,56,222,225
3792 DB 102,15,56,222,233
3793 DB 102,15,56,222,241
3794 DB 102,15,56,222,249
3795 DB 102,68,15,56,222,193
3796 adc rbp,0
3797 and rbp,128
3798 DB 102,68,15,56,222,201
3799 add rbp,rdi
3800 movups xmm1,XMMWORD[((48-112))+rcx]
3801 DB 102,15,56,222,208
3802 DB 102,15,56,222,216
3803 DB 102,15,56,222,224
3804 DB 102,15,56,222,232
3805 DB 102,15,56,222,240
3806 DB 102,15,56,222,248
3807 DB 102,68,15,56,222,192
3808 DB 102,68,15,56,222,200
3809 movups xmm0,XMMWORD[((64-112))+rcx]
3810 nop
3811 DB 102,15,56,222,209
3812 DB 102,15,56,222,217
3813 DB 102,15,56,222,225
3814 DB 102,15,56,222,233
3815 DB 102,15,56,222,241
3816 DB 102,15,56,222,249
3817 DB 102,68,15,56,222,193
3818 DB 102,68,15,56,222,201
3819 movups xmm1,XMMWORD[((80-112))+rcx]
3820 nop
3821 DB 102,15,56,222,208
3822 DB 102,15,56,222,216
3823 DB 102,15,56,222,224
3824 DB 102,15,56,222,232
3825 DB 102,15,56,222,240
3826 DB 102,15,56,222,248
3827 DB 102,68,15,56,222,192
3828 DB 102,68,15,56,222,200
3829 movups xmm0,XMMWORD[((96-112))+rcx]
3830 nop
3831 DB 102,15,56,222,209
3832 DB 102,15,56,222,217
3833 DB 102,15,56,222,225
3834 DB 102,15,56,222,233
3835 DB 102,15,56,222,241
3836 DB 102,15,56,222,249
3837 DB 102,68,15,56,222,193
3838 DB 102,68,15,56,222,201
3839 movups xmm1,XMMWORD[((112-112))+rcx]
3840 nop
3841 DB 102,15,56,222,208
3842 DB 102,15,56,222,216
3843 DB 102,15,56,222,224
3844 DB 102,15,56,222,232
3845 DB 102,15,56,222,240
3846 DB 102,15,56,222,248
3847 DB 102,68,15,56,222,192
3848 DB 102,68,15,56,222,200
3849 movups xmm0,XMMWORD[((128-112))+rcx]
3850 nop
3851 DB 102,15,56,222,209
3852 DB 102,15,56,222,217
3853 DB 102,15,56,222,225
3854 DB 102,15,56,222,233
3855 DB 102,15,56,222,241
3856 DB 102,15,56,222,249
3857 DB 102,68,15,56,222,193
3858 DB 102,68,15,56,222,201
3859 movups xmm1,XMMWORD[((144-112))+rcx]
3860 cmp eax,11
3861 DB 102,15,56,222,208
3862 DB 102,15,56,222,216
3863 DB 102,15,56,222,224
3864 DB 102,15,56,222,232
3865 DB 102,15,56,222,240
3866 DB 102,15,56,222,248
3867 DB 102,68,15,56,222,192
3868 DB 102,68,15,56,222,200
3869 movups xmm0,XMMWORD[((160-112))+rcx]
3870 jb NEAR $L$cbc_dec_done
3871 DB 102,15,56,222,209
3872 DB 102,15,56,222,217
3873 DB 102,15,56,222,225
3874 DB 102,15,56,222,233
3875 DB 102,15,56,222,241
3876 DB 102,15,56,222,249
3877 DB 102,68,15,56,222,193
3878 DB 102,68,15,56,222,201
3879 movups xmm1,XMMWORD[((176-112))+rcx]
3880 nop
3881 DB 102,15,56,222,208
3882 DB 102,15,56,222,216
3883 DB 102,15,56,222,224
3884 DB 102,15,56,222,232
3885 DB 102,15,56,222,240
3886 DB 102,15,56,222,248
3887 DB 102,68,15,56,222,192
3888 DB 102,68,15,56,222,200
3889 movups xmm0,XMMWORD[((192-112))+rcx]
3890 je NEAR $L$cbc_dec_done
3891 DB 102,15,56,222,209
3892 DB 102,15,56,222,217
3893 DB 102,15,56,222,225
3894 DB 102,15,56,222,233
3895 DB 102,15,56,222,241
3896 DB 102,15,56,222,249
3897 DB 102,68,15,56,222,193
3898 DB 102,68,15,56,222,201
3899 movups xmm1,XMMWORD[((208-112))+rcx]
3900 nop
3901 DB 102,15,56,222,208
3902 DB 102,15,56,222,216
3903 DB 102,15,56,222,224
3904 DB 102,15,56,222,232
3905 DB 102,15,56,222,240
3906 DB 102,15,56,222,248
3907 DB 102,68,15,56,222,192
3908 DB 102,68,15,56,222,200
3909 movups xmm0,XMMWORD[((224-112))+rcx]
3910 jmp NEAR $L$cbc_dec_done
3911 ALIGN 16
3912 $L$cbc_dec_done:
3913 DB 102,15,56,222,209
3914 DB 102,15,56,222,217
3915 pxor xmm10,xmm0
3916 pxor xmm11,xmm0
3917 DB 102,15,56,222,225
3918 DB 102,15,56,222,233
3919 pxor xmm12,xmm0
3920 pxor xmm13,xmm0
3921 DB 102,15,56,222,241
3922 DB 102,15,56,222,249
3923 pxor xmm14,xmm0
3924 pxor xmm15,xmm0
3925 DB 102,68,15,56,222,193
3926 DB 102,68,15,56,222,201
3927 movdqu xmm1,XMMWORD[80+rdi]
3928
3929 DB 102,65,15,56,223,210
3930 movdqu xmm10,XMMWORD[96+rdi]
3931 pxor xmm1,xmm0
3932 DB 102,65,15,56,223,219
3933 pxor xmm10,xmm0
3934 movdqu xmm0,XMMWORD[112+rdi]
3935 DB 102,65,15,56,223,228
3936 lea rdi,[128+rdi]
3937 movdqu xmm11,XMMWORD[rbp]
3938 DB 102,65,15,56,223,237
3939 DB 102,65,15,56,223,246
3940 movdqu xmm12,XMMWORD[16+rbp]
3941 movdqu xmm13,XMMWORD[32+rbp]
3942 DB 102,65,15,56,223,255
3943 DB 102,68,15,56,223,193
3944 movdqu xmm14,XMMWORD[48+rbp]
3945 movdqu xmm15,XMMWORD[64+rbp]
3946 DB 102,69,15,56,223,202
3947 movdqa xmm10,xmm0
3948 movdqu xmm1,XMMWORD[80+rbp]
3949 movups xmm0,XMMWORD[((-112))+rcx]
3950
3951 movups XMMWORD[rsi],xmm2
3952 movdqa xmm2,xmm11
3953 movups XMMWORD[16+rsi],xmm3
3954 movdqa xmm3,xmm12
3955 movups XMMWORD[32+rsi],xmm4
3956 movdqa xmm4,xmm13
3957 movups XMMWORD[48+rsi],xmm5
3958 movdqa xmm5,xmm14
3959 movups XMMWORD[64+rsi],xmm6
3960 movdqa xmm6,xmm15
3961 movups XMMWORD[80+rsi],xmm7
3962 movdqa xmm7,xmm1
3963 movups XMMWORD[96+rsi],xmm8
3964 lea rsi,[112+rsi]
3965
3966 sub rdx,0x80
3967 ja NEAR $L$cbc_dec_loop8
3968
3969 movaps xmm2,xmm9
3970 lea rcx,[((-112))+rcx]
3971 add rdx,0x70
3972 jle NEAR $L$cbc_dec_clear_tail_collected
3973 movups XMMWORD[rsi],xmm9
3974 lea rsi,[16+rsi]
3975 cmp rdx,0x50
3976 jbe NEAR $L$cbc_dec_tail
3977
3978 movaps xmm2,xmm11
3979 $L$cbc_dec_six_or_seven:
3980 cmp rdx,0x60
3981 ja NEAR $L$cbc_dec_seven
3982
3983 movaps xmm8,xmm7
3984 call _aesni_decrypt6
3985 pxor xmm2,xmm10
3986 movaps xmm10,xmm8
3987 pxor xmm3,xmm11
3988 movdqu XMMWORD[rsi],xmm2
3989 pxor xmm4,xmm12
3990 movdqu XMMWORD[16+rsi],xmm3
3991 pxor xmm3,xmm3
3992 pxor xmm5,xmm13
3993 movdqu XMMWORD[32+rsi],xmm4
3994 pxor xmm4,xmm4
3995 pxor xmm6,xmm14
3996 movdqu XMMWORD[48+rsi],xmm5
3997 pxor xmm5,xmm5
3998 pxor xmm7,xmm15
3999 movdqu XMMWORD[64+rsi],xmm6
4000 pxor xmm6,xmm6
4001 lea rsi,[80+rsi]
4002 movdqa xmm2,xmm7
4003 pxor xmm7,xmm7
4004 jmp NEAR $L$cbc_dec_tail_collected
4005
4006 ALIGN 16
4007 $L$cbc_dec_seven:
4008 movups xmm8,XMMWORD[96+rdi]
4009 xorps xmm9,xmm9
4010 call _aesni_decrypt8
4011 movups xmm9,XMMWORD[80+rdi]
4012 pxor xmm2,xmm10
4013 movups xmm10,XMMWORD[96+rdi]
4014 pxor xmm3,xmm11
4015 movdqu XMMWORD[rsi],xmm2
4016 pxor xmm4,xmm12
4017 movdqu XMMWORD[16+rsi],xmm3
4018 pxor xmm3,xmm3
4019 pxor xmm5,xmm13
4020 movdqu XMMWORD[32+rsi],xmm4
4021 pxor xmm4,xmm4
4022 pxor xmm6,xmm14
4023 movdqu XMMWORD[48+rsi],xmm5
4024 pxor xmm5,xmm5
4025 pxor xmm7,xmm15
4026 movdqu XMMWORD[64+rsi],xmm6
4027 pxor xmm6,xmm6
4028 pxor xmm8,xmm9
4029 movdqu XMMWORD[80+rsi],xmm7
4030 pxor xmm7,xmm7
4031 lea rsi,[96+rsi]
4032 movdqa xmm2,xmm8
4033 pxor xmm8,xmm8
4034 pxor xmm9,xmm9
4035 jmp NEAR $L$cbc_dec_tail_collected
4036
4037 ALIGN 16
4038 $L$cbc_dec_loop6:
4039 movups XMMWORD[rsi],xmm7
4040 lea rsi,[16+rsi]
4041 movdqu xmm2,XMMWORD[rdi]
4042 movdqu xmm3,XMMWORD[16+rdi]
4043 movdqa xmm11,xmm2
4044 movdqu xmm4,XMMWORD[32+rdi]
4045 movdqa xmm12,xmm3
4046 movdqu xmm5,XMMWORD[48+rdi]
4047 movdqa xmm13,xmm4
4048 movdqu xmm6,XMMWORD[64+rdi]
4049 movdqa xmm14,xmm5
4050 movdqu xmm7,XMMWORD[80+rdi]
4051 movdqa xmm15,xmm6
4052 $L$cbc_dec_loop6_enter:
4053 lea rdi,[96+rdi]
4054 movdqa xmm8,xmm7
4055
4056 call _aesni_decrypt6
4057
4058 pxor xmm2,xmm10
4059 movdqa xmm10,xmm8
4060 pxor xmm3,xmm11
4061 movdqu XMMWORD[rsi],xmm2
4062 pxor xmm4,xmm12
4063 movdqu XMMWORD[16+rsi],xmm3
4064 pxor xmm5,xmm13
4065 movdqu XMMWORD[32+rsi],xmm4
4066 pxor xmm6,xmm14
4067 mov rcx,rbp
4068 movdqu XMMWORD[48+rsi],xmm5
4069 pxor xmm7,xmm15
4070 mov eax,r10d
4071 movdqu XMMWORD[64+rsi],xmm6
4072 lea rsi,[80+rsi]
4073 sub rdx,0x60
4074 ja NEAR $L$cbc_dec_loop6
4075
4076 movdqa xmm2,xmm7
4077 add rdx,0x50
4078 jle NEAR $L$cbc_dec_clear_tail_collected
4079 movups XMMWORD[rsi],xmm7
4080 lea rsi,[16+rsi]
4081
4082 $L$cbc_dec_tail:
4083 movups xmm2,XMMWORD[rdi]
4084 sub rdx,0x10
4085 jbe NEAR $L$cbc_dec_one
4086
4087 movups xmm3,XMMWORD[16+rdi]
4088 movaps xmm11,xmm2
4089 sub rdx,0x10
4090 jbe NEAR $L$cbc_dec_two
4091
4092 movups xmm4,XMMWORD[32+rdi]
4093 movaps xmm12,xmm3
4094 sub rdx,0x10
4095 jbe NEAR $L$cbc_dec_three
4096
4097 movups xmm5,XMMWORD[48+rdi]
4098 movaps xmm13,xmm4
4099 sub rdx,0x10
4100 jbe NEAR $L$cbc_dec_four
4101
4102 movups xmm6,XMMWORD[64+rdi]
4103 movaps xmm14,xmm5
4104 movaps xmm15,xmm6
4105 xorps xmm7,xmm7
4106 call _aesni_decrypt6
4107 pxor xmm2,xmm10
4108 movaps xmm10,xmm15
4109 pxor xmm3,xmm11
4110 movdqu XMMWORD[rsi],xmm2
4111 pxor xmm4,xmm12
4112 movdqu XMMWORD[16+rsi],xmm3
4113 pxor xmm3,xmm3
4114 pxor xmm5,xmm13
4115 movdqu XMMWORD[32+rsi],xmm4
4116 pxor xmm4,xmm4
4117 pxor xmm6,xmm14
4118 movdqu XMMWORD[48+rsi],xmm5
4119 pxor xmm5,xmm5
4120 lea rsi,[64+rsi]
4121 movdqa xmm2,xmm6
4122 pxor xmm6,xmm6
4123 pxor xmm7,xmm7
4124 sub rdx,0x10
4125 jmp NEAR $L$cbc_dec_tail_collected
4126
4127 ALIGN 16
4128 $L$cbc_dec_one:
4129 movaps xmm11,xmm2
4130 movups xmm0,XMMWORD[rcx]
4131 movups xmm1,XMMWORD[16+rcx]
4132 lea rcx,[32+rcx]
4133 xorps xmm2,xmm0
4134 $L$oop_dec1_17:
4135 DB 102,15,56,222,209
4136 dec eax
4137 movups xmm1,XMMWORD[rcx]
4138 lea rcx,[16+rcx]
4139 jnz NEAR $L$oop_dec1_17
4140 DB 102,15,56,223,209
4141 xorps xmm2,xmm10
4142 movaps xmm10,xmm11
4143 jmp NEAR $L$cbc_dec_tail_collected
4144 ALIGN 16
4145 $L$cbc_dec_two:
4146 movaps xmm12,xmm3
4147 call _aesni_decrypt2
4148 pxor xmm2,xmm10
4149 movaps xmm10,xmm12
4150 pxor xmm3,xmm11
4151 movdqu XMMWORD[rsi],xmm2
4152 movdqa xmm2,xmm3
4153 pxor xmm3,xmm3
4154 lea rsi,[16+rsi]
4155 jmp NEAR $L$cbc_dec_tail_collected
4156 ALIGN 16
4157 $L$cbc_dec_three:
4158 movaps xmm13,xmm4
4159 call _aesni_decrypt3
4160 pxor xmm2,xmm10
4161 movaps xmm10,xmm13
4162 pxor xmm3,xmm11
4163 movdqu XMMWORD[rsi],xmm2
4164 pxor xmm4,xmm12
4165 movdqu XMMWORD[16+rsi],xmm3
4166 pxor xmm3,xmm3
4167 movdqa xmm2,xmm4
4168 pxor xmm4,xmm4
4169 lea rsi,[32+rsi]
4170 jmp NEAR $L$cbc_dec_tail_collected
4171 ALIGN 16
4172 $L$cbc_dec_four:
4173 movaps xmm14,xmm5
4174 call _aesni_decrypt4
4175 pxor xmm2,xmm10
4176 movaps xmm10,xmm14
4177 pxor xmm3,xmm11
4178 movdqu XMMWORD[rsi],xmm2
4179 pxor xmm4,xmm12
4180 movdqu XMMWORD[16+rsi],xmm3
4181 pxor xmm3,xmm3
4182 pxor xmm5,xmm13
4183 movdqu XMMWORD[32+rsi],xmm4
4184 pxor xmm4,xmm4
4185 movdqa xmm2,xmm5
4186 pxor xmm5,xmm5
4187 lea rsi,[48+rsi]
4188 jmp NEAR $L$cbc_dec_tail_collected
4189
4190 ALIGN 16
4191 $L$cbc_dec_clear_tail_collected:
4192 pxor xmm3,xmm3
4193 pxor xmm4,xmm4
4194 pxor xmm5,xmm5
4195 $L$cbc_dec_tail_collected:
4196 movups XMMWORD[r8],xmm10
4197 and rdx,15
4198 jnz NEAR $L$cbc_dec_tail_partial
4199 movups XMMWORD[rsi],xmm2
4200 pxor xmm2,xmm2
4201 jmp NEAR $L$cbc_dec_ret
4202 ALIGN 16
4203 $L$cbc_dec_tail_partial:
4204 movaps XMMWORD[rsp],xmm2
4205 pxor xmm2,xmm2
4206 mov rcx,16
4207 mov rdi,rsi
4208 sub rcx,rdx
4209 lea rsi,[rsp]
4210 DD 0x9066A4F3
4211 movdqa XMMWORD[rsp],xmm2
4212
4213 $L$cbc_dec_ret:
4214 xorps xmm0,xmm0
4215 pxor xmm1,xmm1
4216 movaps xmm6,XMMWORD[16+rsp]
4217 movaps XMMWORD[16+rsp],xmm0
4218 movaps xmm7,XMMWORD[32+rsp]
4219 movaps XMMWORD[32+rsp],xmm0
4220 movaps xmm8,XMMWORD[48+rsp]
4221 movaps XMMWORD[48+rsp],xmm0
4222 movaps xmm9,XMMWORD[64+rsp]
4223 movaps XMMWORD[64+rsp],xmm0
4224 movaps xmm10,XMMWORD[80+rsp]
4225 movaps XMMWORD[80+rsp],xmm0
4226 movaps xmm11,XMMWORD[96+rsp]
4227 movaps XMMWORD[96+rsp],xmm0
4228 movaps xmm12,XMMWORD[112+rsp]
4229 movaps XMMWORD[112+rsp],xmm0
4230 movaps xmm13,XMMWORD[128+rsp]
4231 movaps XMMWORD[128+rsp],xmm0
4232 movaps xmm14,XMMWORD[144+rsp]
4233 movaps XMMWORD[144+rsp],xmm0
4234 movaps xmm15,XMMWORD[160+rsp]
4235 movaps XMMWORD[160+rsp],xmm0
4236 mov rbp,QWORD[((-8))+r11]
4237 lea rsp,[r11]
4238 $L$cbc_ret:
4239 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
4240 mov rsi,QWORD[16+rsp]
4241 DB 0F3h,0C3h ;repret
4242 $L$SEH_end_aesni_cbc_encrypt:
4243 global aesni_set_decrypt_key
4244
4245 ALIGN 16
4246 aesni_set_decrypt_key:
4247 DB 0x48,0x83,0xEC,0x08
4248 call __aesni_set_encrypt_key
4249 shl edx,4
4250 test eax,eax
4251 jnz NEAR $L$dec_key_ret
4252 lea rcx,[16+rdx*1+r8]
4253
4254 movups xmm0,XMMWORD[r8]
4255 movups xmm1,XMMWORD[rcx]
4256 movups XMMWORD[rcx],xmm0
4257 movups XMMWORD[r8],xmm1
4258 lea r8,[16+r8]
4259 lea rcx,[((-16))+rcx]
4260
4261 $L$dec_key_inverse:
4262 movups xmm0,XMMWORD[r8]
4263 movups xmm1,XMMWORD[rcx]
4264 DB 102,15,56,219,192
4265 DB 102,15,56,219,201
4266 lea r8,[16+r8]
4267 lea rcx,[((-16))+rcx]
4268 movups XMMWORD[16+rcx],xmm0
4269 movups XMMWORD[(-16)+r8],xmm1
4270 cmp rcx,r8
4271 ja NEAR $L$dec_key_inverse
4272
4273 movups xmm0,XMMWORD[r8]
4274 DB 102,15,56,219,192
4275 pxor xmm1,xmm1
4276 movups XMMWORD[rcx],xmm0
4277 pxor xmm0,xmm0
4278 $L$dec_key_ret:
4279 add rsp,8
4280 DB 0F3h,0C3h ;repret
4281 $L$SEH_end_set_decrypt_key:
4282
4283 global aesni_set_encrypt_key
4284
4285 ALIGN 16
4286 aesni_set_encrypt_key:
4287 __aesni_set_encrypt_key:
4288 DB 0x48,0x83,0xEC,0x08
4289 mov rax,-1
4290 test rcx,rcx
4291 jz NEAR $L$enc_key_ret
4292 test r8,r8
4293 jz NEAR $L$enc_key_ret
4294
4295 mov r10d,268437504
4296 movups xmm0,XMMWORD[rcx]
4297 xorps xmm4,xmm4
4298 and r10d,DWORD[((OPENSSL_ia32cap_P+4))]
4299 lea rax,[16+r8]
4300 cmp edx,256
4301 je NEAR $L$14rounds
4302 cmp edx,192
4303 je NEAR $L$12rounds
4304 cmp edx,128
4305 jne NEAR $L$bad_keybits
4306
4307 $L$10rounds:
4308 mov edx,9
4309 cmp r10d,268435456
4310 je NEAR $L$10rounds_alt
4311
4312 movups XMMWORD[r8],xmm0
4313 DB 102,15,58,223,200,1
4314 call $L$key_expansion_128_cold
4315 DB 102,15,58,223,200,2
4316 call $L$key_expansion_128
4317 DB 102,15,58,223,200,4
4318 call $L$key_expansion_128
4319 DB 102,15,58,223,200,8
4320 call $L$key_expansion_128
4321 DB 102,15,58,223,200,16
4322 call $L$key_expansion_128
4323 DB 102,15,58,223,200,32
4324 call $L$key_expansion_128
4325 DB 102,15,58,223,200,64
4326 call $L$key_expansion_128
4327 DB 102,15,58,223,200,128
4328 call $L$key_expansion_128
4329 DB 102,15,58,223,200,27
4330 call $L$key_expansion_128
4331 DB 102,15,58,223,200,54
4332 call $L$key_expansion_128
4333 movups XMMWORD[rax],xmm0
4334 mov DWORD[80+rax],edx
4335 xor eax,eax
4336 jmp NEAR $L$enc_key_ret
4337
4338 ALIGN 16
4339 $L$10rounds_alt:
4340 movdqa xmm5,XMMWORD[$L$key_rotate]
4341 mov r10d,8
4342 movdqa xmm4,XMMWORD[$L$key_rcon1]
4343 movdqa xmm2,xmm0
4344 movdqu XMMWORD[r8],xmm0
4345 jmp NEAR $L$oop_key128
4346
4347 ALIGN 16
4348 $L$oop_key128:
4349 DB 102,15,56,0,197
4350 DB 102,15,56,221,196
4351 pslld xmm4,1
4352 lea rax,[16+rax]
4353
4354 movdqa xmm3,xmm2
4355 pslldq xmm2,4
4356 pxor xmm3,xmm2
4357 pslldq xmm2,4
4358 pxor xmm3,xmm2
4359 pslldq xmm2,4
4360 pxor xmm2,xmm3
4361
4362 pxor xmm0,xmm2
4363 movdqu XMMWORD[(-16)+rax],xmm0
4364 movdqa xmm2,xmm0
4365
4366 dec r10d
4367 jnz NEAR $L$oop_key128
4368
4369 movdqa xmm4,XMMWORD[$L$key_rcon1b]
4370
4371 DB 102,15,56,0,197
4372 DB 102,15,56,221,196
4373 pslld xmm4,1
4374
4375 movdqa xmm3,xmm2
4376 pslldq xmm2,4
4377 pxor xmm3,xmm2
4378 pslldq xmm2,4
4379 pxor xmm3,xmm2
4380 pslldq xmm2,4
4381 pxor xmm2,xmm3
4382
4383 pxor xmm0,xmm2
4384 movdqu XMMWORD[rax],xmm0
4385
4386 movdqa xmm2,xmm0
4387 DB 102,15,56,0,197
4388 DB 102,15,56,221,196
4389
4390 movdqa xmm3,xmm2
4391 pslldq xmm2,4
4392 pxor xmm3,xmm2
4393 pslldq xmm2,4
4394 pxor xmm3,xmm2
4395 pslldq xmm2,4
4396 pxor xmm2,xmm3
4397
4398 pxor xmm0,xmm2
4399 movdqu XMMWORD[16+rax],xmm0
4400
4401 mov DWORD[96+rax],edx
4402 xor eax,eax
4403 jmp NEAR $L$enc_key_ret
4404
4405 ALIGN 16
4406 $L$12rounds:
4407 movq xmm2,QWORD[16+rcx]
4408 mov edx,11
4409 cmp r10d,268435456
4410 je NEAR $L$12rounds_alt
4411
4412 movups XMMWORD[r8],xmm0
4413 DB 102,15,58,223,202,1
4414 call $L$key_expansion_192a_cold
4415 DB 102,15,58,223,202,2
4416 call $L$key_expansion_192b
4417 DB 102,15,58,223,202,4
4418 call $L$key_expansion_192a
4419 DB 102,15,58,223,202,8
4420 call $L$key_expansion_192b
4421 DB 102,15,58,223,202,16
4422 call $L$key_expansion_192a
4423 DB 102,15,58,223,202,32
4424 call $L$key_expansion_192b
4425 DB 102,15,58,223,202,64
4426 call $L$key_expansion_192a
4427 DB 102,15,58,223,202,128
4428 call $L$key_expansion_192b
4429 movups XMMWORD[rax],xmm0
4430 mov DWORD[48+rax],edx
4431 xor rax,rax
4432 jmp NEAR $L$enc_key_ret
4433
4434 ALIGN 16
4435 $L$12rounds_alt:
4436 movdqa xmm5,XMMWORD[$L$key_rotate192]
4437 movdqa xmm4,XMMWORD[$L$key_rcon1]
4438 mov r10d,8
4439 movdqu XMMWORD[r8],xmm0
4440 jmp NEAR $L$oop_key192
4441
4442 ALIGN 16
4443 $L$oop_key192:
4444 movq QWORD[rax],xmm2
4445 movdqa xmm1,xmm2
4446 DB 102,15,56,0,213
4447 DB 102,15,56,221,212
4448 pslld xmm4,1
4449 lea rax,[24+rax]
4450
4451 movdqa xmm3,xmm0
4452 pslldq xmm0,4
4453 pxor xmm3,xmm0
4454 pslldq xmm0,4
4455 pxor xmm3,xmm0
4456 pslldq xmm0,4
4457 pxor xmm0,xmm3
4458
4459 pshufd xmm3,xmm0,0xff
4460 pxor xmm3,xmm1
4461 pslldq xmm1,4
4462 pxor xmm3,xmm1
4463
4464 pxor xmm0,xmm2
4465 pxor xmm2,xmm3
4466 movdqu XMMWORD[(-16)+rax],xmm0
4467
4468 dec r10d
4469 jnz NEAR $L$oop_key192
4470
4471 mov DWORD[32+rax],edx
4472 xor eax,eax
4473 jmp NEAR $L$enc_key_ret
4474
4475 ALIGN 16
4476 $L$14rounds:
4477 movups xmm2,XMMWORD[16+rcx]
4478 mov edx,13
4479 lea rax,[16+rax]
4480 cmp r10d,268435456
4481 je NEAR $L$14rounds_alt
4482
4483 movups XMMWORD[r8],xmm0
4484 movups XMMWORD[16+r8],xmm2
4485 DB 102,15,58,223,202,1
4486 call $L$key_expansion_256a_cold
4487 DB 102,15,58,223,200,1
4488 call $L$key_expansion_256b
4489 DB 102,15,58,223,202,2
4490 call $L$key_expansion_256a
4491 DB 102,15,58,223,200,2
4492 call $L$key_expansion_256b
4493 DB 102,15,58,223,202,4
4494 call $L$key_expansion_256a
4495 DB 102,15,58,223,200,4
4496 call $L$key_expansion_256b
4497 DB 102,15,58,223,202,8
4498 call $L$key_expansion_256a
4499 DB 102,15,58,223,200,8
4500 call $L$key_expansion_256b
4501 DB 102,15,58,223,202,16
4502 call $L$key_expansion_256a
4503 DB 102,15,58,223,200,16
4504 call $L$key_expansion_256b
4505 DB 102,15,58,223,202,32
4506 call $L$key_expansion_256a
4507 DB 102,15,58,223,200,32
4508 call $L$key_expansion_256b
4509 DB 102,15,58,223,202,64
4510 call $L$key_expansion_256a
4511 movups XMMWORD[rax],xmm0
4512 mov DWORD[16+rax],edx
4513 xor rax,rax
4514 jmp NEAR $L$enc_key_ret
4515
4516 ALIGN 16
4517 $L$14rounds_alt:
4518 movdqa xmm5,XMMWORD[$L$key_rotate]
4519 movdqa xmm4,XMMWORD[$L$key_rcon1]
4520 mov r10d,7
4521 movdqu XMMWORD[r8],xmm0
4522 movdqa xmm1,xmm2
4523 movdqu XMMWORD[16+r8],xmm2
4524 jmp NEAR $L$oop_key256
4525
4526 ALIGN 16
4527 $L$oop_key256:
4528 DB 102,15,56,0,213
4529 DB 102,15,56,221,212
4530
4531 movdqa xmm3,xmm0
4532 pslldq xmm0,4
4533 pxor xmm3,xmm0
4534 pslldq xmm0,4
4535 pxor xmm3,xmm0
4536 pslldq xmm0,4
4537 pxor xmm0,xmm3
4538 pslld xmm4,1
4539
4540 pxor xmm0,xmm2
4541 movdqu XMMWORD[rax],xmm0
4542
4543 dec r10d
4544 jz NEAR $L$done_key256
4545
4546 pshufd xmm2,xmm0,0xff
4547 pxor xmm3,xmm3
4548 DB 102,15,56,221,211
4549
4550 movdqa xmm3,xmm1
4551 pslldq xmm1,4
4552 pxor xmm3,xmm1
4553 pslldq xmm1,4
4554 pxor xmm3,xmm1
4555 pslldq xmm1,4
4556 pxor xmm1,xmm3
4557
4558 pxor xmm2,xmm1
4559 movdqu XMMWORD[16+rax],xmm2
4560 lea rax,[32+rax]
4561 movdqa xmm1,xmm2
4562
4563 jmp NEAR $L$oop_key256
4564
4565 $L$done_key256:
4566 mov DWORD[16+rax],edx
4567 xor eax,eax
4568 jmp NEAR $L$enc_key_ret
4569
4570 ALIGN 16
4571 $L$bad_keybits:
4572 mov rax,-2
4573 $L$enc_key_ret:
4574 pxor xmm0,xmm0
4575 pxor xmm1,xmm1
4576 pxor xmm2,xmm2
4577 pxor xmm3,xmm3
4578 pxor xmm4,xmm4
4579 pxor xmm5,xmm5
4580 add rsp,8
4581 DB 0F3h,0C3h ;repret
4582 $L$SEH_end_set_encrypt_key:
4583
4584 ALIGN 16
4585 $L$key_expansion_128:
4586 movups XMMWORD[rax],xmm0
4587 lea rax,[16+rax]
4588 $L$key_expansion_128_cold:
4589 shufps xmm4,xmm0,16
4590 xorps xmm0,xmm4
4591 shufps xmm4,xmm0,140
4592 xorps xmm0,xmm4
4593 shufps xmm1,xmm1,255
4594 xorps xmm0,xmm1
4595 DB 0F3h,0C3h ;repret
4596
4597 ALIGN 16
4598 $L$key_expansion_192a:
4599 movups XMMWORD[rax],xmm0
4600 lea rax,[16+rax]
4601 $L$key_expansion_192a_cold:
4602 movaps xmm5,xmm2
4603 $L$key_expansion_192b_warm:
4604 shufps xmm4,xmm0,16
4605 movdqa xmm3,xmm2
4606 xorps xmm0,xmm4
4607 shufps xmm4,xmm0,140
4608 pslldq xmm3,4
4609 xorps xmm0,xmm4
4610 pshufd xmm1,xmm1,85
4611 pxor xmm2,xmm3
4612 pxor xmm0,xmm1
4613 pshufd xmm3,xmm0,255
4614 pxor xmm2,xmm3
4615 DB 0F3h,0C3h ;repret
4616
4617 ALIGN 16
4618 $L$key_expansion_192b:
4619 movaps xmm3,xmm0
4620 shufps xmm5,xmm0,68
4621 movups XMMWORD[rax],xmm5
4622 shufps xmm3,xmm2,78
4623 movups XMMWORD[16+rax],xmm3
4624 lea rax,[32+rax]
4625 jmp NEAR $L$key_expansion_192b_warm
4626
4627 ALIGN 16
4628 $L$key_expansion_256a:
4629 movups XMMWORD[rax],xmm2
4630 lea rax,[16+rax]
4631 $L$key_expansion_256a_cold:
4632 shufps xmm4,xmm0,16
4633 xorps xmm0,xmm4
4634 shufps xmm4,xmm0,140
4635 xorps xmm0,xmm4
4636 shufps xmm1,xmm1,255
4637 xorps xmm0,xmm1
4638 DB 0F3h,0C3h ;repret
4639
4640 ALIGN 16
4641 $L$key_expansion_256b:
4642 movups XMMWORD[rax],xmm0
4643 lea rax,[16+rax]
4644
4645 shufps xmm4,xmm2,16
4646 xorps xmm2,xmm4
4647 shufps xmm4,xmm2,140
4648 xorps xmm2,xmm4
4649 shufps xmm1,xmm1,170
4650 xorps xmm2,xmm1
4651 DB 0F3h,0C3h ;repret
4652
4653
4654 ALIGN 64
4655 $L$bswap_mask:
4656 DB 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
4657 $L$increment32:
4658 DD 6,6,6,0
4659 $L$increment64:
4660 DD 1,0,0,0
4661 $L$xts_magic:
4662 DD 0x87,0,1,0
4663 $L$increment1:
4664 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
4665 $L$key_rotate:
4666 DD 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
4667 $L$key_rotate192:
4668 DD 0x04070605,0x04070605,0x04070605,0x04070605
4669 $L$key_rcon1:
4670 DD 1,1,1,1
4671 $L$key_rcon1b:
4672 DD 0x1b,0x1b,0x1b,0x1b
4673
4674 DB 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
4675 DB 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
4676 DB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
4677 DB 115,108,46,111,114,103,62,0
4678 ALIGN 64
4679 EXTERN __imp_RtlVirtualUnwind
4680
4681 ALIGN 16
4682 ecb_ccm64_se_handler:
4683 push rsi
4684 push rdi
4685 push rbx
4686 push rbp
4687 push r12
4688 push r13
4689 push r14
4690 push r15
4691 pushfq
4692 sub rsp,64
4693
4694 mov rax,QWORD[120+r8]
4695 mov rbx,QWORD[248+r8]
4696
4697 mov rsi,QWORD[8+r9]
4698 mov r11,QWORD[56+r9]
4699
4700 mov r10d,DWORD[r11]
4701 lea r10,[r10*1+rsi]
4702 cmp rbx,r10
4703 jb NEAR $L$common_seh_tail
4704
4705 mov rax,QWORD[152+r8]
4706
4707 mov r10d,DWORD[4+r11]
4708 lea r10,[r10*1+rsi]
4709 cmp rbx,r10
4710 jae NEAR $L$common_seh_tail
4711
4712 lea rsi,[rax]
4713 lea rdi,[512+r8]
4714 mov ecx,8
4715 DD 0xa548f3fc
4716 lea rax,[88+rax]
4717
4718 jmp NEAR $L$common_seh_tail
4719
4720
4721
4722 ALIGN 16
4723 ctr_xts_se_handler:
4724 push rsi
4725 push rdi
4726 push rbx
4727 push rbp
4728 push r12
4729 push r13
4730 push r14
4731 push r15
4732 pushfq
4733 sub rsp,64
4734
4735 mov rax,QWORD[120+r8]
4736 mov rbx,QWORD[248+r8]
4737
4738 mov rsi,QWORD[8+r9]
4739 mov r11,QWORD[56+r9]
4740
4741 mov r10d,DWORD[r11]
4742 lea r10,[r10*1+rsi]
4743 cmp rbx,r10
4744 jb NEAR $L$common_seh_tail
4745
4746 mov rax,QWORD[152+r8]
4747
4748 mov r10d,DWORD[4+r11]
4749 lea r10,[r10*1+rsi]
4750 cmp rbx,r10
4751 jae NEAR $L$common_seh_tail
4752
4753 mov rax,QWORD[208+r8]
4754
4755 lea rsi,[((-168))+rax]
4756 lea rdi,[512+r8]
4757 mov ecx,20
4758 DD 0xa548f3fc
4759
4760 mov rbp,QWORD[((-8))+rax]
4761 mov QWORD[160+r8],rbp
4762 jmp NEAR $L$common_seh_tail
4763
4764
4765
4766 ALIGN 16
4767 ocb_se_handler:
4768 push rsi
4769 push rdi
4770 push rbx
4771 push rbp
4772 push r12
4773 push r13
4774 push r14
4775 push r15
4776 pushfq
4777 sub rsp,64
4778
4779 mov rax,QWORD[120+r8]
4780 mov rbx,QWORD[248+r8]
4781
4782 mov rsi,QWORD[8+r9]
4783 mov r11,QWORD[56+r9]
4784
4785 mov r10d,DWORD[r11]
4786 lea r10,[r10*1+rsi]
4787 cmp rbx,r10
4788 jb NEAR $L$common_seh_tail
4789
4790 mov r10d,DWORD[4+r11]
4791 lea r10,[r10*1+rsi]
4792 cmp rbx,r10
4793 jae NEAR $L$common_seh_tail
4794
4795 mov r10d,DWORD[8+r11]
4796 lea r10,[r10*1+rsi]
4797 cmp rbx,r10
4798 jae NEAR $L$ocb_no_xmm
4799
4800 mov rax,QWORD[152+r8]
4801
4802 lea rsi,[rax]
4803 lea rdi,[512+r8]
4804 mov ecx,20
4805 DD 0xa548f3fc
4806 lea rax,[((160+40))+rax]
4807
4808 $L$ocb_no_xmm:
4809 mov rbx,QWORD[((-8))+rax]
4810 mov rbp,QWORD[((-16))+rax]
4811 mov r12,QWORD[((-24))+rax]
4812 mov r13,QWORD[((-32))+rax]
4813 mov r14,QWORD[((-40))+rax]
4814
4815 mov QWORD[144+r8],rbx
4816 mov QWORD[160+r8],rbp
4817 mov QWORD[216+r8],r12
4818 mov QWORD[224+r8],r13
4819 mov QWORD[232+r8],r14
4820
4821 jmp NEAR $L$common_seh_tail
4822
4823
4824 ALIGN 16
4825 cbc_se_handler:
4826 push rsi
4827 push rdi
4828 push rbx
4829 push rbp
4830 push r12
4831 push r13
4832 push r14
4833 push r15
4834 pushfq
4835 sub rsp,64
4836
4837 mov rax,QWORD[152+r8]
4838 mov rbx,QWORD[248+r8]
4839
4840 lea r10,[$L$cbc_decrypt_bulk]
4841 cmp rbx,r10
4842 jb NEAR $L$common_seh_tail
4843
4844 mov rax,QWORD[120+r8]
4845
4846 lea r10,[$L$cbc_decrypt_body]
4847 cmp rbx,r10
4848 jb NEAR $L$common_seh_tail
4849
4850 mov rax,QWORD[152+r8]
4851
4852 lea r10,[$L$cbc_ret]
4853 cmp rbx,r10
4854 jae NEAR $L$common_seh_tail
4855
4856 lea rsi,[16+rax]
4857 lea rdi,[512+r8]
4858 mov ecx,20
4859 DD 0xa548f3fc
4860
4861 mov rax,QWORD[208+r8]
4862
4863 mov rbp,QWORD[((-8))+rax]
4864 mov QWORD[160+r8],rbp
4865
4866 $L$common_seh_tail:
4867 mov rdi,QWORD[8+rax]
4868 mov rsi,QWORD[16+rax]
4869 mov QWORD[152+r8],rax
4870 mov QWORD[168+r8],rsi
4871 mov QWORD[176+r8],rdi
4872
4873 mov rdi,QWORD[40+r9]
4874 mov rsi,r8
4875 mov ecx,154
4876 DD 0xa548f3fc
4877
4878 mov rsi,r9
4879 xor rcx,rcx
4880 mov rdx,QWORD[8+rsi]
4881 mov r8,QWORD[rsi]
4882 mov r9,QWORD[16+rsi]
4883 mov r10,QWORD[40+rsi]
4884 lea r11,[56+rsi]
4885 lea r12,[24+rsi]
4886 mov QWORD[32+rsp],r10
4887 mov QWORD[40+rsp],r11
4888 mov QWORD[48+rsp],r12
4889 mov QWORD[56+rsp],rcx
4890 call QWORD[__imp_RtlVirtualUnwind]
4891
4892 mov eax,1
4893 add rsp,64
4894 popfq
4895 pop r15
4896 pop r14
4897 pop r13
4898 pop r12
4899 pop rbp
4900 pop rbx
4901 pop rdi
4902 pop rsi
4903 DB 0F3h,0C3h ;repret
4904
4905
4906 section .pdata rdata align=4
4907 ALIGN 4
4908 DD $L$SEH_begin_aesni_ecb_encrypt wrt ..imagebase
4909 DD $L$SEH_end_aesni_ecb_encrypt wrt ..imagebase
4910 DD $L$SEH_info_ecb wrt ..imagebase
4911
4912 DD $L$SEH_begin_aesni_ccm64_encrypt_blocks wrt ..imagebase
4913 DD $L$SEH_end_aesni_ccm64_encrypt_blocks wrt ..imagebase
4914 DD $L$SEH_info_ccm64_enc wrt ..imagebase
4915
4916 DD $L$SEH_begin_aesni_ccm64_decrypt_blocks wrt ..imagebase
4917 DD $L$SEH_end_aesni_ccm64_decrypt_blocks wrt ..imagebase
4918 DD $L$SEH_info_ccm64_dec wrt ..imagebase
4919
4920 DD $L$SEH_begin_aesni_ctr32_encrypt_blocks wrt ..imagebase
4921 DD $L$SEH_end_aesni_ctr32_encrypt_blocks wrt ..imagebase
4922 DD $L$SEH_info_ctr32 wrt ..imagebase
4923
4924 DD $L$SEH_begin_aesni_xts_encrypt wrt ..imagebase
4925 DD $L$SEH_end_aesni_xts_encrypt wrt ..imagebase
4926 DD $L$SEH_info_xts_enc wrt ..imagebase
4927
4928 DD $L$SEH_begin_aesni_xts_decrypt wrt ..imagebase
4929 DD $L$SEH_end_aesni_xts_decrypt wrt ..imagebase
4930 DD $L$SEH_info_xts_dec wrt ..imagebase
4931
4932 DD $L$SEH_begin_aesni_ocb_encrypt wrt ..imagebase
4933 DD $L$SEH_end_aesni_ocb_encrypt wrt ..imagebase
4934 DD $L$SEH_info_ocb_enc wrt ..imagebase
4935
4936 DD $L$SEH_begin_aesni_ocb_decrypt wrt ..imagebase
4937 DD $L$SEH_end_aesni_ocb_decrypt wrt ..imagebase
4938 DD $L$SEH_info_ocb_dec wrt ..imagebase
4939 DD $L$SEH_begin_aesni_cbc_encrypt wrt ..imagebase
4940 DD $L$SEH_end_aesni_cbc_encrypt wrt ..imagebase
4941 DD $L$SEH_info_cbc wrt ..imagebase
4942
4943 DD aesni_set_decrypt_key wrt ..imagebase
4944 DD $L$SEH_end_set_decrypt_key wrt ..imagebase
4945 DD $L$SEH_info_key wrt ..imagebase
4946
4947 DD aesni_set_encrypt_key wrt ..imagebase
4948 DD $L$SEH_end_set_encrypt_key wrt ..imagebase
4949 DD $L$SEH_info_key wrt ..imagebase
4950 section .xdata rdata align=8
4951 ALIGN 8
4952 $L$SEH_info_ecb:
4953 DB 9,0,0,0
4954 DD ecb_ccm64_se_handler wrt ..imagebase
4955 DD $L$ecb_enc_body wrt ..imagebase,$L$ecb_enc_ret wrt ..imagebase
4956 $L$SEH_info_ccm64_enc:
4957 DB 9,0,0,0
4958 DD ecb_ccm64_se_handler wrt ..imagebase
4959 DD $L$ccm64_enc_body wrt ..imagebase,$L$ccm64_enc_ret wrt ..imageba se
4960 $L$SEH_info_ccm64_dec:
4961 DB 9,0,0,0
4962 DD ecb_ccm64_se_handler wrt ..imagebase
4963 DD $L$ccm64_dec_body wrt ..imagebase,$L$ccm64_dec_ret wrt ..imageba se
4964 $L$SEH_info_ctr32:
4965 DB 9,0,0,0
4966 DD ctr_xts_se_handler wrt ..imagebase
4967 DD $L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase
4968 $L$SEH_info_xts_enc:
4969 DB 9,0,0,0
4970 DD ctr_xts_se_handler wrt ..imagebase
4971 DD $L$xts_enc_body wrt ..imagebase,$L$xts_enc_epilogue wrt ..imageb ase
4972 $L$SEH_info_xts_dec:
4973 DB 9,0,0,0
4974 DD ctr_xts_se_handler wrt ..imagebase
4975 DD $L$xts_dec_body wrt ..imagebase,$L$xts_dec_epilogue wrt ..imageb ase
4976 $L$SEH_info_ocb_enc:
4977 DB 9,0,0,0
4978 DD ocb_se_handler wrt ..imagebase
4979 DD $L$ocb_enc_body wrt ..imagebase,$L$ocb_enc_epilogue wrt ..imageb ase
4980 DD $L$ocb_enc_pop wrt ..imagebase
4981 DD 0
4982 $L$SEH_info_ocb_dec:
4983 DB 9,0,0,0
4984 DD ocb_se_handler wrt ..imagebase
4985 DD $L$ocb_dec_body wrt ..imagebase,$L$ocb_dec_epilogue wrt ..imageb ase
4986 DD $L$ocb_dec_pop wrt ..imagebase
4987 DD 0
4988 $L$SEH_info_cbc:
4989 DB 9,0,0,0
4990 DD cbc_se_handler wrt ..imagebase
4991 $L$SEH_info_key:
4992 DB 0x01,0x04,0x01,0x00
4993 DB 0x04,0x02,0x00,0x00
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698