o
    㕢h                     @  s   d dl mZ d dlZd dlmZ ejr(d dlmZ d dlm	Z	m
Z
 eje	e
f Zd4ddZd5ddZd5ddZdZd Zd6ddZd7ddZd8d$d%Zd9d'd(Zd:d*d+Zd;d,d-Zd<d.d/Zd5d0d1Zd5d2d3ZdS )=    )annotationsN)
InvalidTag)BackendAESCCMAESGCMbackendr   cipher
_AEADTypesreturnboolc                 C  s   t |}| j|| jjkS N)_evp_cipher_cipher_name_libEVP_get_cipherbyname_ffiNULL)r   r	   cipher_name r   a/var/www/html/zoom/venv/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/aead.py_aead_cipher_supported   s   r   noncebytesdataassociated_datalist[bytes]
tag_lengthintc                 C     t | |||||S r   )_evp_cipher_encryptr   r	   r   r   r   r   r   r   r   _encrypt      r!   c                 C  r   r   )_evp_cipher_decryptr    r   r   r   _decrypt(   r"   r$      c                 C  s`   ddl m}m} t| |rdt| jd  ddS t| |s"J dt| jd  d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   c                 C  s"   |j | }|||jjk |S r   )r   r   openssl_assertr   r   )r   r   
evp_cipherr   r   r   _evp_cipherF   s   r/   keytagbytes | None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rV|d usOJ t| || n|dro| 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   EVP_CIPHER_CTX_newr   gcEVP_CIPHER_CTX_freeEVP_CipherInit_exr   r   _ENCRYPTr-   EVP_CIPHER_CTX_ctrlEVP_CTRL_AEAD_SET_IVLENr*   _DECRYPT_evp_cipher_set_tagendswithEVP_CTRL_AEAD_SET_TAGfrom_buffer)r   r   r0   r   r1   r3   r4   r.   ctxres	nonce_ptrkey_ptrr   r   r   _evp_cipher_aead_setupL   sT   
	



rE   Nonec                 C  s8   | j |}| j|| jjt||}| |dk d S )Nr   )r   r@   r   r:   r?   r*   r-   )r   rA   r1   tag_ptrrB   r   r   r   r=      s
   r=   data_lenc                 C  s:   | j d}| j|| j j|| j j|}| |dk d S Nint *r   )r   newr   EVP_CipherUpdater   r-   )r   rA   rH   intptrrB   r   r   r   _evp_cipher_set_length   s
   rN   c                 C  sF   | j d}| j |}| j|| j j||t|}| |dk d S rI   )r   rK   r@   r   rL   r   r*   r-   )r   rA   r   outlen
a_data_ptrrB   r   r   r   _evp_cipher_process_aad   s   rQ   c                 C  sj   | j d}| j dt|}| j |}| j||||t|}| |dk | j ||d d d  S )NrJ   unsigned char[]r   )r   rK   r*   r@   r   rL   r-   buffer)r   rA   r   rO   bufdata_ptrrB   r   r   r   _evp_cipher_process_data   s   rV   c                 C  s
  ddl m} t|}t| ||j|d |t}t||r"t| |t| |D ]}	t	| ||	 q$t
| ||}
| 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   rJ   rR      )r(   r   r   rE   r+   r9   r)   rN   r*   rQ   rV   r   rK   r   EVP_CipherFinal_exr-   rS   r:   EVP_CTRL_AEAD_GET_TAG)r   r	   r   r   r   r   r   r   rA   adprocessed_datarO   rT   rB   tag_bufr1   r   r   r   r      s8   
r   c                 C  sp  ddl m} t||k rt|| d  }|d |  }t|}t| ||j|||t}	t||r8t	| |	t| |D ]}
t
| |	|
 q:t||r| jd}| jdt|}| j|}| j|	|||t|}|dkrs|   t| j||d d d  }|S t| |	|}| jd}| jdd}| j|	||}|| j||d d d  7 }|dkr|   t|S )Nr   rW   rJ   rR   r%   rX   )r(   r   r*   r   r   rE   r+   r<   r)   rN   rQ   r   rK   r@   r   rL   _consume_errorsrS   rV   rY   )r   r	   r   r   r   r   r   r1   r   rA   r[   rO   rT   d_ptrrB   r\   r   r   r   r#      sL   

r#   )r   r   r	   r
   r   r   )r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   )r	   r
   r   r   )r   r   r   r   )r   r   r   r   r0   r   r   r   r1   r2   r3   r   r4   r   )r1   r   r   rF   )r   r   rH   r   r   rF   )r   r   r   r   r   rF   )r   r   r   r   r   r   )
__future__r   typingcryptography.exceptionsr   TYPE_CHECKING,cryptography.hazmat.backends.openssl.backendr   r(   r   r   Unionr
   r   r!   r$   r9   r<   r   r/   rE   r=   rN   rQ   rV   r   r#   r   r   r   r   <module>   s*   






7



	0