o
    
c                     @   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 d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ctxreturnc                 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   P/opt/certbot/lib/python3.10/site-packages/cryptography/hazmat/primitives/cmac.py__init__   s   
zCMAC.__init__datac                 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   5   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   