File: //snap/core20/2599/lib/python3.8/__pycache__/hmac.cpython-38.pyc
U
    ���g�  �                   @   s�   d Z ddlZddlmZ zddlZW n ek
r@   dZdZ	Y nX e
ej�Z	ddlZe
dd� ed�D ��Ze
dd� ed�D ��ZdZG dd	� d	�Zddd�Zd
d� ZdS )zqHMAC (Keyed-Hashing for Message Authentication) module.
Implements the HMAC algorithm as described by RFC 2104.
�    N)�_compare_digestc                 c   s   | ]}|d A V  qdS )�\   N� ��.0�xr   r   �/usr/lib/python3.8/hmac.py�	<genexpr>   s     r	   �   c                 c   s   | ]}|d A V  qdS )�6   Nr   r   r   r   r   r	      s     c                   @   sR   e Zd ZdZdZddd�Zedd� �Zd	d
� Zdd� Z	d
d� Z
dd� Zdd� ZdS )�HMACz~RFC 2104 HMAC class.  Also complies with RFC 4231.
    This supports the API for Cryptographic Hash Functions (PEP 247).
    �@   N� c                    sF  t |ttf�s tdt|�j ��� s,td��t� �r<� | _n,t � t�rXd� fdd�	| _nd� fdd�	| _| �� | _	| �� | _
| j
j| _t| j
d�r�| j
j
}|dk r�t�d	|| jf td
� | j}nt�d| j td
� | j}|| _
t|�|k� r�| �|��� }|�|d�}| j	�|�t�� | j
�|�t�� |d
k	�rB| �|� d
S )a?  Create a new HMAC object.
        key: bytes or buffer, key for the keyed hash object.
        msg: bytes or buffer, Initial input for the hash or None.
        digestmod: A hash name suitable for hashlib.new(). *OR*
                   A hashlib constructor returning a new hash object. *OR*
                   A module supporting PEP 247.
                   Required as of 3.8, despite its position after the optional
                   msg argument.  Passing it as a keyword argument is
                   recommended, though not required for legacy API reasons.
        z,key: expected bytes or bytearray, but got %rz'Missing required parameter 'digestmod'.�    c                    s   t �� | �S �N��_hashlib�new��d��	digestmodr   r   �<lambda>8   r   zHMAC.__init__.<locals>.<lambda>c                    s
   � � | �S r   �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.�    N)r   )r   )�
isinstance�bytes�	bytearray�	TypeError�type�__name__�callable�digest_cons�str�outer�inner�digest_size�hasattrr   �	_warnings�warn�	blocksize�RuntimeWarning�len�digest�ljust�update�	translate�trans_5C�trans_36)�self�key�msgr   r-   r   r   r   �__init__!   sJ    
� �� �
z
HMAC.__init__c                 C   s   d| j j S )Nzhmac-)r(   �name)r6   r   r   r   r:   Z   s    z	HMAC.namec                 C   s   | j �|� dS )z,Feed data from msg into this hashing object.N)r(   r2   )r6   r8   r   r   r   r2   ^   s    zHMAC.updatec                 C   s:   | j �| j �}| j|_| j|_| j�� |_| j�� |_|S )zyReturn a separate copy of this hashing object.
        An update to this copy won't affect the original object.
        )�	__class__�__new__r%   r)   r(   �copyr'