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