U
    ÒZj;   ã                   @   s:  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
rNd 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 )é    N)ÚAlreadyFinalizedÚAlreadyUpdatedÚNotYetFinalized)ÚCipherAlgorithm)Úmodes)Ú_CipherContextc                   @   sN   e Zd Zejeedœdd„ƒZejeeedœdd„ƒZejedœdd	„ƒZ	d
S )ÚCipherContext©ÚdataÚreturnc                 C   s   dS )zk
        Processes the provided bytes through the cipher and returns the results
        as bytes.
        N© ©Úselfr
   r   r   ún/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/ciphers/base.pyÚupdate   s    zCipherContext.update©r
   Úbufr   c                 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
   r   r   r   r   Úupdate_into    s    zCipherContext.update_into©r   c                 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)
Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodÚbytesr   Úintr   r   r   r   r   r   r      s   r   )Ú	metaclassc                   @   s"   e Zd Zejeddœdd„ƒZdS )ÚAEADCipherContextNr	   c                 C   s   dS )z3
        Authenticates the provided bytes.
        Nr   r   r   r   r   Úauthenticate_additional_data/   s    z.AEADCipherContext.authenticate_additional_data)r   r   r   r   r   r   r!   r   r   r   r   r    .   s   r    c                   @   s"   e Zd Zejeedœdd„ƒZdS )ÚAEADDecryptionContext©Útagr   c                 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   r$   r   r   r   Úfinalize_with_tag7   s    z'AEADDecryptionContext.finalize_with_tagN)r   r   r   r   r   r   r%   r   r   r   r   r"   6   s   r"   c                   @   s    e Zd Zejedœdd„ƒZdS )ÚAEADEncryptionContextr   c                 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   Úabstractpropertyr   r$   r   r   r   r   r&   ?   s   r&   ÚModeT)ÚboundÚ	covariantc                   @   s¨   e Zd Zdeeejdœdd„Zejde	dœdd„ƒZ
ejd	edœd
d„ƒZ
dd„ Z
ejdedœdd„ƒZejd	edœdd„ƒZdd„ Zdeeje	eef dœdd„ZdS )ÚCipherN)Ú	algorithmÚmodeÚbackendc                 C   sD   t |tƒstdƒ‚|d k	r4t |tjƒs*t‚| |¡ || _|| _d S )Nz&Expected interface of CipherAlgorithm.)	Ú
isinstancer   Ú	TypeErrorr   r(   ÚAssertionErrorZvalidate_for_algorithmr,   r-   )r   r,   r-   r.   r   r   r   Ú__init__N   s    

zCipher.__init__z'Cipher[modes.ModeWithAuthenticationTag])r   r   c                 C   s   d S ©Nr   r   r   r   r   Ú	encryptora   s    zCipher.encryptorÚ_CIPHER_TYPEc                 C   s   d S r3   r   r   r   r   r   r4   g   s    c                 C   sL   t | jtjƒr"| jjd k	r"tdƒ‚ddlm} | | j	| j¡}| j
|dd�S )Nz0Authentication tag must be None when encrypting.r   ©r.   T©Úencrypt)r/   r-   r   ÚModeWithAuthenticationTagr$   Ú
ValueErrorÚ,cryptography.hazmat.backends.openssl.backendr.   Zcreate_symmetric_encryption_ctxr,   Ú	_wrap_ctx©r   r.   Úctxr   r   r   r4   m   s    ÿ ÿc                 C   s   d S r3   r   r   r   r   r   Ú	decryptorz   s    zCipher.decryptorc                 C   s   d S r3   r   r   r   r   r   r?   €   s    c                 C   s*   ddl m} | | j| j¡}| j|dd�S )Nr   r6   Fr7   )r;   r.   Zcreate_symmetric_decryption_ctxr,   r-   r<   r=   r   r   r   r?   †   s     ÿÚ_BackendCipherContext)r>   r8   r   c                 C   s0   t | jtjƒr$|rt|ƒS t|ƒS nt|ƒS d S r3   )r/   r-   r   r9   Ú_AEADEncryptionContextÚ_AEADDecryptionContextr   )r   r>   r8   r   r   r   r<   Ž   s
    
zCipher._wrap_ctx)N)r   r   r   r   r(   ÚtypingÚAnyr2   Úoverloadr&   r4   r   r"   r?   ÚboolÚUnionr<   r   r   r   r   r+   M   s<    üüþþþþ	 ÿþr+   c                   @   s\   e Zd ZU ejd ed< dddœdd„Zeedœdd	„Zeee	d
œdd„Z
edœdd„ZdS )r   r@   Ú_ctxN©r>   r   c                 C   s
   || _ d S r3   )rH   ©r   r>   r   r   r   r2   ª   s    z_CipherContext.__init__r	   c                 C   s   | j d krtdƒ‚| j  |¡S ©NúContext was already finalized.)rH   r   r   r   r   r   r   r   ­   s    
z_CipherContext.updater   c                 C   s    | j d krtdƒ‚| j  ||¡S rK   )rH   r   r   r   r   r   r   r   ²   s    
z_CipherContext.update_intor   c                 C   s&   | j d krtdƒ‚| j  ¡ }d | _ |S rK   )rH   r   r   r   r   r   r   r   ·   s
    

z_CipherContext.finalize)r   r   r   rC   ÚOptionalÚ__annotations__r2   r   r   r   r   r   r   r   r   r   r   §   s
   
r   c                   @   sŠ   e Zd ZU ejd ed< eje ed< dddœdd„Zeddœd	d
„Z	eedœdd„Z
eeedœdd„Zedœdd„Zeddœdd„ZdS )Ú_AEADCipherContextr@   rH   Ú_tagNrI   c                 C   s"   || _ d| _d| _d | _d| _d S )Nr   F)rH   Ú_bytes_processedÚ_aad_bytes_processedrP   Ú_updatedrJ   r   r   r   r2   Ã   s
    z_AEADCipherContext.__init__)Ú	data_sizer   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¡ƒ‚d S )NrL   Tz+{} has a maximum encrypted byte limit of {})	rH   r   rS   rQ   Ú_modeZ_MAX_ENCRYPTED_BYTESr:   ÚformatÚname)r   rT   r   r   r   Ú_check_limitÊ   s    
 ÿÿz_AEADCipherContext._check_limitr	   c                 C   s(   |   t|ƒ¡ | jd k	st‚| j |¡S r3   )rX   ÚlenrH   r1   r   r   r   r   r   r   Ö   s    z_AEADCipherContext.updater   c                 C   s*   |   t|ƒ¡ | jd k	st‚| j ||¡S r3   )rX   rY   rH   r1   r   r   r   r   r   r   Ü   s    z_AEADCipherContext.update_intor   c                 C   s0   | j d krtdƒ‚| j  ¡ }| j j| _d | _ |S rK   )rH   r   r   r$   rP   r   r   r   r   r   â   s    


z_AEADCipherContext.finalizec                 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  |¡ d S )NrL   z'Update has been called on this context.z%{} has a maximum AAD byte limit of {})rH   r   rS   r   rR   rY   rU   Z_MAX_AAD_BYTESr:   rV   rW   r!   r   r   r   r   r!   ê   s    
 ÿÿz/_AEADCipherContext.authenticate_additional_data)r   r   r   rC   rM   rN   r   r2   r   rX   r   r   r   r!   r   r   r   r   rO   ¿   s   
rO   c                   @   s   e Zd Zeedœdd„ZdS )rB   r#   c                 C   s2   | j d krtdƒ‚| j  |¡}| j j| _d | _ |S rK   )rH   r   r%   r$   rP   )r   r$   r
   r   r   r   r%   ü   s    

z(_AEADDecryptionContext.finalize_with_tagN)r   r   r   r   r%   r   r   r   r   rB   û   s   rB   c                   @   s   e Zd Zeedœdd„ƒZdS )rA   r   c                 C   s&   | j d k	rtdƒ‚| jd k	s t‚| jS )Nz4You must finalize encryption before getting the tag.)rH   r   rP   r1   r   r   r   r   r$     s    
ÿz_AEADEncryptionContext.tagN)r   r   r   Úpropertyr   r$   r   r   r   r   rA     s   rA   )!r   rC   Zcryptography.exceptionsr   r   r   Z/cryptography.hazmat.primitives._cipheralgorithmr   Z&cryptography.hazmat.primitives.ciphersr   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.ciphersr   r@   ÚABCMetar   r    r"   r&   ÚTypeVarrM   r(   ÚGenericr+   rG   ZModeWithNonceZModeWithTweakZECBZModeWithInitializationVectorr5   rO   rB   rA   r   r   r   r   Ú<module>   s<   		 
 ÿOüÿÿ<
