
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    _	                     @   s  d dl Z d dlZd dlmZmZ z d dlmZ d dlmZm	Z	 W n e
k
rX   eZY nX eeef edddZeeef edd	d
ZeedddZeedddZeeef edddZeeedddZeedddZeedddZeeedddZeeedddZdS )     N)AnyUnion)EllipticCurve)decode_dss_signatureencode_dss_signature)valuereturnc                 C   s.   t | tr| dS t | tr"| S tdd S )Nzutf-8zExpected a string value)
isinstancestrencodebytes	TypeError)r    r   :/opt/alt/python38/lib/python3.8/site-packages/jwt/utils.pyforce_bytes   s
    


r   )inputr   c                 C   sB   t | tr| d} t| d }|dkr8| dd|  7 } t| S )Nascii   r      =)r	   r
   r   lenbase64Zurlsafe_b64decode)r   Zremr   r   r   base64url_decode   s    

r   c                 C   s   t | ddS )Nr       )r   Zurlsafe_b64encodereplace)r   r   r   r   base64url_encode$   s    r   )valr   c                 C   s0   | dk rt dt| }t|dkr(d}t|S )Nr   zMust be a positive integer    )
ValueErrorbytes_from_intr   r   )r   Z	int_bytesr   r   r   to_base64url_uint(   s    r   c                 C   s*   t | tr| d} t| }tj|ddS )Nr   big)	byteorder)r	   r
   r   r   int
from_bytes)r   datar   r   r   from_base64url_uint4   s    

r%   )num	num_bytesr   c                 C   s$   dd| | f }t |d}|S )Nz%0*x   r   )binasciiZa2b_hexr   )r&   r'   Z
padded_hexZ
big_endianr   r   r   number_to_bytes<   s    r*   )stringr   c                 C   s   t t| dS )N   )r"   r)   Zb2a_hex)r+   r   r   r   bytes_to_numberB   s    r-   c                 C   s2   | }d}|dkr"|d? }|d7 }q| j |dddS )Nr         r    F)Zsigned)to_bytes)r   	remainingZbyte_lengthr   r   r   r   F   s    
r   )der_sigcurver   c                 C   s2   |j }|d d }t| \}}t||t|| S )N   r.   )key_sizer   r*   )r2   r3   num_bitsr'   rsr   r   r   der_to_raw_signatureQ   s    r9   )raw_sigr3   r   c                 C   sT   |j }|d d }t| d| kr*tdt| d | }t| |d  }t||S )Nr4   r.   r(   zInvalid signature)r5   r   r   r-   r   )r:   r3   r6   r'   r7   r8   r   r   r   raw_to_der_signatureZ   s    r;   )r   r)   typingr   r   Z,cryptography.hazmat.primitives.asymmetric.ecr   Z/cryptography.hazmat.primitives.asymmetric.utilsr   r   ModuleNotFoundErrorr
   r   r   r   r   r"   r   r%   r*   r-   r   r9   r;   r   r   r   r   <module>   s"   
		