
    M/eI                        d 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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c m
Z  ej"                  d      Z ej&                  d      Z ej"                  d	      Z ej&                  d
      Z ej&                  d      Z ej"                  d      Z ej&                  d      Z ej"                  d      Z ej"                  d      Z ej&                  d      Z ej"                  d      Z ej"                  d      Z ej"                  d      Z ej"                  d      Z  G d dejB                        Z" G d dejB                        Z# G d dejH                        Z% G d dejH                        Z& G d dejH                        Z' G d dejH                        Z( G d dejH                        Z) G d  d!e)      Z* G d" d#e)      Z+ G d$ d%e)      Z, G d& d'e)      Z- G d( d)ejH                        Z. G d* d+ejH                        Z/ G d, d-ejH                        Z0 G d. d/ejH                        Z1 G d0 d1ejH                        Z2 G d2 d3ejH                        Z3 G d4 d5ejH                        Z4 G d6 d7ejH                        Z5 G d8 d9ejH                        Z6 G d: d;ejH                        Z7e8d<k(  r4 ejr                   ejt                  ejv                  d=d e<gz                yy)>zTests for certbot.crypto_util.    N)mock)errors)util)
filesystem)oszrsa256_key.pemzrsa512_key.pemzrsa2048_key.pemcert_512.pemzcert_2048.pemznistp256_key.pemzcert-nosans_nistp256.pemzcert_leaf.pemzcert_intermediate_1.pemzcert_intermediate_2.pemc                        e Zd ZdZ fdZ fdZed        Z ej                  d      d        Z
 ej                  d      d        Z xZS )GenerateKeyTestz+Tests for certbot.crypto_util.generate_key.c                    t         |           t        j                  j	                  | j
                  d      | _        t        j                  | j                  d       t        j                  t        j                         y )Nworkdiri  )mode)supersetUpr   pathjointempdirr   r   mkdirloggingdisableCRITICALself	__class__s    J/usr/lib/python3/dist-packages/certbot/_internal/tests/crypto_util_test.pyr   zGenerateKeyTest.setUp$   sL    ww||DLL)<E2(()    c                 h    t         |           t        j                  t        j                         y N)r   tearDownr   r   NOTSETr   s    r   r   zGenerateKeyTest.tearDown,   s    'r   c                 &    ddl m}  |||dd      S )Nr   )generate_keykey-certbot.pemTstrict_permissions)certbot.crypto_utilr!   )clskey_sizekey_dirr!   s       r   _callzGenerateKeyTest._call1   s    4Hg/@UYZZr   zcertbot.crypto_util.make_keyc                 2   d|_         | j                  d| j                        }|j                  dk(  sJ d|j                  v sJ t
        j                  j                  t
        j                  j                  | j                  |j                              sJ y )Ns   key_pem   r"   )	return_valuer)   r   pemfiler   r   existsr   )r   	mock_makekeys      r   test_successzGenerateKeyTest.test_success6   so    !+	jjt||,ww*$$$ CHH,,,ww~~bggll4<<BCCCr   c                     t         |_        t        j                  t               5  | j	                  d| j
                         d d d        y # 1 sw Y   y xY w)Ni  )
ValueErrorside_effectpytestraisesr)   r   )r   r0   s     r   test_key_failurez GenerateKeyTest.test_key_failure>   s=     *	]]:& 	*JJsDLL)	* 	* 	*s   AA)__name__
__module____qualname____doc__r   r   classmethodr)   r   patchr2   r8   __classcell__)r   s   @r   r
   r
   "   sh    5*(
 [ [ TZZ./D 0D TZZ./* 0*r   r
   c                   j    e Zd ZdZ ej
                  d       ej
                  d      d               Zy)GenerateCSRTestz+Tests for certbot.crypto_util.generate_csr.zacme.crypto_util.make_csrz+certbot.crypto_util.util.make_or_verify_dirc                     ddl m} d|_         |t        j                  d      d| j
                  d      }|j                  dk(  sJ d	|j                  v sJ y )
Nr   )generate_csrs   csr_pem	dummy_key)r-   example.comTr#   zcsr-certbot.pem)r%   rC   r,   r   Mockr   datar.   )r   unused_mock_verifymock_csrrC   csrs        r   test_itzGenerateCSRTest.test_itG   sW     	5 *II+&t||X\^ xx:%%% CHH,,,r   N)r9   r:   r;   r<   r   r>   rK    r   r   rA   rA   E   s7    5TZZ+,TZZ=>	- ? -	-r   rA   c                   >    e Zd ZdZed        Zd Zd Zd Zd Z	d Z
y)	ValidCSRTestz(Tests for certbot.crypto_util.valid_csr.c                     ddl m}  ||      S )Nr   )	valid_csr)r%   rP   )r&   rJ   rP   s      r   r)   zValidCSRTest._callX   s    1~r   c                 P    | j                  t        j                  d            sJ y Ncsr_512.pemr)   	test_utilload_vectorr   s    r   test_valid_pem_truez ValidCSRTest.test_valid_pem_true]   s    zz)//>???r   c                 P    | j                  t        j                  d            sJ y )Nzcsr-san_512.pemrT   rW   s    r   test_valid_pem_san_truez$ValidCSRTest.test_valid_pem_san_true`   s     zz)//0ABCCCr   c                 P    | j                  t        j                  d            rJ y )Ncsr_512.derrT   rW   s    r   test_valid_der_falsez!ValidCSRTest.test_valid_der_falsec   s"    ::i33MBCCCCr   c                 *    | j                  d      rJ y N r)   rW   s    r   test_empty_falsezValidCSRTest.test_empty_falsef       ::b>!!>r   c                 *    | j                  d      rJ y Nzfoo barra   rW   s    r   test_random_falsezValidCSRTest.test_random_falsei       ::i((((r   N)r9   r:   r;   r<   r=   r)   rX   rZ   r]   rb   rf   rL   r   r   rN   rN   U   s3    2 @DD")r   rN   c                   ,    e Zd ZdZed        Zd Zd Zy)CSRMatchesPubkeyTestz1Tests for certbot.crypto_util.csr_matches_pubkey.c                     ddl m}  ||i |S )Nr   )csr_matches_pubkey)r%   rk   )r&   argskwargsrk   s       r   r)   zCSRMatchesPubkeyTest._callp       :!42622r   c                 Z    | j                  t        j                  d      t              sJ y rR   )r)   rU   rV   
RSA512_KEYrW   s    r   test_valid_truez$CSRMatchesPubkeyTest.test_valid_trueu   s(    zz!!-0*> 	> >r   c                 Z    | j                  t        j                  d      t              rJ y rR   )r)   rU   rV   
RSA256_KEYrW   s    r   test_invalid_falsez'CSRMatchesPubkeyTest.test_invalid_falsey   s-    ::!!-0*> 	> > >r   N)r9   r:   r;   r<   r=   r)   rq   rt   rL   r   r   ri   ri   m   s!    ;3 3>>r   ri   c                   2    e Zd ZdZed        Zd Zd Zd Zy)ImportCSRFileTestz/Tests for certbot.certbot_util.import_csr_file.c                     ddl m}  ||i |S )Nr   )import_csr_file)r%   rx   )r&   rl   rm   rx   s       r   r)   zImportCSRFileTest._call   s    7///r   c                    t        j                  d      }t        j                  d      }t        j                  d      }t        j                  j
                  t        j                  ||d      dgf| j                  ||      k(  sJ y )Nr\   rS   r-   r.   rG   formExample.com	rU   vector_pathrV   OpenSSLcryptoFILETYPE_PEMr   CSRr)   )r   csrfilerG   data_pems       r   test_der_csrzImportCSRFileTest.test_der_csr   s~    ''6$$]3((7++XX7# " _	
 JJw%& 	& &r   c                     t        j                  d      }t        j                  d      }t        j                  j
                  t        j                  ||d      dgf| j                  ||      k(  sJ y )NrS   r-   rz   r|   r}   )r   r   rG   s      r   test_pem_csrzImportCSRFileTest.test_pem_csr   sn    ''6$$]3++XX7 " _	
 JJw%& 	& &r   c                     t        j                  t        j                        5  | j	                  t        j                  d      t        j                  d             d d d        y # 1 sw Y   y xY wNr   )r6   r7   r   Errorr)   rU   r~   rV   rW   s    r   test_bad_csrzImportCSRFileTest.test_bad_csr   sS    ]]6<<( 	AJJy,,^<#//?A	A 	A 	As   9A&&A/N)	r9   r:   r;   r<   r=   r)   r   r   r   rL   r   r   rv   rv   ~   s'    90 0
&	&Ar   rv   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)MakeKeyTestz'Tests for certbot.crypto_util.make_key.c                     ddl m} t        j                  j	                  t        j                  j
                   |d             y )Nr   make_key   )r%   r   r   r   load_privatekeyr   r   r   s     r   test_rsazMakeKeyTest.test_rsa   s)    0 	&&w~~'B'BHTNSr   c                     ddl m} dD ]Z  \  }}t        j                  j	                  t        j                  j
                   ||d            }|j                         |k(  rZJ  y )Nr   r   ))	secp256r1   )	secp384r1i  )	secp521r1i	  ecdsaelliptic_curvekey_type)r%   r   r   r   r   r   bits)r   r   namer   pkeys        r   test_eczMakeKeyTest.test_ec   sY    0X 	'LT4>>11++w?D 99;$&&&	'r   c                     ddl m} t        j                  t        j
                  d      5   |dd       d d d        y # 1 sw Y   y xY w)Nr   r   z Unsupported RSA key length: 1024matchr+   rsa)r   r   r%   r   r6   r7   r   r   r   s     r   test_bad_key_sizeszMakeKeyTest.test_bad_key_sizes   s9    0 ]]6<</QR 	0$/	0 	0 	0   A  A	c                     ddl m} t        j                  t        j
                  d      5   |dd       d d d        y # 1 sw Y   y xY w)Nr   r   z#Unsupported elliptic curve: notherer   notherer   r   r   r   s     r   test_bad_elliptic_curve_namez(MakeKeyTest.test_bad_elliptic_curve_name   s;    0]]6<</TU 	AI@	A 	A 	Ar   c                 *   ddl m} t        j                  t        j
                  t        j                  d            5  t        j                  j                  t        j                  j                   |dd             d d d        y # 1 sw Y   y xY w)Nr   r   z1Invalid key_type specified: unf.  Use [rsa|ecdsa]r   r   unf)r   )r%   r   r6   r7   r   r   reescaper   r   r   r   r   s     r   test_bad_key_typezMakeKeyTest.test_bad_key_type   si    0 ]]6<<!#+^!_a 	MNN**++XdU-KM	M 	M 	Ms   AB		BN)	r9   r:   r;   r<   r   r   r   r   r   rL   r   r   r   r      s!    1T	'0A
Mr   r   c                       e Zd ZdZd Zy)VerifyCertSetupz#Refactoring for verification tests.c                    t        j                         | _        t        | j                  _        t        | j                  _        t        | j                  _        t        j                  d      | j                  _
        t        j                         | _        t        | j                  _        t        | j                  _        t        | j                  _
        y )Nzcert_fullchain_2048.pem)r   	MagicMockrenewable_certSS_CERT_PATH	cert_path
chain_pathRSA2048_KEY_PATHkey_pathrU   r~   fullchain_pathbad_renewable_certrW   s    r   r   zVerifyCertSetup.setUp   s    "nn.(4%)5&'7$-6-B-BC\-]*"&.."2-9*,8)1=.r   N)r9   r:   r;   r<   r   rL   r   r   r   r      s
    -
>r   r   c                   p    e Zd ZdZd Zd Z ej                  d ej                  d            d        Z
y)	VerifyRenewableCertTest4Tests for certbot.crypto_util.verify_renewable_cert.c                     ddl m}  ||      S )Nr   )verify_renewable_cert)r%   r   )r   r   r   s      r   r)   zVerifyRenewableCertTest._call   s    =$^44r   c                 >    | j                  | j                        J y r   r)   r   rW   s    r   test_verify_renewable_certz2VerifyRenewableCertTest.test_verify_renewable_cert       zz$--.666r   z-certbot.crypto_util.verify_renewable_cert_sigr`   )r5   c                     t        j                  t        j                        5  | j	                  | j
                         d d d        y # 1 sw Y   y xY wr   r6   r7   r   r   r)   r   )r   !unused_verify_renewable_cert_signs     r   "test_verify_renewable_cert_failurez:VerifyRenewableCertTest.test_verify_renewable_cert_failure   s9    ]]6<<( 	0JJt../	0 	0 	0   A		AN)r9   r:   r;   r<   r)   r   r   r>   r   r   r   rL   r   r   r   r      s>    >57 TZZ?\V\\Z\M]^0 _0r   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)VerifyRenewableCertSigTestr   c                     ddl m}  ||      S )Nr   )verify_renewable_cert_sig)r%   r   )r   r   r   s      r   r)   z VerifyRenewableCertSigTest._call   s    A(88r   c                 >    | j                  | j                        J y r   r   rW   s    r   test_cert_sig_matchz.VerifyRenewableCertSigTest.test_cert_sig_match   r   r   c                     t        j                         }t        |_        t        |_        t
        |_        | j                  |      J y r   )r   r   P256_CERT_PATHr   r   P256_KEYr   r)   )r   r   s     r   test_cert_sig_match_ecz1VerifyRenewableCertSigTest.test_cert_sig_match_ec   s;    )#1 $2!"*zz.)111r   c                     t        j                  d      | j                  _        t	        j
                  t        j                        5  | j                  | j                         d d d        y # 1 sw Y   y xY w)Nzcert_512_bad.pem)	rU   r~   r   r   r6   r7   r   r   r)   rW   s    r   test_cert_sig_mismatchz1VerifyRenewableCertSigTest.test_cert_sig_mismatch   sS    ,5,A,ABT,U)]]6<<( 	0JJt../	0 	0 	0s   A--A6N)r9   r:   r;   r<   r)   r   r   r   rL   r   r   r   r      s    >9720r   r   c                   (    e Zd ZdZd Zd Zd Zd Zy)VerifyFullchainTestz/Tests for certbot.crypto_util.verify_fullchain.c                     ddl m}  ||      S )Nr   )verify_fullchain)r%   r   )r   r   r   s      r   r)   zVerifyFullchainTest._call  s    8//r   c                 >    | j                  | j                        J y r   r   rW   s    r   test_fullchain_matchesz*VerifyFullchainTest.test_fullchain_matches  r   r   c                     t        j                  t        j                        5  | j	                  | j
                         d d d        y # 1 sw Y   y xY wr   r   rW   s    r   test_fullchain_mismatchz+VerifyFullchainTest.test_fullchain_mismatch  s9    ]]6<<( 	0JJt../	0 	0 	0r   c                     d| j                   _        t        j                  t        j
                        5  | j                  | j                          d d d        y # 1 sw Y   y xY w)Ndog)r   chainr6   r7   r   r   r)   rW   s    r   test_fullchain_ioerrorz*VerifyFullchainTest.test_fullchain_ioerror  sG    (-%]]6<<( 	0JJt../	0 	0 	0s   AA#N)r9   r:   r;   r<   r)   r   r   r   rL   r   r   r   r     s    90700r   r   c                   "    e Zd ZdZd Zd Zd Zy)VerifyCertMatchesPrivKeyTestz;Tests for certbot.crypto_util.verify_cert_matches_priv_key.c                 H    ddl m}  ||j                  |j                        S )Nr   )verify_cert_matches_priv_key)r%   r   certprivkey)r   r   r   s      r   r)   z"VerifyCertMatchesPrivKeyTest._call  s    D+N,?,?AWAWXXr   c                     t         | j                  _        t        | j                  _        | j                  | j                        J y r   )r   r   r   r   r   r)   rW   s    r   test_cert_priv_key_matchz5VerifyCertMatchesPrivKeyTest.test_cert_priv_key_match   s9    #/ &6#zz$--.666r   c                     t         | j                  _        t        | j                  _        t        j                  t        j                        5  | j                  | j                         d d d        y # 1 sw Y   y xY wr   )
RSA256_KEY_PATHr   r   r   r   r6   r7   r   r   r)   rW   s    r   test_cert_priv_key_mismatchz8VerifyCertMatchesPrivKeyTest.test_cert_priv_key_mismatch%  sU    *9''3$]]6<<( 	0JJt../	0 	0 	0s   A33A<N)r9   r:   r;   r<   r)   r   r   rL   r   r   r   r     s    EY7
0r   r   c                   2    e Zd ZdZed        Zd Zd Zd Zy)ValidPrivkeyTestz,Tests for certbot.crypto_util.valid_privkey.c                     ddl m}  ||      S )Nr   )valid_privkey)r%   r   )r&   r   r   s      r   r)   zValidPrivkeyTest._call0  s    5W%%r   c                 2    | j                  t              sJ y r   )r)   rp   rW   s    r   rq   z ValidPrivkeyTest.test_valid_true5  s    zz*%%%r   c                 *    | j                  d      rJ y r_   ra   rW   s    r   rb   z!ValidPrivkeyTest.test_empty_false8  rc   r   c                 *    | j                  d      rJ y re   ra   rW   s    r   rf   z"ValidPrivkeyTest.test_random_false;  rg   r   N)	r9   r:   r;   r<   r=   r)   rq   rb   rf   rL   r   r   r   r   -  s&    6& &&")r   r   c                   ,    e Zd ZdZed        Zd Zd Zy)GetSANsFromCertTestz1Tests for certbot.crypto_util.get_sans_from_cert.c                     ddl m}  ||i |S )Nr   )get_sans_from_cert)r%   r   )r&   rl   rm   r   s       r   r)   zGetSANsFromCertTest._callB  rn   r   c                 V    g | j                  t        j                  d            k(  sJ y r   rT   rW   s    r   test_singlezGetSANsFromCertTest.test_singleG  s$    TZZ	 5 5n EFFFFr   c                 Z    ddg| j                  t        j                  d            k(  sJ y NrE   zwww.example.comzcert-san_512.pemrT   rW   s    r   test_sanzGetSANsFromCertTest.test_sanJ  5    01JJy,,-?@AB 	B Br   N)r9   r:   r;   r<   r=   r)   r   r   rL   r   r   r   r   ?  s#    ;3 3GBr   r   c                   8    e Zd ZdZed        Zd Zd Zd Zd Z	y)GetNamesFromCertTestz2Tests for certbot.crypto_util.get_names_from_cert.c                     ddl m}  ||i |S )Nr   )get_names_from_cert)r%   r  )r&   rl   rm   r  s       r   r)   zGetNamesFromCertTest._callR  s    ;"D3F33r   c                 X    dg| j                  t        j                  d            k(  sJ y )NrE   r   rT   rW   s    r   r   z GetNamesFromCertTest.test_singleW  s-    JJy,,^<=> 	> >r   c                 Z    ddg| j                  t        j                  d            k(  sJ y r   rT   rW   s    r   r   zGetNamesFromCertTest.test_san[  r   r   c                     dgdD cg c]  }dj                  |       c}z   | j                  t        j                  d            k(  sJ y c c}w )NrE   abcdz{0}.example.comzcert-5sans_512.pem)formatr)   rU   rV   )r   cs     r   test_common_name_sans_orderz0GetNamesFromCertTest.test_common_name_sans_order_  sR     v!N!"3":":1"=!NNJJy,,-ABCD 	D D!Ns   Ac                     t        j                  t        j                  j                        5  | j                  d       d d d        y # 1 sw Y   y xY w)Nzhello there)r6   r7   r   r   r   r)   rW   s    r   test_parse_non_certz(GetNamesFromCertTest.test_parse_non_certe  s9    ]]7>>//0 	&JJ}%	& 	& 	&s   A		AN)
r9   r:   r;   r<   r=   r)   r   r   r	  r  rL   r   r   r   r   O  s-    <4 4>BD&r   r   c                   8    e Zd ZdZed        Zd Zd Zd Zd Z	y)GetNamesFromReqTestz1Tests for certbot.crypto_util.get_names_from_req.c                     ddl m}  ||i |S )Nr   )get_names_from_req)r%   r  )r&   rl   rm   r  s       r   r)   zGetNamesFromReqTest._callm  rn   r   c                 V    g | j                  t        j                  d            k(  sJ y )Nzcsr-nonames_512.pemrT   rW   s    r   test_nonamesz GetNamesFromReqTest.test_nonamesr  s/    JJy,,-BCDE 	E Er   c                 X    dg| j                  t        j                  d            k(  sJ y )NrE   zcsr-nosans_512.pemrT   rW   s    r   test_nosanszGetNamesFromReqTest.test_nosansv  s1    JJy,,-ABCD 	D Dr   c                 Z    g d| j                  t        j                  d            k(  sJ y )N)rE   zexample.orgzexample.netzexample.infozsubdomain.example.comzother.subdomain.example.comzcsr-6sans_512.pemrT   rW   s    r   	test_sanszGetNamesFromReqTest.test_sansz  s2    EJJy,,-@ABC 	C Cr   c                 h    ddl m} dg| j                  t        j                  d      |      k(  sJ y )Nr   )FILETYPE_ASN1r|   r\   )typ)OpenSSL.cryptor  r)   rU   rV   )r   r  s     r   test_derzGetNamesFromReqTest.test_der  s7    0JJy,,];JOP 	P Pr   N)
r9   r:   r;   r<   r=   r)   r  r  r  r  rL   r   r   r  r  j  s/    ;3 3EDC
Pr   r  c                       e Zd ZdZd Zd Zy)CertLoaderTestz8Tests for certbot.crypto_util.pyopenssl_load_certificatec                     ddl m}  |t              \  }}|j                  d      t        j
                  j                  |t              j                  d      k(  sJ y )Nr   pyopenssl_load_certificatesha256)r%   r  CERTdigestr   r   load_certificate)r   r  r   	file_types       r   test_load_valid_certz#CertLoaderTest.test_load_valid_cert  sQ    B4T:i{{8$ 88DIPPQYZ[ 	[ [r   c                     ddl m} t        j                  dd      }t	        j
                  t        j                        5   ||       d d d        y # 1 sw Y   y xY w)Nr   r  s   BEGIN CERTIFICATEs   ASDFASDFASDF!!!)r%   r  r!  replacer6   r7   r   r   )r   r  bad_cert_datas      r   test_load_invalid_certz%CertLoaderTest.test_load_invalid_cert  sD    B%9;MN]]6<<( 	6&}5	6 	6 	6s    	AAN)r9   r:   r;   r<   r%  r)  rL   r   r   r  r    s    B[6r   r  c                       e Zd ZdZd Zy)NotBeforeTestz'Tests for certbot.crypto_util.notBeforec                 N    ddl m}  |t              j                         dk(  sJ y )Nr   )	notBeforez2014-12-11T22:34:45+00:00)r%   r-  	CERT_PATH	isoformat)r   r-  s     r   test_notBeforezNotBeforeTest.test_notBefore  s(    1#--/45 	5 5r   N)r9   r:   r;   r<   r0  rL   r   r   r+  r+    s
    15r   r+  c                       e Zd ZdZd Zy)NotAfterTest&Tests for certbot.crypto_util.notAfterc                 N    ddl m}  |t              j                         dk(  sJ y )Nr   )notAfterz2014-12-18T22:34:45+00:00)r%   r5  r.  r/  )r   r5  s     r   test_notAfterzNotAfterTest.test_notAfter  s(    0	",,.45 	5 5r   N)r9   r:   r;   r<   r6  rL   r   r   r2  r2    s
    05r   r2  c                       e Zd ZdZd Zy)Sha256sumTestr3  c                 2    ddl m}  |t              dk(  sJ y )Nr   )	sha256sum@914ffed8daf9e2c99d90ac95c77d54f32cbd556672facac380f0c063498df84e)r%   r:  r.  )r   r:  s     r   test_sha256sumzSha256sumTest.test_sha256sum  s"    1#NO 	O Or   N)r9   r:   r;   r<   r<  rL   r   r   r8  r8    s    0Or   r8  c                       e Zd ZdZd Zd Zy)CertAndChainFromFullchainTestz;Tests for certbot.crypto_util.cert_and_chain_from_fullchainc                     ddl m} |j                  |j                  |j	                  |j                  |            j                         S )Nr   )r   )r   r   dump_certificater   r#  decode)r   cert_pemr   s      r   _parse_and_reencode_pemz5CertAndChainFromFullchainTest._parse_and_reencode_pem  s?    "&&v':':##F$7$7BDDJFH	Mr   c                    t         j                         }|t        j                         z   }||z   }|dz   |z   }|j                  dd      }| j	                  |      | j	                  |      z   | j	                  t        j                               z   }ddlm} ||||fD ]  } ||      \  }	}
|	|k(  sJ |
|k(  rJ  t        j                  t        j                        5   ||       d d d        y # 1 sw Y   y xY w)N
z
r   )cert_and_chain_from_fullchain)r!  rA  SS_CERTr'  rC  r%   rF  r6   r7   r   r   )r   rB  	chain_pemfullchain_pemspacey_fullchain_pemcrlf_fullchain_pemacmev1_fullchain_pemrF  	fullchaincert_out	chain_outs              r   "test_cert_and_chain_from_fullchainz@CertAndChainFromFullchainTest.test_cert_and_chain_from_fullchain  s   ;;=w~~//	 9,'%/);*225'B
  $;;HE((2 3595Q5QRYR`R`Rb5c d 	F')=?Q.0 	*I"?	"JHix'''	)))		* ]]6<<( 	4)(3	4 	4 	4s   	C11C:N)r9   r:   r;   r<   rC  rP  rL   r   r   r>  r>    s    EM
4r   r>  c                       e Zd ZdZed        Zd Zd Z ej                  d      d        Z
 ej                  d      d        Z ej                  d      d	        Zy
)FindChainWithIssuerTestz4Tests for certbot.crypto_util.find_chain_with_issuerc                 "    ddl m}  ||||      S )Nr   )find_chain_with_issuer)r%   rT  )r&   
fullchains	issuer_cnrm   rT  s        r   r)   zFindChainWithIssuerTest._call  s    >%j)VDDr   c                     t         j                         t        j                         z   t         j                         t        j                         z   gS r   )	CERT_LEAFrA  CERT_ISSUERCERT_ALT_ISSUERrW   s    r   _all_fullchainsz'FindChainWithIssuerTest._all_fullchains  s@      "[%7%7%99  "_%;%;%==? 	?r   c                 \    | j                         }| j                  |d      }||d   k(  sJ y)z/Correctly pick the chain based on the root's CNPebble Root CA 0cc6f0   N)r[  r)   )r   rU  matcheds      r   test_positive_matchz+FindChainWithIssuerTest.test_positive_match  s3    ))+
**Z)@A*Q-'''r   zcertbot.crypto_util.logger.infoc                     | j                         }|d   t        j                         z   |d<   | j                  |d      }||d   k(  sJ |j	                          y)z5Don't pick a chain where only an intermediate matchesr^  r]  r   N)r[  rY  rA  r)   assert_not_calledr   	mock_inforU  r_  s       r   test_intermediate_matchz/FindChainWithIssuerTest.test_intermediate_match  s^     ))+

 #1(:(:(<<
1**Z)@A*Q-'''##%r   c                 |    | j                         }| j                  |d      }||d   k(  sJ |j                          y )Nnon-existent issuerr   )r[  r)   rb  rc  s       r   test_no_matchz%FindChainWithIssuerTest.test_no_match  s?    ))+
**Z)>?*Q-'''##%r   z"certbot.crypto_util.logger.warningc                     | j                         }| j                  |dd      }||d   k(  sJ |j                  dd       y )Nrg  T)warn_on_no_matchr   zCertbot has been configured to prefer certificate chains with issuer '%s', but no chain from the CA matched this issuer. Using the default certificate chain instead.)r[  r)   assert_called_once_with)r   mock_warningrU  r_  s       r   test_warning_on_no_matchz0FindChainWithIssuerTest.test_warning_on_no_match  sV    ))+
**Z)>.2  4*Q-''',, .H "	#r   N)r9   r:   r;   r<   r=   r)   r[  r`  r   r>   re  rh  rm  rL   r   r   rR  rR    s    >E E?( TZZ12
& 3
& TZZ12& 3& TZZ45# 6#r   rR  __main__r^  )=r<   r   r   sysunittestr   r   r6   certbotr   r   certbot.compatr   r   certbot.tests.utiltestsrU   rV   rs   r~   r   rp   r   r.  r!  r   rG  r   r   	P256_CERTrX  rY  rZ  TempDirTestCaser
   rA   TestCaserN   ri   rv   r   r   r   r   r   r   r   r   r   r  r  r+  r2  r8  r>  rR  r9   exitmainargv__file__rL   r   r   <module>r|     s   $  	 
       %  & &"Y""#34
')''(89"Y""#34
(9(():; !I!!.1	y^,$y$$_5
)


0 9  !34&&&'AB!I!!"<=	!I!!/2	#i##$=>')''(AB *i//  *F-i// - )8$$ )0>8,, >""A)) "AJ(M(## (MV>h'' > 0o 0 0 0.0/ 0(0? 0()x(( )$B(++ B &8,, &6P(++ P66X&& 6"5H%% 558$$ 5OH%% O4H$5$5 4@/#h// /#d zCHH[V[[!"
234 r   