a
    )Bik                     @   s   d dl Zzd dlZW n& ey:   dZdZd dlmZ Y n0 ejZe	ej
Zd dlZe sedd edD Zedd edD ZdZG dd dZdd
dZdd ZdS )    N)_compare_digestc                 c   s   | ]}|d A V  qdS )\   N .0xr   r   /usr/lib64/python3.9/hmac.py	<genexpr>       r	      c                 c   s   | ]}|d A V  qdS )6   Nr   r   r   r   r   r	      r
   c                   @   sb   e Zd ZdZdZdddZdd Zd	d
 Zedd Z	dd Z
dd Zdd Zdd Zdd ZdS )HMAC@   )_hmac_inner_outer
block_sizedigest_sizeN c                 C   s   t |ttfs tdt|j |s,tdt sFtrt |tt	frz| 
||| W q tjy   t rr | ||| Y q0 n| ||| d S )Nz,key: expected bytes or bytearray, but got %rz'Missing required parameter 'digestmod'.)
isinstancebytes	bytearray	TypeErrortype__name___hashopensslget_fips_modestr	_functype
_init_hmacUnsupportedDigestmodError	_init_oldselfkeymsg	digestmodr   r   r   __init__'   s    zHMAC.__init__c                 C   s*   t j|||d| _| jj| _| jj| _d S )Nr&   )r   hmac_newr   r   r   r"   r   r   r   r   D   s    
zHMAC._init_hmacc                    s(  t  r| || S t r$ }n(t tr>d fdd	}nd fdd	}d | _| | _| | _| jj	| _	t
| jdr| jj}|dk rtd|| jf td | j}ntd	| j td | j}t||kr|| }|| _||d
}| j|t | j|t |d ur$| | d S )Nr
   c                    s   t  | S N_hashlibnewdr(   r   r   <lambda>P   r
   z HMAC._init_old.<locals>.<lambda>c                    s
     | S r*   r-   r.   r(   r   r   r0   R   r
   r      z:block_size of %d seems too small; using our default of %d.   z<No block_size attribute on given digest object; Assuming %d.    )r
   )r
   )r   r   r   callabler   r   r   r   r   r   hasattrr   	_warningswarn	blocksizeRuntimeWarninglendigestljustupdate	translatetrans_5Ctrans_36)r#   r$   r%   r&   digest_consr9   r   r(   r   r!   I   sD    


zHMAC._init_oldc                 C   s    | j r| j jS d| jj S d S )Nzhmac-)r   namer   )r#   r   r   r   rC   s   s    z	HMAC.namec                 C   s   | j p
| j}|| d S r*   )r   r   r>   )r#   r%   instr   r   r   r>   z   s    zHMAC.updatec                 C   sX   | j | j }| j|_| jr6| j |_d  |_|_nd |_| j |_| j |_|S r*   )	__class____new__r   r   copyr   r   )r#   otherr   r   r   rG      s    z	HMAC.copyc                 C   s.   | j r| j S | j }|| j  |S d S r*   )r   r   rG   r>   r   r<   r#   hr   r   r   _current   s
    
zHMAC._currentc                 C   s   |   }| S r*   )rK   r<   rI   r   r   r   r<      s    zHMAC.digestc                 C   s   |   }| S r*   )rK   	hexdigestrI   r   r   r   rL      s    zHMAC.hexdigest)Nr   )r   
__module____qualname__r9   	__slots__r'   r   r!   propertyrC   r>   rG   rK   r<   rL   r   r   r   r   r      s   
*

r   r   c                 C   s   t | ||S r*   )r   )r$   r%   r&   r   r   r   r-      s    r-   c                    s   t d ur<t ttfr<zt | | W S  t jy:   Y n0 t rJ }n(t trdd fdd	}nd	 fdd	}| }| }t|dd}t| |kr|| 	 } | d|t|    } |
| t |
| t |
| |
|	  |	 S )
Nr
   c                    s   t  | S r*   r+   r.   r<   r   r   r0      r
   zdigest.<locals>.<lambda>c                    s
     | S r*   r1   r.   rQ   r   r   r0      r
   r   r   r4   )r
   )r
   )r   r   r   r   hmac_digestr    r5   getattrr;   r<   r>   r?   rA   r@   )r$   r%   r<   rB   innerZouterr9   r   rQ   r   r<      s*    	

r<   )Nr   )warningsr7   r,   r   ImportErrorr   	_operatorr   compare_digestr   openssl_sha256hashlibr   r   ranger@   rA   r   r   r-   r<   r   r   r   r   <module>   s"   
 
