a
    ݌xd)'                  
   @   sX  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
dedddZd
eeee je eedddZeddddZeed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
deee je ee jed#d$d%Zd)d
deee je ee jed#d&d'ZdS )*    N)
InvalidTag)BackendAESCCMAESGCMAESOCB3AESSIVChaCha20Poly1305   
_AEADTypes)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| |rdt| jd d	  d
	dS t| |sJ 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)r   r   r   r   r   r	    r   a/var/www/html/Ranjet/env/lib/python3.9/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_cipher1   s    
r"   )r   r   keyc                 C   s|   | j  }| || jjk | j|| j j}t|}t|| }| j	|}| j 
||| jj|| jjd}| |dk |S Nr   )r   EVP_CIPHER_CTX_newr   r   r   r    EVP_CIPHER_CTX_freer   r"   from_bufferEVP_CipherInit_ex)r   r   r#   ctxr   r!   key_ptrresr   r   r   _aead_create_ctxA   s     

r,   )r   r   r#   noncetagtag_len	operationc              
   C   s.  t || }| j }| j|| jj}| j||| jj| jj| jjt|t	k}	| 
|	dk | j|| jjt|| jj}	| 
|	dk |tkr|d usJ t| || n2|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   r%   r   r    r&   r(   r   int_ENCRYPTr   EVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLENr   _DECRYPT_set_tagr   EVP_CTRL_AEAD_SET_TAGr'   )r   r   r#   r-   r.   r/   r0   r!   r)   r+   	nonce_ptrr*   r   r   r   _aead_setupX   sN    	




r8   )r.   r   c                 C   s8   | j |}| j|| jjt||}| |dk d S r$   )r   r'   r   r3   r6   r   r   )r   r)   r.   Ztag_ptrr+   r   r   r   r5      s
    r5   )r-   r0   r   c              
   C   sH   | j |}| j|| j j| j j| j j|t|tk}| |dk d S r$   )r   r'   r   r(   r   r1   r2   r   )r   r)   r-   r0   r7   r+   r   r   r   _set_nonce_operation   s    
r9   )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)   r:   Zintptrr+   r   r   r   _set_length   s
    r?   )r   associated_datar   c                 C   sF   | j d}| j |}| j|| j j||t|}| |dk d S r;   )r   r=   r'   r   r>   r   r   r   )r   r)   r@   outlenZ
a_data_ptrr+   r   r   r   _process_aad   s    rB   )r   datar   c                 C   sp   | j d}| j dt|}| j |}| j||||t|}|dkrV|   t| j ||d d d  S )Nr<   unsigned char[]r   )	r   r=   r   r'   r   r>   _consume_errorsr   buffer)r   r)   rC   rA   bufZdata_ptrr+   r   r   r   _process_data   s    rH   )r   r   r-   rC   r@   
tag_lengthr)   r   c                 C   sP  ddl m}m} |d u r8t|}	t| |	|j|d |t}nt| ||t t||r`t	| |t
| |D ]}
t| ||
 qdt| ||}| jd}| jdd}| j|||}| |dk || j||d d d  7 }| jd|}| j|| jj||}| |dk | j|d d  }t||rD| t
|dk || S || S d S )Nr   r   r   r<   rD      )r   r   r   r   r8   r   r2   r9   r   r?   r   rB   rH   r   r=   r   EVP_CipherFinal_exr   rF   r3   ZEVP_CTRL_AEAD_GET_TAG)r   r   r-   rC   r@   rI   r)   r   r   r   adprocessed_datarA   rG   r+   Ztag_bufr.   r   r   r   _encrypt   sB    	

rO   c                 C   s  ddl m}m} t||k r tt||rD|d | }	||d  }n|| d  }	|d |  }|d u rt|}
t| |
|j||	|t	}nt
| ||t	 t| ||	 t||rt| |t| |D ]}t| || qt||rR| jd}| jdt|}| j|}| j||||t|}|dkr6|   t| j||d d d  }njt| ||}| jd}| jdd}| j|||}|| j||d d d  7 }|dkr|   t|S )Nr   rJ   r<   rD   r
   rK   )r   r   r   r   r   r   r   r8   r   r4   r9   r5   r?   rB   r   r=   r'   r   r>   rE   rF   rH   rL   )r   r   r-   rC   r@   rI   r)   r   r   r.   r   rM   rA   rG   Zd_ptrr+   rN   r   r   r   _decrypt   sJ    	



rP   )N)N) typingZcryptography.exceptionsr   TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r   r   r   r   r   r	   Unionr   r2   r4   bytesr   r"   r,   Optionalr1   r8   r5   r9   r?   rB   rH   ListAnyrO   rP   r   r   r   r   <module>   sd   4	 A 