o
    Œõ±jî  ã                   @   s`   d dl mZmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dl mZmZ G dd„ deƒZdS )é    )ÚsymmetricBASEÚ
cipherMODE)ÚCipherÚ
algorithmsÚmodes)Úpadding)Údefault_backendc                   @   s<   e Zd Zejdddfdd„Zdd„ Zddd„Zdd	d
„ZdS )ÚAESNé€   c                 C   s$   d | _ d | _tj| ||||d� d S )N)Úsegment_size)Ú	encryptorÚ	decryptorr   Ú__init__)ÚselfÚkeyÚmodeÚIVÚpadr   © r   ú–/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/unicrypto/backends/cryptography/AES.pyr      s   zAES.__init__c                 C   sF  | j tjkrt ¡ | _ny| j tjkrt | j¡| _nk| j tjkr(t | j¡| _n]| j tjkrH| jdkr;t 	| j¡| _nJ| jdkrGt | j¡| _n=| j tj
krVt 
| j¡| _n/| j tjkrmddlm} || j| jd�| _d S | j tjkr�ddlm} || jƒ| _d S tdƒ‚t | j¡}t|| jtƒ d�| _| j ¡ | _| j ¡ | _d S )	Né   r
   r   )ÚAESCCM)Ú
tag_length)ÚAESGCMzUnknown cipher mode!)r   Úbackend)r   r   ÚECBr   r   ÚCBCÚCTRÚCFBr   ÚCFB8ÚOFBÚCCMÚ+cryptography.hazmat.primitives.ciphers.aeadr   r   Ú_cipherÚGCMr   Ú	Exceptionr   r	   r   r   r   r   )r   r   r   Ú	algorithmr   r   r   Úsetup_cipher   s6   

€zAES.setup_cipherc                 C   sN   | j tjks| j tjkr!| j | j||¡}|d d… |dd … fS | j |¡S )Niðÿÿÿ)	r   r   r!   r$   r#   Úencryptr   r   Úupdate)r   ÚdataÚaadÚresr   r   r   r(   -   s   zAES.encryptc                 C   s:   | j tjks| j tjkr| j | j|| |¡S | j |¡S ©N)	r   r   r!   r$   r#   Údecryptr   r   r)   )r   r*   r+   Úmacr   r   r   r.   4   s   zAES.decryptr-   )NN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r'   r(   r.   r   r   r   r   r	      s
    
r	   N)Úunicrypto.symmetricr   r   Ú&cryptography.hazmat.primitives.ciphersr   r   r   Úcryptography.hazmat.primitivesr   Úcryptography.hazmat.backendsr   r	   r   r   r   r   Ú<module>   s    