o
    .˜Žjè.  ã                   @   sÄ   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlZd dlmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZmZmZ ddlmZ e e¡ZG dd„ dƒZdS )é    N)Úsha1)ÚBytesIO)Úurandom)ÚOptional)Úraw)Ú
Connection)ÚaesÚrsaÚprime)ÚSecurityCheckMismatch)ÚTLObjectÚLongÚInté   )ÚMsgIdc                   @   sd   e Zd ZdZdddedefdd„Zeded	e	fd
d„ƒZ
edefdd„ƒZdefdd„Zdd„ ZdS )ÚAuthé   Úclientzpyrogram.ClientÚdc_idÚ	test_modec                 C   s>   || _ || _|j| _|j| _|j| _|j| _|j| _d | _d S ©N)r   r   Úipv6Úalt_portÚproxyÚconnection_factoryÚprotocol_factoryÚ
connection)Úselfr   r   r   © r   úR/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/pyrogram/session/auth.pyÚ__init__*   s   
zAuth.__init__ÚdataÚreturnc                 C   s*   t dƒttƒ ƒ tt|  ¡ ƒƒ |  ¡  S )Né   )Úbytesr   r   r   ÚlenÚwrite)r!   r   r   r   Úpack:   s   ÿþýÿz	Auth.packÚbc                 C   s   |   d¡ t | ¡S )Né   )Úseekr   Úread)r(   r   r   r   ÚunpackC   s   

zAuth.unpackc                 Ã   s<   �|   |¡}| j |¡I d H  t| j ¡ I d H ƒ}|  |¡S r   )r'   r   Úsendr   Úrecvr,   )r   r!   Úresponser   r   r   ÚinvokeH   s
   €

zAuth.invokec           #   
   Ã   sz  �| j }	 | j| j| j| j| j| jd| jd�| _�z�zÕt	 
d| j¡ | j ¡ I dH  tjtdƒddd�}t	 d	|¡ |  tjj|d
�¡I dH }t	 d|j¡ t	 d|j¡ |jD ]}|tjv rjt	 d|¡ |} nt	 d|¡ qYtdƒ‚t |jd¡}t	 d|¡ t ¡ }t |¡}t||| fƒ\}	}
t	 dtt ¡ | dƒ|	|
¡ |j}tjtdƒddd�}tjj |j|	 !dd¡|
 !dd¡|||d� "¡ }t#|ƒ $¡ }tt%|ƒt%|ƒ  d ƒ}|| | }t &||¡}t	 d¡ t	 d¡ |  tjj'|||	 !dd¡|
 !dd¡||d�¡I dH }|j(}|j!dddd�}|j!dddd�}t#|| ƒ $¡ t#|| ƒ $¡ dd…  }t#|| ƒ $¡ dd… t#|| ƒ $¡  |dd…  }tj|ddd�}t) *|||¡}|dd… }t+ ,t-|ƒ¡}t	 d¡ t |j.d¡}|j/t ¡  }t	 dt|dƒ¡ |j0}t tdƒd¡}t1|||ƒ !dd¡}d }tjj2||||d!� "¡ }t#|ƒ $¡ }tt%|ƒt%|ƒ  d ƒ}|| | }t) 3|||¡}t	 d"¡ |  tjj4|||d#�¡I dH }t |j5d¡}t1|||ƒ !dd¡} |j!dddd�}t6 7|tj8kd$¡ t	 d%¡ t |d¡}t6 7d&|  k �o|d& k n  d'¡ t6 7d&|  k �o)|d& k n  d(¡ t6 7d&|  k �o<|d& k n  d)¡ t6 7d*d+ |  k �oS|d*d+  k n  d,¡ t6 7d*d+ |  k �oj|d*d+  k n  d-¡ t	 d.¡ | "¡ }t6 7|dd… t#|ƒ $¡ kd/¡ t	 d0¡ t6 7||j9kd1¡ tj|ddd�}t6 7||j9kd2¡ t6 7||jkd3¡ t6 7||j9kd4¡ t6 7||jkd5¡ |j!dddd�}t	 d6¡ t) :|dd7… |dd7… ¡}!t	 d8t |!d¡¡ t	 
d9|j;j<¡ W n8 t�y( }" z+t	 
d:t=|"ƒj<|"¡ |�r|d&8 }n|"‚t> ?d&¡I dH  W Y d}"~"W | j @¡ I dH  qd}"~"ww | W | j @¡ I dH  S | j @¡ I dH  w );zw
        https://core.telegram.org/mtproto/auth_key
        https://core.telegram.org/mtproto/samples-auth_key
        TF)r   r   r   r   r   Úmediar   z%Start creating a new auth key on DC%sNé   Úlittle)ÚsignedzSend req_pq: %s)ÚnoncezGot ResPq: %sz"Server public key fingerprints: %szUsing fingerprint: %szFingerprint unknown: %szPublic key not foundÚbigzStart PQ factorization: %sz"Done PQ factorization (%ss): %s %sé   é    é   )ÚpqÚpÚqr5   Úserver_nonceÚ	new_nonceéÿ   zDone encrypt data with RSAzSend req_DH_params)r5   r=   r;   r<   Úpublic_key_fingerprintÚencrypted_dataé   r)   zDone decrypting answerzDelta time: %sé   r   )r5   r=   Úretry_idÚg_bzSend set_client_DH_params)r5   r=   rA   z"dh_prime == prime.CURRENT_DH_PRIMEzDH parameters check: OKr   z1 < g < dh_prime - 1z1 < g_a < dh_prime - 1z1 < g_b < dh_prime - 1é   iÀ  z42 ** (2048 - 64) < g_a < dh_prime - 2 ** (2048 - 64)z42 ** (2048 - 64) < g_b < dh_prime - 2 ** (2048 - 64)zg_a and g_b validation: OKz.answer_with_hash[:20] == sha1(answer).digest()zSHA1 hash values check: OKznonce == res_pq.nonceznonce == server_dh_params.noncez-server_nonce == server_dh_params.server_noncez*nonce == set_client_dh_params_answer.noncez8server_nonce == set_client_dh_params_answer.server_noncezNonce fields check: OKr#   zServer salt: %szDone auth key exchange: %szRetrying due to %s: %s)AÚMAX_RETRIESr   r   r   r   r   r   r   r   ÚlogÚinfoÚconnectÚintÚ
from_bytesr   Údebugr0   r   Ú	functionsÚ
ReqPqMultir=   Úserver_public_key_fingerprintsr	   Úserver_public_keysÚ	Exceptionr:   Útimer
   Ú	decomposeÚsortedÚroundÚtypesÚPQInnerDataÚto_bytesr&   r   Údigestr%   ÚencryptÚReqDHParamsÚencrypted_answerr   Úige256_decryptr   r+   r   Údh_primeÚserver_timeÚgÚpowÚClientDHInnerDataÚige256_encryptÚSetClientDHParamsÚg_ar   ÚcheckÚCURRENT_DH_PRIMEr5   ÚxorÚ	__class__Ú__name__ÚtypeÚasyncioÚsleepÚclose)#r   Úretries_leftr5   Úres_pqÚir@   r:   Ústartra   r;   r<   r=   r>   r!   ÚshaÚpaddingÚdata_with_hashrA   Úserver_dh_paramsr]   Útmp_aes_keyÚ
tmp_aes_ivÚanswer_with_hashÚanswerÚserver_dh_inner_datar_   Ú
delta_timer(   rE   rD   Úset_client_dh_params_answerrf   Úauth_keyÚserver_saltÚer   r   r   ÚcreateO   sD  €ù





úù	



ú
ÿÿÿÿ
ÿÿ
üû
ý
ÿ
&&&$þ$þ
þ
þþþ

€ó$zAuth.createN)rk   Ú
__module__Ú__qualname__rG   rK   Úboolr    Ústaticmethodr   r$   r'   r   r,   r0   r‚   r   r   r   r   r   '   s    þý
ür   )rm   ÚloggingrS   Úhashlibr   Úior   Úosr   Útypingr   Úpyrogramr   Úpyrogram.connectionr   Úpyrogram.cryptor   r	   r
   Úpyrogram.errorsr   Úpyrogram.raw.corer   r   r   Ú	internalsr   Ú	getLoggerrk   rH   r   r   r   r   r   Ú<module>   s    
