U
    ÓZjH!  ã                   @   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
 d¡Ze	j e
 d¡¡ZG dd„ dejƒZG dd	„ d	ejƒZG d
d„ dejƒZG dd„ dejƒZG dd„ dejƒZedkrÆe ¡  dS )zTests for josepy.jws.é    N)ÚerrorsÚ	json_utilÚjwaÚjwkÚ	test_utilzcert.pemú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   sF   ddl m} |  d| d¡¡ |  d| d¡¡ |  tj|jd¡ d S )Nr   ©Ú	MediaTypeúapplication/appÚappzapp;foo)Ú
josepy.jwsr
   ÚassertEqualÚdecodeÚassertRaisesr   ÚDeserializationError©Úselfr
   © r   úR/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/josepy/jws_test.pyÚtest_decode   s      ÿzMediaTypeTest.test_decodec                 C   s4   ddl m} |  d| d¡¡ |  d| d¡¡ d S )Nr   r	   r   r   zapplication/app;foo)r   r
   r   Úencoder   r   r   r   Útest_encode   s
    ÿzMediaTypeTest.test_encodeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r      s   r   c                   @   sP   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   s<   ddl m} |dd�| _|dd�| _|dd�| _|ƒ | _d S )Nr   ©ÚHeaderÚfoo)r   Úbar©ÚaÚb)Úcrit)r   r   Úheader1Úheader2r%   Úempty©r   r   r   r   r   ÚsetUp"   s
    zHeaderTest.setUpc                 C   s,   ddl m} |  |ddd�| j| j ¡ d S )Nr   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   s0   |   | 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   |   t| jj| j¡ d S r,   )r   Ú	TypeErrorr&   Ú__add__r'   r-   r   r   r   Útest_add_overlapping_error2   s    z%HeaderTest.test_add_overlapping_errorc                 C   s   |   t| jjd¡ d S )NZxxx)r   r/   r&   r0   r-   r   r   r   Útest_add_wrong_type_error5   s    z$HeaderTest.test_add_wrong_type_errorc                 C   s*   ddl m} |  tj|jdddgi¡ d S )Nr   r   r%   r#   r$   )r   r   r   r   r   Ú	from_jsonr)   r   r   r   Útest_crit_decode_always_errors8   s    
ÿz)HeaderTest.test_crit_decode_always_errorsc                 C   s’   ddl m} |ttfd�}| ¡ }tj tjjtj¡}t	 
|¡}|  |d||gi¡ |  || |¡¡ t	 
d| ¡|d d< |  tj|j|¡ d S )Nr   r   )Úx5cr5   s   xxx)r   r   ÚCERTÚto_partial_jsonÚOpenSSLZcryptoZdump_certificateZFILETYPE_ASN1ÚwrappedÚbase64Ú	b64encoder   r3   r   r   r   )r   r   ÚheaderZjobjZ	cert_asn1Zcert_b64r   r   r   Útest_x5c_decoding=   s     ÿ
zHeaderTest.test_x5c_decodingc                 C   s:   |   d| j ¡ ¡ |   d| 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.   r1   r2   r4   r=   r?   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   sH   ddl m} ddl m} |  |d|tjd�d�| ddd	idœ¡¡ d S )
Nr   r   ©Ú	Signatureó   foo)Úalg)Ú	signaturer<   ZZm9vrD   ÚRS256)r   r   rB   r   r   rF   r3   )r   r   rB   r   r   r   Útest_from_jsonR   s    ÿþzSignatureTest.test_from_jsonc                 C   s&   ddl m} |  tj|jddi¡ d S )Nr   rA   rE   r    )r   rB   r   r   r   r3   )r   rB   r   r   r   Útest_from_json_no_alg_errorZ   s
     ÿz)SignatureTest.test_from_json_no_alg_errorN)r   r   r   r   rG   rH   r   r   r   r   r@   O   s   r@   c                   @   sp   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   sv   t | _| j ¡ | _ddlm} |jd| jtjd�| _	|jd| jtjt
ddgƒd�| _|jd| jtjt
dgƒd�| _d S )Nr   ©ÚJWSrC   )ÚpayloadÚkeyrD   r   rD   )rL   rM   rD   Zprotect)ÚKEYZprivkeyZ
public_keyÚpubkeyr   rK   Úsignr   rF   ÚunprotectedÚ	frozensetÚ	protectedÚmixed©r   rK   r   r   r   r*   c   s(      ÿ  
þ  þzJWSTest.setUpc                 C   sF   |   | jjjj| j¡ |   | jjjj| j¡ |   | jjjj| j¡ d S r,   )r   rQ   rE   Úcombinedr   rO   rS   rT   r-   r   r   r   Útest_pubkey_jwkq   s    zJWSTest.test_pubkey_jwkc                 C   s   |   | j ¡ ¡ d S r,   )Ú
assertTruerQ   Úverifyr-   r   r   r   Útest_sign_unprotectedv   s    zJWSTest.test_sign_unprotectedc                 C   s   |   | j ¡ ¡ d S r,   )rX   rS   rY   r-   r   r   r   Útest_sign_protectedy   s    zJWSTest.test_sign_protectedc                 C   s   |   | j ¡ ¡ d S r,   )rX   rT   rY   r-   r   r   r   Útest_sign_mixed|   s    zJWSTest.test_sign_mixedc                 C   s\   | j  ¡ }|  d|¡ ddlm} | |¡}|  | j |¡ |  tdgƒt|jj	 
¡ ƒ¡ d S )Nsr   eyJhbGciOiAiUlMyNTYifQ.Zm9v.OHdxFVj73l5LpxbFp1AmYX4yJM0Pyb_893n1zQjpim_eLS5J1F61lkvrCrCDErTEJnBGOGesJ72M7b6Ve1cAJAr   rJ   rD   )rT   Z
to_compactr   r   rK   Úfrom_compactZassertNotEqualÚsetrE   rV   Znot_omitted)r   ÚcompactrK   rT   r   r   r   Útest_compact_lost_unprotected   s    
ý
 ÿz%JWSTest.test_compact_lost_unprotectedc                 C   s"   ddl m} |  tj|jd¡ d S )Nr   rJ   ó   .)r   rK   r   r   r   r]   rU   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�}|  d|k¡ |  d|k¡ |d  ¡ |d< ddlm} |  | |¡| j ¡ |  | |¡| j¡ d S )NT©ZflatrS   r<   r   rJ   )	rS   r7   rQ   rX   Úto_jsonr   rK   r   r3   )r   Zprotected_jobjZunprotected_jobjrK   r   r   r   Útest_json_omitempty‘   s    zJWSTest.test_json_omitemptyc                 C   sŠ   t  | jjj¡t  d¡| jjjt  | jjj d¡¡dœ}| ¡ }|d  ¡ |d< |  	| jj
dd�|¡ ddlm} |  	| j| |¡¡ d S )	NrC   zutf-8)rE   rL   r<   rS   r<   Trc   r   rJ   )r   Úencode_b64joserT   rE   r<   rS   r   Úcopyrd   r   r7   r   rK   r3   ©r   Zjobj_toZ	jobj_fromrK   r   r   r   Útest_json_flatž   s    ÿÿûzJWSTest.test_json_flatc                 C   sn   | j jft d¡dœ}| ¡ }|d d  ¡ g|d< |  | j jdd�|¡ ddlm	} |  | j | 
|¡¡ d S )NrC   )Ú
signaturesrL   rj   r   Frc   rJ   )rT   rE   r   rf   rg   rd   r   r7   r   rK   r3   rh   r   r   r   Útest_json_not_flat®   s    þzJWSTest.test_json_not_flatc                 C   s(   ddl m} |  tj|jdddœ¡ d S )Nr   rJ   r   r    )rj   rE   )r   rK   r   r   r   r3   rU   r   r   r   Útest_from_json_mixed_flatº   s    ÿz!JWSTest.test_from_json_mixed_flatc                 C   s$   ddl m} t| | j ¡ ¡ƒ d S )Nr   rJ   )r   rK   Úhashr3   rT   rd   rU   r   r   r   Útest_from_json_hashable¿   s    zJWSTest.test_from_json_hashableN)r   r   r   r   r*   rW   rZ   r[   r\   r`   rb   re   ri   rk   rl   rn   r   r   r   r   rI   `   s   rI   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚCLITestc                 C   s   t  d¡| _d S )Nr   )r   Zvector_pathÚkey_pathr-   r   r   r   r*   Æ   s    zCLITest.setUpc              
   C   sX   ddl m} t d¡�8}d|j_t d¡� |  d| dg¡¡ W 5 Q R X W 5 Q R X d S )Nr   ©ÚCLIú	sys.stdinz&{"payload": "foo", "signature": "xxx"}ú
sys.stdoutéÿÿÿÿrY   )r   rr   ÚmockÚpatchÚreadÚreturn_valuer   Úrun)r   rr   Úsinr   r   r   Útest_unverifiedÉ   s
    zCLITest.test_unverifiedc                 C   sŠ   ddl m} t d¡�j}d|j_t d¡�L}| dd| jdd	d
dg¡ |jj	d d d |j_|  
d| dg¡¡ W 5 Q R X W 5 Q R X d S )Nr   rq   rs   r    rt   rP   ú-kz-arF   z-pr   é   rY   ©r   rr   rv   rw   rx   ry   rz   rp   ÚwriteZ
mock_callsr   ©r   rr   r{   Zsoutr   r   r   Ú	test_jsonÐ   s     ÿzCLITest.test_jsonc                 C   s�   ddl m} t d¡�p}d|j_t d¡�R}| ddd| jg¡ |jj	d d	 d |j_|  
d| dd
ddd| jg¡¡ W 5 Q R X W 5 Q R X d S )Nr   rq   rs   r    rt   z	--compactrP   r}   r~   rY   z--ktyZRSAr   r�   r   r   r   Útest_compactÛ   s    
    þzCLITest.test_compactN)r   r   r   r*   r|   r‚   rƒ   r   r   r   r   ro   Ä   s   ro   Ú__main__)r   r:   Zunittestrv   r8   Zjosepyr   r   r   r   r   Zload_comparable_certr6   ZJWKRSAÚloadZload_vectorrN   ZTestCaser   r   r@   rI   ro   r   Úmainr   r   r   r   Ú<module>   s   
0d$