o
    
cJ                     @   sN   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ G dd dej	Z
dS )    N)utils)AlreadyFinalized)_HMACContext)hashesc                   @   s   e Zd ZU eje ed< 		ddedej	dej
fddZedej	fd	d
ZdeddfddZdddZdefddZdeddfddZdS )HMAC_ctxNkey	algorithmbackendc                 C   sR   t |tjs
td|| _|| _|d u r$ddlm} ||| j	| _
d S || _
d S )Nz*Expected instance of hashes.HashAlgorithm.r   )r
   )
isinstancer   HashAlgorithm	TypeError
_algorithm_key,cryptography.hazmat.backends.openssl.backendr
   create_hmac_ctxr	   r   )selfr   r	   r
   ctxossl r   P/opt/certbot/lib/python3.10/site-packages/cryptography/hazmat/primitives/hmac.py__init__   s   
zHMAC.__init__returnc                 C   s   | j S )N)r   r   r   r   r   r	   &   s   zHMAC.algorithmdatac                 C   s.   | j d u r	tdtd| | j | d S )NContext was already finalized.r   )r   r   r   _check_byteslikeupdate)r   r   r   r   r   r   *   s   
zHMAC.updatec                 C   s*   | j d u r	tdt| j| j| j  dS )Nr   )r   )r   r   r   r   r	   copyr   r   r   r   r   0   s   
z	HMAC.copyc                 C   s&   | j d u r	td| j  }d | _ |S )Nr   )r   r   finalize)r   digestr   r   r   r   9   s
   

zHMAC.finalize	signaturec                 C   s:   t d| | jd u rtd| jd }| _|| d S )Nr!   r   )r   _check_bytesr   r   verify)r   r!   r   r   r   r   r#   @   s
   
zHMAC.verify)NN)r   r   )__name__
__module____qualname__typingOptionalr   __annotations__bytesr   r   Anyr   propertyr	   r   r   r   r#   r   r   r   r   r      s"   
 

	r   )r'   cryptographyr   cryptography.exceptionsr   )cryptography.hazmat.backends.openssl.hmacr   cryptography.hazmat.primitivesr   HashContextr   r   r   r   r   <module>   s   