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