U
    ¶©ÞaE
  ã                   @   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
k
rT   Y nX 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   s.   t | tƒr|  d¡S t | tƒr"| S tdƒ‚d S ©Nzutf-8zExpected a string value)Ú
isinstancer   Údecoder   Ú	TypeError©Úvalue© r   úx/home/adriano.carvalho/ftp/files/BrinquedotecaVirtual/brinquedotecavirtual/venv/lib/python3.8/site-packages/jwt/utils.pyÚforce_unicode   s
    


r   c                 C   s.   t | tƒr|  d¡S t | tƒr"| S tdƒ‚d S r   )r	   r   Úencoder   r   r   r   r   r   Úforce_bytes   s
    


r   c                 C   sB   t | tƒr|  d¡} t| ƒd }|dkr8| 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
    

r/   c              
   C   sV   |s| S z|   ¡ }| |¡ W n2 ttfk
rP } ztd| ƒ‚W 5 d }~X Y nX |S )Nz-original and updates must be a dictionary: %s)ÚcopyÚupdateÚAttributeErrorr!   r   )ÚoriginalZupdatesZmerged_optionsÚer   r   r   Ú
merge_dictG   s    r5   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+   r7   Ú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    rF   c                 C   sT   |j }|d d }t| ƒd| kr*tdƒ‚t| d |… ƒ}t| |d … ƒ}t||ƒS )Nr?   r@   r6   zInvalid signature)rA   r   r!   r>   r   )Zraw_sigrB   rC   r:   rD   rE   r   r   r   Úraw_to_der_signatureg   s    rG   )r   r7   r)   Úcompatr   r   r   Z/cryptography.hazmat.primitives.asymmetric.utilsr   r   ÚImportErrorr   r   r   r   r#   r/   r5   r;   r>   rF   rG   r   r   r   r   Ú<module>   s$   		
	