diff options
author | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-02-10 17:53:52 +0300 |
---|---|---|
committer | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-02-10 17:53:52 +0300 |
commit | 5c64b97bb7e4034eff8833e4c367f61d34fcb4ee (patch) | |
tree | 7c5769528f2fcdaa5a718aa73e4aa64d50905269 /contrib/libs/openssl/asm/windows/engines | |
parent | 1b56f620ac98766b198121ca1b728e7e61efbb56 (diff) | |
download | ydb-5c64b97bb7e4034eff8833e4c367f61d34fcb4ee.tar.gz |
intermediate changes
ref:4635f4dd763168c3fa295f87727595c785b4d5a4
Diffstat (limited to 'contrib/libs/openssl/asm/windows/engines')
-rw-r--r-- | contrib/libs/openssl/asm/windows/engines/e_padlock-x86.masm | 2074 | ||||
-rw-r--r-- | contrib/libs/openssl/asm/windows/engines/e_padlock-x86_64.masm | 2382 |
2 files changed, 2228 insertions, 2228 deletions
diff --git a/contrib/libs/openssl/asm/windows/engines/e_padlock-x86.masm b/contrib/libs/openssl/asm/windows/engines/e_padlock-x86.masm index ed83a736f2..c4c322d12e 100644 --- a/contrib/libs/openssl/asm/windows/engines/e_padlock-x86.masm +++ b/contrib/libs/openssl/asm/windows/engines/e_padlock-x86.masm @@ -1,1037 +1,1037 @@ -IF @Version LT 800 -ECHO MASM version 8.00 or later is strongly recommended. -ENDIF -.686 -.XMM -IF @Version LT 800 -XMMWORD STRUCT 16 -DQ 2 dup (?) -XMMWORD ENDS -ENDIF - -.MODEL FLAT -OPTION DOTNAME -IF @Version LT 800 -.text$ SEGMENT PAGE 'CODE' -ELSE -.text$ SEGMENT ALIGN(64) 'CODE' -ENDIF -ALIGN 16 -_padlock_capability PROC PUBLIC -$L_padlock_capability_begin:: - push ebx - pushfd - pop eax - mov ecx,eax - xor eax,2097152 - push eax - popfd - pushfd - pop eax - xor ecx,eax - xor eax,eax - bt ecx,21 - jnc $L000noluck - cpuid - xor eax,eax - cmp ebx,0746e6543h - jne $L001zhaoxin - cmp edx,048727561h - jne $L000noluck - cmp ecx,0736c7561h - jne $L000noluck - jmp $L002zhaoxinEnd -$L001zhaoxin: - cmp ebx,068532020h - jne $L000noluck - cmp edx,068676e61h - jne $L000noluck - cmp ecx,020206961h - jne $L000noluck -$L002zhaoxinEnd: - mov eax,3221225472 - cpuid - mov edx,eax - xor eax,eax - cmp edx,3221225473 - jb $L000noluck - mov eax,1 - cpuid - or eax,15 - xor ebx,ebx - and eax,4095 - cmp eax,1791 - sete bl - mov eax,3221225473 - push ebx - cpuid - pop ebx - mov eax,edx - shl ebx,4 - and eax,4294967279 - or eax,ebx -$L000noluck: - pop ebx - ret -_padlock_capability ENDP -ALIGN 16 -_padlock_key_bswap PROC PUBLIC -$L_padlock_key_bswap_begin:: - mov edx,DWORD PTR 4[esp] - mov ecx,DWORD PTR 240[edx] -$L003bswap_loop: - mov eax,DWORD PTR [edx] - bswap eax - mov DWORD PTR [edx],eax - lea edx,DWORD PTR 4[edx] - sub ecx,1 - jnz $L003bswap_loop - ret -_padlock_key_bswap ENDP -ALIGN 16 -_padlock_verify_context PROC PUBLIC -$L_padlock_verify_context_begin:: - mov edx,DWORD PTR 4[esp] - lea eax,DWORD PTR $Lpadlock_saved_context - pushfd - call __padlock_verify_ctx -$L004verify_pic_point: - lea esp,DWORD PTR 4[esp] - ret -_padlock_verify_context ENDP -ALIGN 16 -__padlock_verify_ctx PROC PRIVATE - bt DWORD PTR 4[esp],30 - jnc $L005verified - cmp edx,DWORD PTR [eax] - je $L005verified - pushfd - popfd -$L005verified: - mov DWORD PTR [eax],edx - ret -__padlock_verify_ctx ENDP -ALIGN 16 -_padlock_reload_key PROC PUBLIC -$L_padlock_reload_key_begin:: - pushfd - popfd - ret -_padlock_reload_key ENDP -ALIGN 16 -_padlock_aes_block PROC PUBLIC -$L_padlock_aes_block_begin:: - push edi - push esi - push ebx - mov edi,DWORD PTR 16[esp] - mov esi,DWORD PTR 20[esp] - mov edx,DWORD PTR 24[esp] - mov ecx,1 - lea ebx,DWORD PTR 32[edx] - lea edx,DWORD PTR 16[edx] -DB 243,15,167,200 - pop ebx - pop esi - pop edi - ret -_padlock_aes_block ENDP -ALIGN 16 -_padlock_ecb_encrypt PROC PUBLIC -$L_padlock_ecb_encrypt_begin:: - push ebp - push ebx - push esi - push edi - mov edi,DWORD PTR 20[esp] - mov esi,DWORD PTR 24[esp] - mov edx,DWORD PTR 28[esp] - mov ecx,DWORD PTR 32[esp] - test edx,15 - jnz $L006ecb_abort - test ecx,15 - jnz $L006ecb_abort - lea eax,DWORD PTR $Lpadlock_saved_context - pushfd - cld - call __padlock_verify_ctx -$L007ecb_pic_point: - lea edx,DWORD PTR 16[edx] - xor eax,eax - xor ebx,ebx - test DWORD PTR [edx],32 - jnz $L008ecb_aligned - test edi,15 - setz al - test esi,15 - setz bl - test eax,ebx - jnz $L008ecb_aligned - neg eax - mov ebx,512 - not eax - lea ebp,DWORD PTR [esp-24] - cmp ecx,ebx - cmovc ebx,ecx - and eax,ebx - mov ebx,ecx - neg eax - and ebx,511 - lea esp,DWORD PTR [ebp*1+eax] - mov eax,512 - cmovz ebx,eax - mov eax,ebp - and ebp,-16 - and esp,-16 - mov DWORD PTR 16[ebp],eax - cmp ecx,ebx - ja $L009ecb_loop - mov eax,esi - cmp ebp,esp - cmove eax,edi - add eax,ecx - neg eax - and eax,4095 - cmp eax,128 - mov eax,-128 - cmovae eax,ebx - and ebx,eax - jz $L010ecb_unaligned_tail - jmp $L009ecb_loop -ALIGN 16 -$L009ecb_loop: - mov DWORD PTR [ebp],edi - mov DWORD PTR 4[ebp],esi - mov DWORD PTR 8[ebp],ecx - mov ecx,ebx - mov DWORD PTR 12[ebp],ebx - test edi,15 - cmovnz edi,esp - test esi,15 - jz $L011ecb_inp_aligned - shr ecx,2 -DB 243,165 - sub edi,ebx - mov ecx,ebx - mov esi,edi -$L011ecb_inp_aligned: - lea eax,DWORD PTR [edx-16] - lea ebx,DWORD PTR 16[edx] - shr ecx,4 -DB 243,15,167,200 - mov edi,DWORD PTR [ebp] - mov ebx,DWORD PTR 12[ebp] - test edi,15 - jz $L012ecb_out_aligned - mov ecx,ebx - lea esi,DWORD PTR [esp] - shr ecx,2 -DB 243,165 - sub edi,ebx -$L012ecb_out_aligned: - mov esi,DWORD PTR 4[ebp] - mov ecx,DWORD PTR 8[ebp] - add edi,ebx - add esi,ebx - sub ecx,ebx - mov ebx,512 - jz $L013ecb_break - cmp ecx,ebx - jae $L009ecb_loop -$L010ecb_unaligned_tail: - xor eax,eax - cmp esp,ebp - cmove eax,ecx - sub esp,eax - mov eax,edi - mov ebx,ecx - shr ecx,2 - lea edi,DWORD PTR [esp] -DB 243,165 - mov esi,esp - mov edi,eax - mov ecx,ebx - jmp $L009ecb_loop -ALIGN 16 -$L013ecb_break: - cmp esp,ebp - je $L014ecb_done - pxor xmm0,xmm0 - lea eax,DWORD PTR [esp] -$L015ecb_bzero: - movaps XMMWORD PTR [eax],xmm0 - lea eax,DWORD PTR 16[eax] - cmp ebp,eax - ja $L015ecb_bzero -$L014ecb_done: - mov ebp,DWORD PTR 16[ebp] - lea esp,DWORD PTR 24[ebp] - jmp $L016ecb_exit -ALIGN 16 -$L008ecb_aligned: - lea ebp,DWORD PTR [ecx*1+esi] - neg ebp - and ebp,4095 - xor eax,eax - cmp ebp,128 - mov ebp,127 - cmovae ebp,eax - and ebp,ecx - sub ecx,ebp - jz $L017ecb_aligned_tail - lea eax,DWORD PTR [edx-16] - lea ebx,DWORD PTR 16[edx] - shr ecx,4 -DB 243,15,167,200 - test ebp,ebp - jz $L016ecb_exit -$L017ecb_aligned_tail: - mov ecx,ebp - lea ebp,DWORD PTR [esp-24] - mov esp,ebp - mov eax,ebp - sub esp,ecx - and ebp,-16 - and esp,-16 - mov DWORD PTR 16[ebp],eax - mov eax,edi - mov ebx,ecx - shr ecx,2 - lea edi,DWORD PTR [esp] -DB 243,165 - mov esi,esp - mov edi,eax - mov ecx,ebx - jmp $L009ecb_loop -$L016ecb_exit: - mov eax,1 - lea esp,DWORD PTR 4[esp] -$L006ecb_abort: - pop edi - pop esi - pop ebx - pop ebp - ret -_padlock_ecb_encrypt ENDP -ALIGN 16 -_padlock_cbc_encrypt PROC PUBLIC -$L_padlock_cbc_encrypt_begin:: - push ebp - push ebx - push esi - push edi - mov edi,DWORD PTR 20[esp] - mov esi,DWORD PTR 24[esp] - mov edx,DWORD PTR 28[esp] - mov ecx,DWORD PTR 32[esp] - test edx,15 - jnz $L018cbc_abort - test ecx,15 - jnz $L018cbc_abort - lea eax,DWORD PTR $Lpadlock_saved_context - pushfd - cld - call __padlock_verify_ctx -$L019cbc_pic_point: - lea edx,DWORD PTR 16[edx] - xor eax,eax - xor ebx,ebx - test DWORD PTR [edx],32 - jnz $L020cbc_aligned - test edi,15 - setz al - test esi,15 - setz bl - test eax,ebx - jnz $L020cbc_aligned - neg eax - mov ebx,512 - not eax - lea ebp,DWORD PTR [esp-24] - cmp ecx,ebx - cmovc ebx,ecx - and eax,ebx - mov ebx,ecx - neg eax - and ebx,511 - lea esp,DWORD PTR [ebp*1+eax] - mov eax,512 - cmovz ebx,eax - mov eax,ebp - and ebp,-16 - and esp,-16 - mov DWORD PTR 16[ebp],eax - cmp ecx,ebx - ja $L021cbc_loop - mov eax,esi - cmp ebp,esp - cmove eax,edi - add eax,ecx - neg eax - and eax,4095 - cmp eax,64 - mov eax,-64 - cmovae eax,ebx - and ebx,eax - jz $L022cbc_unaligned_tail - jmp $L021cbc_loop -ALIGN 16 -$L021cbc_loop: - mov DWORD PTR [ebp],edi - mov DWORD PTR 4[ebp],esi - mov DWORD PTR 8[ebp],ecx - mov ecx,ebx - mov DWORD PTR 12[ebp],ebx - test edi,15 - cmovnz edi,esp - test esi,15 - jz $L023cbc_inp_aligned - shr ecx,2 -DB 243,165 - sub edi,ebx - mov ecx,ebx - mov esi,edi -$L023cbc_inp_aligned: - lea eax,DWORD PTR [edx-16] - lea ebx,DWORD PTR 16[edx] - shr ecx,4 -DB 243,15,167,208 - movaps xmm0,XMMWORD PTR [eax] - movaps XMMWORD PTR [edx-16],xmm0 - mov edi,DWORD PTR [ebp] - mov ebx,DWORD PTR 12[ebp] - test edi,15 - jz $L024cbc_out_aligned - mov ecx,ebx - lea esi,DWORD PTR [esp] - shr ecx,2 -DB 243,165 - sub edi,ebx -$L024cbc_out_aligned: - mov esi,DWORD PTR 4[ebp] - mov ecx,DWORD PTR 8[ebp] - add edi,ebx - add esi,ebx - sub ecx,ebx - mov ebx,512 - jz $L025cbc_break - cmp ecx,ebx - jae $L021cbc_loop -$L022cbc_unaligned_tail: - xor eax,eax - cmp esp,ebp - cmove eax,ecx - sub esp,eax - mov eax,edi - mov ebx,ecx - shr ecx,2 - lea edi,DWORD PTR [esp] -DB 243,165 - mov esi,esp - mov edi,eax - mov ecx,ebx - jmp $L021cbc_loop -ALIGN 16 -$L025cbc_break: - cmp esp,ebp - je $L026cbc_done - pxor xmm0,xmm0 - lea eax,DWORD PTR [esp] -$L027cbc_bzero: - movaps XMMWORD PTR [eax],xmm0 - lea eax,DWORD PTR 16[eax] - cmp ebp,eax - ja $L027cbc_bzero -$L026cbc_done: - mov ebp,DWORD PTR 16[ebp] - lea esp,DWORD PTR 24[ebp] - jmp $L028cbc_exit -ALIGN 16 -$L020cbc_aligned: - lea ebp,DWORD PTR [ecx*1+esi] - neg ebp - and ebp,4095 - xor eax,eax - cmp ebp,64 - mov ebp,63 - cmovae ebp,eax - and ebp,ecx - sub ecx,ebp - jz $L029cbc_aligned_tail - lea eax,DWORD PTR [edx-16] - lea ebx,DWORD PTR 16[edx] - shr ecx,4 -DB 243,15,167,208 - movaps xmm0,XMMWORD PTR [eax] - movaps XMMWORD PTR [edx-16],xmm0 - test ebp,ebp - jz $L028cbc_exit -$L029cbc_aligned_tail: - mov ecx,ebp - lea ebp,DWORD PTR [esp-24] - mov esp,ebp - mov eax,ebp - sub esp,ecx - and ebp,-16 - and esp,-16 - mov DWORD PTR 16[ebp],eax - mov eax,edi - mov ebx,ecx - shr ecx,2 - lea edi,DWORD PTR [esp] -DB 243,165 - mov esi,esp - mov edi,eax - mov ecx,ebx - jmp $L021cbc_loop -$L028cbc_exit: - mov eax,1 - lea esp,DWORD PTR 4[esp] -$L018cbc_abort: - pop edi - pop esi - pop ebx - pop ebp - ret -_padlock_cbc_encrypt ENDP -ALIGN 16 -_padlock_cfb_encrypt PROC PUBLIC -$L_padlock_cfb_encrypt_begin:: - push ebp - push ebx - push esi - push edi - mov edi,DWORD PTR 20[esp] - mov esi,DWORD PTR 24[esp] - mov edx,DWORD PTR 28[esp] - mov ecx,DWORD PTR 32[esp] - test edx,15 - jnz $L030cfb_abort - test ecx,15 - jnz $L030cfb_abort - lea eax,DWORD PTR $Lpadlock_saved_context - pushfd - cld - call __padlock_verify_ctx -$L031cfb_pic_point: - lea edx,DWORD PTR 16[edx] - xor eax,eax - xor ebx,ebx - test DWORD PTR [edx],32 - jnz $L032cfb_aligned - test edi,15 - setz al - test esi,15 - setz bl - test eax,ebx - jnz $L032cfb_aligned - neg eax - mov ebx,512 - not eax - lea ebp,DWORD PTR [esp-24] - cmp ecx,ebx - cmovc ebx,ecx - and eax,ebx - mov ebx,ecx - neg eax - and ebx,511 - lea esp,DWORD PTR [ebp*1+eax] - mov eax,512 - cmovz ebx,eax - mov eax,ebp - and ebp,-16 - and esp,-16 - mov DWORD PTR 16[ebp],eax - jmp $L033cfb_loop -ALIGN 16 -$L033cfb_loop: - mov DWORD PTR [ebp],edi - mov DWORD PTR 4[ebp],esi - mov DWORD PTR 8[ebp],ecx - mov ecx,ebx - mov DWORD PTR 12[ebp],ebx - test edi,15 - cmovnz edi,esp - test esi,15 - jz $L034cfb_inp_aligned - shr ecx,2 -DB 243,165 - sub edi,ebx - mov ecx,ebx - mov esi,edi -$L034cfb_inp_aligned: - lea eax,DWORD PTR [edx-16] - lea ebx,DWORD PTR 16[edx] - shr ecx,4 -DB 243,15,167,224 - movaps xmm0,XMMWORD PTR [eax] - movaps XMMWORD PTR [edx-16],xmm0 - mov edi,DWORD PTR [ebp] - mov ebx,DWORD PTR 12[ebp] - test edi,15 - jz $L035cfb_out_aligned - mov ecx,ebx - lea esi,DWORD PTR [esp] - shr ecx,2 -DB 243,165 - sub edi,ebx -$L035cfb_out_aligned: - mov esi,DWORD PTR 4[ebp] - mov ecx,DWORD PTR 8[ebp] - add edi,ebx - add esi,ebx - sub ecx,ebx - mov ebx,512 - jnz $L033cfb_loop - cmp esp,ebp - je $L036cfb_done - pxor xmm0,xmm0 - lea eax,DWORD PTR [esp] -$L037cfb_bzero: - movaps XMMWORD PTR [eax],xmm0 - lea eax,DWORD PTR 16[eax] - cmp ebp,eax - ja $L037cfb_bzero -$L036cfb_done: - mov ebp,DWORD PTR 16[ebp] - lea esp,DWORD PTR 24[ebp] - jmp $L038cfb_exit -ALIGN 16 -$L032cfb_aligned: - lea eax,DWORD PTR [edx-16] - lea ebx,DWORD PTR 16[edx] - shr ecx,4 -DB 243,15,167,224 - movaps xmm0,XMMWORD PTR [eax] - movaps XMMWORD PTR [edx-16],xmm0 -$L038cfb_exit: - mov eax,1 - lea esp,DWORD PTR 4[esp] -$L030cfb_abort: - pop edi - pop esi - pop ebx - pop ebp - ret -_padlock_cfb_encrypt ENDP -ALIGN 16 -_padlock_ofb_encrypt PROC PUBLIC -$L_padlock_ofb_encrypt_begin:: - push ebp - push ebx - push esi - push edi - mov edi,DWORD PTR 20[esp] - mov esi,DWORD PTR 24[esp] - mov edx,DWORD PTR 28[esp] - mov ecx,DWORD PTR 32[esp] - test edx,15 - jnz $L039ofb_abort - test ecx,15 - jnz $L039ofb_abort - lea eax,DWORD PTR $Lpadlock_saved_context - pushfd - cld - call __padlock_verify_ctx -$L040ofb_pic_point: - lea edx,DWORD PTR 16[edx] - xor eax,eax - xor ebx,ebx - test DWORD PTR [edx],32 - jnz $L041ofb_aligned - test edi,15 - setz al - test esi,15 - setz bl - test eax,ebx - jnz $L041ofb_aligned - neg eax - mov ebx,512 - not eax - lea ebp,DWORD PTR [esp-24] - cmp ecx,ebx - cmovc ebx,ecx - and eax,ebx - mov ebx,ecx - neg eax - and ebx,511 - lea esp,DWORD PTR [ebp*1+eax] - mov eax,512 - cmovz ebx,eax - mov eax,ebp - and ebp,-16 - and esp,-16 - mov DWORD PTR 16[ebp],eax - jmp $L042ofb_loop -ALIGN 16 -$L042ofb_loop: - mov DWORD PTR [ebp],edi - mov DWORD PTR 4[ebp],esi - mov DWORD PTR 8[ebp],ecx - mov ecx,ebx - mov DWORD PTR 12[ebp],ebx - test edi,15 - cmovnz edi,esp - test esi,15 - jz $L043ofb_inp_aligned - shr ecx,2 -DB 243,165 - sub edi,ebx - mov ecx,ebx - mov esi,edi -$L043ofb_inp_aligned: - lea eax,DWORD PTR [edx-16] - lea ebx,DWORD PTR 16[edx] - shr ecx,4 -DB 243,15,167,232 - movaps xmm0,XMMWORD PTR [eax] - movaps XMMWORD PTR [edx-16],xmm0 - mov edi,DWORD PTR [ebp] - mov ebx,DWORD PTR 12[ebp] - test edi,15 - jz $L044ofb_out_aligned - mov ecx,ebx - lea esi,DWORD PTR [esp] - shr ecx,2 -DB 243,165 - sub edi,ebx -$L044ofb_out_aligned: - mov esi,DWORD PTR 4[ebp] - mov ecx,DWORD PTR 8[ebp] - add edi,ebx - add esi,ebx - sub ecx,ebx - mov ebx,512 - jnz $L042ofb_loop - cmp esp,ebp - je $L045ofb_done - pxor xmm0,xmm0 - lea eax,DWORD PTR [esp] -$L046ofb_bzero: - movaps XMMWORD PTR [eax],xmm0 - lea eax,DWORD PTR 16[eax] - cmp ebp,eax - ja $L046ofb_bzero -$L045ofb_done: - mov ebp,DWORD PTR 16[ebp] - lea esp,DWORD PTR 24[ebp] - jmp $L047ofb_exit -ALIGN 16 -$L041ofb_aligned: - lea eax,DWORD PTR [edx-16] - lea ebx,DWORD PTR 16[edx] - shr ecx,4 -DB 243,15,167,232 - movaps xmm0,XMMWORD PTR [eax] - movaps XMMWORD PTR [edx-16],xmm0 -$L047ofb_exit: - mov eax,1 - lea esp,DWORD PTR 4[esp] -$L039ofb_abort: - pop edi - pop esi - pop ebx - pop ebp - ret -_padlock_ofb_encrypt ENDP -ALIGN 16 -_padlock_ctr32_encrypt PROC PUBLIC -$L_padlock_ctr32_encrypt_begin:: - push ebp - push ebx - push esi - push edi - mov edi,DWORD PTR 20[esp] - mov esi,DWORD PTR 24[esp] - mov edx,DWORD PTR 28[esp] - mov ecx,DWORD PTR 32[esp] - test edx,15 - jnz $L048ctr32_abort - test ecx,15 - jnz $L048ctr32_abort - lea eax,DWORD PTR $Lpadlock_saved_context - pushfd - cld - call __padlock_verify_ctx -$L049ctr32_pic_point: - lea edx,DWORD PTR 16[edx] - xor eax,eax - movq mm0,QWORD PTR [edx-16] - mov ebx,512 - not eax - lea ebp,DWORD PTR [esp-24] - cmp ecx,ebx - cmovc ebx,ecx - and eax,ebx - mov ebx,ecx - neg eax - and ebx,511 - lea esp,DWORD PTR [ebp*1+eax] - mov eax,512 - cmovz ebx,eax - mov eax,ebp - and ebp,-16 - and esp,-16 - mov DWORD PTR 16[ebp],eax - jmp $L050ctr32_loop -ALIGN 16 -$L050ctr32_loop: - mov DWORD PTR [ebp],edi - mov DWORD PTR 4[ebp],esi - mov DWORD PTR 8[ebp],ecx - mov ecx,ebx - mov DWORD PTR 12[ebp],ebx - mov ecx,DWORD PTR [edx-4] - xor edi,edi - mov eax,DWORD PTR [edx-8] -$L051ctr32_prepare: - mov DWORD PTR 12[edi*1+esp],ecx - bswap ecx - movq QWORD PTR [edi*1+esp],mm0 - inc ecx - mov DWORD PTR 8[edi*1+esp],eax - bswap ecx - lea edi,DWORD PTR 16[edi] - cmp edi,ebx - jb $L051ctr32_prepare - mov DWORD PTR [edx-4],ecx - lea esi,DWORD PTR [esp] - lea edi,DWORD PTR [esp] - mov ecx,ebx - lea eax,DWORD PTR [edx-16] - lea ebx,DWORD PTR 16[edx] - shr ecx,4 -DB 243,15,167,200 - mov edi,DWORD PTR [ebp] - mov ebx,DWORD PTR 12[ebp] - mov esi,DWORD PTR 4[ebp] - xor ecx,ecx -$L052ctr32_xor: - movups xmm1,XMMWORD PTR [ecx*1+esi] - lea ecx,DWORD PTR 16[ecx] - pxor xmm1,XMMWORD PTR [ecx*1+esp-16] - movups XMMWORD PTR [ecx*1+edi-16],xmm1 - cmp ecx,ebx - jb $L052ctr32_xor - mov ecx,DWORD PTR 8[ebp] - add edi,ebx - add esi,ebx - sub ecx,ebx - mov ebx,512 - jnz $L050ctr32_loop - pxor xmm0,xmm0 - lea eax,DWORD PTR [esp] -$L053ctr32_bzero: - movaps XMMWORD PTR [eax],xmm0 - lea eax,DWORD PTR 16[eax] - cmp ebp,eax - ja $L053ctr32_bzero -$L054ctr32_done: - mov ebp,DWORD PTR 16[ebp] - lea esp,DWORD PTR 24[ebp] - mov eax,1 - lea esp,DWORD PTR 4[esp] - emms -$L048ctr32_abort: - pop edi - pop esi - pop ebx - pop ebp - ret -_padlock_ctr32_encrypt ENDP -ALIGN 16 -_padlock_xstore PROC PUBLIC -$L_padlock_xstore_begin:: - push edi - mov edi,DWORD PTR 8[esp] - mov edx,DWORD PTR 12[esp] -DB 15,167,192 - pop edi - ret -_padlock_xstore ENDP -ALIGN 16 -__win32_segv_handler PROC PRIVATE - mov eax,1 - mov edx,DWORD PTR 4[esp] - mov ecx,DWORD PTR 12[esp] - cmp DWORD PTR [edx],3221225477 - jne $L055ret - add DWORD PTR 184[ecx],4 - mov eax,0 -$L055ret: - ret -__win32_segv_handler ENDP -IF @Version GE 710 -.SAFESEH __win32_segv_handler -ENDIF -ALIGN 16 -_padlock_sha1_oneshot PROC PUBLIC -$L_padlock_sha1_oneshot_begin:: - push edi - push esi - xor eax,eax - mov edi,DWORD PTR 12[esp] - mov esi,DWORD PTR 16[esp] - mov ecx,DWORD PTR 20[esp] - push __win32_segv_handler -DB 100,255,48 -DB 100,137,32 - mov edx,esp - add esp,-128 - movups xmm0,XMMWORD PTR [edi] - and esp,-16 - mov eax,DWORD PTR 16[edi] - movaps XMMWORD PTR [esp],xmm0 - mov edi,esp - mov DWORD PTR 16[esp],eax - xor eax,eax -DB 243,15,166,200 - movaps xmm0,XMMWORD PTR [esp] - mov eax,DWORD PTR 16[esp] - mov esp,edx -DB 100,143,5,0,0,0,0 - lea esp,DWORD PTR 4[esp] - mov edi,DWORD PTR 16[esp] - movups XMMWORD PTR [edi],xmm0 - mov DWORD PTR 16[edi],eax - pop esi - pop edi - ret -_padlock_sha1_oneshot ENDP -ALIGN 16 -_padlock_sha1_blocks PROC PUBLIC -$L_padlock_sha1_blocks_begin:: - push edi - push esi - mov edi,DWORD PTR 12[esp] - mov esi,DWORD PTR 16[esp] - mov edx,esp - mov ecx,DWORD PTR 20[esp] - add esp,-128 - movups xmm0,XMMWORD PTR [edi] - and esp,-16 - mov eax,DWORD PTR 16[edi] - movaps XMMWORD PTR [esp],xmm0 - mov edi,esp - mov DWORD PTR 16[esp],eax - mov eax,-1 -DB 243,15,166,200 - movaps xmm0,XMMWORD PTR [esp] - mov eax,DWORD PTR 16[esp] - mov esp,edx - mov edi,DWORD PTR 12[esp] - movups XMMWORD PTR [edi],xmm0 - mov DWORD PTR 16[edi],eax - pop esi - pop edi - ret -_padlock_sha1_blocks ENDP -ALIGN 16 -_padlock_sha256_oneshot PROC PUBLIC -$L_padlock_sha256_oneshot_begin:: - push edi - push esi - xor eax,eax - mov edi,DWORD PTR 12[esp] - mov esi,DWORD PTR 16[esp] - mov ecx,DWORD PTR 20[esp] - push __win32_segv_handler -DB 100,255,48 -DB 100,137,32 - mov edx,esp - add esp,-128 - movups xmm0,XMMWORD PTR [edi] - and esp,-16 - movups xmm1,XMMWORD PTR 16[edi] - movaps XMMWORD PTR [esp],xmm0 - mov edi,esp - movaps XMMWORD PTR 16[esp],xmm1 - xor eax,eax -DB 243,15,166,208 - movaps xmm0,XMMWORD PTR [esp] - movaps xmm1,XMMWORD PTR 16[esp] - mov esp,edx -DB 100,143,5,0,0,0,0 - lea esp,DWORD PTR 4[esp] - mov edi,DWORD PTR 16[esp] - movups XMMWORD PTR [edi],xmm0 - movups XMMWORD PTR 16[edi],xmm1 - pop esi - pop edi - ret -_padlock_sha256_oneshot ENDP -ALIGN 16 -_padlock_sha256_blocks PROC PUBLIC -$L_padlock_sha256_blocks_begin:: - push edi - push esi - mov edi,DWORD PTR 12[esp] - mov esi,DWORD PTR 16[esp] - mov ecx,DWORD PTR 20[esp] - mov edx,esp - add esp,-128 - movups xmm0,XMMWORD PTR [edi] - and esp,-16 - movups xmm1,XMMWORD PTR 16[edi] - movaps XMMWORD PTR [esp],xmm0 - mov edi,esp - movaps XMMWORD PTR 16[esp],xmm1 - mov eax,-1 -DB 243,15,166,208 - movaps xmm0,XMMWORD PTR [esp] - movaps xmm1,XMMWORD PTR 16[esp] - mov esp,edx - mov edi,DWORD PTR 12[esp] - movups XMMWORD PTR [edi],xmm0 - movups XMMWORD PTR 16[edi],xmm1 - pop esi - pop edi - ret -_padlock_sha256_blocks ENDP -ALIGN 16 -_padlock_sha512_blocks PROC PUBLIC -$L_padlock_sha512_blocks_begin:: - push edi - push esi - mov edi,DWORD PTR 12[esp] - mov esi,DWORD PTR 16[esp] - mov ecx,DWORD PTR 20[esp] - mov edx,esp - add esp,-128 - movups xmm0,XMMWORD PTR [edi] - and esp,-16 - movups xmm1,XMMWORD PTR 16[edi] - movups xmm2,XMMWORD PTR 32[edi] - movups xmm3,XMMWORD PTR 48[edi] - movaps XMMWORD PTR [esp],xmm0 - mov edi,esp - movaps XMMWORD PTR 16[esp],xmm1 - movaps XMMWORD PTR 32[esp],xmm2 - movaps XMMWORD PTR 48[esp],xmm3 -DB 243,15,166,224 - movaps xmm0,XMMWORD PTR [esp] - movaps xmm1,XMMWORD PTR 16[esp] - movaps xmm2,XMMWORD PTR 32[esp] - movaps xmm3,XMMWORD PTR 48[esp] - mov esp,edx - mov edi,DWORD PTR 12[esp] - movups XMMWORD PTR [edi],xmm0 - movups XMMWORD PTR 16[edi],xmm1 - movups XMMWORD PTR 32[edi],xmm2 - movups XMMWORD PTR 48[edi],xmm3 - pop esi - pop edi - ret -_padlock_sha512_blocks ENDP -DB 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32 -DB 109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65 -DB 77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101 -DB 110,115,115,108,46,111,114,103,62,0 -ALIGN 16 -.text$ ENDS -_DATA SEGMENT -ALIGN 4 -$Lpadlock_saved_context:: -DD 0 -_DATA ENDS -END +IF @Version LT 800
+ECHO MASM version 8.00 or later is strongly recommended.
+ENDIF
+.686
+.XMM
+IF @Version LT 800
+XMMWORD STRUCT 16
+DQ 2 dup (?)
+XMMWORD ENDS
+ENDIF
+
+.MODEL FLAT
+OPTION DOTNAME
+IF @Version LT 800
+.text$ SEGMENT PAGE 'CODE'
+ELSE
+.text$ SEGMENT ALIGN(64) 'CODE'
+ENDIF
+ALIGN 16
+_padlock_capability PROC PUBLIC
+$L_padlock_capability_begin::
+ push ebx
+ pushfd
+ pop eax
+ mov ecx,eax
+ xor eax,2097152
+ push eax
+ popfd
+ pushfd
+ pop eax
+ xor ecx,eax
+ xor eax,eax
+ bt ecx,21
+ jnc $L000noluck
+ cpuid
+ xor eax,eax
+ cmp ebx,0746e6543h
+ jne $L001zhaoxin
+ cmp edx,048727561h
+ jne $L000noluck
+ cmp ecx,0736c7561h
+ jne $L000noluck
+ jmp $L002zhaoxinEnd
+$L001zhaoxin:
+ cmp ebx,068532020h
+ jne $L000noluck
+ cmp edx,068676e61h
+ jne $L000noluck
+ cmp ecx,020206961h
+ jne $L000noluck
+$L002zhaoxinEnd:
+ mov eax,3221225472
+ cpuid
+ mov edx,eax
+ xor eax,eax
+ cmp edx,3221225473
+ jb $L000noluck
+ mov eax,1
+ cpuid
+ or eax,15
+ xor ebx,ebx
+ and eax,4095
+ cmp eax,1791
+ sete bl
+ mov eax,3221225473
+ push ebx
+ cpuid
+ pop ebx
+ mov eax,edx
+ shl ebx,4
+ and eax,4294967279
+ or eax,ebx
+$L000noluck:
+ pop ebx
+ ret
+_padlock_capability ENDP
+ALIGN 16
+_padlock_key_bswap PROC PUBLIC
+$L_padlock_key_bswap_begin::
+ mov edx,DWORD PTR 4[esp]
+ mov ecx,DWORD PTR 240[edx]
+$L003bswap_loop:
+ mov eax,DWORD PTR [edx]
+ bswap eax
+ mov DWORD PTR [edx],eax
+ lea edx,DWORD PTR 4[edx]
+ sub ecx,1
+ jnz $L003bswap_loop
+ ret
+_padlock_key_bswap ENDP
+ALIGN 16
+_padlock_verify_context PROC PUBLIC
+$L_padlock_verify_context_begin::
+ mov edx,DWORD PTR 4[esp]
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ call __padlock_verify_ctx
+$L004verify_pic_point:
+ lea esp,DWORD PTR 4[esp]
+ ret
+_padlock_verify_context ENDP
+ALIGN 16
+__padlock_verify_ctx PROC PRIVATE
+ bt DWORD PTR 4[esp],30
+ jnc $L005verified
+ cmp edx,DWORD PTR [eax]
+ je $L005verified
+ pushfd
+ popfd
+$L005verified:
+ mov DWORD PTR [eax],edx
+ ret
+__padlock_verify_ctx ENDP
+ALIGN 16
+_padlock_reload_key PROC PUBLIC
+$L_padlock_reload_key_begin::
+ pushfd
+ popfd
+ ret
+_padlock_reload_key ENDP
+ALIGN 16
+_padlock_aes_block PROC PUBLIC
+$L_padlock_aes_block_begin::
+ push edi
+ push esi
+ push ebx
+ mov edi,DWORD PTR 16[esp]
+ mov esi,DWORD PTR 20[esp]
+ mov edx,DWORD PTR 24[esp]
+ mov ecx,1
+ lea ebx,DWORD PTR 32[edx]
+ lea edx,DWORD PTR 16[edx]
+DB 243,15,167,200
+ pop ebx
+ pop esi
+ pop edi
+ ret
+_padlock_aes_block ENDP
+ALIGN 16
+_padlock_ecb_encrypt PROC PUBLIC
+$L_padlock_ecb_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 32[esp]
+ test edx,15
+ jnz $L006ecb_abort
+ test ecx,15
+ jnz $L006ecb_abort
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ cld
+ call __padlock_verify_ctx
+$L007ecb_pic_point:
+ lea edx,DWORD PTR 16[edx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR [edx],32
+ jnz $L008ecb_aligned
+ test edi,15
+ setz al
+ test esi,15
+ setz bl
+ test eax,ebx
+ jnz $L008ecb_aligned
+ neg eax
+ mov ebx,512
+ not eax
+ lea ebp,DWORD PTR [esp-24]
+ cmp ecx,ebx
+ cmovc ebx,ecx
+ and eax,ebx
+ mov ebx,ecx
+ neg eax
+ and ebx,511
+ lea esp,DWORD PTR [ebp*1+eax]
+ mov eax,512
+ cmovz ebx,eax
+ mov eax,ebp
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ cmp ecx,ebx
+ ja $L009ecb_loop
+ mov eax,esi
+ cmp ebp,esp
+ cmove eax,edi
+ add eax,ecx
+ neg eax
+ and eax,4095
+ cmp eax,128
+ mov eax,-128
+ cmovae eax,ebx
+ and ebx,eax
+ jz $L010ecb_unaligned_tail
+ jmp $L009ecb_loop
+ALIGN 16
+$L009ecb_loop:
+ mov DWORD PTR [ebp],edi
+ mov DWORD PTR 4[ebp],esi
+ mov DWORD PTR 8[ebp],ecx
+ mov ecx,ebx
+ mov DWORD PTR 12[ebp],ebx
+ test edi,15
+ cmovnz edi,esp
+ test esi,15
+ jz $L011ecb_inp_aligned
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+ mov ecx,ebx
+ mov esi,edi
+$L011ecb_inp_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,200
+ mov edi,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 12[ebp]
+ test edi,15
+ jz $L012ecb_out_aligned
+ mov ecx,ebx
+ lea esi,DWORD PTR [esp]
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+$L012ecb_out_aligned:
+ mov esi,DWORD PTR 4[ebp]
+ mov ecx,DWORD PTR 8[ebp]
+ add edi,ebx
+ add esi,ebx
+ sub ecx,ebx
+ mov ebx,512
+ jz $L013ecb_break
+ cmp ecx,ebx
+ jae $L009ecb_loop
+$L010ecb_unaligned_tail:
+ xor eax,eax
+ cmp esp,ebp
+ cmove eax,ecx
+ sub esp,eax
+ mov eax,edi
+ mov ebx,ecx
+ shr ecx,2
+ lea edi,DWORD PTR [esp]
+DB 243,165
+ mov esi,esp
+ mov edi,eax
+ mov ecx,ebx
+ jmp $L009ecb_loop
+ALIGN 16
+$L013ecb_break:
+ cmp esp,ebp
+ je $L014ecb_done
+ pxor xmm0,xmm0
+ lea eax,DWORD PTR [esp]
+$L015ecb_bzero:
+ movaps XMMWORD PTR [eax],xmm0
+ lea eax,DWORD PTR 16[eax]
+ cmp ebp,eax
+ ja $L015ecb_bzero
+$L014ecb_done:
+ mov ebp,DWORD PTR 16[ebp]
+ lea esp,DWORD PTR 24[ebp]
+ jmp $L016ecb_exit
+ALIGN 16
+$L008ecb_aligned:
+ lea ebp,DWORD PTR [ecx*1+esi]
+ neg ebp
+ and ebp,4095
+ xor eax,eax
+ cmp ebp,128
+ mov ebp,127
+ cmovae ebp,eax
+ and ebp,ecx
+ sub ecx,ebp
+ jz $L017ecb_aligned_tail
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,200
+ test ebp,ebp
+ jz $L016ecb_exit
+$L017ecb_aligned_tail:
+ mov ecx,ebp
+ lea ebp,DWORD PTR [esp-24]
+ mov esp,ebp
+ mov eax,ebp
+ sub esp,ecx
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ mov eax,edi
+ mov ebx,ecx
+ shr ecx,2
+ lea edi,DWORD PTR [esp]
+DB 243,165
+ mov esi,esp
+ mov edi,eax
+ mov ecx,ebx
+ jmp $L009ecb_loop
+$L016ecb_exit:
+ mov eax,1
+ lea esp,DWORD PTR 4[esp]
+$L006ecb_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_padlock_ecb_encrypt ENDP
+ALIGN 16
+_padlock_cbc_encrypt PROC PUBLIC
+$L_padlock_cbc_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 32[esp]
+ test edx,15
+ jnz $L018cbc_abort
+ test ecx,15
+ jnz $L018cbc_abort
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ cld
+ call __padlock_verify_ctx
+$L019cbc_pic_point:
+ lea edx,DWORD PTR 16[edx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR [edx],32
+ jnz $L020cbc_aligned
+ test edi,15
+ setz al
+ test esi,15
+ setz bl
+ test eax,ebx
+ jnz $L020cbc_aligned
+ neg eax
+ mov ebx,512
+ not eax
+ lea ebp,DWORD PTR [esp-24]
+ cmp ecx,ebx
+ cmovc ebx,ecx
+ and eax,ebx
+ mov ebx,ecx
+ neg eax
+ and ebx,511
+ lea esp,DWORD PTR [ebp*1+eax]
+ mov eax,512
+ cmovz ebx,eax
+ mov eax,ebp
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ cmp ecx,ebx
+ ja $L021cbc_loop
+ mov eax,esi
+ cmp ebp,esp
+ cmove eax,edi
+ add eax,ecx
+ neg eax
+ and eax,4095
+ cmp eax,64
+ mov eax,-64
+ cmovae eax,ebx
+ and ebx,eax
+ jz $L022cbc_unaligned_tail
+ jmp $L021cbc_loop
+ALIGN 16
+$L021cbc_loop:
+ mov DWORD PTR [ebp],edi
+ mov DWORD PTR 4[ebp],esi
+ mov DWORD PTR 8[ebp],ecx
+ mov ecx,ebx
+ mov DWORD PTR 12[ebp],ebx
+ test edi,15
+ cmovnz edi,esp
+ test esi,15
+ jz $L023cbc_inp_aligned
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+ mov ecx,ebx
+ mov esi,edi
+$L023cbc_inp_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,208
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+ mov edi,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 12[ebp]
+ test edi,15
+ jz $L024cbc_out_aligned
+ mov ecx,ebx
+ lea esi,DWORD PTR [esp]
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+$L024cbc_out_aligned:
+ mov esi,DWORD PTR 4[ebp]
+ mov ecx,DWORD PTR 8[ebp]
+ add edi,ebx
+ add esi,ebx
+ sub ecx,ebx
+ mov ebx,512
+ jz $L025cbc_break
+ cmp ecx,ebx
+ jae $L021cbc_loop
+$L022cbc_unaligned_tail:
+ xor eax,eax
+ cmp esp,ebp
+ cmove eax,ecx
+ sub esp,eax
+ mov eax,edi
+ mov ebx,ecx
+ shr ecx,2
+ lea edi,DWORD PTR [esp]
+DB 243,165
+ mov esi,esp
+ mov edi,eax
+ mov ecx,ebx
+ jmp $L021cbc_loop
+ALIGN 16
+$L025cbc_break:
+ cmp esp,ebp
+ je $L026cbc_done
+ pxor xmm0,xmm0
+ lea eax,DWORD PTR [esp]
+$L027cbc_bzero:
+ movaps XMMWORD PTR [eax],xmm0
+ lea eax,DWORD PTR 16[eax]
+ cmp ebp,eax
+ ja $L027cbc_bzero
+$L026cbc_done:
+ mov ebp,DWORD PTR 16[ebp]
+ lea esp,DWORD PTR 24[ebp]
+ jmp $L028cbc_exit
+ALIGN 16
+$L020cbc_aligned:
+ lea ebp,DWORD PTR [ecx*1+esi]
+ neg ebp
+ and ebp,4095
+ xor eax,eax
+ cmp ebp,64
+ mov ebp,63
+ cmovae ebp,eax
+ and ebp,ecx
+ sub ecx,ebp
+ jz $L029cbc_aligned_tail
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,208
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+ test ebp,ebp
+ jz $L028cbc_exit
+$L029cbc_aligned_tail:
+ mov ecx,ebp
+ lea ebp,DWORD PTR [esp-24]
+ mov esp,ebp
+ mov eax,ebp
+ sub esp,ecx
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ mov eax,edi
+ mov ebx,ecx
+ shr ecx,2
+ lea edi,DWORD PTR [esp]
+DB 243,165
+ mov esi,esp
+ mov edi,eax
+ mov ecx,ebx
+ jmp $L021cbc_loop
+$L028cbc_exit:
+ mov eax,1
+ lea esp,DWORD PTR 4[esp]
+$L018cbc_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_padlock_cbc_encrypt ENDP
+ALIGN 16
+_padlock_cfb_encrypt PROC PUBLIC
+$L_padlock_cfb_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 32[esp]
+ test edx,15
+ jnz $L030cfb_abort
+ test ecx,15
+ jnz $L030cfb_abort
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ cld
+ call __padlock_verify_ctx
+$L031cfb_pic_point:
+ lea edx,DWORD PTR 16[edx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR [edx],32
+ jnz $L032cfb_aligned
+ test edi,15
+ setz al
+ test esi,15
+ setz bl
+ test eax,ebx
+ jnz $L032cfb_aligned
+ neg eax
+ mov ebx,512
+ not eax
+ lea ebp,DWORD PTR [esp-24]
+ cmp ecx,ebx
+ cmovc ebx,ecx
+ and eax,ebx
+ mov ebx,ecx
+ neg eax
+ and ebx,511
+ lea esp,DWORD PTR [ebp*1+eax]
+ mov eax,512
+ cmovz ebx,eax
+ mov eax,ebp
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ jmp $L033cfb_loop
+ALIGN 16
+$L033cfb_loop:
+ mov DWORD PTR [ebp],edi
+ mov DWORD PTR 4[ebp],esi
+ mov DWORD PTR 8[ebp],ecx
+ mov ecx,ebx
+ mov DWORD PTR 12[ebp],ebx
+ test edi,15
+ cmovnz edi,esp
+ test esi,15
+ jz $L034cfb_inp_aligned
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+ mov ecx,ebx
+ mov esi,edi
+$L034cfb_inp_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,224
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+ mov edi,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 12[ebp]
+ test edi,15
+ jz $L035cfb_out_aligned
+ mov ecx,ebx
+ lea esi,DWORD PTR [esp]
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+$L035cfb_out_aligned:
+ mov esi,DWORD PTR 4[ebp]
+ mov ecx,DWORD PTR 8[ebp]
+ add edi,ebx
+ add esi,ebx
+ sub ecx,ebx
+ mov ebx,512
+ jnz $L033cfb_loop
+ cmp esp,ebp
+ je $L036cfb_done
+ pxor xmm0,xmm0
+ lea eax,DWORD PTR [esp]
+$L037cfb_bzero:
+ movaps XMMWORD PTR [eax],xmm0
+ lea eax,DWORD PTR 16[eax]
+ cmp ebp,eax
+ ja $L037cfb_bzero
+$L036cfb_done:
+ mov ebp,DWORD PTR 16[ebp]
+ lea esp,DWORD PTR 24[ebp]
+ jmp $L038cfb_exit
+ALIGN 16
+$L032cfb_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,224
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+$L038cfb_exit:
+ mov eax,1
+ lea esp,DWORD PTR 4[esp]
+$L030cfb_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_padlock_cfb_encrypt ENDP
+ALIGN 16
+_padlock_ofb_encrypt PROC PUBLIC
+$L_padlock_ofb_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 32[esp]
+ test edx,15
+ jnz $L039ofb_abort
+ test ecx,15
+ jnz $L039ofb_abort
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ cld
+ call __padlock_verify_ctx
+$L040ofb_pic_point:
+ lea edx,DWORD PTR 16[edx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR [edx],32
+ jnz $L041ofb_aligned
+ test edi,15
+ setz al
+ test esi,15
+ setz bl
+ test eax,ebx
+ jnz $L041ofb_aligned
+ neg eax
+ mov ebx,512
+ not eax
+ lea ebp,DWORD PTR [esp-24]
+ cmp ecx,ebx
+ cmovc ebx,ecx
+ and eax,ebx
+ mov ebx,ecx
+ neg eax
+ and ebx,511
+ lea esp,DWORD PTR [ebp*1+eax]
+ mov eax,512
+ cmovz ebx,eax
+ mov eax,ebp
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ jmp $L042ofb_loop
+ALIGN 16
+$L042ofb_loop:
+ mov DWORD PTR [ebp],edi
+ mov DWORD PTR 4[ebp],esi
+ mov DWORD PTR 8[ebp],ecx
+ mov ecx,ebx
+ mov DWORD PTR 12[ebp],ebx
+ test edi,15
+ cmovnz edi,esp
+ test esi,15
+ jz $L043ofb_inp_aligned
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+ mov ecx,ebx
+ mov esi,edi
+$L043ofb_inp_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,232
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+ mov edi,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 12[ebp]
+ test edi,15
+ jz $L044ofb_out_aligned
+ mov ecx,ebx
+ lea esi,DWORD PTR [esp]
+ shr ecx,2
+DB 243,165
+ sub edi,ebx
+$L044ofb_out_aligned:
+ mov esi,DWORD PTR 4[ebp]
+ mov ecx,DWORD PTR 8[ebp]
+ add edi,ebx
+ add esi,ebx
+ sub ecx,ebx
+ mov ebx,512
+ jnz $L042ofb_loop
+ cmp esp,ebp
+ je $L045ofb_done
+ pxor xmm0,xmm0
+ lea eax,DWORD PTR [esp]
+$L046ofb_bzero:
+ movaps XMMWORD PTR [eax],xmm0
+ lea eax,DWORD PTR 16[eax]
+ cmp ebp,eax
+ ja $L046ofb_bzero
+$L045ofb_done:
+ mov ebp,DWORD PTR 16[ebp]
+ lea esp,DWORD PTR 24[ebp]
+ jmp $L047ofb_exit
+ALIGN 16
+$L041ofb_aligned:
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,232
+ movaps xmm0,XMMWORD PTR [eax]
+ movaps XMMWORD PTR [edx-16],xmm0
+$L047ofb_exit:
+ mov eax,1
+ lea esp,DWORD PTR 4[esp]
+$L039ofb_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_padlock_ofb_encrypt ENDP
+ALIGN 16
+_padlock_ctr32_encrypt PROC PUBLIC
+$L_padlock_ctr32_encrypt_begin::
+ push ebp
+ push ebx
+ push esi
+ push edi
+ mov edi,DWORD PTR 20[esp]
+ mov esi,DWORD PTR 24[esp]
+ mov edx,DWORD PTR 28[esp]
+ mov ecx,DWORD PTR 32[esp]
+ test edx,15
+ jnz $L048ctr32_abort
+ test ecx,15
+ jnz $L048ctr32_abort
+ lea eax,DWORD PTR $Lpadlock_saved_context
+ pushfd
+ cld
+ call __padlock_verify_ctx
+$L049ctr32_pic_point:
+ lea edx,DWORD PTR 16[edx]
+ xor eax,eax
+ movq mm0,QWORD PTR [edx-16]
+ mov ebx,512
+ not eax
+ lea ebp,DWORD PTR [esp-24]
+ cmp ecx,ebx
+ cmovc ebx,ecx
+ and eax,ebx
+ mov ebx,ecx
+ neg eax
+ and ebx,511
+ lea esp,DWORD PTR [ebp*1+eax]
+ mov eax,512
+ cmovz ebx,eax
+ mov eax,ebp
+ and ebp,-16
+ and esp,-16
+ mov DWORD PTR 16[ebp],eax
+ jmp $L050ctr32_loop
+ALIGN 16
+$L050ctr32_loop:
+ mov DWORD PTR [ebp],edi
+ mov DWORD PTR 4[ebp],esi
+ mov DWORD PTR 8[ebp],ecx
+ mov ecx,ebx
+ mov DWORD PTR 12[ebp],ebx
+ mov ecx,DWORD PTR [edx-4]
+ xor edi,edi
+ mov eax,DWORD PTR [edx-8]
+$L051ctr32_prepare:
+ mov DWORD PTR 12[edi*1+esp],ecx
+ bswap ecx
+ movq QWORD PTR [edi*1+esp],mm0
+ inc ecx
+ mov DWORD PTR 8[edi*1+esp],eax
+ bswap ecx
+ lea edi,DWORD PTR 16[edi]
+ cmp edi,ebx
+ jb $L051ctr32_prepare
+ mov DWORD PTR [edx-4],ecx
+ lea esi,DWORD PTR [esp]
+ lea edi,DWORD PTR [esp]
+ mov ecx,ebx
+ lea eax,DWORD PTR [edx-16]
+ lea ebx,DWORD PTR 16[edx]
+ shr ecx,4
+DB 243,15,167,200
+ mov edi,DWORD PTR [ebp]
+ mov ebx,DWORD PTR 12[ebp]
+ mov esi,DWORD PTR 4[ebp]
+ xor ecx,ecx
+$L052ctr32_xor:
+ movups xmm1,XMMWORD PTR [ecx*1+esi]
+ lea ecx,DWORD PTR 16[ecx]
+ pxor xmm1,XMMWORD PTR [ecx*1+esp-16]
+ movups XMMWORD PTR [ecx*1+edi-16],xmm1
+ cmp ecx,ebx
+ jb $L052ctr32_xor
+ mov ecx,DWORD PTR 8[ebp]
+ add edi,ebx
+ add esi,ebx
+ sub ecx,ebx
+ mov ebx,512
+ jnz $L050ctr32_loop
+ pxor xmm0,xmm0
+ lea eax,DWORD PTR [esp]
+$L053ctr32_bzero:
+ movaps XMMWORD PTR [eax],xmm0
+ lea eax,DWORD PTR 16[eax]
+ cmp ebp,eax
+ ja $L053ctr32_bzero
+$L054ctr32_done:
+ mov ebp,DWORD PTR 16[ebp]
+ lea esp,DWORD PTR 24[ebp]
+ mov eax,1
+ lea esp,DWORD PTR 4[esp]
+ emms
+$L048ctr32_abort:
+ pop edi
+ pop esi
+ pop ebx
+ pop ebp
+ ret
+_padlock_ctr32_encrypt ENDP
+ALIGN 16
+_padlock_xstore PROC PUBLIC
+$L_padlock_xstore_begin::
+ push edi
+ mov edi,DWORD PTR 8[esp]
+ mov edx,DWORD PTR 12[esp]
+DB 15,167,192
+ pop edi
+ ret
+_padlock_xstore ENDP
+ALIGN 16
+__win32_segv_handler PROC PRIVATE
+ mov eax,1
+ mov edx,DWORD PTR 4[esp]
+ mov ecx,DWORD PTR 12[esp]
+ cmp DWORD PTR [edx],3221225477
+ jne $L055ret
+ add DWORD PTR 184[ecx],4
+ mov eax,0
+$L055ret:
+ ret
+__win32_segv_handler ENDP
+IF @Version GE 710
+.SAFESEH __win32_segv_handler
+ENDIF
+ALIGN 16
+_padlock_sha1_oneshot PROC PUBLIC
+$L_padlock_sha1_oneshot_begin::
+ push edi
+ push esi
+ xor eax,eax
+ mov edi,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov ecx,DWORD PTR 20[esp]
+ push __win32_segv_handler
+DB 100,255,48
+DB 100,137,32
+ mov edx,esp
+ add esp,-128
+ movups xmm0,XMMWORD PTR [edi]
+ and esp,-16
+ mov eax,DWORD PTR 16[edi]
+ movaps XMMWORD PTR [esp],xmm0
+ mov edi,esp
+ mov DWORD PTR 16[esp],eax
+ xor eax,eax
+DB 243,15,166,200
+ movaps xmm0,XMMWORD PTR [esp]
+ mov eax,DWORD PTR 16[esp]
+ mov esp,edx
+DB 100,143,5,0,0,0,0
+ lea esp,DWORD PTR 4[esp]
+ mov edi,DWORD PTR 16[esp]
+ movups XMMWORD PTR [edi],xmm0
+ mov DWORD PTR 16[edi],eax
+ pop esi
+ pop edi
+ ret
+_padlock_sha1_oneshot ENDP
+ALIGN 16
+_padlock_sha1_blocks PROC PUBLIC
+$L_padlock_sha1_blocks_begin::
+ push edi
+ push esi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov edx,esp
+ mov ecx,DWORD PTR 20[esp]
+ add esp,-128
+ movups xmm0,XMMWORD PTR [edi]
+ and esp,-16
+ mov eax,DWORD PTR 16[edi]
+ movaps XMMWORD PTR [esp],xmm0
+ mov edi,esp
+ mov DWORD PTR 16[esp],eax
+ mov eax,-1
+DB 243,15,166,200
+ movaps xmm0,XMMWORD PTR [esp]
+ mov eax,DWORD PTR 16[esp]
+ mov esp,edx
+ mov edi,DWORD PTR 12[esp]
+ movups XMMWORD PTR [edi],xmm0
+ mov DWORD PTR 16[edi],eax
+ pop esi
+ pop edi
+ ret
+_padlock_sha1_blocks ENDP
+ALIGN 16
+_padlock_sha256_oneshot PROC PUBLIC
+$L_padlock_sha256_oneshot_begin::
+ push edi
+ push esi
+ xor eax,eax
+ mov edi,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov ecx,DWORD PTR 20[esp]
+ push __win32_segv_handler
+DB 100,255,48
+DB 100,137,32
+ mov edx,esp
+ add esp,-128
+ movups xmm0,XMMWORD PTR [edi]
+ and esp,-16
+ movups xmm1,XMMWORD PTR 16[edi]
+ movaps XMMWORD PTR [esp],xmm0
+ mov edi,esp
+ movaps XMMWORD PTR 16[esp],xmm1
+ xor eax,eax
+DB 243,15,166,208
+ movaps xmm0,XMMWORD PTR [esp]
+ movaps xmm1,XMMWORD PTR 16[esp]
+ mov esp,edx
+DB 100,143,5,0,0,0,0
+ lea esp,DWORD PTR 4[esp]
+ mov edi,DWORD PTR 16[esp]
+ movups XMMWORD PTR [edi],xmm0
+ movups XMMWORD PTR 16[edi],xmm1
+ pop esi
+ pop edi
+ ret
+_padlock_sha256_oneshot ENDP
+ALIGN 16
+_padlock_sha256_blocks PROC PUBLIC
+$L_padlock_sha256_blocks_begin::
+ push edi
+ push esi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov ecx,DWORD PTR 20[esp]
+ mov edx,esp
+ add esp,-128
+ movups xmm0,XMMWORD PTR [edi]
+ and esp,-16
+ movups xmm1,XMMWORD PTR 16[edi]
+ movaps XMMWORD PTR [esp],xmm0
+ mov edi,esp
+ movaps XMMWORD PTR 16[esp],xmm1
+ mov eax,-1
+DB 243,15,166,208
+ movaps xmm0,XMMWORD PTR [esp]
+ movaps xmm1,XMMWORD PTR 16[esp]
+ mov esp,edx
+ mov edi,DWORD PTR 12[esp]
+ movups XMMWORD PTR [edi],xmm0
+ movups XMMWORD PTR 16[edi],xmm1
+ pop esi
+ pop edi
+ ret
+_padlock_sha256_blocks ENDP
+ALIGN 16
+_padlock_sha512_blocks PROC PUBLIC
+$L_padlock_sha512_blocks_begin::
+ push edi
+ push esi
+ mov edi,DWORD PTR 12[esp]
+ mov esi,DWORD PTR 16[esp]
+ mov ecx,DWORD PTR 20[esp]
+ mov edx,esp
+ add esp,-128
+ movups xmm0,XMMWORD PTR [edi]
+ and esp,-16
+ movups xmm1,XMMWORD PTR 16[edi]
+ movups xmm2,XMMWORD PTR 32[edi]
+ movups xmm3,XMMWORD PTR 48[edi]
+ movaps XMMWORD PTR [esp],xmm0
+ mov edi,esp
+ movaps XMMWORD PTR 16[esp],xmm1
+ movaps XMMWORD PTR 32[esp],xmm2
+ movaps XMMWORD PTR 48[esp],xmm3
+DB 243,15,166,224
+ movaps xmm0,XMMWORD PTR [esp]
+ movaps xmm1,XMMWORD PTR 16[esp]
+ movaps xmm2,XMMWORD PTR 32[esp]
+ movaps xmm3,XMMWORD PTR 48[esp]
+ mov esp,edx
+ mov edi,DWORD PTR 12[esp]
+ movups XMMWORD PTR [edi],xmm0
+ movups XMMWORD PTR 16[edi],xmm1
+ movups XMMWORD PTR 32[edi],xmm2
+ movups XMMWORD PTR 48[edi],xmm3
+ pop esi
+ pop edi
+ ret
+_padlock_sha512_blocks ENDP
+DB 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,32
+DB 109,111,100,117,108,101,44,32,67,82,89,80,84,79,71,65
+DB 77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101
+DB 110,115,115,108,46,111,114,103,62,0
+ALIGN 16
+.text$ ENDS
+_DATA SEGMENT
+ALIGN 4
+$Lpadlock_saved_context::
+DD 0
+_DATA ENDS
+END
diff --git a/contrib/libs/openssl/asm/windows/engines/e_padlock-x86_64.masm b/contrib/libs/openssl/asm/windows/engines/e_padlock-x86_64.masm index a3461f1aa1..12adf9b4a6 100644 --- a/contrib/libs/openssl/asm/windows/engines/e_padlock-x86_64.masm +++ b/contrib/libs/openssl/asm/windows/engines/e_padlock-x86_64.masm @@ -1,1191 +1,1191 @@ -OPTION DOTNAME -.text$ SEGMENT ALIGN(256) 'CODE' -PUBLIC padlock_capability - -ALIGN 16 -padlock_capability PROC PUBLIC - mov r8,rbx - xor eax,eax - cpuid - xor eax,eax - cmp ebx,0746e6543h - jne $L$zhaoxin - cmp edx,048727561h - jne $L$noluck - cmp ecx,0736c7561h - jne $L$noluck - jmp $L$zhaoxinEnd -$L$zhaoxin:: - cmp ebx,068532020h - jne $L$noluck - cmp edx,068676e61h - jne $L$noluck - cmp ecx,020206961h - jne $L$noluck -$L$zhaoxinEnd:: - mov eax,0C0000000h - cpuid - mov edx,eax - xor eax,eax - cmp edx,0C0000001h - jb $L$noluck - mov eax,0C0000001h - cpuid - mov eax,edx - and eax,0ffffffefh - or eax,010h -$L$noluck:: - mov rbx,r8 - DB 0F3h,0C3h ;repret -padlock_capability ENDP - -PUBLIC padlock_key_bswap - -ALIGN 16 -padlock_key_bswap PROC PUBLIC - mov edx,DWORD PTR[240+rcx] -$L$bswap_loop:: - mov eax,DWORD PTR[rcx] - bswap eax - mov DWORD PTR[rcx],eax - lea rcx,QWORD PTR[4+rcx] - sub edx,1 - jnz $L$bswap_loop - DB 0F3h,0C3h ;repret -padlock_key_bswap ENDP - -PUBLIC padlock_verify_context - -ALIGN 16 -padlock_verify_context PROC PUBLIC - mov rdx,rcx - pushf - lea rax,QWORD PTR[$L$padlock_saved_context] - call _padlock_verify_ctx - lea rsp,QWORD PTR[8+rsp] - DB 0F3h,0C3h ;repret -padlock_verify_context ENDP - - -ALIGN 16 -_padlock_verify_ctx PROC PRIVATE - mov r8,QWORD PTR[8+rsp] - bt r8,30 - jnc $L$verified - cmp rdx,QWORD PTR[rax] - je $L$verified - pushf - popf -$L$verified:: - mov QWORD PTR[rax],rdx - DB 0F3h,0C3h ;repret -_padlock_verify_ctx ENDP - -PUBLIC padlock_reload_key - -ALIGN 16 -padlock_reload_key PROC PUBLIC - pushf - popf - DB 0F3h,0C3h ;repret -padlock_reload_key ENDP - -PUBLIC padlock_aes_block - -ALIGN 16 -padlock_aes_block PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_aes_block:: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - - - mov r8,rbx - mov rcx,1 - lea rbx,QWORD PTR[32+rdx] - lea rdx,QWORD PTR[16+rdx] -DB 0f3h,00fh,0a7h,0c8h - mov rbx,r8 - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_aes_block:: -padlock_aes_block ENDP - -PUBLIC padlock_xstore - -ALIGN 16 -padlock_xstore PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_xstore:: - mov rdi,rcx - mov rsi,rdx - - - mov edx,esi -DB 00fh,0a7h,0c0h - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_xstore:: -padlock_xstore ENDP - -PUBLIC padlock_sha1_oneshot - -ALIGN 16 -padlock_sha1_oneshot PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_sha1_oneshot:: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - - - mov rcx,rdx - mov rdx,rdi - movups xmm0,XMMWORD PTR[rdi] - sub rsp,128+8 - mov eax,DWORD PTR[16+rdi] - movaps XMMWORD PTR[rsp],xmm0 - mov rdi,rsp - mov DWORD PTR[16+rsp],eax - xor rax,rax -DB 0f3h,00fh,0a6h,0c8h - movaps xmm0,XMMWORD PTR[rsp] - mov eax,DWORD PTR[16+rsp] - add rsp,128+8 - movups XMMWORD PTR[rdx],xmm0 - mov DWORD PTR[16+rdx],eax - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_sha1_oneshot:: -padlock_sha1_oneshot ENDP - -PUBLIC padlock_sha1_blocks - -ALIGN 16 -padlock_sha1_blocks PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_sha1_blocks:: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - - - mov rcx,rdx - mov rdx,rdi - movups xmm0,XMMWORD PTR[rdi] - sub rsp,128+8 - mov eax,DWORD PTR[16+rdi] - movaps XMMWORD PTR[rsp],xmm0 - mov rdi,rsp - mov DWORD PTR[16+rsp],eax - mov rax,-1 -DB 0f3h,00fh,0a6h,0c8h - movaps xmm0,XMMWORD PTR[rsp] - mov eax,DWORD PTR[16+rsp] - add rsp,128+8 - movups XMMWORD PTR[rdx],xmm0 - mov DWORD PTR[16+rdx],eax - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_sha1_blocks:: -padlock_sha1_blocks ENDP - -PUBLIC padlock_sha256_oneshot - -ALIGN 16 -padlock_sha256_oneshot PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_sha256_oneshot:: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - - - mov rcx,rdx - mov rdx,rdi - movups xmm0,XMMWORD PTR[rdi] - sub rsp,128+8 - movups xmm1,XMMWORD PTR[16+rdi] - movaps XMMWORD PTR[rsp],xmm0 - mov rdi,rsp - movaps XMMWORD PTR[16+rsp],xmm1 - xor rax,rax -DB 0f3h,00fh,0a6h,0d0h - movaps xmm0,XMMWORD PTR[rsp] - movaps xmm1,XMMWORD PTR[16+rsp] - add rsp,128+8 - movups XMMWORD PTR[rdx],xmm0 - movups XMMWORD PTR[16+rdx],xmm1 - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_sha256_oneshot:: -padlock_sha256_oneshot ENDP - -PUBLIC padlock_sha256_blocks - -ALIGN 16 -padlock_sha256_blocks PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_sha256_blocks:: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - - - mov rcx,rdx - mov rdx,rdi - movups xmm0,XMMWORD PTR[rdi] - sub rsp,128+8 - movups xmm1,XMMWORD PTR[16+rdi] - movaps XMMWORD PTR[rsp],xmm0 - mov rdi,rsp - movaps XMMWORD PTR[16+rsp],xmm1 - mov rax,-1 -DB 0f3h,00fh,0a6h,0d0h - movaps xmm0,XMMWORD PTR[rsp] - movaps xmm1,XMMWORD PTR[16+rsp] - add rsp,128+8 - movups XMMWORD PTR[rdx],xmm0 - movups XMMWORD PTR[16+rdx],xmm1 - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_sha256_blocks:: -padlock_sha256_blocks ENDP - -PUBLIC padlock_sha512_blocks - -ALIGN 16 -padlock_sha512_blocks PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_sha512_blocks:: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - - - mov rcx,rdx - mov rdx,rdi - movups xmm0,XMMWORD PTR[rdi] - sub rsp,128+8 - movups xmm1,XMMWORD PTR[16+rdi] - movups xmm2,XMMWORD PTR[32+rdi] - movups xmm3,XMMWORD PTR[48+rdi] - movaps XMMWORD PTR[rsp],xmm0 - mov rdi,rsp - movaps XMMWORD PTR[16+rsp],xmm1 - movaps XMMWORD PTR[32+rsp],xmm2 - movaps XMMWORD PTR[48+rsp],xmm3 -DB 0f3h,00fh,0a6h,0e0h - movaps xmm0,XMMWORD PTR[rsp] - movaps xmm1,XMMWORD PTR[16+rsp] - movaps xmm2,XMMWORD PTR[32+rsp] - movaps xmm3,XMMWORD PTR[48+rsp] - add rsp,128+8 - movups XMMWORD PTR[rdx],xmm0 - movups XMMWORD PTR[16+rdx],xmm1 - movups XMMWORD PTR[32+rdx],xmm2 - movups XMMWORD PTR[48+rdx],xmm3 - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_sha512_blocks:: -padlock_sha512_blocks ENDP -PUBLIC padlock_ecb_encrypt - -ALIGN 16 -padlock_ecb_encrypt PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_ecb_encrypt:: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - mov rcx,r9 - - - push rbp - push rbx - - xor eax,eax - test rdx,15 - jnz $L$ecb_abort - test rcx,15 - jnz $L$ecb_abort - lea rax,QWORD PTR[$L$padlock_saved_context] - pushf - cld - call _padlock_verify_ctx - lea rdx,QWORD PTR[16+rdx] - xor eax,eax - xor ebx,ebx - test DWORD PTR[rdx],32 - jnz $L$ecb_aligned - test rdi,00fh - setz al - test rsi,00fh - setz bl - test eax,ebx - jnz $L$ecb_aligned - neg rax - mov rbx,512 - not rax - lea rbp,QWORD PTR[rsp] - cmp rcx,rbx - cmovc rbx,rcx - and rax,rbx - mov rbx,rcx - neg rax - and rbx,512-1 - lea rsp,QWORD PTR[rbp*1+rax] - mov rax,512 - cmovz rbx,rax - cmp rcx,rbx - ja $L$ecb_loop - mov rax,rsi - cmp rbp,rsp - cmove rax,rdi - add rax,rcx - neg rax - and rax,0fffh - cmp rax,128 - mov rax,-128 - cmovae rax,rbx - and rbx,rax - jz $L$ecb_unaligned_tail - jmp $L$ecb_loop -ALIGN 16 -$L$ecb_loop:: - cmp rbx,rcx - cmova rbx,rcx - mov r8,rdi - mov r9,rsi - mov r10,rcx - mov rcx,rbx - mov r11,rbx - test rdi,00fh - cmovnz rdi,rsp - test rsi,00fh - jz $L$ecb_inp_aligned - shr rcx,3 -DB 0f3h,048h,0a5h - sub rdi,rbx - mov rcx,rbx - mov rsi,rdi -$L$ecb_inp_aligned:: - lea rax,QWORD PTR[((-16))+rdx] - lea rbx,QWORD PTR[16+rdx] - shr rcx,4 -DB 0f3h,00fh,0a7h,200 - mov rdi,r8 - mov rbx,r11 - test rdi,00fh - jz $L$ecb_out_aligned - mov rcx,rbx - lea rsi,QWORD PTR[rsp] - shr rcx,3 -DB 0f3h,048h,0a5h - sub rdi,rbx -$L$ecb_out_aligned:: - mov rsi,r9 - mov rcx,r10 - add rdi,rbx - add rsi,rbx - sub rcx,rbx - mov rbx,512 - jz $L$ecb_break - cmp rcx,rbx - jae $L$ecb_loop -$L$ecb_unaligned_tail:: - xor eax,eax - cmp rbp,rsp - cmove rax,rcx - mov r8,rdi - mov rbx,rcx - sub rsp,rax - shr rcx,3 - lea rdi,QWORD PTR[rsp] -DB 0f3h,048h,0a5h - mov rsi,rsp - mov rdi,r8 - mov rcx,rbx - jmp $L$ecb_loop -ALIGN 16 -$L$ecb_break:: - cmp rsp,rbp - je $L$ecb_done - - pxor xmm0,xmm0 - lea rax,QWORD PTR[rsp] -$L$ecb_bzero:: - movaps XMMWORD PTR[rax],xmm0 - lea rax,QWORD PTR[16+rax] - cmp rbp,rax - ja $L$ecb_bzero - -$L$ecb_done:: - lea rsp,QWORD PTR[rbp] - jmp $L$ecb_exit - -ALIGN 16 -$L$ecb_aligned:: - lea rbp,QWORD PTR[rcx*1+rsi] - neg rbp - and rbp,0fffh - xor eax,eax - cmp rbp,128 - mov rbp,128-1 - cmovae rbp,rax - and rbp,rcx - sub rcx,rbp - jz $L$ecb_aligned_tail - lea rax,QWORD PTR[((-16))+rdx] - lea rbx,QWORD PTR[16+rdx] - shr rcx,4 -DB 0f3h,00fh,0a7h,200 - test rbp,rbp - jz $L$ecb_exit - -$L$ecb_aligned_tail:: - mov r8,rdi - mov rbx,rbp - mov rcx,rbp - lea rbp,QWORD PTR[rsp] - sub rsp,rcx - shr rcx,3 - lea rdi,QWORD PTR[rsp] -DB 0f3h,048h,0a5h - lea rdi,QWORD PTR[r8] - lea rsi,QWORD PTR[rsp] - mov rcx,rbx - jmp $L$ecb_loop -$L$ecb_exit:: - mov eax,1 - lea rsp,QWORD PTR[8+rsp] -$L$ecb_abort:: - pop rbx - pop rbp - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_ecb_encrypt:: -padlock_ecb_encrypt ENDP -PUBLIC padlock_cbc_encrypt - -ALIGN 16 -padlock_cbc_encrypt PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_cbc_encrypt:: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - mov rcx,r9 - - - push rbp - push rbx - - xor eax,eax - test rdx,15 - jnz $L$cbc_abort - test rcx,15 - jnz $L$cbc_abort - lea rax,QWORD PTR[$L$padlock_saved_context] - pushf - cld - call _padlock_verify_ctx - lea rdx,QWORD PTR[16+rdx] - xor eax,eax - xor ebx,ebx - test DWORD PTR[rdx],32 - jnz $L$cbc_aligned - test rdi,00fh - setz al - test rsi,00fh - setz bl - test eax,ebx - jnz $L$cbc_aligned - neg rax - mov rbx,512 - not rax - lea rbp,QWORD PTR[rsp] - cmp rcx,rbx - cmovc rbx,rcx - and rax,rbx - mov rbx,rcx - neg rax - and rbx,512-1 - lea rsp,QWORD PTR[rbp*1+rax] - mov rax,512 - cmovz rbx,rax - cmp rcx,rbx - ja $L$cbc_loop - mov rax,rsi - cmp rbp,rsp - cmove rax,rdi - add rax,rcx - neg rax - and rax,0fffh - cmp rax,64 - mov rax,-64 - cmovae rax,rbx - and rbx,rax - jz $L$cbc_unaligned_tail - jmp $L$cbc_loop -ALIGN 16 -$L$cbc_loop:: - cmp rbx,rcx - cmova rbx,rcx - mov r8,rdi - mov r9,rsi - mov r10,rcx - mov rcx,rbx - mov r11,rbx - test rdi,00fh - cmovnz rdi,rsp - test rsi,00fh - jz $L$cbc_inp_aligned - shr rcx,3 -DB 0f3h,048h,0a5h - sub rdi,rbx - mov rcx,rbx - mov rsi,rdi -$L$cbc_inp_aligned:: - lea rax,QWORD PTR[((-16))+rdx] - lea rbx,QWORD PTR[16+rdx] - shr rcx,4 -DB 0f3h,00fh,0a7h,208 - movdqa xmm0,XMMWORD PTR[rax] - movdqa XMMWORD PTR[(-16)+rdx],xmm0 - mov rdi,r8 - mov rbx,r11 - test rdi,00fh - jz $L$cbc_out_aligned - mov rcx,rbx - lea rsi,QWORD PTR[rsp] - shr rcx,3 -DB 0f3h,048h,0a5h - sub rdi,rbx -$L$cbc_out_aligned:: - mov rsi,r9 - mov rcx,r10 - add rdi,rbx - add rsi,rbx - sub rcx,rbx - mov rbx,512 - jz $L$cbc_break - cmp rcx,rbx - jae $L$cbc_loop -$L$cbc_unaligned_tail:: - xor eax,eax - cmp rbp,rsp - cmove rax,rcx - mov r8,rdi - mov rbx,rcx - sub rsp,rax - shr rcx,3 - lea rdi,QWORD PTR[rsp] -DB 0f3h,048h,0a5h - mov rsi,rsp - mov rdi,r8 - mov rcx,rbx - jmp $L$cbc_loop -ALIGN 16 -$L$cbc_break:: - cmp rsp,rbp - je $L$cbc_done - - pxor xmm0,xmm0 - lea rax,QWORD PTR[rsp] -$L$cbc_bzero:: - movaps XMMWORD PTR[rax],xmm0 - lea rax,QWORD PTR[16+rax] - cmp rbp,rax - ja $L$cbc_bzero - -$L$cbc_done:: - lea rsp,QWORD PTR[rbp] - jmp $L$cbc_exit - -ALIGN 16 -$L$cbc_aligned:: - lea rbp,QWORD PTR[rcx*1+rsi] - neg rbp - and rbp,0fffh - xor eax,eax - cmp rbp,64 - mov rbp,64-1 - cmovae rbp,rax - and rbp,rcx - sub rcx,rbp - jz $L$cbc_aligned_tail - lea rax,QWORD PTR[((-16))+rdx] - lea rbx,QWORD PTR[16+rdx] - shr rcx,4 -DB 0f3h,00fh,0a7h,208 - movdqa xmm0,XMMWORD PTR[rax] - movdqa XMMWORD PTR[(-16)+rdx],xmm0 - test rbp,rbp - jz $L$cbc_exit - -$L$cbc_aligned_tail:: - mov r8,rdi - mov rbx,rbp - mov rcx,rbp - lea rbp,QWORD PTR[rsp] - sub rsp,rcx - shr rcx,3 - lea rdi,QWORD PTR[rsp] -DB 0f3h,048h,0a5h - lea rdi,QWORD PTR[r8] - lea rsi,QWORD PTR[rsp] - mov rcx,rbx - jmp $L$cbc_loop -$L$cbc_exit:: - mov eax,1 - lea rsp,QWORD PTR[8+rsp] -$L$cbc_abort:: - pop rbx - pop rbp - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_cbc_encrypt:: -padlock_cbc_encrypt ENDP -PUBLIC padlock_cfb_encrypt - -ALIGN 16 -padlock_cfb_encrypt PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_cfb_encrypt:: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - mov rcx,r9 - - - push rbp - push rbx - - xor eax,eax - test rdx,15 - jnz $L$cfb_abort - test rcx,15 - jnz $L$cfb_abort - lea rax,QWORD PTR[$L$padlock_saved_context] - pushf - cld - call _padlock_verify_ctx - lea rdx,QWORD PTR[16+rdx] - xor eax,eax - xor ebx,ebx - test DWORD PTR[rdx],32 - jnz $L$cfb_aligned - test rdi,00fh - setz al - test rsi,00fh - setz bl - test eax,ebx - jnz $L$cfb_aligned - neg rax - mov rbx,512 - not rax - lea rbp,QWORD PTR[rsp] - cmp rcx,rbx - cmovc rbx,rcx - and rax,rbx - mov rbx,rcx - neg rax - and rbx,512-1 - lea rsp,QWORD PTR[rbp*1+rax] - mov rax,512 - cmovz rbx,rax - jmp $L$cfb_loop -ALIGN 16 -$L$cfb_loop:: - cmp rbx,rcx - cmova rbx,rcx - mov r8,rdi - mov r9,rsi - mov r10,rcx - mov rcx,rbx - mov r11,rbx - test rdi,00fh - cmovnz rdi,rsp - test rsi,00fh - jz $L$cfb_inp_aligned - shr rcx,3 -DB 0f3h,048h,0a5h - sub rdi,rbx - mov rcx,rbx - mov rsi,rdi -$L$cfb_inp_aligned:: - lea rax,QWORD PTR[((-16))+rdx] - lea rbx,QWORD PTR[16+rdx] - shr rcx,4 -DB 0f3h,00fh,0a7h,224 - movdqa xmm0,XMMWORD PTR[rax] - movdqa XMMWORD PTR[(-16)+rdx],xmm0 - mov rdi,r8 - mov rbx,r11 - test rdi,00fh - jz $L$cfb_out_aligned - mov rcx,rbx - lea rsi,QWORD PTR[rsp] - shr rcx,3 -DB 0f3h,048h,0a5h - sub rdi,rbx -$L$cfb_out_aligned:: - mov rsi,r9 - mov rcx,r10 - add rdi,rbx - add rsi,rbx - sub rcx,rbx - mov rbx,512 - jnz $L$cfb_loop - cmp rsp,rbp - je $L$cfb_done - - pxor xmm0,xmm0 - lea rax,QWORD PTR[rsp] -$L$cfb_bzero:: - movaps XMMWORD PTR[rax],xmm0 - lea rax,QWORD PTR[16+rax] - cmp rbp,rax - ja $L$cfb_bzero - -$L$cfb_done:: - lea rsp,QWORD PTR[rbp] - jmp $L$cfb_exit - -ALIGN 16 -$L$cfb_aligned:: - lea rax,QWORD PTR[((-16))+rdx] - lea rbx,QWORD PTR[16+rdx] - shr rcx,4 -DB 0f3h,00fh,0a7h,224 - movdqa xmm0,XMMWORD PTR[rax] - movdqa XMMWORD PTR[(-16)+rdx],xmm0 -$L$cfb_exit:: - mov eax,1 - lea rsp,QWORD PTR[8+rsp] -$L$cfb_abort:: - pop rbx - pop rbp - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_cfb_encrypt:: -padlock_cfb_encrypt ENDP -PUBLIC padlock_ofb_encrypt - -ALIGN 16 -padlock_ofb_encrypt PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_ofb_encrypt:: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - mov rcx,r9 - - - push rbp - push rbx - - xor eax,eax - test rdx,15 - jnz $L$ofb_abort - test rcx,15 - jnz $L$ofb_abort - lea rax,QWORD PTR[$L$padlock_saved_context] - pushf - cld - call _padlock_verify_ctx - lea rdx,QWORD PTR[16+rdx] - xor eax,eax - xor ebx,ebx - test DWORD PTR[rdx],32 - jnz $L$ofb_aligned - test rdi,00fh - setz al - test rsi,00fh - setz bl - test eax,ebx - jnz $L$ofb_aligned - neg rax - mov rbx,512 - not rax - lea rbp,QWORD PTR[rsp] - cmp rcx,rbx - cmovc rbx,rcx - and rax,rbx - mov rbx,rcx - neg rax - and rbx,512-1 - lea rsp,QWORD PTR[rbp*1+rax] - mov rax,512 - cmovz rbx,rax - jmp $L$ofb_loop -ALIGN 16 -$L$ofb_loop:: - cmp rbx,rcx - cmova rbx,rcx - mov r8,rdi - mov r9,rsi - mov r10,rcx - mov rcx,rbx - mov r11,rbx - test rdi,00fh - cmovnz rdi,rsp - test rsi,00fh - jz $L$ofb_inp_aligned - shr rcx,3 -DB 0f3h,048h,0a5h - sub rdi,rbx - mov rcx,rbx - mov rsi,rdi -$L$ofb_inp_aligned:: - lea rax,QWORD PTR[((-16))+rdx] - lea rbx,QWORD PTR[16+rdx] - shr rcx,4 -DB 0f3h,00fh,0a7h,232 - movdqa xmm0,XMMWORD PTR[rax] - movdqa XMMWORD PTR[(-16)+rdx],xmm0 - mov rdi,r8 - mov rbx,r11 - test rdi,00fh - jz $L$ofb_out_aligned - mov rcx,rbx - lea rsi,QWORD PTR[rsp] - shr rcx,3 -DB 0f3h,048h,0a5h - sub rdi,rbx -$L$ofb_out_aligned:: - mov rsi,r9 - mov rcx,r10 - add rdi,rbx - add rsi,rbx - sub rcx,rbx - mov rbx,512 - jnz $L$ofb_loop - cmp rsp,rbp - je $L$ofb_done - - pxor xmm0,xmm0 - lea rax,QWORD PTR[rsp] -$L$ofb_bzero:: - movaps XMMWORD PTR[rax],xmm0 - lea rax,QWORD PTR[16+rax] - cmp rbp,rax - ja $L$ofb_bzero - -$L$ofb_done:: - lea rsp,QWORD PTR[rbp] - jmp $L$ofb_exit - -ALIGN 16 -$L$ofb_aligned:: - lea rax,QWORD PTR[((-16))+rdx] - lea rbx,QWORD PTR[16+rdx] - shr rcx,4 -DB 0f3h,00fh,0a7h,232 - movdqa xmm0,XMMWORD PTR[rax] - movdqa XMMWORD PTR[(-16)+rdx],xmm0 -$L$ofb_exit:: - mov eax,1 - lea rsp,QWORD PTR[8+rsp] -$L$ofb_abort:: - pop rbx - pop rbp - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_ofb_encrypt:: -padlock_ofb_encrypt ENDP -PUBLIC padlock_ctr32_encrypt - -ALIGN 16 -padlock_ctr32_encrypt PROC PUBLIC - mov QWORD PTR[8+rsp],rdi ;WIN64 prologue - mov QWORD PTR[16+rsp],rsi - mov rax,rsp -$L$SEH_begin_padlock_ctr32_encrypt:: - mov rdi,rcx - mov rsi,rdx - mov rdx,r8 - mov rcx,r9 - - - push rbp - push rbx - - xor eax,eax - test rdx,15 - jnz $L$ctr32_abort - test rcx,15 - jnz $L$ctr32_abort - lea rax,QWORD PTR[$L$padlock_saved_context] - pushf - cld - call _padlock_verify_ctx - lea rdx,QWORD PTR[16+rdx] - xor eax,eax - xor ebx,ebx - test DWORD PTR[rdx],32 - jnz $L$ctr32_aligned - test rdi,00fh - setz al - test rsi,00fh - setz bl - test eax,ebx - jnz $L$ctr32_aligned - neg rax - mov rbx,512 - not rax - lea rbp,QWORD PTR[rsp] - cmp rcx,rbx - cmovc rbx,rcx - and rax,rbx - mov rbx,rcx - neg rax - and rbx,512-1 - lea rsp,QWORD PTR[rbp*1+rax] - mov rax,512 - cmovz rbx,rax -$L$ctr32_reenter:: - mov eax,DWORD PTR[((-4))+rdx] - bswap eax - neg eax - and eax,31 - mov rbx,512 - shl eax,4 - cmovz rax,rbx - cmp rcx,rax - cmova rbx,rax - cmovbe rbx,rcx - cmp rcx,rbx - ja $L$ctr32_loop - mov rax,rsi - cmp rbp,rsp - cmove rax,rdi - add rax,rcx - neg rax - and rax,0fffh - cmp rax,32 - mov rax,-32 - cmovae rax,rbx - and rbx,rax - jz $L$ctr32_unaligned_tail - jmp $L$ctr32_loop -ALIGN 16 -$L$ctr32_loop:: - cmp rbx,rcx - cmova rbx,rcx - mov r8,rdi - mov r9,rsi - mov r10,rcx - mov rcx,rbx - mov r11,rbx - test rdi,00fh - cmovnz rdi,rsp - test rsi,00fh - jz $L$ctr32_inp_aligned - shr rcx,3 -DB 0f3h,048h,0a5h - sub rdi,rbx - mov rcx,rbx - mov rsi,rdi -$L$ctr32_inp_aligned:: - lea rax,QWORD PTR[((-16))+rdx] - lea rbx,QWORD PTR[16+rdx] - shr rcx,4 -DB 0f3h,00fh,0a7h,216 - mov eax,DWORD PTR[((-4))+rdx] - test eax,0ffff0000h - jnz $L$ctr32_no_carry - bswap eax - add eax,010000h - bswap eax - mov DWORD PTR[((-4))+rdx],eax -$L$ctr32_no_carry:: - mov rdi,r8 - mov rbx,r11 - test rdi,00fh - jz $L$ctr32_out_aligned - mov rcx,rbx - lea rsi,QWORD PTR[rsp] - shr rcx,3 -DB 0f3h,048h,0a5h - sub rdi,rbx -$L$ctr32_out_aligned:: - mov rsi,r9 - mov rcx,r10 - add rdi,rbx - add rsi,rbx - sub rcx,rbx - mov rbx,512 - jz $L$ctr32_break - cmp rcx,rbx - jae $L$ctr32_loop - mov rbx,rcx - mov rax,rsi - cmp rbp,rsp - cmove rax,rdi - add rax,rcx - neg rax - and rax,0fffh - cmp rax,32 - mov rax,-32 - cmovae rax,rbx - and rbx,rax - jnz $L$ctr32_loop -$L$ctr32_unaligned_tail:: - xor eax,eax - cmp rbp,rsp - cmove rax,rcx - mov r8,rdi - mov rbx,rcx - sub rsp,rax - shr rcx,3 - lea rdi,QWORD PTR[rsp] -DB 0f3h,048h,0a5h - mov rsi,rsp - mov rdi,r8 - mov rcx,rbx - jmp $L$ctr32_loop -ALIGN 16 -$L$ctr32_break:: - cmp rsp,rbp - je $L$ctr32_done - - pxor xmm0,xmm0 - lea rax,QWORD PTR[rsp] -$L$ctr32_bzero:: - movaps XMMWORD PTR[rax],xmm0 - lea rax,QWORD PTR[16+rax] - cmp rbp,rax - ja $L$ctr32_bzero - -$L$ctr32_done:: - lea rsp,QWORD PTR[rbp] - jmp $L$ctr32_exit - -ALIGN 16 -$L$ctr32_aligned:: - mov eax,DWORD PTR[((-4))+rdx] - bswap eax - neg eax - and eax,0ffffh - mov rbx,1048576 - shl eax,4 - cmovz rax,rbx - cmp rcx,rax - cmova rbx,rax - cmovbe rbx,rcx - jbe $L$ctr32_aligned_skip - -$L$ctr32_aligned_loop:: - mov r10,rcx - mov rcx,rbx - mov r11,rbx - - lea rax,QWORD PTR[((-16))+rdx] - lea rbx,QWORD PTR[16+rdx] - shr rcx,4 -DB 0f3h,00fh,0a7h,216 - - mov eax,DWORD PTR[((-4))+rdx] - bswap eax - add eax,010000h - bswap eax - mov DWORD PTR[((-4))+rdx],eax - - mov rcx,r10 - sub rcx,r11 - mov rbx,1048576 - jz $L$ctr32_exit - cmp rcx,rbx - jae $L$ctr32_aligned_loop - -$L$ctr32_aligned_skip:: - lea rbp,QWORD PTR[rcx*1+rsi] - neg rbp - and rbp,0fffh - xor eax,eax - cmp rbp,32 - mov rbp,32-1 - cmovae rbp,rax - and rbp,rcx - sub rcx,rbp - jz $L$ctr32_aligned_tail - lea rax,QWORD PTR[((-16))+rdx] - lea rbx,QWORD PTR[16+rdx] - shr rcx,4 -DB 0f3h,00fh,0a7h,216 - test rbp,rbp - jz $L$ctr32_exit - -$L$ctr32_aligned_tail:: - mov r8,rdi - mov rbx,rbp - mov rcx,rbp - lea rbp,QWORD PTR[rsp] - sub rsp,rcx - shr rcx,3 - lea rdi,QWORD PTR[rsp] -DB 0f3h,048h,0a5h - lea rdi,QWORD PTR[r8] - lea rsi,QWORD PTR[rsp] - mov rcx,rbx - jmp $L$ctr32_loop -$L$ctr32_exit:: - mov eax,1 - lea rsp,QWORD PTR[8+rsp] -$L$ctr32_abort:: - pop rbx - pop rbp - mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue - mov rsi,QWORD PTR[16+rsp] - DB 0F3h,0C3h ;repret -$L$SEH_end_padlock_ctr32_encrypt:: -padlock_ctr32_encrypt ENDP -DB 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,95 -DB 54,52,32,109,111,100,117,108,101,44,32,67,82,89,80,84 -DB 79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64 -DB 111,112,101,110,115,115,108,46,111,114,103,62,0 -ALIGN 16 -.text$ ENDS -_DATA SEGMENT -ALIGN 8 -$L$padlock_saved_context:: - DQ 0 - -_DATA ENDS -END +OPTION DOTNAME
+.text$ SEGMENT ALIGN(256) 'CODE'
+PUBLIC padlock_capability
+
+ALIGN 16
+padlock_capability PROC PUBLIC
+ mov r8,rbx
+ xor eax,eax
+ cpuid
+ xor eax,eax
+ cmp ebx,0746e6543h
+ jne $L$zhaoxin
+ cmp edx,048727561h
+ jne $L$noluck
+ cmp ecx,0736c7561h
+ jne $L$noluck
+ jmp $L$zhaoxinEnd
+$L$zhaoxin::
+ cmp ebx,068532020h
+ jne $L$noluck
+ cmp edx,068676e61h
+ jne $L$noluck
+ cmp ecx,020206961h
+ jne $L$noluck
+$L$zhaoxinEnd::
+ mov eax,0C0000000h
+ cpuid
+ mov edx,eax
+ xor eax,eax
+ cmp edx,0C0000001h
+ jb $L$noluck
+ mov eax,0C0000001h
+ cpuid
+ mov eax,edx
+ and eax,0ffffffefh
+ or eax,010h
+$L$noluck::
+ mov rbx,r8
+ DB 0F3h,0C3h ;repret
+padlock_capability ENDP
+
+PUBLIC padlock_key_bswap
+
+ALIGN 16
+padlock_key_bswap PROC PUBLIC
+ mov edx,DWORD PTR[240+rcx]
+$L$bswap_loop::
+ mov eax,DWORD PTR[rcx]
+ bswap eax
+ mov DWORD PTR[rcx],eax
+ lea rcx,QWORD PTR[4+rcx]
+ sub edx,1
+ jnz $L$bswap_loop
+ DB 0F3h,0C3h ;repret
+padlock_key_bswap ENDP
+
+PUBLIC padlock_verify_context
+
+ALIGN 16
+padlock_verify_context PROC PUBLIC
+ mov rdx,rcx
+ pushf
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ call _padlock_verify_ctx
+ lea rsp,QWORD PTR[8+rsp]
+ DB 0F3h,0C3h ;repret
+padlock_verify_context ENDP
+
+
+ALIGN 16
+_padlock_verify_ctx PROC PRIVATE
+ mov r8,QWORD PTR[8+rsp]
+ bt r8,30
+ jnc $L$verified
+ cmp rdx,QWORD PTR[rax]
+ je $L$verified
+ pushf
+ popf
+$L$verified::
+ mov QWORD PTR[rax],rdx
+ DB 0F3h,0C3h ;repret
+_padlock_verify_ctx ENDP
+
+PUBLIC padlock_reload_key
+
+ALIGN 16
+padlock_reload_key PROC PUBLIC
+ pushf
+ popf
+ DB 0F3h,0C3h ;repret
+padlock_reload_key ENDP
+
+PUBLIC padlock_aes_block
+
+ALIGN 16
+padlock_aes_block PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_aes_block::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov r8,rbx
+ mov rcx,1
+ lea rbx,QWORD PTR[32+rdx]
+ lea rdx,QWORD PTR[16+rdx]
+DB 0f3h,00fh,0a7h,0c8h
+ mov rbx,r8
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_aes_block::
+padlock_aes_block ENDP
+
+PUBLIC padlock_xstore
+
+ALIGN 16
+padlock_xstore PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_xstore::
+ mov rdi,rcx
+ mov rsi,rdx
+
+
+ mov edx,esi
+DB 00fh,0a7h,0c0h
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_xstore::
+padlock_xstore ENDP
+
+PUBLIC padlock_sha1_oneshot
+
+ALIGN 16
+padlock_sha1_oneshot PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_sha1_oneshot::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov rcx,rdx
+ mov rdx,rdi
+ movups xmm0,XMMWORD PTR[rdi]
+ sub rsp,128+8
+ mov eax,DWORD PTR[16+rdi]
+ movaps XMMWORD PTR[rsp],xmm0
+ mov rdi,rsp
+ mov DWORD PTR[16+rsp],eax
+ xor rax,rax
+DB 0f3h,00fh,0a6h,0c8h
+ movaps xmm0,XMMWORD PTR[rsp]
+ mov eax,DWORD PTR[16+rsp]
+ add rsp,128+8
+ movups XMMWORD PTR[rdx],xmm0
+ mov DWORD PTR[16+rdx],eax
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_sha1_oneshot::
+padlock_sha1_oneshot ENDP
+
+PUBLIC padlock_sha1_blocks
+
+ALIGN 16
+padlock_sha1_blocks PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_sha1_blocks::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov rcx,rdx
+ mov rdx,rdi
+ movups xmm0,XMMWORD PTR[rdi]
+ sub rsp,128+8
+ mov eax,DWORD PTR[16+rdi]
+ movaps XMMWORD PTR[rsp],xmm0
+ mov rdi,rsp
+ mov DWORD PTR[16+rsp],eax
+ mov rax,-1
+DB 0f3h,00fh,0a6h,0c8h
+ movaps xmm0,XMMWORD PTR[rsp]
+ mov eax,DWORD PTR[16+rsp]
+ add rsp,128+8
+ movups XMMWORD PTR[rdx],xmm0
+ mov DWORD PTR[16+rdx],eax
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_sha1_blocks::
+padlock_sha1_blocks ENDP
+
+PUBLIC padlock_sha256_oneshot
+
+ALIGN 16
+padlock_sha256_oneshot PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_sha256_oneshot::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov rcx,rdx
+ mov rdx,rdi
+ movups xmm0,XMMWORD PTR[rdi]
+ sub rsp,128+8
+ movups xmm1,XMMWORD PTR[16+rdi]
+ movaps XMMWORD PTR[rsp],xmm0
+ mov rdi,rsp
+ movaps XMMWORD PTR[16+rsp],xmm1
+ xor rax,rax
+DB 0f3h,00fh,0a6h,0d0h
+ movaps xmm0,XMMWORD PTR[rsp]
+ movaps xmm1,XMMWORD PTR[16+rsp]
+ add rsp,128+8
+ movups XMMWORD PTR[rdx],xmm0
+ movups XMMWORD PTR[16+rdx],xmm1
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_sha256_oneshot::
+padlock_sha256_oneshot ENDP
+
+PUBLIC padlock_sha256_blocks
+
+ALIGN 16
+padlock_sha256_blocks PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_sha256_blocks::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov rcx,rdx
+ mov rdx,rdi
+ movups xmm0,XMMWORD PTR[rdi]
+ sub rsp,128+8
+ movups xmm1,XMMWORD PTR[16+rdi]
+ movaps XMMWORD PTR[rsp],xmm0
+ mov rdi,rsp
+ movaps XMMWORD PTR[16+rsp],xmm1
+ mov rax,-1
+DB 0f3h,00fh,0a6h,0d0h
+ movaps xmm0,XMMWORD PTR[rsp]
+ movaps xmm1,XMMWORD PTR[16+rsp]
+ add rsp,128+8
+ movups XMMWORD PTR[rdx],xmm0
+ movups XMMWORD PTR[16+rdx],xmm1
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_sha256_blocks::
+padlock_sha256_blocks ENDP
+
+PUBLIC padlock_sha512_blocks
+
+ALIGN 16
+padlock_sha512_blocks PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_sha512_blocks::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+
+
+ mov rcx,rdx
+ mov rdx,rdi
+ movups xmm0,XMMWORD PTR[rdi]
+ sub rsp,128+8
+ movups xmm1,XMMWORD PTR[16+rdi]
+ movups xmm2,XMMWORD PTR[32+rdi]
+ movups xmm3,XMMWORD PTR[48+rdi]
+ movaps XMMWORD PTR[rsp],xmm0
+ mov rdi,rsp
+ movaps XMMWORD PTR[16+rsp],xmm1
+ movaps XMMWORD PTR[32+rsp],xmm2
+ movaps XMMWORD PTR[48+rsp],xmm3
+DB 0f3h,00fh,0a6h,0e0h
+ movaps xmm0,XMMWORD PTR[rsp]
+ movaps xmm1,XMMWORD PTR[16+rsp]
+ movaps xmm2,XMMWORD PTR[32+rsp]
+ movaps xmm3,XMMWORD PTR[48+rsp]
+ add rsp,128+8
+ movups XMMWORD PTR[rdx],xmm0
+ movups XMMWORD PTR[16+rdx],xmm1
+ movups XMMWORD PTR[32+rdx],xmm2
+ movups XMMWORD PTR[48+rdx],xmm3
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_sha512_blocks::
+padlock_sha512_blocks ENDP
+PUBLIC padlock_ecb_encrypt
+
+ALIGN 16
+padlock_ecb_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_ecb_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+ push rbp
+ push rbx
+
+ xor eax,eax
+ test rdx,15
+ jnz $L$ecb_abort
+ test rcx,15
+ jnz $L$ecb_abort
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ pushf
+ cld
+ call _padlock_verify_ctx
+ lea rdx,QWORD PTR[16+rdx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR[rdx],32
+ jnz $L$ecb_aligned
+ test rdi,00fh
+ setz al
+ test rsi,00fh
+ setz bl
+ test eax,ebx
+ jnz $L$ecb_aligned
+ neg rax
+ mov rbx,512
+ not rax
+ lea rbp,QWORD PTR[rsp]
+ cmp rcx,rbx
+ cmovc rbx,rcx
+ and rax,rbx
+ mov rbx,rcx
+ neg rax
+ and rbx,512-1
+ lea rsp,QWORD PTR[rbp*1+rax]
+ mov rax,512
+ cmovz rbx,rax
+ cmp rcx,rbx
+ ja $L$ecb_loop
+ mov rax,rsi
+ cmp rbp,rsp
+ cmove rax,rdi
+ add rax,rcx
+ neg rax
+ and rax,0fffh
+ cmp rax,128
+ mov rax,-128
+ cmovae rax,rbx
+ and rbx,rax
+ jz $L$ecb_unaligned_tail
+ jmp $L$ecb_loop
+ALIGN 16
+$L$ecb_loop::
+ cmp rbx,rcx
+ cmova rbx,rcx
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+ test rdi,00fh
+ cmovnz rdi,rsp
+ test rsi,00fh
+ jz $L$ecb_inp_aligned
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+ mov rcx,rbx
+ mov rsi,rdi
+$L$ecb_inp_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,200
+ mov rdi,r8
+ mov rbx,r11
+ test rdi,00fh
+ jz $L$ecb_out_aligned
+ mov rcx,rbx
+ lea rsi,QWORD PTR[rsp]
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+$L$ecb_out_aligned::
+ mov rsi,r9
+ mov rcx,r10
+ add rdi,rbx
+ add rsi,rbx
+ sub rcx,rbx
+ mov rbx,512
+ jz $L$ecb_break
+ cmp rcx,rbx
+ jae $L$ecb_loop
+$L$ecb_unaligned_tail::
+ xor eax,eax
+ cmp rbp,rsp
+ cmove rax,rcx
+ mov r8,rdi
+ mov rbx,rcx
+ sub rsp,rax
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ mov rsi,rsp
+ mov rdi,r8
+ mov rcx,rbx
+ jmp $L$ecb_loop
+ALIGN 16
+$L$ecb_break::
+ cmp rsp,rbp
+ je $L$ecb_done
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[rsp]
+$L$ecb_bzero::
+ movaps XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+ cmp rbp,rax
+ ja $L$ecb_bzero
+
+$L$ecb_done::
+ lea rsp,QWORD PTR[rbp]
+ jmp $L$ecb_exit
+
+ALIGN 16
+$L$ecb_aligned::
+ lea rbp,QWORD PTR[rcx*1+rsi]
+ neg rbp
+ and rbp,0fffh
+ xor eax,eax
+ cmp rbp,128
+ mov rbp,128-1
+ cmovae rbp,rax
+ and rbp,rcx
+ sub rcx,rbp
+ jz $L$ecb_aligned_tail
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,200
+ test rbp,rbp
+ jz $L$ecb_exit
+
+$L$ecb_aligned_tail::
+ mov r8,rdi
+ mov rbx,rbp
+ mov rcx,rbp
+ lea rbp,QWORD PTR[rsp]
+ sub rsp,rcx
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ lea rdi,QWORD PTR[r8]
+ lea rsi,QWORD PTR[rsp]
+ mov rcx,rbx
+ jmp $L$ecb_loop
+$L$ecb_exit::
+ mov eax,1
+ lea rsp,QWORD PTR[8+rsp]
+$L$ecb_abort::
+ pop rbx
+ pop rbp
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_ecb_encrypt::
+padlock_ecb_encrypt ENDP
+PUBLIC padlock_cbc_encrypt
+
+ALIGN 16
+padlock_cbc_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_cbc_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+ push rbp
+ push rbx
+
+ xor eax,eax
+ test rdx,15
+ jnz $L$cbc_abort
+ test rcx,15
+ jnz $L$cbc_abort
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ pushf
+ cld
+ call _padlock_verify_ctx
+ lea rdx,QWORD PTR[16+rdx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR[rdx],32
+ jnz $L$cbc_aligned
+ test rdi,00fh
+ setz al
+ test rsi,00fh
+ setz bl
+ test eax,ebx
+ jnz $L$cbc_aligned
+ neg rax
+ mov rbx,512
+ not rax
+ lea rbp,QWORD PTR[rsp]
+ cmp rcx,rbx
+ cmovc rbx,rcx
+ and rax,rbx
+ mov rbx,rcx
+ neg rax
+ and rbx,512-1
+ lea rsp,QWORD PTR[rbp*1+rax]
+ mov rax,512
+ cmovz rbx,rax
+ cmp rcx,rbx
+ ja $L$cbc_loop
+ mov rax,rsi
+ cmp rbp,rsp
+ cmove rax,rdi
+ add rax,rcx
+ neg rax
+ and rax,0fffh
+ cmp rax,64
+ mov rax,-64
+ cmovae rax,rbx
+ and rbx,rax
+ jz $L$cbc_unaligned_tail
+ jmp $L$cbc_loop
+ALIGN 16
+$L$cbc_loop::
+ cmp rbx,rcx
+ cmova rbx,rcx
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+ test rdi,00fh
+ cmovnz rdi,rsp
+ test rsi,00fh
+ jz $L$cbc_inp_aligned
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+ mov rcx,rbx
+ mov rsi,rdi
+$L$cbc_inp_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,208
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+ mov rdi,r8
+ mov rbx,r11
+ test rdi,00fh
+ jz $L$cbc_out_aligned
+ mov rcx,rbx
+ lea rsi,QWORD PTR[rsp]
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+$L$cbc_out_aligned::
+ mov rsi,r9
+ mov rcx,r10
+ add rdi,rbx
+ add rsi,rbx
+ sub rcx,rbx
+ mov rbx,512
+ jz $L$cbc_break
+ cmp rcx,rbx
+ jae $L$cbc_loop
+$L$cbc_unaligned_tail::
+ xor eax,eax
+ cmp rbp,rsp
+ cmove rax,rcx
+ mov r8,rdi
+ mov rbx,rcx
+ sub rsp,rax
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ mov rsi,rsp
+ mov rdi,r8
+ mov rcx,rbx
+ jmp $L$cbc_loop
+ALIGN 16
+$L$cbc_break::
+ cmp rsp,rbp
+ je $L$cbc_done
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[rsp]
+$L$cbc_bzero::
+ movaps XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+ cmp rbp,rax
+ ja $L$cbc_bzero
+
+$L$cbc_done::
+ lea rsp,QWORD PTR[rbp]
+ jmp $L$cbc_exit
+
+ALIGN 16
+$L$cbc_aligned::
+ lea rbp,QWORD PTR[rcx*1+rsi]
+ neg rbp
+ and rbp,0fffh
+ xor eax,eax
+ cmp rbp,64
+ mov rbp,64-1
+ cmovae rbp,rax
+ and rbp,rcx
+ sub rcx,rbp
+ jz $L$cbc_aligned_tail
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,208
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+ test rbp,rbp
+ jz $L$cbc_exit
+
+$L$cbc_aligned_tail::
+ mov r8,rdi
+ mov rbx,rbp
+ mov rcx,rbp
+ lea rbp,QWORD PTR[rsp]
+ sub rsp,rcx
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ lea rdi,QWORD PTR[r8]
+ lea rsi,QWORD PTR[rsp]
+ mov rcx,rbx
+ jmp $L$cbc_loop
+$L$cbc_exit::
+ mov eax,1
+ lea rsp,QWORD PTR[8+rsp]
+$L$cbc_abort::
+ pop rbx
+ pop rbp
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_cbc_encrypt::
+padlock_cbc_encrypt ENDP
+PUBLIC padlock_cfb_encrypt
+
+ALIGN 16
+padlock_cfb_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_cfb_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+ push rbp
+ push rbx
+
+ xor eax,eax
+ test rdx,15
+ jnz $L$cfb_abort
+ test rcx,15
+ jnz $L$cfb_abort
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ pushf
+ cld
+ call _padlock_verify_ctx
+ lea rdx,QWORD PTR[16+rdx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR[rdx],32
+ jnz $L$cfb_aligned
+ test rdi,00fh
+ setz al
+ test rsi,00fh
+ setz bl
+ test eax,ebx
+ jnz $L$cfb_aligned
+ neg rax
+ mov rbx,512
+ not rax
+ lea rbp,QWORD PTR[rsp]
+ cmp rcx,rbx
+ cmovc rbx,rcx
+ and rax,rbx
+ mov rbx,rcx
+ neg rax
+ and rbx,512-1
+ lea rsp,QWORD PTR[rbp*1+rax]
+ mov rax,512
+ cmovz rbx,rax
+ jmp $L$cfb_loop
+ALIGN 16
+$L$cfb_loop::
+ cmp rbx,rcx
+ cmova rbx,rcx
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+ test rdi,00fh
+ cmovnz rdi,rsp
+ test rsi,00fh
+ jz $L$cfb_inp_aligned
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+ mov rcx,rbx
+ mov rsi,rdi
+$L$cfb_inp_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,224
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+ mov rdi,r8
+ mov rbx,r11
+ test rdi,00fh
+ jz $L$cfb_out_aligned
+ mov rcx,rbx
+ lea rsi,QWORD PTR[rsp]
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+$L$cfb_out_aligned::
+ mov rsi,r9
+ mov rcx,r10
+ add rdi,rbx
+ add rsi,rbx
+ sub rcx,rbx
+ mov rbx,512
+ jnz $L$cfb_loop
+ cmp rsp,rbp
+ je $L$cfb_done
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[rsp]
+$L$cfb_bzero::
+ movaps XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+ cmp rbp,rax
+ ja $L$cfb_bzero
+
+$L$cfb_done::
+ lea rsp,QWORD PTR[rbp]
+ jmp $L$cfb_exit
+
+ALIGN 16
+$L$cfb_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,224
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+$L$cfb_exit::
+ mov eax,1
+ lea rsp,QWORD PTR[8+rsp]
+$L$cfb_abort::
+ pop rbx
+ pop rbp
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_cfb_encrypt::
+padlock_cfb_encrypt ENDP
+PUBLIC padlock_ofb_encrypt
+
+ALIGN 16
+padlock_ofb_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_ofb_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+ push rbp
+ push rbx
+
+ xor eax,eax
+ test rdx,15
+ jnz $L$ofb_abort
+ test rcx,15
+ jnz $L$ofb_abort
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ pushf
+ cld
+ call _padlock_verify_ctx
+ lea rdx,QWORD PTR[16+rdx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR[rdx],32
+ jnz $L$ofb_aligned
+ test rdi,00fh
+ setz al
+ test rsi,00fh
+ setz bl
+ test eax,ebx
+ jnz $L$ofb_aligned
+ neg rax
+ mov rbx,512
+ not rax
+ lea rbp,QWORD PTR[rsp]
+ cmp rcx,rbx
+ cmovc rbx,rcx
+ and rax,rbx
+ mov rbx,rcx
+ neg rax
+ and rbx,512-1
+ lea rsp,QWORD PTR[rbp*1+rax]
+ mov rax,512
+ cmovz rbx,rax
+ jmp $L$ofb_loop
+ALIGN 16
+$L$ofb_loop::
+ cmp rbx,rcx
+ cmova rbx,rcx
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+ test rdi,00fh
+ cmovnz rdi,rsp
+ test rsi,00fh
+ jz $L$ofb_inp_aligned
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+ mov rcx,rbx
+ mov rsi,rdi
+$L$ofb_inp_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,232
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+ mov rdi,r8
+ mov rbx,r11
+ test rdi,00fh
+ jz $L$ofb_out_aligned
+ mov rcx,rbx
+ lea rsi,QWORD PTR[rsp]
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+$L$ofb_out_aligned::
+ mov rsi,r9
+ mov rcx,r10
+ add rdi,rbx
+ add rsi,rbx
+ sub rcx,rbx
+ mov rbx,512
+ jnz $L$ofb_loop
+ cmp rsp,rbp
+ je $L$ofb_done
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[rsp]
+$L$ofb_bzero::
+ movaps XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+ cmp rbp,rax
+ ja $L$ofb_bzero
+
+$L$ofb_done::
+ lea rsp,QWORD PTR[rbp]
+ jmp $L$ofb_exit
+
+ALIGN 16
+$L$ofb_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,232
+ movdqa xmm0,XMMWORD PTR[rax]
+ movdqa XMMWORD PTR[(-16)+rdx],xmm0
+$L$ofb_exit::
+ mov eax,1
+ lea rsp,QWORD PTR[8+rsp]
+$L$ofb_abort::
+ pop rbx
+ pop rbp
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_ofb_encrypt::
+padlock_ofb_encrypt ENDP
+PUBLIC padlock_ctr32_encrypt
+
+ALIGN 16
+padlock_ctr32_encrypt PROC PUBLIC
+ mov QWORD PTR[8+rsp],rdi ;WIN64 prologue
+ mov QWORD PTR[16+rsp],rsi
+ mov rax,rsp
+$L$SEH_begin_padlock_ctr32_encrypt::
+ mov rdi,rcx
+ mov rsi,rdx
+ mov rdx,r8
+ mov rcx,r9
+
+
+ push rbp
+ push rbx
+
+ xor eax,eax
+ test rdx,15
+ jnz $L$ctr32_abort
+ test rcx,15
+ jnz $L$ctr32_abort
+ lea rax,QWORD PTR[$L$padlock_saved_context]
+ pushf
+ cld
+ call _padlock_verify_ctx
+ lea rdx,QWORD PTR[16+rdx]
+ xor eax,eax
+ xor ebx,ebx
+ test DWORD PTR[rdx],32
+ jnz $L$ctr32_aligned
+ test rdi,00fh
+ setz al
+ test rsi,00fh
+ setz bl
+ test eax,ebx
+ jnz $L$ctr32_aligned
+ neg rax
+ mov rbx,512
+ not rax
+ lea rbp,QWORD PTR[rsp]
+ cmp rcx,rbx
+ cmovc rbx,rcx
+ and rax,rbx
+ mov rbx,rcx
+ neg rax
+ and rbx,512-1
+ lea rsp,QWORD PTR[rbp*1+rax]
+ mov rax,512
+ cmovz rbx,rax
+$L$ctr32_reenter::
+ mov eax,DWORD PTR[((-4))+rdx]
+ bswap eax
+ neg eax
+ and eax,31
+ mov rbx,512
+ shl eax,4
+ cmovz rax,rbx
+ cmp rcx,rax
+ cmova rbx,rax
+ cmovbe rbx,rcx
+ cmp rcx,rbx
+ ja $L$ctr32_loop
+ mov rax,rsi
+ cmp rbp,rsp
+ cmove rax,rdi
+ add rax,rcx
+ neg rax
+ and rax,0fffh
+ cmp rax,32
+ mov rax,-32
+ cmovae rax,rbx
+ and rbx,rax
+ jz $L$ctr32_unaligned_tail
+ jmp $L$ctr32_loop
+ALIGN 16
+$L$ctr32_loop::
+ cmp rbx,rcx
+ cmova rbx,rcx
+ mov r8,rdi
+ mov r9,rsi
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+ test rdi,00fh
+ cmovnz rdi,rsp
+ test rsi,00fh
+ jz $L$ctr32_inp_aligned
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+ mov rcx,rbx
+ mov rsi,rdi
+$L$ctr32_inp_aligned::
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,216
+ mov eax,DWORD PTR[((-4))+rdx]
+ test eax,0ffff0000h
+ jnz $L$ctr32_no_carry
+ bswap eax
+ add eax,010000h
+ bswap eax
+ mov DWORD PTR[((-4))+rdx],eax
+$L$ctr32_no_carry::
+ mov rdi,r8
+ mov rbx,r11
+ test rdi,00fh
+ jz $L$ctr32_out_aligned
+ mov rcx,rbx
+ lea rsi,QWORD PTR[rsp]
+ shr rcx,3
+DB 0f3h,048h,0a5h
+ sub rdi,rbx
+$L$ctr32_out_aligned::
+ mov rsi,r9
+ mov rcx,r10
+ add rdi,rbx
+ add rsi,rbx
+ sub rcx,rbx
+ mov rbx,512
+ jz $L$ctr32_break
+ cmp rcx,rbx
+ jae $L$ctr32_loop
+ mov rbx,rcx
+ mov rax,rsi
+ cmp rbp,rsp
+ cmove rax,rdi
+ add rax,rcx
+ neg rax
+ and rax,0fffh
+ cmp rax,32
+ mov rax,-32
+ cmovae rax,rbx
+ and rbx,rax
+ jnz $L$ctr32_loop
+$L$ctr32_unaligned_tail::
+ xor eax,eax
+ cmp rbp,rsp
+ cmove rax,rcx
+ mov r8,rdi
+ mov rbx,rcx
+ sub rsp,rax
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ mov rsi,rsp
+ mov rdi,r8
+ mov rcx,rbx
+ jmp $L$ctr32_loop
+ALIGN 16
+$L$ctr32_break::
+ cmp rsp,rbp
+ je $L$ctr32_done
+
+ pxor xmm0,xmm0
+ lea rax,QWORD PTR[rsp]
+$L$ctr32_bzero::
+ movaps XMMWORD PTR[rax],xmm0
+ lea rax,QWORD PTR[16+rax]
+ cmp rbp,rax
+ ja $L$ctr32_bzero
+
+$L$ctr32_done::
+ lea rsp,QWORD PTR[rbp]
+ jmp $L$ctr32_exit
+
+ALIGN 16
+$L$ctr32_aligned::
+ mov eax,DWORD PTR[((-4))+rdx]
+ bswap eax
+ neg eax
+ and eax,0ffffh
+ mov rbx,1048576
+ shl eax,4
+ cmovz rax,rbx
+ cmp rcx,rax
+ cmova rbx,rax
+ cmovbe rbx,rcx
+ jbe $L$ctr32_aligned_skip
+
+$L$ctr32_aligned_loop::
+ mov r10,rcx
+ mov rcx,rbx
+ mov r11,rbx
+
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,216
+
+ mov eax,DWORD PTR[((-4))+rdx]
+ bswap eax
+ add eax,010000h
+ bswap eax
+ mov DWORD PTR[((-4))+rdx],eax
+
+ mov rcx,r10
+ sub rcx,r11
+ mov rbx,1048576
+ jz $L$ctr32_exit
+ cmp rcx,rbx
+ jae $L$ctr32_aligned_loop
+
+$L$ctr32_aligned_skip::
+ lea rbp,QWORD PTR[rcx*1+rsi]
+ neg rbp
+ and rbp,0fffh
+ xor eax,eax
+ cmp rbp,32
+ mov rbp,32-1
+ cmovae rbp,rax
+ and rbp,rcx
+ sub rcx,rbp
+ jz $L$ctr32_aligned_tail
+ lea rax,QWORD PTR[((-16))+rdx]
+ lea rbx,QWORD PTR[16+rdx]
+ shr rcx,4
+DB 0f3h,00fh,0a7h,216
+ test rbp,rbp
+ jz $L$ctr32_exit
+
+$L$ctr32_aligned_tail::
+ mov r8,rdi
+ mov rbx,rbp
+ mov rcx,rbp
+ lea rbp,QWORD PTR[rsp]
+ sub rsp,rcx
+ shr rcx,3
+ lea rdi,QWORD PTR[rsp]
+DB 0f3h,048h,0a5h
+ lea rdi,QWORD PTR[r8]
+ lea rsi,QWORD PTR[rsp]
+ mov rcx,rbx
+ jmp $L$ctr32_loop
+$L$ctr32_exit::
+ mov eax,1
+ lea rsp,QWORD PTR[8+rsp]
+$L$ctr32_abort::
+ pop rbx
+ pop rbp
+ mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue
+ mov rsi,QWORD PTR[16+rsp]
+ DB 0F3h,0C3h ;repret
+$L$SEH_end_padlock_ctr32_encrypt::
+padlock_ctr32_encrypt ENDP
+DB 86,73,65,32,80,97,100,108,111,99,107,32,120,56,54,95
+DB 54,52,32,109,111,100,117,108,101,44,32,67,82,89,80,84
+DB 79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64
+DB 111,112,101,110,115,115,108,46,111,114,103,62,0
+ALIGN 16
+.text$ ENDS
+_DATA SEGMENT
+ALIGN 8
+$L$padlock_saved_context::
+ DQ 0
+
+_DATA ENDS
+END
|