
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
“k®ZE
  ã               @   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$   		
	