
íÂÐZH!  ã               @   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 Gd d „  d e j ƒ Z Gd d	 „  d	 e j ƒ Z Gd
 d „  d e j ƒ Z Gd d „  d e j ƒ Z Gd d „  d e j ƒ Z e d k re j ƒ  d S)zTests for josepy.jws.é    N)ÚerrorsÚ	json_utilÚjwaÚjwkÚ	test_utilzcert.pemzrsa512_key.pemc               @   s.   e  Z d  Z d Z d d „  Z d d „  Z d S)ÚMediaTypeTestz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)Nr   )Ú	MediaTypezapplication/appÚappzapp;foo)Ú
josepy.jwsr   ÚassertEqualÚdecodeÚassertRaisesr   ÚDeserializationError)Úselfr   © r   ú1/usr/lib/python3/dist-packages/josepy/jws_test.pyÚtest_decode   s
    zMediaTypeTest.test_decodec             C   sF   d d l  m } |  j d | j d ƒ ƒ |  j d | j d ƒ ƒ d  S)Nr   )r   r	   zapplication/appzapplication/app;foo)r
   r   r   Úencode)r   r   r   r   r   Útest_encode   s    	zMediaTypeTest.test_encodeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s   r   c               @   sv   e  Z d  Z 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)Ú
HeaderTestzTests for josepy.jws.Header.c             C   sV   d d l  m } | d d ƒ |  _ | d d ƒ |  _ | d d	 ƒ |  _ | ƒ  |  _ d  S)
Nr   )ÚHeaderr   ÚfooÚbarÚcritÚaÚb)r   r   )r
   r   Úheader1Úheader2r   Úempty)r   r   r   r   r   ÚsetUp"   s
    zHeaderTest.setUpc             C   s=   d d l  m } |  j | d d d d ƒ |  j |  j ƒ d  S)	Nr   )r   r   r   r   r   r   )r   r   )r
   r   r   r    r   )r   r   r   r   r   Útest_add_non_empty)   s    zHeaderTest.test_add_non_emptyc             C   s>   |  j  |  j |  j |  j ƒ |  j  |  j |  j |  j ƒ d  S)N)r   r    r"   )r   r   r   r   Útest_add_empty.   s    zHeaderTest.test_add_emptyc             C   s    |  j  t |  j j |  j ƒ d  S)N)r   Ú	TypeErrorr    Ú__add__r!   )r   r   r   r   Útest_add_overlapping_error2   s    z%HeaderTest.test_add_overlapping_errorc             C   s   |  j  t |  j j d ƒ d  S)NZxxx)r   r&   r    r'   )r   r   r   r   Útest_add_wrong_type_error5   s    z$HeaderTest.test_add_wrong_type_errorc             C   s9   d d l  m } |  j t j | j d d d g i ƒ d  S)Nr   )r   r   r   r   )r
   r   r   r   r   Ú	from_json)r   r   r   r   r   Útest_crit_decode_always_errors8   s    z)HeaderTest.test_crit_decode_always_errorsc             C   sË   d d l  m } | d t t f ƒ } | j ƒ  } t j j t j j t j ƒ } t	 j
 | ƒ } |  j | d | | g i ƒ |  j | | j | ƒ ƒ t	 j
 d | ƒ | d d <|  j t j | j | ƒ d  S)Nr   )r   Zx5cs   xxx)r
   r   ÚCERTÚto_partial_jsonÚOpenSSLZcryptoZdump_certificateZFILETYPE_ASN1ÚwrappedÚbase64Z	b64encoder   r*   r   r   r   )r   r   ÚheaderZjobjZ	cert_asn1Zcert_b64r   r   r   Útest_x5c_decoding=   s    	zHeaderTest.test_x5c_decodingc             C   sO   |  j  d |  j j ƒ  ƒ |  j  d |  j j ƒ  ƒ |  j t j |  j j ƒ d  S)Nr   r   )r   r    Zfind_keyr!   r   r   ÚErrorr   )r   r   r   r   Útest_find_keyI   s    zHeaderTest.test_find_keyN)r   r   r   r   r#   r$   r%   r(   r)   r+   r2   r4   r   r   r   r   r      s   r   c               @   s.   e  Z d  Z d Z d d „  Z d d „  Z d S)ÚSignatureTestzTests for josepy.jws.Signature.c             C   sj   d d l  m } d d l  m } |  j | d d d | d t j ƒ ƒ | j d d d d d	 i i ƒ ƒ d  S)
Nr   )r   )Ú	SignatureÚ	signatures   foor1   ÚalgZZm9vÚRS256)r
   r   r6   r   r   r9   r*   )r   r   r6   r   r   r   Útest_from_jsonR   s    zSignatureTest.test_from_jsonc             C   s3   d d l  m } |  j t j | j d d i ƒ d  S)Nr   )r6   r7   r   )r
   r6   r   r   r   r*   )r   r6   r   r   r   Útest_from_json_no_alg_errorZ   s    z)SignatureTest.test_from_json_no_alg_errorN)r   r   r   r   r:   r;   r   r   r   r   r5   O   s   r5   c               @   s¦   e  Z d  Z 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 d „  Z d d „  Z d S)ÚJWSTestz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)	Nr   )ÚJWSÚpayloads   fooÚkeyr8   Zprotectr   )ÚKEYZprivkeyZ
public_keyÚpubkeyr
   r=   Úsignr   r9   ÚunprotectedÚ	frozensetÚ	protectedÚmixed)r   r=   r   r   r   r#   c   s    				zJWSTest.setUpc             C   sa   |  j  |  j j j j |  j ƒ |  j  |  j j j j |  j ƒ |  j  |  j j j j |  j ƒ d  S)N)r   rC   r7   Úcombinedr   rA   rE   rF   )r   r   r   r   Útest_pubkey_jwkq   s    zJWSTest.test_pubkey_jwkc             C   s   |  j  |  j j ƒ  ƒ d  S)N)Ú
assertTruerC   Úverify)r   r   r   r   Útest_sign_unprotectedv   s    zJWSTest.test_sign_unprotectedc             C   s   |  j  |  j j ƒ  ƒ d  S)N)rI   rE   rJ   )r   r   r   r   Útest_sign_protectedy   s    zJWSTest.test_sign_protectedc             C   s   |  j  |  j j ƒ  ƒ d  S)N)rI   rF   rJ   )r   r   r   r   Útest_sign_mixed|   s    zJWSTest.test_sign_mixedc             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_eLS5J1F61lkvrCrCDErTEJnBGOGesJ72M7b6Ve1cAJAr   )r=   r8   )rF   Z
to_compactr   r
   r=   Úfrom_compactZassertNotEqualÚsetr7   rG   Znot_omitted)r   Zcompactr=   rF   r   r   r   Útest_compact_lost_unprotected   s    z%JWSTest.test_compact_lost_unprotectedc             C   s-   d d l  m } |  j t j | j d ƒ d  S)Nr   )r=   ó   .)r
   r=   r   r   r   rN   )r   r=   r   r   r   Ú$test_from_compact_missing_components   s    z,JWSTest.test_from_compact_missing_componentsc             C   s°   |  j  j d d ƒ } |  j j d d ƒ } |  j d | k ƒ |  j d | k ƒ | d j ƒ  | d <d d l m } |  j | j | ƒ |  j  ƒ |  j | j | ƒ |  j ƒ d  S)NÚflatTrE   r1   r   )r=   )	rE   r-   rC   rI   Úto_jsonr
   r=   r   r*   )r   Zprotected_jobjZunprotected_jobjr=   r   r   r   Útest_json_omitempty‘   s    zJWSTest.test_json_omitemptyc          
   C   sÌ   d t  j |  j j j ƒ d t  j d ƒ d |  j j j d t  j |  j j j j d ƒ ƒ i } | j ƒ  } | d j ƒ  | d <|  j	 |  j j
 d d ƒ | ƒ d	 d
 l m } |  j	 |  j | j | ƒ ƒ d  S)Nr7   r>   s   foor1   rE   zutf-8rS   Tr   )r=   )r   Úencode_b64joserF   r7   r1   rE   r   ÚcopyrT   r   r-   r
   r=   r*   )r   Újobj_toÚ	jobj_fromr=   r   r   r   Útest_json_flatž   s    		zJWSTest.test_json_flatc             C   sš   d |  j  j f d t j d ƒ i } | j ƒ  } | d d j ƒ  g | d <|  j |  j  j d d ƒ | ƒ d d l m	 } |  j |  j  | j
 | ƒ ƒ d  S)NÚ
signaturesr>   s   foor   rS   F)r=   )rF   r7   r   rV   rW   rT   r   r-   r
   r=   r*   )r   rX   rY   r=   r   r   r   Útest_json_not_flat®   s    zJWSTest.test_json_not_flatc             C   s9   d d l  m } |  j t j | j d f  d d i ƒ d  S)Nr   )r=   r[   r7   r   )r
   r=   r   r   r   r*   )r   r=   r   r   r   Útest_from_json_mixed_flatº   s    z!JWSTest.test_from_json_mixed_flatc             C   s0   d d l  m } t | j |  j j ƒ  ƒ ƒ d  S)Nr   )r=   )r
   r=   Úhashr*   rF   rT   )r   r=   r   r   r   Útest_from_json_hashable¿   s    zJWSTest.test_from_json_hashableN)r   r   r   r   r#   rH   rK   rL   rM   rP   rR   rU   rZ   r\   r]   r_   r   r   r   r   r<   `   s   r<   c               @   s@   e  Z d  Z d d „  Z d d „  Z d d „  Z d d „  Z d	 S)
ÚCLITestc             C   s   t  j d ƒ |  _ d  S)Nzrsa512_key.pem)r   Zvector_pathÚkey_path)r   r   r   r   r#   Æ   s    zCLITest.setUpc             C   sl   d d l  m } t j d ƒ F } d | j _ t j d ƒ ! |  j d | j d g ƒ ƒ Wd  QRXWd  QRXd  S)	Nr   )ÚCLIz	sys.stdinz&{"payload": "foo", "signature": "xxx"}z
sys.stdouté   rJ   éÿÿÿÿ)r
   rb   ÚmockÚpatchÚreadÚreturn_valuer   Úrun)r   rb   Úsinr   r   r   Útest_unverifiedÉ   s
    zCLITest.test_unverifiedc             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  QRXWd  QRXd  S)Nr   )rb   z	sys.stdinr   z
sys.stdoutrB   z-kz-ar9   z-pr   rc   rJ   )r
   rb   re   rf   rg   rh   ri   ra   ÚwriteÚ
mock_callsr   )r   rb   rj   Úsoutr   r   r   Ú	test_jsonÐ   s    zCLITest.test_jsonc             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  QRXWd  QRXd  S)Nr   )rb   z	sys.stdinr   z
sys.stdoutz	--compactrB   z-krc   rJ   z--ktyZRSA)r
   rb   re   rf   rg   rh   ri   ra   rl   rm   r   )r   rb   rj   rn   r   r   r   Útest_compactÛ   s    zCLITest.test_compactN)r   r   r   r#   rk   ro   rp   r   r   r   r   r`   Ä   s   r`   Ú__main__)r   r0   Zunittestre   r.   Zjosepyr   r   r   r   r   Zload_comparable_certr,   ZJWKRSAÚloadZload_vectorr@   ZTestCaser   r   r5   r<   r`   r   Úmainr   r   r   r   Ú<module>   s   (0d$