3 l_ @ sd d dl mZmZmZ d dlmZ dZd Zdd Zdd Z dd Z d d Zdd Zdd Z dd ZdS ) )absolute_importdivisionprint_function) InvalidTag c C sd ddl m}m}m} t| |r"dS t| |rFdjt| jd jdS djt| jd jdS d S )Nr )AESCCMAESGCMChaCha20Poly1305s chacha20-poly1305z aes-{}-ccm asciiz aes-{}-gcm) +cryptography.hazmat.primitives.ciphers.aeadr r r isinstanceformatlen_keyencode)cipherr r r r /usr/lib64/python3.6/aead.py_aead_cipher_name s r c C st | j j|}| j|| jjk | j j }| jj|| j j}| j j||| jj| jj| jjt |t k} | j| dk | j j|t|} | j| dk | j j || j jt|| jj} | j| dk |tkr| j j || j jt||} | j| dk n4|jdr$| j j || j j|| jj} | j| dk | jj|} | jj|}| j j|| jj| jj|| t |t k} | j| dk |S )Nr s -ccm)_libZEVP_get_cipherbynameopenssl_assert_ffiNULLZEVP_CIPHER_CTX_newgcZEVP_CIPHER_CTX_freeZEVP_CipherInit_exint_ENCRYPTZEVP_CIPHER_CTX_set_key_lengthr EVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLEN_DECRYPTZEVP_CTRL_AEAD_SET_TAGendswithZfrom_buffer)backendcipher_namekeynoncetagZtag_lenZ operationZ evp_cipherctxresZ nonce_ptrZkey_ptrr r r _aead_setup sN r' c C s: | j jd}| jj|| j j|| j j|}| j|dk d S )Nzint *r )r newr EVP_CipherUpdater r )r r% Zdata_lenZintptrr&