• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; This file is generated from a similarly-named Perl script in the BoringSSL
2; source tree. Do not edit by hand.
3
4default	rel
5%define XMMWORD
6%define YMMWORD
7%define ZMMWORD
8
9%include "ring_core_generated/prefix_symbols_nasm.inc"
10section	.text code align=64
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29ALIGN	16
30_vpaes_encrypt_core:
31
32	mov	r9,rdx
33	mov	r11,16
34	mov	eax,DWORD[240+rdx]
35	movdqa	xmm1,xmm9
36	movdqa	xmm2,XMMWORD[$L$k_ipt]
37	pandn	xmm1,xmm0
38	movdqu	xmm5,XMMWORD[r9]
39	psrld	xmm1,4
40	pand	xmm0,xmm9
41DB	102,15,56,0,208
42	movdqa	xmm0,XMMWORD[(($L$k_ipt+16))]
43DB	102,15,56,0,193
44	pxor	xmm2,xmm5
45	add	r9,16
46	pxor	xmm0,xmm2
47	lea	r10,[$L$k_mc_backward]
48	jmp	NEAR $L$enc_entry
49
50ALIGN	16
51$L$enc_loop:
52
53	movdqa	xmm4,xmm13
54	movdqa	xmm0,xmm12
55DB	102,15,56,0,226
56DB	102,15,56,0,195
57	pxor	xmm4,xmm5
58	movdqa	xmm5,xmm15
59	pxor	xmm0,xmm4
60	movdqa	xmm1,XMMWORD[((-64))+r10*1+r11]
61DB	102,15,56,0,234
62	movdqa	xmm4,XMMWORD[r10*1+r11]
63	movdqa	xmm2,xmm14
64DB	102,15,56,0,211
65	movdqa	xmm3,xmm0
66	pxor	xmm2,xmm5
67DB	102,15,56,0,193
68	add	r9,16
69	pxor	xmm0,xmm2
70DB	102,15,56,0,220
71	add	r11,16
72	pxor	xmm3,xmm0
73DB	102,15,56,0,193
74	and	r11,0x30
75	sub	rax,1
76	pxor	xmm0,xmm3
77
78$L$enc_entry:
79
80	movdqa	xmm1,xmm9
81	movdqa	xmm5,xmm11
82	pandn	xmm1,xmm0
83	psrld	xmm1,4
84	pand	xmm0,xmm9
85DB	102,15,56,0,232
86	movdqa	xmm3,xmm10
87	pxor	xmm0,xmm1
88DB	102,15,56,0,217
89	movdqa	xmm4,xmm10
90	pxor	xmm3,xmm5
91DB	102,15,56,0,224
92	movdqa	xmm2,xmm10
93	pxor	xmm4,xmm5
94DB	102,15,56,0,211
95	movdqa	xmm3,xmm10
96	pxor	xmm2,xmm0
97DB	102,15,56,0,220
98	movdqu	xmm5,XMMWORD[r9]
99	pxor	xmm3,xmm1
100	jnz	NEAR $L$enc_loop
101
102
103	movdqa	xmm4,XMMWORD[((-96))+r10]
104	movdqa	xmm0,XMMWORD[((-80))+r10]
105DB	102,15,56,0,226
106	pxor	xmm4,xmm5
107DB	102,15,56,0,195
108	movdqa	xmm1,XMMWORD[64+r10*1+r11]
109	pxor	xmm0,xmm4
110DB	102,15,56,0,193
111	DB	0F3h,0C3h		;repret
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145ALIGN	16
146_vpaes_encrypt_core_2x:
147
148	mov	r9,rdx
149	mov	r11,16
150	mov	eax,DWORD[240+rdx]
151	movdqa	xmm1,xmm9
152	movdqa	xmm7,xmm9
153	movdqa	xmm2,XMMWORD[$L$k_ipt]
154	movdqa	xmm8,xmm2
155	pandn	xmm1,xmm0
156	pandn	xmm7,xmm6
157	movdqu	xmm5,XMMWORD[r9]
158
159	psrld	xmm1,4
160	psrld	xmm7,4
161	pand	xmm0,xmm9
162	pand	xmm6,xmm9
163DB	102,15,56,0,208
164DB	102,68,15,56,0,198
165	movdqa	xmm0,XMMWORD[(($L$k_ipt+16))]
166	movdqa	xmm6,xmm0
167DB	102,15,56,0,193
168DB	102,15,56,0,247
169	pxor	xmm2,xmm5
170	pxor	xmm8,xmm5
171	add	r9,16
172	pxor	xmm0,xmm2
173	pxor	xmm6,xmm8
174	lea	r10,[$L$k_mc_backward]
175	jmp	NEAR $L$enc2x_entry
176
177ALIGN	16
178$L$enc2x_loop:
179
180	movdqa	xmm4,XMMWORD[$L$k_sb1]
181	movdqa	xmm0,XMMWORD[(($L$k_sb1+16))]
182	movdqa	xmm12,xmm4
183	movdqa	xmm6,xmm0
184DB	102,15,56,0,226
185DB	102,69,15,56,0,224
186DB	102,15,56,0,195
187DB	102,65,15,56,0,243
188	pxor	xmm4,xmm5
189	pxor	xmm12,xmm5
190	movdqa	xmm5,XMMWORD[$L$k_sb2]
191	movdqa	xmm13,xmm5
192	pxor	xmm0,xmm4
193	pxor	xmm6,xmm12
194	movdqa	xmm1,XMMWORD[((-64))+r10*1+r11]
195
196DB	102,15,56,0,234
197DB	102,69,15,56,0,232
198	movdqa	xmm4,XMMWORD[r10*1+r11]
199
200	movdqa	xmm2,XMMWORD[(($L$k_sb2+16))]
201	movdqa	xmm8,xmm2
202DB	102,15,56,0,211
203DB	102,69,15,56,0,195
204	movdqa	xmm3,xmm0
205	movdqa	xmm11,xmm6
206	pxor	xmm2,xmm5
207	pxor	xmm8,xmm13
208DB	102,15,56,0,193
209DB	102,15,56,0,241
210	add	r9,16
211	pxor	xmm0,xmm2
212	pxor	xmm6,xmm8
213DB	102,15,56,0,220
214DB	102,68,15,56,0,220
215	add	r11,16
216	pxor	xmm3,xmm0
217	pxor	xmm11,xmm6
218DB	102,15,56,0,193
219DB	102,15,56,0,241
220	and	r11,0x30
221	sub	rax,1
222	pxor	xmm0,xmm3
223	pxor	xmm6,xmm11
224
225$L$enc2x_entry:
226
227	movdqa	xmm1,xmm9
228	movdqa	xmm7,xmm9
229	movdqa	xmm5,XMMWORD[(($L$k_inv+16))]
230	movdqa	xmm13,xmm5
231	pandn	xmm1,xmm0
232	pandn	xmm7,xmm6
233	psrld	xmm1,4
234	psrld	xmm7,4
235	pand	xmm0,xmm9
236	pand	xmm6,xmm9
237DB	102,15,56,0,232
238DB	102,68,15,56,0,238
239	movdqa	xmm3,xmm10
240	movdqa	xmm11,xmm10
241	pxor	xmm0,xmm1
242	pxor	xmm6,xmm7
243DB	102,15,56,0,217
244DB	102,68,15,56,0,223
245	movdqa	xmm4,xmm10
246	movdqa	xmm12,xmm10
247	pxor	xmm3,xmm5
248	pxor	xmm11,xmm13
249DB	102,15,56,0,224
250DB	102,68,15,56,0,230
251	movdqa	xmm2,xmm10
252	movdqa	xmm8,xmm10
253	pxor	xmm4,xmm5
254	pxor	xmm12,xmm13
255DB	102,15,56,0,211
256DB	102,69,15,56,0,195
257	movdqa	xmm3,xmm10
258	movdqa	xmm11,xmm10
259	pxor	xmm2,xmm0
260	pxor	xmm8,xmm6
261DB	102,15,56,0,220
262DB	102,69,15,56,0,220
263	movdqu	xmm5,XMMWORD[r9]
264
265	pxor	xmm3,xmm1
266	pxor	xmm11,xmm7
267	jnz	NEAR $L$enc2x_loop
268
269
270	movdqa	xmm4,XMMWORD[((-96))+r10]
271	movdqa	xmm0,XMMWORD[((-80))+r10]
272	movdqa	xmm12,xmm4
273	movdqa	xmm6,xmm0
274DB	102,15,56,0,226
275DB	102,69,15,56,0,224
276	pxor	xmm4,xmm5
277	pxor	xmm12,xmm5
278DB	102,15,56,0,195
279DB	102,65,15,56,0,243
280	movdqa	xmm1,XMMWORD[64+r10*1+r11]
281
282	pxor	xmm0,xmm4
283	pxor	xmm6,xmm12
284DB	102,15,56,0,193
285DB	102,15,56,0,241
286	DB	0F3h,0C3h		;repret
287
288
289
290
291
292
293
294
295
296ALIGN	16
297_vpaes_schedule_core:
298
299
300
301
302
303
304	call	_vpaes_preheat
305	movdqa	xmm8,XMMWORD[$L$k_rcon]
306	movdqu	xmm0,XMMWORD[rdi]
307
308
309	movdqa	xmm3,xmm0
310	lea	r11,[$L$k_ipt]
311	call	_vpaes_schedule_transform
312	movdqa	xmm7,xmm0
313
314	lea	r10,[$L$k_sr]
315
316
317	movdqu	XMMWORD[rdx],xmm0
318
319$L$schedule_go:
320	cmp	esi,192
321	ja	NEAR $L$schedule_256
322
323
324
325
326
327
328
329
330
331
332
333$L$schedule_128:
334	mov	esi,10
335
336$L$oop_schedule_128:
337	call	_vpaes_schedule_round
338	dec	rsi
339	jz	NEAR $L$schedule_mangle_last
340	call	_vpaes_schedule_mangle
341	jmp	NEAR $L$oop_schedule_128
342
343
344
345
346
347
348
349
350
351
352
353ALIGN	16
354$L$schedule_256:
355	movdqu	xmm0,XMMWORD[16+rdi]
356	call	_vpaes_schedule_transform
357	mov	esi,7
358
359$L$oop_schedule_256:
360	call	_vpaes_schedule_mangle
361	movdqa	xmm6,xmm0
362
363
364	call	_vpaes_schedule_round
365	dec	rsi
366	jz	NEAR $L$schedule_mangle_last
367	call	_vpaes_schedule_mangle
368
369
370	pshufd	xmm0,xmm0,0xFF
371	movdqa	xmm5,xmm7
372	movdqa	xmm7,xmm6
373	call	_vpaes_schedule_low_round
374	movdqa	xmm7,xmm5
375
376	jmp	NEAR $L$oop_schedule_256
377
378
379
380
381
382
383
384
385
386
387
388
389ALIGN	16
390$L$schedule_mangle_last:
391
392	lea	r11,[$L$k_deskew]
393
394
395	movdqa	xmm1,XMMWORD[r10*1+r8]
396DB	102,15,56,0,193
397	lea	r11,[$L$k_opt]
398	add	rdx,32
399
400$L$schedule_mangle_last_dec:
401	add	rdx,-16
402	pxor	xmm0,XMMWORD[$L$k_s63]
403	call	_vpaes_schedule_transform
404	movdqu	XMMWORD[rdx],xmm0
405
406
407	pxor	xmm0,xmm0
408	pxor	xmm1,xmm1
409	pxor	xmm2,xmm2
410	pxor	xmm3,xmm3
411	pxor	xmm4,xmm4
412	pxor	xmm5,xmm5
413	pxor	xmm6,xmm6
414	pxor	xmm7,xmm7
415	DB	0F3h,0C3h		;repret
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438ALIGN	16
439_vpaes_schedule_round:
440
441
442	pxor	xmm1,xmm1
443DB	102,65,15,58,15,200,15
444DB	102,69,15,58,15,192,15
445	pxor	xmm7,xmm1
446
447
448	pshufd	xmm0,xmm0,0xFF
449DB	102,15,58,15,192,1
450
451
452
453
454_vpaes_schedule_low_round:
455
456	movdqa	xmm1,xmm7
457	pslldq	xmm7,4
458	pxor	xmm7,xmm1
459	movdqa	xmm1,xmm7
460	pslldq	xmm7,8
461	pxor	xmm7,xmm1
462	pxor	xmm7,XMMWORD[$L$k_s63]
463
464
465	movdqa	xmm1,xmm9
466	pandn	xmm1,xmm0
467	psrld	xmm1,4
468	pand	xmm0,xmm9
469	movdqa	xmm2,xmm11
470DB	102,15,56,0,208
471	pxor	xmm0,xmm1
472	movdqa	xmm3,xmm10
473DB	102,15,56,0,217
474	pxor	xmm3,xmm2
475	movdqa	xmm4,xmm10
476DB	102,15,56,0,224
477	pxor	xmm4,xmm2
478	movdqa	xmm2,xmm10
479DB	102,15,56,0,211
480	pxor	xmm2,xmm0
481	movdqa	xmm3,xmm10
482DB	102,15,56,0,220
483	pxor	xmm3,xmm1
484	movdqa	xmm4,xmm13
485DB	102,15,56,0,226
486	movdqa	xmm0,xmm12
487DB	102,15,56,0,195
488	pxor	xmm0,xmm4
489
490
491	pxor	xmm0,xmm7
492	movdqa	xmm7,xmm0
493	DB	0F3h,0C3h		;repret
494
495
496
497
498
499
500
501
502
503
504
505
506
507ALIGN	16
508_vpaes_schedule_transform:
509
510	movdqa	xmm1,xmm9
511	pandn	xmm1,xmm0
512	psrld	xmm1,4
513	pand	xmm0,xmm9
514	movdqa	xmm2,XMMWORD[r11]
515DB	102,15,56,0,208
516	movdqa	xmm0,XMMWORD[16+r11]
517DB	102,15,56,0,193
518	pxor	xmm0,xmm2
519	DB	0F3h,0C3h		;repret
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547ALIGN	16
548_vpaes_schedule_mangle:
549
550	movdqa	xmm4,xmm0
551	movdqa	xmm5,XMMWORD[$L$k_mc_forward]
552
553
554	add	rdx,16
555	pxor	xmm4,XMMWORD[$L$k_s63]
556DB	102,15,56,0,229
557	movdqa	xmm3,xmm4
558DB	102,15,56,0,229
559	pxor	xmm3,xmm4
560DB	102,15,56,0,229
561	pxor	xmm3,xmm4
562
563$L$schedule_mangle_both:
564	movdqa	xmm1,XMMWORD[r10*1+r8]
565DB	102,15,56,0,217
566	add	r8,-16
567	and	r8,0x30
568	movdqu	XMMWORD[rdx],xmm3
569	DB	0F3h,0C3h		;repret
570
571
572
573
574
575
576global	vpaes_set_encrypt_key
577
578ALIGN	16
579vpaes_set_encrypt_key:
580	mov	QWORD[8+rsp],rdi	;WIN64 prologue
581	mov	QWORD[16+rsp],rsi
582	mov	rax,rsp
583$L$SEH_begin_vpaes_set_encrypt_key:
584	mov	rdi,rcx
585	mov	rsi,rdx
586	mov	rdx,r8
587
588
589
590%ifdef BORINGSSL_DISPATCH_TEST
591EXTERN	BORINGSSL_function_hit
592	mov	BYTE[((BORINGSSL_function_hit+5))],1
593%endif
594
595	lea	rsp,[((-184))+rsp]
596	movaps	XMMWORD[16+rsp],xmm6
597	movaps	XMMWORD[32+rsp],xmm7
598	movaps	XMMWORD[48+rsp],xmm8
599	movaps	XMMWORD[64+rsp],xmm9
600	movaps	XMMWORD[80+rsp],xmm10
601	movaps	XMMWORD[96+rsp],xmm11
602	movaps	XMMWORD[112+rsp],xmm12
603	movaps	XMMWORD[128+rsp],xmm13
604	movaps	XMMWORD[144+rsp],xmm14
605	movaps	XMMWORD[160+rsp],xmm15
606$L$enc_key_body:
607	mov	eax,esi
608	shr	eax,5
609	add	eax,5
610	mov	DWORD[240+rdx],eax
611
612	mov	ecx,0
613	mov	r8d,0x30
614	call	_vpaes_schedule_core
615	movaps	xmm6,XMMWORD[16+rsp]
616	movaps	xmm7,XMMWORD[32+rsp]
617	movaps	xmm8,XMMWORD[48+rsp]
618	movaps	xmm9,XMMWORD[64+rsp]
619	movaps	xmm10,XMMWORD[80+rsp]
620	movaps	xmm11,XMMWORD[96+rsp]
621	movaps	xmm12,XMMWORD[112+rsp]
622	movaps	xmm13,XMMWORD[128+rsp]
623	movaps	xmm14,XMMWORD[144+rsp]
624	movaps	xmm15,XMMWORD[160+rsp]
625	lea	rsp,[184+rsp]
626$L$enc_key_epilogue:
627	xor	eax,eax
628	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
629	mov	rsi,QWORD[16+rsp]
630	DB	0F3h,0C3h		;repret
631
632$L$SEH_end_vpaes_set_encrypt_key:
633
634global	vpaes_encrypt
635
636ALIGN	16
637vpaes_encrypt:
638	mov	QWORD[8+rsp],rdi	;WIN64 prologue
639	mov	QWORD[16+rsp],rsi
640	mov	rax,rsp
641$L$SEH_begin_vpaes_encrypt:
642	mov	rdi,rcx
643	mov	rsi,rdx
644	mov	rdx,r8
645
646
647
648	lea	rsp,[((-184))+rsp]
649	movaps	XMMWORD[16+rsp],xmm6
650	movaps	XMMWORD[32+rsp],xmm7
651	movaps	XMMWORD[48+rsp],xmm8
652	movaps	XMMWORD[64+rsp],xmm9
653	movaps	XMMWORD[80+rsp],xmm10
654	movaps	XMMWORD[96+rsp],xmm11
655	movaps	XMMWORD[112+rsp],xmm12
656	movaps	XMMWORD[128+rsp],xmm13
657	movaps	XMMWORD[144+rsp],xmm14
658	movaps	XMMWORD[160+rsp],xmm15
659$L$enc_body:
660	movdqu	xmm0,XMMWORD[rdi]
661	call	_vpaes_preheat
662	call	_vpaes_encrypt_core
663	movdqu	XMMWORD[rsi],xmm0
664	movaps	xmm6,XMMWORD[16+rsp]
665	movaps	xmm7,XMMWORD[32+rsp]
666	movaps	xmm8,XMMWORD[48+rsp]
667	movaps	xmm9,XMMWORD[64+rsp]
668	movaps	xmm10,XMMWORD[80+rsp]
669	movaps	xmm11,XMMWORD[96+rsp]
670	movaps	xmm12,XMMWORD[112+rsp]
671	movaps	xmm13,XMMWORD[128+rsp]
672	movaps	xmm14,XMMWORD[144+rsp]
673	movaps	xmm15,XMMWORD[160+rsp]
674	lea	rsp,[184+rsp]
675$L$enc_epilogue:
676	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
677	mov	rsi,QWORD[16+rsp]
678	DB	0F3h,0C3h		;repret
679
680$L$SEH_end_vpaes_encrypt:
681global	vpaes_ctr32_encrypt_blocks
682
683ALIGN	16
684vpaes_ctr32_encrypt_blocks:
685	mov	QWORD[8+rsp],rdi	;WIN64 prologue
686	mov	QWORD[16+rsp],rsi
687	mov	rax,rsp
688$L$SEH_begin_vpaes_ctr32_encrypt_blocks:
689	mov	rdi,rcx
690	mov	rsi,rdx
691	mov	rdx,r8
692	mov	rcx,r9
693	mov	r8,QWORD[40+rsp]
694
695
696
697
698	xchg	rdx,rcx
699	test	rcx,rcx
700	jz	NEAR $L$ctr32_abort
701	lea	rsp,[((-184))+rsp]
702	movaps	XMMWORD[16+rsp],xmm6
703	movaps	XMMWORD[32+rsp],xmm7
704	movaps	XMMWORD[48+rsp],xmm8
705	movaps	XMMWORD[64+rsp],xmm9
706	movaps	XMMWORD[80+rsp],xmm10
707	movaps	XMMWORD[96+rsp],xmm11
708	movaps	XMMWORD[112+rsp],xmm12
709	movaps	XMMWORD[128+rsp],xmm13
710	movaps	XMMWORD[144+rsp],xmm14
711	movaps	XMMWORD[160+rsp],xmm15
712$L$ctr32_body:
713	movdqu	xmm0,XMMWORD[r8]
714	movdqa	xmm8,XMMWORD[$L$ctr_add_one]
715	sub	rsi,rdi
716	call	_vpaes_preheat
717	movdqa	xmm6,xmm0
718	pshufb	xmm6,XMMWORD[$L$rev_ctr]
719
720	test	rcx,1
721	jz	NEAR $L$ctr32_prep_loop
722
723
724
725	movdqu	xmm7,XMMWORD[rdi]
726	call	_vpaes_encrypt_core
727	pxor	xmm0,xmm7
728	paddd	xmm6,xmm8
729	movdqu	XMMWORD[rdi*1+rsi],xmm0
730	sub	rcx,1
731	lea	rdi,[16+rdi]
732	jz	NEAR $L$ctr32_done
733
734$L$ctr32_prep_loop:
735
736
737	movdqa	xmm14,xmm6
738	movdqa	xmm15,xmm6
739	paddd	xmm15,xmm8
740
741$L$ctr32_loop:
742	movdqa	xmm1,XMMWORD[$L$rev_ctr]
743	movdqa	xmm0,xmm14
744	movdqa	xmm6,xmm15
745DB	102,15,56,0,193
746DB	102,15,56,0,241
747	call	_vpaes_encrypt_core_2x
748	movdqu	xmm1,XMMWORD[rdi]
749	movdqu	xmm2,XMMWORD[16+rdi]
750	movdqa	xmm3,XMMWORD[$L$ctr_add_two]
751	pxor	xmm0,xmm1
752	pxor	xmm6,xmm2
753	paddd	xmm14,xmm3
754	paddd	xmm15,xmm3
755	movdqu	XMMWORD[rdi*1+rsi],xmm0
756	movdqu	XMMWORD[16+rdi*1+rsi],xmm6
757	sub	rcx,2
758	lea	rdi,[32+rdi]
759	jnz	NEAR $L$ctr32_loop
760
761$L$ctr32_done:
762	movaps	xmm6,XMMWORD[16+rsp]
763	movaps	xmm7,XMMWORD[32+rsp]
764	movaps	xmm8,XMMWORD[48+rsp]
765	movaps	xmm9,XMMWORD[64+rsp]
766	movaps	xmm10,XMMWORD[80+rsp]
767	movaps	xmm11,XMMWORD[96+rsp]
768	movaps	xmm12,XMMWORD[112+rsp]
769	movaps	xmm13,XMMWORD[128+rsp]
770	movaps	xmm14,XMMWORD[144+rsp]
771	movaps	xmm15,XMMWORD[160+rsp]
772	lea	rsp,[184+rsp]
773$L$ctr32_epilogue:
774$L$ctr32_abort:
775	mov	rdi,QWORD[8+rsp]	;WIN64 epilogue
776	mov	rsi,QWORD[16+rsp]
777	DB	0F3h,0C3h		;repret
778
779$L$SEH_end_vpaes_ctr32_encrypt_blocks:
780
781
782
783
784
785
786
787ALIGN	16
788_vpaes_preheat:
789
790	lea	r10,[$L$k_s0F]
791	movdqa	xmm10,XMMWORD[((-32))+r10]
792	movdqa	xmm11,XMMWORD[((-16))+r10]
793	movdqa	xmm9,XMMWORD[r10]
794	movdqa	xmm13,XMMWORD[48+r10]
795	movdqa	xmm12,XMMWORD[64+r10]
796	movdqa	xmm15,XMMWORD[80+r10]
797	movdqa	xmm14,XMMWORD[96+r10]
798	DB	0F3h,0C3h		;repret
799
800
801
802
803
804
805
806
807ALIGN	64
808_vpaes_consts:
809$L$k_inv:
810	DQ	0x0E05060F0D080180,0x040703090A0B0C02
811	DQ	0x01040A060F0B0780,0x030D0E0C02050809
812
813$L$k_s0F:
814	DQ	0x0F0F0F0F0F0F0F0F,0x0F0F0F0F0F0F0F0F
815
816$L$k_ipt:
817	DQ	0xC2B2E8985A2A7000,0xCABAE09052227808
818	DQ	0x4C01307D317C4D00,0xCD80B1FCB0FDCC81
819
820$L$k_sb1:
821	DQ	0xB19BE18FCB503E00,0xA5DF7A6E142AF544
822	DQ	0x3618D415FAE22300,0x3BF7CCC10D2ED9EF
823$L$k_sb2:
824	DQ	0xE27A93C60B712400,0x5EB7E955BC982FCD
825	DQ	0x69EB88400AE12900,0xC2A163C8AB82234A
826$L$k_sbo:
827	DQ	0xD0D26D176FBDC700,0x15AABF7AC502A878
828	DQ	0xCFE474A55FBB6A00,0x8E1E90D1412B35FA
829
830$L$k_mc_forward:
831	DQ	0x0407060500030201,0x0C0F0E0D080B0A09
832	DQ	0x080B0A0904070605,0x000302010C0F0E0D
833	DQ	0x0C0F0E0D080B0A09,0x0407060500030201
834	DQ	0x000302010C0F0E0D,0x080B0A0904070605
835
836$L$k_mc_backward:
837	DQ	0x0605040702010003,0x0E0D0C0F0A09080B
838	DQ	0x020100030E0D0C0F,0x0A09080B06050407
839	DQ	0x0E0D0C0F0A09080B,0x0605040702010003
840	DQ	0x0A09080B06050407,0x020100030E0D0C0F
841
842$L$k_sr:
843	DQ	0x0706050403020100,0x0F0E0D0C0B0A0908
844	DQ	0x030E09040F0A0500,0x0B06010C07020D08
845	DQ	0x0F060D040B020900,0x070E050C030A0108
846	DQ	0x0B0E0104070A0D00,0x0306090C0F020508
847
848$L$k_rcon:
849	DQ	0x1F8391B9AF9DEEB6,0x702A98084D7C7D81
850
851$L$k_s63:
852	DQ	0x5B5B5B5B5B5B5B5B,0x5B5B5B5B5B5B5B5B
853
854$L$k_opt:
855	DQ	0xFF9F4929D6B66000,0xF7974121DEBE6808
856	DQ	0x01EDBD5150BCEC00,0xE10D5DB1B05C0CE0
857
858$L$k_deskew:
859	DQ	0x07E4A34047A4E300,0x1DFEB95A5DBEF91A
860	DQ	0x5F36B5DC83EA6900,0x2841C2ABF49D1E77
861
862
863$L$rev_ctr:
864	DQ	0x0706050403020100,0x0c0d0e0f0b0a0908
865
866
867$L$ctr_add_one:
868	DQ	0x0000000000000000,0x0000000100000000
869$L$ctr_add_two:
870	DQ	0x0000000000000000,0x0000000200000000
871
872DB	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
873DB	111,110,32,65,69,83,32,102,111,114,32,120,56,54,95,54
874DB	52,47,83,83,83,69,51,44,32,77,105,107,101,32,72,97
875DB	109,98,117,114,103,32,40,83,116,97,110,102,111,114,100,32
876DB	85,110,105,118,101,114,115,105,116,121,41,0
877ALIGN	64
878
879EXTERN	__imp_RtlVirtualUnwind
880
881ALIGN	16
882se_handler:
883	push	rsi
884	push	rdi
885	push	rbx
886	push	rbp
887	push	r12
888	push	r13
889	push	r14
890	push	r15
891	pushfq
892	sub	rsp,64
893
894	mov	rax,QWORD[120+r8]
895	mov	rbx,QWORD[248+r8]
896
897	mov	rsi,QWORD[8+r9]
898	mov	r11,QWORD[56+r9]
899
900	mov	r10d,DWORD[r11]
901	lea	r10,[r10*1+rsi]
902	cmp	rbx,r10
903	jb	NEAR $L$in_prologue
904
905	mov	rax,QWORD[152+r8]
906
907	mov	r10d,DWORD[4+r11]
908	lea	r10,[r10*1+rsi]
909	cmp	rbx,r10
910	jae	NEAR $L$in_prologue
911
912	lea	rsi,[16+rax]
913	lea	rdi,[512+r8]
914	mov	ecx,20
915	DD	0xa548f3fc
916	lea	rax,[184+rax]
917
918$L$in_prologue:
919	mov	rdi,QWORD[8+rax]
920	mov	rsi,QWORD[16+rax]
921	mov	QWORD[152+r8],rax
922	mov	QWORD[168+r8],rsi
923	mov	QWORD[176+r8],rdi
924
925	mov	rdi,QWORD[40+r9]
926	mov	rsi,r8
927	mov	ecx,154
928	DD	0xa548f3fc
929
930	mov	rsi,r9
931	xor	rcx,rcx
932	mov	rdx,QWORD[8+rsi]
933	mov	r8,QWORD[rsi]
934	mov	r9,QWORD[16+rsi]
935	mov	r10,QWORD[40+rsi]
936	lea	r11,[56+rsi]
937	lea	r12,[24+rsi]
938	mov	QWORD[32+rsp],r10
939	mov	QWORD[40+rsp],r11
940	mov	QWORD[48+rsp],r12
941	mov	QWORD[56+rsp],rcx
942	call	QWORD[__imp_RtlVirtualUnwind]
943
944	mov	eax,1
945	add	rsp,64
946	popfq
947	pop	r15
948	pop	r14
949	pop	r13
950	pop	r12
951	pop	rbp
952	pop	rbx
953	pop	rdi
954	pop	rsi
955	DB	0F3h,0C3h		;repret
956
957
958section	.pdata rdata align=4
959ALIGN	4
960	DD	$L$SEH_begin_vpaes_set_encrypt_key wrt ..imagebase
961	DD	$L$SEH_end_vpaes_set_encrypt_key wrt ..imagebase
962	DD	$L$SEH_info_vpaes_set_encrypt_key wrt ..imagebase
963
964	DD	$L$SEH_begin_vpaes_encrypt wrt ..imagebase
965	DD	$L$SEH_end_vpaes_encrypt wrt ..imagebase
966	DD	$L$SEH_info_vpaes_encrypt wrt ..imagebase
967	DD	$L$SEH_begin_vpaes_ctr32_encrypt_blocks wrt ..imagebase
968	DD	$L$SEH_end_vpaes_ctr32_encrypt_blocks wrt ..imagebase
969	DD	$L$SEH_info_vpaes_ctr32_encrypt_blocks wrt ..imagebase
970
971section	.xdata rdata align=8
972ALIGN	8
973$L$SEH_info_vpaes_set_encrypt_key:
974DB	9,0,0,0
975	DD	se_handler wrt ..imagebase
976	DD	$L$enc_key_body wrt ..imagebase,$L$enc_key_epilogue wrt ..imagebase
977$L$SEH_info_vpaes_encrypt:
978DB	9,0,0,0
979	DD	se_handler wrt ..imagebase
980	DD	$L$enc_body wrt ..imagebase,$L$enc_epilogue wrt ..imagebase
981$L$SEH_info_vpaes_ctr32_encrypt_blocks:
982DB	9,0,0,0
983	DD	se_handler wrt ..imagebase
984	DD	$L$ctr32_body wrt ..imagebase,$L$ctr32_epilogue wrt ..imagebase
985