o
    ˷e                     @   sP   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 )    N)utils)AlreadyFinalized)ciphers)_CMACContextc                   @   s   e Zd ZU ejd ed< ejed< 		ddejdejdejd fdd	Z	d
e
ddfddZde
fddZde
ddfddZdddZdS )CMACr   _ctx
_algorithmN	algorithmbackendctxc                 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   Z/var/www/ideatree/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/cmac.py__init__   s   
zCMAC.__init__datareturnc                 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   0   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   7   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   )__name__
__module____qualname__typingOptional__annotations__r   r   Anyr   bytesr   r   r   r   r   r   r   r   r      s    
 

r   )r#   cryptographyr   cryptography.exceptionsr   cryptography.hazmat.primitivesr   TYPE_CHECKING)cryptography.hazmat.backends.openssl.cmacr   r   r   r   r   r   <module>   s   