• 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
4%include "ring_core_generated/prefix_symbols_nasm.inc"
5%ifidn __OUTPUT_FORMAT__,obj
6section	code	use32 class=code align=64
7%elifidn __OUTPUT_FORMAT__,win32
8$@feat.00 equ 1
9section	.text	code align=64
10%else
11section	.text	code
12%endif
13align	64
14L$_vpaes_consts:
15dd	218628480,235210255,168496130,67568393
16dd	252381056,17041926,33884169,51187212
17dd	252645135,252645135,252645135,252645135
18dd	1512730624,3266504856,1377990664,3401244816
19dd	830229760,1275146365,2969422977,3447763452
20dd	3411033600,2979783055,338359620,2782886510
21dd	4209124096,907596821,221174255,1006095553
22dd	191964160,3799684038,3164090317,1589111125
23dd	182528256,1777043520,2877432650,3265356744
24dd	1874708224,3503451415,3305285752,363511674
25dd	1606117888,3487855781,1093350906,2384367825
26dd	197121,67569157,134941193,202313229
27dd	67569157,134941193,202313229,197121
28dd	134941193,202313229,197121,67569157
29dd	202313229,197121,67569157,134941193
30dd	33619971,100992007,168364043,235736079
31dd	235736079,33619971,100992007,168364043
32dd	168364043,235736079,33619971,100992007
33dd	100992007,168364043,235736079,33619971
34dd	50462976,117835012,185207048,252579084
35dd	252314880,51251460,117574920,184942860
36dd	184682752,252054788,50987272,118359308
37dd	118099200,185467140,251790600,50727180
38dd	2946363062,528716217,1300004225,1881839624
39dd	1532713819,1532713819,1532713819,1532713819
40dd	3602276352,4288629033,3737020424,4153884961
41dd	1354558464,32357713,2958822624,3775749553
42dd	1201988352,132424512,1572796698,503232858
43dd	2213177600,1597421020,4103937655,675398315
44db	86,101,99,116,111,114,32,80,101,114,109,117,116,97,116,105
45db	111,110,32,65,69,83,32,102,111,114,32,120,56,54,47,83
46db	83,83,69,51,44,32,77,105,107,101,32,72,97,109,98,117
47db	114,103,32,40,83,116,97,110,102,111,114,100,32,85,110,105
48db	118,101,114,115,105,116,121,41,0
49align	64
50align	16
51__vpaes_preheat:
52	add	ebp,DWORD [esp]
53	movdqa	xmm7,[ebp-48]
54	movdqa	xmm6,[ebp-16]
55	ret
56align	16
57__vpaes_encrypt_core:
58	mov	ecx,16
59	mov	eax,DWORD [240+edx]
60	movdqa	xmm1,xmm6
61	movdqa	xmm2,[ebp]
62	pandn	xmm1,xmm0
63	pand	xmm0,xmm6
64	movdqu	xmm5,[edx]
65db	102,15,56,0,208
66	movdqa	xmm0,[16+ebp]
67	pxor	xmm2,xmm5
68	psrld	xmm1,4
69	add	edx,16
70db	102,15,56,0,193
71	lea	ebx,[192+ebp]
72	pxor	xmm0,xmm2
73	jmp	NEAR L$000enc_entry
74align	16
75L$001enc_loop:
76	movdqa	xmm4,[32+ebp]
77	movdqa	xmm0,[48+ebp]
78db	102,15,56,0,226
79db	102,15,56,0,195
80	pxor	xmm4,xmm5
81	movdqa	xmm5,[64+ebp]
82	pxor	xmm0,xmm4
83	movdqa	xmm1,[ecx*1+ebx-64]
84db	102,15,56,0,234
85	movdqa	xmm2,[80+ebp]
86	movdqa	xmm4,[ecx*1+ebx]
87db	102,15,56,0,211
88	movdqa	xmm3,xmm0
89	pxor	xmm2,xmm5
90db	102,15,56,0,193
91	add	edx,16
92	pxor	xmm0,xmm2
93db	102,15,56,0,220
94	add	ecx,16
95	pxor	xmm3,xmm0
96db	102,15,56,0,193
97	and	ecx,48
98	sub	eax,1
99	pxor	xmm0,xmm3
100L$000enc_entry:
101	movdqa	xmm1,xmm6
102	movdqa	xmm5,[ebp-32]
103	pandn	xmm1,xmm0
104	psrld	xmm1,4
105	pand	xmm0,xmm6
106db	102,15,56,0,232
107	movdqa	xmm3,xmm7
108	pxor	xmm0,xmm1
109db	102,15,56,0,217
110	movdqa	xmm4,xmm7
111	pxor	xmm3,xmm5
112db	102,15,56,0,224
113	movdqa	xmm2,xmm7
114	pxor	xmm4,xmm5
115db	102,15,56,0,211
116	movdqa	xmm3,xmm7
117	pxor	xmm2,xmm0
118db	102,15,56,0,220
119	movdqu	xmm5,[edx]
120	pxor	xmm3,xmm1
121	jnz	NEAR L$001enc_loop
122	movdqa	xmm4,[96+ebp]
123	movdqa	xmm0,[112+ebp]
124db	102,15,56,0,226
125	pxor	xmm4,xmm5
126db	102,15,56,0,195
127	movdqa	xmm1,[64+ecx*1+ebx]
128	pxor	xmm0,xmm4
129db	102,15,56,0,193
130	ret
131align	16
132__vpaes_schedule_core:
133	add	ebp,DWORD [esp]
134	movdqu	xmm0,[esi]
135	movdqa	xmm2,[320+ebp]
136	movdqa	xmm3,xmm0
137	lea	ebx,[ebp]
138	movdqa	[4+esp],xmm2
139	call	__vpaes_schedule_transform
140	movdqa	xmm7,xmm0
141	test	edi,edi
142	jnz	NEAR L$002schedule_am_decrypting
143	movdqu	[edx],xmm0
144	jmp	NEAR L$003schedule_go
145L$002schedule_am_decrypting:
146	movdqa	xmm1,[256+ecx*1+ebp]
147db	102,15,56,0,217
148	movdqu	[edx],xmm3
149	xor	ecx,48
150L$003schedule_go:
151	cmp	eax,192
152	ja	NEAR L$004schedule_256
153L$005schedule_128:
154	mov	eax,10
155L$006loop_schedule_128:
156	call	__vpaes_schedule_round
157	dec	eax
158	jz	NEAR L$007schedule_mangle_last
159	call	__vpaes_schedule_mangle
160	jmp	NEAR L$006loop_schedule_128
161align	16
162L$004schedule_256:
163	movdqu	xmm0,[16+esi]
164	call	__vpaes_schedule_transform
165	mov	eax,7
166L$008loop_schedule_256:
167	call	__vpaes_schedule_mangle
168	movdqa	xmm6,xmm0
169	call	__vpaes_schedule_round
170	dec	eax
171	jz	NEAR L$007schedule_mangle_last
172	call	__vpaes_schedule_mangle
173	pshufd	xmm0,xmm0,255
174	movdqa	[20+esp],xmm7
175	movdqa	xmm7,xmm6
176	call	L$_vpaes_schedule_low_round
177	movdqa	xmm7,[20+esp]
178	jmp	NEAR L$008loop_schedule_256
179align	16
180L$007schedule_mangle_last:
181	lea	ebx,[384+ebp]
182	test	edi,edi
183	jnz	NEAR L$009schedule_mangle_last_dec
184	movdqa	xmm1,[256+ecx*1+ebp]
185db	102,15,56,0,193
186	lea	ebx,[352+ebp]
187	add	edx,32
188L$009schedule_mangle_last_dec:
189	add	edx,-16
190	pxor	xmm0,[336+ebp]
191	call	__vpaes_schedule_transform
192	movdqu	[edx],xmm0
193	pxor	xmm0,xmm0
194	pxor	xmm1,xmm1
195	pxor	xmm2,xmm2
196	pxor	xmm3,xmm3
197	pxor	xmm4,xmm4
198	pxor	xmm5,xmm5
199	pxor	xmm6,xmm6
200	pxor	xmm7,xmm7
201	ret
202align	16
203__vpaes_schedule_round:
204	movdqa	xmm2,[8+esp]
205	pxor	xmm1,xmm1
206db	102,15,58,15,202,15
207db	102,15,58,15,210,15
208	pxor	xmm7,xmm1
209	pshufd	xmm0,xmm0,255
210db	102,15,58,15,192,1
211	movdqa	[8+esp],xmm2
212L$_vpaes_schedule_low_round:
213	movdqa	xmm1,xmm7
214	pslldq	xmm7,4
215	pxor	xmm7,xmm1
216	movdqa	xmm1,xmm7
217	pslldq	xmm7,8
218	pxor	xmm7,xmm1
219	pxor	xmm7,[336+ebp]
220	movdqa	xmm4,[ebp-16]
221	movdqa	xmm5,[ebp-48]
222	movdqa	xmm1,xmm4
223	pandn	xmm1,xmm0
224	psrld	xmm1,4
225	pand	xmm0,xmm4
226	movdqa	xmm2,[ebp-32]
227db	102,15,56,0,208
228	pxor	xmm0,xmm1
229	movdqa	xmm3,xmm5
230db	102,15,56,0,217
231	pxor	xmm3,xmm2
232	movdqa	xmm4,xmm5
233db	102,15,56,0,224
234	pxor	xmm4,xmm2
235	movdqa	xmm2,xmm5
236db	102,15,56,0,211
237	pxor	xmm2,xmm0
238	movdqa	xmm3,xmm5
239db	102,15,56,0,220
240	pxor	xmm3,xmm1
241	movdqa	xmm4,[32+ebp]
242db	102,15,56,0,226
243	movdqa	xmm0,[48+ebp]
244db	102,15,56,0,195
245	pxor	xmm0,xmm4
246	pxor	xmm0,xmm7
247	movdqa	xmm7,xmm0
248	ret
249align	16
250__vpaes_schedule_transform:
251	movdqa	xmm2,[ebp-16]
252	movdqa	xmm1,xmm2
253	pandn	xmm1,xmm0
254	psrld	xmm1,4
255	pand	xmm0,xmm2
256	movdqa	xmm2,[ebx]
257db	102,15,56,0,208
258	movdqa	xmm0,[16+ebx]
259db	102,15,56,0,193
260	pxor	xmm0,xmm2
261	ret
262align	16
263__vpaes_schedule_mangle:
264	movdqa	xmm4,xmm0
265	movdqa	xmm5,[128+ebp]
266	test	edi,edi
267	jnz	NEAR L$010schedule_mangle_dec
268	add	edx,16
269	pxor	xmm4,[336+ebp]
270db	102,15,56,0,229
271	movdqa	xmm3,xmm4
272db	102,15,56,0,229
273	pxor	xmm3,xmm4
274db	102,15,56,0,229
275	pxor	xmm3,xmm4
276	jmp	NEAR L$011schedule_mangle_both
277align	16
278L$010schedule_mangle_dec:
279	movdqa	xmm2,[ebp-16]
280	lea	esi,[ebp]
281	movdqa	xmm1,xmm2
282	pandn	xmm1,xmm4
283	psrld	xmm1,4
284	pand	xmm4,xmm2
285	movdqa	xmm2,[esi]
286db	102,15,56,0,212
287	movdqa	xmm3,[16+esi]
288db	102,15,56,0,217
289	pxor	xmm3,xmm2
290db	102,15,56,0,221
291	movdqa	xmm2,[32+esi]
292db	102,15,56,0,212
293	pxor	xmm2,xmm3
294	movdqa	xmm3,[48+esi]
295db	102,15,56,0,217
296	pxor	xmm3,xmm2
297db	102,15,56,0,221
298	movdqa	xmm2,[64+esi]
299db	102,15,56,0,212
300	pxor	xmm2,xmm3
301	movdqa	xmm3,[80+esi]
302db	102,15,56,0,217
303	pxor	xmm3,xmm2
304db	102,15,56,0,221
305	movdqa	xmm2,[96+esi]
306db	102,15,56,0,212
307	pxor	xmm2,xmm3
308	movdqa	xmm3,[112+esi]
309db	102,15,56,0,217
310	pxor	xmm3,xmm2
311	add	edx,-16
312L$011schedule_mangle_both:
313	movdqa	xmm1,[256+ecx*1+ebp]
314db	102,15,56,0,217
315	add	ecx,-16
316	and	ecx,48
317	movdqu	[edx],xmm3
318	ret
319global	_vpaes_set_encrypt_key
320align	16
321_vpaes_set_encrypt_key:
322L$_vpaes_set_encrypt_key_begin:
323	push	ebp
324	push	ebx
325	push	esi
326	push	edi
327	mov	esi,DWORD [20+esp]
328	lea	ebx,[esp-56]
329	mov	eax,DWORD [24+esp]
330	and	ebx,-16
331	mov	edx,DWORD [28+esp]
332	xchg	ebx,esp
333	mov	DWORD [48+esp],ebx
334	mov	ebx,eax
335	shr	ebx,5
336	add	ebx,5
337	mov	DWORD [240+edx],ebx
338	mov	ecx,48
339	mov	edi,0
340	lea	ebp,[(L$_vpaes_consts+0x30-L$012pic_point)]
341	call	__vpaes_schedule_core
342L$012pic_point:
343	mov	esp,DWORD [48+esp]
344	xor	eax,eax
345	pop	edi
346	pop	esi
347	pop	ebx
348	pop	ebp
349	ret
350global	_vpaes_encrypt
351align	16
352_vpaes_encrypt:
353L$_vpaes_encrypt_begin:
354	push	ebp
355	push	ebx
356	push	esi
357	push	edi
358	lea	ebp,[(L$_vpaes_consts+0x30-L$013pic_point)]
359	call	__vpaes_preheat
360L$013pic_point:
361	mov	esi,DWORD [20+esp]
362	lea	ebx,[esp-56]
363	mov	edi,DWORD [24+esp]
364	and	ebx,-16
365	mov	edx,DWORD [28+esp]
366	xchg	ebx,esp
367	mov	DWORD [48+esp],ebx
368	movdqu	xmm0,[esi]
369	call	__vpaes_encrypt_core
370	movdqu	[edi],xmm0
371	mov	esp,DWORD [48+esp]
372	pop	edi
373	pop	esi
374	pop	ebx
375	pop	ebp
376	ret
377