o
    €ÝhE
  ã                   @   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   úQ/var/www/html/magazine_api/magazine_env/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!   )ÚvalZ	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
   

r1   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   )ÚoriginalZupdatesZmerged_optionsÚer   r   r   Ú
merge_dictG   s   ý€ÿr7   c                 C   s$   dd| | f }t  | d¡¡}|S )Nz%0*xé   r   )ÚbinasciiÚa2b_hexr   )ÚnumÚ	num_bytesZ
padded_hexZ
big_endianr   r   r   Únumber_to_bytesT   s   r=   c                 C   s   t t | ¡dƒS )Nr*   )r-   r9   Úb2a_hex)Ústringr   r   r   Úbytes_to_numberZ   s   r@   c                 C   s2   |j }|d d }t| ƒ\}}t||ƒt||ƒ S )Né   é   )Úkey_sizer   r=   )Zder_sigÚcurveÚnum_bitsr<   ÚrÚsr   r   r   Úder_to_raw_signature^   s   rH   c                 C   sT   |j }|d d }t| ƒd| krtdƒ‚t| d |… ƒ}t| |d … ƒ}t||ƒS )NrA   rB   r8   zInvalid signature)rC   r   r#   r@   r   )Zraw_sigrD   rE   r<   rF   rG   r   r   r   Úraw_to_der_signatureg   s   
rI   )r   r9   r+   Úcompatr   r   r   Z/cryptography.hazmat.primitives.asymmetric.utilsr   r   ÚImportErrorr   r   r   r!   r%   r1   r7   r=   r@   rH   rI   r   r   r   r   Ú<module>   s(    ÿ		
	