o
    kÒYiE
  ã                   @   s°   d dl Z d dlZd dlZddlmZmZmZ z
d dlmZm	Z	 W n	 e
y)   Y nw dd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    Né   )Úbinary_typeÚbytes_from_intÚ	text_type)Údecode_dss_signatureÚencode_dss_signaturec                 C   ó*   t | tƒr
|  d¡S t | tƒr| S tdƒ‚©Nzutf-8zExpected a string value)Ú
isinstancer   Údecoder   Ú	TypeError©Úvalue© r   úM/var/www/html/asistente-voz-ia/venv/lib/python3.10/site-packages/jwt/utils.pyÚforce_unicode   ó
   


r   c                 C   r   r	   )r
   r   Úencoder   r   r   r   r   r   Úforce_bytes   r   r   c                 C   sB   t | tƒr
|  d¡} t| ƒd }|dkr| dd|  7 } t | ¡S )NÚasciié   r   ó   =)r
   r   r   ÚlenÚbase64Úurlsafe_b64decode)ÚinputÚremr   r   r   Úbase64url_decode!   s   


r   c                 C   s   t  | ¡ dd¡S )Nr   ó    )r   Úurlsafe_b64encodeÚreplace)r   r   r   r   Úbase64url_encode-   s   r!   c                 C   s0   | dk rt dƒ‚t| ƒ}t|ƒdkrd}t|ƒS )Nr   zMust be a positive integeró    )Ú
ValueErrorr   r   r!   )ÚvalÚ	int_bytesr   r   r   Úto_base64url_uint1   s   r&   c                 C   sJ   t | tƒr
|  d¡} t| ƒ}t dt|ƒ |¡}td dd„ |D ƒ¡dƒS )Nr   z%sBÚ c                 S   s   g | ]}d | ‘qS )z%02xr   )Ú.0Úbyter   r   r   Ú
<listcomp>D   s    z'from_base64url_uint.<locals>.<listcomp>é   )	r
   r   r   r   ÚstructÚunpackr   ÚintÚjoin)r$   ÚdataÚbufr   r   r   Úfrom_base64url_uint=   s
   

r2   c              
   C   sJ   |s| S z|   ¡ }| |¡ W |S  ttfy$ } ztd| ƒ‚d }~ww )Nz-original and updates must be a dictionary: %s)ÚcopyÚupdateÚAttributeErrorr#   r   )ÚoriginalÚupdatesÚmerged_optionsÚer   r   r   Ú
merge_dictG   s   ý€ÿr:   c                 C   s$   dd| | f }t  | d¡¡}|S )Nz%0*xé   r   )ÚbinasciiÚa2b_hexr   )ÚnumÚ	num_bytesÚ
padded_hexÚ
big_endianr   r   r   Únumber_to_bytesT   s   rB   c                 C   s   t t | ¡dƒS )Nr+   )r.   r<   Úb2a_hex)Ústringr   r   r   Úbytes_to_numberZ   s   rE   c                 C   s2   |j }|d d }t| ƒ\}}t||ƒt||ƒ S )Né   é   )Úkey_sizer   rB   )Úder_sigÚcurveÚnum_bitsr?   ÚrÚsr   r   r   Úder_to_raw_signature^   s   rN   c                 C   sT   |j }|d d }t| ƒd| krtdƒ‚t| d |… ƒ}t| |d … ƒ}t||ƒS )NrF   rG   r;   zInvalid signature)rH   r   r#   rE   r   )Úraw_sigrJ   rK   r?   rL   rM   r   r   r   Úraw_to_der_signatureg   s   
rP   )r   r<   r,   Úcompatr   r   r   Ú/cryptography.hazmat.primitives.asymmetric.utilsr   r   ÚImportErrorr   r   r   r!   r&   r2   r:   rB   rE   rN   rP   r   r   r   r   Ú<module>   s(    ÿ		
	