• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.text
2.globl	_padlock_capability
3.type	_padlock_capability,@function
4.align	4
5_padlock_capability:
6L_padlock_capability_begin:
7	%ifdef __CET__
8
9.byte	243,15,30,251
10	%endif
11
12	pushl	%ebx
13	pushfl
14	popl	%eax
15	movl	%eax,%ecx
16	xorl	$2097152,%eax
17	pushl	%eax
18	popfl
19	pushfl
20	popl	%eax
21	xorl	%eax,%ecx
22	xorl	%eax,%eax
23	btl	$21,%ecx
24	jnc	L000noluck
25	.byte	0x0f,0xa2
26	xorl	%eax,%eax
27	cmpl	$0x746e6543,%ebx
28	jne	L001zhaoxin
29	cmpl	$0x48727561,%edx
30	jne	L000noluck
31	cmpl	$0x736c7561,%ecx
32	jne	L000noluck
33	jmp	L002zhaoxinEnd
34L001zhaoxin:
35	cmpl	$0x68532020,%ebx
36	jne	L000noluck
37	cmpl	$0x68676e61,%edx
38	jne	L000noluck
39	cmpl	$0x20206961,%ecx
40	jne	L000noluck
41L002zhaoxinEnd:
42	movl	$3221225472,%eax
43	.byte	0x0f,0xa2
44	movl	%eax,%edx
45	xorl	%eax,%eax
46	cmpl	$3221225473,%edx
47	jb	L000noluck
48	movl	$1,%eax
49	.byte	0x0f,0xa2
50	orl	$15,%eax
51	xorl	%ebx,%ebx
52	andl	$4095,%eax
53	cmpl	$1791,%eax
54	sete	%bl
55	movl	$3221225473,%eax
56	pushl	%ebx
57	.byte	0x0f,0xa2
58	popl	%ebx
59	movl	%edx,%eax
60	shll	$4,%ebx
61	andl	$4294967279,%eax
62	orl	%ebx,%eax
63L000noluck:
64	popl	%ebx
65	ret
66.globl	_padlock_key_bswap
67.type	_padlock_key_bswap,@function
68.align	4
69_padlock_key_bswap:
70L_padlock_key_bswap_begin:
71	%ifdef __CET__
72
73.byte	243,15,30,251
74	%endif
75
76	movl	4(%esp),%edx
77	movl	240(%edx),%ecx
78	incl	%ecx
79	shll	$2,%ecx
80L003bswap_loop:
81	movl	(%edx),%eax
82	bswap	%eax
83	movl	%eax,(%edx)
84	leal	4(%edx),%edx
85	subl	$1,%ecx
86	jnz	L003bswap_loop
87	ret
88.globl	_padlock_verify_context
89.type	_padlock_verify_context,@function
90.align	4
91_padlock_verify_context:
92L_padlock_verify_context_begin:
93	%ifdef __CET__
94
95.byte	243,15,30,251
96	%endif
97
98	movl	4(%esp),%edx
99	leal	Lpadlock_saved_context-L004verify_pic_point,%eax
100	pushfl
101	call	__padlock_verify_ctx
102L004verify_pic_point:
103	leal	4(%esp),%esp
104	ret
105.type	__padlock_verify_ctx,@function
106.align	4
107__padlock_verify_ctx:
108	%ifdef __CET__
109
110.byte	243,15,30,251
111	%endif
112
113	addl	(%esp),%eax
114	btl	$30,4(%esp)
115	jnc	L005verified
116	cmpl	(%eax),%edx
117	je	L005verified
118	pushfl
119	popfl
120L005verified:
121	movl	%edx,(%eax)
122	ret
123.globl	_padlock_reload_key
124.type	_padlock_reload_key,@function
125.align	4
126_padlock_reload_key:
127L_padlock_reload_key_begin:
128	%ifdef __CET__
129
130.byte	243,15,30,251
131	%endif
132
133	pushfl
134	popfl
135	ret
136.globl	_padlock_aes_block
137.type	_padlock_aes_block,@function
138.align	4
139_padlock_aes_block:
140L_padlock_aes_block_begin:
141	%ifdef __CET__
142
143.byte	243,15,30,251
144	%endif
145
146	pushl	%edi
147	pushl	%esi
148	pushl	%ebx
149	movl	16(%esp),%edi
150	movl	20(%esp),%esi
151	movl	24(%esp),%edx
152	movl	$1,%ecx
153	leal	32(%edx),%ebx
154	leal	16(%edx),%edx
155.byte	243,15,167,200
156	popl	%ebx
157	popl	%esi
158	popl	%edi
159	ret
160.globl	_padlock_ecb_encrypt
161.type	_padlock_ecb_encrypt,@function
162.align	4
163_padlock_ecb_encrypt:
164L_padlock_ecb_encrypt_begin:
165	%ifdef __CET__
166
167.byte	243,15,30,251
168	%endif
169
170	pushl	%ebp
171	pushl	%ebx
172	pushl	%esi
173	pushl	%edi
174	movl	20(%esp),%edi
175	movl	24(%esp),%esi
176	movl	28(%esp),%edx
177	movl	32(%esp),%ecx
178	testl	$15,%edx
179	jnz	L006ecb_abort
180	testl	$15,%ecx
181	jnz	L006ecb_abort
182	leal	Lpadlock_saved_context-L007ecb_pic_point,%eax
183	pushfl
184	cld
185	call	__padlock_verify_ctx
186L007ecb_pic_point:
187	leal	16(%edx),%edx
188	xorl	%eax,%eax
189	xorl	%ebx,%ebx
190	testl	$32,(%edx)
191	jnz	L008ecb_aligned
192	testl	$15,%edi
193	setz	%al
194	testl	$15,%esi
195	setz	%bl
196	testl	%ebx,%eax
197	jnz	L008ecb_aligned
198	negl	%eax
199	movl	$512,%ebx
200	notl	%eax
201	leal	-24(%esp),%ebp
202	cmpl	%ebx,%ecx
203	cmovcl	%ecx,%ebx
204	andl	%ebx,%eax
205	movl	%ecx,%ebx
206	negl	%eax
207	andl	$511,%ebx
208	leal	(%eax,%ebp,1),%esp
209	movl	$512,%eax
210	cmovzl	%eax,%ebx
211	movl	%ebp,%eax
212	andl	$-16,%ebp
213	andl	$-16,%esp
214	movl	%eax,16(%ebp)
215	cmpl	%ebx,%ecx
216	ja	L009ecb_loop
217	movl	%esi,%eax
218	cmpl	%esp,%ebp
219	cmovel	%edi,%eax
220	addl	%ecx,%eax
221	negl	%eax
222	andl	$4095,%eax
223	cmpl	$128,%eax
224	movl	$-128,%eax
225	cmovael	%ebx,%eax
226	andl	%eax,%ebx
227	jz	L010ecb_unaligned_tail
228	jmp	L009ecb_loop
229.align	4,0x90
230L009ecb_loop:
231	movl	%edi,(%ebp)
232	movl	%esi,4(%ebp)
233	movl	%ecx,8(%ebp)
234	movl	%ebx,%ecx
235	movl	%ebx,12(%ebp)
236	testl	$15,%edi
237	cmovnzl	%esp,%edi
238	testl	$15,%esi
239	jz	L011ecb_inp_aligned
240	shrl	$2,%ecx
241.byte	243,165
242	subl	%ebx,%edi
243	movl	%ebx,%ecx
244	movl	%edi,%esi
245L011ecb_inp_aligned:
246	leal	-16(%edx),%eax
247	leal	16(%edx),%ebx
248	shrl	$4,%ecx
249.byte	243,15,167,200
250	movl	(%ebp),%edi
251	movl	12(%ebp),%ebx
252	testl	$15,%edi
253	jz	L012ecb_out_aligned
254	movl	%ebx,%ecx
255	leal	(%esp),%esi
256	shrl	$2,%ecx
257.byte	243,165
258	subl	%ebx,%edi
259L012ecb_out_aligned:
260	movl	4(%ebp),%esi
261	movl	8(%ebp),%ecx
262	addl	%ebx,%edi
263	addl	%ebx,%esi
264	subl	%ebx,%ecx
265	movl	$512,%ebx
266	jz	L013ecb_break
267	cmpl	%ebx,%ecx
268	jae	L009ecb_loop
269L010ecb_unaligned_tail:
270	xorl	%eax,%eax
271	cmpl	%ebp,%esp
272	cmovel	%ecx,%eax
273	subl	%eax,%esp
274	movl	%edi,%eax
275	movl	%ecx,%ebx
276	shrl	$2,%ecx
277	leal	(%esp),%edi
278.byte	243,165
279	movl	%esp,%esi
280	movl	%eax,%edi
281	movl	%ebx,%ecx
282	jmp	L009ecb_loop
283.align	4,0x90
284L013ecb_break:
285	cmpl	%ebp,%esp
286	je	L014ecb_done
287	pxor	%xmm0,%xmm0
288	leal	(%esp),%eax
289L015ecb_bzero:
290	movaps	%xmm0,(%eax)
291	leal	16(%eax),%eax
292	cmpl	%eax,%ebp
293	ja	L015ecb_bzero
294L014ecb_done:
295	movl	16(%ebp),%ebp
296	leal	24(%ebp),%esp
297	jmp	L016ecb_exit
298.align	4,0x90
299L008ecb_aligned:
300	leal	(%esi,%ecx,1),%ebp
301	negl	%ebp
302	andl	$4095,%ebp
303	xorl	%eax,%eax
304	cmpl	$128,%ebp
305	movl	$127,%ebp
306	cmovael	%eax,%ebp
307	andl	%ecx,%ebp
308	subl	%ebp,%ecx
309	jz	L017ecb_aligned_tail
310	leal	-16(%edx),%eax
311	leal	16(%edx),%ebx
312	shrl	$4,%ecx
313.byte	243,15,167,200
314	testl	%ebp,%ebp
315	jz	L016ecb_exit
316L017ecb_aligned_tail:
317	movl	%ebp,%ecx
318	leal	-24(%esp),%ebp
319	movl	%ebp,%esp
320	movl	%ebp,%eax
321	subl	%ecx,%esp
322	andl	$-16,%ebp
323	andl	$-16,%esp
324	movl	%eax,16(%ebp)
325	movl	%edi,%eax
326	movl	%ecx,%ebx
327	shrl	$2,%ecx
328	leal	(%esp),%edi
329.byte	243,165
330	movl	%esp,%esi
331	movl	%eax,%edi
332	movl	%ebx,%ecx
333	jmp	L009ecb_loop
334L016ecb_exit:
335	movl	$1,%eax
336	leal	4(%esp),%esp
337L006ecb_abort:
338	popl	%edi
339	popl	%esi
340	popl	%ebx
341	popl	%ebp
342	ret
343.globl	_padlock_cbc_encrypt
344.type	_padlock_cbc_encrypt,@function
345.align	4
346_padlock_cbc_encrypt:
347L_padlock_cbc_encrypt_begin:
348	%ifdef __CET__
349
350.byte	243,15,30,251
351	%endif
352
353	pushl	%ebp
354	pushl	%ebx
355	pushl	%esi
356	pushl	%edi
357	movl	20(%esp),%edi
358	movl	24(%esp),%esi
359	movl	28(%esp),%edx
360	movl	32(%esp),%ecx
361	testl	$15,%edx
362	jnz	L018cbc_abort
363	testl	$15,%ecx
364	jnz	L018cbc_abort
365	leal	Lpadlock_saved_context-L019cbc_pic_point,%eax
366	pushfl
367	cld
368	call	__padlock_verify_ctx
369L019cbc_pic_point:
370	leal	16(%edx),%edx
371	xorl	%eax,%eax
372	xorl	%ebx,%ebx
373	testl	$32,(%edx)
374	jnz	L020cbc_aligned
375	testl	$15,%edi
376	setz	%al
377	testl	$15,%esi
378	setz	%bl
379	testl	%ebx,%eax
380	jnz	L020cbc_aligned
381	negl	%eax
382	movl	$512,%ebx
383	notl	%eax
384	leal	-24(%esp),%ebp
385	cmpl	%ebx,%ecx
386	cmovcl	%ecx,%ebx
387	andl	%ebx,%eax
388	movl	%ecx,%ebx
389	negl	%eax
390	andl	$511,%ebx
391	leal	(%eax,%ebp,1),%esp
392	movl	$512,%eax
393	cmovzl	%eax,%ebx
394	movl	%ebp,%eax
395	andl	$-16,%ebp
396	andl	$-16,%esp
397	movl	%eax,16(%ebp)
398	cmpl	%ebx,%ecx
399	ja	L021cbc_loop
400	movl	%esi,%eax
401	cmpl	%esp,%ebp
402	cmovel	%edi,%eax
403	addl	%ecx,%eax
404	negl	%eax
405	andl	$4095,%eax
406	cmpl	$64,%eax
407	movl	$-64,%eax
408	cmovael	%ebx,%eax
409	andl	%eax,%ebx
410	jz	L022cbc_unaligned_tail
411	jmp	L021cbc_loop
412.align	4,0x90
413L021cbc_loop:
414	movl	%edi,(%ebp)
415	movl	%esi,4(%ebp)
416	movl	%ecx,8(%ebp)
417	movl	%ebx,%ecx
418	movl	%ebx,12(%ebp)
419	testl	$15,%edi
420	cmovnzl	%esp,%edi
421	testl	$15,%esi
422	jz	L023cbc_inp_aligned
423	shrl	$2,%ecx
424.byte	243,165
425	subl	%ebx,%edi
426	movl	%ebx,%ecx
427	movl	%edi,%esi
428L023cbc_inp_aligned:
429	leal	-16(%edx),%eax
430	leal	16(%edx),%ebx
431	shrl	$4,%ecx
432.byte	243,15,167,208
433	movaps	(%eax),%xmm0
434	movaps	%xmm0,-16(%edx)
435	movl	(%ebp),%edi
436	movl	12(%ebp),%ebx
437	testl	$15,%edi
438	jz	L024cbc_out_aligned
439	movl	%ebx,%ecx
440	leal	(%esp),%esi
441	shrl	$2,%ecx
442.byte	243,165
443	subl	%ebx,%edi
444L024cbc_out_aligned:
445	movl	4(%ebp),%esi
446	movl	8(%ebp),%ecx
447	addl	%ebx,%edi
448	addl	%ebx,%esi
449	subl	%ebx,%ecx
450	movl	$512,%ebx
451	jz	L025cbc_break
452	cmpl	%ebx,%ecx
453	jae	L021cbc_loop
454L022cbc_unaligned_tail:
455	xorl	%eax,%eax
456	cmpl	%ebp,%esp
457	cmovel	%ecx,%eax
458	subl	%eax,%esp
459	movl	%edi,%eax
460	movl	%ecx,%ebx
461	shrl	$2,%ecx
462	leal	(%esp),%edi
463.byte	243,165
464	movl	%esp,%esi
465	movl	%eax,%edi
466	movl	%ebx,%ecx
467	jmp	L021cbc_loop
468.align	4,0x90
469L025cbc_break:
470	cmpl	%ebp,%esp
471	je	L026cbc_done
472	pxor	%xmm0,%xmm0
473	leal	(%esp),%eax
474L027cbc_bzero:
475	movaps	%xmm0,(%eax)
476	leal	16(%eax),%eax
477	cmpl	%eax,%ebp
478	ja	L027cbc_bzero
479L026cbc_done:
480	movl	16(%ebp),%ebp
481	leal	24(%ebp),%esp
482	jmp	L028cbc_exit
483.align	4,0x90
484L020cbc_aligned:
485	leal	(%esi,%ecx,1),%ebp
486	negl	%ebp
487	andl	$4095,%ebp
488	xorl	%eax,%eax
489	cmpl	$64,%ebp
490	movl	$63,%ebp
491	cmovael	%eax,%ebp
492	andl	%ecx,%ebp
493	subl	%ebp,%ecx
494	jz	L029cbc_aligned_tail
495	leal	-16(%edx),%eax
496	leal	16(%edx),%ebx
497	shrl	$4,%ecx
498.byte	243,15,167,208
499	movaps	(%eax),%xmm0
500	movaps	%xmm0,-16(%edx)
501	testl	%ebp,%ebp
502	jz	L028cbc_exit
503L029cbc_aligned_tail:
504	movl	%ebp,%ecx
505	leal	-24(%esp),%ebp
506	movl	%ebp,%esp
507	movl	%ebp,%eax
508	subl	%ecx,%esp
509	andl	$-16,%ebp
510	andl	$-16,%esp
511	movl	%eax,16(%ebp)
512	movl	%edi,%eax
513	movl	%ecx,%ebx
514	shrl	$2,%ecx
515	leal	(%esp),%edi
516.byte	243,165
517	movl	%esp,%esi
518	movl	%eax,%edi
519	movl	%ebx,%ecx
520	jmp	L021cbc_loop
521L028cbc_exit:
522	movl	$1,%eax
523	leal	4(%esp),%esp
524L018cbc_abort:
525	popl	%edi
526	popl	%esi
527	popl	%ebx
528	popl	%ebp
529	ret
530.globl	_padlock_cfb_encrypt
531.type	_padlock_cfb_encrypt,@function
532.align	4
533_padlock_cfb_encrypt:
534L_padlock_cfb_encrypt_begin:
535	%ifdef __CET__
536
537.byte	243,15,30,251
538	%endif
539
540	pushl	%ebp
541	pushl	%ebx
542	pushl	%esi
543	pushl	%edi
544	movl	20(%esp),%edi
545	movl	24(%esp),%esi
546	movl	28(%esp),%edx
547	movl	32(%esp),%ecx
548	testl	$15,%edx
549	jnz	L030cfb_abort
550	testl	$15,%ecx
551	jnz	L030cfb_abort
552	leal	Lpadlock_saved_context-L031cfb_pic_point,%eax
553	pushfl
554	cld
555	call	__padlock_verify_ctx
556L031cfb_pic_point:
557	leal	16(%edx),%edx
558	xorl	%eax,%eax
559	xorl	%ebx,%ebx
560	testl	$32,(%edx)
561	jnz	L032cfb_aligned
562	testl	$15,%edi
563	setz	%al
564	testl	$15,%esi
565	setz	%bl
566	testl	%ebx,%eax
567	jnz	L032cfb_aligned
568	negl	%eax
569	movl	$512,%ebx
570	notl	%eax
571	leal	-24(%esp),%ebp
572	cmpl	%ebx,%ecx
573	cmovcl	%ecx,%ebx
574	andl	%ebx,%eax
575	movl	%ecx,%ebx
576	negl	%eax
577	andl	$511,%ebx
578	leal	(%eax,%ebp,1),%esp
579	movl	$512,%eax
580	cmovzl	%eax,%ebx
581	movl	%ebp,%eax
582	andl	$-16,%ebp
583	andl	$-16,%esp
584	movl	%eax,16(%ebp)
585	jmp	L033cfb_loop
586.align	4,0x90
587L033cfb_loop:
588	movl	%edi,(%ebp)
589	movl	%esi,4(%ebp)
590	movl	%ecx,8(%ebp)
591	movl	%ebx,%ecx
592	movl	%ebx,12(%ebp)
593	testl	$15,%edi
594	cmovnzl	%esp,%edi
595	testl	$15,%esi
596	jz	L034cfb_inp_aligned
597	shrl	$2,%ecx
598.byte	243,165
599	subl	%ebx,%edi
600	movl	%ebx,%ecx
601	movl	%edi,%esi
602L034cfb_inp_aligned:
603	leal	-16(%edx),%eax
604	leal	16(%edx),%ebx
605	shrl	$4,%ecx
606.byte	243,15,167,224
607	movaps	(%eax),%xmm0
608	movaps	%xmm0,-16(%edx)
609	movl	(%ebp),%edi
610	movl	12(%ebp),%ebx
611	testl	$15,%edi
612	jz	L035cfb_out_aligned
613	movl	%ebx,%ecx
614	leal	(%esp),%esi
615	shrl	$2,%ecx
616.byte	243,165
617	subl	%ebx,%edi
618L035cfb_out_aligned:
619	movl	4(%ebp),%esi
620	movl	8(%ebp),%ecx
621	addl	%ebx,%edi
622	addl	%ebx,%esi
623	subl	%ebx,%ecx
624	movl	$512,%ebx
625	jnz	L033cfb_loop
626	cmpl	%ebp,%esp
627	je	L036cfb_done
628	pxor	%xmm0,%xmm0
629	leal	(%esp),%eax
630L037cfb_bzero:
631	movaps	%xmm0,(%eax)
632	leal	16(%eax),%eax
633	cmpl	%eax,%ebp
634	ja	L037cfb_bzero
635L036cfb_done:
636	movl	16(%ebp),%ebp
637	leal	24(%ebp),%esp
638	jmp	L038cfb_exit
639.align	4,0x90
640L032cfb_aligned:
641	leal	-16(%edx),%eax
642	leal	16(%edx),%ebx
643	shrl	$4,%ecx
644.byte	243,15,167,224
645	movaps	(%eax),%xmm0
646	movaps	%xmm0,-16(%edx)
647L038cfb_exit:
648	movl	$1,%eax
649	leal	4(%esp),%esp
650L030cfb_abort:
651	popl	%edi
652	popl	%esi
653	popl	%ebx
654	popl	%ebp
655	ret
656.globl	_padlock_ofb_encrypt
657.type	_padlock_ofb_encrypt,@function
658.align	4
659_padlock_ofb_encrypt:
660L_padlock_ofb_encrypt_begin:
661	%ifdef __CET__
662
663.byte	243,15,30,251
664	%endif
665
666	pushl	%ebp
667	pushl	%ebx
668	pushl	%esi
669	pushl	%edi
670	movl	20(%esp),%edi
671	movl	24(%esp),%esi
672	movl	28(%esp),%edx
673	movl	32(%esp),%ecx
674	testl	$15,%edx
675	jnz	L039ofb_abort
676	testl	$15,%ecx
677	jnz	L039ofb_abort
678	leal	Lpadlock_saved_context-L040ofb_pic_point,%eax
679	pushfl
680	cld
681	call	__padlock_verify_ctx
682L040ofb_pic_point:
683	leal	16(%edx),%edx
684	xorl	%eax,%eax
685	xorl	%ebx,%ebx
686	testl	$32,(%edx)
687	jnz	L041ofb_aligned
688	testl	$15,%edi
689	setz	%al
690	testl	$15,%esi
691	setz	%bl
692	testl	%ebx,%eax
693	jnz	L041ofb_aligned
694	negl	%eax
695	movl	$512,%ebx
696	notl	%eax
697	leal	-24(%esp),%ebp
698	cmpl	%ebx,%ecx
699	cmovcl	%ecx,%ebx
700	andl	%ebx,%eax
701	movl	%ecx,%ebx
702	negl	%eax
703	andl	$511,%ebx
704	leal	(%eax,%ebp,1),%esp
705	movl	$512,%eax
706	cmovzl	%eax,%ebx
707	movl	%ebp,%eax
708	andl	$-16,%ebp
709	andl	$-16,%esp
710	movl	%eax,16(%ebp)
711	jmp	L042ofb_loop
712.align	4,0x90
713L042ofb_loop:
714	movl	%edi,(%ebp)
715	movl	%esi,4(%ebp)
716	movl	%ecx,8(%ebp)
717	movl	%ebx,%ecx
718	movl	%ebx,12(%ebp)
719	testl	$15,%edi
720	cmovnzl	%esp,%edi
721	testl	$15,%esi
722	jz	L043ofb_inp_aligned
723	shrl	$2,%ecx
724.byte	243,165
725	subl	%ebx,%edi
726	movl	%ebx,%ecx
727	movl	%edi,%esi
728L043ofb_inp_aligned:
729	leal	-16(%edx),%eax
730	leal	16(%edx),%ebx
731	shrl	$4,%ecx
732.byte	243,15,167,232
733	movaps	(%eax),%xmm0
734	movaps	%xmm0,-16(%edx)
735	movl	(%ebp),%edi
736	movl	12(%ebp),%ebx
737	testl	$15,%edi
738	jz	L044ofb_out_aligned
739	movl	%ebx,%ecx
740	leal	(%esp),%esi
741	shrl	$2,%ecx
742.byte	243,165
743	subl	%ebx,%edi
744L044ofb_out_aligned:
745	movl	4(%ebp),%esi
746	movl	8(%ebp),%ecx
747	addl	%ebx,%edi
748	addl	%ebx,%esi
749	subl	%ebx,%ecx
750	movl	$512,%ebx
751	jnz	L042ofb_loop
752	cmpl	%ebp,%esp
753	je	L045ofb_done
754	pxor	%xmm0,%xmm0
755	leal	(%esp),%eax
756L046ofb_bzero:
757	movaps	%xmm0,(%eax)
758	leal	16(%eax),%eax
759	cmpl	%eax,%ebp
760	ja	L046ofb_bzero
761L045ofb_done:
762	movl	16(%ebp),%ebp
763	leal	24(%ebp),%esp
764	jmp	L047ofb_exit
765.align	4,0x90
766L041ofb_aligned:
767	leal	-16(%edx),%eax
768	leal	16(%edx),%ebx
769	shrl	$4,%ecx
770.byte	243,15,167,232
771	movaps	(%eax),%xmm0
772	movaps	%xmm0,-16(%edx)
773L047ofb_exit:
774	movl	$1,%eax
775	leal	4(%esp),%esp
776L039ofb_abort:
777	popl	%edi
778	popl	%esi
779	popl	%ebx
780	popl	%ebp
781	ret
782.globl	_padlock_ctr32_encrypt
783.type	_padlock_ctr32_encrypt,@function
784.align	4
785_padlock_ctr32_encrypt:
786L_padlock_ctr32_encrypt_begin:
787	%ifdef __CET__
788
789.byte	243,15,30,251
790	%endif
791
792	pushl	%ebp
793	pushl	%ebx
794	pushl	%esi
795	pushl	%edi
796	movl	20(%esp),%edi
797	movl	24(%esp),%esi
798	movl	28(%esp),%edx
799	movl	32(%esp),%ecx
800	testl	$15,%edx
801	jnz	L048ctr32_abort
802	testl	$15,%ecx
803	jnz	L048ctr32_abort
804	leal	Lpadlock_saved_context-L049ctr32_pic_point,%eax
805	pushfl
806	cld
807	call	__padlock_verify_ctx
808L049ctr32_pic_point:
809	leal	16(%edx),%edx
810	xorl	%eax,%eax
811	movq	-16(%edx),%mm0
812	movl	$512,%ebx
813	notl	%eax
814	leal	-24(%esp),%ebp
815	cmpl	%ebx,%ecx
816	cmovcl	%ecx,%ebx
817	andl	%ebx,%eax
818	movl	%ecx,%ebx
819	negl	%eax
820	andl	$511,%ebx
821	leal	(%eax,%ebp,1),%esp
822	movl	$512,%eax
823	cmovzl	%eax,%ebx
824	movl	%ebp,%eax
825	andl	$-16,%ebp
826	andl	$-16,%esp
827	movl	%eax,16(%ebp)
828	jmp	L050ctr32_loop
829.align	4,0x90
830L050ctr32_loop:
831	movl	%edi,(%ebp)
832	movl	%esi,4(%ebp)
833	movl	%ecx,8(%ebp)
834	movl	%ebx,%ecx
835	movl	%ebx,12(%ebp)
836	movl	-4(%edx),%ecx
837	xorl	%edi,%edi
838	movl	-8(%edx),%eax
839L051ctr32_prepare:
840	movl	%ecx,12(%esp,%edi,1)
841	bswap	%ecx
842	movq	%mm0,(%esp,%edi,1)
843	incl	%ecx
844	movl	%eax,8(%esp,%edi,1)
845	bswap	%ecx
846	leal	16(%edi),%edi
847	cmpl	%ebx,%edi
848	jb	L051ctr32_prepare
849	movl	%ecx,-4(%edx)
850	leal	(%esp),%esi
851	leal	(%esp),%edi
852	movl	%ebx,%ecx
853	leal	-16(%edx),%eax
854	leal	16(%edx),%ebx
855	shrl	$4,%ecx
856.byte	243,15,167,200
857	movl	(%ebp),%edi
858	movl	12(%ebp),%ebx
859	movl	4(%ebp),%esi
860	xorl	%ecx,%ecx
861L052ctr32_xor:
862	movups	(%esi,%ecx,1),%xmm1
863	leal	16(%ecx),%ecx
864	pxor	-16(%esp,%ecx,1),%xmm1
865	movups	%xmm1,-16(%edi,%ecx,1)
866	cmpl	%ebx,%ecx
867	jb	L052ctr32_xor
868	movl	8(%ebp),%ecx
869	addl	%ebx,%edi
870	addl	%ebx,%esi
871	subl	%ebx,%ecx
872	movl	$512,%ebx
873	jnz	L050ctr32_loop
874	pxor	%xmm0,%xmm0
875	leal	(%esp),%eax
876L053ctr32_bzero:
877	movaps	%xmm0,(%eax)
878	leal	16(%eax),%eax
879	cmpl	%eax,%ebp
880	ja	L053ctr32_bzero
881L054ctr32_done:
882	movl	16(%ebp),%ebp
883	leal	24(%ebp),%esp
884	movl	$1,%eax
885	leal	4(%esp),%esp
886	emms
887L048ctr32_abort:
888	popl	%edi
889	popl	%esi
890	popl	%ebx
891	popl	%ebp
892	ret
893.globl	_padlock_xstore
894.type	_padlock_xstore,@function
895.align	4
896_padlock_xstore:
897L_padlock_xstore_begin:
898	%ifdef __CET__
899
900.byte	243,15,30,251
901	%endif
902
903	pushl	%edi
904	movl	8(%esp),%edi
905	movl	12(%esp),%edx
906.byte	15,167,192
907	popl	%edi
908	ret
909.type	__win32_segv_handler,@function
910.align	4
911__win32_segv_handler:
912	%ifdef __CET__
913
914.byte	243,15,30,251
915	%endif
916
917	movl	$1,%eax
918	movl	4(%esp),%edx
919	movl	12(%esp),%ecx
920	cmpl	$3221225477,(%edx)
921	jne	L055ret
922	addl	$4,184(%ecx)
923	movl	$0,%eax
924L055ret:
925	ret
926.globl	_padlock_sha1_oneshot
927.type	_padlock_sha1_oneshot,@function
928.align	4
929_padlock_sha1_oneshot:
930L_padlock_sha1_oneshot_begin:
931	%ifdef __CET__
932
933.byte	243,15,30,251
934	%endif
935
936	pushl	%edi
937	pushl	%esi
938	xorl	%eax,%eax
939	movl	12(%esp),%edi
940	movl	16(%esp),%esi
941	movl	20(%esp),%ecx
942	movl	%esp,%edx
943	addl	$-128,%esp
944	movups	(%edi),%xmm0
945	andl	$-16,%esp
946	movl	16(%edi),%eax
947	movaps	%xmm0,(%esp)
948	movl	%esp,%edi
949	movl	%eax,16(%esp)
950	xorl	%eax,%eax
951.byte	243,15,166,200
952	movaps	(%esp),%xmm0
953	movl	16(%esp),%eax
954	movl	%edx,%esp
955	movl	12(%esp),%edi
956	movups	%xmm0,(%edi)
957	movl	%eax,16(%edi)
958	popl	%esi
959	popl	%edi
960	ret
961.globl	_padlock_sha1_blocks
962.type	_padlock_sha1_blocks,@function
963.align	4
964_padlock_sha1_blocks:
965L_padlock_sha1_blocks_begin:
966	%ifdef __CET__
967
968.byte	243,15,30,251
969	%endif
970
971	pushl	%edi
972	pushl	%esi
973	movl	12(%esp),%edi
974	movl	16(%esp),%esi
975	movl	%esp,%edx
976	movl	20(%esp),%ecx
977	addl	$-128,%esp
978	movups	(%edi),%xmm0
979	andl	$-16,%esp
980	movl	16(%edi),%eax
981	movaps	%xmm0,(%esp)
982	movl	%esp,%edi
983	movl	%eax,16(%esp)
984	movl	$-1,%eax
985.byte	243,15,166,200
986	movaps	(%esp),%xmm0
987	movl	16(%esp),%eax
988	movl	%edx,%esp
989	movl	12(%esp),%edi
990	movups	%xmm0,(%edi)
991	movl	%eax,16(%edi)
992	popl	%esi
993	popl	%edi
994	ret
995.globl	_padlock_sha256_oneshot
996.type	_padlock_sha256_oneshot,@function
997.align	4
998_padlock_sha256_oneshot:
999L_padlock_sha256_oneshot_begin:
1000	%ifdef __CET__
1001
1002.byte	243,15,30,251
1003	%endif
1004
1005	pushl	%edi
1006	pushl	%esi
1007	xorl	%eax,%eax
1008	movl	12(%esp),%edi
1009	movl	16(%esp),%esi
1010	movl	20(%esp),%ecx
1011	movl	%esp,%edx
1012	addl	$-128,%esp
1013	movups	(%edi),%xmm0
1014	andl	$-16,%esp
1015	movups	16(%edi),%xmm1
1016	movaps	%xmm0,(%esp)
1017	movl	%esp,%edi
1018	movaps	%xmm1,16(%esp)
1019	xorl	%eax,%eax
1020.byte	243,15,166,208
1021	movaps	(%esp),%xmm0
1022	movaps	16(%esp),%xmm1
1023	movl	%edx,%esp
1024	movl	12(%esp),%edi
1025	movups	%xmm0,(%edi)
1026	movups	%xmm1,16(%edi)
1027	popl	%esi
1028	popl	%edi
1029	ret
1030.globl	_padlock_sha256_blocks
1031.type	_padlock_sha256_blocks,@function
1032.align	4
1033_padlock_sha256_blocks:
1034L_padlock_sha256_blocks_begin:
1035	%ifdef __CET__
1036
1037.byte	243,15,30,251
1038	%endif
1039
1040	pushl	%edi
1041	pushl	%esi
1042	movl	12(%esp),%edi
1043	movl	16(%esp),%esi
1044	movl	20(%esp),%ecx
1045	movl	%esp,%edx
1046	addl	$-128,%esp
1047	movups	(%edi),%xmm0
1048	andl	$-16,%esp
1049	movups	16(%edi),%xmm1
1050	movaps	%xmm0,(%esp)
1051	movl	%esp,%edi
1052	movaps	%xmm1,16(%esp)
1053	movl	$-1,%eax
1054.byte	243,15,166,208
1055	movaps	(%esp),%xmm0
1056	movaps	16(%esp),%xmm1
1057	movl	%edx,%esp
1058	movl	12(%esp),%edi
1059	movups	%xmm0,(%edi)
1060	movups	%xmm1,16(%edi)
1061	popl	%esi
1062	popl	%edi
1063	ret
1064.globl	_padlock_sha512_blocks
1065.type	_padlock_sha512_blocks,@function
1066.align	4
1067_padlock_sha512_blocks:
1068L_padlock_sha512_blocks_begin:
1069	%ifdef __CET__
1070
1071.byte	243,15,30,251
1072	%endif
1073
1074	pushl	%edi
1075	pushl	%esi
1076	movl	12(%esp),%edi
1077	movl	16(%esp),%esi
1078	movl	20(%esp),%ecx
1079	movl	%esp,%edx
1080	addl	$-128,%esp
1081	movups	(%edi),%xmm0
1082	andl	$-16,%esp
1083	movups	16(%edi),%xmm1
1084	movups	32(%edi),%xmm2
1085	movups	48(%edi),%xmm3
1086	movaps	%xmm0,(%esp)
1087	movl	%esp,%edi
1088	movaps	%xmm1,16(%esp)
1089	movaps	%xmm2,32(%esp)
1090	movaps	%xmm3,48(%esp)
1091.byte	243,15,166,224
1092	movaps	(%esp),%xmm0
1093	movaps	16(%esp),%xmm1
1094	movaps	32(%esp),%xmm2
1095	movaps	48(%esp),%xmm3
1096	movl	%edx,%esp
1097	movl	12(%esp),%edi
1098	movups	%xmm0,(%edi)
1099	movups	%xmm1,16(%edi)
1100	movups	%xmm2,32(%edi)
1101	movups	%xmm3,48(%edi)
1102	popl	%esi
1103	popl	%edi
1104	ret
1105.byte	86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
1106.byte	109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
1107.byte	77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
1108.byte	110,115,115,108,46,111,114,103,62,0
1109.align	4,0x90
1110.data
1111.align	2,0x90
1112Lpadlock_saved_context:
1113.long	0
1114