B
    uf                 @  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   k/home/ankuromar296_gmail_com/myenv/lib/python3.7/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 )N)_evp_cipher_encrypt)r	   r
   r   r   r   r   r   r   r   _encrypt   s    r   c             C  s   t | |||||S )N)_evp_cipher_decrypt)r	   r
   r   r   r   r   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| |sDtdt| jd  ddS d S )Nr   )r   r   zaes-   z-ccmasciiz-gcm)+cryptography.hazmat.primitives.ciphers.aeadr   r   
isinstancelen_keyencodeAssertionError)r
   r   r   r   r   r   r   9   s
    
r   )r   r	   c             C  s"   |j | }|||jjk |S )N)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 k	st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$   _DECRYPTr'   _evp_cipher_set_tagendswithEVP_CTRL_AEAD_SET_TAGfrom_buffer)r	   r   r+   r   r,   r-   r.   r)   ctxresZ	nonce_ptrZkey_ptrr   r   r   _evp_cipher_aead_setupL   sL    	




r9   None)r,   r   c             C  s8   | j |}| j|| jjt||}| |dk d S )Nr   )r   r6   r   r1   r5   r$   r(   )r	   r7   r,   Ztag_ptrr8   r   r   r   r3      s    r3   )r	   data_lenr   c             C  s:   | j d}| j|| j j|| j j|}| |dk d S )Nzint *r   )r   newr   EVP_CipherUpdater   r(   )r	   r7   r;   Zintptrr8   r   r   r   _evp_cipher_set_length   s    r>   )r	   r   r   c             C  sF   | j d}| j |}| j|| j j||t|}| |dk d S )Nzint *r   )r   r<   r6   r   r=   r   r$   r(   )r	   r7   r   outlenZ
a_data_ptrr8   r   r   r   _evp_cipher_process_aad   s
    r@   )r	   r   r   c             C  sj   | j d}| j dt|}| j |}| j||||t|}| |dk | j ||d d d  S )Nzint *zunsigned char[]r   )r   r<   r$   r6   r   r=   r(   buffer)r	   r7   r   r?   bufZdata_ptrr8   r   r   r   _evp_cipher_process_data   s    rC   c             C  s  ddl m} t|}t| ||j|d |t}t||rDt| |t| x|D ]}	t	| ||	 qJW 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   zint *zunsigned char[]   )r"   r   r   r9   r%   r0   r#   r>   r$   r@   rC   r   r<   r   EVP_CipherFinal_exr(   rA   r1   ZEVP_CTRL_AEAD_GET_TAG)r	   r
   r   r   r   r   r   r   r7   adprocessed_datar?   rB   r8   Ztag_bufr,   r   r   r   r      s4    

r   c             C  sv  ddl m} t||k rt|| d  }|d |  }t|}t| ||j|||t}	t||rpt	| |	t| x|D ]}
t
| |	|
 qvW t||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rr|   t|S )Nr   )r   zint *zunsigned char[]r   rD   )r"   r   r$   r   r   r9   r%   r2   r#   r>   r@   r   r<   r6   r   r=   Z_consume_errorsrA   rC   rE   )r	   r
   r   r   r   r   r   r,   r   r7   rF   r?   rB   Zd_ptrr8   rG   r   r   r   r      sH    


r   )
__future__r   typingZcryptography.exceptionsr   TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r"   r   r   Unionr   r   r   r   r0   r2   r   r*   r9   r3   r>   r@   rC   r   r   r   r   r   r   <module>   s(   7	0