U
    ;g                     @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 ddlmZ eeeedd	d
Ze	eeeeedddZeeeee	dddZdS )    )sha256)BytesIO)urandom)SecurityCheckMismatch)MessageLong   )aes)auth_keymsg_keyoutgoingreturnc                 C   s   |rdnd}t || ||d    }t | |d |d  |  }|d d |dd  |dd  }|d d |dd  |dd  }||fS )Nr      $   (   L          )r   digest)r
   r   r   xZsha256_aZsha256_baes_keyaes_iv r   W/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/pyrogram/crypto/mtproto.pykdf   s     $$r   )messagesalt
session_idr
   auth_key_idr   c                 C   s   t || |   }tt|d  d d }t|dd | |  }|dd }t||d\}	}
|| t|| |	|
 S )N      X   x   r   r   T)	r   writer   lenr   r   r   r	   Zige256_encrypt)r   r   r   r
   r   datapaddingZmsg_key_larger   r   r   r   r   r   pack)   s    r'   )br   r
   r   r   c              
      s  t | d|kd | d}t||d\}}tt|  ||}|d t |d|kd zt|}W n tk
r }	 z|	j	d dkrt
d|    fdd	tdt d
D  dd	  D  ddd  D  tdt|	j	d  d  W 5 d }	~	X Y nX t |t|dd |   dd kd |d | }
|
|jd  }t dt|  kodkn  d t t|
d dkd t |jd dkd |S )Nr   zb.read(8) == auth_key_idr    Fzdata.read(8) == session_idr   z4Received empty data. Check your internet connection.c                    s   g | ]} ||d   qS )@   r   .0ileftr   r   
<listcomp>M   s     zunpack.<locals>.<listcomp>r)   c                    s*   g | ]"  fd dt dt dD qS )c                    s   g | ]} ||d   qS )r   r   r*   r-   r   r   r/   N   s     z%unpack.<locals>.<listcomp>.<listcomp>r   r   )ranger$   )r+   r   r-   r   r/   N   s     
c                 s   s"   | ]}d  dd |D V  qdS ) c                 s   s   | ]
}|V  qd S )Nr   )r+   r   r   r   r   	<genexpr>O   s     z#unpack.<locals>.<genexpr>.<genexpr>N)join)r+   r.   r   r   r   r3   O   s     zunpack.<locals>.<genexpr>z(The server sent an unknown constructor: `      r   zHmsg_key == sha256(auth_key[96:96 + 32] + data.getvalue()).digest()[8:24]r   r   i   z12 <= len(padding) <= 1024   zlen(payload) % 4 == 0   zmessage.msg_id % 2 != 0)r   checkreadr   r   r	   Zige256_decryptr   KeyErrorargsConnectionErrorhexr0   r$   r4   
ValueErrorr   getvaluer   seeklengthZmsg_id)r(   r   r
   r   r   r   r   r%   r   epayloadr&   r   r-   r   unpack5   s6    

0&
&rE   N)hashlibr   ior   osr   Zpyrogram.errorsr   Zpyrogram.raw.corer   r    r	   bytesbooltupler   intr'   rE   r   r   r   r   <module>   s   