12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037 |
- 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
|