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