??????????????????????
???  ?????????????????
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?   
   ????

(%	aA*?XYD?(J??E  RE,P XYae?)(E  2 B  R  	BQ    X?)X     ?  @  

adadasdasdasasdasdas


.....................................................................................................................................??????????????????????
???  
 JFIF      ?? C      


!"$"$?? C    
?? p 
" ??     
         ??             ?   
   ????

(%	aA*?XYD?(J??E  RE,P XYae?)(E  2 B  R  	BQ    X?)X     ?  @  

adadasdasdasasdasdas


.....................................................................................................................................ó
›t0^c           @   sC  d  Z  d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l m	 Z	 d d l
 m Z d d l
 m Z d d l m Z d d l m Z d d l m Z m Z m Z e j e ƒ Z d	 e j f d
 „  ƒ  YZ e j d e f d „  ƒ  Yƒ Z e j d e f d „  ƒ  Yƒ Z e j d e f d „  ƒ  Yƒ Z d S(   s   JSON Web Key.iÿÿÿÿN(   t   default_backend(   t   hashes(   t   serialization(   t   ec(   t   rsa(   t   errorst	   json_utilt   utilt   JWKc           B   sŒ   e  Z d  Z d Z i  Z d Z e Z i d d 6d d 6e	 d 6Z
 e j d „ Z e j d „  ƒ Z e d d d	 „ ƒ Z e d d d
 „ ƒ Z RS(   s   JSON Web Key.t   ktyt   indentt   ,t   :t
   separatorst	   sort_keysc            sl   t  j | ƒ  d t ƒ  ƒ} | j t j t ‡  f d †  t j ˆ  j	 ƒ  ƒ Dƒ ƒ ˆ  j
  j ƒ  ƒ | j ƒ  S(   sg   Compute JWK Thumbprint.

        https://tools.ietf.org/html/rfc7638

        :returns: bytes

        t   backendc         3   s0   |  ]& \ } } | ˆ  j  k r | | f Vq d  S(   N(   t   required(   t   .0t   kt   v(   t   self(    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pys	   <genexpr>3   s    	(   R   t   HashR    t   updatet   jsont   dumpst   dictt   sixt	   iteritemst   to_jsont   _thumbprint_json_dumps_paramst   encodet   finalize(   R   t   hash_functiont   digest(    (   R   s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyt
   thumbprint)   s
    (c         C   s   t  ƒ  ‚ d S(   si   Generate JWK with public key.

        For symmetric cryptosystems, this would return ``self``.

        N(   t   NotImplementedError(   R   (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyt
   public_key8   s    c         C   s÷   | d  k r t ƒ  n | } i  } x] t j t j f D]I } y | | | | ƒ SWq4 t t t j j	 f k
 r| } | | | <q4 Xq4 WxW t j
 t j f D]C } y | | | ƒ SWq” t t j j	 f k
 rÖ } | | | <q” Xq” Wt j d j | ƒ ƒ ‚ d  S(   Ns   Unable to deserialize key: {0}(   t   NoneR    R   t   load_pem_private_keyt   load_der_private_keyt
   ValueErrort	   TypeErrort   cryptographyt
   exceptionst   UnsupportedAlgorithmt   load_pem_public_keyt   load_der_public_keyR   t   Errort   format(   t   clst   datat   passwordR   R+   t   loadert   error(    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyt   _load_cryptography_keyA   s"    		c         C   sí   y |  j  | | | ƒ } Wn0 t j k
 rK } t j d | ƒ t d | ƒ SX|  j t k	 r’ t | |  j	 ƒ r’ t j d j
 | j |  j ƒ ƒ ‚ n  x9 t j |  j ƒ D]% } t | | j	 ƒ r¥ | d | ƒ Sq¥ Wt j d j
 | j ƒ ƒ ‚ d S(   s°  Load serialized key as JWK.

        :param str data: Public or private key serialized as PEM or DER.
        :param str password: Optional password.
        :param backend: A `.PEMSerializationBackend` and
            `.DERSerializationBackend` provider.

        :raises errors.Error: if unable to deserialize, or unsupported
            JWK algorithm

        :returns: JWK of an appropriate type.
        :rtype: `JWK`

        s,   Loading symmetric key, asymmetric failed: %st   keys"   Unable to deserialize {0} into {1}s   Unsupported algorithm: {0}N(   R6   R   R/   t   loggert   debugt   JWKOctt   typt   NotImplementedt
   isinstancet   cryptography_key_typesR0   t	   __class__R   t
   itervaluest   TYPES(   R1   R2   R3   R   R7   R5   t   jwk_cls(    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyt   load[   s    (    N(   R   R   (   t   __name__t
   __module__t   __doc__t   type_field_nameRA   R>   R<   R   R%   t   TrueR   R   t   SHA256R"   t   abct   abstractmethodR$   t   classmethodR6   RC   (    (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyR      s   
	t   JWKESc           B   s\   e  Z d  Z d Z e j e j f Z d e j	 d d f Z
 d „  Z e d „  ƒ Z d „  Z RS(   s<   ES JWK.

    .. warning:: This is not yet implemented!

    t   ESt   crvt   xt   yc         C   s   t  ƒ  ‚ d  S(   N(   R#   (   R   (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyt   fields_to_partial_jsonˆ   s    c         C   s   t  ƒ  ‚ d  S(   N(   R#   (   R1   t   jobj(    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyt   fields_from_json‹   s    c         C   s   t  ƒ  ‚ d  S(   N(   R#   (   R   (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyR$      s    (   RD   RE   RF   R;   R   t   EllipticCurvePublicKeyt   EllipticCurvePrivateKeyR>   R   RG   R   RR   RL   RT   R$   (    (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyRM   {   s   	R:   c           B   sJ   e  Z d  Z d Z d Z d e j f Z d „  Z e	 d „  ƒ Z
 d „  Z RS(   s   Symmetric JWK.t   octR7   R   c         C   s   i t  j |  j ƒ d 6S(   NR   (   R   t   encode_b64joseR7   (   R   (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyRR   š   s    c         C   s   |  d t  j | d ƒ ƒ S(   NR7   R   (   R   t   decode_b64jose(   R1   RS   (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyRT   ¡   s    c         C   s   |  S(   N(    (   R   (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyR$   ¥   s    (   s   key(   RD   RE   RF   R;   t	   __slots__R   RG   R   RR   RL   RT   R$   (    (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyR:   “   s   	t   JWKRSAc           B   s†   e  Z d  Z d Z e j e j f Z d Z d e	 j
 d f Z d „  Z e d „  ƒ Z e d „  ƒ Z d „  Z e d	 „  ƒ Z d
 „  Z RS(   sî   RSA JWK.

    :ivar key: :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPrivateKey`
        or :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey` wrapped
        in :class:`~josepy.util.ComparableRSAKey`

    t   RSAR7   t   et   nc         O   sZ   d | k r= t  | d t j ƒ r= t j | d ƒ | d <n  t t |  ƒ j | | Ž  d  S(   NR7   (   R=   R   t   ComparableRSAKeyt   superR[   t   __init__(   R   t   argst   kwargs(    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyRa   ·   s    c         C   s8   d „  } t  j t j | t | ƒ d j d ƒ ƒ ƒ ƒ S(   sQ   Encode Base64urlUInt.

        :type data: long
        :rtype: unicode

        c         S   s   t  |  ƒ d r d |  S|  S(   Ni   t   0(   t   len(   t   arg(    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyt   _leading_zerosÅ   s    i   t   L(   R   RX   t   binasciit	   unhexlifyt   hext   rstrip(   R1   R2   Rg   (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyt   _encode_param½   s    	c         C   sG   y# t  t j t j | ƒ ƒ d ƒ SWn t k
 rB t j ƒ  ‚ n Xd S(   s   Decode Base64urlUInt.i   N(   t   intRi   t   hexlifyR   RY   R(   R   t   DeserializationError(   R1   R2   (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyt   _decode_paramÍ   s    #c         C   s   t  |  ƒ d |  j j ƒ  ƒ S(   NR7   (   t   typeR7   R$   (   R   (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyR$   Õ   s    c            sÌ  ‡  ‡ f d †  d Dƒ \ } } t  j d | d | ƒ } d ˆ k rX | j t ƒ  ƒ } ngˆ  j ˆ d ƒ } d ˆ k s³ d ˆ k s³ d ˆ k s³ d ˆ k s³ d	 ˆ k s³ d
 ˆ k rAt ‡ f d †  d Dƒ ƒ \ } } }	 }
 } } t d „  | Dƒ ƒ rt j d j | ƒ ƒ ‚ n  t ‡  f d †  | Dƒ ƒ \ } } }	 }
 } nQ t  j	 | | | ƒ \ } } t  j
 | | ƒ }	 t  j | | ƒ }
 t  j | | ƒ } t  j | | | |	 |
 | | ƒ j t ƒ  ƒ } ˆ  d | ƒ S(   Nc         3   s"   |  ] } ˆ  j  ˆ | ƒ Vq d  S(   N(   Rq   (   R   RP   (   R1   RS   (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pys	   <genexpr>Û   s    R^   R]   t   dt   pt   qt   dpt   dqt   qit   othc         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   t   get(   R   RP   (   RS   (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pys	   <genexpr>é   s    c         s   s!   |  ] } | d  k r | Vq d  S(   N(   R%   (   R   t   param(    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pys	   <genexpr>ê   s    s(   Some private parameters are missing: {0}c         3   s   |  ] } ˆ  j  | ƒ Vq d  S(   N(   Rq   (   R   RP   (   R1   (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pys	   <genexpr>ï   s    R7   (   R^   R]   (   Rt   Ru   s   dps   dqs   qi(   R   t   RSAPublicNumbersR$   R    Rq   t   tupleR   R/   R0   t   rsa_recover_prime_factorst   rsa_crt_dmp1t   rsa_crt_dmq1t   rsa_crt_iqmpt   RSAPrivateNumberst   private_key(   R1   RS   R^   R]   t   public_numbersR7   Rs   Rt   Ru   Rv   Rw   Rx   t
   all_params(    (   R1   RS   s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyRT   Ø   s.    $$,+c            sá   t  ˆ  j j t j ƒ rD ˆ  j j ƒ  } i | j d 6| j d 6} nz ˆ  j j ƒ  } ˆ  j j	 ƒ  j ƒ  } i | j d 6| j d 6| j
 d 6| j d 6| j d 6| j d 6| j d 6| j d 6} t ‡  f d	 †  t j | ƒ Dƒ ƒ S(
   NR^   R]   Rs   Rt   Ru   Rv   Rw   Rx   c         3   s*   |  ]  \ } } | ˆ  j  | ƒ f Vq d  S(   N(   Rm   (   R   R7   t   value(   R   (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pys	   <genexpr>  s   (   R=   R7   t   _wrappedR   t   RSAPublicKeyR„   R^   R]   t   private_numbersR$   Rs   Rt   Ru   t   dmp1t   dmq1t   iqmpR   R   R   (   R   t   numberst   paramst   privatet   public(    (   R   s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyRR   ÿ   s$    







(   s   key(   RD   RE   RF   R;   R   Rˆ   t   RSAPrivateKeyR>   RZ   R   RG   R   Ra   RL   Rm   Rq   R$   RT   RR   (    (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyR[   ©   s   		'(   RF   RJ   Ri   R   t   loggingt   cryptography.exceptionsR*   R   t   cryptography.hazmat.backendsR    t   cryptography.hazmat.primitivesR   R   t)   cryptography.hazmat.primitives.asymmetricR   R   t   josepyR   R   R   t	   getLoggerRD   R8   t   TypedJSONObjectWithFieldsR   t   registerRM   R:   R[   (    (    (    s.   /usr/lib/python2.7/site-packages/josepy/jwk.pyt   <module>   s(   g			