3
ãdeM   ã               @   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   úb/var/www/agendate/envp3/lib/python3.6/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 )ÚAEADCipherContextN)r	   r
   c             C   s   dS )z3
        Authenticates the provided bytes.
        Nr   )r   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_tag6   s    z'AEADDecryptionContext.finalize_with_tagN)r   r   r   r   r   r   r   r   r   r   r   r   5   s   r   c               @   s$   e Zd Zeejedœdd„ƒƒZdS )ÚAEADEncryptionContext)r
   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   Úpropertyr   r   r   r   r   r   r   r   r   >   s   r   ÚModeT)ÚboundÚ	covariantc               @   sª   e Zd Zdeeejd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Úbackendr
   c             C   sD   t |tƒstdƒ‚|d k	r4t |tjƒs*t‚|j|ƒ || _|| _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   Ú	encryptor`   s    zCipher.encryptorÚ_CIPHER_TYPEc             C   s   d S )Nr   )r   r   r   r   r,   f   s    c             C   sL   t | jtjƒr"| jjd k	r"tdƒ‚ddlm} |j| 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   r,   l   s    c             C   s   d S )Nr   )r   r   r   r   Ú	decryptory   s    zCipher.decryptorc             C   s   d S )Nr   )r   r   r   r   r4      s    c             C   s*   ddl m} |j| j| jƒ}| j|dd�S )Nr   )r'   F)r.   )r1   r'   Zcreate_symmetric_decryption_ctxr%   r&   r2   )r   r'   r3   r   r   r   r4   …   s    Ú_BackendCipherContext)r3   r.   r
   c             C   s0   t | jtjƒr$|rt|ƒS t|ƒS nt|ƒS d S )N)r(   r&   r   r/   Ú_AEADEncryptionContextÚ_AEADDecryptionContextr   )r   r3   r.   r   r   r   r2   �   s
    
zCipher._wrap_ctx)N)r   r   r   r   r!   ÚtypingÚAnyr+   Úoverloadr   r,   r   r   r4   ÚboolÚUnionr2   r   r   r   r   r$   M   s&   
	r$   c               @   sX   e Zd ZU ej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   r5   N)r3   r
   c             C   s
   || _ d S )N)Ú_ctx)r   r3   r   r   r   r+   ©   s    z_CipherContext.__init__)r	   r
   c             C   s   | j d krtdƒ‚| j j|ƒS )NzContext was already finalized.)r=   r   r   )r   r	   r   r   r   r   ¬   s    
z_CipherContext.update)r	   r   r
   c             C   s    | j d krtdƒ‚| j j||ƒS )NzContext was already finalized.)r=   r   r   )r   r	   r   r   r   r   r   ±   s    
z_CipherContext.update_into)r
   c             C   s&   | j d krtdƒ‚| j jƒ }d | _ |S )NzContext was already finalized.)r=   r   r   )r   r	   r   r   r   r   ¶   s
    

z_CipherContext.finalize)r   r   r   r8   ÚOptionalr=   r+   r   r   r   r   r   r   r   r   r   r   ¦   s
   

r   c               @   s‚   e Zd ZU ejd eje 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 )Ú_AEADCipherContextr5   N)r3   r
   c             C   s"   || _ d| _d| _d | _d| _d S )Nr   F)r=   Ú_bytes_processedÚ_aad_bytes_processedÚ_tagÚ_updated)r   r3   r   r   r   r+   Â   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jƒƒ‚d S )NzContext was already finalized.Tz+{} has a maximum encrypted byte limit of {})	r=   r   rC   r@   Ú_modeZ_MAX_ENCRYPTED_BYTESr0   ÚformatÚname)r   rD   r   r   r   Ú_check_limitÉ   s    
z_AEADCipherContext._check_limit)r	   r
   c             C   s(   | j t|ƒƒ | jd k	st‚| jj|ƒS )N)rH   Úlenr=   r*   r   )r   r	   r   r   r   r   Õ   s    z_AEADCipherContext.update)r	   r   r
   c             C   s*   | j t|ƒƒ | jd k	st‚| jj||ƒS )N)rH   rI   r=   r*   r   )r   r	   r   r   r   r   r   Û   s    z_AEADCipherContext.update_into)r
   c             C   s0   | j d krtdƒ‚| j jƒ }| j j| _d | _ |S )NzContext was already finalized.)r=   r   r   r   rB   )r   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ƒƒ‚| 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 {})r=   r   rC   r   rA   rI   rE   Z_MAX_AAD_BYTESr0   rF   rG   r   )r   r	   r   r   r   r   é   s    
z/_AEADCipherContext.authenticate_additional_data)r   r   r   r8   r>   r=   r   rB   r+   r   rH   r   r   r   r   r   r   r   r   r?   ¾   s   


r?   c               @   s   e Zd Zeedœdd„ZdS )r7   )r   r
   c             C   s2   | j d krtdƒ‚| j j|ƒ}| j j| _d | _ |S )NzContext was already finalized.)r=   r   r   r   rB   )r   r   r	   r   r   r   r   û   s    

z(_AEADDecryptionContext.finalize_with_tagN)r   r   r   r   r   r   r   r   r   r7   ú   s   r7   c               @   s   e Zd Zeedœdd„ƒZdS )r6   )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.)r=   r   rB   r*   )r   r   r   r   r     s
    
z_AEADEncryptionContext.tagN)r   r   r   r    r   r   r   r   r   r   r6     s   r6   )!r   r8   Zcryptography.exceptionsr   r   r   Z/cryptography.hazmat.primitives._cipheralgorithmr   Z&cryptography.hazmat.primitives.ciphersr   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.ciphersr   r5   ÚABCMetar   r   r   r   ÚTypeVarr>   r!   ÚGenericr$   r<   ZModeWithNonceZModeWithTweakZECBZModeWithInitializationVectorr-   r?   r7   r6   r   r   r   r   Ú<module>   s0   	
N<
