U
    [eD                     @   sP   d dl mZ dZd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )    )
InvalidTag   c                 C   sr   ddl m}m}m} t| |r"dS t| |rFdt| jd dS t| |sTt	dt| jd dS d S )Nr   )AESCCMAESGCMChaCha20Poly1305s   chacha20-poly1305z
aes-{}-ccm   asciiz
aes-{}-gcm)
+cryptography.hazmat.primitives.ciphers.aeadr   r   r   
isinstanceformatlen_keyencodeAssertionError)cipherr   r   r    r   k/var/www/html/services/stratfitenv/lib/python3.8/site-packages/cryptography/hazmat/backends/openssl/aead.py_aead_cipher_name   s    

r   c              
   C   st  | j |}| || jjk | 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| 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)_libZEVP_get_cipherbynameopenssl_assert_ffiNULLZEVP_CIPHER_CTX_newgcZEVP_CIPHER_CTX_freeZEVP_CipherInit_exint_ENCRYPTZEVP_CIPHER_CTX_set_key_lengthr   EVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLEN_DECRYPTZEVP_CTRL_AEAD_SET_TAGendswithZfrom_buffer)backendcipher_namekeynoncetagZtag_lenZ	operationZ
evp_cipherctxresZ	nonce_ptrZkey_ptrr   r   r   _aead_setup   sd    

      
r%   c                 C   s:   | j d}| j|| j j|| j j|}| |dk d S Nint *r   )r   newr   EVP_CipherUpdater   r   )r   r#   data_lenZintptrr$   r   r   r   _set_lengthM   s        r+   c                 C   s:   | j d}| j|| j j||t|}| |dk d S r&   )r   r(   r   r)   r   r   r   )r   r#   associated_dataoutlenr$   r   r   r   _process_aadU   s        r.   c                 C   s^   | j d}| j dt|}| j||||t|}| |dk | j ||d d d  S )Nr'   unsigned char[]r   )r   r(   r   r   r)   r   buffer)r   r#   datar-   bufr$   r   r   r   _process_data]   s
    r3   c                 C   s   ddl m} t|}t| ||j|d |t}t||rDt| |t| t	| || t
| ||}	| jd}
| j|| jj|
}| |dk | |
d dk | jd|}| j|| jj||}| |dk | j|d d  }|	| S )Nr   r   r'   r/   )r	   r   r   r%   r   r   r
   r+   r   r.   r3   r   r(   r   EVP_CipherFinal_exr   r   r   ZEVP_CTRL_AEAD_GET_TAGr0   )r   r   r!   r1   r,   
tag_lengthr   r   r#   processed_datar-   r$   Ztag_bufr"   r   r   r   _encrypte   s:          
   r8   c                 C   s2  ddl m} t||k rt|| d  }|d |  }t|}t| ||j|||t}	t||rpt	| |	t| t
| |	| t||r| jd}
| jdt|}| j|	||
|t|}|dkr|   t| j||
d d d  }nBt| |	|}| jd}
| j|	| jj|
}|dkr.|   t|S )Nr   r4   r'   r/   r   )r	   r   r   r   r   r%   r   r   r
   r+   r.   r   r(   r   r)   Z_consume_errorsr0   r3   r5   r   )r   r   r!   r1   r,   r6   r   r"   r   r#   r-   r2   r$   r7   r   r   r   _decrypt   sB          


r9   N)Zcryptography.exceptionsr   r   r   r   r%   r+   r.   r3   r8   r9   r   r   r   r   <module>   s   0