<!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
l_U                 @   s  d dl mZmZmZ d dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZmZ d dlmZ d dlmZ d dlmZ ejejG dd	 d	eZejejG d
d deZejejG dd deZejejG dd deZejejG dd deZejejG dd deZG dd deZejeG dd deZejeejeejeG dd deZ ejeG dd de Z!dS )    )absolute_importdivisionprint_functionN)utils)AlreadyFinalizedAlreadyUpdatedNotYetFinalizedUnsupportedAlgorithm_Reasons)_get_backend)CipherBackend)modesc               @   s(   e Zd Zejdd Zejdd ZdS )CipherAlgorithmc             C   s   dS )zE
        A string naming this mode (e.g. "AES", "Camellia").
        N )selfr   r   /usr/lib64/python3.6/base.pyname   s    zCipherAlgorithm.namec             C   s   dS )zW
        The size of the key being used as an integer in bits (e.g. 128, 256).
        Nr   )r   r   r   r   key_size    s    zCipherAlgorithm.key_sizeN)__name__
__module____qualname__abcabstractpropertyr   r   r   r   r   r   r      s   r   c               @   s   e Zd Zejdd ZdS )BlockCipherAlgorithmc             C   s   dS )zK
        The size of a block as an integer in bits (e.g. 64, 128).
        Nr   )r   r   r   r   
block_size)   s    zBlockCipherAlgorithm.block_sizeN)r   r   r   r   r   r   r   r   r   r   r   '   s   r   c               @   s6   e Zd Zejdd Zejdd Zejdd ZdS )CipherContextc             C   s   dS )zk
        Processes the provided bytes through the cipher and returns the results
        as bytes.
        Nr   )r   datar   r   r   update2   s    zCipherContext.updatec             C   s   dS )z
        Processes the provided bytes and writes the resulting data into the
        provided buffer. Returns the number of bytes written.
        Nr   )r   r   bufr   r   r   update_into9   s    zCipherContext.update_intoc             C   s   dS )zM
        Returns the results of processing the final block as bytes.
        Nr   )r   r   r   r   finalize@   s    zCipherContext.finalizeN)r   r   r   r   abstractmethodr   r   r    r   r   r   r   r   0   s   r   c               @   s   e Zd Zejdd ZdS )AEADCipherContextc             C   s   dS )z3
        Authenticates the provided bytes.
        Nr   )r   r   r   r   r   authenticate_additional_dataI   s    z.AEADCipherContext.authenticate_additional_dataN)r   r   r   r   r!   r#   r   r   r   r   r"   G   s   r"   c               @   s   e Zd Zejdd ZdS )AEADDecryptionContextc             C   s   dS )z
        Returns the results of processing the final block as bytes and allows
        delayed passing of the authentication tag.
        Nr   )r   tagr   r   r   finalize_with_tagR   s    z'AEADDecryptionContext.finalize_with_tagN)r   r   r   r   r!   r&   r   r   r   r   r$   P   s   r$   c               @   s   e Zd Zejdd ZdS )AEADEncryptionContextc             C   s   dS )zb
        Returns tag bytes. This is only available after encryption is
        finalized.
        Nr   )r   r   r   r   r%   \   s    zAEADEncryptionContext.tagN)r   r   r   r   r   r%   r   r   r   r   r'   Z   s   r'   c               @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )CipherNc             C   sX   t |}t|tstdtjt|ts0td|d k	rB|j| || _	|| _
|| _d S )Nz0Backend object does not implement CipherBackend.z&Expected interface of CipherAlgorithm.)r   
isinstancer   r	   r
   ZBACKEND_MISSING_INTERFACEr   	TypeErrorZvalidate_for_algorithm	algorithmmode_backend)r   r+   r,   Zbackendr   r   r   __init__e   s    


zCipher.__init__c             C   sB   t | jtjr"| jjd k	r"td| jj| j| j}| j	|ddS )Nz0Authentication tag must be None when encrypting.T)encrypt)
r)   r,   r   ModeWithAuthenticationTagr%   
ValueErrorr-   Zcreate_symmetric_encryption_ctxr+   	_wrap_ctx)r   ctxr   r   r   	encryptorw   s    zCipher.encryptorc             C   s    | j j| j| j}| j|ddS )NF)r/   )r-   Zcreate_symmetric_decryption_ctxr+   r,   r2   )r   r3   r   r   r   	decryptor   s    zCipher.decryptorc             C   s0   t | jtjr$|rt|S t|S nt|S d S )N)r)   r,   r   r0   _AEADEncryptionContext_AEADCipherContext_CipherContext)r   r3   r/   r   r   r   r2      s
    
zCipher._wrap_ctx)N)r   r   r   r.   r4   r5   r2   r   r   r   r   r(   d   s   
r(   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r8   c             C   s
   || _ d S )N)_ctx)r   r3   r   r   r   r.      s    z_CipherContext.__init__c             C   s   | j d krtd| j j|S )NzContext was already finalized.)r9   r   r   )r   r   r   r   r   r      s    
z_CipherContext.updatec             C   s    | j d krtd| j j||S )NzContext was already finalized.)r9   r   r   )r   r   r   r   r   r   r      s    
z_CipherContext.update_intoc             C   s&   | j d krtd| j j }d | _ |S )NzContext was already finalized.)r9   r   r    )r   r   r   r   r   r       s
    

z_CipherContext.finalizeN)r   r   r   r.   r   r   r    r   r   r   r   r8      s   r8   c               @   sD   e 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 )r7   c             C   s"   || _ d| _d| _d | _d| _d S )Nr   F)r9   _bytes_processed_aad_bytes_processed_tag_updated)r   r3   r   r   r   r.      s
    z_AEADCipherContext.__init__c             C   sV   | j d krtdd| _|  j|7  _| j| j jjkrRtdj| j jj| j jjd S )NzContext was already finalized.Tz+{} has a maximum encrypted byte limit of {})	r9   r   r=   r:   _modeZ_MAX_ENCRYPTED_BYTESr1   formatr   )r   Z	data_sizer   r   r   _check_limit   s    
z_AEADCipherContext._check_limitc             C   s   | j t| | jj|S )N)r@   lenr9   r   )r   r   r   r   r   r      s    z_AEADCipherContext.updatec             C   s   | j t| | jj||S )N)r@   rA   r9   r   )r   r   r   r   r   r   r      s    z_AEADCipherContext.update_intoc             C   s0   | j d krtd| j j }| j j| _d | _ |S )NzContext was already finalized.)r9   r   r    r%   r<   )r   r   r   r   r   r       s    


z_AEADCipherContext.finalizec             C   s2   | j d krtd| j j|}| j j| _d | _ |S )NzContext was already finalized.)r9   r   r&   r%   r<   )r   r%   r   r   r   r   r&      s    

z$_AEADCipherContext.finalize_with_tagc             C   sn   | j d krtd| jr td|  jt|7  _| j| j jjkr^tdj	| j jj
| j jj| j j| d S )NzContext was already finalized.z'Update has been called on this context.z%{} has a maximum AAD byte limit of {})r9   r   r=   r   r;   rA   r>   Z_MAX_AAD_BYTESr1   r?   r   r#   )r   r   r   r   r   r#      s    
z/_AEADCipherContext.authenticate_additional_dataN)
r   r   r   r.   r@   r   r   r    r&   r#   r   r   r   r   r7      s   r7   c               @   s   e Zd Zedd ZdS )r6   c             C   s   | j d k	rtd| jS )Nz4You must finalize encryption before getting the tag.)r9   r   r<   )r   r   r   r   r%      s    
z_AEADEncryptionContext.tagN)r   r   r   propertyr%   r   r   r   r   r6      s   r6   )"Z
__future__r   r   r   r   ZsixZcryptographyr   Zcryptography.exceptionsr   r   r   r	   r
   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   Z&cryptography.hazmat.primitives.ciphersr   Zadd_metaclassABCMetaobjectr   r   r   r"   r$   r'   r(   Zregister_interfacer8   r7   r6   r   r   r   r   <module>   s8   		.=