
    [h                         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
n# e$ r dZ
Y nw xY w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d
S )z
Implements auth methods
   )OperationalError    )default_backend)serializationhashes)paddingTF)partialN   sha1c                 `   | sdS t          |                                           }t          |                                          }t                      }|                    |dt                              |                    |           |                                }t	          ||          S )z'Scramble used for mysql_native_password    N)sha1_newdigestupdateSCRAMBLE_LENGTH	_my_crypt)passwordmessagestage1stage2sresults         \/var/www/api.easyaligner.net/htdocs/venv_linux/lib/python3.11/site-packages/pymysql/_auth.pyscramble_native_passwordr      s     sh&&((Ff$$&&F

AHHW%o%&'''HHVXXZZFVV$$$r   c                     t          |           }t          t          |                    D ]}||xx         ||         z  cc<   t          |          S N)	bytearrayrangelenbytes)message1message2r   is       r   r   r   ,   sT    x  F3v;; ! !q			Xa[ 				==r   c                  R    	 ddl m}  | ad S # 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+   ;   sR    
!!!!!!! 
 
 
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   sq    	3B
	2a53;-((
)
)CRVc\R/01122Ds1R4y!!!D((r   c                    t           st                       t          j        |                                           }t          |dd                   }t          j        |dd         |z                                             }t                               |          }t                               |          }t                               |          }t          j        ||z   |z                                             }t                               |          }t                               ||          }t           	                    ||          }	||	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2A 	88;;A==a@@A 	==a@@A 	q1ux'((//11A 	88;;A		6	6q!	<	<B55b!<<A q5Lr   c                     |                      |           |                                 }|                                 |S r   )write_packet_read_packetcheck_error)conn	send_datapkts      r   
_roundtriprN   w   s<    i   




COO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   ~   s       !Dx((N4yyH3~&&'' 0 0qT!h,//   r   c           	      V   t           st          d          t          | dz   |          }t          j        |t                                }|                    |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
 
 	
 Hu,d33G/
O<M<MNNG??v{}}555kmm	
 	
 	
  r   c                    | j         r0t          rt          d           | j        dz   }t	          | |          S |                                rM|                                | _        | j        s-| j        r&t          rt          d           t	          | d          }|	                                rC|j
        dd          | _        t          r(t          d| j                            d                     | j        r7| 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      sB   | & 	42333}u$$%%%
!!## *LLNN	% 	*$- 	* ><===T5))C
 T!$122 	T*D,B,I,I',R,RSSS} % 	K"#IJJJty$:PQQdD!!!r   c                    | sdS t          j        |                                           }t          j        |                                          }t          j        ||z                                             }t          |          }t	          t          |                    D ]}||xx         ||         z  cc<   t          |          S )zScramble 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      s		!	!	(	(	*	*B				"	"	$	$B	U
	#	#	*	*	,	,B
B--C3r77^^  A"Q%::r   c                    | j         st          | d          S |                                rYt          rt	          d           |                                | _        t          | j         | j                  }t          | |          }|                                st          d|j
        d d         z            |                    d           |                                }|dk    r@t          rt	          d           |                                 }|                                 |S |dk    rt          d|z            t          rt	          d	           | j        r.t          rt	          d
           t          | | j         dz             S | j        st          | d          }|                                st          d|j
        d d         z            |j
        dd          | _        t          r't	          | j                            d                     t%          | j         | j        | j                  }t          | |          }d S )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>   = %$$$$
!!## * 	42333LLNN	)$-CC	y)) !!## 
<sy!}L
 
 	
 KKNNNAAvv 	;9:::!!
AvvORSSTTT 31222| 7 	PNOOO$ 5666! 	:w''%%'' 	"ACIbqbMQ   "%122 	:$(//88999DM49d6LMMD
T4
 
 CCCr   )__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DDDDDDDAAAAAA           	77;''% % %   	
 	
 	
) ) )# # #R  	! 	! 	!  ," " ">  (9! 9! 9! 9! 9!s   ! ++