o
    e                     @  s\   d dl mZ d dlZd dlmZ d dlmZ d dlmZ ej	r%d dl
mZ G dd dZdS )	    )annotationsN)utils)AlreadyFinalized)ciphers)_CMACContextc                   @  sV   e Zd ZU ded< ded< 		ddddZdddZdddZdddZdddZdS )CMACtyping.Optional[_CMACContext]_ctxciphers.BlockCipherAlgorithm
_algorithmN	algorithmbackend
typing.AnyctxreturnNonec                 C  sJ   t |tjs
td|| _|d u r ddlm} || j| _d S || _d S )Nz*Expected instance of BlockCipherAlgorithm.r   )r   )	
isinstancer   BlockCipherAlgorithm	TypeErrorr   ,cryptography.hazmat.backends.openssl.backendr   create_cmac_ctxr	   )selfr   r   r   ossl r   V/var/www/html/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/cmac.py__init__   s   
zCMAC.__init__databytesc                 C  s.   | j d u r	tdtd| | j | d S )NContext was already finalized.r   )r	   r   r   _check_bytesupdate)r   r   r   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.finalize	signaturec                 C  s:   t d| | jd u rtd| jd }| _|| d S )Nr#   r   )r   r   r	   r   verify)r   r#   r   r   r   r   r$   6   s
   
zCMAC.verifyc                 C  s&   | j d u r	tdt| j| j  dS )Nr   )r   )r	   r   r   r   copy)r   r   r   r   r%   >   s   
z	CMAC.copy)NN)r   r
   r   r   r   r   r   r   )r   r   r   r   )r   r   )r#   r   r   r   )r   r   )	__name__
__module____qualname____annotations__r   r    r!   r$   r%   r   r   r   r   r      s   
 


r   )
__future__r   typingcryptographyr   cryptography.exceptionsr   cryptography.hazmat.primitivesr   TYPE_CHECKING)cryptography.hazmat.backends.openssl.cmacr   r   r   r   r   r   <module>   s   