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   ZBlockCipherAlgorithm	TypeErrorr   Z,cryptography.hazmat.backends.openssl.backendr   Zcreate_cmac_ctxr	   )selfr   r   r   Zossl r   SD:\Projects\ConvertPro\env\Lib\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   typingZcryptographyr   Zcryptography.exceptionsr   Zcryptography.hazmat.primitivesr   TYPE_CHECKINGZ)cryptography.hazmat.backends.openssl.cmacr   r   r   r   r   r   <module>   s   