o
    Œõ±j¦  ã                   @   s<   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 )é    )ÚAES)ÚCounter)ÚsymmetricBASEÚ
cipherMODEc                   @   s:   e Zd Zejddfdd„Zdd„ Zddd„Zdd	d
„ZdS )r   Né€   c                 C   s   t j| ||||d� d S )N)Úsegment_size)r   Ú__init__)ÚselfÚkeyÚmodeÚIVr   © r   ú—/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/unicrypto/backends/pycryptodomex/AES.pyr      s   zAES.__init__c              
   C   s<  | j tjkrt | jtj¡| _d S | j tjkr%tj| jtj	| j
d�| _d S | j tjkrDtj| jtjtjdtj| j
ddd�d�d�| _d S | j tjkrZtj| jtj| j
| jd�| _d S | j tjkrntj| jtj| j
d�| _d S | j tjkr„tj| jtj| j
| jd	�| _d S | j tjkrštj| jtj| j
| jd	�| _d S td
ƒ‚)N)Úivr   ÚbigF)Ú	byteorderÚsigned)Úinitial_value)Úcounter)r   r   )Úmac_lenzUnknown cipher mode!)r   r   ÚECBÚ_pyCryptodomeAESÚnewr
   ÚMODE_ECBÚ_cipherÚCBCÚMODE_CBCr   ÚCTRÚMODE_CTRr   ÚintÚ
from_bytesÚCFBÚMODE_CFBr   ÚOFBÚMODE_OFBÚCCMÚMODE_CCMÚGCMÚMODE_GCMÚ	Exception)r	   r   r   r   Úsetup_cipher
   s   2   zAES.setup_cipherc                 C   s<   | j tjks| j tjkr| j |¡ | j |¡S | j |¡S ©N)r   r   r%   r'   r   ÚupdateÚencrypt_and_digestÚencrypt)r	   ÚdataÚaadr   r   r   r.      s   zAES.encryptc                 C   s>   | j tjks| j tjkr| j |¡ | j ||¡S | j |¡S r+   )r   r   r%   r'   r   r,   Údecrypt_and_verifyÚdecrypt)r	   r/   r0   Úmacr   r   r   r2   #   s   zAES.decryptr+   )NN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r*   r.   r2   r   r   r   r   r      s
    
r   N)ÚCryptodome.Cipherr   r   ÚCryptodome.Utilr   Úunicrypto.symmetricr   r   r   r   r   r   Ú<module>   s   