a
    ϏPf                     @  sV  d dl mZ d dlZd dlmZ ejrPd dlmZ d dlm	Z	m
Z
 eje	e
f Zdddd	d
dZddddddddddZddddddddddZdZd ZdddddZdddddZddddddddddZddd d!d"Zdddd#d$d%Zdddd&d'd(Zdddd)d*d+Zddddddddd,d-Zddddddddd.d/ZdS )0    )annotationsN)
InvalidTag)BackendAESCCMAESGCMr   
_AEADTypesbool)backendcipherreturnc                 C  s   t |}| j|| jjkS N)_evp_cipher_cipher_name_libEVP_get_cipherbyname_ffiNULL)r
   r   cipher_name r   j/var/www/html/python-backend/venv/lib/python3.9/site-packages/cryptography/hazmat/backends/openssl/aead.py_aead_cipher_supported   s    r   byteszlist[bytes]int)r
   r   noncedataassociated_data
tag_lengthr   c                 C  s   t | |||||S r   )_evp_cipher_encryptr
   r   r   r   r   r   r   r   r   _encrypt   s    r   c                 C  s   t | |||||S r   )_evp_cipher_decryptr   r   r   r   _decrypt(   s    r!      )r   r   c                 C  sd   ddl m}m} t| |r6dt| jd  ddS t| |sDJ dt| jd  ddS d S )Nr   r   zaes-   z-ccmasciiz-gcm)+cryptography.hazmat.primitives.ciphers.aeadr   r   
isinstancelen_keyencode)r   r   r   r   r   r   r   9   s
    
r   )r   r
   c                 C  s"   |j | }|||jjk |S r   )r   r   openssl_assertr   r   )r   r
   
evp_cipherr   r   r   _evp_cipherF   s    r,   zbytes | None)r
   r   keyr   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   ZEVP_CIPHER_CTX_newr   gcZEVP_CIPHER_CTX_freeZEVP_CipherInit_exr   r   _ENCRYPTr*   EVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLENr'   _DECRYPT_evp_cipher_set_tagendswithEVP_CTRL_AEAD_SET_TAGfrom_buffer)r
   r   r-   r   r.   r/   r0   r+   ctxresZ	nonce_ptrZkey_ptrr   r   r   _evp_cipher_aead_setupL   sT    	




r;   None)r.   r   c                 C  s8   | j |}| j|| jjt||}| |dk d S )Nr   )r   r8   r   r3   r7   r'   r*   )r
   r9   r.   Ztag_ptrr:   r   r   r   r5      s
    r5   )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
   r9   r=   Zintptrr:   r   r   r   _evp_cipher_set_length   s
    rB   )r
   r   r   c                 C  sF   | j d}| j |}| j|| j j||t|}| |dk d S r>   )r   r@   r8   r   rA   r   r'   r*   )r
   r9   r   outlenZ
a_data_ptrr:   r   r   r   _evp_cipher_process_aad   s    rD   )r
   r   r   c                 C  sj   | j d}| j dt|}| j |}| j||||t|}| |dk | j ||d d d  S )Nr?   unsigned char[]r   )r   r@   r'   r8   r   rA   r*   buffer)r
   r9   r   rC   bufZdata_ptrr:   r   r   r   _evp_cipher_process_data   s    rH   c                 C  s
  ddl m} t|}t| ||j|d |t}t||rDt| |t| |D ]}	t	| ||	 qHt
| ||}
| jd}| jdd}| j|||}| |dk |
| j||d d d  7 }
| jd|}| j|| jj||}| |dk | j|d d  }|
| S )Nr   r   r?   rE      )r%   r   r   r;   r(   r2   r&   rB   r'   rD   rH   r   r@   r   EVP_CipherFinal_exr*   rF   r3   ZEVP_CTRL_AEAD_GET_TAG)r
   r   r   r   r   r   r   r   r9   adprocessed_datarC   rG   r:   Ztag_bufr.   r   r   r   r      s8    
r   c                 C  sr  ddl m} t||k rt|| d  }|d |  }t|}t| ||j|||t}	t||rpt	| |	t| |D ]}
t
| |	|
 qtt||r| jd}| jdt|}| j|}| j|	|||t|}|dkr|   t| j||d d d  }njt| |	|}| jd}| jdd}| j|	||}|| j||d d d  7 }|dkrn|   t|S )Nr   rI   r?   rE   r"   rJ   )r%   r   r'   r   r   r;   r(   r4   r&   rB   rD   r   r@   r8   r   rA   Z_consume_errorsrF   rH   rK   )r
   r   r   r   r   r   r   r.   r   r9   rL   rC   rG   Zd_ptrr:   rM   r   r   r   r       sJ    

r    )
__future__r   typingZcryptography.exceptionsr   TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r%   r   r   Unionr   r   r   r!   r2   r4   r   r,   r;   r5   rB   rD   rH   r   r    r   r   r   r   <module>   s(   7	0