o
    6Î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)Ú	num_bytes© r   úh/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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vrtd| ƒ‚|| _| j |¡| _t|tƒr"|  	|¡| _
d S t|tƒs0t|tƒs0tdƒ‚t|tƒr:| d¡}t|ƒsBt|ƒrFt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   Ú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   Újwk_dictr$   r   r   r   r   /   s   

zHMACKey._process_jwkc                 C   s   t  | j|| j¡ ¡ S r	   )ÚhmacÚnewr   r   Údigest)r   Úmsgr   r   r   Úsign:   s   zHMACKey.signc                 C   s   t  ||  |¡¡S r	   )r&   Úcompare_digestr*   )r   r)   Úsigr   r   r   Úverify=   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_dict@   s   ýzHMACKey.to_dictN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚHS256ÚhashlibÚsha256ÚHS384Úsha384ÚHS512Úsha512r   r!   r   r*   r-   r1   r   r   r   r   r      s    r   )r7   r&   r   Újose.backends.baser   Újose.constantsr   Újose.exceptionsr   Ú
jose.utilsr   r   r   r   r   r   r   r   r   r   Ú<module>   s    