• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1%ifidn __OUTPUT_FORMAT__,obj
2section	code	use32 class=code align=64
3%elifidn __OUTPUT_FORMAT__,win32
4$@feat.00 equ 1
5section	.text	code align=64
6%else
7section	.text	code
8%endif
9align	16
10__x86_AES_encrypt_compact:
11	mov	DWORD [20+esp],edi
12	xor	eax,DWORD [edi]
13	xor	ebx,DWORD [4+edi]
14	xor	ecx,DWORD [8+edi]
15	xor	edx,DWORD [12+edi]
16	mov	esi,DWORD [240+edi]
17	lea	esi,[esi*1+esi-2]
18	lea	esi,[esi*8+edi]
19	mov	DWORD [24+esp],esi
20	mov	edi,DWORD [ebp-128]
21	mov	esi,DWORD [ebp-96]
22	mov	edi,DWORD [ebp-64]
23	mov	esi,DWORD [ebp-32]
24	mov	edi,DWORD [ebp]
25	mov	esi,DWORD [32+ebp]
26	mov	edi,DWORD [64+ebp]
27	mov	esi,DWORD [96+ebp]
28align	16
29L$000loop:
30	mov	esi,eax
31	and	esi,255
32	movzx	esi,BYTE [esi*1+ebp-128]
33	movzx	edi,bh
34	movzx	edi,BYTE [edi*1+ebp-128]
35	shl	edi,8
36	xor	esi,edi
37	mov	edi,ecx
38	shr	edi,16
39	and	edi,255
40	movzx	edi,BYTE [edi*1+ebp-128]
41	shl	edi,16
42	xor	esi,edi
43	mov	edi,edx
44	shr	edi,24
45	movzx	edi,BYTE [edi*1+ebp-128]
46	shl	edi,24
47	xor	esi,edi
48	mov	DWORD [4+esp],esi
49	mov	esi,ebx
50	and	esi,255
51	shr	ebx,16
52	movzx	esi,BYTE [esi*1+ebp-128]
53	movzx	edi,ch
54	movzx	edi,BYTE [edi*1+ebp-128]
55	shl	edi,8
56	xor	esi,edi
57	mov	edi,edx
58	shr	edi,16
59	and	edi,255
60	movzx	edi,BYTE [edi*1+ebp-128]
61	shl	edi,16
62	xor	esi,edi
63	mov	edi,eax
64	shr	edi,24
65	movzx	edi,BYTE [edi*1+ebp-128]
66	shl	edi,24
67	xor	esi,edi
68	mov	DWORD [8+esp],esi
69	mov	esi,ecx
70	and	esi,255
71	shr	ecx,24
72	movzx	esi,BYTE [esi*1+ebp-128]
73	movzx	edi,dh
74	movzx	edi,BYTE [edi*1+ebp-128]
75	shl	edi,8
76	xor	esi,edi
77	mov	edi,eax
78	shr	edi,16
79	and	edx,255
80	and	edi,255
81	movzx	edi,BYTE [edi*1+ebp-128]
82	shl	edi,16
83	xor	esi,edi
84	movzx	edi,bh
85	movzx	edi,BYTE [edi*1+ebp-128]
86	shl	edi,24
87	xor	esi,edi
88	and	edx,255
89	movzx	edx,BYTE [edx*1+ebp-128]
90	movzx	eax,ah
91	movzx	eax,BYTE [eax*1+ebp-128]
92	shl	eax,8
93	xor	edx,eax
94	mov	eax,DWORD [4+esp]
95	and	ebx,255
96	movzx	ebx,BYTE [ebx*1+ebp-128]
97	shl	ebx,16
98	xor	edx,ebx
99	mov	ebx,DWORD [8+esp]
100	movzx	ecx,BYTE [ecx*1+ebp-128]
101	shl	ecx,24
102	xor	edx,ecx
103	mov	ecx,esi
104	mov	ebp,2155905152
105	and	ebp,ecx
106	lea	edi,[ecx*1+ecx]
107	mov	esi,ebp
108	shr	ebp,7
109	and	edi,4278124286
110	sub	esi,ebp
111	mov	ebp,ecx
112	and	esi,454761243
113	ror	ebp,16
114	xor	esi,edi
115	mov	edi,ecx
116	xor	ecx,esi
117	ror	edi,24
118	xor	esi,ebp
119	rol	ecx,24
120	xor	esi,edi
121	mov	ebp,2155905152
122	xor	ecx,esi
123	and	ebp,edx
124	lea	edi,[edx*1+edx]
125	mov	esi,ebp
126	shr	ebp,7
127	and	edi,4278124286
128	sub	esi,ebp
129	mov	ebp,edx
130	and	esi,454761243
131	ror	ebp,16
132	xor	esi,edi
133	mov	edi,edx
134	xor	edx,esi
135	ror	edi,24
136	xor	esi,ebp
137	rol	edx,24
138	xor	esi,edi
139	mov	ebp,2155905152
140	xor	edx,esi
141	and	ebp,eax
142	lea	edi,[eax*1+eax]
143	mov	esi,ebp
144	shr	ebp,7
145	and	edi,4278124286
146	sub	esi,ebp
147	mov	ebp,eax
148	and	esi,454761243
149	ror	ebp,16
150	xor	esi,edi
151	mov	edi,eax
152	xor	eax,esi
153	ror	edi,24
154	xor	esi,ebp
155	rol	eax,24
156	xor	esi,edi
157	mov	ebp,2155905152
158	xor	eax,esi
159	and	ebp,ebx
160	lea	edi,[ebx*1+ebx]
161	mov	esi,ebp
162	shr	ebp,7
163	and	edi,4278124286
164	sub	esi,ebp
165	mov	ebp,ebx
166	and	esi,454761243
167	ror	ebp,16
168	xor	esi,edi
169	mov	edi,ebx
170	xor	ebx,esi
171	ror	edi,24
172	xor	esi,ebp
173	rol	ebx,24
174	xor	esi,edi
175	xor	ebx,esi
176	mov	edi,DWORD [20+esp]
177	mov	ebp,DWORD [28+esp]
178	add	edi,16
179	xor	eax,DWORD [edi]
180	xor	ebx,DWORD [4+edi]
181	xor	ecx,DWORD [8+edi]
182	xor	edx,DWORD [12+edi]
183	cmp	edi,DWORD [24+esp]
184	mov	DWORD [20+esp],edi
185	jb	NEAR L$000loop
186	mov	esi,eax
187	and	esi,255
188	movzx	esi,BYTE [esi*1+ebp-128]
189	movzx	edi,bh
190	movzx	edi,BYTE [edi*1+ebp-128]
191	shl	edi,8
192	xor	esi,edi
193	mov	edi,ecx
194	shr	edi,16
195	and	edi,255
196	movzx	edi,BYTE [edi*1+ebp-128]
197	shl	edi,16
198	xor	esi,edi
199	mov	edi,edx
200	shr	edi,24
201	movzx	edi,BYTE [edi*1+ebp-128]
202	shl	edi,24
203	xor	esi,edi
204	mov	DWORD [4+esp],esi
205	mov	esi,ebx
206	and	esi,255
207	shr	ebx,16
208	movzx	esi,BYTE [esi*1+ebp-128]
209	movzx	edi,ch
210	movzx	edi,BYTE [edi*1+ebp-128]
211	shl	edi,8
212	xor	esi,edi
213	mov	edi,edx
214	shr	edi,16
215	and	edi,255
216	movzx	edi,BYTE [edi*1+ebp-128]
217	shl	edi,16
218	xor	esi,edi
219	mov	edi,eax
220	shr	edi,24
221	movzx	edi,BYTE [edi*1+ebp-128]
222	shl	edi,24
223	xor	esi,edi
224	mov	DWORD [8+esp],esi
225	mov	esi,ecx
226	and	esi,255
227	shr	ecx,24
228	movzx	esi,BYTE [esi*1+ebp-128]
229	movzx	edi,dh
230	movzx	edi,BYTE [edi*1+ebp-128]
231	shl	edi,8
232	xor	esi,edi
233	mov	edi,eax
234	shr	edi,16
235	and	edx,255
236	and	edi,255
237	movzx	edi,BYTE [edi*1+ebp-128]
238	shl	edi,16
239	xor	esi,edi
240	movzx	edi,bh
241	movzx	edi,BYTE [edi*1+ebp-128]
242	shl	edi,24
243	xor	esi,edi
244	mov	edi,DWORD [20+esp]
245	and	edx,255
246	movzx	edx,BYTE [edx*1+ebp-128]
247	movzx	eax,ah
248	movzx	eax,BYTE [eax*1+ebp-128]
249	shl	eax,8
250	xor	edx,eax
251	mov	eax,DWORD [4+esp]
252	and	ebx,255
253	movzx	ebx,BYTE [ebx*1+ebp-128]
254	shl	ebx,16
255	xor	edx,ebx
256	mov	ebx,DWORD [8+esp]
257	movzx	ecx,BYTE [ecx*1+ebp-128]
258	shl	ecx,24
259	xor	edx,ecx
260	mov	ecx,esi
261	xor	eax,DWORD [16+edi]
262	xor	ebx,DWORD [20+edi]
263	xor	ecx,DWORD [24+edi]
264	xor	edx,DWORD [28+edi]
265	ret
266align	16
267__sse_AES_encrypt_compact:
268	pxor	mm0,[edi]
269	pxor	mm4,[8+edi]
270	mov	esi,DWORD [240+edi]
271	lea	esi,[esi*1+esi-2]
272	lea	esi,[esi*8+edi]
273	mov	DWORD [24+esp],esi
274	mov	eax,454761243
275	mov	DWORD [8+esp],eax
276	mov	DWORD [12+esp],eax
277	mov	eax,DWORD [ebp-128]
278	mov	ebx,DWORD [ebp-96]
279	mov	ecx,DWORD [ebp-64]
280	mov	edx,DWORD [ebp-32]
281	mov	eax,DWORD [ebp]
282	mov	ebx,DWORD [32+ebp]
283	mov	ecx,DWORD [64+ebp]
284	mov	edx,DWORD [96+ebp]
285align	16
286L$001loop:
287	pshufw	mm1,mm0,8
288	pshufw	mm5,mm4,13
289	movd	eax,mm1
290	movd	ebx,mm5
291	mov	DWORD [20+esp],edi
292	movzx	esi,al
293	movzx	edx,ah
294	pshufw	mm2,mm0,13
295	movzx	ecx,BYTE [esi*1+ebp-128]
296	movzx	edi,bl
297	movzx	edx,BYTE [edx*1+ebp-128]
298	shr	eax,16
299	shl	edx,8
300	movzx	esi,BYTE [edi*1+ebp-128]
301	movzx	edi,bh
302	shl	esi,16
303	pshufw	mm6,mm4,8
304	or	ecx,esi
305	movzx	esi,BYTE [edi*1+ebp-128]
306	movzx	edi,ah
307	shl	esi,24
308	shr	ebx,16
309	or	edx,esi
310	movzx	esi,BYTE [edi*1+ebp-128]
311	movzx	edi,bh
312	shl	esi,8
313	or	ecx,esi
314	movzx	esi,BYTE [edi*1+ebp-128]
315	movzx	edi,al
316	shl	esi,24
317	or	ecx,esi
318	movzx	esi,BYTE [edi*1+ebp-128]
319	movzx	edi,bl
320	movd	eax,mm2
321	movd	mm0,ecx
322	movzx	ecx,BYTE [edi*1+ebp-128]
323	movzx	edi,ah
324	shl	ecx,16
325	movd	ebx,mm6
326	or	ecx,esi
327	movzx	esi,BYTE [edi*1+ebp-128]
328	movzx	edi,bh
329	shl	esi,24
330	or	ecx,esi
331	movzx	esi,BYTE [edi*1+ebp-128]
332	movzx	edi,bl
333	shl	esi,8
334	shr	ebx,16
335	or	ecx,esi
336	movzx	esi,BYTE [edi*1+ebp-128]
337	movzx	edi,al
338	shr	eax,16
339	movd	mm1,ecx
340	movzx	ecx,BYTE [edi*1+ebp-128]
341	movzx	edi,ah
342	shl	ecx,16
343	and	eax,255
344	or	ecx,esi
345	punpckldq	mm0,mm1
346	movzx	esi,BYTE [edi*1+ebp-128]
347	movzx	edi,bh
348	shl	esi,24
349	and	ebx,255
350	movzx	eax,BYTE [eax*1+ebp-128]
351	or	ecx,esi
352	shl	eax,16
353	movzx	esi,BYTE [edi*1+ebp-128]
354	or	edx,eax
355	shl	esi,8
356	movzx	ebx,BYTE [ebx*1+ebp-128]
357	or	ecx,esi
358	or	edx,ebx
359	mov	edi,DWORD [20+esp]
360	movd	mm4,ecx
361	movd	mm5,edx
362	punpckldq	mm4,mm5
363	add	edi,16
364	cmp	edi,DWORD [24+esp]
365	ja	NEAR L$002out
366	movq	mm2,[8+esp]
367	pxor	mm3,mm3
368	pxor	mm7,mm7
369	movq	mm1,mm0
370	movq	mm5,mm4
371	pcmpgtb	mm3,mm0
372	pcmpgtb	mm7,mm4
373	pand	mm3,mm2
374	pand	mm7,mm2
375	pshufw	mm2,mm0,177
376	pshufw	mm6,mm4,177
377	paddb	mm0,mm0
378	paddb	mm4,mm4
379	pxor	mm0,mm3
380	pxor	mm4,mm7
381	pshufw	mm3,mm2,177
382	pshufw	mm7,mm6,177
383	pxor	mm1,mm0
384	pxor	mm5,mm4
385	pxor	mm0,mm2
386	pxor	mm4,mm6
387	movq	mm2,mm3
388	movq	mm6,mm7
389	pslld	mm3,8
390	pslld	mm7,8
391	psrld	mm2,24
392	psrld	mm6,24
393	pxor	mm0,mm3
394	pxor	mm4,mm7
395	pxor	mm0,mm2
396	pxor	mm4,mm6
397	movq	mm3,mm1
398	movq	mm7,mm5
399	movq	mm2,[edi]
400	movq	mm6,[8+edi]
401	psrld	mm1,8
402	psrld	mm5,8
403	mov	eax,DWORD [ebp-128]
404	pslld	mm3,24
405	pslld	mm7,24
406	mov	ebx,DWORD [ebp-64]
407	pxor	mm0,mm1
408	pxor	mm4,mm5
409	mov	ecx,DWORD [ebp]
410	pxor	mm0,mm3
411	pxor	mm4,mm7
412	mov	edx,DWORD [64+ebp]
413	pxor	mm0,mm2
414	pxor	mm4,mm6
415	jmp	NEAR L$001loop
416align	16
417L$002out:
418	pxor	mm0,[edi]
419	pxor	mm4,[8+edi]
420	ret
421align	16
422__x86_AES_encrypt:
423	mov	DWORD [20+esp],edi
424	xor	eax,DWORD [edi]
425	xor	ebx,DWORD [4+edi]
426	xor	ecx,DWORD [8+edi]
427	xor	edx,DWORD [12+edi]
428	mov	esi,DWORD [240+edi]
429	lea	esi,[esi*1+esi-2]
430	lea	esi,[esi*8+edi]
431	mov	DWORD [24+esp],esi
432align	16
433L$003loop:
434	mov	esi,eax
435	and	esi,255
436	mov	esi,DWORD [esi*8+ebp]
437	movzx	edi,bh
438	xor	esi,DWORD [3+edi*8+ebp]
439	mov	edi,ecx
440	shr	edi,16
441	and	edi,255
442	xor	esi,DWORD [2+edi*8+ebp]
443	mov	edi,edx
444	shr	edi,24
445	xor	esi,DWORD [1+edi*8+ebp]
446	mov	DWORD [4+esp],esi
447	mov	esi,ebx
448	and	esi,255
449	shr	ebx,16
450	mov	esi,DWORD [esi*8+ebp]
451	movzx	edi,ch
452	xor	esi,DWORD [3+edi*8+ebp]
453	mov	edi,edx
454	shr	edi,16
455	and	edi,255
456	xor	esi,DWORD [2+edi*8+ebp]
457	mov	edi,eax
458	shr	edi,24
459	xor	esi,DWORD [1+edi*8+ebp]
460	mov	DWORD [8+esp],esi
461	mov	esi,ecx
462	and	esi,255
463	shr	ecx,24
464	mov	esi,DWORD [esi*8+ebp]
465	movzx	edi,dh
466	xor	esi,DWORD [3+edi*8+ebp]
467	mov	edi,eax
468	shr	edi,16
469	and	edx,255
470	and	edi,255
471	xor	esi,DWORD [2+edi*8+ebp]
472	movzx	edi,bh
473	xor	esi,DWORD [1+edi*8+ebp]
474	mov	edi,DWORD [20+esp]
475	mov	edx,DWORD [edx*8+ebp]
476	movzx	eax,ah
477	xor	edx,DWORD [3+eax*8+ebp]
478	mov	eax,DWORD [4+esp]
479	and	ebx,255
480	xor	edx,DWORD [2+ebx*8+ebp]
481	mov	ebx,DWORD [8+esp]
482	xor	edx,DWORD [1+ecx*8+ebp]
483	mov	ecx,esi
484	add	edi,16
485	xor	eax,DWORD [edi]
486	xor	ebx,DWORD [4+edi]
487	xor	ecx,DWORD [8+edi]
488	xor	edx,DWORD [12+edi]
489	cmp	edi,DWORD [24+esp]
490	mov	DWORD [20+esp],edi
491	jb	NEAR L$003loop
492	mov	esi,eax
493	and	esi,255
494	mov	esi,DWORD [2+esi*8+ebp]
495	and	esi,255
496	movzx	edi,bh
497	mov	edi,DWORD [edi*8+ebp]
498	and	edi,65280
499	xor	esi,edi
500	mov	edi,ecx
501	shr	edi,16
502	and	edi,255
503	mov	edi,DWORD [edi*8+ebp]
504	and	edi,16711680
505	xor	esi,edi
506	mov	edi,edx
507	shr	edi,24
508	mov	edi,DWORD [2+edi*8+ebp]
509	and	edi,4278190080
510	xor	esi,edi
511	mov	DWORD [4+esp],esi
512	mov	esi,ebx
513	and	esi,255
514	shr	ebx,16
515	mov	esi,DWORD [2+esi*8+ebp]
516	and	esi,255
517	movzx	edi,ch
518	mov	edi,DWORD [edi*8+ebp]
519	and	edi,65280
520	xor	esi,edi
521	mov	edi,edx
522	shr	edi,16
523	and	edi,255
524	mov	edi,DWORD [edi*8+ebp]
525	and	edi,16711680
526	xor	esi,edi
527	mov	edi,eax
528	shr	edi,24
529	mov	edi,DWORD [2+edi*8+ebp]
530	and	edi,4278190080
531	xor	esi,edi
532	mov	DWORD [8+esp],esi
533	mov	esi,ecx
534	and	esi,255
535	shr	ecx,24
536	mov	esi,DWORD [2+esi*8+ebp]
537	and	esi,255
538	movzx	edi,dh
539	mov	edi,DWORD [edi*8+ebp]
540	and	edi,65280
541	xor	esi,edi
542	mov	edi,eax
543	shr	edi,16
544	and	edx,255
545	and	edi,255
546	mov	edi,DWORD [edi*8+ebp]
547	and	edi,16711680
548	xor	esi,edi
549	movzx	edi,bh
550	mov	edi,DWORD [2+edi*8+ebp]
551	and	edi,4278190080
552	xor	esi,edi
553	mov	edi,DWORD [20+esp]
554	and	edx,255
555	mov	edx,DWORD [2+edx*8+ebp]
556	and	edx,255
557	movzx	eax,ah
558	mov	eax,DWORD [eax*8+ebp]
559	and	eax,65280
560	xor	edx,eax
561	mov	eax,DWORD [4+esp]
562	and	ebx,255
563	mov	ebx,DWORD [ebx*8+ebp]
564	and	ebx,16711680
565	xor	edx,ebx
566	mov	ebx,DWORD [8+esp]
567	mov	ecx,DWORD [2+ecx*8+ebp]
568	and	ecx,4278190080
569	xor	edx,ecx
570	mov	ecx,esi
571	add	edi,16
572	xor	eax,DWORD [edi]
573	xor	ebx,DWORD [4+edi]
574	xor	ecx,DWORD [8+edi]
575	xor	edx,DWORD [12+edi]
576	ret
577align	64
578L$AES_Te:
579dd	2774754246,2774754246
580dd	2222750968,2222750968
581dd	2574743534,2574743534
582dd	2373680118,2373680118
583dd	234025727,234025727
584dd	3177933782,3177933782
585dd	2976870366,2976870366
586dd	1422247313,1422247313
587dd	1345335392,1345335392
588dd	50397442,50397442
589dd	2842126286,2842126286
590dd	2099981142,2099981142
591dd	436141799,436141799
592dd	1658312629,1658312629
593dd	3870010189,3870010189
594dd	2591454956,2591454956
595dd	1170918031,1170918031
596dd	2642575903,2642575903
597dd	1086966153,1086966153
598dd	2273148410,2273148410
599dd	368769775,368769775
600dd	3948501426,3948501426
601dd	3376891790,3376891790
602dd	200339707,200339707
603dd	3970805057,3970805057
604dd	1742001331,1742001331
605dd	4255294047,4255294047
606dd	3937382213,3937382213
607dd	3214711843,3214711843
608dd	4154762323,4154762323
609dd	2524082916,2524082916
610dd	1539358875,1539358875
611dd	3266819957,3266819957
612dd	486407649,486407649
613dd	2928907069,2928907069
614dd	1780885068,1780885068
615dd	1513502316,1513502316
616dd	1094664062,1094664062
617dd	49805301,49805301
618dd	1338821763,1338821763
619dd	1546925160,1546925160
620dd	4104496465,4104496465
621dd	887481809,887481809
622dd	150073849,150073849
623dd	2473685474,2473685474
624dd	1943591083,1943591083
625dd	1395732834,1395732834
626dd	1058346282,1058346282
627dd	201589768,201589768
628dd	1388824469,1388824469
629dd	1696801606,1696801606
630dd	1589887901,1589887901
631dd	672667696,672667696
632dd	2711000631,2711000631
633dd	251987210,251987210
634dd	3046808111,3046808111
635dd	151455502,151455502
636dd	907153956,907153956
637dd	2608889883,2608889883
638dd	1038279391,1038279391
639dd	652995533,652995533
640dd	1764173646,1764173646
641dd	3451040383,3451040383
642dd	2675275242,2675275242
643dd	453576978,453576978
644dd	2659418909,2659418909
645dd	1949051992,1949051992
646dd	773462580,773462580
647dd	756751158,756751158
648dd	2993581788,2993581788
649dd	3998898868,3998898868
650dd	4221608027,4221608027
651dd	4132590244,4132590244
652dd	1295727478,1295727478
653dd	1641469623,1641469623
654dd	3467883389,3467883389
655dd	2066295122,2066295122
656dd	1055122397,1055122397
657dd	1898917726,1898917726
658dd	2542044179,2542044179
659dd	4115878822,4115878822
660dd	1758581177,1758581177
661dd	0,0
662dd	753790401,753790401
663dd	1612718144,1612718144
664dd	536673507,536673507
665dd	3367088505,3367088505
666dd	3982187446,3982187446
667dd	3194645204,3194645204
668dd	1187761037,1187761037
669dd	3653156455,3653156455
670dd	1262041458,1262041458
671dd	3729410708,3729410708
672dd	3561770136,3561770136
673dd	3898103984,3898103984
674dd	1255133061,1255133061
675dd	1808847035,1808847035
676dd	720367557,720367557
677dd	3853167183,3853167183
678dd	385612781,385612781
679dd	3309519750,3309519750
680dd	3612167578,3612167578
681dd	1429418854,1429418854
682dd	2491778321,2491778321
683dd	3477423498,3477423498
684dd	284817897,284817897
685dd	100794884,100794884
686dd	2172616702,2172616702
687dd	4031795360,4031795360
688dd	1144798328,1144798328
689dd	3131023141,3131023141
690dd	3819481163,3819481163
691dd	4082192802,4082192802
692dd	4272137053,4272137053
693dd	3225436288,3225436288
694dd	2324664069,2324664069
695dd	2912064063,2912064063
696dd	3164445985,3164445985
697dd	1211644016,1211644016
698dd	83228145,83228145
699dd	3753688163,3753688163
700dd	3249976951,3249976951
701dd	1977277103,1977277103
702dd	1663115586,1663115586
703dd	806359072,806359072
704dd	452984805,452984805
705dd	250868733,250868733
706dd	1842533055,1842533055
707dd	1288555905,1288555905
708dd	336333848,336333848
709dd	890442534,890442534
710dd	804056259,804056259
711dd	3781124030,3781124030
712dd	2727843637,2727843637
713dd	3427026056,3427026056
714dd	957814574,957814574
715dd	1472513171,1472513171
716dd	4071073621,4071073621
717dd	2189328124,2189328124
718dd	1195195770,1195195770
719dd	2892260552,2892260552
720dd	3881655738,3881655738
721dd	723065138,723065138
722dd	2507371494,2507371494
723dd	2690670784,2690670784
724dd	2558624025,2558624025
725dd	3511635870,3511635870
726dd	2145180835,2145180835
727dd	1713513028,1713513028
728dd	2116692564,2116692564
729dd	2878378043,2878378043
730dd	2206763019,2206763019
731dd	3393603212,3393603212
732dd	703524551,703524551
733dd	3552098411,3552098411
734dd	1007948840,1007948840
735dd	2044649127,2044649127
736dd	3797835452,3797835452
737dd	487262998,487262998
738dd	1994120109,1994120109
739dd	1004593371,1004593371
740dd	1446130276,1446130276
741dd	1312438900,1312438900
742dd	503974420,503974420
743dd	3679013266,3679013266
744dd	168166924,168166924
745dd	1814307912,1814307912
746dd	3831258296,3831258296
747dd	1573044895,1573044895
748dd	1859376061,1859376061
749dd	4021070915,4021070915
750dd	2791465668,2791465668
751dd	2828112185,2828112185
752dd	2761266481,2761266481
753dd	937747667,937747667
754dd	2339994098,2339994098
755dd	854058965,854058965
756dd	1137232011,1137232011
757dd	1496790894,1496790894
758dd	3077402074,3077402074
759dd	2358086913,2358086913
760dd	1691735473,1691735473
761dd	3528347292,3528347292
762dd	3769215305,3769215305
763dd	3027004632,3027004632
764dd	4199962284,4199962284
765dd	133494003,133494003
766dd	636152527,636152527
767dd	2942657994,2942657994
768dd	2390391540,2390391540
769dd	3920539207,3920539207
770dd	403179536,403179536
771dd	3585784431,3585784431
772dd	2289596656,2289596656
773dd	1864705354,1864705354
774dd	1915629148,1915629148
775dd	605822008,605822008
776dd	4054230615,4054230615
777dd	3350508659,3350508659
778dd	1371981463,1371981463
779dd	602466507,602466507
780dd	2094914977,2094914977
781dd	2624877800,2624877800
782dd	555687742,555687742
783dd	3712699286,3712699286
784dd	3703422305,3703422305
785dd	2257292045,2257292045
786dd	2240449039,2240449039
787dd	2423288032,2423288032
788dd	1111375484,1111375484
789dd	3300242801,3300242801
790dd	2858837708,2858837708
791dd	3628615824,3628615824
792dd	84083462,84083462
793dd	32962295,32962295
794dd	302911004,302911004
795dd	2741068226,2741068226
796dd	1597322602,1597322602
797dd	4183250862,4183250862
798dd	3501832553,3501832553
799dd	2441512471,2441512471
800dd	1489093017,1489093017
801dd	656219450,656219450
802dd	3114180135,3114180135
803dd	954327513,954327513
804dd	335083755,335083755
805dd	3013122091,3013122091
806dd	856756514,856756514
807dd	3144247762,3144247762
808dd	1893325225,1893325225
809dd	2307821063,2307821063
810dd	2811532339,2811532339
811dd	3063651117,3063651117
812dd	572399164,572399164
813dd	2458355477,2458355477
814dd	552200649,552200649
815dd	1238290055,1238290055
816dd	4283782570,4283782570
817dd	2015897680,2015897680
818dd	2061492133,2061492133
819dd	2408352771,2408352771
820dd	4171342169,4171342169
821dd	2156497161,2156497161
822dd	386731290,386731290
823dd	3669999461,3669999461
824dd	837215959,837215959
825dd	3326231172,3326231172
826dd	3093850320,3093850320
827dd	3275833730,3275833730
828dd	2962856233,2962856233
829dd	1999449434,1999449434
830dd	286199582,286199582
831dd	3417354363,3417354363
832dd	4233385128,4233385128
833dd	3602627437,3602627437
834dd	974525996,974525996
835db	99,124,119,123,242,107,111,197
836db	48,1,103,43,254,215,171,118
837db	202,130,201,125,250,89,71,240
838db	173,212,162,175,156,164,114,192
839db	183,253,147,38,54,63,247,204
840db	52,165,229,241,113,216,49,21
841db	4,199,35,195,24,150,5,154
842db	7,18,128,226,235,39,178,117
843db	9,131,44,26,27,110,90,160
844db	82,59,214,179,41,227,47,132
845db	83,209,0,237,32,252,177,91
846db	106,203,190,57,74,76,88,207
847db	208,239,170,251,67,77,51,133
848db	69,249,2,127,80,60,159,168
849db	81,163,64,143,146,157,56,245
850db	188,182,218,33,16,255,243,210
851db	205,12,19,236,95,151,68,23
852db	196,167,126,61,100,93,25,115
853db	96,129,79,220,34,42,144,136
854db	70,238,184,20,222,94,11,219
855db	224,50,58,10,73,6,36,92
856db	194,211,172,98,145,149,228,121
857db	231,200,55,109,141,213,78,169
858db	108,86,244,234,101,122,174,8
859db	186,120,37,46,28,166,180,198
860db	232,221,116,31,75,189,139,138
861db	112,62,181,102,72,3,246,14
862db	97,53,87,185,134,193,29,158
863db	225,248,152,17,105,217,142,148
864db	155,30,135,233,206,85,40,223
865db	140,161,137,13,191,230,66,104
866db	65,153,45,15,176,84,187,22
867db	99,124,119,123,242,107,111,197
868db	48,1,103,43,254,215,171,118
869db	202,130,201,125,250,89,71,240
870db	173,212,162,175,156,164,114,192
871db	183,253,147,38,54,63,247,204
872db	52,165,229,241,113,216,49,21
873db	4,199,35,195,24,150,5,154
874db	7,18,128,226,235,39,178,117
875db	9,131,44,26,27,110,90,160
876db	82,59,214,179,41,227,47,132
877db	83,209,0,237,32,252,177,91
878db	106,203,190,57,74,76,88,207
879db	208,239,170,251,67,77,51,133
880db	69,249,2,127,80,60,159,168
881db	81,163,64,143,146,157,56,245
882db	188,182,218,33,16,255,243,210
883db	205,12,19,236,95,151,68,23
884db	196,167,126,61,100,93,25,115
885db	96,129,79,220,34,42,144,136
886db	70,238,184,20,222,94,11,219
887db	224,50,58,10,73,6,36,92
888db	194,211,172,98,145,149,228,121
889db	231,200,55,109,141,213,78,169
890db	108,86,244,234,101,122,174,8
891db	186,120,37,46,28,166,180,198
892db	232,221,116,31,75,189,139,138
893db	112,62,181,102,72,3,246,14
894db	97,53,87,185,134,193,29,158
895db	225,248,152,17,105,217,142,148
896db	155,30,135,233,206,85,40,223
897db	140,161,137,13,191,230,66,104
898db	65,153,45,15,176,84,187,22
899db	99,124,119,123,242,107,111,197
900db	48,1,103,43,254,215,171,118
901db	202,130,201,125,250,89,71,240
902db	173,212,162,175,156,164,114,192
903db	183,253,147,38,54,63,247,204
904db	52,165,229,241,113,216,49,21
905db	4,199,35,195,24,150,5,154
906db	7,18,128,226,235,39,178,117
907db	9,131,44,26,27,110,90,160
908db	82,59,214,179,41,227,47,132
909db	83,209,0,237,32,252,177,91
910db	106,203,190,57,74,76,88,207
911db	208,239,170,251,67,77,51,133
912db	69,249,2,127,80,60,159,168
913db	81,163,64,143,146,157,56,245
914db	188,182,218,33,16,255,243,210
915db	205,12,19,236,95,151,68,23
916db	196,167,126,61,100,93,25,115
917db	96,129,79,220,34,42,144,136
918db	70,238,184,20,222,94,11,219
919db	224,50,58,10,73,6,36,92
920db	194,211,172,98,145,149,228,121
921db	231,200,55,109,141,213,78,169
922db	108,86,244,234,101,122,174,8
923db	186,120,37,46,28,166,180,198
924db	232,221,116,31,75,189,139,138
925db	112,62,181,102,72,3,246,14
926db	97,53,87,185,134,193,29,158
927db	225,248,152,17,105,217,142,148
928db	155,30,135,233,206,85,40,223
929db	140,161,137,13,191,230,66,104
930db	65,153,45,15,176,84,187,22
931db	99,124,119,123,242,107,111,197
932db	48,1,103,43,254,215,171,118
933db	202,130,201,125,250,89,71,240
934db	173,212,162,175,156,164,114,192
935db	183,253,147,38,54,63,247,204
936db	52,165,229,241,113,216,49,21
937db	4,199,35,195,24,150,5,154
938db	7,18,128,226,235,39,178,117
939db	9,131,44,26,27,110,90,160
940db	82,59,214,179,41,227,47,132
941db	83,209,0,237,32,252,177,91
942db	106,203,190,57,74,76,88,207
943db	208,239,170,251,67,77,51,133
944db	69,249,2,127,80,60,159,168
945db	81,163,64,143,146,157,56,245
946db	188,182,218,33,16,255,243,210
947db	205,12,19,236,95,151,68,23
948db	196,167,126,61,100,93,25,115
949db	96,129,79,220,34,42,144,136
950db	70,238,184,20,222,94,11,219
951db	224,50,58,10,73,6,36,92
952db	194,211,172,98,145,149,228,121
953db	231,200,55,109,141,213,78,169
954db	108,86,244,234,101,122,174,8
955db	186,120,37,46,28,166,180,198
956db	232,221,116,31,75,189,139,138
957db	112,62,181,102,72,3,246,14
958db	97,53,87,185,134,193,29,158
959db	225,248,152,17,105,217,142,148
960db	155,30,135,233,206,85,40,223
961db	140,161,137,13,191,230,66,104
962db	65,153,45,15,176,84,187,22
963dd	1,2,4,8
964dd	16,32,64,128
965dd	27,54,0,0
966dd	0,0,0,0
967global	_AES_encrypt
968align	16
969_AES_encrypt:
970L$_AES_encrypt_begin:
971	push	ebp
972	push	ebx
973	push	esi
974	push	edi
975	mov	esi,DWORD [20+esp]
976	mov	edi,DWORD [28+esp]
977	mov	eax,esp
978	sub	esp,36
979	and	esp,-64
980	lea	ebx,[edi-127]
981	sub	ebx,esp
982	neg	ebx
983	and	ebx,960
984	sub	esp,ebx
985	add	esp,4
986	mov	DWORD [28+esp],eax
987	call	L$004pic_point
988L$004pic_point:
989	pop	ebp
990	lea	eax,[_OPENSSL_ia32cap_P]
991	lea	ebp,[(L$AES_Te-L$004pic_point)+ebp]
992	lea	ebx,[764+esp]
993	sub	ebx,ebp
994	and	ebx,768
995	lea	ebp,[2176+ebx*1+ebp]
996	bt	DWORD [eax],25
997	jnc	NEAR L$005x86
998	movq	mm0,[esi]
999	movq	mm4,[8+esi]
1000	call	__sse_AES_encrypt_compact
1001	mov	esp,DWORD [28+esp]
1002	mov	esi,DWORD [24+esp]
1003	movq	[esi],mm0
1004	movq	[8+esi],mm4
1005	emms
1006	pop	edi
1007	pop	esi
1008	pop	ebx
1009	pop	ebp
1010	ret
1011align	16
1012L$005x86:
1013	mov	DWORD [24+esp],ebp
1014	mov	eax,DWORD [esi]
1015	mov	ebx,DWORD [4+esi]
1016	mov	ecx,DWORD [8+esi]
1017	mov	edx,DWORD [12+esi]
1018	call	__x86_AES_encrypt_compact
1019	mov	esp,DWORD [28+esp]
1020	mov	esi,DWORD [24+esp]
1021	mov	DWORD [esi],eax
1022	mov	DWORD [4+esi],ebx
1023	mov	DWORD [8+esi],ecx
1024	mov	DWORD [12+esi],edx
1025	pop	edi
1026	pop	esi
1027	pop	ebx
1028	pop	ebp
1029	ret
1030align	16
1031__x86_AES_decrypt_compact:
1032	mov	DWORD [20+esp],edi
1033	xor	eax,DWORD [edi]
1034	xor	ebx,DWORD [4+edi]
1035	xor	ecx,DWORD [8+edi]
1036	xor	edx,DWORD [12+edi]
1037	mov	esi,DWORD [240+edi]
1038	lea	esi,[esi*1+esi-2]
1039	lea	esi,[esi*8+edi]
1040	mov	DWORD [24+esp],esi
1041	mov	edi,DWORD [ebp-128]
1042	mov	esi,DWORD [ebp-96]
1043	mov	edi,DWORD [ebp-64]
1044	mov	esi,DWORD [ebp-32]
1045	mov	edi,DWORD [ebp]
1046	mov	esi,DWORD [32+ebp]
1047	mov	edi,DWORD [64+ebp]
1048	mov	esi,DWORD [96+ebp]
1049align	16
1050L$006loop:
1051	mov	esi,eax
1052	and	esi,255
1053	movzx	esi,BYTE [esi*1+ebp-128]
1054	movzx	edi,dh
1055	movzx	edi,BYTE [edi*1+ebp-128]
1056	shl	edi,8
1057	xor	esi,edi
1058	mov	edi,ecx
1059	shr	edi,16
1060	and	edi,255
1061	movzx	edi,BYTE [edi*1+ebp-128]
1062	shl	edi,16
1063	xor	esi,edi
1064	mov	edi,ebx
1065	shr	edi,24
1066	movzx	edi,BYTE [edi*1+ebp-128]
1067	shl	edi,24
1068	xor	esi,edi
1069	mov	DWORD [4+esp],esi
1070	mov	esi,ebx
1071	and	esi,255
1072	movzx	esi,BYTE [esi*1+ebp-128]
1073	movzx	edi,ah
1074	movzx	edi,BYTE [edi*1+ebp-128]
1075	shl	edi,8
1076	xor	esi,edi
1077	mov	edi,edx
1078	shr	edi,16
1079	and	edi,255
1080	movzx	edi,BYTE [edi*1+ebp-128]
1081	shl	edi,16
1082	xor	esi,edi
1083	mov	edi,ecx
1084	shr	edi,24
1085	movzx	edi,BYTE [edi*1+ebp-128]
1086	shl	edi,24
1087	xor	esi,edi
1088	mov	DWORD [8+esp],esi
1089	mov	esi,ecx
1090	and	esi,255
1091	movzx	esi,BYTE [esi*1+ebp-128]
1092	movzx	edi,bh
1093	movzx	edi,BYTE [edi*1+ebp-128]
1094	shl	edi,8
1095	xor	esi,edi
1096	mov	edi,eax
1097	shr	edi,16
1098	and	edi,255
1099	movzx	edi,BYTE [edi*1+ebp-128]
1100	shl	edi,16
1101	xor	esi,edi
1102	mov	edi,edx
1103	shr	edi,24
1104	movzx	edi,BYTE [edi*1+ebp-128]
1105	shl	edi,24
1106	xor	esi,edi
1107	and	edx,255
1108	movzx	edx,BYTE [edx*1+ebp-128]
1109	movzx	ecx,ch
1110	movzx	ecx,BYTE [ecx*1+ebp-128]
1111	shl	ecx,8
1112	xor	edx,ecx
1113	mov	ecx,esi
1114	shr	ebx,16
1115	and	ebx,255
1116	movzx	ebx,BYTE [ebx*1+ebp-128]
1117	shl	ebx,16
1118	xor	edx,ebx
1119	shr	eax,24
1120	movzx	eax,BYTE [eax*1+ebp-128]
1121	shl	eax,24
1122	xor	edx,eax
1123	mov	edi,2155905152
1124	and	edi,ecx
1125	mov	esi,edi
1126	shr	edi,7
1127	lea	eax,[ecx*1+ecx]
1128	sub	esi,edi
1129	and	eax,4278124286
1130	and	esi,454761243
1131	xor	eax,esi
1132	mov	edi,2155905152
1133	and	edi,eax
1134	mov	esi,edi
1135	shr	edi,7
1136	lea	ebx,[eax*1+eax]
1137	sub	esi,edi
1138	and	ebx,4278124286
1139	and	esi,454761243
1140	xor	eax,ecx
1141	xor	ebx,esi
1142	mov	edi,2155905152
1143	and	edi,ebx
1144	mov	esi,edi
1145	shr	edi,7
1146	lea	ebp,[ebx*1+ebx]
1147	sub	esi,edi
1148	and	ebp,4278124286
1149	and	esi,454761243
1150	xor	ebx,ecx
1151	rol	ecx,8
1152	xor	ebp,esi
1153	xor	ecx,eax
1154	xor	eax,ebp
1155	xor	ecx,ebx
1156	xor	ebx,ebp
1157	rol	eax,24
1158	xor	ecx,ebp
1159	rol	ebx,16
1160	xor	ecx,eax
1161	rol	ebp,8
1162	xor	ecx,ebx
1163	mov	eax,DWORD [4+esp]
1164	xor	ecx,ebp
1165	mov	DWORD [12+esp],ecx
1166	mov	edi,2155905152
1167	and	edi,edx
1168	mov	esi,edi
1169	shr	edi,7
1170	lea	ebx,[edx*1+edx]
1171	sub	esi,edi
1172	and	ebx,4278124286
1173	and	esi,454761243
1174	xor	ebx,esi
1175	mov	edi,2155905152
1176	and	edi,ebx
1177	mov	esi,edi
1178	shr	edi,7
1179	lea	ecx,[ebx*1+ebx]
1180	sub	esi,edi
1181	and	ecx,4278124286
1182	and	esi,454761243
1183	xor	ebx,edx
1184	xor	ecx,esi
1185	mov	edi,2155905152
1186	and	edi,ecx
1187	mov	esi,edi
1188	shr	edi,7
1189	lea	ebp,[ecx*1+ecx]
1190	sub	esi,edi
1191	and	ebp,4278124286
1192	and	esi,454761243
1193	xor	ecx,edx
1194	rol	edx,8
1195	xor	ebp,esi
1196	xor	edx,ebx
1197	xor	ebx,ebp
1198	xor	edx,ecx
1199	xor	ecx,ebp
1200	rol	ebx,24
1201	xor	edx,ebp
1202	rol	ecx,16
1203	xor	edx,ebx
1204	rol	ebp,8
1205	xor	edx,ecx
1206	mov	ebx,DWORD [8+esp]
1207	xor	edx,ebp
1208	mov	DWORD [16+esp],edx
1209	mov	edi,2155905152
1210	and	edi,eax
1211	mov	esi,edi
1212	shr	edi,7
1213	lea	ecx,[eax*1+eax]
1214	sub	esi,edi
1215	and	ecx,4278124286
1216	and	esi,454761243
1217	xor	ecx,esi
1218	mov	edi,2155905152
1219	and	edi,ecx
1220	mov	esi,edi
1221	shr	edi,7
1222	lea	edx,[ecx*1+ecx]
1223	sub	esi,edi
1224	and	edx,4278124286
1225	and	esi,454761243
1226	xor	ecx,eax
1227	xor	edx,esi
1228	mov	edi,2155905152
1229	and	edi,edx
1230	mov	esi,edi
1231	shr	edi,7
1232	lea	ebp,[edx*1+edx]
1233	sub	esi,edi
1234	and	ebp,4278124286
1235	and	esi,454761243
1236	xor	edx,eax
1237	rol	eax,8
1238	xor	ebp,esi
1239	xor	eax,ecx
1240	xor	ecx,ebp
1241	xor	eax,edx
1242	xor	edx,ebp
1243	rol	ecx,24
1244	xor	eax,ebp
1245	rol	edx,16
1246	xor	eax,ecx
1247	rol	ebp,8
1248	xor	eax,edx
1249	xor	eax,ebp
1250	mov	edi,2155905152
1251	and	edi,ebx
1252	mov	esi,edi
1253	shr	edi,7
1254	lea	ecx,[ebx*1+ebx]
1255	sub	esi,edi
1256	and	ecx,4278124286
1257	and	esi,454761243
1258	xor	ecx,esi
1259	mov	edi,2155905152
1260	and	edi,ecx
1261	mov	esi,edi
1262	shr	edi,7
1263	lea	edx,[ecx*1+ecx]
1264	sub	esi,edi
1265	and	edx,4278124286
1266	and	esi,454761243
1267	xor	ecx,ebx
1268	xor	edx,esi
1269	mov	edi,2155905152
1270	and	edi,edx
1271	mov	esi,edi
1272	shr	edi,7
1273	lea	ebp,[edx*1+edx]
1274	sub	esi,edi
1275	and	ebp,4278124286
1276	and	esi,454761243
1277	xor	edx,ebx
1278	rol	ebx,8
1279	xor	ebp,esi
1280	xor	ebx,ecx
1281	xor	ecx,ebp
1282	xor	ebx,edx
1283	xor	edx,ebp
1284	rol	ecx,24
1285	xor	ebx,ebp
1286	rol	edx,16
1287	xor	ebx,ecx
1288	rol	ebp,8
1289	xor	ebx,edx
1290	mov	ecx,DWORD [12+esp]
1291	xor	ebx,ebp
1292	mov	edx,DWORD [16+esp]
1293	mov	edi,DWORD [20+esp]
1294	mov	ebp,DWORD [28+esp]
1295	add	edi,16
1296	xor	eax,DWORD [edi]
1297	xor	ebx,DWORD [4+edi]
1298	xor	ecx,DWORD [8+edi]
1299	xor	edx,DWORD [12+edi]
1300	cmp	edi,DWORD [24+esp]
1301	mov	DWORD [20+esp],edi
1302	jb	NEAR L$006loop
1303	mov	esi,eax
1304	and	esi,255
1305	movzx	esi,BYTE [esi*1+ebp-128]
1306	movzx	edi,dh
1307	movzx	edi,BYTE [edi*1+ebp-128]
1308	shl	edi,8
1309	xor	esi,edi
1310	mov	edi,ecx
1311	shr	edi,16
1312	and	edi,255
1313	movzx	edi,BYTE [edi*1+ebp-128]
1314	shl	edi,16
1315	xor	esi,edi
1316	mov	edi,ebx
1317	shr	edi,24
1318	movzx	edi,BYTE [edi*1+ebp-128]
1319	shl	edi,24
1320	xor	esi,edi
1321	mov	DWORD [4+esp],esi
1322	mov	esi,ebx
1323	and	esi,255
1324	movzx	esi,BYTE [esi*1+ebp-128]
1325	movzx	edi,ah
1326	movzx	edi,BYTE [edi*1+ebp-128]
1327	shl	edi,8
1328	xor	esi,edi
1329	mov	edi,edx
1330	shr	edi,16
1331	and	edi,255
1332	movzx	edi,BYTE [edi*1+ebp-128]
1333	shl	edi,16
1334	xor	esi,edi
1335	mov	edi,ecx
1336	shr	edi,24
1337	movzx	edi,BYTE [edi*1+ebp-128]
1338	shl	edi,24
1339	xor	esi,edi
1340	mov	DWORD [8+esp],esi
1341	mov	esi,ecx
1342	and	esi,255
1343	movzx	esi,BYTE [esi*1+ebp-128]
1344	movzx	edi,bh
1345	movzx	edi,BYTE [edi*1+ebp-128]
1346	shl	edi,8
1347	xor	esi,edi
1348	mov	edi,eax
1349	shr	edi,16
1350	and	edi,255
1351	movzx	edi,BYTE [edi*1+ebp-128]
1352	shl	edi,16
1353	xor	esi,edi
1354	mov	edi,edx
1355	shr	edi,24
1356	movzx	edi,BYTE [edi*1+ebp-128]
1357	shl	edi,24
1358	xor	esi,edi
1359	mov	edi,DWORD [20+esp]
1360	and	edx,255
1361	movzx	edx,BYTE [edx*1+ebp-128]
1362	movzx	ecx,ch
1363	movzx	ecx,BYTE [ecx*1+ebp-128]
1364	shl	ecx,8
1365	xor	edx,ecx
1366	mov	ecx,esi
1367	shr	ebx,16
1368	and	ebx,255
1369	movzx	ebx,BYTE [ebx*1+ebp-128]
1370	shl	ebx,16
1371	xor	edx,ebx
1372	mov	ebx,DWORD [8+esp]
1373	shr	eax,24
1374	movzx	eax,BYTE [eax*1+ebp-128]
1375	shl	eax,24
1376	xor	edx,eax
1377	mov	eax,DWORD [4+esp]
1378	xor	eax,DWORD [16+edi]
1379	xor	ebx,DWORD [20+edi]
1380	xor	ecx,DWORD [24+edi]
1381	xor	edx,DWORD [28+edi]
1382	ret
1383align	16
1384__sse_AES_decrypt_compact:
1385	pxor	mm0,[edi]
1386	pxor	mm4,[8+edi]
1387	mov	esi,DWORD [240+edi]
1388	lea	esi,[esi*1+esi-2]
1389	lea	esi,[esi*8+edi]
1390	mov	DWORD [24+esp],esi
1391	mov	eax,454761243
1392	mov	DWORD [8+esp],eax
1393	mov	DWORD [12+esp],eax
1394	mov	eax,DWORD [ebp-128]
1395	mov	ebx,DWORD [ebp-96]
1396	mov	ecx,DWORD [ebp-64]
1397	mov	edx,DWORD [ebp-32]
1398	mov	eax,DWORD [ebp]
1399	mov	ebx,DWORD [32+ebp]
1400	mov	ecx,DWORD [64+ebp]
1401	mov	edx,DWORD [96+ebp]
1402align	16
1403L$007loop:
1404	pshufw	mm1,mm0,12
1405	pshufw	mm5,mm4,9
1406	movd	eax,mm1
1407	movd	ebx,mm5
1408	mov	DWORD [20+esp],edi
1409	movzx	esi,al
1410	movzx	edx,ah
1411	pshufw	mm2,mm0,6
1412	movzx	ecx,BYTE [esi*1+ebp-128]
1413	movzx	edi,bl
1414	movzx	edx,BYTE [edx*1+ebp-128]
1415	shr	eax,16
1416	shl	edx,8
1417	movzx	esi,BYTE [edi*1+ebp-128]
1418	movzx	edi,bh
1419	shl	esi,16
1420	pshufw	mm6,mm4,3
1421	or	ecx,esi
1422	movzx	esi,BYTE [edi*1+ebp-128]
1423	movzx	edi,ah
1424	shl	esi,24
1425	shr	ebx,16
1426	or	edx,esi
1427	movzx	esi,BYTE [edi*1+ebp-128]
1428	movzx	edi,bh
1429	shl	esi,24
1430	or	ecx,esi
1431	movzx	esi,BYTE [edi*1+ebp-128]
1432	movzx	edi,al
1433	shl	esi,8
1434	movd	eax,mm2
1435	or	ecx,esi
1436	movzx	esi,BYTE [edi*1+ebp-128]
1437	movzx	edi,bl
1438	shl	esi,16
1439	movd	ebx,mm6
1440	movd	mm0,ecx
1441	movzx	ecx,BYTE [edi*1+ebp-128]
1442	movzx	edi,al
1443	or	ecx,esi
1444	movzx	esi,BYTE [edi*1+ebp-128]
1445	movzx	edi,bl
1446	or	edx,esi
1447	movzx	esi,BYTE [edi*1+ebp-128]
1448	movzx	edi,ah
1449	shl	esi,16
1450	shr	eax,16
1451	or	edx,esi
1452	movzx	esi,BYTE [edi*1+ebp-128]
1453	movzx	edi,bh
1454	shr	ebx,16
1455	shl	esi,8
1456	movd	mm1,edx
1457	movzx	edx,BYTE [edi*1+ebp-128]
1458	movzx	edi,bh
1459	shl	edx,24
1460	and	ebx,255
1461	or	edx,esi
1462	punpckldq	mm0,mm1
1463	movzx	esi,BYTE [edi*1+ebp-128]
1464	movzx	edi,al
1465	shl	esi,8
1466	movzx	eax,ah
1467	movzx	ebx,BYTE [ebx*1+ebp-128]
1468	or	ecx,esi
1469	movzx	esi,BYTE [edi*1+ebp-128]
1470	or	edx,ebx
1471	shl	esi,16
1472	movzx	eax,BYTE [eax*1+ebp-128]
1473	or	edx,esi
1474	shl	eax,24
1475	or	ecx,eax
1476	mov	edi,DWORD [20+esp]
1477	movd	mm4,edx
1478	movd	mm5,ecx
1479	punpckldq	mm4,mm5
1480	add	edi,16
1481	cmp	edi,DWORD [24+esp]
1482	ja	NEAR L$008out
1483	movq	mm3,mm0
1484	movq	mm7,mm4
1485	pshufw	mm2,mm0,228
1486	pshufw	mm6,mm4,228
1487	movq	mm1,mm0
1488	movq	mm5,mm4
1489	pshufw	mm0,mm0,177
1490	pshufw	mm4,mm4,177
1491	pslld	mm2,8
1492	pslld	mm6,8
1493	psrld	mm3,8
1494	psrld	mm7,8
1495	pxor	mm0,mm2
1496	pxor	mm4,mm6
1497	pxor	mm0,mm3
1498	pxor	mm4,mm7
1499	pslld	mm2,16
1500	pslld	mm6,16
1501	psrld	mm3,16
1502	psrld	mm7,16
1503	pxor	mm0,mm2
1504	pxor	mm4,mm6
1505	pxor	mm0,mm3
1506	pxor	mm4,mm7
1507	movq	mm3,[8+esp]
1508	pxor	mm2,mm2
1509	pxor	mm6,mm6
1510	pcmpgtb	mm2,mm1
1511	pcmpgtb	mm6,mm5
1512	pand	mm2,mm3
1513	pand	mm6,mm3
1514	paddb	mm1,mm1
1515	paddb	mm5,mm5
1516	pxor	mm1,mm2
1517	pxor	mm5,mm6
1518	movq	mm3,mm1
1519	movq	mm7,mm5
1520	movq	mm2,mm1
1521	movq	mm6,mm5
1522	pxor	mm0,mm1
1523	pxor	mm4,mm5
1524	pslld	mm3,24
1525	pslld	mm7,24
1526	psrld	mm2,8
1527	psrld	mm6,8
1528	pxor	mm0,mm3
1529	pxor	mm4,mm7
1530	pxor	mm0,mm2
1531	pxor	mm4,mm6
1532	movq	mm2,[8+esp]
1533	pxor	mm3,mm3
1534	pxor	mm7,mm7
1535	pcmpgtb	mm3,mm1
1536	pcmpgtb	mm7,mm5
1537	pand	mm3,mm2
1538	pand	mm7,mm2
1539	paddb	mm1,mm1
1540	paddb	mm5,mm5
1541	pxor	mm1,mm3
1542	pxor	mm5,mm7
1543	pshufw	mm3,mm1,177
1544	pshufw	mm7,mm5,177
1545	pxor	mm0,mm1
1546	pxor	mm4,mm5
1547	pxor	mm0,mm3
1548	pxor	mm4,mm7
1549	pxor	mm3,mm3
1550	pxor	mm7,mm7
1551	pcmpgtb	mm3,mm1
1552	pcmpgtb	mm7,mm5
1553	pand	mm3,mm2
1554	pand	mm7,mm2
1555	paddb	mm1,mm1
1556	paddb	mm5,mm5
1557	pxor	mm1,mm3
1558	pxor	mm5,mm7
1559	pxor	mm0,mm1
1560	pxor	mm4,mm5
1561	movq	mm3,mm1
1562	movq	mm7,mm5
1563	pshufw	mm2,mm1,177
1564	pshufw	mm6,mm5,177
1565	pxor	mm0,mm2
1566	pxor	mm4,mm6
1567	pslld	mm1,8
1568	pslld	mm5,8
1569	psrld	mm3,8
1570	psrld	mm7,8
1571	movq	mm2,[edi]
1572	movq	mm6,[8+edi]
1573	pxor	mm0,mm1
1574	pxor	mm4,mm5
1575	pxor	mm0,mm3
1576	pxor	mm4,mm7
1577	mov	eax,DWORD [ebp-128]
1578	pslld	mm1,16
1579	pslld	mm5,16
1580	mov	ebx,DWORD [ebp-64]
1581	psrld	mm3,16
1582	psrld	mm7,16
1583	mov	ecx,DWORD [ebp]
1584	pxor	mm0,mm1
1585	pxor	mm4,mm5
1586	mov	edx,DWORD [64+ebp]
1587	pxor	mm0,mm3
1588	pxor	mm4,mm7
1589	pxor	mm0,mm2
1590	pxor	mm4,mm6
1591	jmp	NEAR L$007loop
1592align	16
1593L$008out:
1594	pxor	mm0,[edi]
1595	pxor	mm4,[8+edi]
1596	ret
1597align	16
1598__x86_AES_decrypt:
1599	mov	DWORD [20+esp],edi
1600	xor	eax,DWORD [edi]
1601	xor	ebx,DWORD [4+edi]
1602	xor	ecx,DWORD [8+edi]
1603	xor	edx,DWORD [12+edi]
1604	mov	esi,DWORD [240+edi]
1605	lea	esi,[esi*1+esi-2]
1606	lea	esi,[esi*8+edi]
1607	mov	DWORD [24+esp],esi
1608align	16
1609L$009loop:
1610	mov	esi,eax
1611	and	esi,255
1612	mov	esi,DWORD [esi*8+ebp]
1613	movzx	edi,dh
1614	xor	esi,DWORD [3+edi*8+ebp]
1615	mov	edi,ecx
1616	shr	edi,16
1617	and	edi,255
1618	xor	esi,DWORD [2+edi*8+ebp]
1619	mov	edi,ebx
1620	shr	edi,24
1621	xor	esi,DWORD [1+edi*8+ebp]
1622	mov	DWORD [4+esp],esi
1623	mov	esi,ebx
1624	and	esi,255
1625	mov	esi,DWORD [esi*8+ebp]
1626	movzx	edi,ah
1627	xor	esi,DWORD [3+edi*8+ebp]
1628	mov	edi,edx
1629	shr	edi,16
1630	and	edi,255
1631	xor	esi,DWORD [2+edi*8+ebp]
1632	mov	edi,ecx
1633	shr	edi,24
1634	xor	esi,DWORD [1+edi*8+ebp]
1635	mov	DWORD [8+esp],esi
1636	mov	esi,ecx
1637	and	esi,255
1638	mov	esi,DWORD [esi*8+ebp]
1639	movzx	edi,bh
1640	xor	esi,DWORD [3+edi*8+ebp]
1641	mov	edi,eax
1642	shr	edi,16
1643	and	edi,255
1644	xor	esi,DWORD [2+edi*8+ebp]
1645	mov	edi,edx
1646	shr	edi,24
1647	xor	esi,DWORD [1+edi*8+ebp]
1648	mov	edi,DWORD [20+esp]
1649	and	edx,255
1650	mov	edx,DWORD [edx*8+ebp]
1651	movzx	ecx,ch
1652	xor	edx,DWORD [3+ecx*8+ebp]
1653	mov	ecx,esi
1654	shr	ebx,16
1655	and	ebx,255
1656	xor	edx,DWORD [2+ebx*8+ebp]
1657	mov	ebx,DWORD [8+esp]
1658	shr	eax,24
1659	xor	edx,DWORD [1+eax*8+ebp]
1660	mov	eax,DWORD [4+esp]
1661	add	edi,16
1662	xor	eax,DWORD [edi]
1663	xor	ebx,DWORD [4+edi]
1664	xor	ecx,DWORD [8+edi]
1665	xor	edx,DWORD [12+edi]
1666	cmp	edi,DWORD [24+esp]
1667	mov	DWORD [20+esp],edi
1668	jb	NEAR L$009loop
1669	lea	ebp,[2176+ebp]
1670	mov	edi,DWORD [ebp-128]
1671	mov	esi,DWORD [ebp-96]
1672	mov	edi,DWORD [ebp-64]
1673	mov	esi,DWORD [ebp-32]
1674	mov	edi,DWORD [ebp]
1675	mov	esi,DWORD [32+ebp]
1676	mov	edi,DWORD [64+ebp]
1677	mov	esi,DWORD [96+ebp]
1678	lea	ebp,[ebp-128]
1679	mov	esi,eax
1680	and	esi,255
1681	movzx	esi,BYTE [esi*1+ebp]
1682	movzx	edi,dh
1683	movzx	edi,BYTE [edi*1+ebp]
1684	shl	edi,8
1685	xor	esi,edi
1686	mov	edi,ecx
1687	shr	edi,16
1688	and	edi,255
1689	movzx	edi,BYTE [edi*1+ebp]
1690	shl	edi,16
1691	xor	esi,edi
1692	mov	edi,ebx
1693	shr	edi,24
1694	movzx	edi,BYTE [edi*1+ebp]
1695	shl	edi,24
1696	xor	esi,edi
1697	mov	DWORD [4+esp],esi
1698	mov	esi,ebx
1699	and	esi,255
1700	movzx	esi,BYTE [esi*1+ebp]
1701	movzx	edi,ah
1702	movzx	edi,BYTE [edi*1+ebp]
1703	shl	edi,8
1704	xor	esi,edi
1705	mov	edi,edx
1706	shr	edi,16
1707	and	edi,255
1708	movzx	edi,BYTE [edi*1+ebp]
1709	shl	edi,16
1710	xor	esi,edi
1711	mov	edi,ecx
1712	shr	edi,24
1713	movzx	edi,BYTE [edi*1+ebp]
1714	shl	edi,24
1715	xor	esi,edi
1716	mov	DWORD [8+esp],esi
1717	mov	esi,ecx
1718	and	esi,255
1719	movzx	esi,BYTE [esi*1+ebp]
1720	movzx	edi,bh
1721	movzx	edi,BYTE [edi*1+ebp]
1722	shl	edi,8
1723	xor	esi,edi
1724	mov	edi,eax
1725	shr	edi,16
1726	and	edi,255
1727	movzx	edi,BYTE [edi*1+ebp]
1728	shl	edi,16
1729	xor	esi,edi
1730	mov	edi,edx
1731	shr	edi,24
1732	movzx	edi,BYTE [edi*1+ebp]
1733	shl	edi,24
1734	xor	esi,edi
1735	mov	edi,DWORD [20+esp]
1736	and	edx,255
1737	movzx	edx,BYTE [edx*1+ebp]
1738	movzx	ecx,ch
1739	movzx	ecx,BYTE [ecx*1+ebp]
1740	shl	ecx,8
1741	xor	edx,ecx
1742	mov	ecx,esi
1743	shr	ebx,16
1744	and	ebx,255
1745	movzx	ebx,BYTE [ebx*1+ebp]
1746	shl	ebx,16
1747	xor	edx,ebx
1748	mov	ebx,DWORD [8+esp]
1749	shr	eax,24
1750	movzx	eax,BYTE [eax*1+ebp]
1751	shl	eax,24
1752	xor	edx,eax
1753	mov	eax,DWORD [4+esp]
1754	lea	ebp,[ebp-2048]
1755	add	edi,16
1756	xor	eax,DWORD [edi]
1757	xor	ebx,DWORD [4+edi]
1758	xor	ecx,DWORD [8+edi]
1759	xor	edx,DWORD [12+edi]
1760	ret
1761align	64
1762L$AES_Td:
1763dd	1353184337,1353184337
1764dd	1399144830,1399144830
1765dd	3282310938,3282310938
1766dd	2522752826,2522752826
1767dd	3412831035,3412831035
1768dd	4047871263,4047871263
1769dd	2874735276,2874735276
1770dd	2466505547,2466505547
1771dd	1442459680,1442459680
1772dd	4134368941,4134368941
1773dd	2440481928,2440481928
1774dd	625738485,625738485
1775dd	4242007375,4242007375
1776dd	3620416197,3620416197
1777dd	2151953702,2151953702
1778dd	2409849525,2409849525
1779dd	1230680542,1230680542
1780dd	1729870373,1729870373
1781dd	2551114309,2551114309
1782dd	3787521629,3787521629
1783dd	41234371,41234371
1784dd	317738113,317738113
1785dd	2744600205,2744600205
1786dd	3338261355,3338261355
1787dd	3881799427,3881799427
1788dd	2510066197,2510066197
1789dd	3950669247,3950669247
1790dd	3663286933,3663286933
1791dd	763608788,763608788
1792dd	3542185048,3542185048
1793dd	694804553,694804553
1794dd	1154009486,1154009486
1795dd	1787413109,1787413109
1796dd	2021232372,2021232372
1797dd	1799248025,1799248025
1798dd	3715217703,3715217703
1799dd	3058688446,3058688446
1800dd	397248752,397248752
1801dd	1722556617,1722556617
1802dd	3023752829,3023752829
1803dd	407560035,407560035
1804dd	2184256229,2184256229
1805dd	1613975959,1613975959
1806dd	1165972322,1165972322
1807dd	3765920945,3765920945
1808dd	2226023355,2226023355
1809dd	480281086,480281086
1810dd	2485848313,2485848313
1811dd	1483229296,1483229296
1812dd	436028815,436028815
1813dd	2272059028,2272059028
1814dd	3086515026,3086515026
1815dd	601060267,601060267
1816dd	3791801202,3791801202
1817dd	1468997603,1468997603
1818dd	715871590,715871590
1819dd	120122290,120122290
1820dd	63092015,63092015
1821dd	2591802758,2591802758
1822dd	2768779219,2768779219
1823dd	4068943920,4068943920
1824dd	2997206819,2997206819
1825dd	3127509762,3127509762
1826dd	1552029421,1552029421
1827dd	723308426,723308426
1828dd	2461301159,2461301159
1829dd	4042393587,4042393587
1830dd	2715969870,2715969870
1831dd	3455375973,3455375973
1832dd	3586000134,3586000134
1833dd	526529745,526529745
1834dd	2331944644,2331944644
1835dd	2639474228,2639474228
1836dd	2689987490,2689987490
1837dd	853641733,853641733
1838dd	1978398372,1978398372
1839dd	971801355,971801355
1840dd	2867814464,2867814464
1841dd	111112542,111112542
1842dd	1360031421,1360031421
1843dd	4186579262,4186579262
1844dd	1023860118,1023860118
1845dd	2919579357,2919579357
1846dd	1186850381,1186850381
1847dd	3045938321,3045938321
1848dd	90031217,90031217
1849dd	1876166148,1876166148
1850dd	4279586912,4279586912
1851dd	620468249,620468249
1852dd	2548678102,2548678102
1853dd	3426959497,3426959497
1854dd	2006899047,2006899047
1855dd	3175278768,3175278768
1856dd	2290845959,2290845959
1857dd	945494503,945494503
1858dd	3689859193,3689859193
1859dd	1191869601,1191869601
1860dd	3910091388,3910091388
1861dd	3374220536,3374220536
1862dd	0,0
1863dd	2206629897,2206629897
1864dd	1223502642,1223502642
1865dd	2893025566,2893025566
1866dd	1316117100,1316117100
1867dd	4227796733,4227796733
1868dd	1446544655,1446544655
1869dd	517320253,517320253
1870dd	658058550,658058550
1871dd	1691946762,1691946762
1872dd	564550760,564550760
1873dd	3511966619,3511966619
1874dd	976107044,976107044
1875dd	2976320012,2976320012
1876dd	266819475,266819475
1877dd	3533106868,3533106868
1878dd	2660342555,2660342555
1879dd	1338359936,1338359936
1880dd	2720062561,2720062561
1881dd	1766553434,1766553434
1882dd	370807324,370807324
1883dd	179999714,179999714
1884dd	3844776128,3844776128
1885dd	1138762300,1138762300
1886dd	488053522,488053522
1887dd	185403662,185403662
1888dd	2915535858,2915535858
1889dd	3114841645,3114841645
1890dd	3366526484,3366526484
1891dd	2233069911,2233069911
1892dd	1275557295,1275557295
1893dd	3151862254,3151862254
1894dd	4250959779,4250959779
1895dd	2670068215,2670068215
1896dd	3170202204,3170202204
1897dd	3309004356,3309004356
1898dd	880737115,880737115
1899dd	1982415755,1982415755
1900dd	3703972811,3703972811
1901dd	1761406390,1761406390
1902dd	1676797112,1676797112
1903dd	3403428311,3403428311
1904dd	277177154,277177154
1905dd	1076008723,1076008723
1906dd	538035844,538035844
1907dd	2099530373,2099530373
1908dd	4164795346,4164795346
1909dd	288553390,288553390
1910dd	1839278535,1839278535
1911dd	1261411869,1261411869
1912dd	4080055004,4080055004
1913dd	3964831245,3964831245
1914dd	3504587127,3504587127
1915dd	1813426987,1813426987
1916dd	2579067049,2579067049
1917dd	4199060497,4199060497
1918dd	577038663,577038663
1919dd	3297574056,3297574056
1920dd	440397984,440397984
1921dd	3626794326,3626794326
1922dd	4019204898,4019204898
1923dd	3343796615,3343796615
1924dd	3251714265,3251714265
1925dd	4272081548,4272081548
1926dd	906744984,906744984
1927dd	3481400742,3481400742
1928dd	685669029,685669029
1929dd	646887386,646887386
1930dd	2764025151,2764025151
1931dd	3835509292,3835509292
1932dd	227702864,227702864
1933dd	2613862250,2613862250
1934dd	1648787028,1648787028
1935dd	3256061430,3256061430
1936dd	3904428176,3904428176
1937dd	1593260334,1593260334
1938dd	4121936770,4121936770
1939dd	3196083615,3196083615
1940dd	2090061929,2090061929
1941dd	2838353263,2838353263
1942dd	3004310991,3004310991
1943dd	999926984,999926984
1944dd	2809993232,2809993232
1945dd	1852021992,1852021992
1946dd	2075868123,2075868123
1947dd	158869197,158869197
1948dd	4095236462,4095236462
1949dd	28809964,28809964
1950dd	2828685187,2828685187
1951dd	1701746150,1701746150
1952dd	2129067946,2129067946
1953dd	147831841,147831841
1954dd	3873969647,3873969647
1955dd	3650873274,3650873274
1956dd	3459673930,3459673930
1957dd	3557400554,3557400554
1958dd	3598495785,3598495785
1959dd	2947720241,2947720241
1960dd	824393514,824393514
1961dd	815048134,815048134
1962dd	3227951669,3227951669
1963dd	935087732,935087732
1964dd	2798289660,2798289660
1965dd	2966458592,2966458592
1966dd	366520115,366520115
1967dd	1251476721,1251476721
1968dd	4158319681,4158319681
1969dd	240176511,240176511
1970dd	804688151,804688151
1971dd	2379631990,2379631990
1972dd	1303441219,1303441219
1973dd	1414376140,1414376140
1974dd	3741619940,3741619940
1975dd	3820343710,3820343710
1976dd	461924940,461924940
1977dd	3089050817,3089050817
1978dd	2136040774,2136040774
1979dd	82468509,82468509
1980dd	1563790337,1563790337
1981dd	1937016826,1937016826
1982dd	776014843,776014843
1983dd	1511876531,1511876531
1984dd	1389550482,1389550482
1985dd	861278441,861278441
1986dd	323475053,323475053
1987dd	2355222426,2355222426
1988dd	2047648055,2047648055
1989dd	2383738969,2383738969
1990dd	2302415851,2302415851
1991dd	3995576782,3995576782
1992dd	902390199,902390199
1993dd	3991215329,3991215329
1994dd	1018251130,1018251130
1995dd	1507840668,1507840668
1996dd	1064563285,1064563285
1997dd	2043548696,2043548696
1998dd	3208103795,3208103795
1999dd	3939366739,3939366739
2000dd	1537932639,1537932639
2001dd	342834655,342834655
2002dd	2262516856,2262516856
2003dd	2180231114,2180231114
2004dd	1053059257,1053059257
2005dd	741614648,741614648
2006dd	1598071746,1598071746
2007dd	1925389590,1925389590
2008dd	203809468,203809468
2009dd	2336832552,2336832552
2010dd	1100287487,1100287487
2011dd	1895934009,1895934009
2012dd	3736275976,3736275976
2013dd	2632234200,2632234200
2014dd	2428589668,2428589668
2015dd	1636092795,1636092795
2016dd	1890988757,1890988757
2017dd	1952214088,1952214088
2018dd	1113045200,1113045200
2019db	82,9,106,213,48,54,165,56
2020db	191,64,163,158,129,243,215,251
2021db	124,227,57,130,155,47,255,135
2022db	52,142,67,68,196,222,233,203
2023db	84,123,148,50,166,194,35,61
2024db	238,76,149,11,66,250,195,78
2025db	8,46,161,102,40,217,36,178
2026db	118,91,162,73,109,139,209,37
2027db	114,248,246,100,134,104,152,22
2028db	212,164,92,204,93,101,182,146
2029db	108,112,72,80,253,237,185,218
2030db	94,21,70,87,167,141,157,132
2031db	144,216,171,0,140,188,211,10
2032db	247,228,88,5,184,179,69,6
2033db	208,44,30,143,202,63,15,2
2034db	193,175,189,3,1,19,138,107
2035db	58,145,17,65,79,103,220,234
2036db	151,242,207,206,240,180,230,115
2037db	150,172,116,34,231,173,53,133
2038db	226,249,55,232,28,117,223,110
2039db	71,241,26,113,29,41,197,137
2040db	111,183,98,14,170,24,190,27
2041db	252,86,62,75,198,210,121,32
2042db	154,219,192,254,120,205,90,244
2043db	31,221,168,51,136,7,199,49
2044db	177,18,16,89,39,128,236,95
2045db	96,81,127,169,25,181,74,13
2046db	45,229,122,159,147,201,156,239
2047db	160,224,59,77,174,42,245,176
2048db	200,235,187,60,131,83,153,97
2049db	23,43,4,126,186,119,214,38
2050db	225,105,20,99,85,33,12,125
2051db	82,9,106,213,48,54,165,56
2052db	191,64,163,158,129,243,215,251
2053db	124,227,57,130,155,47,255,135
2054db	52,142,67,68,196,222,233,203
2055db	84,123,148,50,166,194,35,61
2056db	238,76,149,11,66,250,195,78
2057db	8,46,161,102,40,217,36,178
2058db	118,91,162,73,109,139,209,37
2059db	114,248,246,100,134,104,152,22
2060db	212,164,92,204,93,101,182,146
2061db	108,112,72,80,253,237,185,218
2062db	94,21,70,87,167,141,157,132
2063db	144,216,171,0,140,188,211,10
2064db	247,228,88,5,184,179,69,6
2065db	208,44,30,143,202,63,15,2
2066db	193,175,189,3,1,19,138,107
2067db	58,145,17,65,79,103,220,234
2068db	151,242,207,206,240,180,230,115
2069db	150,172,116,34,231,173,53,133
2070db	226,249,55,232,28,117,223,110
2071db	71,241,26,113,29,41,197,137
2072db	111,183,98,14,170,24,190,27
2073db	252,86,62,75,198,210,121,32
2074db	154,219,192,254,120,205,90,244
2075db	31,221,168,51,136,7,199,49
2076db	177,18,16,89,39,128,236,95
2077db	96,81,127,169,25,181,74,13
2078db	45,229,122,159,147,201,156,239
2079db	160,224,59,77,174,42,245,176
2080db	200,235,187,60,131,83,153,97
2081db	23,43,4,126,186,119,214,38
2082db	225,105,20,99,85,33,12,125
2083db	82,9,106,213,48,54,165,56
2084db	191,64,163,158,129,243,215,251
2085db	124,227,57,130,155,47,255,135
2086db	52,142,67,68,196,222,233,203
2087db	84,123,148,50,166,194,35,61
2088db	238,76,149,11,66,250,195,78
2089db	8,46,161,102,40,217,36,178
2090db	118,91,162,73,109,139,209,37
2091db	114,248,246,100,134,104,152,22
2092db	212,164,92,204,93,101,182,146
2093db	108,112,72,80,253,237,185,218
2094db	94,21,70,87,167,141,157,132
2095db	144,216,171,0,140,188,211,10
2096db	247,228,88,5,184,179,69,6
2097db	208,44,30,143,202,63,15,2
2098db	193,175,189,3,1,19,138,107
2099db	58,145,17,65,79,103,220,234
2100db	151,242,207,206,240,180,230,115
2101db	150,172,116,34,231,173,53,133
2102db	226,249,55,232,28,117,223,110
2103db	71,241,26,113,29,41,197,137
2104db	111,183,98,14,170,24,190,27
2105db	252,86,62,75,198,210,121,32
2106db	154,219,192,254,120,205,90,244
2107db	31,221,168,51,136,7,199,49
2108db	177,18,16,89,39,128,236,95
2109db	96,81,127,169,25,181,74,13
2110db	45,229,122,159,147,201,156,239
2111db	160,224,59,77,174,42,245,176
2112db	200,235,187,60,131,83,153,97
2113db	23,43,4,126,186,119,214,38
2114db	225,105,20,99,85,33,12,125
2115db	82,9,106,213,48,54,165,56
2116db	191,64,163,158,129,243,215,251
2117db	124,227,57,130,155,47,255,135
2118db	52,142,67,68,196,222,233,203
2119db	84,123,148,50,166,194,35,61
2120db	238,76,149,11,66,250,195,78
2121db	8,46,161,102,40,217,36,178
2122db	118,91,162,73,109,139,209,37
2123db	114,248,246,100,134,104,152,22
2124db	212,164,92,204,93,101,182,146
2125db	108,112,72,80,253,237,185,218
2126db	94,21,70,87,167,141,157,132
2127db	144,216,171,0,140,188,211,10
2128db	247,228,88,5,184,179,69,6
2129db	208,44,30,143,202,63,15,2
2130db	193,175,189,3,1,19,138,107
2131db	58,145,17,65,79,103,220,234
2132db	151,242,207,206,240,180,230,115
2133db	150,172,116,34,231,173,53,133
2134db	226,249,55,232,28,117,223,110
2135db	71,241,26,113,29,41,197,137
2136db	111,183,98,14,170,24,190,27
2137db	252,86,62,75,198,210,121,32
2138db	154,219,192,254,120,205,90,244
2139db	31,221,168,51,136,7,199,49
2140db	177,18,16,89,39,128,236,95
2141db	96,81,127,169,25,181,74,13
2142db	45,229,122,159,147,201,156,239
2143db	160,224,59,77,174,42,245,176
2144db	200,235,187,60,131,83,153,97
2145db	23,43,4,126,186,119,214,38
2146db	225,105,20,99,85,33,12,125
2147global	_AES_decrypt
2148align	16
2149_AES_decrypt:
2150L$_AES_decrypt_begin:
2151	push	ebp
2152	push	ebx
2153	push	esi
2154	push	edi
2155	mov	esi,DWORD [20+esp]
2156	mov	edi,DWORD [28+esp]
2157	mov	eax,esp
2158	sub	esp,36
2159	and	esp,-64
2160	lea	ebx,[edi-127]
2161	sub	ebx,esp
2162	neg	ebx
2163	and	ebx,960
2164	sub	esp,ebx
2165	add	esp,4
2166	mov	DWORD [28+esp],eax
2167	call	L$010pic_point
2168L$010pic_point:
2169	pop	ebp
2170	lea	eax,[_OPENSSL_ia32cap_P]
2171	lea	ebp,[(L$AES_Td-L$010pic_point)+ebp]
2172	lea	ebx,[764+esp]
2173	sub	ebx,ebp
2174	and	ebx,768
2175	lea	ebp,[2176+ebx*1+ebp]
2176	bt	DWORD [eax],25
2177	jnc	NEAR L$011x86
2178	movq	mm0,[esi]
2179	movq	mm4,[8+esi]
2180	call	__sse_AES_decrypt_compact
2181	mov	esp,DWORD [28+esp]
2182	mov	esi,DWORD [24+esp]
2183	movq	[esi],mm0
2184	movq	[8+esi],mm4
2185	emms
2186	pop	edi
2187	pop	esi
2188	pop	ebx
2189	pop	ebp
2190	ret
2191align	16
2192L$011x86:
2193	mov	DWORD [24+esp],ebp
2194	mov	eax,DWORD [esi]
2195	mov	ebx,DWORD [4+esi]
2196	mov	ecx,DWORD [8+esi]
2197	mov	edx,DWORD [12+esi]
2198	call	__x86_AES_decrypt_compact
2199	mov	esp,DWORD [28+esp]
2200	mov	esi,DWORD [24+esp]
2201	mov	DWORD [esi],eax
2202	mov	DWORD [4+esi],ebx
2203	mov	DWORD [8+esi],ecx
2204	mov	DWORD [12+esi],edx
2205	pop	edi
2206	pop	esi
2207	pop	ebx
2208	pop	ebp
2209	ret
2210global	_AES_cbc_encrypt
2211align	16
2212_AES_cbc_encrypt:
2213L$_AES_cbc_encrypt_begin:
2214	push	ebp
2215	push	ebx
2216	push	esi
2217	push	edi
2218	mov	ecx,DWORD [28+esp]
2219	cmp	ecx,0
2220	je	NEAR L$012drop_out
2221	call	L$013pic_point
2222L$013pic_point:
2223	pop	ebp
2224	lea	eax,[_OPENSSL_ia32cap_P]
2225	cmp	DWORD [40+esp],0
2226	lea	ebp,[(L$AES_Te-L$013pic_point)+ebp]
2227	jne	NEAR L$014picked_te
2228	lea	ebp,[(L$AES_Td-L$AES_Te)+ebp]
2229L$014picked_te:
2230	pushfd
2231	cld
2232	cmp	ecx,512
2233	jb	NEAR L$015slow_way
2234	test	ecx,15
2235	jnz	NEAR L$015slow_way
2236	bt	DWORD [eax],28
2237	jc	NEAR L$015slow_way
2238	lea	esi,[esp-324]
2239	and	esi,-64
2240	mov	eax,ebp
2241	lea	ebx,[2304+ebp]
2242	mov	edx,esi
2243	and	eax,4095
2244	and	ebx,4095
2245	and	edx,4095
2246	cmp	edx,ebx
2247	jb	NEAR L$016tbl_break_out
2248	sub	edx,ebx
2249	sub	esi,edx
2250	jmp	NEAR L$017tbl_ok
2251align	4
2252L$016tbl_break_out:
2253	sub	edx,eax
2254	and	edx,4095
2255	add	edx,384
2256	sub	esi,edx
2257align	4
2258L$017tbl_ok:
2259	lea	edx,[24+esp]
2260	xchg	esp,esi
2261	add	esp,4
2262	mov	DWORD [24+esp],ebp
2263	mov	DWORD [28+esp],esi
2264	mov	eax,DWORD [edx]
2265	mov	ebx,DWORD [4+edx]
2266	mov	edi,DWORD [12+edx]
2267	mov	esi,DWORD [16+edx]
2268	mov	edx,DWORD [20+edx]
2269	mov	DWORD [32+esp],eax
2270	mov	DWORD [36+esp],ebx
2271	mov	DWORD [40+esp],ecx
2272	mov	DWORD [44+esp],edi
2273	mov	DWORD [48+esp],esi
2274	mov	DWORD [316+esp],0
2275	mov	ebx,edi
2276	mov	ecx,61
2277	sub	ebx,ebp
2278	mov	esi,edi
2279	and	ebx,4095
2280	lea	edi,[76+esp]
2281	cmp	ebx,2304
2282	jb	NEAR L$018do_copy
2283	cmp	ebx,3852
2284	jb	NEAR L$019skip_copy
2285align	4
2286L$018do_copy:
2287	mov	DWORD [44+esp],edi
2288dd	2784229001
2289L$019skip_copy:
2290	mov	edi,16
2291align	4
2292L$020prefetch_tbl:
2293	mov	eax,DWORD [ebp]
2294	mov	ebx,DWORD [32+ebp]
2295	mov	ecx,DWORD [64+ebp]
2296	mov	esi,DWORD [96+ebp]
2297	lea	ebp,[128+ebp]
2298	sub	edi,1
2299	jnz	NEAR L$020prefetch_tbl
2300	sub	ebp,2048
2301	mov	esi,DWORD [32+esp]
2302	mov	edi,DWORD [48+esp]
2303	cmp	edx,0
2304	je	NEAR L$021fast_decrypt
2305	mov	eax,DWORD [edi]
2306	mov	ebx,DWORD [4+edi]
2307align	16
2308L$022fast_enc_loop:
2309	mov	ecx,DWORD [8+edi]
2310	mov	edx,DWORD [12+edi]
2311	xor	eax,DWORD [esi]
2312	xor	ebx,DWORD [4+esi]
2313	xor	ecx,DWORD [8+esi]
2314	xor	edx,DWORD [12+esi]
2315	mov	edi,DWORD [44+esp]
2316	call	__x86_AES_encrypt
2317	mov	esi,DWORD [32+esp]
2318	mov	edi,DWORD [36+esp]
2319	mov	DWORD [edi],eax
2320	mov	DWORD [4+edi],ebx
2321	mov	DWORD [8+edi],ecx
2322	mov	DWORD [12+edi],edx
2323	lea	esi,[16+esi]
2324	mov	ecx,DWORD [40+esp]
2325	mov	DWORD [32+esp],esi
2326	lea	edx,[16+edi]
2327	mov	DWORD [36+esp],edx
2328	sub	ecx,16
2329	mov	DWORD [40+esp],ecx
2330	jnz	NEAR L$022fast_enc_loop
2331	mov	esi,DWORD [48+esp]
2332	mov	ecx,DWORD [8+edi]
2333	mov	edx,DWORD [12+edi]
2334	mov	DWORD [esi],eax
2335	mov	DWORD [4+esi],ebx
2336	mov	DWORD [8+esi],ecx
2337	mov	DWORD [12+esi],edx
2338	cmp	DWORD [316+esp],0
2339	mov	edi,DWORD [44+esp]
2340	je	NEAR L$023skip_ezero
2341	mov	ecx,60
2342	xor	eax,eax
2343align	4
2344dd	2884892297
2345L$023skip_ezero:
2346	mov	esp,DWORD [28+esp]
2347	popfd
2348L$012drop_out:
2349	pop	edi
2350	pop	esi
2351	pop	ebx
2352	pop	ebp
2353	ret
2354	pushfd
2355align	16
2356L$021fast_decrypt:
2357	cmp	esi,DWORD [36+esp]
2358	je	NEAR L$024fast_dec_in_place
2359	mov	DWORD [52+esp],edi
2360align	4
2361align	16
2362L$025fast_dec_loop:
2363	mov	eax,DWORD [esi]
2364	mov	ebx,DWORD [4+esi]
2365	mov	ecx,DWORD [8+esi]
2366	mov	edx,DWORD [12+esi]
2367	mov	edi,DWORD [44+esp]
2368	call	__x86_AES_decrypt
2369	mov	edi,DWORD [52+esp]
2370	mov	esi,DWORD [40+esp]
2371	xor	eax,DWORD [edi]
2372	xor	ebx,DWORD [4+edi]
2373	xor	ecx,DWORD [8+edi]
2374	xor	edx,DWORD [12+edi]
2375	mov	edi,DWORD [36+esp]
2376	mov	esi,DWORD [32+esp]
2377	mov	DWORD [edi],eax
2378	mov	DWORD [4+edi],ebx
2379	mov	DWORD [8+edi],ecx
2380	mov	DWORD [12+edi],edx
2381	mov	ecx,DWORD [40+esp]
2382	mov	DWORD [52+esp],esi
2383	lea	esi,[16+esi]
2384	mov	DWORD [32+esp],esi
2385	lea	edi,[16+edi]
2386	mov	DWORD [36+esp],edi
2387	sub	ecx,16
2388	mov	DWORD [40+esp],ecx
2389	jnz	NEAR L$025fast_dec_loop
2390	mov	edi,DWORD [52+esp]
2391	mov	esi,DWORD [48+esp]
2392	mov	eax,DWORD [edi]
2393	mov	ebx,DWORD [4+edi]
2394	mov	ecx,DWORD [8+edi]
2395	mov	edx,DWORD [12+edi]
2396	mov	DWORD [esi],eax
2397	mov	DWORD [4+esi],ebx
2398	mov	DWORD [8+esi],ecx
2399	mov	DWORD [12+esi],edx
2400	jmp	NEAR L$026fast_dec_out
2401align	16
2402L$024fast_dec_in_place:
2403L$027fast_dec_in_place_loop:
2404	mov	eax,DWORD [esi]
2405	mov	ebx,DWORD [4+esi]
2406	mov	ecx,DWORD [8+esi]
2407	mov	edx,DWORD [12+esi]
2408	lea	edi,[60+esp]
2409	mov	DWORD [edi],eax
2410	mov	DWORD [4+edi],ebx
2411	mov	DWORD [8+edi],ecx
2412	mov	DWORD [12+edi],edx
2413	mov	edi,DWORD [44+esp]
2414	call	__x86_AES_decrypt
2415	mov	edi,DWORD [48+esp]
2416	mov	esi,DWORD [36+esp]
2417	xor	eax,DWORD [edi]
2418	xor	ebx,DWORD [4+edi]
2419	xor	ecx,DWORD [8+edi]
2420	xor	edx,DWORD [12+edi]
2421	mov	DWORD [esi],eax
2422	mov	DWORD [4+esi],ebx
2423	mov	DWORD [8+esi],ecx
2424	mov	DWORD [12+esi],edx
2425	lea	esi,[16+esi]
2426	mov	DWORD [36+esp],esi
2427	lea	esi,[60+esp]
2428	mov	eax,DWORD [esi]
2429	mov	ebx,DWORD [4+esi]
2430	mov	ecx,DWORD [8+esi]
2431	mov	edx,DWORD [12+esi]
2432	mov	DWORD [edi],eax
2433	mov	DWORD [4+edi],ebx
2434	mov	DWORD [8+edi],ecx
2435	mov	DWORD [12+edi],edx
2436	mov	esi,DWORD [32+esp]
2437	mov	ecx,DWORD [40+esp]
2438	lea	esi,[16+esi]
2439	mov	DWORD [32+esp],esi
2440	sub	ecx,16
2441	mov	DWORD [40+esp],ecx
2442	jnz	NEAR L$027fast_dec_in_place_loop
2443align	4
2444L$026fast_dec_out:
2445	cmp	DWORD [316+esp],0
2446	mov	edi,DWORD [44+esp]
2447	je	NEAR L$028skip_dzero
2448	mov	ecx,60
2449	xor	eax,eax
2450align	4
2451dd	2884892297
2452L$028skip_dzero:
2453	mov	esp,DWORD [28+esp]
2454	popfd
2455	pop	edi
2456	pop	esi
2457	pop	ebx
2458	pop	ebp
2459	ret
2460	pushfd
2461align	16
2462L$015slow_way:
2463	mov	eax,DWORD [eax]
2464	mov	edi,DWORD [36+esp]
2465	lea	esi,[esp-80]
2466	and	esi,-64
2467	lea	ebx,[edi-143]
2468	sub	ebx,esi
2469	neg	ebx
2470	and	ebx,960
2471	sub	esi,ebx
2472	lea	ebx,[768+esi]
2473	sub	ebx,ebp
2474	and	ebx,768
2475	lea	ebp,[2176+ebx*1+ebp]
2476	lea	edx,[24+esp]
2477	xchg	esp,esi
2478	add	esp,4
2479	mov	DWORD [24+esp],ebp
2480	mov	DWORD [28+esp],esi
2481	mov	DWORD [52+esp],eax
2482	mov	eax,DWORD [edx]
2483	mov	ebx,DWORD [4+edx]
2484	mov	esi,DWORD [16+edx]
2485	mov	edx,DWORD [20+edx]
2486	mov	DWORD [32+esp],eax
2487	mov	DWORD [36+esp],ebx
2488	mov	DWORD [40+esp],ecx
2489	mov	DWORD [44+esp],edi
2490	mov	DWORD [48+esp],esi
2491	mov	edi,esi
2492	mov	esi,eax
2493	cmp	edx,0
2494	je	NEAR L$029slow_decrypt
2495	cmp	ecx,16
2496	mov	edx,ebx
2497	jb	NEAR L$030slow_enc_tail
2498	bt	DWORD [52+esp],25
2499	jnc	NEAR L$031slow_enc_x86
2500	movq	mm0,[edi]
2501	movq	mm4,[8+edi]
2502align	16
2503L$032slow_enc_loop_sse:
2504	pxor	mm0,[esi]
2505	pxor	mm4,[8+esi]
2506	mov	edi,DWORD [44+esp]
2507	call	__sse_AES_encrypt_compact
2508	mov	esi,DWORD [32+esp]
2509	mov	edi,DWORD [36+esp]
2510	mov	ecx,DWORD [40+esp]
2511	movq	[edi],mm0
2512	movq	[8+edi],mm4
2513	lea	esi,[16+esi]
2514	mov	DWORD [32+esp],esi
2515	lea	edx,[16+edi]
2516	mov	DWORD [36+esp],edx
2517	sub	ecx,16
2518	cmp	ecx,16
2519	mov	DWORD [40+esp],ecx
2520	jae	NEAR L$032slow_enc_loop_sse
2521	test	ecx,15
2522	jnz	NEAR L$030slow_enc_tail
2523	mov	esi,DWORD [48+esp]
2524	movq	[esi],mm0
2525	movq	[8+esi],mm4
2526	emms
2527	mov	esp,DWORD [28+esp]
2528	popfd
2529	pop	edi
2530	pop	esi
2531	pop	ebx
2532	pop	ebp
2533	ret
2534	pushfd
2535align	16
2536L$031slow_enc_x86:
2537	mov	eax,DWORD [edi]
2538	mov	ebx,DWORD [4+edi]
2539align	4
2540L$033slow_enc_loop_x86:
2541	mov	ecx,DWORD [8+edi]
2542	mov	edx,DWORD [12+edi]
2543	xor	eax,DWORD [esi]
2544	xor	ebx,DWORD [4+esi]
2545	xor	ecx,DWORD [8+esi]
2546	xor	edx,DWORD [12+esi]
2547	mov	edi,DWORD [44+esp]
2548	call	__x86_AES_encrypt_compact
2549	mov	esi,DWORD [32+esp]
2550	mov	edi,DWORD [36+esp]
2551	mov	DWORD [edi],eax
2552	mov	DWORD [4+edi],ebx
2553	mov	DWORD [8+edi],ecx
2554	mov	DWORD [12+edi],edx
2555	mov	ecx,DWORD [40+esp]
2556	lea	esi,[16+esi]
2557	mov	DWORD [32+esp],esi
2558	lea	edx,[16+edi]
2559	mov	DWORD [36+esp],edx
2560	sub	ecx,16
2561	cmp	ecx,16
2562	mov	DWORD [40+esp],ecx
2563	jae	NEAR L$033slow_enc_loop_x86
2564	test	ecx,15
2565	jnz	NEAR L$030slow_enc_tail
2566	mov	esi,DWORD [48+esp]
2567	mov	ecx,DWORD [8+edi]
2568	mov	edx,DWORD [12+edi]
2569	mov	DWORD [esi],eax
2570	mov	DWORD [4+esi],ebx
2571	mov	DWORD [8+esi],ecx
2572	mov	DWORD [12+esi],edx
2573	mov	esp,DWORD [28+esp]
2574	popfd
2575	pop	edi
2576	pop	esi
2577	pop	ebx
2578	pop	ebp
2579	ret
2580	pushfd
2581align	16
2582L$030slow_enc_tail:
2583	emms
2584	mov	edi,edx
2585	mov	ebx,16
2586	sub	ebx,ecx
2587	cmp	edi,esi
2588	je	NEAR L$034enc_in_place
2589align	4
2590dd	2767451785
2591	jmp	NEAR L$035enc_skip_in_place
2592L$034enc_in_place:
2593	lea	edi,[ecx*1+edi]
2594L$035enc_skip_in_place:
2595	mov	ecx,ebx
2596	xor	eax,eax
2597align	4
2598dd	2868115081
2599	mov	edi,DWORD [48+esp]
2600	mov	esi,edx
2601	mov	eax,DWORD [edi]
2602	mov	ebx,DWORD [4+edi]
2603	mov	DWORD [40+esp],16
2604	jmp	NEAR L$033slow_enc_loop_x86
2605align	16
2606L$029slow_decrypt:
2607	bt	DWORD [52+esp],25
2608	jnc	NEAR L$036slow_dec_loop_x86
2609align	4
2610L$037slow_dec_loop_sse:
2611	movq	mm0,[esi]
2612	movq	mm4,[8+esi]
2613	mov	edi,DWORD [44+esp]
2614	call	__sse_AES_decrypt_compact
2615	mov	esi,DWORD [32+esp]
2616	lea	eax,[60+esp]
2617	mov	ebx,DWORD [36+esp]
2618	mov	ecx,DWORD [40+esp]
2619	mov	edi,DWORD [48+esp]
2620	movq	mm1,[esi]
2621	movq	mm5,[8+esi]
2622	pxor	mm0,[edi]
2623	pxor	mm4,[8+edi]
2624	movq	[edi],mm1
2625	movq	[8+edi],mm5
2626	sub	ecx,16
2627	jc	NEAR L$038slow_dec_partial_sse
2628	movq	[ebx],mm0
2629	movq	[8+ebx],mm4
2630	lea	ebx,[16+ebx]
2631	mov	DWORD [36+esp],ebx
2632	lea	esi,[16+esi]
2633	mov	DWORD [32+esp],esi
2634	mov	DWORD [40+esp],ecx
2635	jnz	NEAR L$037slow_dec_loop_sse
2636	emms
2637	mov	esp,DWORD [28+esp]
2638	popfd
2639	pop	edi
2640	pop	esi
2641	pop	ebx
2642	pop	ebp
2643	ret
2644	pushfd
2645align	16
2646L$038slow_dec_partial_sse:
2647	movq	[eax],mm0
2648	movq	[8+eax],mm4
2649	emms
2650	add	ecx,16
2651	mov	edi,ebx
2652	mov	esi,eax
2653align	4
2654dd	2767451785
2655	mov	esp,DWORD [28+esp]
2656	popfd
2657	pop	edi
2658	pop	esi
2659	pop	ebx
2660	pop	ebp
2661	ret
2662	pushfd
2663align	16
2664L$036slow_dec_loop_x86:
2665	mov	eax,DWORD [esi]
2666	mov	ebx,DWORD [4+esi]
2667	mov	ecx,DWORD [8+esi]
2668	mov	edx,DWORD [12+esi]
2669	lea	edi,[60+esp]
2670	mov	DWORD [edi],eax
2671	mov	DWORD [4+edi],ebx
2672	mov	DWORD [8+edi],ecx
2673	mov	DWORD [12+edi],edx
2674	mov	edi,DWORD [44+esp]
2675	call	__x86_AES_decrypt_compact
2676	mov	edi,DWORD [48+esp]
2677	mov	esi,DWORD [40+esp]
2678	xor	eax,DWORD [edi]
2679	xor	ebx,DWORD [4+edi]
2680	xor	ecx,DWORD [8+edi]
2681	xor	edx,DWORD [12+edi]
2682	sub	esi,16
2683	jc	NEAR L$039slow_dec_partial_x86
2684	mov	DWORD [40+esp],esi
2685	mov	esi,DWORD [36+esp]
2686	mov	DWORD [esi],eax
2687	mov	DWORD [4+esi],ebx
2688	mov	DWORD [8+esi],ecx
2689	mov	DWORD [12+esi],edx
2690	lea	esi,[16+esi]
2691	mov	DWORD [36+esp],esi
2692	lea	esi,[60+esp]
2693	mov	eax,DWORD [esi]
2694	mov	ebx,DWORD [4+esi]
2695	mov	ecx,DWORD [8+esi]
2696	mov	edx,DWORD [12+esi]
2697	mov	DWORD [edi],eax
2698	mov	DWORD [4+edi],ebx
2699	mov	DWORD [8+edi],ecx
2700	mov	DWORD [12+edi],edx
2701	mov	esi,DWORD [32+esp]
2702	lea	esi,[16+esi]
2703	mov	DWORD [32+esp],esi
2704	jnz	NEAR L$036slow_dec_loop_x86
2705	mov	esp,DWORD [28+esp]
2706	popfd
2707	pop	edi
2708	pop	esi
2709	pop	ebx
2710	pop	ebp
2711	ret
2712	pushfd
2713align	16
2714L$039slow_dec_partial_x86:
2715	lea	esi,[60+esp]
2716	mov	DWORD [esi],eax
2717	mov	DWORD [4+esi],ebx
2718	mov	DWORD [8+esi],ecx
2719	mov	DWORD [12+esi],edx
2720	mov	esi,DWORD [32+esp]
2721	mov	eax,DWORD [esi]
2722	mov	ebx,DWORD [4+esi]
2723	mov	ecx,DWORD [8+esi]
2724	mov	edx,DWORD [12+esi]
2725	mov	DWORD [edi],eax
2726	mov	DWORD [4+edi],ebx
2727	mov	DWORD [8+edi],ecx
2728	mov	DWORD [12+edi],edx
2729	mov	ecx,DWORD [40+esp]
2730	mov	edi,DWORD [36+esp]
2731	lea	esi,[60+esp]
2732align	4
2733dd	2767451785
2734	mov	esp,DWORD [28+esp]
2735	popfd
2736	pop	edi
2737	pop	esi
2738	pop	ebx
2739	pop	ebp
2740	ret
2741align	16
2742__x86_AES_set_encrypt_key:
2743	push	ebp
2744	push	ebx
2745	push	esi
2746	push	edi
2747	mov	esi,DWORD [24+esp]
2748	mov	edi,DWORD [32+esp]
2749	test	esi,-1
2750	jz	NEAR L$040badpointer
2751	test	edi,-1
2752	jz	NEAR L$040badpointer
2753	call	L$041pic_point
2754L$041pic_point:
2755	pop	ebp
2756	lea	ebp,[(L$AES_Te-L$041pic_point)+ebp]
2757	lea	ebp,[2176+ebp]
2758	mov	eax,DWORD [ebp-128]
2759	mov	ebx,DWORD [ebp-96]
2760	mov	ecx,DWORD [ebp-64]
2761	mov	edx,DWORD [ebp-32]
2762	mov	eax,DWORD [ebp]
2763	mov	ebx,DWORD [32+ebp]
2764	mov	ecx,DWORD [64+ebp]
2765	mov	edx,DWORD [96+ebp]
2766	mov	ecx,DWORD [28+esp]
2767	cmp	ecx,128
2768	je	NEAR L$04210rounds
2769	cmp	ecx,192
2770	je	NEAR L$04312rounds
2771	cmp	ecx,256
2772	je	NEAR L$04414rounds
2773	mov	eax,-2
2774	jmp	NEAR L$045exit
2775L$04210rounds:
2776	mov	eax,DWORD [esi]
2777	mov	ebx,DWORD [4+esi]
2778	mov	ecx,DWORD [8+esi]
2779	mov	edx,DWORD [12+esi]
2780	mov	DWORD [edi],eax
2781	mov	DWORD [4+edi],ebx
2782	mov	DWORD [8+edi],ecx
2783	mov	DWORD [12+edi],edx
2784	xor	ecx,ecx
2785	jmp	NEAR L$04610shortcut
2786align	4
2787L$04710loop:
2788	mov	eax,DWORD [edi]
2789	mov	edx,DWORD [12+edi]
2790L$04610shortcut:
2791	movzx	esi,dl
2792	movzx	ebx,BYTE [esi*1+ebp-128]
2793	movzx	esi,dh
2794	shl	ebx,24
2795	xor	eax,ebx
2796	movzx	ebx,BYTE [esi*1+ebp-128]
2797	shr	edx,16
2798	movzx	esi,dl
2799	xor	eax,ebx
2800	movzx	ebx,BYTE [esi*1+ebp-128]
2801	movzx	esi,dh
2802	shl	ebx,8
2803	xor	eax,ebx
2804	movzx	ebx,BYTE [esi*1+ebp-128]
2805	shl	ebx,16
2806	xor	eax,ebx
2807	xor	eax,DWORD [896+ecx*4+ebp]
2808	mov	DWORD [16+edi],eax
2809	xor	eax,DWORD [4+edi]
2810	mov	DWORD [20+edi],eax
2811	xor	eax,DWORD [8+edi]
2812	mov	DWORD [24+edi],eax
2813	xor	eax,DWORD [12+edi]
2814	mov	DWORD [28+edi],eax
2815	inc	ecx
2816	add	edi,16
2817	cmp	ecx,10
2818	jl	NEAR L$04710loop
2819	mov	DWORD [80+edi],10
2820	xor	eax,eax
2821	jmp	NEAR L$045exit
2822L$04312rounds:
2823	mov	eax,DWORD [esi]
2824	mov	ebx,DWORD [4+esi]
2825	mov	ecx,DWORD [8+esi]
2826	mov	edx,DWORD [12+esi]
2827	mov	DWORD [edi],eax
2828	mov	DWORD [4+edi],ebx
2829	mov	DWORD [8+edi],ecx
2830	mov	DWORD [12+edi],edx
2831	mov	ecx,DWORD [16+esi]
2832	mov	edx,DWORD [20+esi]
2833	mov	DWORD [16+edi],ecx
2834	mov	DWORD [20+edi],edx
2835	xor	ecx,ecx
2836	jmp	NEAR L$04812shortcut
2837align	4
2838L$04912loop:
2839	mov	eax,DWORD [edi]
2840	mov	edx,DWORD [20+edi]
2841L$04812shortcut:
2842	movzx	esi,dl
2843	movzx	ebx,BYTE [esi*1+ebp-128]
2844	movzx	esi,dh
2845	shl	ebx,24
2846	xor	eax,ebx
2847	movzx	ebx,BYTE [esi*1+ebp-128]
2848	shr	edx,16
2849	movzx	esi,dl
2850	xor	eax,ebx
2851	movzx	ebx,BYTE [esi*1+ebp-128]
2852	movzx	esi,dh
2853	shl	ebx,8
2854	xor	eax,ebx
2855	movzx	ebx,BYTE [esi*1+ebp-128]
2856	shl	ebx,16
2857	xor	eax,ebx
2858	xor	eax,DWORD [896+ecx*4+ebp]
2859	mov	DWORD [24+edi],eax
2860	xor	eax,DWORD [4+edi]
2861	mov	DWORD [28+edi],eax
2862	xor	eax,DWORD [8+edi]
2863	mov	DWORD [32+edi],eax
2864	xor	eax,DWORD [12+edi]
2865	mov	DWORD [36+edi],eax
2866	cmp	ecx,7
2867	je	NEAR L$05012break
2868	inc	ecx
2869	xor	eax,DWORD [16+edi]
2870	mov	DWORD [40+edi],eax
2871	xor	eax,DWORD [20+edi]
2872	mov	DWORD [44+edi],eax
2873	add	edi,24
2874	jmp	NEAR L$04912loop
2875L$05012break:
2876	mov	DWORD [72+edi],12
2877	xor	eax,eax
2878	jmp	NEAR L$045exit
2879L$04414rounds:
2880	mov	eax,DWORD [esi]
2881	mov	ebx,DWORD [4+esi]
2882	mov	ecx,DWORD [8+esi]
2883	mov	edx,DWORD [12+esi]
2884	mov	DWORD [edi],eax
2885	mov	DWORD [4+edi],ebx
2886	mov	DWORD [8+edi],ecx
2887	mov	DWORD [12+edi],edx
2888	mov	eax,DWORD [16+esi]
2889	mov	ebx,DWORD [20+esi]
2890	mov	ecx,DWORD [24+esi]
2891	mov	edx,DWORD [28+esi]
2892	mov	DWORD [16+edi],eax
2893	mov	DWORD [20+edi],ebx
2894	mov	DWORD [24+edi],ecx
2895	mov	DWORD [28+edi],edx
2896	xor	ecx,ecx
2897	jmp	NEAR L$05114shortcut
2898align	4
2899L$05214loop:
2900	mov	edx,DWORD [28+edi]
2901L$05114shortcut:
2902	mov	eax,DWORD [edi]
2903	movzx	esi,dl
2904	movzx	ebx,BYTE [esi*1+ebp-128]
2905	movzx	esi,dh
2906	shl	ebx,24
2907	xor	eax,ebx
2908	movzx	ebx,BYTE [esi*1+ebp-128]
2909	shr	edx,16
2910	movzx	esi,dl
2911	xor	eax,ebx
2912	movzx	ebx,BYTE [esi*1+ebp-128]
2913	movzx	esi,dh
2914	shl	ebx,8
2915	xor	eax,ebx
2916	movzx	ebx,BYTE [esi*1+ebp-128]
2917	shl	ebx,16
2918	xor	eax,ebx
2919	xor	eax,DWORD [896+ecx*4+ebp]
2920	mov	DWORD [32+edi],eax
2921	xor	eax,DWORD [4+edi]
2922	mov	DWORD [36+edi],eax
2923	xor	eax,DWORD [8+edi]
2924	mov	DWORD [40+edi],eax
2925	xor	eax,DWORD [12+edi]
2926	mov	DWORD [44+edi],eax
2927	cmp	ecx,6
2928	je	NEAR L$05314break
2929	inc	ecx
2930	mov	edx,eax
2931	mov	eax,DWORD [16+edi]
2932	movzx	esi,dl
2933	movzx	ebx,BYTE [esi*1+ebp-128]
2934	movzx	esi,dh
2935	xor	eax,ebx
2936	movzx	ebx,BYTE [esi*1+ebp-128]
2937	shr	edx,16
2938	shl	ebx,8
2939	movzx	esi,dl
2940	xor	eax,ebx
2941	movzx	ebx,BYTE [esi*1+ebp-128]
2942	movzx	esi,dh
2943	shl	ebx,16
2944	xor	eax,ebx
2945	movzx	ebx,BYTE [esi*1+ebp-128]
2946	shl	ebx,24
2947	xor	eax,ebx
2948	mov	DWORD [48+edi],eax
2949	xor	eax,DWORD [20+edi]
2950	mov	DWORD [52+edi],eax
2951	xor	eax,DWORD [24+edi]
2952	mov	DWORD [56+edi],eax
2953	xor	eax,DWORD [28+edi]
2954	mov	DWORD [60+edi],eax
2955	add	edi,32
2956	jmp	NEAR L$05214loop
2957L$05314break:
2958	mov	DWORD [48+edi],14
2959	xor	eax,eax
2960	jmp	NEAR L$045exit
2961L$040badpointer:
2962	mov	eax,-1
2963L$045exit:
2964	pop	edi
2965	pop	esi
2966	pop	ebx
2967	pop	ebp
2968	ret
2969global	_AES_set_encrypt_key
2970align	16
2971_AES_set_encrypt_key:
2972L$_AES_set_encrypt_key_begin:
2973	call	__x86_AES_set_encrypt_key
2974	ret
2975global	_AES_set_decrypt_key
2976align	16
2977_AES_set_decrypt_key:
2978L$_AES_set_decrypt_key_begin:
2979	call	__x86_AES_set_encrypt_key
2980	cmp	eax,0
2981	je	NEAR L$054proceed
2982	ret
2983L$054proceed:
2984	push	ebp
2985	push	ebx
2986	push	esi
2987	push	edi
2988	mov	esi,DWORD [28+esp]
2989	mov	ecx,DWORD [240+esi]
2990	lea	ecx,[ecx*4]
2991	lea	edi,[ecx*4+esi]
2992align	4
2993L$055invert:
2994	mov	eax,DWORD [esi]
2995	mov	ebx,DWORD [4+esi]
2996	mov	ecx,DWORD [edi]
2997	mov	edx,DWORD [4+edi]
2998	mov	DWORD [edi],eax
2999	mov	DWORD [4+edi],ebx
3000	mov	DWORD [esi],ecx
3001	mov	DWORD [4+esi],edx
3002	mov	eax,DWORD [8+esi]
3003	mov	ebx,DWORD [12+esi]
3004	mov	ecx,DWORD [8+edi]
3005	mov	edx,DWORD [12+edi]
3006	mov	DWORD [8+edi],eax
3007	mov	DWORD [12+edi],ebx
3008	mov	DWORD [8+esi],ecx
3009	mov	DWORD [12+esi],edx
3010	add	esi,16
3011	sub	edi,16
3012	cmp	esi,edi
3013	jne	NEAR L$055invert
3014	mov	edi,DWORD [28+esp]
3015	mov	esi,DWORD [240+edi]
3016	lea	esi,[esi*1+esi-2]
3017	lea	esi,[esi*8+edi]
3018	mov	DWORD [28+esp],esi
3019	mov	eax,DWORD [16+edi]
3020align	4
3021L$056permute:
3022	add	edi,16
3023	mov	ebp,2155905152
3024	and	ebp,eax
3025	lea	ebx,[eax*1+eax]
3026	mov	esi,ebp
3027	shr	ebp,7
3028	sub	esi,ebp
3029	and	ebx,4278124286
3030	and	esi,454761243
3031	xor	ebx,esi
3032	mov	ebp,2155905152
3033	and	ebp,ebx
3034	lea	ecx,[ebx*1+ebx]
3035	mov	esi,ebp
3036	shr	ebp,7
3037	sub	esi,ebp
3038	and	ecx,4278124286
3039	and	esi,454761243
3040	xor	ebx,eax
3041	xor	ecx,esi
3042	mov	ebp,2155905152
3043	and	ebp,ecx
3044	lea	edx,[ecx*1+ecx]
3045	mov	esi,ebp
3046	shr	ebp,7
3047	xor	ecx,eax
3048	sub	esi,ebp
3049	and	edx,4278124286
3050	and	esi,454761243
3051	rol	eax,8
3052	xor	edx,esi
3053	mov	ebp,DWORD [4+edi]
3054	xor	eax,ebx
3055	xor	ebx,edx
3056	xor	eax,ecx
3057	rol	ebx,24
3058	xor	ecx,edx
3059	xor	eax,edx
3060	rol	ecx,16
3061	xor	eax,ebx
3062	rol	edx,8
3063	xor	eax,ecx
3064	mov	ebx,ebp
3065	xor	eax,edx
3066	mov	DWORD [edi],eax
3067	mov	ebp,2155905152
3068	and	ebp,ebx
3069	lea	ecx,[ebx*1+ebx]
3070	mov	esi,ebp
3071	shr	ebp,7
3072	sub	esi,ebp
3073	and	ecx,4278124286
3074	and	esi,454761243
3075	xor	ecx,esi
3076	mov	ebp,2155905152
3077	and	ebp,ecx
3078	lea	edx,[ecx*1+ecx]
3079	mov	esi,ebp
3080	shr	ebp,7
3081	sub	esi,ebp
3082	and	edx,4278124286
3083	and	esi,454761243
3084	xor	ecx,ebx
3085	xor	edx,esi
3086	mov	ebp,2155905152
3087	and	ebp,edx
3088	lea	eax,[edx*1+edx]
3089	mov	esi,ebp
3090	shr	ebp,7
3091	xor	edx,ebx
3092	sub	esi,ebp
3093	and	eax,4278124286
3094	and	esi,454761243
3095	rol	ebx,8
3096	xor	eax,esi
3097	mov	ebp,DWORD [8+edi]
3098	xor	ebx,ecx
3099	xor	ecx,eax
3100	xor	ebx,edx
3101	rol	ecx,24
3102	xor	edx,eax
3103	xor	ebx,eax
3104	rol	edx,16
3105	xor	ebx,ecx
3106	rol	eax,8
3107	xor	ebx,edx
3108	mov	ecx,ebp
3109	xor	ebx,eax
3110	mov	DWORD [4+edi],ebx
3111	mov	ebp,2155905152
3112	and	ebp,ecx
3113	lea	edx,[ecx*1+ecx]
3114	mov	esi,ebp
3115	shr	ebp,7
3116	sub	esi,ebp
3117	and	edx,4278124286
3118	and	esi,454761243
3119	xor	edx,esi
3120	mov	ebp,2155905152
3121	and	ebp,edx
3122	lea	eax,[edx*1+edx]
3123	mov	esi,ebp
3124	shr	ebp,7
3125	sub	esi,ebp
3126	and	eax,4278124286
3127	and	esi,454761243
3128	xor	edx,ecx
3129	xor	eax,esi
3130	mov	ebp,2155905152
3131	and	ebp,eax
3132	lea	ebx,[eax*1+eax]
3133	mov	esi,ebp
3134	shr	ebp,7
3135	xor	eax,ecx
3136	sub	esi,ebp
3137	and	ebx,4278124286
3138	and	esi,454761243
3139	rol	ecx,8
3140	xor	ebx,esi
3141	mov	ebp,DWORD [12+edi]
3142	xor	ecx,edx
3143	xor	edx,ebx
3144	xor	ecx,eax
3145	rol	edx,24
3146	xor	eax,ebx
3147	xor	ecx,ebx
3148	rol	eax,16
3149	xor	ecx,edx
3150	rol	ebx,8
3151	xor	ecx,eax
3152	mov	edx,ebp
3153	xor	ecx,ebx
3154	mov	DWORD [8+edi],ecx
3155	mov	ebp,2155905152
3156	and	ebp,edx
3157	lea	eax,[edx*1+edx]
3158	mov	esi,ebp
3159	shr	ebp,7
3160	sub	esi,ebp
3161	and	eax,4278124286
3162	and	esi,454761243
3163	xor	eax,esi
3164	mov	ebp,2155905152
3165	and	ebp,eax
3166	lea	ebx,[eax*1+eax]
3167	mov	esi,ebp
3168	shr	ebp,7
3169	sub	esi,ebp
3170	and	ebx,4278124286
3171	and	esi,454761243
3172	xor	eax,edx
3173	xor	ebx,esi
3174	mov	ebp,2155905152
3175	and	ebp,ebx
3176	lea	ecx,[ebx*1+ebx]
3177	mov	esi,ebp
3178	shr	ebp,7
3179	xor	ebx,edx
3180	sub	esi,ebp
3181	and	ecx,4278124286
3182	and	esi,454761243
3183	rol	edx,8
3184	xor	ecx,esi
3185	mov	ebp,DWORD [16+edi]
3186	xor	edx,eax
3187	xor	eax,ecx
3188	xor	edx,ebx
3189	rol	eax,24
3190	xor	ebx,ecx
3191	xor	edx,ecx
3192	rol	ebx,16
3193	xor	edx,eax
3194	rol	ecx,8
3195	xor	edx,ebx
3196	mov	eax,ebp
3197	xor	edx,ecx
3198	mov	DWORD [12+edi],edx
3199	cmp	edi,DWORD [28+esp]
3200	jb	NEAR L$056permute
3201	xor	eax,eax
3202	pop	edi
3203	pop	esi
3204	pop	ebx
3205	pop	ebp
3206	ret
3207db	65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89
3208db	80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
3209db	111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
3210segment	.bss
3211common	_OPENSSL_ia32cap_P 16
3212