o
    ™¨Êh­  ã                   @   sp   d dl mZmZmZ d dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZ e ej¡G dd„ deƒƒZdS )	é    )Úabsolute_importÚdivisionÚprint_function)Úutils)ÚAlreadyFinalizedÚUnsupportedAlgorithmÚ_Reasons)ÚCMACBackend)ÚciphersÚmacc                   @   s6   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚCMACNc                 C   s\   t |tƒstdtjƒ‚t |tjƒstdƒ‚|| _|| _	|d u r)| j	 
| j¡| _d S || _d S )Nz.Backend object does not implement CMACBackend.z*Expected instance of BlockCipherAlgorithm.)Ú
isinstancer	   r   r   ÚBACKEND_MISSING_INTERFACEr
   ÚBlockCipherAlgorithmÚ	TypeErrorÚ
_algorithmÚ_backendÚcreate_cmac_ctxÚ_ctx)ÚselfÚ	algorithmÚbackendÚctx© r   úU/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/cmac.pyÚ__init__   s   
þÿ
zCMAC.__init__c                 C   s4   | j d u r	tdƒ‚t|tƒstdƒ‚| j  |¡ d S )NúContext was already finalized.zdata must be bytes.)r   r   r   Úbytesr   Úupdate)r   Údatar   r   r   r   $   s
   

zCMAC.updatec                 C   s&   | j d u r	tdƒ‚| j  ¡ }d | _ |S )Nr   )r   r   Úfinalize)r   Údigestr   r   r   r    +   s
   

zCMAC.finalizec                 C   s@   t |tƒs	tdƒ‚| jd u rtdƒ‚| jd }| _| |¡ d S )Nzsignature must be bytes.r   )r   r   r   r   r   Úverify)r   Ú	signaturer   r   r   r   r"   2   s   

zCMAC.verifyc                 C   s*   | j d u r	tdƒ‚t| j| j| j  ¡ d�S )Nr   )r   r   )r   r   r   r   r   Úcopy)r   r   r   r   r$   ;   s   
ýz	CMAC.copy)N)Ú__name__Ú
__module__Ú__qualname__r   r   r    r"   r$   r   r   r   r   r      s    
	r   N)Ú
__future__r   r   r   Úcryptographyr   Úcryptography.exceptionsr   r   r   Ú'cryptography.hazmat.backends.interfacesr	   Úcryptography.hazmat.primitivesr
   r   Úregister_interfaceÚ
MACContextÚobjectr   r   r   r   r   Ú<module>   s   
