o
    �õ±j!  ã                   @   s(   d dl Z d dlmZ G dd„ deƒZdS )é    N)Ú
Packetizerc                   @   sf   e Zd Zdefdd„Zdd„ Zdefdd„Zd	d
„ Zdd„ Z	ddd„Z
defdd„Zdefdd„ZdS )ÚPacketizerSSLÚ
packetizerc                 C   s:   t  | d¡ || _|| _d | _d | _d | _g | _d| _d S )Ni @  F)	r   Ú__init__Ússl_ctxr   Útls_in_buffÚtls_out_buffÚtls_objÚ _PacketizerSSL__plaintext_bufferÚ_PacketizerSSL__deepdebug)Úselfr   r   © r   úš/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/asysocks/unicomm/common/packetizers/ssl.pyr      s   
zPacketizerSSL.__init__c                 C   s
   | j  ¡ S ©N)r   Úflush_buffer©r   r   r   r   r      s   
zPacketizerSSL.flush_bufferÚbuffer_sizec                 C   s   | j  |¡ d S r   )r   Úset_buffersize)r   r   r   r   r   r      s   zPacketizerSSL.set_buffersizec                 C   s   | j jdd�S )NT)Úbinary_form)r	   Úgetpeercertr   r   r   r   Úget_peer_certificate   s   z"PacketizerSSL.get_peer_certificatec                 O   s   | j j|i |¤Ž d S r   )r   Úpacketizer_control)r   ÚargsÚkwargsr   r   r   r      s   z PacketizerSSL.packetizer_controlFc           
   
   Ã   s  �t  ¡ | _t  ¡ | _| jj| j| j|d�| _d}	 | jdu r%td| ƒ |dkr-t	dƒ‚|d7 }z| j 
¡  W n› t jyÆ   | jdu rKtd| ƒ td	ƒD ]&}| j ¡ }|d
krt| jdu rgtdt|ƒ ƒ | |¡ | ¡ I d H  qO nt	dƒ‚| jdu r…td| ƒ | | j¡I d H }|d u s–|d
kršt	dƒ‚|dkr±|d dkr±| jdu r­tdƒ t	dƒ‚| jdu r¾tdt|ƒ ƒ | j |¡ Y q t	yÓ } z|‚d }~ww | jdu rßtd| ƒ | j ¡ }	| jdu rïtd|	 ƒ |	d
krÿ| |	¡ | ¡ I d H  	 | jdu �rtdƒ d S d S )N)Úserver_sider   TzDST start %sé   z"Handshake took too many iterationsé   zDST want %sé
   ó    zDST client_hello %sz$Handshake took too many iterations 2zDST wating server hello %szConnection closedé   z0Server did not send a valid TLS handshake packetzDST server_hello %szDST handshake ok %szDST server_fin %s zHandshake done)ÚsslÚ	MemoryBIOr   r   r   Úwrap_bior	   r   ÚprintÚ	ExceptionÚdo_handshakeÚSSLWantReadErrorÚrangeÚreadÚlenÚwriteÚdrainr   )
r   ÚreaderÚwriterr   ÚctrÚ_Úclient_helloÚserver_helloÚeÚ
server_finr   r   r   r%      sl   €









€ÿ



ÿzPacketizerSSL.do_handshakeÚdatac                 C  sV   �d}| j  |¡2 z
3 d H W }||7 }q	6 | j |¡ 	 | j ¡ }|dkr)|V  qd S )Nr   )r   Údata_outr	   r*   r   r(   )r   r4   ÚoutdataÚ	packetrawÚrawr   r   r   r5   [   s   €
ÿ
zPacketizerSSL.data_outÚencdatac                 C  sÔ   �| j r| j  d¡V  | j s|d u rd V  | j |¡ d}d}	 z| j ¡ }|dkr,W n||7 }d}W n
 tjy=   Y nw q |du rf| j 	|¡2 z3 d H W }| j  
|¡ qI6 | j rh| j  d¡V  | j sZd S d S d S )Nr   r   FT)r
   Úpopr   r*   r	   r(   r    r&   r   Údata_inÚappend)r   r9   r4   Úwas_dataÚchunkÚpacketr   r   r   r;   g   s:   €ÿ
ÿ÷ÿ
ÿüzPacketizerSSL.data_inN)F)Ú__name__Ú
__module__Ú__qualname__r   r   r   Úintr   r   r   r%   Úbytesr5   r;   r   r   r   r   r      s    

@r   )r    Ú#asysocks.unicomm.common.packetizersr   r   r   r   r   r   Ú<module>   s    