
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
kZE
                 @   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   /usr/lib/python3.6/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base64Zurlsafe_b64decode)inputZremr   r   r   base64url_decode!   s    

r   c             C   s   t j| jddS )Nr       )r   Z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   dataZ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
   )ZoriginalZupdatesZmerged_optionser   r   r   
merge_dictG   s    r.   c             C   s$   dd| | f }t j|jd}|S )Nz%0*x   r   )binasciiZa2b_hexr   )Znum	num_bytesZ
padded_hexZ
big_endianr   r   r   number_to_bytesT   s    r2   c             C   s   t tj| dS )Nr#   )r&   r0   Zb2a_hex)stringr   r   r   bytes_to_numberZ   s    r4   c             C   s2   |j }|d d }t| \}}t||t|| S )N      )key_sizer   r2   )Zder_sigcurvenum_bitsr1   rsr   r   r   der_to_raw_signature^   s    r<   c             C   sT   |j }|d d }t| d| kr*tdt| d | }t| |d  }t||S )Nr5   r6   r/   zInvalid signature)r7   r   r   r4   r   )Zraw_sigr8   r9   r1   r:   r;   r   r   r   raw_to_der_signatureg   s    r=   )r   r0   r$   compatr   r   r   Z/cryptography.hazmat.primitives.asymmetric.utilsr   r   ImportErrorr   r   r   r   r   r)   r.   r2   r4   r<   r=   r   r   r   r   <module>   s$   		
	