VirtualBox

source: vbox/trunk/src/libs/openssl-1.1.1k/crypto/genasm-nasm/vpaes-x86_64.S@ 91138

最後變更 在這個檔案從91138是 83531,由 vboxsync 提交於 5 年 前

setting svn:sync-process=export for openssl-1.1.1f, all files except tests

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

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette