Ë
    S"“j{  ã                   óÄ   — d dl Z 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	m
Z
 ddlmZ  G d„ d	«      Z G d
„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zy)é    Né   )ÚObfuscatedConnection)ÚAbridgedPacketCodec)ÚIntermediatePacketCodecÚ!RandomizedIntermediatePacketCodecé   )Ú
AESModeCTRc                   ó6   — e Zd ZdZdZd„ Zed„ «       Zd„ Zd„ Z	y)Ú	MTProxyIOzŒ
    It's very similar to tcpobfuscated.ObfuscatedIO, but the way
    encryption keys, protocol tag and dc_id are encoded is different.
    Nc                 óÐ   — |j                   | _         |j                  | _        | j                  |j                  |j                  |j
                  «      \  | _        | _        | _        y ©N)	Ú_readerÚ_writerÚinit_headerÚ_secretÚ_dc_idÚpacket_codecÚheaderÚ_encryptÚ_decrypt)ÚselfÚ
connections     úg/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/telethon/network/connection/tcpmtproxy.pyÚ__init__zMTProxyIO.__init__   sY   € Ø!×)Ñ)ˆŒØ!×)Ñ)ˆŒð ×*Ñ*Ø×Ñ ×!2Ñ!2°J×4KÑ4KóMñ	ˆŒØ	ŒØ	�ó    c                 ó  — t        | «      dk(  xr | d   dk(  }t        |t        «      }|r|st        d«      ‚|r| dd  n| } t        | «      dk7  rt        d«      ‚d}	 t	        j
                  d
«      }|d   dk7  r|d d |vr	|dd dk7  rnŒ.t        |«      }|ddd…   }t        j                  t        |dd «      | z   «      j                  «       }t        |dd «      }	t        j                  t        |d d «      | z   «      j                  «       }
t        |dd «      }t        ||	«      }t        |
|«      }|j                  |dd |j                  ddd	¬«      }|d d |z   |dd  z   }|j                  t        |«      «      dd
 |dd
 |||fS )Né   r   éÝ   z7Only RandomizedIntermediate can be used with dd-secretsr   é   z9MTProxy secret must be a hex-string representing 16 bytes)s   PVrGs   GET s   POSTs   îîîîTé@   éï   é   s       é7   é   éÿÿÿÿé   é(   é8   é    é0   é<   é   Úlittle)Úsignedé>   )ÚlenÚ
issubclassr   Ú
ValueErrorÚosÚurandomÚ	bytearrayÚhashlibÚsha256ÚbytesÚdigestr	   Úobfuscate_tagÚto_bytesÚencrypt)ÚsecretÚdc_idr   Úis_ddÚis_rand_codecÚkeywordsÚrandomÚrandom_reversedÚencrypt_keyÚ
encrypt_ivÚdecrypt_keyÚ
decrypt_ivÚ	encryptorÚ	decryptorÚdc_id_bytess                  r   r   zMTProxyIO.init_header    s×  € ô �V“ Ñ"Ò;¨°©°dÑ):ˆÜ"ØÔ;ó=ˆá™ÜØIóKð Ká$�˜˜‘¨&ˆÜˆv‹;˜"ÒÜØKóMð Mð DˆØÜ—Z‘Z “^ˆFØ�q‘	˜TÒ!Ø˜2˜A�J hÑ.Ø˜1˜Q�K ;Ò.Øð ô ˜6Ó"ˆØ   A b ™/ˆô —n‘nÜ�&˜˜2�,Ó &Ñ(ó*ß*0©&«(ð 	ä˜6 " R˜=Ó)ˆ
Ü—n‘nÜ�/ # 2Ð&Ó'¨&Ñ0ó2ß28±&³(ð 	ä˜?¨2¨bÐ1Ó2ˆ
ä˜{¨JÓ7ˆ	Ü˜{¨JÓ7ˆ	à$×2Ñ2ˆˆr�"ˆà—n‘n Q¨¸�nÓ>ˆØ˜˜�˜{Ñ*¨V°B°C¨[Ñ8ˆØ!×)Ñ)¬%°«-Ó8¸¸BÐ?ˆˆr�"ˆØ˜	 9Ð-Ð-r   c              ƒ   ó†   K  — | j                   j                  | j                  j                  |«      ƒ d {  –—† «      S 7 Œ­wr   )r   r<   r   Úreadexactly)r   Úns     r   rL   zMTProxyIO.readexactlyL   s0   è ø€ Ø�}‰}×$Ñ$¨4¯<©<×+CÑ+CÀAÓ+F×%FÓGÐGÐ%Fús   ‚4A¶?·	Ac                 ól   — | j                   j                  | j                  j                  |«      «       y r   )r   Úwriter   r<   )r   Údatas     r   rO   zMTProxyIO.writeO   s#   € Ø�‰×Ñ˜4Ÿ=™=×0Ñ0°Ó6Õ7r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ústaticmethodr   rL   rO   © r   r   r   r      s4   „ ñð €FòMð ñ).ó ð).òVHó8r   r   c                   ó^   ‡ — e Zd ZdZdZeZdddœˆ fd„
Zdˆ fd„	Ze	d„ «       Z
e	d„ «       Zˆ xZS )	Ú
TcpMTProxyaŽ  
    Connector which allows user to connect to the Telegram via proxy servers
    commonly known as MTProxy.
    Implemented very ugly due to the leaky abstractions in Telethon networking
    classes that should be refactored later (TODO).

    .. warning::

        The support for TcpMTProxy classes is **EXPERIMENTAL** and prone to
        be changed. You shouldn't be using this class yet.
    N)ÚproxyÚ
local_addrc                ó†   •— | j                  |«      \  }}| j                  |d   «      | _        t        ‰	| �  ||||¬«       y )Nr,   )Úloggers)Úaddress_infoÚnormalize_secretr   Úsuperr   )
r   ÚipÚportr>   r\   rY   rZ   Ú
proxy_hostÚ
proxy_portÚ	__class__s
            €r   r   zTcpMTProxy.__init__c   sI   ø€ à!%×!2Ñ!2°5Ó!9Ñˆ
�JØ×,Ñ,¨U°1©XÓ6ˆŒÜ‰ÑØ˜
 E°7ð 	õ 	<r   c              ƒ   ó¸  •K  — t         ‰| �  ||¬«      ƒ d {  –—†  	 t        j                  | j                  j                  d«      d«      ƒ d {  –—†  | j                  j                  «       r#| j                  «       ƒ d {  –—†  t        d«      ‚y 7 Œz7 ŒD# t        j                  $ r Y ŒWt        $ r! t        j                  d«      ƒ d {  –—†7   Y Œw xY w7 ŒU­w)N)ÚtimeoutÚsslrY   r,   z9Proxy closed the connection after sending initial payload)r_   Ú_connectÚasyncioÚwait_forr   Ú_wait_for_dataÚTimeoutErrorÚ	ExceptionÚsleepÚat_eofÚ
disconnectÚConnectionError)r   rf   rg   rd   s      €r   rh   zTcpMTProxy._connectj   sÅ   øè ø€ Ü‰gÑ w°CÐÓ8×8Ð8ð	#Ü×"Ñ" 4§<¡<×#>Ñ#>¸wÓ#GÈÓK×KÐKð �<‰<×ÑÔ Ø—/‘/Ó#×#Ð#Ü!ØKóMð Mð !ð! 	9øð LùÜ×#Ñ#ò 	ÙÜò 	#Ü—-‘- Ó"×"Ó"ð	#úð $úsh   ƒC˜B™Cž2B ÁBÁB Á-CÂCÂCÂB ÂCÂ*CÂ, CÃCÃCÃCÃCÃCc                 ó&   — | €t        d«      ‚| d d S )Nz.No proxy info specified for MTProxy connectionr,   )r2   )Ú
proxy_infos    r   r]   zTcpMTProxy.address_info€   s    € àÐÜÐMÓNÐNØ˜"˜1ˆ~Ðr   c                 óÞ   — | d d dv r| dd  } 	 t         j                  | «      }|d d S # t        $ r; | dt        | «       dz  z  z   } t	        j
                  | j                  «       «      }Y ŒHw xY w)Nr,   )ÚeeÚddú=r"   r   )r8   Úfromhexr2   r0   Úbase64Ú	b64decodeÚencode)r=   Úsecret_bytess     r   r^   zTcpMTProxy.normalize_secret†   s~   € à�"�1ˆ:˜Ñ%Ø˜A˜B�ZˆFð	=Ü Ÿ=™=¨Ó0ˆLð
 ˜C˜RÐ Ð øô	 ò 	=Ø˜c¤c¨&£k \°AÑ%5Ñ6Ñ6ˆFÜ!×+Ñ+¨F¯M©M«OÓ<ŠLð	=ús   Ž( ¨AA,Á+A,)NN)rQ   rR   rS   rT   r   r   Úobfuscated_ior   rh   rU   r]   r^   Ú__classcell__)rd   s   @r   rX   rX   S   sN   ø„ ñ
ð €LØ€Mð ;?È4ö <õMð, ñó ðð
 ñ
!ó ô
!r   rX   c                   ó   — e Zd ZdZeZy)ÚConnectionTcpMTProxyAbridgedz2
    Connect to proxy using abridged protocol
    N)rQ   rR   rS   rT   r   r   rV   r   r   r€   r€   “   s   „ ñð '�Lr   r€   c                   ó   — e Zd ZdZeZy)Ú ConnectionTcpMTProxyIntermediatez6
    Connect to proxy using intermediate protocol
    N)rQ   rR   rS   rT   r   r   rV   r   r   r‚   r‚   š   s   „ ñð +�Lr   r‚   c                   ó   — e Zd ZdZeZy)Ú*ConnectionTcpMTProxyRandomizedIntermediatezN
    Connect to proxy using randomized intermediate protocol (dd-secrets)
    N)rQ   rR   rS   rT   r   r   rV   r   r   r„   r„   ¡   s   „ ñð 5�Lr   r„   )ri   r6   ry   r3   r   r   Útcpabridgedr   Útcpintermediater   r   Úcryptor	   r   rX   r€   r‚   r„   rV   r   r   ú<module>rˆ      s`   ðÛ Û Û Û 	å ,Ý ,÷õ
 !÷@8ñ @8ôF>!Ð%ô >!ô@' :ô 'ô+ zô +ô5°õ 5r   