
    2Dh                         S r SSKJr   SSKJr  SSKJrJr  SSKJ	r	  Sr
SS	KJr  SS
KrSrSr\" \R"                  S5      rS rS rSqS rS rS rS rS rS rS rS rS rg
! \ a    Sr
 NOf = f)z
Implements auth methods
   )OperationalError    )default_backend)serializationhashes)paddingTF)partialN   sha1c                    U (       d  g[        U 5      R                  5       n[        U5      R                  5       n[        5       nUR                  US[         5        UR                  U5        UR                  5       n[	        XR5      $ )z'Scramble used for mysql_native_password    N)sha1_newdigestupdateSCRAMBLE_LENGTH	_my_crypt)passwordmessagestage1stage2sresults         ?/var/www/html/env/lib/python3.13/site-packages/pymysql/_auth.pyscramble_native_passwordr      sk    h&&(Ff$$&F
AHHW%o&'HHVXXZFV$$r   c                     [        U 5      n[        [        U5      5       H  nX#==   X   -  ss'   M     [        U5      $ N)	bytearrayrangelenbytes)message1message2r   is       r   r   r   ,   s9    x F3v;	X[ 	   =r   c                  H     SSK Jn   U qg ! [         a    [	        S5      ef = f)Nr   bindingsz='pynacl' package is required for ed25519_password auth method)naclr&   _nacl_bindingsImportErrorRuntimeErrorr%   s    r   
_init_naclr+   ;   s.    
!! 
K
 	

s    !c                     [        U 5      n[        [        US   S-  /5      5      n[        [        US   S-  S-  /5      5      nU[        U SS 5      -   U-   $ )Nr            @   r   )r   r    )s32baba0ba31s       r   _scalar_clampr5   G   s^    	3B
	2a53;-(
)CRVc\R/012Ds1Ry!!D((r   c                 :   [         (       d
  [        5         [        R                  " U 5      R	                  5       n[        USS 5      n[        R                  " USS U-   5      R	                  5       n[         R                  U5      n[         R                  U5      n[         R                  U5      n[        R                  " XV-   U-   5      R	                  5       n[         R                  U5      n[         R                  Xs5      n[         R                  X5      n	XY-   $ )zfSign 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2A 	88;A==a@A 	==a@A 	qux'(//1A 	88;A		6	6q	<B55b<A 5Lr   c                 h    U R                  U5        U R                  5       nUR                  5         U$ r   )write_packet_read_packetcheck_error)conn	send_datapkts      r   
_roundtriprN   w   s-    i 



COOJr   c                     US [          n[        U 5      n[        U5      n[        [        U5      5       H  nX$==   XU-     -  ss'   M     [	        U5      $ r   )r   r   r   r   r    )r   saltpassword_bytessalt_lenr#   s        r   _xor_passwordrS   ~   sX      !Dx(N4yH3~&'Th,// (  r   c           	      F   [         (       d  [        S5      e[        U S-   U5      n[        R                  " U[        5       5      nUR                  U[        R                  " [        R                  " [        R                  " 5       S9[        R                  " 5       SS95      $ )z`Encrypt 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
 	
 Hu,d3G//
O<MNG??v{{}5kkm	
 r   c                    U R                   (       a0  [        (       a  [        S5        U R                  S-   n[	        X5      $ UR                  5       (       aY  UR                  5       U l        U R                  (       d3  U R                  (       a"  [        (       a  [        S5        [	        U S5      nUR                  5       (       aD  UR                  SS  U l        [        (       a%  [        SU R                  R                  S5      5        U R                  (       aH  U R                  (       d  [        S5      e[        U R                  U R                  U R                  5      nOS	n[	        X5      $ )
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    ||523}}u$$%%
!!##LLN	%%$--u<=T5)C
!$125*D,B,B,I,I',RS}}%%"#IJJtyy$:P:PQd!!r   c                 l   U (       d  g[         R                  " U 5      R                  5       n[         R                  " U5      R                  5       n[         R                  " X1-   5      R                  5       n[        U5      n[	        [        U5      5       H  nXV==   XF   -  ss'   M     [        U5      $ )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	
	#	*	*	,B
B-C3r7^"%  :r   c                    U R                   (       d  [        U S5      $ UR                  5       (       aV  [        (       a  [	        S5        UR                  5       U l        [        U R                   U R                  5      n[        X5      nUR                  5       (       d  [        SUR                  S S -  5      eUR                  S5        UR                  5       nUS:X  a8  [        (       a  [	        S5        U R                  5       nUR                  5         U$ US:w  a  [        SU-  5      e[        (       a  [	        S	5        U R                  (       a.  [        (       a  [	        S
5        [        X R                   S-   5      $ U R                   (       d  [        U S5      nUR                  5       (       d  [        SUR                  S S -  5      eUR                  SS  U l        [        (       a$  [	        U R                   R#                  S5      5        [%        U R                   U R                  U R                   5      n[        X5      ng )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   ==$$$
!!##523LLN	)$--C	) !!##<syy!}L
 	
 KKNAAv59:!
AvORSSTTu12||5NO$ 566!!w'%%''"ACIIbqMQ  "%125$((//89DMM499d6L6LMD
T
 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% %A0/A0