B
    u9au  ã               @   s¤   d dl Zd dlmZ yd dlZW n ek
r<   dZdZY nX e	ej
ƒZd dlZe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/lib/python3.7/hmac.pyú	<genexpr>   s    r   é   c             c   s   | ]}|d A V  qdS )é6   Nr   )r   r   r   r   r   r      s    c               @   sN   e Zd ZdZd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é@   Nc                sV  t |ttfƒs tdt|ƒj ƒ‚ˆ d kr<t dtd¡ t	j
‰ tˆ ƒrLˆ | _n,t ˆ tƒrhd‡ fdd„	| _nd‡ fdd„	| _|  ¡ | _|  ¡ | _| jj| _t| jdƒrÒ| jj}|d	k rìt d
|| jf td¡ | j}nt d| j td¡ | j}|| _t|ƒ|kr|  |¡ ¡ }| |d¡}| j | t¡¡ | j | t¡¡ |d k	rR|  |¡ d S )Nz,key: expected bytes or bytearray, but got %rzhHMAC() without an explicit digestmod argument is deprecated since Python 3.4, and will be removed in 3.8é   ó    c                s   t  ˆ | ¡S )N)Ú_hashlibÚnew)Úd)Ú	digestmodr   r   Ú<lambda>=   r   zHMAC.__init__.<locals>.<lambda>c                s
   ˆ   | ¡S )N)r   )r   )r   r   r   r   ?   r   Ú
block_sizeé   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   )Ú
isinstanceÚbytesÚ	bytearrayÚ	TypeErrorÚtypeÚ__name__Ú	_warningsÚwarnÚDeprecationWarningr   Zmd5ÚcallableÚdigest_consÚstrÚouterÚinnerÚdigest_sizeÚhasattrr   Ú	blocksizeÚRuntimeWarningÚlenÚdigestÚljustÚupdateÚ	translateÚtrans_5CÚtrans_36)ÚselfÚkeyÚmsgr   r'   r   )r   r   Ú__init__!   sB    





zHMAC.__init__c             C   s   d| j j S )Nzhmac-)r$   Úname)r0   r   r   r   r4   _   s    z	HMAC.namec             C   s   | j  |¡ d S )N)r$   r,   )r0   r2   r   r   r   r,   c   s    zHMAC.updatec             C   s:   | j  | j ¡}| j|_| j|_| j ¡ |_| j ¡ |_|S )N)Ú	__class__Ú__new__r!   r%   r$   Úcopyr#   )r0   Úotherr   r   r   r7   h   s    z	HMAC.copyc             C   s   | j  ¡ }| | j ¡ ¡ |S )N)r#   r7   r,   r$   r*   )r0   Úhr   r   r   Ú_currentu   s    
zHMAC._currentc             C   s   |   ¡ }| ¡ S )N)r:   r*   )r0   r9   r   r   r   r*   ~   s    zHMAC.digestc             C   s   |   ¡ }| ¡ S )N)r:   Ú	hexdigest)r0   r9   r   r   r   r;   ˆ   s    zHMAC.hexdigest)NN)r   Ú
__module__Ú__qualname__r'   r3   Úpropertyr4   r,   r7   r:   r*   r;   r   r   r   r   r      s   
>	
r   c             C   s   t | ||ƒS )N)r   )r1   r2   r   r   r   r   r   Ž   s    r   c                sâ   t d k	r(tˆ tƒr(ˆ tkr(t  | |ˆ ¡S tˆ ƒr6ˆ }n(tˆ tƒrPd‡ fdd„	}nd	‡ fdd„	}|ƒ }|ƒ }t|ddƒ}t| ƒ|krŽ|| ƒ ¡ } | d|t| ƒ   } | 	|  
t¡¡ | 	|  
t¡¡ | 	|¡ | 	| ¡ ¡ | ¡ S )
Nr   c                s   t  ˆ | ¡S )N)r   r   )r   )r*   r   r   r   ®   r   zdigest.<locals>.<lambda>c                s
   ˆ   | ¡S )N)r   )r   )r*   r   r   r   °   r   r   r   r   )r   )r   )Ú_hashopensslr   r"   Ú_openssl_md_methsZhmac_digestr    Úgetattrr)   r*   r,   r-   r/   r.   )r1   r2   r*   r!   r$   r#   r'   r   )r*   r   r*   œ   s&    

r*   )NN)Úwarningsr   Ú	_operatorr   Zcompare_digestr   r?   ÚImportErrorr@   Ú	frozensetZopenssl_md_meth_namesZhashlibr   Úranger.   r/   r%   r   r   r*   r   r   r   r   Ú<module>   s   

t
