Ë
    S"“j½  ã                   ó®   — d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZ ddlmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZmZ d„ Zdd„Zy)z‘
This module contains several functions that authenticate the client machine
with Telegram's servers, effectively creating an authorization key.
é    N)Úsha1é   )	ÚResPQÚPQInnerDataÚServerDHParamsFailÚServerDHParamsOkÚServerDHInnerDataÚClientDHInnerDataÚDhGenOkÚ
DhGenRetryÚ	DhGenFail)Úhelpers)ÚAESÚAuthKeyÚFactorizationÚrsa)ÚSecurityError)ÚBinaryReader)ÚReqPqMultiRequestÚReqDHParamsRequestÚSetClientDHParamsRequestc              ƒ   ó
  K  — t         j                  t        j                  d«      dd¬«      }| j	                  t        |«      «      ƒ d{  –—† }t        |t        «      s
J d|z  «       ‚|j                  |k7  rt        d«      ‚t        |j                  «      }t        j                  |«      \  }}t        j                  |«      t        j                  |«      }}t         j                  t        j                  d«      d	d¬«      }t!        t#        t        j                  |«      |||j                  |j$                  |¬
«      «      }d\  }}	|j&                  D ]  }
t        j(                  |
|«      }|€Œ|
}	 n |€/|j&                  D ]   }
t        j(                  |
|d¬«      }|€Œ|
}	 n |€Jt        dj+                  dj-                  |j&                  D �cg c]  }t/        |«      ‘Œ c}«      «      «      ‚| j	                  t1        |j                  |j$                  |||	|¬«      «      ƒ d{  –—† }t        |t2        t4        f«      s
J d|z  «       ‚|j                  |j                  k7  rt        d«      ‚|j$                  |j$                  k7  rt        d«      ‚t        |t4        «      r^t         j                  t7        |j9                  dd	d¬«      «      j;                  «       dd d	d¬«      }|j<                  |k7  rt        d«      ‚t        |t2        «      s
J d|z  «       ‚t?        j@                  |j$                  |«      \  }}tC        |jD                  «      dz  dk7  rt        d«      ‚tG        jH                  |jD                  ||«      }tK        |«      5 }|jM                  d«       |jO                  «       }t        |tP        «      s
J d|z  «       ‚	 ddd«       j                  |j                  k7  rt        d«      ‚|j$                  |j$                  k7  rt        d«      ‚t        |jR                  d¬«      }|jT                  }t        |jV                  d¬«      }|jX                  t        t[        jZ                  «       «      z
  }t        t        j                  d«      d¬«      }t]        |||«      }t]        |||«      }d|cxk  r|dz
  k  st        d«      ‚ t        d«      ‚d|cxk  r|dz
  k  st        d«      ‚ t        d«      ‚d|cxk  r|dz
  k  st        d «      ‚ t        d «      ‚d!d"z  }||cxk  r||z
  k  st        d#«      ‚ t        d#«      ‚||cxk  r||z
  k  st        d$«      ‚ t        d$«      ‚t!        t_        |j                  |j$                  dt        j                  |«      ¬%«      «      }t7        |«      j;                  «       |z   }tG        j`                  |||«      }| j	                  tc        |j                  |j$                  |¬&«      «      ƒ d{  –—† }td        tf        th        f}t        ||«      s
J d'|z  «       ‚|jj                  jl                  } |j                  |j                  k7  rt        d(j+                  | «      «      ‚|j$                  |j$                  k7  rt        d)j+                  | «      «      ‚to        t        j                  |«      «      }!d|jq                  ts        |«      «      z   }"|!ju                  ||"«      }#tw        |d*j+                  |"«      «      }$|$|#k7  rt        d+«      ‚t        |td        «      sty        d,|z  «      ‚|!|fS 7 �Œc c}w 7 �ŒC# 1 sw Y   �Œ¡xY w7 �ŒZ­w)-z½
    Executes the authentication process with the Telegram servers.

    :param sender: a connected `MTProtoPlainSender`.
    :return: returns a (authorization key, time offset) tuple.
    é   ÚbigT)ÚsignedNzStep 1 answer was %sz Step 1 invalid nonce from serveré    Úlittle)ÚpqÚpÚqÚnonceÚserver_nonceÚ	new_nonce)NN)Úuse_oldz6Step 2 could not find a valid key for fingerprints: {}z, )r!   r"   r   r    Úpublic_key_fingerprintÚencrypted_datazStep 2.1 answer was %sz Step 2 invalid nonce from serverz'Step 2 invalid server nonce from serveré   é   z(Step 2 invalid DH fail nonce from serverzStep 2.2 answer was %sr   zStep 3 AES block size mismatchzStep 3 answer was %sz(Step 3 Invalid nonce in encrypted answerz/Step 3 Invalid server nonce in encrypted answerFé   é   z#g_a is not within (1, dh_prime - 1)z#g_b is not within (1, dh_prime - 1)r   iÀ  z7g_a is not within (2^{2048-64}, dh_prime - 2^{2048-64})z7g_b is not within (2^{2048-64}, dh_prime - 2^{2048-64}))r!   r"   Úretry_idÚg_b)r!   r"   r&   zStep 3.1 answer was %sz#Step 3 invalid {} nonce from serverz*Step 3 invalid {} server nonce from serverznew_nonce_hash{}zStep 3 invalid new nonce hashzStep 3.2 answer was %s)=ÚintÚ
from_bytesÚosÚurandomÚsendr   Ú
isinstancer   r!   r   Úget_intr   r   Ú	factorizer   Úget_byte_arrayÚbytesr   r"   Úserver_public_key_fingerprintsÚencryptÚformatÚjoinÚstrr   r   r   r   Úto_bytesÚdigestÚnew_nonce_hashr   Úgenerate_key_data_from_nonceÚlenÚencrypted_answerr   Údecrypt_iger   ÚreadÚtgread_objectr	   Údh_primeÚgÚg_aÚserver_timeÚtimeÚpowr
   Úencrypt_iger   r   r   r   Ú	__class__Ú__name__r   ÚindexÚtypeÚcalc_new_nonce_hashÚgetattrÚAssertionError)%Úsenderr!   Úres_pqr   r   r    r#   Úpq_inner_dataÚcipher_textÚtarget_fingerprintÚfingerprintÚfÚserver_dh_paramsÚnnhÚkeyÚivÚplain_text_answerÚreaderÚserver_dh_innerrE   rF   rG   Útime_offsetÚbr,   ÚgabÚsafety_rangeÚclient_dh_innerÚclient_dh_inner_hashedÚclient_dh_encryptedÚdh_genÚnonce_typesÚnameÚauth_keyÚnonce_numberr>   Údh_hashs%                                        ú_/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/telethon/network/authenticator.pyÚdo_authenticationro      s@  è ø€ ô �N‰Nœ2Ÿ:™: b›>¨5¸ˆNÓ>€EØ—;‘;Ô0°Ó7Ó8×8€FÜ�fœeÔ$ÐEÐ&<¸vÑ&EÓEÐ$à‡|�|�uÒÜÐ>Ó?Ð?ä	�—‘Ó	€Bô ×"Ñ" 2Ó&�D€A€qÜ×Ñ˜aÓ ¤#×"4Ñ"4°QÓ"7€q€AÜ—‘œrŸz™z¨"›~¨xÀ�ÓE€Iäœ+Ü×Ñ˜bÓ! Q¨!Ø�l‰lØ×(Ñ(Øô	ó €Mð '1Ñ#€KÐ#Ø×<Ñ<ò ˆÜ—k‘k +¨}Ó=ˆØÑ"Ø!,ÐÙð	ð Ðà!×@Ñ@ò 	ˆKÜŸ+™+ k°=È$ÔOˆKØÑ&Ø%0Ð"Ùð		ð ÐÜØDß‰V�D—I‘IØ!'×!FÑ!FÖG˜A”�Q•ÒGóIó ó
ð 	
ð $Ÿ[™[Ô);Ø�l‰lØ×(Ñ(Ø
ˆqØ1Ø"ô*ó ÷ Ðô ØÔ+Ô-?Ð@ôBð 4à Ð#3Ñ3ó4ð Bð ×Ñ §¡Ò-ÜÐ>Ó?Ð?à×$Ñ$¨×(;Ñ(;Ò;ÜÐEÓFÐFäÐ"Ô$6Ô7Ü�n‰nÜ�×#Ñ# B¨¸Ð#Ó>Ó?×FÑFÓHÈÈ2ÐNØ˜Tð ó 
ˆð ×*Ñ*¨cÒ1ÜÐ JÓKÐKäÐ&Ô(8Ô9ð 4Ø Ð#3Ñ3ó4Ð9ô ×2Ñ2Ø×Ñ˜Yó�G€Cˆô Ð×,Ñ,Ó-°Ñ2°aÒ7äÐ<Ó=Ð=äŸ™Ø×)Ñ)¨3°óÐô 
Ð'Ó	(ð 5¨FØ�‰�BŒØ ×.Ñ.Ó0ˆÜ˜/Ô+<Ô=ð 	5Ø" _Ñ4ó	5Ñ=÷5ð ×Ñ §¡Ò,ÜÐFÓGÐGà×#Ñ# v×':Ñ':Ò:ÜÐMÓNÐNä�×/Ñ/¸Ô>€HØ×Ñ€AÜ
�/×%Ñ%¨eÔ
4€CØ!×-Ñ-´´D·I±I³KÓ0@Ñ@€Kä”—
‘
˜3“¨Ô.€AÜ
ˆa��HÓ
€CÜ
ˆc�1�hÓ
€Cð �Ô"�X ‘\Ò"ÜÐAÓBÐBð #ÜÐAÓBÐBà�Ô$�x !‘|Ò$ÜÐAÓBÐBð %ÜÐAÓBÐBà�Ô$�x !‘|Ò$ÜÐAÓBÐBð %ÜÐAÓBÐBà˜Ñ#€LØ˜CÔ< H¨|Ñ$;Ò<ÜÐUÓVÐVð =ÜÐUÓVÐVà˜CÔ< H¨|Ñ$;Ò<ÜÐUÓVÐVð =ÜÐUÓVÐVô Ô-Ø�l‰lØ×(Ñ(ØÜ×Ñ˜sÓ#ô	ó €Oô " /Ó2×9Ñ9Ó;¸oÑMÐô Ÿ/™/Ð*@À#ÀrÓJÐð —;‘;Ô7Ø�l‰lØ×(Ñ(Ø*ô ó ÷ €Fô œJ¬	Ð2€KÜ�f˜kÔ*ÐMÐ,DÀvÑ,MÓMÐ*Ø×Ñ×$Ñ$€DØ‡|�|�v—|‘|Ò#ÜÐA×HÑHÈÓNÓOÐOà×Ñ˜f×1Ñ1Ò1ÜØ8×?Ñ?ÀÓEóGð 	Gô ”s×)Ñ)¨#Ó.Ó/€HØ�{×(Ñ(¬¨f«Ó6Ñ6€LØ×1Ñ1°)¸\ÓJ€Nä�fÐ0×7Ñ7¸ÓEÓF€GØ�.Ò ÜÐ;Ó<Ð<ä�fœgÔ&ÜÐ5¸Ñ>Ó?Ð?à�[Ð Ð ðS 9ûòP Hðù÷R5ñ 5úðrûse   ‚A	^Á](ÁD'^Å40^Æ%0^Ç]+Ç'A^È-]0È.E)^Î<]3ÏI^Ø&^ Ø'E^Ý+^Ý3]=Ý8	^c                 ó2   — t         j                  | d|¬«      S )a8  
    Gets the specified integer from its byte array.
    This should be used by this module alone, as it works with big endian.

    :param byte_array: the byte array representing th integer.
    :param signed: whether the number is signed or not.
    :return: the integer representing the given byte array.
    r   )Ú	byteorderr   )r-   r.   )Ú
byte_arrayr   s     rn   r3   r3   Ë   s   € ô �>‰>˜*°¸fˆ>ÓEÐEó    )T) Ú__doc__r/   rI   Úhashlibr   Útl.typesr   r   r   r   r	   r
   r   r   r   Ú r   Úcryptor   r   r   r   Úerrorsr   Ú
extensionsr   Útl.functionsr   r   r   ro   r3   © rs   rn   ú<module>r}      sL   ðñó 
Û Ý ÷÷ õ õ ß 5Ó 5Ý "Ý %÷ñ ò
r!ôj	Frs   