Current File : //proc/self/root/kunden/lib/python3.9/site-packages/pymysql/__pycache__/_auth.cpython-39.pyc
a

2�Y_\%�@s8dZddlmZddlmZddlmZmZz0ddlm	Z	ddl
mZmZddl
mZd	ZWneyrd
ZYn0ddlmZddlZddlZddlZddlZd
Zd
Zeejd�Zdd�Zdd�ZdZGdd�de�Zdd�Z dd�Z!d
a"dd�Z#dd�Z$dd�Z%d d!�Z&d"d#�Z'd$d%�Z(d&d'�Z)d(d)�Z*d*d+�Z+dS),z
Implements auth methods
�)�PY2)�OperationalError)�byte2int�int2byte�)�default_backend)�
serialization�hashes)�paddingTF)�partialN�Zsha1cCsT|sdSt|���}t|���}t�}|�|dt��|�|�|��}t||�S)z'Scramble used for mysql_native_password�N)�sha1_new�digest�update�SCRAMBLE_LENGTH�	_my_crypt)�password�messageZstage1Zstage2�s�result�r�1/usr/lib/python3.9/site-packages/pymysql/_auth.py�scramble_native_password!s
rcCsBt|�}trt|�}tt|��D]}||||N<q t|�S�N)�	bytearrayr�range�len�bytes)Zmessage1Zmessage2r�irrrr/sr�c@seZdZdd�Zdd�ZdS)�RandStruct_323cCs"d|_||j|_||j|_dS)Ni���?)�	max_value�seed1�seed2)�selfr#r$rrr�__init__BszRandStruct_323.__init__cCsD|jd|j|j|_|j|jd|j|_t|j�t|j�S)N��!)r#r$r"�float)r%rrr�my_rndGszRandStruct_323.my_rndN)�__name__�
__module__�__qualname__r&r*rrrrr!@sr!cCs�t�d�t|�}t|dt��}t�d|�}t�d|�}t|d|dA|d|dA�}t��}t	t
tt|���D]"}|�t
t|��d�d��qvt
t|��d��}	|��}
t��}|
D]}|�t
t|�t|	�A��q�|��S)zScramble for old_passwordz�old password (for MySQL <4.1) is used.  Upgrade your password with newer auth method.
old password support will be removed in future PyMySQL versionN�>LLrr��@)�warnings�warn�_hash_password_323�SCRAMBLE_LENGTH_323�struct�unpackr!�io�BytesIOr�minr�writer�intr*�getvaluer)rrZ	hash_passZhash_messageZhash_pass_nZhash_message_nZrand_stZoutbuf�_Zextra�out�crrr�scramble_old_passwordMs"
� r@cCs~d}d}d}dd�|D�D]D}||d@|||d>d@N}||d>|Ad@}||d@}q|d	@}|d	@}t�d
||�S)Ni5W0P�iqV4cSsg|]}|dvrt|��qS))� �	� �	)r)�.0�xrrr�
<listcomp>jr
z&_hash_password_323.<locals>.<listcomp>�?r l��i���r.)r5�pack)r�nr�addZnr2r?Zr1Zr2rrrr3ds r3cCs4zddlm}|aWnty.td��Yn0dS)Nr��bindingsz='pynacl' package is required for ed25519_password auth method)ZnaclrN�_nacl_bindings�ImportError�RuntimeErrorrMrrr�
_init_naclzs
rRcCsPt|�}tt|dd@g��}tt|dd@dBg��}|t|dd��|S)Nr�r/�r0r)rr)Zs32ZbaZba0Zba31rrr�
_scalar_clamp�srUc
Cs�ts
t�t�|���}t|dd��}t�|dd�|���}t�|�}t�|�}t�|�}t�|||���}t�|�}t�||�}t�	||�}	||	S)znSign a random scramble with elliptic curve Ed25519.

    Secret and public key are derived from password.
    NrD)
rOrR�hashlibZsha512rrUZ!crypto_core_ed25519_scalar_reduceZ&crypto_scalarmult_ed25519_base_noclampZcrypto_core_ed25519_scalar_mulZcrypto_core_ed25519_scalar_add)
rZscramble�hr�r�R�A�k�ks�Srrr�ed25519_password�s



r^cCs|�|�|��}|��|Sr)Zwrite_packet�_read_packet�check_error)�connZ	send_data�pktrrr�
_roundtrip�s
rccCsV|dt�}t|�}t|�}t|�}tt|��D]}|||||N<q0t|�Sr)rrrrr)r�saltZpassword_bytesZsalt_lenrrrr�
_xor_password�srecCsPtstd��t|d|�}t�|t��}|�|tjtj	t
��d�t
��dd��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)ZmgfrgZlabel)�_have_cryptographyrQrerZload_pem_public_keyrZencryptr
ZOAEPZMGF1r	ZSHA1)rrdZ
public_keyrZrsa_keyrrr�sha2_rsa_encrypt�s��ricCs�|jr&trtd�|jd}t||�S|��rZ|��|_|jsZ|jrZtrPtd�t|d�}|�	�r�|j
dd�|_tr�td|j�d��|jr�|js�td��t
|j|j|j�}nd	}t||�S)
Nzsha256: Sending plain passwordrfz$sha256: Requesting server public key�rzReceived public key:
�asciiz$Couldn't receive server's public keyr
)�_secure�DEBUG�printrrc�is_auth_switch_request�read_allrd�server_public_key�is_extra_auth_data�_data�decoderri)rarb�datarrr�sha256_password_auth�s*



rvcCsx|sdSt�|���}t�|���}t�||���}t|�}trJt|�}tt|��D]}||||N<qVt|�S)z�Scramble algorithm used in cached_sha2_password fast path.

    XOR(SHA256(password), SHA256(SHA256(SHA256(password)), nonce))
    r
)rVZsha256rrrrrr)rZnonceZp1Zp2Zp3�resrrrr�scramble_caching_sha2�srxcCsX|jst|d�S|��rFtr$td�|��|_t|j|j�}t||�}|��sdt	d|j
dd���|�d�|��}|dkr�tr�td�|�
�}|��|S|dkr�t	d|��tr�td	�|jr�tr�td
�t||jd�S|j�s8t|d�}|���st	d
|j
dd���|j
dd�|_t�r8t|j�d��t|j|j|j�}t||�}dS)Nr
zcaching sha2: Trying fast pathz.caching sha2: Unknown packet for fast auth: %srr'z%caching sha2: succeeded by fast path.�z.caching sha2: Unknwon result for fast auth: %sz!caching sha2: Trying full auth...z:caching sha2: Sending plain password via secure connectionrf�z/caching sha2: Unknown packet for public key: %srk)rrcrormrnrprdrxrrrrsZadvanceZ
read_uint8r_r`rlrqrtri)rarbZ	scrambled�nrurrr�caching_sha2_password_authsN


�	


�r|),�__doc__Z_compatr�errr�utilrrZcryptography.hazmat.backendsrZcryptography.hazmat.primitivesrr	Z)cryptography.hazmat.primitives.asymmetricr
rhrP�	functoolsrrVr7r5r1rmr�newrrrr4�objectr!r@r3rOrRrUr^rcrerirvrxr|rrrr�<module>sD

	)