ó
t0^c           @   s"  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z m Z m Z m	 Z	 m
 Z
 e
 j d  Z e	 j j e
 j d   Z d e j f d     YZ d e j f d	     YZ d
 e j f d     YZ d e j f d     YZ d e j f d     YZ e d k re j   n  d S(   s   Tests for josepy.jws.i˙˙˙˙N(   t   errorst	   json_utilt   jwat   jwkt	   test_utils   cert.pems   rsa512_key.pemt   MediaTypeTestc           B   s    e  Z d  Z d   Z d   Z RS(   s   Tests for josepy.jws.MediaType.c         C   s_   d d l  m } |  j d | j d   |  j d | j d   |  j t j | j d  d  S(   Ni˙˙˙˙(   t	   MediaTypes   application/appt   apps   app;foo(   t
   josepy.jwsR   t   assertEqualt   decodet   assertRaisesR    t   DeserializationError(   t   selfR   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_decode   s
    c         C   sF   d d l  m } |  j d | j d   |  j d | j d   d  S(   Ni˙˙˙˙(   R   R   s   application/apps   application/app;foo(   R   R   R	   t   encode(   R   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_encode   s    	(   t   __name__t
   __module__t   __doc__R   R   (    (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyR      s   	t
   HeaderTestc           B   sV   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 RS(	   s   Tests for josepy.jws.Header.c         C   sV   d d l  m } | d d  |  _ | d d  |  _ | d d	  |  _ |   |  _ d  S(
   Ni˙˙˙˙(   t   HeaderR   t   foot   bart   critt   at   b(   R   R   (   R   R   t   header1t   header2R   t   empty(   R   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   setUp"   s
    c         C   s=   d d l  m } |  j | d d d d  |  j |  j  d  S(	   Ni˙˙˙˙(   R   R   R   R   R   R   (   R   R   (   R   R   R	   R   R   (   R   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_add_non_empty)   s    c         C   s>   |  j  |  j |  j |  j  |  j  |  j |  j |  j  d  S(   N(   R	   R   R   (   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_add_empty.   s    c         C   s    |  j  t |  j j |  j  d  S(   N(   R   t	   TypeErrorR   t   __add__R   (   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_add_overlapping_error2   s    c         C   s   |  j  t |  j j d  d  S(   Nt   xxx(   R   R!   R   R"   (   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_add_wrong_type_error5   s    c         C   s:   d d l  m } |  j t j | j i d d g d 6 d  S(   Ni˙˙˙˙(   R   R   R   R   (   R   R   R   R    R   t	   from_json(   R   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_crit_decode_always_errors8   s    c         C   sĚ   d d l  m } | d t t f  } | j   } t j j t j j t j  } t	 j
 |  } |  j | i | | g d 6 |  j | | j |   t	 j
 d |  | d d <|  j t j | j |  d  S(   Ni˙˙˙˙(   R   t   x5cR$   i    (   R   R   t   CERTt   to_partial_jsont   OpenSSLt   cryptot   dump_certificatet   FILETYPE_ASN1t   wrappedt   base64t	   b64encodeR	   R&   R   R    R   (   R   R   t   headert   jobjt	   cert_asn1t   cert_b64(    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_x5c_decoding=   s    	c         C   sO   |  j  d |  j j    |  j  d |  j j    |  j t j |  j j  d  S(   NR   R   (   R	   R   t   find_keyR   R   R    t   ErrorR   (   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_find_keyI   s    (   R   R   R   R   R   R    R#   R%   R'   R6   R9   (    (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyR      s   							t   SignatureTestc           B   s    e  Z d  Z d   Z d   Z RS(   s   Tests for josepy.jws.Signature.c         C   sm   d d l  m } d d l  m } |  j | d d d | d t j   | j i d d 6i d	 d 6d 6  d  S(
   Ni˙˙˙˙(   R   (   t	   Signaturet	   signatureR   R2   t   algt   Zm9vt   RS256(   R   R   R;   R	   R   R?   R&   (   R   R   R;   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_from_jsonR   s    c         C   s4   d d l  m } |  j t j | j i d d 6 d  S(   Ni˙˙˙˙(   R;   R   R<   (   R   R;   R   R    R   R&   (   R   R;   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_from_json_no_alg_errorZ   s    (   R   R   R   R@   RA   (    (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyR:   O   s   	t   JWSTestc           B   sz   e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z RS(   s   Tests for josepy.jws.JWS.c         C   sĹ   t  |  _ |  j j   |  _ d d l m } | j d d d |  j d t j  |  _	 | j d d d |  j d t j d t
 d d g   |  _ | j d d d |  j d t j d t
 d g   |  _ d  S(	   Ni˙˙˙˙(   t   JWSt   payloadR   t   keyR=   t   protectR   (   t   KEYt   privkeyt
   public_keyt   pubkeyR   RC   t   signR   R?   t   unprotectedt	   frozensett	   protectedt   mixed(   R   RC   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyR   c   s    				c         C   sa   |  j  |  j j j j |  j  |  j  |  j j j j |  j  |  j  |  j j j j |  j  d  S(   N(   R	   RL   R<   t   combinedR   RJ   RN   RO   (   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_pubkey_jwkq   s    c         C   s   |  j  |  j j    d  S(   N(   t
   assertTrueRL   t   verify(   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_sign_unprotectedv   s    c         C   s   |  j  |  j j    d  S(   N(   RR   RN   RS   (   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_sign_protectedy   s    c         C   s   |  j  |  j j    d  S(   N(   RR   RO   RS   (   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_sign_mixed|   s    c         C   s   |  j  j   } |  j d |  d d l m } | j |  } |  j |  j  |  |  j t d g  t | j j	 j
     d  S(   Nsr   eyJhbGciOiAiUlMyNTYifQ.Zm9v.OHdxFVj73l5LpxbFp1AmYX4yJM0Pyb_893n1zQjpim_eLS5J1F61lkvrCrCDErTEJnBGOGesJ72M7b6Ve1cAJAi˙˙˙˙(   RC   R=   (   RO   t
   to_compactR	   R   RC   t   from_compactt   assertNotEqualt   setR<   RP   t   not_omitted(   R   t   compactRC   RO   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_compact_lost_unprotected   s    c         C   s-   d d l  m } |  j t j | j d  d  S(   Ni˙˙˙˙(   RC   t   .(   R   RC   R   R    R   RX   (   R   RC   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt$   test_from_compact_missing_components   s    c         C   s°   |  j  j d t  } |  j j d t  } |  j d | k  |  j d | k  | d j   | d <d d l m } |  j | j	 |  |  j   |  j | j	 |  |  j  d  S(   Nt   flatRN   R2   i˙˙˙˙(   RC   (
   RN   R*   t   TrueRL   RR   t   to_jsonR   RC   R	   R&   (   R   t   protected_jobjt   unprotected_jobjRC   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_json_omitempty   s    c         C   sĐ   i t  j |  j j j  d 6t  j d  d 6|  j j j d 6t  j |  j j j j d   d 6} | j   } | d j   | d <|  j	 |  j j
 d t  |  d d	 l m } |  j	 |  j | j |   d  S(
   NR<   R   RD   R2   s   utf-8RN   R`   i˙˙˙˙(   RC   (   R   t   encode_b64joseRO   R<   R2   RN   R   t   copyRb   R	   R*   Ra   R   RC   R&   (   R   t   jobj_tot	   jobj_fromRC   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_json_flat   s    c         C   s   i |  j  j f d 6t j d  d 6} | j   } | d d j   g | d <|  j |  j  j d t  |  d d l	 m
 } |  j |  j  | j |   d  S(   Nt
   signaturesR   RD   i    R`   i˙˙˙˙(   RC   (   RO   R<   R   Rf   Rg   Rb   R	   R*   t   FalseR   RC   R&   (   R   Rh   Ri   RC   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_json_not_flatŽ   s    c         C   s;   d d l  m } |  j t j | j i d d 6d d 6 d  S(   Ni˙˙˙˙(   RC   Rk   R   R<   (    (   R   RC   R   R    R   R&   (   R   RC   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_from_json_mixed_flatş   s    c         C   s0   d d l  m } t | j |  j j     d  S(   Ni˙˙˙˙(   RC   (   R   RC   t   hashR&   RO   Rb   (   R   RC   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_from_json_hashableż   s    (   R   R   R   R   RQ   RT   RU   RV   R]   R_   Re   Rj   Rm   Rn   Rp   (    (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyRB   `   s   											t   CLITestc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s   t  j d  |  _ d  S(   Ns   rsa512_key.pem(   R   t   vector_patht   key_path(   R   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyR   Ć   s    c         C   sj   d d l  m } t j d  E } d | j _ t j d  ! |  j d | j d g   Wd  QXWd  QXd  S(   Ni˙˙˙˙(   t   CLIs	   sys.stdins&   {"payload": "foo", "signature": "xxx"}s
   sys.stdoutRS   (   R   Rt   t   mockt   patcht   readt   return_valueR	   t   run(   R   Rt   t   sin(    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_unverifiedÉ   s
    c         C   sŻ   d d l  m } t j d   } d | j _ t j d  f } | j d d |  j d d	 d
 d g  | j j	 d d d | j _ |  j
 d | j d g   Wd  QXWd  QXd  S(   Ni˙˙˙˙(   Rt   s	   sys.stdinR   s
   sys.stdoutRK   s   -ks   -aR?   s   -pR   i    i   RS   (   R   Rt   Ru   Rv   Rw   Rx   Ry   Rs   t   writet
   mock_callsR	   (   R   Rt   Rz   t   sout(    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt	   test_jsonĐ   s    c         C   s¸   d d l  m } t j d   } d | j _ t j d  o } | j d d d |  j g  | j j	 d	 d
 d	 | j _ |  j
 d	 | j d d d d d |  j g   Wd  QXWd  QXd  S(   Ni˙˙˙˙(   Rt   s	   sys.stdinR   s
   sys.stdouts	   --compactRK   s   -ki    i   RS   s   --ktyt   RSA(   R   Rt   Ru   Rv   Rw   Rx   Ry   Rs   R|   R}   R	   (   R   Rt   Rz   R~   (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   test_compactŰ   s    (   R   R   R   R{   R   R   (    (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyRq   Ä   s   			t   __main__(   R   R0   t   unittestRu   R+   t   josepyR    R   R   R   R   t   load_comparable_certR)   t   JWKRSAt   loadt   load_vectorRG   t   TestCaseR   R   R:   RB   Rq   R   t   main(    (    (    s3   /usr/lib/python2.7/site-packages/josepy/jws_test.pyt   <module>   s   (0d$