o
    CZh                      @  sF  d dl mZ d dlZd dlZd dlmZmZmZ d dlm	Z	 d dl
mZ ejr-d dlmZ G dd dejd	ZG d
d deejd	ZG dd deejd	ZG dd deejd	Zejdejej ddZG dd deje Zeejejejdejejf  ZG dd deZG dd deZ G dd de eZ!G dd de eZ"dS )    )annotationsN)AlreadyFinalizedAlreadyUpdatedNotYetFinalized)CipherAlgorithm)modes)_CipherContextc                   @  s<   e Zd ZejdddZejddd	Zejdd
dZdS )CipherContextdatabytesreturnc                 C     dS )zk
        Processes the provided bytes through the cipher and returns the results
        as bytes.
        N selfr
   r   r   b/var/www/html/lang_env/lib/python3.10/site-packages/cryptography/hazmat/primitives/ciphers/base.pyupdate       zCipherContext.updatebufintc                 C  r   )z
        Processes the provided bytes and writes the resulting data into the
        provided buffer. Returns the number of bytes written.
        Nr   r   r
   r   r   r   r   update_into    r   zCipherContext.update_intoc                 C  r   )zM
        Returns the results of processing the final block as bytes.
        Nr   r   r   r   r   finalize'   r   zCipherContext.finalizeNr
   r   r   r   r
   r   r   r   r   r   r   r   )__name__
__module____qualname__abcabstractmethodr   r   r   r   r   r   r   r	      s    r	   )	metaclassc                   @  s   e Zd ZejdddZdS )	AEADCipherContextr
   r   r   Nonec                 C  r   )z3
        Authenticates the provided bytes.
        Nr   r   r   r   r   authenticate_additional_data/   r   z.AEADCipherContext.authenticate_additional_dataNr
   r   r   r$   )r   r   r   r    r!   r%   r   r   r   r   r#   .       r#   c                   @  s   e Zd ZejdddZdS )AEADDecryptionContexttagr   r   c                 C  r   )z
        Returns the results of processing the final block as bytes and allows
        delayed passing of the authentication tag.
        Nr   )r   r)   r   r   r   finalize_with_tag7   r   z'AEADDecryptionContext.finalize_with_tagNr)   r   r   r   )r   r   r   r    r!   r*   r   r   r   r   r(   6   r'   r(   c                   @  s    e Zd ZeejdddZdS )AEADEncryptionContextr   r   c                 C  r   )zb
        Returns tag bytes. This is only available after encryption is
        finalized.
        Nr   r   r   r   r   r)   @   r   zAEADEncryptionContext.tagNr   )r   r   r   propertyr    r!   r)   r   r   r   r   r,   ?   s    r,   ModeT)bound	covariantc                   @  st   e Zd Z	d!d"d
dZejd#ddZejd$ddZdd Zejd%ddZejd$ddZdd Zd&dd ZdS )'CipherN	algorithmr   moder.   backend
typing.Anyr   r$   c                 C  sD   t |ts	td|d urt |tjsJ || || _|| _d S )Nz&Expected interface of CipherAlgorithm.)
isinstancer   	TypeErrorr   r.   Zvalidate_for_algorithmr2   r3   )r   r2   r3   r4   r   r   r   __init__O   s   


zCipher.__init__r   'Cipher[modes.ModeWithAuthenticationTag]r,   c                 C     d S Nr   r   r   r   r   	encryptora      zCipher.encryptor_CIPHER_TYPEr	   c                 C  r:   r;   r   r   r   r   r   r<   g   r=   c                 C  sL   t | jtjr| jjd urtdddlm} || j	| j}| j
|ddS )Nz0Authentication tag must be None when encrypting.r   r4   Tencrypt)r6   r3   r   ModeWithAuthenticationTagr)   
ValueError,cryptography.hazmat.backends.openssl.backendr4   Zcreate_symmetric_encryption_ctxr2   	_wrap_ctxr   r4   ctxr   r   r   r<   m   s   r(   c                 C  r:   r;   r   r   r   r   r   	decryptorz   r=   zCipher.decryptorc                 C  r:   r;   r   r   r   r   r   rH      r=   c                 C  s*   ddl m} || j| j}| j|ddS )Nr   r?   Fr@   )rD   r4   Zcreate_symmetric_decryption_ctxr2   r3   rE   rF   r   r   r   rH      s
   rG   _BackendCipherContextrA   bool=AEADEncryptionContext | AEADDecryptionContext | CipherContextc                 C  s*   t | jtjr|rt|S t|S t|S r;   )r6   r3   r   rB   _AEADEncryptionContext_AEADDecryptionContextr   )r   rG   rA   r   r   r   rE      s
   zCipher._wrap_ctxr;   )r2   r   r3   r.   r4   r5   r   r$   )r   r9   r   r,   )r   r>   r   r	   )r   r9   r   r(   )rG   rI   rA   rJ   r   rK   )	r   r   r   r8   typingoverloadr<   rH   rE   r   r   r   r   r1   N   s    r1   c                   @  s>   e Zd ZU ded< dddZdddZdddZdddZdS )r   _BackendCipherContext | None_ctxrG   rI   r   r$   c                 C  s
   || _ d S r;   )rQ   r   rG   r   r   r   r8      s   
z_CipherContext.__init__r
   r   c                 C  s   | j d u r	td| j |S NContext was already finalized.)rQ   r   r   r   r   r   r   r      s   
z_CipherContext.updater   r   c                 C  s    | j d u r	td| j ||S rS   )rQ   r   r   r   r   r   r   r      s   
z_CipherContext.update_intoc                 C  s&   | j d u r	td| j  }d | _ |S rS   )rQ   r   r   r   r   r   r   r      s
   

z_CipherContext.finalizeNrG   rI   r   r$   r   r   r   )r   r   r   __annotations__r8   r   r   r   r   r   r   r   r      s   
 


r   c                   @  sZ   e Zd ZU ded< ded< dd	d
ZdddZdddZdddZdddZd ddZ	dS )!_AEADCipherContextrP   rQ   zbytes | None_tagrG   rI   r   r$   c                 C  s"   || _ d| _d| _d | _d| _d S )Nr   F)rQ   _bytes_processed_aad_bytes_processedrX   _updatedrR   r   r   r   r8      s
   
z_AEADCipherContext.__init__	data_sizer   c                 C  sV   | j d u r	tdd| _|  j|7  _| j| j jjkr)td| j jj| j jjd S )NrT   Tz+{} has a maximum encrypted byte limit of {})	rQ   r   r[   rY   _modeZ_MAX_ENCRYPTED_BYTESrC   formatname)r   r\   r   r   r   _check_limit   s   
z_AEADCipherContext._check_limitr
   r   c                 C  s(   |  t| | jd usJ | j|S r;   )r`   lenrQ   r   r   r   r   r   r      s   z_AEADCipherContext.updater   c                 C  s*   |  t| | jd usJ | j||S r;   )r`   ra   rQ   r   r   r   r   r   r      s   z_AEADCipherContext.update_intoc                 C  s0   | j d u r	td| j  }| j j| _d | _ |S rS   )rQ   r   r   r)   rX   r   r   r   r   r      s   


z_AEADCipherContext.finalizec                 C  sn   | j d u 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 | d S )NrT   z'Update has been called on this context.z%{} has a maximum AAD byte limit of {})rQ   r   r[   r   rZ   ra   r]   Z_MAX_AAD_BYTESrC   r^   r_   r%   r   r   r   r   r%      s   
z/_AEADCipherContext.authenticate_additional_dataNrU   )r\   r   r   r$   r   r   r   r&   )
r   r   r   rV   r8   r`   r   r   r   r%   r   r   r   r   rW      s   
 




rW   c                   @  s   e Zd ZdddZdS )rM   r)   r   r   c                 C  sF   | j d u r	td| j jd urtd| j |}| j j| _d | _ |S )NrT   z^tag provided both in mode and in call with finalize_with_tag: tag should only be provided once)rQ   r   rX   rC   r*   r)   )r   r)   r
   r   r   r   r*      s   

z(_AEADDecryptionContext.finalize_with_tagNr+   )r   r   r   r*   r   r   r   r   rM      s    rM   c                   @  s   e Zd ZedddZdS )rL   r   r   c                 C  s&   | j d ur	td| jd usJ | jS )Nz4You must finalize encryption before getting the tag.)rQ   r   rX   r   r   r   r   r)   	  s   
z_AEADEncryptionContext.tagNr   )r   r   r   r-   r)   r   r   r   r   rL     s    rL   )#
__future__r   r    rN   Zcryptography.exceptionsr   r   r   Z/cryptography.hazmat.primitives._cipheralgorithmr   Z&cryptography.hazmat.primitives.ciphersr   TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.ciphersr   rI   ABCMetar	   r#   r(   r,   TypeVarOptionalr.   Genericr1   UnionZModeWithNonceZModeWithTweakZECBZModeWithInitializationVectorr>   rW   rM   rL   r   r   r   r   <module>   s<   	
L<