U
    ÒZjú   ã                   @   s  d dl Z d dlmZ e jrVd dlmZ d dlmZmZm	Z	m
Z
mZ e jeee	e
ef ZdZd Zdedœdd	„Zed
dœdd„Zd
eeee je eedœdd„Zd
eddœdd„Zd
eddœdd„Zd
eedœdd„Zd
deee je eedœdd„Zd
deee je eedœdd„ZdS )é    N)Ú
InvalidTag)ÚBackend©ÚAESCCMÚAESGCMÚAESOCB3ÚAESSIVÚChaCha20Poly1305é   Ú_AEAD_TYPES)ÚcipherÚreturnc                 C   sÎ   ddl m}m}m}m}m} t| |ƒr*dS t| |ƒrPdt| jƒd › d� 	d¡S t| |ƒrvdt| jƒd › d� 	d¡S t| |ƒr dt| jƒd d	 › d
� 	d¡S t| |ƒs®t
‚dt| jƒd › d� 	d¡S d S )Nr   r   s   chacha20-poly1305zaes-é   z-ccmÚasciiz-ocbé   z-sivz-gcm)Ú+cryptography.hazmat.primitives.ciphers.aeadr   r   r   r   r	   Ú
isinstanceÚlenÚ_keyÚencodeÚAssertionError)r   r   r   r   r   r	   © r   úl/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/cryptography/hazmat/backends/openssl/aead.pyÚ_aead_cipher_name   s    



 r   r   )Úcipher_nameÚbackendc                 C   sj   |   d¡rH|j |jj| |jj¡}| ||jjk¡ |j ||jj¡}n|j | ¡}| ||jjk¡ |S )Ns   -siv)	ÚendswithÚ_libZEVP_CIPHER_fetchÚ_ffiÚNULLÚopenssl_assertÚgcZEVP_CIPHER_freeZEVP_get_cipherbyname)r   r   Ú
evp_cipherr   r   r   Ú_evp_cipher2   s    
ýr#   )r   r   ÚkeyÚnonceÚtagÚtag_lenÚ	operationc              
   C   sl  t || ƒ}| j ¡ }| j || jj¡}| j ||| jj| jj| jjt|t	kƒ¡}	|  
|	dk¡ | j |t|ƒ¡}	|  
|	dk¡ | j || jjt|ƒ| jj¡}	|  
|	dk¡ |tkrè|d k	s¾t‚| j || jjt|ƒ|¡}	|  
|	dk¡ n4| d¡�r| j || jj|| jj¡}	|  
|	dk¡ | j |¡}
| j |¡}| j || jj| jj||
t|t	kƒ¡}	|  
|	dk¡ |S )Nr   s   -ccm)r#   r   ZEVP_CIPHER_CTX_newr   r!   ZEVP_CIPHER_CTX_freeZEVP_CipherInit_exr   ÚintÚ_ENCRYPTr    ZEVP_CIPHER_CTX_set_key_lengthr   ÚEVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLENÚ_DECRYPTr   ZEVP_CTRL_AEAD_SET_TAGr   Zfrom_buffer)r   r   r$   r%   r&   r'   r(   r"   ÚctxÚresZ	nonce_ptrZkey_ptrr   r   r   Ú_aead_setupB   sd    	


úü   ÿ   ÿ
úr/   )r   Údata_lenr   c                 C   s:   | j  d¡}| j || j j|| j j|¡}|  |dk¡ d S ©Núint *r   )r   Únewr   ÚEVP_CipherUpdater   r    )r   r-   r0   Zintptrr.   r   r   r   Ú_set_lengthz   s        ÿr5   )r   Úassociated_datar   c                 C   s:   | j  d¡}| j || j j||t|ƒ¡}|  |dk¡ d S r1   )r   r3   r   r4   r   r   r    )r   r-   r6   Úoutlenr.   r   r   r   Ú_process_aad‚   s        ÿr8   )r   Údatar   c                 C   sd   | j  d¡}| j  dt|ƒ¡}| j ||||t|ƒ¡}|dkrJ|  ¡  t‚| j  ||d ¡d d … S )Nr2   úunsigned char[]r   )r   r3   r   r   r4   Ú_consume_errorsr   Úbuffer)r   r-   r9   r7   Úbufr.   r   r   r   Ú_process_dataŠ   s    r>   )r   r   r%   r9   r6   Ú
tag_lengthr   c                 C   s8  ddl m}m} t|ƒ}t| ||j|d |tƒ}	t||ƒrHt| |	t	|ƒƒ |D ]}
t
| |	|
ƒ qLt| |	|ƒ}| j d¡}| j dd¡}| j |	||¡}|  |dk¡ || j ||d ¡d d … 7 }| j d|¡}| j |	| jj||¡}|  |dk¡ | j |¡d d … }t||ƒ�r,|  t	|ƒdk¡ || S || S d S )Nr   ©r   r   r2   r:   é   )r   r   r   r   r/   r   r*   r   r5   r   r8   r>   r   r3   r   ÚEVP_CipherFinal_exr    r<   r+   ZEVP_CTRL_AEAD_GET_TAG)r   r   r%   r9   r6   r?   r   r   r   r-   ÚadÚprocessed_datar7   r=   r.   Ztag_bufr&   r   r   r   Ú_encrypt•   sD          ÿ
   ÿrE   c                 C   s�  ddl m}m} t|ƒ|k r t‚t||ƒrD|d |… }||d … }n|| d … }|d | … }t|ƒ}	t| |	|j|||t	ƒ}
t||ƒr˜t
| |
t|ƒƒ |D ]}t| |
|ƒ qœt||ƒ�r"| j d¡}| j dt|ƒ¡}| j |
|||t|ƒ¡}|dk�r|  ¡  t‚| j ||d ¡d d … }njt| |
|ƒ}| j d¡}| j dd¡}| j |
||¡}|| j ||d ¡d d … 7 }|dk�rŒ|  ¡  t‚|S )Nr   r@   r2   r:   r
   rA   )r   r   r   r   r   r   r   r/   r   r,   r5   r8   r   r3   r   r4   r;   r<   r>   rB   )r   r   r%   r9   r6   r?   r   r   r&   r   r-   rC   r7   r=   r.   rD   r   r   r   Ú_decryptÄ   sN    
      ÿ


rF   )ÚtypingZcryptography.exceptionsr   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r   r   r   r   r   r	   ÚUnionr   r*   r,   Úbytesr   r#   ÚOptionalr)   r/   r5   r8   r>   ÚListrE   rF   r   r   r   r   Ú<module>   sL   ÿù8ù0ù