<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
ꅭh!                 @   s   d dl mZmZmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZ ejejejejejejejejG dd deZdS )	    )absolute_importdivisionprint_function)utils)
InvalidTagUnsupportedAlgorithm_Reasons)ciphers)modesc               @   sR   e Zd ZdZdZdZdd Zdd Zd	d
 Zdd Z	dd Z
dd ZejdZdS )_CipherContext   r         c             C   s  || _ || _|| _|| _d | _t| jtjr<| jjd | _	nd| _	| j j
j }| j jj|| j j
j}| j j}y|t|t|f }W n4 tk
r   tdj|j|r|jn|tjY nX || j ||}|| j jjkrdj|}	|d k	r|	dj|7 }	|	dj| j j 7 }	t|	tjt|tjr8| j jj|j}
njt|tjrX| j jj|j}
nJt|tjrx| j jj|j }
n*t|tjr| j jj|j }
n
| j jj}
| j j
j!||| j jj| j jj| j jj|}| j j"|dk | j j
j#|t$|j%}| j j"|dk t|tj&r| j j
j'|| j j
j(t$|
| j jj}| j j"|dk |j)d k	r| j j
j'|| j j
j*t$|j)|j)}| j j"|dk |j)| _| j j
j!|| j jj| j jj| j jj|j%|
|}| j j"|dk | j j
j+|d || _,d S )N   r   z6cipher {} in {} mode is not supported by this backend.zcipher {0.name} zin {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	   ZBlockCipherAlgorithmZ
block_size_block_size_bytes_libZEVP_CIPHER_CTX_new_ffigcZEVP_CIPHER_CTX_freeZ_cipher_registrytypeKeyErrorr   formatnamer   ZUNSUPPORTED_CIPHERNULLZopenssl_version_textr
   ZModeWithInitializationVectorfrom_bufferZinitialization_vectorZModeWithTweakZtweakZModeWithNonceZnonceZEVP_CipherInit_exopenssl_assertZEVP_CIPHER_CTX_set_key_lengthlenkeyGCMEVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLENtagEVP_CTRL_AEAD_SET_TAGZEVP_CIPHER_CTX_set_padding_ctx)selfZbackendZciphermodeZ	operationZctxregistryZadapterZ
evp_ciphermsgZiv_nonceres 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_intobytes)r'   databufnr,   r,   r-   updatez   s    z_CipherContext.updatec             C   s   t |}t ||| j d k r:tdjt || j d d}d}| jjjd}| jjj|dd}| jjj|}xh||kr|| }	|| }
t| j	|| }| jj
j| j|	||
|}| jj|dk ||7 }||d 7 }qrW |S )Nr   z1buffer must be at least {} bytes for this payloadr   zint *T)Zrequire_writable)r    r   
ValueErrorr   r   r   newr   min_MAX_CHUNK_SIZEr   EVP_CipherUpdater&   r   )r'   r2   r3   Ztotal_data_lenZdata_processedZ	total_outoutlenZ
baseoutbufZ	baseinbufZoutbufZinbufZinlenr+   r,   r,   r-   r0      s(    
z_CipherContext.update_intoc             C   sh  | j | jkr,t| jtjr,| jd kr,td| jj	j
d| j}| jj	j
d}| jjj| j||}|dkr| jj }| rt| jtjrt| jj|d j| jjj| jjj|d tdt| jtjo| j | jkr.| jj	j
d| j}| jjj| j| jjj| j|}| jj|dk | jj	j|d d  | _| jjj| j}| jj|dk | jj	j|d |d  S )Nz4Authentication tag must be provided when decrypting.zunsigned char[]zint *r   )errorszFThe length of the provided data is not a multiple of the block length.r   )r   _DECRYPTr   r   r
   ZModeWithAuthenticationTagr$   r6   r   r   r7   r   r   ZEVP_CipherFinal_exr&   Z_consume_errorsr"   r   r   Z_lib_reason_matchZERR_LIB_EVPZ'EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH_ENCRYPTr#   ZEVP_CTRL_AEAD_GET_TAGbufferr   ZEVP_CIPHER_CTX_cleanup)r'   r3   r;   r+   r<   Ztag_bufr,   r,   r-   finalize   sB    



z_CipherContext.finalizec             C   s`   t || jjk r"tdj| jj| jjj| j| jjj	t ||}| jj
|dk || _| j S )Nz.Authentication tag must be {} bytes or longer.r   )r    r   Z_min_tag_lengthr6   r   r   r   r#   r&   r%   r   r   r@   )r'   r$   r+   r,   r,   r-   finalize_with_tag   s    z _CipherContext.finalize_with_tagc             C   sN   | j jjd}| j jj| j| j jj|| j jj|t|}| j j	|dk d S )Nzint *r   )
r   r   r7   r   r:   r&   r   r   r    r   )r'   r2   r;   r+   r,   r,   r-   authenticate_additional_data   s    
z+_CipherContext.authenticate_additional_datar   Ni   @i?)__name__
__module____qualname__r>   r=   r9   r.   r5   r0   r@   rA   rB   r   Zread_only_propertyr$   r,   r,   r,   r-   r      s   d3r   N)Z
__future__r   r   r   Zcryptographyr   Zcryptography.exceptionsr   r   r   Zcryptography.hazmat.primitivesr	   Z&cryptography.hazmat.primitives.ciphersr
   Zregister_interfaceZCipherContextZAEADCipherContextZAEADEncryptionContextZAEADDecryptionContextobjectr   r,   r,   r,   r-   <module>   s   


