o
    6d                     @   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   kC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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r"| 	 | _
d S t ts0t ts0tdt tr: d g d}t fdd|D rMt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>.   s    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.   r2   r   r   r   r   r      s    r   )r7   r'   r	   Zjose.backends.baser   Zjose.constantsr   Zjose.exceptionsr   Z
jose.utilsr   r   r   r   r   r   r   r   <module>   s    