1 # Copyright (c) 2011, Andy Polyakov by <appro@openssl.org>
4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions
8 # * Redistributions of source code must retain copyright notices,
9 # this list of conditions and the following disclaimer.
11 # * Redistributions in binary form must reproduce the above
12 # copyright notice, this list of conditions and the following
13 # disclaimer in the documentation and/or other materials
14 # provided with the distribution.
16 # * Neither the name of the Andy Polyakov nor the names of its
17 # copyright holder and contributors may be used to endorse or
18 # promote products derived from this software without specific
19 # prior written permission.
21 # ALTERNATIVELY, provided that this notice is retained in full, this
22 # product may be distributed under the terms of the GNU General Public
23 # License (GPL), in which case the provisions of the GPL apply INSTEAD OF
26 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
27 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
29 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
31 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
33 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 .file "./engines/asm/e_padlock-x86.s"
40 .globl _padlock_capability
41 .def _padlock_capability; .scl 2; .type 32; .endef
44 .L_padlock_capability_begin:
90 .globl _padlock_key_bswap
91 .def _padlock_key_bswap; .scl 2; .type 32; .endef
94 .L_padlock_key_bswap_begin:
105 .globl _padlock_verify_context
106 .def _padlock_verify_context; .scl 2; .type 32; .endef
108 _padlock_verify_context:
109 .L_padlock_verify_context_begin:
111 leal .Lpadlock_saved_context,%eax
113 call __padlock_verify_ctx
114 .L002verify_pic_point:
117 .def __padlock_verify_ctx; .scl 3; .type 32; .endef
119 __padlock_verify_ctx:
129 .globl _padlock_reload_key
130 .def _padlock_reload_key; .scl 2; .type 32; .endef
133 .L_padlock_reload_key_begin:
137 .globl _padlock_aes_block
138 .def _padlock_aes_block; .scl 2; .type 32; .endef
141 .L_padlock_aes_block_begin:
156 .globl _padlock_ecb_encrypt
157 .def _padlock_ecb_encrypt; .scl 2; .type 32; .endef
159 _padlock_ecb_encrypt:
160 .L_padlock_ecb_encrypt_begin:
173 leal .Lpadlock_saved_context,%eax
176 call __padlock_verify_ctx
201 leal (%eax,%ebp,1),%esp
214 jz .L009ecb_inp_aligned
220 .L009ecb_inp_aligned:
228 jz .L010ecb_out_aligned
234 .L010ecb_out_aligned:
259 leal (%eax,%ebp,1),%esp
263 movups (%esi,%ebx,1),%xmm0
266 movaps %xmm0,-16(%esp,%ebx,1)
267 ja .L014ecb_short_copy
286 .globl _padlock_cbc_encrypt
287 .def _padlock_cbc_encrypt; .scl 2; .type 32; .endef
289 _padlock_cbc_encrypt:
290 .L_padlock_cbc_encrypt_begin:
303 leal .Lpadlock_saved_context,%eax
306 call __padlock_verify_ctx
331 leal (%eax,%ebp,1),%esp
344 jz .L020cbc_inp_aligned
350 .L020cbc_inp_aligned:
356 movaps %xmm0,-16(%edx)
360 jz .L021cbc_out_aligned
366 .L021cbc_out_aligned:
391 leal (%eax,%ebp,1),%esp
395 movups (%esi,%ebx,1),%xmm0
398 movaps %xmm0,-16(%esp,%ebx,1)
399 ja .L025cbc_short_copy
410 movaps %xmm0,-16(%edx)
420 .globl _padlock_xstore
421 .def _padlock_xstore; .scl 2; .type 32; .endef
424 .L_padlock_xstore_begin:
431 .def __win32_segv_handler; .scl 3; .type 32; .endef
433 __win32_segv_handler:
437 cmpl $3221225477,(%edx)
443 .globl _padlock_sha1_oneshot
444 .def _padlock_sha1_oneshot; .scl 2; .type 32; .endef
446 _padlock_sha1_oneshot:
447 .L_padlock_sha1_oneshot_begin:
454 pushl __win32_segv_handler
470 .byte 100,143,5,0,0,0,0
478 .globl _padlock_sha1_blocks
479 .def _padlock_sha1_blocks; .scl 2; .type 32; .endef
481 _padlock_sha1_blocks:
482 .L_padlock_sha1_blocks_begin:
507 .globl _padlock_sha256_oneshot
508 .def _padlock_sha256_oneshot; .scl 2; .type 32; .endef
510 _padlock_sha256_oneshot:
511 .L_padlock_sha256_oneshot_begin:
518 pushl __win32_segv_handler
525 movups 16(%edi),%xmm1
528 movaps %xmm1,16(%esp)
532 movaps 16(%esp),%xmm1
534 .byte 100,143,5,0,0,0,0
538 movups %xmm1,16(%edi)
542 .globl _padlock_sha256_blocks
543 .def _padlock_sha256_blocks; .scl 2; .type 32; .endef
545 _padlock_sha256_blocks:
546 .L_padlock_sha256_blocks_begin:
556 movups 16(%edi),%xmm1
559 movaps %xmm1,16(%esp)
563 movaps 16(%esp),%xmm1
567 movups %xmm1,16(%edi)
571 .globl _padlock_sha512_blocks
572 .def _padlock_sha512_blocks; .scl 2; .type 32; .endef
574 _padlock_sha512_blocks:
575 .L_padlock_sha512_blocks_begin:
585 movups 16(%edi),%xmm1
586 movups 32(%edi),%xmm2
587 movups 48(%edi),%xmm3
590 movaps %xmm1,16(%esp)
591 movaps %xmm2,32(%esp)
592 movaps %xmm3,48(%esp)
595 movaps 16(%esp),%xmm1
596 movaps 32(%esp),%xmm2
597 movaps 48(%esp),%xmm3
601 movups %xmm1,16(%edi)
602 movups %xmm2,32(%edi)
603 movups %xmm3,48(%edi)
607 .byte 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
608 .byte 109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
609 .byte 77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
610 .byte 110,115,115,108,46,111,114,103,62,0
614 .Lpadlock_saved_context: