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