a
    `Émgñ  ã                   @   sh   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZ dd„ ZG dd	„ d	eƒZdS )
é    N)ÚKey)Ú
ALGORITHMS)ÚJWKError)Úbase64url_decodeÚbase64url_encodec                 C   s   t t | ¡ƒS ©N)ÚbytesÚosÚurandom)Ú	num_bytes© r   úK/var/www/html/idle/venv/lib/python3.9/site-packages/jose/backends/native.pyÚget_random_bytes   s    r   c                   @   sT   e Zd ZdZejejejej	ej
ejiZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚHMACKeyzf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                    s¤   |t jvrtd| ƒ‚|| _| j |¡| _tˆ tƒrD|  	ˆ ¡| _
d S tˆ tƒs`tˆ tƒs`tdƒ‚tˆ tƒrtˆ  d¡‰ g d¢}t‡ fdd„|D ƒƒrštdƒ‚ˆ | _
d S )Nz*hash_alg: %s is not a valid hash algorithmz+Expecting a string- or bytes-formatted key.úutf-8)s   -----BEGIN PUBLIC KEY-----s   -----BEGIN RSA PUBLIC KEY-----s   -----BEGIN CERTIFICATE-----s   ssh-rsac                 3   s   | ]}|ˆ v V  qd S r   r   )Ú.0Zstring_value©Úkeyr   r   Ú	<genexpr>.   ó    z#HMACKey.__init__.<locals>.<genexpr>zdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   ÚHMACr   Ú
_algorithmÚHASHESÚgetÚ	_hash_algÚ
isinstanceÚdictÚ_process_jwkÚprepared_keyÚstrr   ÚencodeÚany)Úselfr   Ú	algorithmZinvalid_stringsr   r   r   Ú__init__   s"    



ÿzHMACKey.__init__c                 C   sH   |  d¡dks td|  d¡ ƒ‚|  d¡}| d¡}t|ƒ}t|ƒ}|S )NÚktyÚoctz1Incorrect key type. Expected: 'oct', Received: %sÚkr   )r   r   r    r   r   )r"   Zjwk_dictr'   r   r   r   r   6   s    

zHMACKey._process_jwkc                 C   s   t  | j|| j¡ ¡ S r   )ÚhmacÚnewr   r   Údigest)r"   Úmsgr   r   r   ÚsignA   s    zHMACKey.signc                 C   s   t  ||  |¡¡S r   )r(   Úcompare_digestr,   )r"   r+   Úsigr   r   r   ÚverifyD   s    zHMACKey.verifyc                 C   s   | j dt| jƒ d¡dœS )Nr&   ÚASCII)Úalgr%   r'   )r   r   r   Údecode)r"   r   r   r   Úto_dictG   s    ýzHMACKey.to_dictN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ZHS256ÚhashlibÚsha256ZHS384Úsha384ZHS512Úsha512r   r$   r   r,   r/   r3   r   r   r   r   r      s   r   )r8   r(   r	   Zjose.backends.baser   Zjose.constantsr   Zjose.exceptionsr   Z
jose.utilsr   r   r   r   r   r   r   r   Ú<module>   s   