
_P_U  ã               @   sŸ   d  d l  Z  d  d l Z y d  d l m Z m Z Wn e k
 rF Yn Xd d „  Z d d „  Z d d „  Z d	 d
 „  Z	 d d „  Z
 d d „  Z d d „  Z d S)é    N)Údecode_rfc6979_signatureÚencode_rfc6979_signaturec             C   s;   t  |  ƒ d } | d k r. |  d d | 7}  t j |  ƒ S)Né   r   ó   =)ÚlenÚbase64Zurlsafe_b64decode)ÚinputZrem© r	   ú+/usr/lib/python3/dist-packages/jwt/utils.pyÚ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   si   | s
 |  Sy |  j  ƒ  } | j | ƒ Wn; t t f k
 rd } z t d | ƒ ‚ WYd  d  } ~ Xn X| S)Nz-original and updates must be a dictionary: %s)ÚcopyÚupdateÚAttributeErrorÚ
ValueErrorÚ	TypeError)ZoriginalZupdatesZmerged_optionsÚer	   r	   r
   Ú
merge_dict   s    #r   c             C   s0   d d | |  f } t  j | j d ƒ ƒ } | S)Nz%0*xé   Úascii)ÚbinasciiZa2b_hexÚencode)ZnumÚ	num_bytesZ
padded_hexZ
big_endianr	   r	   r
   Únumber_to_bytes&   s    r   c             C   s   t  t j |  ƒ d ƒ S)Né   )Úintr   Zb2a_hex)Ústringr	   r	   r
   Úbytes_to_number,   s    r   c             C   sC   | j  } | d d } t |  ƒ \ } } t | | ƒ t | | ƒ S)Né   é   )Úkey_sizer   r   )Zder_sigÚcurveÚnum_bitsr   ÚrÚsr	   r	   r
   Úder_to_raw_signature0   s    	r'   c             C   sr   | j  } | d d } t |  ƒ d | k r9 t d ƒ ‚ t |  d  | … ƒ } t |  | d  … ƒ } t | | ƒ S)Nr    r!   r   zInvalid signature)r"   r   r   r   r   )Zraw_sigr#   r$   r   r%   r&   r	   r	   r
   Úraw_to_der_signature9   s    	r(   )r   r   Z/cryptography.hazmat.primitives.asymmetric.utilsr   r   ÚImportErrorr   r   r   r   r   r'   r(   r	   r	   r	   r
   Ú<module>   s   		