Ë
    ï%9jù  ã                   óä   — d Z ddlmZ 	 ddlmZ ddlmZmZ ddlm	Z	 dZ
dd	lmZ dd
lZdZdZ eej"                  d«      Zd„ Zd„ Zdad„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy
# e$ r dZ
Y ŒNw xY w)z
Implements auth methods
é   )ÚOperationalErroré    )Údefault_backend)ÚserializationÚhashes)ÚpaddingTF)ÚpartialNé   Úsha1c                 ó
  — | syt        | «      j                  «       }t        |«      j                  «       }t        «       }|j                  |dt         «       |j                  |«       |j                  «       }t	        ||«      S )z'Scramble used for mysql_native_passwordó    N)Úsha1_newÚdigestÚupdateÚSCRAMBLE_LENGTHÚ	_my_crypt)ÚpasswordÚmessageÚstage1Ústage2ÚsÚresults         úI/var/www/html/truck-me/venv/lib/python3.12/site-packages/pymysql/_auth.pyÚscramble_native_passwordr      sm   € áØä�hÓ×&Ñ&Ó(€FÜ�fÓ×$Ñ$Ó&€FÜ‹
€AØ‡H�HˆWÐ%”oÐ&Ô'Ø‡H�HˆVÔØ�X‰X‹Z€FÜ�V˜VÓ$Ð$r   c                 ó€   — t        | «      }t        t        |«      «      D ]  }||xx   ||   z  cc<   Œ t        |«      S ©N)Ú	bytearrayÚrangeÚlenÚbytes)Úmessage1Úmessage2r   Úis       r   r   r   ,   sB   € Ü�xÓ €Fä”3�v“;Óò !ˆØˆq‹	�X˜a‘[Ñ Œ	ð!ô �‹=Ðr   c                  óF   — 	 ddl m}  | ay # t        $ r t	        d«      ‚w xY w)Nr   ©Úbindingsz='pynacl' package is required for ed25519_password auth method)Únaclr&   Ú_nacl_bindingsÚImportErrorÚRuntimeErrorr%   s    r   Ú
_init_naclr+   ;   s.   € ð
Ý!à!‰øÜò 
ÜØKó
ð 	
ð
ús   ‚ ‹ c                 ó²   — t        | «      }t        t        |d   dz  g«      «      }t        t        |d   dz  dz  g«      «      }|t        | dd «      z   |z   S )Nr   éø   é   é   é@   r   )r   r    )Ús32ÚbaÚba0Úba31s       r   Ú_scalar_clampr5   G   s^   € Ü	�3‹€BÜ
”	˜2˜a™5 3™;˜-Ó(Ó
)€CÜ”˜R ™V c™\¨RÑ/Ð0Ó1Ó2€DØ”�s˜1˜R�yÓ!Ñ! DÑ(Ð(r   c                 ó2  — t         s
t        «        t        j                  | «      j	                  «       }t        |dd «      }t        j                  |dd |z   «      j	                  «       }t         j                  |«      }t         j                  |«      }t         j                  |«      }t        j                  ||z   |z   «      j	                  «       }t         j                  |«      }t         j                  ||«      }t         j                  ||«      }	||	z   S )znSign a random scramble with elliptic curve Ed25519.

    Secret and public key are derived from password.
    Né    )
r(   r+   ÚhashlibÚsha512r   r5   Ú!crypto_core_ed25519_scalar_reduceÚ&crypto_scalarmult_ed25519_base_noclampÚcrypto_core_ed25519_scalar_mulÚcrypto_core_ed25519_scalar_add)
r   ÚscrambleÚhr   ÚrÚRÚAÚkÚksÚSs
             r   Úed25519_passwordrF   N   sò   € õ ÜŒô 	�‰�xÓ ×'Ñ'Ó)€Aô 	�a˜˜�fÓ€Aô 	�‰�q˜˜�v Ñ(Ó)×0Ñ0Ó2€Aô 	×8Ñ8¸Ó;€AÜ×=Ñ=¸aÓ@€Aô 	×=Ñ=¸aÓ@€Aô 	�‰�q˜1‘u˜xÑ'Ó(×/Ñ/Ó1€Aô 	×8Ñ8¸Ó;€AÜ	×	6Ñ	6°q¸!Ó	<€BÜ×5Ñ5°b¸!Ó<€Að ˆq‰5€Lr   c                 óh   — | j                  |«       | j                  «       }|j                  «        |S r   )Úwrite_packetÚ_read_packetÚcheck_error)ÚconnÚ	send_dataÚpkts      r   Ú
_roundtriprN   w   s-   € Ø×Ñ�iÔ Ø
×
Ñ
Ó
€CØ‡O�OÔØ€Jr   c                 ó®   — |d t          }t        | «      }t        |«      }t        t        |«      «      D ]  }||xx   |||z     z  cc<   Œ t	        |«      S r   )r   r   r   r   r    )r   ÚsaltÚpassword_bytesÚsalt_lenr#   s        r   Ú_xor_passwordrS   ~   sa   € ð Ð ”Ð!€DÜ˜xÓ(€Nä�4‹y€HÜ”3�~Ó&Ó'ò 0ˆØ�qÓ˜T ! h¡,Ñ/Ñ/Ôð0ä�Ó Ð r   c           	      ó>  — t         st        d«      ‚t        | dz   |«      }t        j                  |t        «       «      }|j                  |t        j                  t        j                  t        j                  «       ¬«      t        j                  «       d¬«      «      S )zhEncrypt password with salt and public_key.

    Used for sha256_password and caching_sha2_password.
    z\'cryptography' package is required for sha256_password or caching_sha2_password auth methodsó    )Ú	algorithmN)ÚmgfrV   Úlabel)Ú_have_cryptographyr*   rS   r   Úload_pem_public_keyr   Úencryptr   ÚOAEPÚMGF1r   ÚSHA1)r   rP   Ú
public_keyr   Úrsa_keys        r   Úsha2_rsa_encryptra   Š   s   € õ
 Üð4ó
ð 	
ô ˜H uÑ,¨dÓ3€GÜ×/Ñ/°
¼OÓ<MÓN€GØ�?‰?ØÜ�‰Ü—‘¤v§{¡{£}Ô5Ü—k‘k“mØô	
óð r   c                 ó~  — | j                   r,t        rt        d«       | j                  dz   }t	        | |«      S |j                  «       rJ|j                  «       | _        | j                  s)| j                  rt        rt        d«       t	        | d«      }|j                  «       r?|j                  dd  | _        t        r%t        d| j                  j                  d«      «       | j                  rC| j                  st        d«      ‚t        | j                  | j                  | j                  «      }nd	}t	        | |«      S )
Nzsha256: Sending plain passwordrU   z$sha256: Requesting server public keyó   r   zReceived public key:
Úasciiz$Couldn't receive server's public keyr   )Ú_secureÚDEBUGÚprintr   rN   Úis_auth_switch_requestÚread_allrP   Úserver_public_keyÚis_extra_auth_dataÚ_dataÚdecoder   ra   )rK   rM   Údatas      r   Úsha256_password_authro       s÷   € Ø‡|‚|ÝÜÐ2Ô3Ø�}‰}˜uÑ$ˆÜ˜$ Ó%Ð%à
×!Ñ!Ô#Ø—L‘L“NˆŒ	Ø×%Ò%¨$¯-ª-åÜÐ<Ô=Ü˜T 5Ó)ˆCà
×ÑÔØ!$§¡¨1¨2 ˆÔÝÜÐ*¨D×,BÑ,B×,IÑ,IÈ'Ó,RÔSà‡}‚}Ø×%Ò%Ü"Ð#IÓJÐJä §¡¨t¯y©y¸$×:PÑ:PÓQ‰àˆä�d˜DÓ!Ð!r   c                 ó^  — | syt        j                  | «      j                  «       }t        j                  |«      j                  «       }t        j                  ||z   «      j                  «       }t        |«      }t	        t        |«      «      D ]  }||xx   ||   z  cc<   Œ t        |«      S )zƒScramble algorithm used in cached_sha2_password fast path.

    XOR(SHA256(password), SHA256(SHA256(SHA256(password)), nonce))
    r   )r8   Úsha256r   r   r   r   r    )r   ÚnonceÚp1Úp2Úp3Úresr#   s          r   Úscramble_caching_sha2rw   ¿   s�   € ñ Øä	�‰˜Ó	!×	(Ñ	(Ó	*€BÜ	�‰˜Ó	×	"Ñ	"Ó	$€BÜ	�‰˜˜U™
Ó	#×	*Ñ	*Ó	,€Bä
�B‹-€CÜ”3�r“7‹^ò ˆØˆA‹�"�Q‘%‰Œðô �‹:Ðr   c                 ó$  — | j                   st        | d«      S |j                  «       rRt        rt	        d«       |j                  «       | _        t        | j                   | j                  «      }t        | |«      }|j                  «       st        d|j                  d d z  «      ‚|j                  d«       |j                  «       }|dk(  r3t        rt	        d«       | j                  «       }|j                  «        |S |dk7  rt        d|z  «      ‚t        rt	        d	«       | j                  r*t        rt	        d
«       t        | | j                   dz   «      S | j                   sut        | d«      }|j                  «       st        d|j                  d d z  «      ‚|j                  dd  | _        t        r$t	        | j                   j#                  d«      «       t%        | j                   | j                  | j                   «      }t        | |«      }y )Nr   zcaching sha2: Trying fast pathz.caching sha2: Unknown packet for fast auth: %sr   é   z%caching sha2: succeeded by fast path.é   z.caching sha2: Unknown result for fast auth: %sz!caching sha2: Trying full auth...z:caching sha2: Sending plain password via secure connectionrU   ó   z/caching sha2: Unknown packet for public key: %srd   )r   rN   rh   rf   rg   ri   rP   rw   rk   r   rl   ÚadvanceÚ
read_uint8rI   rJ   re   rj   rm   ra   )rK   rM   Ú	scrambledÚnrn   s        r   Úcaching_sha2_password_authr€   Ó   s·  € à�=Š=Ü˜$ Ó$Ð$à
×!Ñ!Ô#åÜÐ2Ô3Ø—L‘L“NˆŒ	Ü)¨$¯-©-¸¿¹ÓCˆ	Ü˜˜yÓ)ˆð ×!Ñ!Ô#ÜØ<¸s¿y¹yÈÈ!¸}ÑLó
ð 	
ð ‡K�K�„NØ�‰Ó€AàˆA‚vÝÜÐ9Ô:Ø×ÑÓ!ˆØ�‰ÔØˆ
àˆA‚vÜÐOÐRSÑSÓTÐTåÜÐ1Ô2à‡|‚|ÝÜÐNÔOÜ˜$ §¡°Ñ 5Ó6Ð6à×!Ò!Ü˜˜wÓ'ˆØ×%Ñ%Ô'Ü"ØAÀCÇIÁIÈbÈqÀMÑQóð ð "%§¡¨1¨2 ˆÔÝÜ�$×(Ñ(×/Ñ/°Ó8Ô9ä˜DŸM™M¨4¯9©9°d×6LÑ6LÓM€DÜ
�T˜4Ó
 �Cr   )Ú__doc__Úerrr   Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr   r   Ú)cryptography.hazmat.primitives.asymmetricr   rY   r)   Ú	functoolsr	   r8   rf   r   Únewr   r   r   r(   r+   r5   rF   rN   rS   ra   ro   rw   r€   © r   r   ú<module>r‰      sž   ðñõ "ðÝ<ßDÝAàÐõ Û ð 	€Ø€Ù�7—;‘; Ó'€ò%òð €ò	
ò)ò#òRò	!òò,"ò>ó(9!øðK ò ØÒðús   ŠA% Á%A/Á.A/