B
    fd              
   @   sV  d dl Z e eZyd dlZed eeeedddZeeeedddZdeee	e	edd	d
Z
deee	e	edddZeeedddZW n ek
rP   d dlZed eeeedddZeeeedddZdeee	e	eddd
Z
deee	e	edddZeeedddZeeeeedddZeee	e	edddZY nX dS )    NzUsing TgCrypto)datakeyivreturnc             C   s   t | ||S )N)tgcryptoige256_encrypt)r   r   r    r   7/tmp/pip-unpacked-wheel-rcokkf2l/pyrogram/crypto/aes.pyr      s    r   c             C   s   t | ||S )N)r   ige256_decrypt)r   r   r   r   r   r	   r
   !   s    r
   )r   r   r   stater   c             C   s   t | |||ptdS )N   )r   ctr256_encrypt	bytearray)r   r   r   r   r   r   r	   r   %   s    r   c             C   s   t | |||ptdS )Nr   )r   ctr256_decryptr   )r   r   r   r   r   r   r	   r   )   s    r   )abr   c             C   s&   t t | dt |dA t| dS )Nbig)intto_bytes
from_byteslen)r   r   r   r   r	   xor-   s    r   zTgCrypto is missing! Pyrogram will work the same, but at a much slower speed. More info: https://docs.pyrogram.org/topics/speedupsc             C   s   t | ||dS )NT)ige)r   r   r   r   r   r	   r   =   s    c             C   s   t | ||dS )NF)r   )r   r   r   r   r   r	   r
   A   s    c             C   s   t | |||ptdS )Nr   )ctrr   )r   r   r   r   r   r   r	   r   E   s    c             C   s   t | |||ptdS )Nr   )r   r   )r   r   r   r   r   r   r	   r   I   s    c             C   s&   t t | dt |dA t| dS )Nr   )r   r   r   r   )r   r   r   r   r	   r   M   s    )r   r   r   encryptr   c       	         s   t |}|d d }|dd  } fddtdt dD  |r~xpt D ]*\}}t|t||| } |< |}qNW n8x6t D ]*\}}t|t||| } |< |}qW d S )N   c                s   g | ]} ||d   qS )r   r   ).0i)r   r   r	   
<listcomp>[   s    zige.<locals>.<listcomp>r       )	pyaesAESranger   	enumerater   r   Zdecryptjoin)	r   r   r   r   cipherZiv_1Ziv_2r   chunkr   )r   r	   r   U   s    

r   c       
      C   s   t |}t| }||}xtdt| dD ]}xtdtt| | dD ]}|||   ||d  N  < |d  d7  < |d dkrd|d< |d dkrLxHtdddD ]8}	y||	  d7  < P W q tk
r   d||	< Y qX qW ||}qLW q.W |S )Nr   r   r      )r    r!   r   r   r"   r   min
ValueError)
r   r   r   r   r%   outr&   r   jkr   r   r	   r   i   s$    

r   )N)N)N)N)logging	getLogger__name__logr   infobytesr   r
   r   r   r   r   ImportErrorr    warningboolr   r   r   r   r   r	   <module>   s(   

