U
    ÓZjµ5  ã                   @   sL  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m  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 e
 d¡Ze
 d¡Ze
 d	¡Ze
 d
¡Ze
 d¡Ze
 d¡Ze
 d¡Ze
 d¡Ze
 d¡Ze
 d¡Z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$G dd„ dej!ƒZ%G dd„ dej!ƒZ&G dd„ de&ƒZ'G dd „ d e&ƒZ(G d!d"„ d"e&ƒZ)G d#d$„ d$e&ƒ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/G d/d0„ d0ej!ƒZ0G d1d2„ d2ej!ƒZ1G d3d4„ d4ej!ƒZ2e3d5k�rHe 4¡  dS )6zTests for certbot.crypto_util.é    N)Úerrors)Ú
interfaces)Úutil)Úos)Ú
filesystemzrsa256_key.pemzrsa512_key.pemzrsa2048_key.pemúcert_512.pemzcert_2048.pemznistp256_key.pemzcert-nosans_nistp256.pemc                       s\   e Zd ZdZ‡ fdd„Z‡ fdd„Zedd„ ƒZe 	d¡d	d
„ ƒZ
e 	d¡dd„ ƒZ‡  ZS )ÚInitSaveKeyTestz,Tests for certbot.crypto_util.init_save_key.c                    sX   t t| ƒ ¡  tj | jd¡| _tj	| jdd� t
 t
j¡ tj tjdd�tj¡ d S )NÚworkdiriÀ  )ÚmodeT©Zstrict_permissions)Úsuperr   ÚsetUpr   ÚpathÚjoinÚtempdirr	   r   ÚmkdirÚloggingÚdisableÚCRITICALÚzopeÚ	componentÚprovideUtilityÚmockÚMockr   ÚIConfig©Úself©Ú	__class__© úa/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/certbot/tests/crypto_util_test.pyr      s    
 ÿzInitSaveKeyTest.setUpc                    s   t t| ƒ ¡  t tj¡ d S ©N)r   r   ÚtearDownr   r   ÚNOTSETr   r   r   r    r"   (   s    zInitSaveKeyTest.tearDownc                 C   s   ddl m} |||dƒS )Nr   )Úinit_save_keyúkey-certbot.pem)Úcertbot.crypto_utilr$   )ÚclsZkey_sizeZkey_dirr$   r   r   r    Ú_call-   s    zInitSaveKeyTest._callzcertbot.crypto_util.make_keyc                 C   sV   d|_ |  d| j¡}|  |jd¡ |  d|jk¡ |  tj 	tj 
| j|j¡¡¡ d S )Ns   key_pemé   r%   )Úreturn_valuer(   r	   ÚassertEqualÚpemÚ
assertTrueÚfiler   r   Úexistsr   )r   Ú	mock_makeÚkeyr   r   r    Útest_success2   s
    zInitSaveKeyTest.test_successc                 C   s   t |_|  t | jd| j¡ d S )Ni¯  )Ú
ValueErrorÚside_effectÚassertRaisesr(   r	   )r   r0   r   r   r    Útest_key_failure:   s    z InitSaveKeyTest.test_key_failure)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r"   Úclassmethodr(   r   Úpatchr2   r6   Ú__classcell__r   r   r   r    r      s   


r   c                       s<   e Zd ZdZ‡ fdd„Ze d¡e d¡dd„ ƒƒZ‡  ZS )ÚInitSaveCSRTestz,Tests for certbot.crypto_util.init_save_csr.c                    s*   t t| ƒ ¡  tj tjdd�tj	¡ d S )NTr   )
r   r>   r   r   r   r   r   r   r   r   r   r   r   r    r   C   s
    
 ÿzInitSaveCSRTest.setUpzacme.crypto_util.make_csrz+certbot.crypto_util.util.make_or_verify_dirc                 C   sJ   ddl m} d|_|tjdd�d| jƒ}|  |jd¡ |  d|j	k¡ d S )Nr   )Úinit_save_csrs   csr_pemZ	dummy_key)r,   úexample.comzcsr-certbot.pem)
r&   r?   r*   r   r   r   r+   Údatar-   r.   )r   Zunused_mock_verifyZmock_csrr?   Úcsrr   r   r    Útest_itI   s    
  ÿzInitSaveCSRTest.test_it)	r7   r8   r9   r:   r   r   r<   rC   r=   r   r   r   r    r>   @   s
   r>   c                   @   sD   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dS )ÚValidCSRTestz(Tests for certbot.crypto_util.valid_csr.c                 C   s   ddl m} ||ƒS )Nr   )Ú	valid_csr)r&   rE   )r'   rB   rE   r   r   r    r(   Z   s    zValidCSRTest._callc                 C   s   |   |  t d¡¡¡ d S ©Núcsr_512.pem©r-   r(   Ú	test_utilÚload_vectorr   r   r   r    Útest_valid_pem_true_   s    z ValidCSRTest.test_valid_pem_truec                 C   s   |   |  t d¡¡¡ d S )Nzcsr-san_512.pemrH   r   r   r   r    Útest_valid_pem_san_trueb   s    z$ValidCSRTest.test_valid_pem_san_truec                 C   s   |   |  t d¡¡¡ d S )Núcsr_512.der)ÚassertFalser(   rI   rJ   r   r   r   r    Útest_valid_der_falsee   s    z!ValidCSRTest.test_valid_der_falsec                 C   s   |   |  d¡¡ d S ©NÚ ©rN   r(   r   r   r   r    Útest_empty_falseh   s    zValidCSRTest.test_empty_falsec                 C   s   |   |  d¡¡ d S ©Nzfoo barrR   r   r   r   r    Útest_random_falsek   s    zValidCSRTest.test_random_falseN)r7   r8   r9   r:   r;   r(   rK   rL   rO   rS   rU   r   r   r   r    rD   W   s   
rD   c                   @   s,   e Zd ZdZedd„ ƒZdd„ Zdd„ ZdS )	ÚCSRMatchesPubkeyTestz1Tests for certbot.crypto_util.csr_matches_pubkey.c                 O   s   ddl m} |||ŽS )Nr   )Úcsr_matches_pubkey)r&   rW   )r'   ÚargsÚkwargsrW   r   r   r    r(   r   s    zCSRMatchesPubkeyTest._callc                 C   s   |   |  t d¡t¡¡ d S rF   )r-   r(   rI   rJ   Ú
RSA512_KEYr   r   r   r    Útest_valid_truew   s     ÿz$CSRMatchesPubkeyTest.test_valid_truec                 C   s   |   |  t d¡t¡¡ d S rF   )rN   r(   rI   rJ   Ú
RSA256_KEYr   r   r   r    Útest_invalid_false{   s     ÿz'CSRMatchesPubkeyTest.test_invalid_falseN)r7   r8   r9   r:   r;   r(   r[   r]   r   r   r   r    rV   o   s
   
rV   c                   @   s4   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
S )ÚImportCSRFileTestz/Tests for certbot.certbot_util.import_csr_file.c                 O   s   ddl m} |||ŽS )Nr   )Úimport_csr_file)r&   r_   )r'   rX   rY   r_   r   r   r    r(   ƒ   s    zImportCSRFileTest._callc                 C   sN   t  d¡}t  d¡}t  d¡}|  tjjtj||dd�dgf|  	||¡¡ d S )NrM   rG   r,   ©r.   rA   ÚformúExample.com©
rI   Úvector_pathrJ   r+   ÚOpenSSLÚcryptoÚFILETYPE_PEMr   ZCSRr(   )r   ÚcsrfilerA   Zdata_pemr   r   r    Útest_der_csrˆ   s    


þü
úzImportCSRFileTest.test_der_csrc                 C   sD   t  d¡}t  d¡}|  tjjtj||dd�dgf|  	||¡¡ d S )NrG   r,   r`   rb   rc   )r   rh   rA   r   r   r    Útest_pem_csr•   s    

þü
úzImportCSRFileTest.test_pem_csrc                 C   s$   |   tj| jt d¡t d¡¡ d S ©Nr   )r5   r   ÚErrorr(   rI   rd   rJ   r   r   r   r    Útest_bad_csr¡   s    þzImportCSRFileTest.test_bad_csrN)	r7   r8   r9   r:   r;   r(   ri   rj   rm   r   r   r   r    r^   €   s   
r^   c                   @   s   e Zd ZdZdd„ ZdS )ÚMakeKeyTestz'Tests for certbot.crypto_util.make_key.c                 C   s&   ddl m} tj tjj|dƒ¡ d S )Nr   )Úmake_keyr)   )r&   ro   re   rf   Zload_privatekeyrg   )r   ro   r   r   r    rC   ª   s
     ÿzMakeKeyTest.test_itN)r7   r8   r9   r:   rC   r   r   r   r    rn   §   s   rn   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚVerifyCertSetupz#Refactoring for verification tests.c                    sd   t t| ƒ ¡  t ¡ | _t| j_t| j_t	| j_
t d¡| j_t ¡ | _t| j_t| j_t| j_d S )Nzcert_fullchain_2048.pem)r   rp   r   r   Ú	MagicMockÚrenewable_certÚSS_CERT_PATHÚcertÚchainÚRSA2048_KEY_PATHÚprivkeyrI   rd   Ú	fullchainÚbad_renewable_certr   r   r   r    r   ´   s    

zVerifyCertSetup.setUp)r7   r8   r9   r:   r   r=   r   r   r   r    rp   ±   s   rp   c                   @   s<   e Zd ZdZdd„ Zdd„ Zejde 	d¡d�d	d
„ ƒZ
dS )ÚVerifyRenewableCertTestú4Tests for certbot.crypto_util.verify_renewable_cert.c                 C   s   ddl m} ||ƒS )Nr   )Úverify_renewable_cert)r&   r|   )r   rr   r|   r   r   r    r(   Æ   s    zVerifyRenewableCertTest._callc                 C   s   |   d |  | j¡¡ d S r!   ©r+   r(   rr   r   r   r   r    Útest_verify_renewable_certÊ   s    z2VerifyRenewableCertTest.test_verify_renewable_certz-certbot.crypto_util.verify_renewable_cert_sigrQ   )r4   c                 C   s   |   tj| j| j¡ d S r!   ©r5   r   rl   r(   ry   )r   Z!unused_verify_renewable_cert_signr   r   r    Ú"test_verify_renewable_cert_failureÍ   s    z:VerifyRenewableCertTest.test_verify_renewable_cert_failureN)r7   r8   r9   r:   r(   r~   r   r<   r   rl   r€   r   r   r   r    rz   Ã   s
   rz   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚVerifyRenewableCertSigTestr{   c                 C   s   ddl m} ||ƒS )Nr   )Úverify_renewable_cert_sig)r&   r‚   )r   rr   r‚   r   r   r    r(   Õ   s    z VerifyRenewableCertSigTest._callc                 C   s   |   d |  | j¡¡ d S r!   r}   r   r   r   r    Útest_cert_sig_matchÙ   s    z.VerifyRenewableCertSigTest.test_cert_sig_matchc                 C   s0   t  ¡ }t|_t|_t|_|  d |  |¡¡ d S r!   )	r   rq   ÚP256_CERT_PATHrt   ru   ÚP256_KEYrw   r+   r(   )r   rr   r   r   r    Útest_cert_sig_match_ecÜ   s
    z1VerifyRenewableCertSigTest.test_cert_sig_match_ecc                 C   s&   t  d¡| j_|  tj| j| j¡ d S )Nzcert_512_bad.pem)rI   rd   ry   rt   r5   r   rl   r(   r   r   r   r    Útest_cert_sig_mismatchã   s    z1VerifyRenewableCertSigTest.test_cert_sig_mismatchN)r7   r8   r9   r:   r(   rƒ   r†   r‡   r   r   r   r    r�   Ò   s
   r�   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚVerifyFullchainTestz/Tests for certbot.crypto_util.verify_fullchain.c                 C   s   ddl m} ||ƒS )Nr   )Úverify_fullchain)r&   r‰   )r   rr   r‰   r   r   r    r(   ë   s    zVerifyFullchainTest._callc                 C   s   |   d |  | j¡¡ d S r!   r}   r   r   r   r    Útest_fullchain_matchesï   s    z*VerifyFullchainTest.test_fullchain_matchesc                 C   s   |   tj| j| j¡ d S r!   r   r   r   r   r    Útest_fullchain_mismatchò   s    z+VerifyFullchainTest.test_fullchain_mismatchc                 C   s    d| j _|  tj| j| j ¡ d S )NÚdog)ry   ru   r5   r   rl   r(   r   r   r   r    Útest_fullchain_ioerrorõ   s    z*VerifyFullchainTest.test_fullchain_ioerrorN)r7   r8   r9   r:   r(   rŠ   r‹   r�   r   r   r   r    rˆ   è   s
   rˆ   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚVerifyCertMatchesPrivKeyTestz;Tests for certbot.crypto_util.verify_cert_matches_priv_key.c                 C   s   ddl m} ||j|jƒS )Nr   )Úverify_cert_matches_priv_key)r&   r�   rt   rw   )r   rr   r�   r   r   r    r(   ý   s    z"VerifyCertMatchesPrivKeyTest._callc                 C   s(   t | j_t| j_|  d |  | j¡¡ d S r!   )rs   rr   rt   rv   rw   r+   r(   r   r   r   r    Útest_cert_priv_key_match  s    z5VerifyCertMatchesPrivKeyTest.test_cert_priv_key_matchc                 C   s(   t | j_t| j_|  tj| j| j¡ d S r!   )	ÚRSA256_KEY_PATHry   rw   rs   rt   r5   r   rl   r(   r   r   r   r    Útest_cert_priv_key_mismatch  s    z8VerifyCertMatchesPrivKeyTest.test_cert_priv_key_mismatchN)r7   r8   r9   r:   r(   r�   r’   r   r   r   r    rŽ   ú   s   rŽ   c                   @   s4   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
S )ÚValidPrivkeyTestz,Tests for certbot.crypto_util.valid_privkey.c                 C   s   ddl m} ||ƒS )Nr   )Úvalid_privkey)r&   r”   )r'   rw   r”   r   r   r    r(     s    zValidPrivkeyTest._callc                 C   s   |   |  t¡¡ d S r!   )r-   r(   rZ   r   r   r   r    r[     s    z ValidPrivkeyTest.test_valid_truec                 C   s   |   |  d¡¡ d S rP   rR   r   r   r   r    rS     s    z!ValidPrivkeyTest.test_empty_falsec                 C   s   |   |  d¡¡ d S rT   rR   r   r   r   r    rU     s    z"ValidPrivkeyTest.test_random_falseN)	r7   r8   r9   r:   r;   r(   r[   rS   rU   r   r   r   r    r“     s   
r“   c                   @   s,   e Zd ZdZedd„ ƒZdd„ Zdd„ ZdS )	ÚGetSANsFromCertTestz1Tests for certbot.crypto_util.get_sans_from_cert.c                 O   s   ddl m} |||ŽS )Nr   )Úget_sans_from_cert)r&   r–   )r'   rX   rY   r–   r   r   r    r(   "  s    zGetSANsFromCertTest._callc                 C   s   |   g |  t d¡¡¡ d S rk   ©r+   r(   rI   rJ   r   r   r   r    Útest_single'  s    zGetSANsFromCertTest.test_singlec                 C   s    |   ddg|  t d¡¡¡ d S ©Nr@   zwww.example.comzcert-san_512.pemr—   r   r   r   r    Útest_san*  s    þzGetSANsFromCertTest.test_sanN)r7   r8   r9   r:   r;   r(   r˜   rš   r   r   r   r    r•     s
   
r•   c                   @   s<   e Zd ZdZedd„ ƒZdd„ Zdd„ Zdd	„ Zd
d„ Z	dS )ÚGetNamesFromCertTestz2Tests for certbot.crypto_util.get_names_from_cert.c                 O   s   ddl m} |||ŽS )Nr   )Úget_names_from_cert)r&   rœ   )r'   rX   rY   rœ   r   r   r    r(   3  s    zGetNamesFromCertTest._callc                 C   s   |   dg|  t d¡¡¡ d S )Nr@   r   r—   r   r   r   r    r˜   8  s    þz GetNamesFromCertTest.test_singlec                 C   s    |   ddg|  t d¡¡¡ d S r™   r—   r   r   r   r    rš   =  s    þzGetNamesFromCertTest.test_sanc                 C   s,   |   dgdd„ dD ƒ |  t d¡¡¡ d S )Nr@   c                 S   s   g | ]}d   |¡‘qS )z{0}.example.com)Úformat)Ú.0Úcr   r   r    Ú
<listcomp>F  s     zDGetNamesFromCertTest.test_common_name_sans_order.<locals>.<listcomp>Úabcdzcert-5sans_512.pemr—   r   r   r   r    Útest_common_name_sans_orderB  s    þz0GetNamesFromCertTest.test_common_name_sans_orderc                 C   s   |   tjj| jd¡ d S )Nzhello there)r5   re   rf   rl   r(   r   r   r   r    Útest_parse_non_certI  s    z(GetNamesFromCertTest.test_parse_non_certN)
r7   r8   r9   r:   r;   r(   r˜   rš   r¢   r£   r   r   r   r    r›   0  s   
r›   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚCertLoaderTestz8Tests for certbot.crypto_util.pyopenssl_load_certificatec                 C   s>   ddl m} |tƒ\}}|  | d¡tj |t¡ d¡¡ d S )Nr   ©Úpyopenssl_load_certificateÚsha256)r&   r¦   ÚCERTr+   Údigestre   rf   Zload_certificate)r   r¦   rt   Ú	file_typer   r   r    Útest_load_valid_certP  s
    ÿz#CertLoaderTest.test_load_valid_certc                 C   s,   ddl m} t dd¡}|  tj||¡ d S )Nr   r¥   s   BEGIN CERTIFICATEs   ASDFASDFASDF!!!)r&   r¦   r¨   Úreplacer5   r   rl   )r   r¦   Zbad_cert_datar   r   r    Útest_load_invalid_certW  s      ÿz%CertLoaderTest.test_load_invalid_certN)r7   r8   r9   r:   r«   r­   r   r   r   r    r¤   M  s   r¤   c                   @   s   e Zd ZdZdd„ ZdS )ÚNotBeforeTestz'Tests for certbot.crypto_util.notBeforec                 C   s$   ddl m} |  |tƒ ¡ d¡ d S )Nr   )Ú	notBeforez2014-12-11T22:34:45+00:00)r&   r¯   r+   Ú	CERT_PATHÚ	isoformat)r   r¯   r   r   r    Útest_notBeforea  s    ÿzNotBeforeTest.test_notBeforeN)r7   r8   r9   r:   r²   r   r   r   r    r®   ^  s   r®   c                   @   s   e Zd ZdZdd„ ZdS )ÚNotAfterTestú&Tests for certbot.crypto_util.notAfterc                 C   s$   ddl m} |  |tƒ ¡ d¡ d S )Nr   )ÚnotAfterz2014-12-18T22:34:45+00:00)r&   rµ   r+   r°   r±   )r   rµ   r   r   r    Útest_notAfterj  s    ÿzNotAfterTest.test_notAfterN)r7   r8   r9   r:   r¶   r   r   r   r    r³   g  s   r³   c                   @   s   e Zd ZdZdd„ ZdS )ÚSha256sumTestr´   c                 C   s    ddl m} |  |tƒd¡ d S )Nr   )Ú	sha256sumZ@914ffed8daf9e2c99d90ac95c77d54f32cbd556672facac380f0c063498df84e)r&   r¸   r+   r°   )r   r¸   r   r   r    Útest_sha256sumr  s    
ÿzSha256sumTest.test_sha256sumN)r7   r8   r9   r:   r¹   r   r   r   r    r·   p  s   r·   c                   @   s   e Zd ZdZdd„ ZdS )ÚCertAndChainFromFullchainTestz;Tests for certbot.crypto_util.cert_and_chain_from_fullchainc           	      C   sj   t  ¡ }|t ¡  }|| }|d | }ddlm} ||fD ](}||ƒ\}}|  ||¡ |  ||¡ q<d S )NÚ
r   )Úcert_and_chain_from_fullchain)r¨   ÚdecodeÚSS_CERTr&   r¼   r+   )	r   Zcert_pemZ	chain_pemZfullchain_pemZspacey_fullchain_pemr¼   rx   Zcert_outZ	chain_outr   r   r    Ú"test_cert_and_chain_from_fullchain{  s    z@CertAndChainFromFullchainTest.test_cert_and_chain_from_fullchainN)r7   r8   r9   r:   r¿   r   r   r   r    rº   x  s   rº   Ú__main__)5r:   r   Zunittestre   r   Zzope.componentr   Zcertbot.tests.utilZtestsr   rI   Zcertbotr   r   Zcertbot.compatr   r   rJ   r\   rd   r‘   rZ   rv   r°   r¨   rs   r¾   r…   r„   Z	P256_CERTZTempDirTestCaser   r>   ZTestCaserD   rV   r^   rn   rp   rz   r�   rˆ   rŽ   r“   r•   r›   r¤   r®   r³   r·   rº   r7   Úmainr   r   r   r    Ú<module>   sV   










$'
		
