a
    kÄ#dÐ  ã                   @   s  d Z ddlmZ ddlZddlmZ ddlm  mZ ddl	m
Z
 dZdZdZd	Zi ZG d
d„ deƒZG dd„ deƒZG dd„ de ee¡ƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )z
HMAC classes.
é    )Úabsolute_importN)Ú_tls_hash_algs)Úbytes_encodes0   666666666666666666666666666666666666666666666666s(   6666666666666666666666666666666666666666s0   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\s(   \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )Ú_GenericHMACMetaclassaf  
    HMAC classes are automatically registered through this metaclass.
    Furthermore, their name attribute is extracted from their class name.

    Note that, when used with TLS, the HMAC key length equates the output of
    the associated hash function (see RFC 5246, appendix C).
    Also, we do not need to instantiate the associated hash function.
    c                    st   |dd … }|dkrFd| |d< t | |d< t | j|d< |d |d< tt| ƒ | |||¡}|dkrp|t|d < |S )Né   Ú_GenericHMACzHMAC-%sÚnameÚhash_algÚhmac_lenÚkey_len)r   Zhash_lenÚsuperr   Ú__new__Ú_tls_hmac_algs)ÚclsZ	hmac_nameÚbasesÚdctÚ	hash_nameZ	the_class©Ú	__class__© úT/var/www/html/gsl.tools/lib/python3.9/site-packages/scapy/layers/tls/crypto/h_mac.pyr   #   s    ÿz_GenericHMACMetaclass.__new__)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdS )Ú	HMACErrorz.
    Raised when HMAC verification fails.
    N)r   r   r   r   r   r   r   r   r   1   s   r   c                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	r   Nc                 C   s   |d u rd| _ n
t|ƒ| _ d S ©Nó    )Úkeyr   )Úselfr   r   r   r   Ú__init__9   s    z_GenericHMAC.__init__c                 C   s.   | j d u rt‚t|ƒ}t | j || jj¡ ¡ S )N)r   r   r   ÚhmacÚnewr	   Zhash_clsÚdigest©r    Útbdr   r   r   r$   ?   s    
z_GenericHMAC.digestc                 C   sj   | j d u rt‚|  ¡ }|jdkr*t}t}n|jdkr>t}t}ntdƒ‚| | j | | | j | | ¡ ¡S )NÚSHAÚMD5z'Provided hash does not work with SSLv3.)	r   r   r	   r   Ú_SSLv3_PAD1_SHA1Ú_SSLv3_PAD2_SHA1Ú_SSLv3_PAD1_MD5Ú_SSLv3_PAD2_MD5r$   )r    r&   ÚhZpad1Zpad2r   r   r   Údigest_sslv3E   s    


ÿz_GenericHMAC.digest_sslv3)N)r   r   r   r!   r$   r.   r   r   r   r   r   8   s   
r   c                   @   s$   e Zd ZdZdZdd„ Zdd„ ZdS )Ú	Hmac_NULLr   c                 C   s   dS r   r   r%   r   r   r   r$   [   s    zHmac_NULL.digestc                 C   s   dS r   r   r%   r   r   r   r.   ^   s    zHmac_NULL.digest_sslv3N)r   r   r   r
   r   r$   r.   r   r   r   r   r/   W   s   r/   c                   @   s   e Zd ZdS )ÚHmac_MD5N©r   r   r   r   r   r   r   r0   b   s   r0   c                   @   s   e Zd ZdS )ÚHmac_SHANr1   r   r   r   r   r2   f   s   r2   c                   @   s   e Zd ZdS )ÚHmac_SHA224Nr1   r   r   r   r   r3   j   s   r3   c                   @   s   e Zd ZdS )ÚHmac_SHA256Nr1   r   r   r   r   r4   n   s   r4   c                   @   s   e Zd ZdS )ÚHmac_SHA384Nr1   r   r   r   r   r5   r   s   r5   c                   @   s   e Zd ZdS )ÚHmac_SHA512Nr1   r   r   r   r   r6   v   s   r6   )r   Ú
__future__r   r"   Zscapy.layers.tls.crypto.hashr   Zscapy.libs.sixZlibsÚsixZscapy.compatr   r+   r)   r,   r*   r   Útyper   Ú	Exceptionr   Úwith_metaclassÚobjectr   r/   r0   r2   r3   r4   r5   r6   r   r   r   r   Ú<module>   s(   