U
    ç;ãg¶,  ã                   @   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	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)Úraw)Ú
Connection)ÚaesÚrsaÚprime)ÚSecurityCheckMismatch)ÚTLObjectÚLongÚInté   )ÚMsgIdc                   @   s^   e Zd ZdZdeedœdd„Zeee	dœdd„ƒZ
eed	œd
d„ƒZedœdd„Zdd„ ZdS )ÚAuthé   zpyrogram.Client)ÚclientÚdc_idÚ	test_modec                 C   s&   || _ || _|j| _|j| _d | _d S ©N)r   r   Úipv6ÚproxyÚ
connection)Úselfr   r   r   © r   úU/opt/bot/vods_filmes/script/venv/lib/python3.8/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   Úpack0   s    ÿþýÿz	Auth.pack©Úbc                 C   s   |   d¡ t | ¡S )Né   )Úseekr   Úreadr%   r   r   r   Úunpack9   s    
zAuth.unpackr#   c                 Ã   s:   |   |¡}| j |¡I d H  t| j ¡ I d H ƒ}|  |¡S r   )r$   r   Úsendr   Úrecvr*   )r   r   Úresponser   r   r   Úinvoke>   s    
zAuth.invokec           #   
   Ã   s^  | j }t| j| j| j| jƒ| _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 ]0}|tjkrÄt d|¡ |} qÚq t d|¡ q t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ƒ¡ |j/}t tdƒd¡}t0|||ƒ  dd¡}d}tjj1||||d !¡ }t"|ƒ #¡ }tt$|ƒt$|ƒ  d ƒ}|| | }t( 2|||¡}t d ¡ |  tjj3|||d!¡I dH }t |j4d¡}t0|||ƒ  dd¡} |j dddd}t5 6|tj7kd"¡ t d#¡ t |d¡}t5 6d$|  k o|d$ k n  d%¡ t5 6d$|  k oB|d$ k n  d&¡ t5 6d$|  k oh|d$ k n  d'¡ t5 6d(d) |  k o–|d(d)  k n  d*¡ t5 6d(d) |  k oÄ|d(d)  k n  d+¡ t d,¡ | !¡ }t5 6|dd… t"|ƒ #¡ kd-¡ t d.¡ t5 6||j8kd/¡ tj|ddd}t5 6||j8kd0¡ t5 6||jkd1¡ t5 6||j8kd2¡ t5 6||jkd3¡ |j dddd}t d4¡ t( 9|dd5… |dd5… ¡}!t d6t |!d¡¡ t 	d7|j:j;¡ W nh tk
r8 }" zHt 	d8t<|"ƒj;|"¡ |r|d$8 }n|"‚t= >d$¡I dH  W Y ¢
W ¢ qW 5 d}"~"X Y n
X | W ¢S W 5 | j ¡ I dH  X qdS )9zw
        https://core.telegram.org/mtproto/auth_key
        https://core.telegram.org/mtproto/samples-auth_key
        Nz%Start creating a new auth key on DC%sé   ÚlittleT)Ú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Úqr2   Úserver_nonceÚ	new_nonceéÿ   zDone encrypt data with RSAzSend req_DH_params)r2   r:   r8   r9   Úpublic_key_fingerprintÚencrypted_dataé   r'   zDone decrypting answerzDelta time: %sé   r   )r2   r:   Úretry_idÚg_bzSend set_client_DH_params)r2   r:   r>   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)?ÚMAX_RETRIESr   r   r   r   r   r   ÚcloseÚlogÚinfoÚconnectÚintÚ
from_bytesr   Údebugr.   r   Z	functionsZ
ReqPqMultir:   Zserver_public_key_fingerprintsr   Zserver_public_keysÚ	Exceptionr7   Útimer	   Z	decomposeÚsortedÚroundÚtypesZPQInnerDataÚto_bytesr"   r   Údigestr!   ZencryptZReqDHParamsÚencrypted_answerr   Zige256_decryptr   r)   r   Údh_primeZserver_timeÚgÚpowZClientDHInnerDataZige256_encryptZSetClientDHParamsÚg_ar
   ÚcheckZCURRENT_DH_PRIMEr2   ÚxorÚ	__class__Ú__name__ÚtypeÚasyncioÚsleep)#r   Zretries_leftr2   Zres_pqÚir=   r7   ÚstartrU   r8   r9   r:   r;   r   ÚshaÚpaddingZdata_with_hashr>   Zserver_dh_paramsrS   Ztmp_aes_keyZ
tmp_aes_ivZanswer_with_hashZanswerZserver_dh_inner_datarT   Z
delta_timer&   rB   rA   Zset_client_dh_params_answerrW   Zauth_keyZserver_saltÚer   r   r   ÚcreateE   s"   




ú
	



úÿ
ÿÿÿ
ÿÿ
ü

ýÿ

&&&$þ$þ
þ
þþþ

zAuth.createN)r[   Ú
__module__Ú__qualname__rD   rI   Úboolr   Ústaticmethodr   r    r$   r   r*   r.   rd   r   r   r   r   r   %   s   r   )r]   ÚloggingrM   Úhashlibr   Úior   Úosr   Zpyrogramr   Zpyrogram.connectionr   Zpyrogram.cryptor   r   r	   Zpyrogram.errorsr
   Zpyrogram.raw.corer   r   r   Z	internalsr   Ú	getLoggerr[   rF   r   r   r   r   r   Ú<module>   s   
