
    Nj0                     |    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 Z G d de          ZdS )	    N)Key)
ALGORITHMS)JWKError)base64url_decodebase64url_encodeis_pem_format
is_ssh_keyc                 D    t          t          j        |                     S N)bytesosurandom)	num_bytess    h/lsinfo/ai/hellotax_ai/training_center/backend/venv/lib/python3.11/site-packages/jose/backends/native.pyget_random_bytesr      s    I&&'''    c                   |    e Zd ZdZej        ej        ej        ej	        ej
        ej        iZd Zd Zd Zd Zd ZdS )HMACKeyzf
    Performs signing and verification operations using HMAC
    and the specified hash function.
    c                 "   |t           j        vrt          d|z            || _        | j                            |          | _        t          |t                    r| 	                    |          | _
        d S t          |t                    s$t          |t                    st          d          t          |t                    r|                    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   HMACr   
_algorithmHASHESget	_hash_alg
isinstancedict_process_jwkprepared_keystrr   encoder   r	   )selfkey	algorithms      r   __init__zHMACKey.__init__   s   JO++G)STTT#33c4   	 $ 1 1# 6 6DF#s## 	JJsE,B,B 	JHIIIc3 	&**W%%C 	C 	9  
  r   c                    |                     d          dk    s%t          d|                     d          z            |                     d          }|                    d          }t          |          }t	          |          }|S )Nktyoctz1Incorrect key type. Expected: 'oct', Received: %skr   )r   r   r!   r   r   )r"   jwk_dictr)   s      r   r   zHMACKey._process_jwk/   s|    ||E""e++NQYQ]Q]^cQdQddeeeLLHHW!HHQr   c                 f    t          j        | j        || j                                                  S r   )hmacnewr   r   digest)r"   msgs     r   signzHMACKey.sign:   s'    x)3??FFHHHr   c                 R    t          j        ||                     |                    S r   )r,   compare_digestr0   )r"   r/   sigs      r   verifyzHMACKey.verify=   s    "3		#777r   c                 b    | j         dt          | j                                      d          dS )Nr(   ASCII)algr'   r)   )r   r   r   decode)r"   s    r   to_dictzHMACKey.to_dict@   s5    ?!$"344;;GDD
 
 	
r   N)__name__
__module____qualname____doc__r   HS256hashlibsha256HS384sha384HS512sha512r   r%   r   r0   r4   r9    r   r   r   r      s         
 
0@'.R\RbdkdrsF     0	 	 	I I I8 8 8
 
 
 
 
r   r   )r?   r,   r   jose.backends.baser   jose.constantsr   jose.exceptionsr   
jose.utilsr   r   r   r	   r   r   rE   r   r   <module>rJ      s      				 " " " " " " % % % % % % $ $ $ $ $ $ T T T T T T T T T T T T( ( (6
 6
 6
 6
 6
c 6
 6
 6
 6
 6
r   