]> git.proxmox.com Git - mirror_edk2.git/blob - CryptoPkg/Library/OpensslLib/X64/crypto/aes/vpaes-x86_64.nasm
CryptoPkg/OpensslLib: Commit the auto-generated assembly files for X64
[mirror_edk2.git] / CryptoPkg / Library / OpensslLib / X64 / crypto / aes / vpaes-x86_64.nasm
1 ; WARNING: do not edit!
2 ; Generated from openssl/crypto/aes/asm/vpaes-x86_64.pl
3 ;
4 ; Copyright 2011-2020 The OpenSSL Project Authors. All Rights Reserved.
5 ;
6 ; Licensed under the OpenSSL license (the "License"). You may not use
7 ; this file except in compliance with the License. You can obtain a copy
8 ; in the file LICENSE in the source distribution or at
9 ; https://www.openssl.org/source/license.html
10
11 default rel
12 %define XMMWORD
13 %define YMMWORD
14 %define ZMMWORD
15 section .text code align=64
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 ALIGN 16
35 _vpaes_encrypt_core:
36
37 mov r9,rdx
38 mov r11,16
39 mov eax,DWORD[240+rdx]
40 movdqa xmm1,xmm9
41 movdqa xmm2,XMMWORD[$L$k_ipt]
42 pandn xmm1,xmm0
43 movdqu xmm5,XMMWORD[r9]
44 psrld xmm1,4
45 pand xmm0,xmm9
46 DB 102,15,56,0,208
47 movdqa xmm0,XMMWORD[(($L$k_ipt+16))]
48 DB 102,15,56,0,193
49 pxor xmm2,xmm5
50 add r9,16
51 pxor xmm0,xmm2
52 lea r10,[$L$k_mc_backward]
53 jmp NEAR $L$enc_entry
54
55 ALIGN 16
56 $L$enc_loop:
57
58 movdqa xmm4,xmm13
59 movdqa xmm0,xmm12
60 DB 102,15,56,0,226
61 DB 102,15,56,0,195
62 pxor xmm4,xmm5
63 movdqa xmm5,xmm15
64 pxor xmm0,xmm4
65 movdqa xmm1,XMMWORD[((-64))+r10*1+r11]
66 DB 102,15,56,0,234
67 movdqa xmm4,XMMWORD[r10*1+r11]
68 movdqa xmm2,xmm14
69 DB 102,15,56,0,211
70 movdqa xmm3,xmm0
71 pxor xmm2,xmm5
72 DB 102,15,56,0,193
73 add r9,16
74 pxor xmm0,xmm2
75 DB 102,15,56,0,220
76 add r11,16
77 pxor xmm3,xmm0
78 DB 102,15,56,0,193
79 and r11,0x30
80 sub rax,1
81 pxor xmm0,xmm3
82
83 $L$enc_entry:
84
85 movdqa xmm1,xmm9
86 movdqa xmm5,xmm11
87 pandn xmm1,xmm0
88 psrld xmm1,4
89 pand xmm0,xmm9
90 DB 102,15,56,0,232
91 movdqa xmm3,xmm10
92 pxor xmm0,xmm1
93 DB 102,15,56,0,217
94 movdqa xmm4,xmm10
95 pxor xmm3,xmm5
96 DB 102,15,56,0,224
97 movdqa xmm2,xmm10
98 pxor xmm4,xmm5
99 DB 102,15,56,0,211
100 movdqa xmm3,xmm10
101 pxor xmm2,xmm0
102 DB 102,15,56,0,220
103 movdqu xmm5,XMMWORD[r9]
104 pxor xmm3,xmm1
105 jnz NEAR $L$enc_loop
106
107
108 movdqa xmm4,XMMWORD[((-96))+r10]
109 movdqa xmm0,XMMWORD[((-80))+r10]
110 DB 102,15,56,0,226
111 pxor xmm4,xmm5
112 DB 102,15,56,0,195
113 movdqa xmm1,XMMWORD[64+r10*1+r11]
114 pxor xmm0,xmm4
115 DB 102,15,56,0,193
116 DB 0F3h,0C3h ;repret
117
118
119
120
121
122
123
124
125
126 ALIGN 16
127 _vpaes_decrypt_core:
128
129 mov r9,rdx
130 mov eax,DWORD[240+rdx]
131 movdqa xmm1,xmm9
132 movdqa xmm2,XMMWORD[$L$k_dipt]
133 pandn xmm1,xmm0
134 mov r11,rax
135 psrld xmm1,4
136 movdqu xmm5,XMMWORD[r9]
137 shl r11,4
138 pand xmm0,xmm9
139 DB 102,15,56,0,208
140 movdqa xmm0,XMMWORD[(($L$k_dipt+16))]
141 xor r11,0x30
142 lea r10,[$L$k_dsbd]
143 DB 102,15,56,0,193
144 and r11,0x30
145 pxor xmm2,xmm5
146 movdqa xmm5,XMMWORD[(($L$k_mc_forward+48))]
147 pxor xmm0,xmm2
148 add r9,16
149 add r11,r10
150 jmp NEAR $L$dec_entry
151
152 ALIGN 16
153 $L$dec_loop:
154
155
156
157 movdqa xmm4,XMMWORD[((-32))+r10]
158 movdqa xmm1,XMMWORD[((-16))+r10]
159 DB 102,15,56,0,226
160 DB 102,15,56,0,203
161 pxor xmm0,xmm4
162 movdqa xmm4,XMMWORD[r10]
163 pxor xmm0,xmm1
164 movdqa xmm1,XMMWORD[16+r10]
165
166 DB 102,15,56,0,226
167 DB 102,15,56,0,197
168 DB 102,15,56,0,203
169 pxor xmm0,xmm4
170 movdqa xmm4,XMMWORD[32+r10]
171 pxor xmm0,xmm1
172 movdqa xmm1,XMMWORD[48+r10]
173
174 DB 102,15,56,0,226
175 DB 102,15,56,0,197
176 DB 102,15,56,0,203
177 pxor xmm0,xmm4
178 movdqa xmm4,XMMWORD[64+r10]
179 pxor xmm0,xmm1
180 movdqa xmm1,XMMWORD[80+r10]
181
182 DB 102,15,56,0,226
183 DB 102,15,56,0,197
184 DB 102,15,56,0,203
185 pxor xmm0,xmm4
186 add r9,16
187 DB 102,15,58,15,237,12
188 pxor xmm0,xmm1
189 sub rax,1
190
191 $L$dec_entry:
192
193 movdqa xmm1,xmm9
194 pandn xmm1,xmm0
195 movdqa xmm2,xmm11
196 psrld xmm1,4
197 pand xmm0,xmm9
198 DB 102,15,56,0,208
199 movdqa xmm3,xmm10
200 pxor xmm0,xmm1
201 DB 102,15,56,0,217
202 movdqa xmm4,xmm10
203 pxor xmm3,xmm2
204 DB 102,15,56,0,224
205 pxor xmm4,xmm2
206 movdqa xmm2,xmm10
207 DB 102,15,56,0,211
208 movdqa xmm3,xmm10
209 pxor xmm2,xmm0
210 DB 102,15,56,0,220
211 movdqu xmm0,XMMWORD[r9]
212 pxor xmm3,xmm1
213 jnz NEAR $L$dec_loop
214
215
216 movdqa xmm4,XMMWORD[96+r10]
217 DB 102,15,56,0,226
218 pxor xmm4,xmm0
219 movdqa xmm0,XMMWORD[112+r10]
220 movdqa xmm2,XMMWORD[((-352))+r11]
221 DB 102,15,56,0,195
222 pxor xmm0,xmm4
223 DB 102,15,56,0,194
224 DB 0F3h,0C3h ;repret
225
226
227
228
229
230
231
232
233
234 ALIGN 16
235 _vpaes_schedule_core:
236
237
238
239
240
241
242 call _vpaes_preheat
243 movdqa xmm8,XMMWORD[$L$k_rcon]
244 movdqu xmm0,XMMWORD[rdi]
245
246
247 movdqa xmm3,xmm0
248 lea r11,[$L$k_ipt]
249 call _vpaes_schedule_transform
250 movdqa xmm7,xmm0
251
252 lea r10,[$L$k_sr]
253 test rcx,rcx
254 jnz NEAR $L$schedule_am_decrypting
255
256
257 movdqu XMMWORD[rdx],xmm0
258 jmp NEAR $L$schedule_go
259
260 $L$schedule_am_decrypting:
261
262 movdqa xmm1,XMMWORD[r10*1+r8]
263 DB 102,15,56,0,217
264 movdqu XMMWORD[rdx],xmm3
265 xor r8,0x30
266
267 $L$schedule_go:
268 cmp esi,192
269 ja NEAR $L$schedule_256
270 je NEAR $L$schedule_192
271
272
273
274
275
276
277
278
279
280
281 $L$schedule_128:
282 mov esi,10
283
284 $L$oop_schedule_128:
285 call _vpaes_schedule_round
286 dec rsi
287 jz NEAR $L$schedule_mangle_last
288 call _vpaes_schedule_mangle
289 jmp NEAR $L$oop_schedule_128
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306 ALIGN 16
307 $L$schedule_192:
308 movdqu xmm0,XMMWORD[8+rdi]
309 call _vpaes_schedule_transform
310 movdqa xmm6,xmm0
311 pxor xmm4,xmm4
312 movhlps xmm6,xmm4
313 mov esi,4
314
315 $L$oop_schedule_192:
316 call _vpaes_schedule_round
317 DB 102,15,58,15,198,8
318 call _vpaes_schedule_mangle
319 call _vpaes_schedule_192_smear
320 call _vpaes_schedule_mangle
321 call _vpaes_schedule_round
322 dec rsi
323 jz NEAR $L$schedule_mangle_last
324 call _vpaes_schedule_mangle
325 call _vpaes_schedule_192_smear
326 jmp NEAR $L$oop_schedule_192
327
328
329
330
331
332
333
334
335
336
337
338 ALIGN 16
339 $L$schedule_256:
340 movdqu xmm0,XMMWORD[16+rdi]
341 call _vpaes_schedule_transform
342 mov esi,7
343
344 $L$oop_schedule_256:
345 call _vpaes_schedule_mangle
346 movdqa xmm6,xmm0
347
348
349 call _vpaes_schedule_round
350 dec rsi
351 jz NEAR $L$schedule_mangle_last
352 call _vpaes_schedule_mangle
353
354
355 pshufd xmm0,xmm0,0xFF
356 movdqa xmm5,xmm7
357 movdqa xmm7,xmm6
358 call _vpaes_schedule_low_round
359 movdqa xmm7,xmm5
360
361 jmp NEAR $L$oop_schedule_256
362
363
364
365
366
367
368
369
370
371
372
373
374 ALIGN 16
375 $L$schedule_mangle_last:
376
377 lea r11,[$L$k_deskew]
378 test rcx,rcx
379 jnz NEAR $L$schedule_mangle_last_dec
380
381
382 movdqa xmm1,XMMWORD[r10*1+r8]
383 DB 102,15,56,0,193
384 lea r11,[$L$k_opt]
385 add rdx,32
386
387 $L$schedule_mangle_last_dec:
388 add rdx,-16
389 pxor xmm0,XMMWORD[$L$k_s63]
390 call _vpaes_schedule_transform
391 movdqu XMMWORD[rdx],xmm0
392
393
394 pxor xmm0,xmm0
395 pxor xmm1,xmm1
396 pxor xmm2,xmm2
397 pxor xmm3,xmm3
398 pxor xmm4,xmm4
399 pxor xmm5,xmm5
400 pxor xmm6,xmm6
401 pxor xmm7,xmm7
402 DB 0F3h,0C3h ;repret
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421 ALIGN 16
422 _vpaes_schedule_192_smear:
423
424 pshufd xmm1,xmm6,0x80
425 pshufd xmm0,xmm7,0xFE
426 pxor xmm6,xmm1
427 pxor xmm1,xmm1
428 pxor xmm6,xmm0
429 movdqa xmm0,xmm6
430 movhlps xmm6,xmm1
431 DB 0F3h,0C3h ;repret
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454 ALIGN 16
455 _vpaes_schedule_round:
456
457
458 pxor xmm1,xmm1
459 DB 102,65,15,58,15,200,15
460 DB 102,69,15,58,15,192,15
461 pxor xmm7,xmm1
462
463
464 pshufd xmm0,xmm0,0xFF
465 DB 102,15,58,15,192,1
466
467
468
469
470 _vpaes_schedule_low_round:
471
472 movdqa xmm1,xmm7
473 pslldq xmm7,4
474 pxor xmm7,xmm1
475 movdqa xmm1,xmm7
476 pslldq xmm7,8
477 pxor xmm7,xmm1
478 pxor xmm7,XMMWORD[$L$k_s63]
479
480
481 movdqa xmm1,xmm9
482 pandn xmm1,xmm0
483 psrld xmm1,4
484 pand xmm0,xmm9
485 movdqa xmm2,xmm11
486 DB 102,15,56,0,208
487 pxor xmm0,xmm1
488 movdqa xmm3,xmm10
489 DB 102,15,56,0,217
490 pxor xmm3,xmm2
491 movdqa xmm4,xmm10
492 DB 102,15,56,0,224
493 pxor xmm4,xmm2
494 movdqa xmm2,xmm10
495 DB 102,15,56,0,211
496 pxor xmm2,xmm0
497 movdqa xmm3,xmm10
498 DB 102,15,56,0,220
499 pxor xmm3,xmm1
500 movdqa xmm4,xmm13
501 DB 102,15,56,0,226
502 movdqa xmm0,xmm12
503 DB 102,15,56,0,195
504 pxor xmm0,xmm4
505
506
507 pxor xmm0,xmm7
508 movdqa xmm7,xmm0
509 DB 0F3h,0C3h ;repret
510
511
512
513
514
515
516
517
518
519
520
521
522
523 ALIGN 16
524 _vpaes_schedule_transform:
525
526 movdqa xmm1,xmm9
527 pandn xmm1,xmm0
528 psrld xmm1,4
529 pand xmm0,xmm9
530 movdqa xmm2,XMMWORD[r11]
531 DB 102,15,56,0,208
532 movdqa xmm0,XMMWORD[16+r11]
533 DB 102,15,56,0,193
534 pxor xmm0,xmm2
535 DB 0F3h,0C3h ;repret
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563 ALIGN 16
564 _vpaes_schedule_mangle:
565
566 movdqa xmm4,xmm0
567 movdqa xmm5,XMMWORD[$L$k_mc_forward]
568 test rcx,rcx
569 jnz NEAR $L$schedule_mangle_dec
570
571
572 add rdx,16
573 pxor xmm4,XMMWORD[$L$k_s63]
574 DB 102,15,56,0,229
575 movdqa xmm3,xmm4
576 DB 102,15,56,0,229
577 pxor xmm3,xmm4
578 DB 102,15,56,0,229
579 pxor xmm3,xmm4
580
581 jmp NEAR $L$schedule_mangle_both
582 ALIGN 16
583 $L$schedule_mangle_dec:
584
585 lea r11,[$L$k_dksd]
586 movdqa xmm1,xmm9
587 pandn xmm1,xmm4
588 psrld xmm1,4
589 pand xmm4,xmm9
590
591 movdqa xmm2,XMMWORD[r11]
592 DB 102,15,56,0,212
593 movdqa xmm3,XMMWORD[16+r11]
594 DB 102,15,56,0,217
595 pxor xmm3,xmm2
596 DB 102,15,56,0,221
597
598 movdqa xmm2,XMMWORD[32+r11]
599 DB 102,15,56,0,212
600 pxor xmm2,xmm3
601 movdqa xmm3,XMMWORD[48+r11]
602 DB 102,15,56,0,217
603 pxor xmm3,xmm2
604 DB 102,15,56,0,221
605
606 movdqa xmm2,XMMWORD[64+r11]
607 DB 102,15,56,0,212
608 pxor xmm2,xmm3
609 movdqa xmm3,XMMWORD[80+r11]
610 DB 102,15,56,0,217
611 pxor xmm3,xmm2
612 DB 102,15,56,0,221
613
614 movdqa xmm2,XMMWORD[96+r11]
615 DB 102,15,56,0,212
616 pxor xmm2,xmm3
617 movdqa xmm3,XMMWORD[112+r11]
618 DB 102,15,56,0,217
619 pxor xmm3,xmm2
620
621 add rdx,-16
622
623 $L$schedule_mangle_both:
624 movdqa xmm1,XMMWORD[r10*1+r8]
625 DB 102,15,56,0,217
626 add r8,-16
627 and r8,0x30
628 movdqu XMMWORD[rdx],xmm3
629 DB 0F3h,0C3h ;repret
630
631
632
633
634
635
636 global vpaes_set_encrypt_key
637
638 ALIGN 16
639 vpaes_set_encrypt_key:
640 mov QWORD[8+rsp],rdi ;WIN64 prologue
641 mov QWORD[16+rsp],rsi
642 mov rax,rsp
643 $L$SEH_begin_vpaes_set_encrypt_key:
644 mov rdi,rcx
645 mov rsi,rdx
646 mov rdx,r8
647
648
649
650 lea rsp,[((-184))+rsp]
651 movaps XMMWORD[16+rsp],xmm6
652 movaps XMMWORD[32+rsp],xmm7
653 movaps XMMWORD[48+rsp],xmm8
654 movaps XMMWORD[64+rsp],xmm9
655 movaps XMMWORD[80+rsp],xmm10
656 movaps XMMWORD[96+rsp],xmm11
657 movaps XMMWORD[112+rsp],xmm12
658 movaps XMMWORD[128+rsp],xmm13
659 movaps XMMWORD[144+rsp],xmm14
660 movaps XMMWORD[160+rsp],xmm15
661 $L$enc_key_body:
662 mov eax,esi
663 shr eax,5
664 add eax,5
665 mov DWORD[240+rdx],eax
666
667 mov ecx,0
668 mov r8d,0x30
669 call _vpaes_schedule_core
670 movaps xmm6,XMMWORD[16+rsp]
671 movaps xmm7,XMMWORD[32+rsp]
672 movaps xmm8,XMMWORD[48+rsp]
673 movaps xmm9,XMMWORD[64+rsp]
674 movaps xmm10,XMMWORD[80+rsp]
675 movaps xmm11,XMMWORD[96+rsp]
676 movaps xmm12,XMMWORD[112+rsp]
677 movaps xmm13,XMMWORD[128+rsp]
678 movaps xmm14,XMMWORD[144+rsp]
679 movaps xmm15,XMMWORD[160+rsp]
680 lea rsp,[184+rsp]
681 $L$enc_key_epilogue:
682 xor eax,eax
683 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
684 mov rsi,QWORD[16+rsp]
685 DB 0F3h,0C3h ;repret
686
687 $L$SEH_end_vpaes_set_encrypt_key:
688
689 global vpaes_set_decrypt_key
690
691 ALIGN 16
692 vpaes_set_decrypt_key:
693 mov QWORD[8+rsp],rdi ;WIN64 prologue
694 mov QWORD[16+rsp],rsi
695 mov rax,rsp
696 $L$SEH_begin_vpaes_set_decrypt_key:
697 mov rdi,rcx
698 mov rsi,rdx
699 mov rdx,r8
700
701
702
703 lea rsp,[((-184))+rsp]
704 movaps XMMWORD[16+rsp],xmm6
705 movaps XMMWORD[32+rsp],xmm7
706 movaps XMMWORD[48+rsp],xmm8
707 movaps XMMWORD[64+rsp],xmm9
708 movaps XMMWORD[80+rsp],xmm10
709 movaps XMMWORD[96+rsp],xmm11
710 movaps XMMWORD[112+rsp],xmm12
711 movaps XMMWORD[128+rsp],xmm13
712 movaps XMMWORD[144+rsp],xmm14
713 movaps XMMWORD[160+rsp],xmm15
714 $L$dec_key_body:
715 mov eax,esi
716 shr eax,5
717 add eax,5
718 mov DWORD[240+rdx],eax
719 shl eax,4
720 lea rdx,[16+rax*1+rdx]
721
722 mov ecx,1
723 mov r8d,esi
724 shr r8d,1
725 and r8d,32
726 xor r8d,32
727 call _vpaes_schedule_core
728 movaps xmm6,XMMWORD[16+rsp]
729 movaps xmm7,XMMWORD[32+rsp]
730 movaps xmm8,XMMWORD[48+rsp]
731 movaps xmm9,XMMWORD[64+rsp]
732 movaps xmm10,XMMWORD[80+rsp]
733 movaps xmm11,XMMWORD[96+rsp]
734 movaps xmm12,XMMWORD[112+rsp]
735 movaps xmm13,XMMWORD[128+rsp]
736 movaps xmm14,XMMWORD[144+rsp]
737 movaps xmm15,XMMWORD[160+rsp]
738 lea rsp,[184+rsp]
739 $L$dec_key_epilogue:
740 xor eax,eax
741 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
742 mov rsi,QWORD[16+rsp]
743 DB 0F3h,0C3h ;repret
744
745 $L$SEH_end_vpaes_set_decrypt_key:
746
747 global vpaes_encrypt
748
749 ALIGN 16
750 vpaes_encrypt:
751 mov QWORD[8+rsp],rdi ;WIN64 prologue
752 mov QWORD[16+rsp],rsi
753 mov rax,rsp
754 $L$SEH_begin_vpaes_encrypt:
755 mov rdi,rcx
756 mov rsi,rdx
757 mov rdx,r8
758
759
760
761 lea rsp,[((-184))+rsp]
762 movaps XMMWORD[16+rsp],xmm6
763 movaps XMMWORD[32+rsp],xmm7
764 movaps XMMWORD[48+rsp],xmm8
765 movaps XMMWORD[64+rsp],xmm9
766 movaps XMMWORD[80+rsp],xmm10
767 movaps XMMWORD[96+rsp],xmm11
768 movaps XMMWORD[112+rsp],xmm12
769 movaps XMMWORD[128+rsp],xmm13
770 movaps XMMWORD[144+rsp],xmm14
771 movaps XMMWORD[160+rsp],xmm15
772 $L$enc_body:
773 movdqu xmm0,XMMWORD[rdi]
774 call _vpaes_preheat
775 call _vpaes_encrypt_core
776 movdqu XMMWORD[rsi],xmm0
777 movaps xmm6,XMMWORD[16+rsp]
778 movaps xmm7,XMMWORD[32+rsp]
779 movaps xmm8,XMMWORD[48+rsp]
780 movaps xmm9,XMMWORD[64+rsp]
781 movaps xmm10,XMMWORD[80+rsp]
782 movaps xmm11,XMMWORD[96+rsp]
783 movaps xmm12,XMMWORD[112+rsp]
784 movaps xmm13,XMMWORD[128+rsp]
785 movaps xmm14,XMMWORD[144+rsp]
786 movaps xmm15,XMMWORD[160+rsp]
787 lea rsp,[184+rsp]
788 $L$enc_epilogue:
789 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
790 mov rsi,QWORD[16+rsp]
791 DB 0F3h,0C3h ;repret
792
793 $L$SEH_end_vpaes_encrypt:
794
795 global vpaes_decrypt
796
797 ALIGN 16
798 vpaes_decrypt:
799 mov QWORD[8+rsp],rdi ;WIN64 prologue
800 mov QWORD[16+rsp],rsi
801 mov rax,rsp
802 $L$SEH_begin_vpaes_decrypt:
803 mov rdi,rcx
804 mov rsi,rdx
805 mov rdx,r8
806
807
808
809 lea rsp,[((-184))+rsp]
810 movaps XMMWORD[16+rsp],xmm6
811 movaps XMMWORD[32+rsp],xmm7
812 movaps XMMWORD[48+rsp],xmm8
813 movaps XMMWORD[64+rsp],xmm9
814 movaps XMMWORD[80+rsp],xmm10
815 movaps XMMWORD[96+rsp],xmm11
816 movaps XMMWORD[112+rsp],xmm12
817 movaps XMMWORD[128+rsp],xmm13
818 movaps XMMWORD[144+rsp],xmm14
819 movaps XMMWORD[160+rsp],xmm15
820 $L$dec_body:
821 movdqu xmm0,XMMWORD[rdi]
822 call _vpaes_preheat
823 call _vpaes_decrypt_core
824 movdqu XMMWORD[rsi],xmm0
825 movaps xmm6,XMMWORD[16+rsp]
826 movaps xmm7,XMMWORD[32+rsp]
827 movaps xmm8,XMMWORD[48+rsp]
828 movaps xmm9,XMMWORD[64+rsp]
829 movaps xmm10,XMMWORD[80+rsp]
830 movaps xmm11,XMMWORD[96+rsp]
831 movaps xmm12,XMMWORD[112+rsp]
832 movaps xmm13,XMMWORD[128+rsp]
833 movaps xmm14,XMMWORD[144+rsp]
834 movaps xmm15,XMMWORD[160+rsp]
835 lea rsp,[184+rsp]
836 $L$dec_epilogue:
837 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
838 mov rsi,QWORD[16+rsp]
839 DB 0F3h,0C3h ;repret
840
841 $L$SEH_end_vpaes_decrypt:
842 global vpaes_cbc_encrypt
843
844 ALIGN 16
845 vpaes_cbc_encrypt:
846 mov QWORD[8+rsp],rdi ;WIN64 prologue
847 mov QWORD[16+rsp],rsi
848 mov rax,rsp
849 $L$SEH_begin_vpaes_cbc_encrypt:
850 mov rdi,rcx
851 mov rsi,rdx
852 mov rdx,r8
853 mov rcx,r9
854 mov r8,QWORD[40+rsp]
855 mov r9,QWORD[48+rsp]
856
857
858
859 xchg rdx,rcx
860 sub rcx,16
861 jc NEAR $L$cbc_abort
862 lea rsp,[((-184))+rsp]
863 movaps XMMWORD[16+rsp],xmm6
864 movaps XMMWORD[32+rsp],xmm7
865 movaps XMMWORD[48+rsp],xmm8
866 movaps XMMWORD[64+rsp],xmm9
867 movaps XMMWORD[80+rsp],xmm10
868 movaps XMMWORD[96+rsp],xmm11
869 movaps XMMWORD[112+rsp],xmm12
870 movaps XMMWORD[128+rsp],xmm13
871 movaps XMMWORD[144+rsp],xmm14
872 movaps XMMWORD[160+rsp],xmm15
873 $L$cbc_body:
874 movdqu xmm6,XMMWORD[r8]
875 sub rsi,rdi
876 call _vpaes_preheat
877 cmp r9d,0
878 je NEAR $L$cbc_dec_loop
879 jmp NEAR $L$cbc_enc_loop
880 ALIGN 16
881 $L$cbc_enc_loop:
882 movdqu xmm0,XMMWORD[rdi]
883 pxor xmm0,xmm6
884 call _vpaes_encrypt_core
885 movdqa xmm6,xmm0
886 movdqu XMMWORD[rdi*1+rsi],xmm0
887 lea rdi,[16+rdi]
888 sub rcx,16
889 jnc NEAR $L$cbc_enc_loop
890 jmp NEAR $L$cbc_done
891 ALIGN 16
892 $L$cbc_dec_loop:
893 movdqu xmm0,XMMWORD[rdi]
894 movdqa xmm7,xmm0
895 call _vpaes_decrypt_core
896 pxor xmm0,xmm6
897 movdqa xmm6,xmm7
898 movdqu XMMWORD[rdi*1+rsi],xmm0
899 lea rdi,[16+rdi]
900 sub rcx,16
901 jnc NEAR $L$cbc_dec_loop
902 $L$cbc_done:
903 movdqu XMMWORD[r8],xmm6
904 movaps xmm6,XMMWORD[16+rsp]
905 movaps xmm7,XMMWORD[32+rsp]
906 movaps xmm8,XMMWORD[48+rsp]
907 movaps xmm9,XMMWORD[64+rsp]
908 movaps xmm10,XMMWORD[80+rsp]
909 movaps xmm11,XMMWORD[96+rsp]
910 movaps xmm12,XMMWORD[112+rsp]
911 movaps xmm13,XMMWORD[128+rsp]
912 movaps xmm14,XMMWORD[144+rsp]
913 movaps xmm15,XMMWORD[160+rsp]
914 lea rsp,[184+rsp]
915 $L$cbc_epilogue:
916 $L$cbc_abort:
917 mov rdi,QWORD[8+rsp] ;WIN64 epilogue
918 mov rsi,QWORD[16+rsp]
919 DB 0F3h,0C3h ;repret
920
921 $L$SEH_end_vpaes_cbc_encrypt:
922
923
924
925
926
927
928
929 ALIGN 16
930 _vpaes_preheat:
931
932 lea r10,[$L$k_s0F]
933 movdqa xmm10,XMMWORD[((-32))+r10]
934 movdqa xmm11,XMMWORD[((-16))+r10]
935 movdqa xmm9,XMMWORD[r10]
936 movdqa xmm13,XMMWORD[48+r10]
937 movdqa xmm12,XMMWORD[64+r10]
938 movdqa xmm15,XMMWORD[80+r10]
939 movdqa xmm14,XMMWORD[96+r10]
940 DB 0F3h,0C3h ;repret
941
942
943
944
945
946
947
948
949 ALIGN 64
950 _vpaes_consts:
951 $L$k_inv:
952 DQ 0x0E05060F0D080180,0x040703090A0B0C02
953 DQ 0x01040A060F0B0780,0x030D0E0C02050809
954
955 $L$k_s0F:
956 DQ 0x0F0F0F0F0F0F0F0F,0x0F0F0F0F0F0F0F0F
957
958 $L$k_ipt:
959 DQ 0xC2B2E8985A2A7000,0xCABAE09052227808
960 DQ 0x4C01307D317C4D00,0xCD80B1FCB0FDCC81
961
962 $L$k_sb1:
963 DQ 0xB19BE18FCB503E00,0xA5DF7A6E142AF544
964 DQ 0x3618D415FAE22300,0x3BF7CCC10D2ED9EF
965 $L$k_sb2:
966 DQ 0xE27A93C60B712400,0x5EB7E955BC982FCD
967 DQ 0x69EB88400AE12900,0xC2A163C8AB82234A
968 $L$k_sbo:
969 DQ 0xD0D26D176FBDC700,0x15AABF7AC502A878
970 DQ 0xCFE474A55FBB6A00,0x8E1E90D1412B35FA
971
972 $L$k_mc_forward:
973 DQ 0x0407060500030201,0x0C0F0E0D080B0A09
974 DQ 0x080B0A0904070605,0x000302010C0F0E0D
975 DQ 0x0C0F0E0D080B0A09,0x0407060500030201
976 DQ 0x000302010C0F0E0D,0x080B0A0904070605
977
978 $L$k_mc_backward:
979 DQ 0x0605040702010003,0x0E0D0C0F0A09080B
980 DQ 0x020100030E0D0C0F,0x0A09080B06050407
981 DQ 0x0E0D0C0F0A09080B,0x0605040702010003
982 DQ 0x0A09080B06050407,0x020100030E0D0C0F
983
984 $L$k_sr:
985 DQ 0x0706050403020100,0x0F0E0D0C0B0A0908
986 DQ 0x030E09040F0A0500,0x0B06010C07020D08
987 DQ 0x0F060D040B020900,0x070E050C030A0108
988 DQ 0x0B0E0104070A0D00,0x0306090C0F020508
989
990 $L$k_rcon:
991 DQ 0x1F8391B9AF9DEEB6,0x702A98084D7C7D81
992
993 $L$k_s63:
994 DQ 0x5B5B5B5B5B5B5B5B,0x5B5B5B5B5B5B5B5B
995
996 $L$k_opt:
997 DQ 0xFF9F4929D6B66000,0xF7974121DEBE6808
998 DQ 0x01EDBD5150BCEC00,0xE10D5DB1B05C0CE0
999
1000 $L$k_deskew:
1001 DQ 0x07E4A34047A4E300,0x1DFEB95A5DBEF91A
1002 DQ 0x5F36B5DC83EA6900,0x2841C2ABF49D1E77
1003
1004
1005
1006
1007
1008 $L$k_dksd:
1009 DQ 0xFEB91A5DA3E44700,0x0740E3A45A1DBEF9
1010 DQ 0x41C277F4B5368300,0x5FDC69EAAB289D1E
1011 $L$k_dksb:
1012 DQ 0x9A4FCA1F8550D500,0x03D653861CC94C99
1013 DQ 0x115BEDA7B6FC4A00,0xD993256F7E3482C8
1014 $L$k_dkse:
1015 DQ 0xD5031CCA1FC9D600,0x53859A4C994F5086
1016 DQ 0xA23196054FDC7BE8,0xCD5EF96A20B31487
1017 $L$k_dks9:
1018 DQ 0xB6116FC87ED9A700,0x4AED933482255BFC
1019 DQ 0x4576516227143300,0x8BB89FACE9DAFDCE
1020
1021
1022
1023
1024
1025 $L$k_dipt:
1026 DQ 0x0F505B040B545F00,0x154A411E114E451A
1027 DQ 0x86E383E660056500,0x12771772F491F194
1028
1029 $L$k_dsb9:
1030 DQ 0x851C03539A86D600,0xCAD51F504F994CC9
1031 DQ 0xC03B1789ECD74900,0x725E2C9EB2FBA565
1032 $L$k_dsbd:
1033 DQ 0x7D57CCDFE6B1A200,0xF56E9B13882A4439
1034 DQ 0x3CE2FAF724C6CB00,0x2931180D15DEEFD3
1035 $L$k_dsbb:
1036 DQ 0xD022649296B44200,0x602646F6B0F2D404
1037 DQ 0xC19498A6CD596700,0xF3FF0C3E3255AA6B
1038 $L$k_dsbe:
1039 DQ 0x46F2929626D4D000,0x2242600464B4F6B0
1040 DQ 0x0C55A6CDFFAAC100,0x9467F36B98593E32
1041 $L$k_dsbo:
1042 DQ 0x1387EA537EF94000,0xC7AA6DB9D4943E2D
1043 DQ 0x12D7560F93441D00,0xCA4B8159D8C58E9C
1044 DB 86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
1045 DB 111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54
1046 DB 52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97
1047 DB 109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32
1048 DB 85,110,105,118,101,114,115,105,116,121,41,0
1049 ALIGN 64
1050
1051 EXTERN __imp_RtlVirtualUnwind
1052
1053 ALIGN 16
1054 se_handler:
1055 push rsi
1056 push rdi
1057 push rbx
1058 push rbp
1059 push r12
1060 push r13
1061 push r14
1062 push r15
1063 pushfq
1064 sub rsp,64
1065
1066 mov rax,QWORD[120+r8]
1067 mov rbx,QWORD[248+r8]
1068
1069 mov rsi,QWORD[8+r9]
1070 mov r11,QWORD[56+r9]
1071
1072 mov r10d,DWORD[r11]
1073 lea r10,[r10*1+rsi]
1074 cmp rbx,r10
1075 jb NEAR $L$in_prologue
1076
1077 mov rax,QWORD[152+r8]
1078
1079 mov r10d,DWORD[4+r11]
1080 lea r10,[r10*1+rsi]
1081 cmp rbx,r10
1082 jae NEAR $L$in_prologue
1083
1084 lea rsi,[16+rax]
1085 lea rdi,[512+r8]
1086 mov ecx,20
1087 DD 0xa548f3fc
1088 lea rax,[184+rax]
1089
1090 $L$in_prologue:
1091 mov rdi,QWORD[8+rax]
1092 mov rsi,QWORD[16+rax]
1093 mov QWORD[152+r8],rax
1094 mov QWORD[168+r8],rsi
1095 mov QWORD[176+r8],rdi
1096
1097 mov rdi,QWORD[40+r9]
1098 mov rsi,r8
1099 mov ecx,154
1100 DD 0xa548f3fc
1101
1102 mov rsi,r9
1103 xor rcx,rcx
1104 mov rdx,QWORD[8+rsi]
1105 mov r8,QWORD[rsi]
1106 mov r9,QWORD[16+rsi]
1107 mov r10,QWORD[40+rsi]
1108 lea r11,[56+rsi]
1109 lea r12,[24+rsi]
1110 mov QWORD[32+rsp],r10
1111 mov QWORD[40+rsp],r11
1112 mov QWORD[48+rsp],r12
1113 mov QWORD[56+rsp],rcx
1114 call QWORD[__imp_RtlVirtualUnwind]
1115
1116 mov eax,1
1117 add rsp,64
1118 popfq
1119 pop r15
1120 pop r14
1121 pop r13
1122 pop r12
1123 pop rbp
1124 pop rbx
1125 pop rdi
1126 pop rsi
1127 DB 0F3h,0C3h ;repret
1128
1129
1130 section .pdata rdata align=4
1131 ALIGN 4
1132 DD $L$SEH_begin_vpaes_set_encrypt_key wrt ..imagebase
1133 DD $L$SEH_end_vpaes_set_encrypt_key wrt ..imagebase
1134 DD $L$SEH_info_vpaes_set_encrypt_key wrt ..imagebase
1135
1136 DD $L$SEH_begin_vpaes_set_decrypt_key wrt ..imagebase
1137 DD $L$SEH_end_vpaes_set_decrypt_key wrt ..imagebase
1138 DD $L$SEH_info_vpaes_set_decrypt_key wrt ..imagebase
1139
1140 DD $L$SEH_begin_vpaes_encrypt wrt ..imagebase
1141 DD $L$SEH_end_vpaes_encrypt wrt ..imagebase
1142 DD $L$SEH_info_vpaes_encrypt wrt ..imagebase
1143
1144 DD $L$SEH_begin_vpaes_decrypt wrt ..imagebase
1145 DD $L$SEH_end_vpaes_decrypt wrt ..imagebase
1146 DD $L$SEH_info_vpaes_decrypt wrt ..imagebase
1147
1148 DD $L$SEH_begin_vpaes_cbc_encrypt wrt ..imagebase
1149 DD $L$SEH_end_vpaes_cbc_encrypt wrt ..imagebase
1150 DD $L$SEH_info_vpaes_cbc_encrypt wrt ..imagebase
1151
1152 section .xdata rdata align=8
1153 ALIGN 8
1154 $L$SEH_info_vpaes_set_encrypt_key:
1155 DB 9,0,0,0
1156 DD se_handler wrt ..imagebase
1157 DD $L$enc_key_body wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase
1158 $L$SEH_info_vpaes_set_decrypt_key:
1159 DB 9,0,0,0
1160 DD se_handler wrt ..imagebase
1161 DD $L$dec_key_body wrt ..imagebase,$L$dec_key_epilogue wrt ..imagebase
1162 $L$SEH_info_vpaes_encrypt:
1163 DB 9,0,0,0
1164 DD se_handler wrt ..imagebase
1165 DD $L$enc_body wrt ..imagebase,$L$enc_epilogue wrt ..imagebase
1166 $L$SEH_info_vpaes_decrypt:
1167 DB 9,0,0,0
1168 DD se_handler wrt ..imagebase
1169 DD $L$dec_body wrt ..imagebase,$L$dec_epilogue wrt ..imagebase
1170 $L$SEH_info_vpaes_cbc_encrypt:
1171 DB 9,0,0,0
1172 DD se_handler wrt ..imagebase
1173 DD $L$cbc_body wrt ..imagebase,$L$cbc_epilogue wrt ..imagebase