3 l�_��@sdddlmZmZmZddlmZdZdZdd�Zdd�Z dd �Z d d �Z d d �Z dd�Z dd�ZdS)�)�absolute_import�division�print_function)� InvalidTag�cCsrddlm}m}m}t||�r"dSt||�rFdjt|j�d�jd�St||�sTt �djt|j�d�jd�SdS)Nr)�AESCCM�AESGCM�ChaCha20Poly1305schacha20-poly1305z aes-{}-ccm��asciiz aes-{}-gcm) �+cryptography.hazmat.primitives.ciphers.aeadrrr � isinstance�format�len�_key�encode�AssertionError)�cipherrrr �r�/usr/lib64/python3.6/aead.py�_aead_cipher_names  rc Cst|jj|�}|j||jjk�|jj�}|jj||jj�}|jj|||jj|jj|jjt |t k��} |j| dk�|jj |t |��} |j| dk�|jj ||jjt |�|jj�} |j| dk�|tkr�|jj ||jjt |�|�} |j| dk�n4|jd��r$|jj ||jj||jj�} |j| dk�|jj|�} |jj|�} |jj||jj|jj| | t |t k��} |j| dk�|S)Nrs-ccm)�_libZEVP_get_cipherbyname�openssl_assert�_ffi�NULLZEVP_CIPHER_CTX_new�gcZEVP_CIPHER_CTX_freeZEVP_CipherInit_ex�int�_ENCRYPTZEVP_CIPHER_CTX_set_key_lengthr�EVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLEN�_DECRYPTZEVP_CTRL_AEAD_SET_TAG�endswithZ from_buffer) �backend� cipher_name�key�nonce�tagZtag_lenZ operationZ evp_cipher�ctx�resZ nonce_ptrZkey_ptrrrr� _aead_setupsN      r(cCs:|jjd�}|jj||jj||jj|�}|j|dk�dS)Nzint *r)r�newr�EVP_CipherUpdaterr)r!r&Zdata_lenZintptrr'rrr� _set_lengthNs r+cCs:|jjd�}|jj||jj||t|��}|j|dk�dS)Nzint *r)rr)rr*rrr)r!r&�associated_data�outlenr'rrr� _process_aadVs r.cCs^|jjd�}|jjdt|��}|jj||||t|��}|j|dk�|jj||d�dd�S)Nzint *zunsigned char[]r)rr)rrr*r�buffer)r!r&�datar-�bufr'rrr� _process_data^s  r2cCs�ddlm}t|�}t|||j|d|t�}t||�rDt||t|��t |||�t |||�} |j j d�} |j j||j j| �} |j| dk�|j| ddk�|j j d|�} |j j||j j|| �} |j| dk�|j j| �dd�} | | S)Nr)rzint *zunsigned char[])r rrr(rrr r+rr.r2rr)r�EVP_CipherFinal_exrrrZEVP_CTRL_AEAD_GET_TAGr/)r!rr$r0r,� tag_lengthrr"r&�processed_datar-r'Ztag_bufr%rrr�_encryptfs$     r6cCs2ddlm}t|�|krt�|| d�}|d| �}t|�}t|||j|||t�} t||�rpt || t|��t || |�t||�r�|j j d�} |j j dt|��} |j j| | | |t|��} | dkr�|j�t�|j j| | d�dd�} nBt|| |�} |j j d�} |j j| |j j| �} | dk�r.|j�t�| S)Nr)rzint *zunsigned char[]r)r rrrrr(rrr r+r.rr)rr*Z_consume_errorsr/r2r3r)r!rr$r0r,r4rr%r"r&r-r1r'r5rrr�_decrypt�s4         r7N)Z __future__rrrZcryptography.exceptionsrrrrr(r+r.r2r6r7rrrr�s 0