U
    ¯ªh°  ã                
   @   sø   d Z ddlZddlZddlZddlZzddlZW n ek
rD   Y nX ddlZddlZe 	e
¡Zdd„ Zz
eƒ ZW n8 ek
rª Z ze deeƒe¡ dZW 5 dZ[X Y nX esºdZdZn:e d¡Ze d¡ZdZG dd	„ d	ejƒZd
d„ Zdd„ ZdS )zM
Helper module around the system's libssl library if available for IGE mode.
é    Nc                  C   s\  t j d¡} tjdkr|t ¡ \}}}| d¡^}}}t|ƒdksXt|ƒdkr|t|ƒdkr|t j d¡pzt j d¡pzt j d¡} | sˆtd	ƒ‚zt j	 
| ¡}W n tk
r¬   Y nX |S zt jjj}W n( tk
rè   tj d
¡dddg}Y nX |D ]\}	tj |	¡rît |	¡D ]@\}
}}| |krtj tj |
| ¡¡} t j	 
| ¡    S qqîtd|  ƒ‚d S )NÚsslÚdarwinÚ.é
   é   z	libssl.46z	libssl.44z	libssl.42zno library called "ssl" foundz~/libz/usr/local/libz/libz/usr/libz1no absolute path for "%s" and cannot load by name)ÚctypesÚutilZfind_libraryÚsysÚplatformÚmac_verÚsplitÚintÚOSErrorÚcdllÚLoadLibraryZmacholibZdyldZDEFAULT_LIBRARY_FALLBACKÚAttributeErrorÚosÚpathÚ
expanduserÚisdirÚwalkÚrealpathÚjoin)ÚlibÚreleaseZ_version_infoZ_machineÚverÚmajorÚ_ZlibsslÚpathsr   ÚrootÚfiles© r!   ú:/tmp/pip-unpacked-wheel-c81u5j2r/telethon/crypto/libssl.pyÚ_find_ssl_lib   s@    
$
ÿ
ý
ü

r#   z#Failed to load SSL library: %s (%s)é   r   c                   @   s0   e Zd ZdZdejded   fdejfgZdS )ÚAES_KEYz$Helper class representing an AES keyZrd_keyé   r$   ÚroundsN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úc_uint32Ú	AES_MAXNRÚc_uintÚ_fields_r!   r!   r!   r"   r%   [   s   þr%   c              	   C   s´   t ƒ }t dt|ƒ ¡}tjt|ƒ |Ž }tjt|ƒ |Ž }t t| ƒ¡}tjt| ƒ | Ž }tjt| ƒ ƒ }t ||t |¡¡ t 	t |¡t |¡|t |¡t |¡t
¡ t|ƒS ©Né   )r%   r   Úc_intÚlenÚc_ubyteÚc_size_tÚ_libsslZAES_set_decrypt_keyÚbyrefÚAES_ige_encryptÚAES_DECRYPTÚbytes)Zcipher_textÚkeyÚivÚaes_keyÚkey_lenÚin_lenÚin_ptrÚout_ptrr!   r!   r"   Údecrypt_igeb   s"    ú	rB   c              	   C   s´   t ƒ }t dt|ƒ ¡}tjt|ƒ |Ž }tjt|ƒ |Ž }t t| ƒ¡}tjt| ƒ | Ž }tjt| ƒ ƒ }t ||t |¡¡ t 	t |¡t |¡|t |¡t |¡t
¡ t|ƒS r0   )r%   r   r2   r3   r4   r5   r6   ZAES_set_encrypt_keyr7   r8   ÚAES_ENCRYPTr:   )Z
plain_textr;   r<   r=   r>   r?   r@   rA   r!   r!   r"   Úencrypt_igex   s"    ú	rD   )r+   r   Zctypes.utilr
   r	   Zctypes.macholib.dyldÚImportErrorÚloggingr   Ú	getLoggerr(   Z__log__r#   r6   r   ÚeÚinfoÚtyperB   rD   r2   rC   r9   r-   Ú	Structurer%   r!   r!   r!   r"   Ú<module>   s4   
8


