3 ꅭh! @ s d dl mZmZmZ d dlmZ d dlmZmZm Z d dl mZ d dlm Z ejejejejejejejejG dd deZdS ) )absolute_importdivisionprint_function)utils) InvalidTagUnsupportedAlgorithm_Reasons)ciphers)modesc @ sR e Zd ZdZdZdZdd Zdd Zd d Zdd Z d d Z dd Zej dZdS )_CipherContext r c C s || _ || _|| _|| _d | _t| jtjr<| jjd | _ nd| _ | j j j }| j jj || j j j}| j j}y|t|t|f }W n4 tk r tdj|j|r|jn|tjY nX || j ||}|| j jjkrdj|} |d k r| dj|7 } | dj| j j 7 } t| tjt|tjr8| j jj|j} njt|tjrX| j jj|j} nJt|tjrx| j jj|j } n*t|tjr| j jj|j } n | j jj} | j j j!||| j jj| j jj| j jj|}| j j"|dk | j j j#|t$|j%}| j j"|dk t|tj&r| j j j'|| j j j(t$| | j jj}| j j"|dk |j)d k r| j j j'|| j j j*t$|j)|j)}| j j"|dk |j)| _| j j j!|| j jj| j jj| j jj|j%| |}| j j"|dk | j j j+|d || _,d S )N r z6cipher {} in {} mode is not supported by this backend.zcipher {0.name} zin {0.name} mode z_is not supported by this backend (Your version of OpenSSL may be too old. Current version: {}.)r )-_backendZ_cipher_mode _operation_tag isinstancer ZBlockCipherAlgorithmZ block_size_block_size_bytes_libZEVP_CIPHER_CTX_new_ffigcZEVP_CIPHER_CTX_freeZ_cipher_registrytypeKeyErrorr formatnamer ZUNSUPPORTED_CIPHERNULLZopenssl_version_textr ZModeWithInitializationVectorfrom_bufferZinitialization_vectorZ ModeWithTweakZtweakZ ModeWithNonceZnonceZEVP_CipherInit_exopenssl_assertZEVP_CIPHER_CTX_set_key_lengthlenkeyGCMEVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLENtagEVP_CTRL_AEAD_SET_TAGZEVP_CIPHER_CTX_set_padding_ctx)selfZbackendZciphermodeZ operationZctxregistryZadapterZ evp_ciphermsgZiv_nonceres r, /usr/lib64/python3.6/ciphers.py__init__ s z_CipherContext.__init__c C s2 t t|| j d }| j||}t|d | S )Nr ) bytearrayr r update_intobytes)r' databufnr, r, r- updatez s z_CipherContext.updatec C s t |}t ||| j d k r:tdjt || j d d}d}| jjjd}| jjj|dd}| jjj|}xh||kr|| } || } t| j || }| jj j| j| || |}| jj |dk ||7 }||d 7 }qrW |S )Nr z1buffer must be at least {} bytes for this payloadr zint *T)Zrequire_writable)r r ValueErrorr r r newr min_MAX_CHUNK_SIZEr EVP_CipherUpdater&