U
    Ë¹Öh0  ã                   @   sp   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mZmZ dd„ ZG dd	„ d	eƒZdS )
é    N)ÚKey)Ú
ALGORITHMS)ÚJWKError)Úbase64url_decodeÚbase64url_encodeÚis_pem_formatÚ
is_ssh_keyc                 C   s   t t | ¡ƒS ©N)ÚbytesÚosÚurandom)Z	num_bytes© r   ú:./venv/lib/python3.8/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                 C   s–   |t jkrtd| ƒ‚|| _| j |¡| _t|tƒrD|  	|¡| _
d S t|tƒs`t|tƒs`tdƒ‚t|tƒrt| d¡}t|ƒs„t|ƒrŒtdƒ‚|| _
d S )Nz*hash_alg: %s is not a valid hash algorithmz+Expecting a string- or bytes-formatted key.úutf-8zdThe specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.)r   ZHMACr   Ú
_algorithmÚHASHESÚgetÚ	_hash_algÚ
isinstanceÚdictÚ_process_jwkÚprepared_keyÚstrr
   Úencoder   r   )ÚselfÚkeyÚ	algorithmr   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   /   s    

zHMACKey._process_jwkc                 C   s   t  | j|| j¡ ¡ S r	   )ÚhmacÚnewr   r   Zdigest)r   Úmsgr   r   r   Úsign:   s    zHMACKey.signc                 C   s   t  ||  |¡¡S r	   )r#   Zcompare_digestr&   )r   r%   Zsigr   r   r   Úverify=   s    zHMACKey.verifyc                 C   s   | j dt| jƒ d¡dœS )Nr!   ÚASCII)Zalgr    r"   )r   r   r   Údecode)r   r   r   r   Úto_dict@   s    ýzHMACKey.to_dictN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ZHS256ÚhashlibZsha256ZHS384Zsha384ZHS512Zsha512r   r   r   r&   r'   r*   r   r   r   r   r      s   r   )r/   r#   r   Zjose.backends.baser   Zjose.constantsr   Zjose.exceptionsr   Z
jose.utilsr   r   r   r   r   r   r   r   r   r   Ú<module>   s   