3
\^E
                 @   s   d dl Z d dlZd dlZddlmZmZmZ y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| jdS t | tr"| S tdd S )Nzutf-8zExpected a string value)
isinstancer   decoder   	TypeError)value r   */tmp/pip-build-8app2_gc/PyJWT/jwt/utils.pyforce_unicode   s
    


r   c             C   s.   t | tr| jdS t | tr"| S tdd S )Nzutf-8zExpected a string value)r   r   encoder   r
   )r   r   r   r   force_bytes   s
    


r   c             C   sB   t | tr| jd} t| d }|dkr8| dd|  7 } tj| S )Nascii   r      =)r   r   r   lenbase64urlsafe_b64decode)inputremr   r   r   base64url_decode!   s    

r   c             C   s   t j| j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| jd} t| }tjdt| |}tdjdd |D dS )Nr   z%sB c             S   s   g | ]}d | qS )z%02xr   ).0Z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 y| j  }|j| W n2 ttfk
rP } ztd| W Y d d }~X 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    r3   c             C   s$   dd| | f }t j|jd}|S )Nz%0*x   r   )binasciia2b_hexr   )num	num_bytesZ
padded_hexZ
big_endianr   r   r   number_to_bytesT   s    r9   c             C   s   t tj| dS )Nr&   )r)   r5   b2a_hex)stringr   r   r   bytes_to_numberZ   s    r<   c             C   s2   |j }|d d }t| \}}t||t|| S )N      )key_sizer   r9   )Zder_sigcurvenum_bitsr8   rsr   r   r   der_to_raw_signature^   s    rD   c             C   sT   |j }|d d }t| d| kr*tdt| d | }t| |d  }t||S )Nr=   r>   r4   zInvalid signature)r?   r   r   r<   r   )Zraw_sigr@   rA   r8   rB   rC   r   r   r   raw_to_der_signatureg   s    rE   )r   r5   r'   compatr   r   r   Z/cryptography.hazmat.primitives.asymmetric.utilsr   r   ImportErrorr   r   r   r   r"   r-   r3   r9   r<   rD   rE   r   r   r   r   <module>   s$   		
	