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