
    U-f4                     $   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ZddlZddlm	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mZ  G d de
j                  Z G d d	e
j                  Z G d
 de
j                  Z G d de
j                  Z G d de
j                  Z G d de
j                  Z G d de
j                  Z G d de
j                  Zedk    r1 ej         ej        ej        dd         e gz                        dS dS )zTests for acme.crypto_util.    N)List)errors)	test_utilc                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
SSLSocketAndProbeSNITestz/Tests for acme.crypto_util.SSLSocket/probe_sni.c                    t          j        d          | _        t          j        d          }d|| j        j        fiddlm  G fddt          j                  } |dt          j	                  | _
        | j
        j                                        d	         | _        t          j        | j
        j        
          | _        d S )Nzrsa2048_cert.pemzrsa2048_key.pem   foor   	SSLSocketc                   $     e Zd Z fdZ xZS )3SSLSocketAndProbeSNITest.setUp.<locals>._TestServerc                 f     t                      j        |i |  | j                  | _        d S N)super__init__socket)selfargskwargsr   	__class__certss      t/home/cdr/domains/dharristours.com/map/certbot/lib/python3.11/site-packages/acme/_internal/tests/crypto_util_test.pyr   z<SSLSocketAndProbeSNITest.setUp.<locals>._TestServer.__init__    s8      $1&111'iU;;    )__name__
__module____qualname__r   __classcell__)r   r   r   s   @r   _TestServerr      sC        < < < < < < < < < < <r   r   ) r      )target)r   load_comparable_certcertload_pyopenssl_private_keywrappedacme.crypto_utilr   socketserver	TCPServerBaseRequestHandlerserverr   getsocknameport	threadingThreadhandle_requestserver_thread)r   keyr   r   r   s      @@r   setUpzSSLSocketAndProbeSNITest.setUp   s    23EFF	23DEE#ty012......	< 	< 	< 	< 	< 	< 	< 	<,0 	< 	< 	<
 "k'<+JKKK&2244Q7	&-;-/ / /r   c                     | j                                         r| j                                          | j                                         d S r   )r0   is_alivejoinr*   server_closer   s    r   tearDownz!SSLSocketAndProbeSNITest.tearDown)   sH    &&(( 	&##%%%  """""r   c                 X    ddl m} t          j         ||d| j                            S )Nr   )	probe_sni	127.0.0.1)hostr,   )r&   r:   joseComparableX509r,   )r   namer:   s      r   _probezSSLSocketAndProbeSNITest._probe/   sE    ......"99{$4 $4 $4 5 5 	5r   c                 `    | j                                          t          j        d           d S )Nr    )r0   starttimesleepr7   s    r   _start_serverz&SSLSocketAndProbeSNITest._start_server4   s(      """
1r   c                 n    |                                   | j        |                     d          k    sJ d S )Nr	   )rE   r#   r@   r7   s    r   test_probe_okz&SSLSocketAndProbeSNITest.test_probe_ok8   s9    yDKK////////r   c                     |                                   t          j        t          j                  5  |                     d           d d d            d S # 1 swxY w Y   d S )N   bar)rE   pytestraisesr   Errorr@   r7   s    r   test_probe_not_recognized_namez7SSLSocketAndProbeSNITest.test_probe_not_recognized_name<   s    ]6<(( 	  	 KK	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   AAAc                 x   | j                                          t          j                    }	 t          j        d           t          j        t          j                  5  | 	                    d           d d d            n# 1 swxY w Y   t          j        |           d S # t          j        |           w xY w)Nr    rI   )
r*   r6   r   getdefaulttimeoutsetdefaulttimeoutrJ   rK   r   rL   r@   )r   original_timeouts     r   test_probe_connection_errorz4SSLSocketAndProbeSNITest.test_probe_connection_errorA   s      """!355	7$Q'''v|,, $ $F###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $%566666F$%56666s/   2B#  B6B# BB# 	B
B# #B9N)r   r   r   __doc__r2   r8   r@   rE   rG   rM   rR    r   r   r   r      s        99/ / /$# # #5 5 5
  0 0 0     
7 7 7 7 7r   r   c                       e Zd ZdZd ZdS )SSLSocketTestz%Tests for acme.crypto_util.SSLSocket.c                    ddl m} t          j        t                    5   |d ddid           }d d d            n# 1 swxY w Y   t          j        t                    5   |d           }d d d            d S # 1 swxY w Y   d S )Nr   r
   sni)r1   r#   c                     d S r   rT   )_s    r   <lambda>zASSLSocketTest.test_ssl_socket_invalid_arguments.<locals>.<lambda>S   s    T r   )cert_selection)r&   r   rJ   rK   
ValueError)r   r   rZ   s      r   !test_ssl_socket_invalid_argumentsz/SSLSocketTest.test_ssl_socket_invalid_argumentsO   s    ......]:&& 	3 	3	$ 8#1>3 3 3A	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 ]:&& 	  	 	$A	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s!   >AA"A;;A?A?N)r   r   r   rS   r^   rT   r   r   rV   rV   L   s)        //         r   rV   c                   @    e Zd ZdZed             Zd Zd Zd Zd Z	dS )PyOpenSSLCertOrReqAllNamesTestz;Test for acme.crypto_util._pyopenssl_cert_or_req_all_names.c                 6    ddl m}  | ||                    S )Nr   ) _pyopenssl_cert_or_req_all_names)r&   rb   )clsloaderr?   rb   s       r   _callz$PyOpenSSLCertOrReqAllNamesTest._call[   s0     	FEEEEE//t===r   c                 B    |                      t          j        |          S r   re   r   	load_certr   r?   s     r   
_call_certz)PyOpenSSLCertOrReqAllNamesTest._call_certa       zz)-t444r   c                 >    |                      d          dgk    sJ d S )Nzcert-nocn.derzno-common-name.badssl.comrj   r7   s    r   test_cert_one_san_no_commonz:PyOpenSSLCertOrReqAllNamesTest.test_cert_one_san_no_commond   s5    //567 7 7 7 7 7r   c                 >    |                      d          dgk    sJ d S )Ncert.pemexample.comrm   r7   s    r   test_cert_no_sans_yes_commonz;PyOpenSSLCertOrReqAllNamesTest.test_cert_no_sans_yes_commonh   s'    z**}o======r   c                 @    |                      d          ddgk    sJ d S Ncert-san.pemrq   www.example.comrm   r7   s    r   test_cert_two_sans_yes_commonz<PyOpenSSLCertOrReqAllNamesTest.test_cert_two_sans_yes_commonk   8    ~..'):;< < < < < <r   N)
r   r   r   rS   classmethodre   rj   rn   rr   rw   rT   r   r   r`   r`   X   so        EE> > [>
5 5 57 7 7> > >< < < < <r   r`   c                       e Zd ZdZed             Ze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d ZdS )PyOpenSSLCertOrReqSANTestz5Test for acme.crypto_util._pyopenssl_cert_or_req_san.c                 6    ddl m}  | ||                    S )Nr   )_pyopenssl_cert_or_req_san)r&   r}   )rc   rd   r?   r}   s       r   re   zPyOpenSSLCertOrReqSANTest._calls   s0     	@?????))&&,,777r   c           	          d t          j        t          dd          t          dd          t          dd                    D             fdt          d	t                    d
          D             S )z5Returns expected names from '{cert,csr}-idnsans.pem'.c                 ,    g | ]}t          |          S rT   )chr.0is     r   
<listcomp>z<PyOpenSSLCertOrReqSANTest._get_idn_names.<locals>.<listcomp>|   s0     I I IAQ I I Ir   i  i   iA  i  i   iw  c                 V    g | ]%}d                      ||dz                      dz   &S )r   -   z.invalid)r5   )r   r   charss     r   r   z<PyOpenSSLCertOrReqSANTest._get_idn_names.<locals>.<listcomp>   sG     3 3 3 aRi())J6 3 3 3r   r   r   )	itertoolschainrangelen)rc   r   s    @r   _get_idn_namesz(PyOpenSSLCertOrReqSANTest._get_idn_namesy   s    I Iue1D1D16ue1D1D16vv1F1F"H "H I I I3 3 3 3q#e**b113 3 3 	3r   c                 B    |                      t          j        |          S r   rg   ri   s     r   rj   z$PyOpenSSLCertOrReqSANTest._call_cert   rk   r   c                 B    |                      t          j        |          S r   re   r   load_csrri   s     r   	_call_csrz#PyOpenSSLCertOrReqSANTest._call_csr       zz),d333r   c                 <    |                      d          g k    sJ d S Nrp   rm   r7   s    r   test_cert_no_sansz+PyOpenSSLCertOrReqSANTest.test_cert_no_sans   %    z**b000000r   c                 @    |                      d          ddgk    sJ d S rt   rm   r7   s    r   test_cert_two_sansz,PyOpenSSLCertOrReqSANTest.test_cert_two_sans   rx   r   c                 l    |                      d          d t          dd          D             k    sJ d S )Nzcert-100sans.pemc                 8    g | ]}d                      |          S zexample{0}.comformatr   s     r   r   zDPyOpenSSLCertOrReqSANTest.test_cert_hundred_sans.<locals>.<listcomp>   '    LLL*11!44LLLr   r    e   )rj   r   r7   s    r   test_cert_hundred_sansz0PyOpenSSLCertOrReqSANTest.test_cert_hundred_sans   sO    122LLeAsmmLLLM M M M M Mr   c                 `    |                      d          |                                 k    sJ d S )Ncert-idnsans.pem)rj   r   r7   s    r   test_cert_idn_sansz,PyOpenSSLCertOrReqSANTest.test_cert_idn_sans   s?    122,,../ / / / / /r   c                 <    |                      d          g k    sJ d S Nzcsr-nosans.pemr   r7   s    r   test_csr_no_sansz*PyOpenSSLCertOrReqSANTest.test_csr_no_sans   &    ~~.//2555555r   c                 >    |                      d          dgk    sJ d S )Nzcsr.pemrq   r   r7   s    r   test_csr_one_sanz*PyOpenSSLCertOrReqSANTest.test_csr_one_san   s'    ~~i((]O;;;;;;r   c                 @    |                      d          ddgk    sJ d S )Ncsr-san.pemrq   rv   r   r7   s    r   test_csr_two_sansz+PyOpenSSLCertOrReqSANTest.test_csr_two_sans   s8    ~~m,,'):;< < < < < <r   c                 @    |                      d          g dk    sJ d S )Nzcsr-6sans.pem)rq   zexample.orgzexample.netzexample.infozsubdomain.example.comzother.subdomain.example.comr   r7   s    r   test_csr_six_sansz+PyOpenSSLCertOrReqSANTest.test_csr_six_sans   s>    ~~o..9 9 99 9 9 9 9 9r   c                 l    |                      d          d t          dd          D             k    sJ d S )Nzcsr-100sans.pemc                 8    g | ]}d                      |          S r   r   r   s     r   r   zCPyOpenSSLCertOrReqSANTest.test_csr_hundred_sans.<locals>.<listcomp>   r   r   r    r   )r   r   r7   s    r   test_csr_hundred_sansz/PyOpenSSLCertOrReqSANTest.test_csr_hundred_sans   sO    ~~/00LLeAsmmLLLM M M M M Mr   c                 `    |                      d          |                                 k    sJ d S )Nzcsr-idnsans.pem)r   r   r7   s    r   test_csr_idn_sansz+PyOpenSSLCertOrReqSANTest.test_csr_idn_sans   s?    ~~/00,,../ / / / / /r   c                 @    |                      d          ddgk    sJ d S )Nzcritical-san.pemzchicago-cubs.venafi.examplezcubs.venafi.examplerm   r7   s    r   test_critical_sanz+PyOpenSSLCertOrReqSANTest.test_critical_san   s?    12279NOP P P P P Pr   N)r   r   r   rS   ry   re   r   rj   r   r   r   r   r   r   r   r   r   r   r   r   rT   r   r   r{   r{   p   s       ??8 8 [8
 3 3 [35 5 54 4 41 1 1< < <M M M/ / /6 6 6< < << < <9 9 9M M M/ / /P P P P Pr   r{   c                   d    e Zd ZdZed             Zd Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd ZdS )PyOpenSSLCertOrReqSANIPTestz8Test for acme.crypto_util._pyopenssl_cert_or_req_san_ip.c                 6    ddl m}  | ||                    S )Nr   )_pyopenssl_cert_or_req_san_ip)r&   r   )rc   rd   r?   r   s       r   re   z!PyOpenSSLCertOrReqSANIPTest._call   s0     	CBBBBB,,VVD\\:::r   c                 B    |                      t          j        |          S r   rg   ri   s     r   rj   z&PyOpenSSLCertOrReqSANIPTest._call_cert   rk   r   c                 B    |                      t          j        |          S r   r   ri   s     r   r   z%PyOpenSSLCertOrReqSANIPTest._call_csr   r   r   c                 <    |                      d          g k    sJ d S r   rm   r7   s    r   r   z-PyOpenSSLCertOrReqSANIPTest.test_cert_no_sans   r   r   c                 <    |                      d          g k    sJ d S r   r   r7   s    r   r   z,PyOpenSSLCertOrReqSANIPTest.test_csr_no_sans   r   r   c                 <    |                      d          g k    sJ d S )Nru   rm   r7   s    r   test_cert_domain_sansz1PyOpenSSLCertOrReqSANIPTest.test_cert_domain_sans   s%    ~.."444444r   c                 <    |                      d          g k    sJ d S )Nr   r   r7   s    r   test_csr_domain_sansz0PyOpenSSLCertOrReqSANIPTest.test_csr_domain_sans   s%    ~~m,,222222r   c                 @    |                      d          ddgk    sJ d S )Nzcert-ipsans.pem192.0.2.145203.0.113.1rm   r7   s    r   test_cert_ip_two_sansz1PyOpenSSLCertOrReqSANIPTest.test_cert_ip_two_sans   s+    011m]5SSSSSSSr   c                 @    |                      d          ddgk    sJ d S )Nzcsr-ipsans.pemr   r   r   r7   s    r   test_csr_ip_two_sansz0PyOpenSSLCertOrReqSANIPTest.test_csr_ip_two_sans   s+    ~~.//M=3QQQQQQQr   c                 @    |                      d          ddgk    sJ d S )Nzcsr-ipv6sans.pem0:0:0:0:0:0:0:1%A3BE:32F3:206E:C75D:956:CEE:9858:5EC5r   r7   s    r   test_csr_ipv6_sansz.PyOpenSSLCertOrReqSANIPTest.test_csr_ipv6_sans   s?    ~~011+-TUV V V V V Vr   c                 @    |                      d          ddgk    sJ d S )Nzcert-ipv6sans.pemr   r   rm   r7   s    r   test_cert_ipv6_sansz/PyOpenSSLCertOrReqSANIPTest.test_cert_ipv6_sans   s?    233+-TUV V V V V Vr   N)r   r   r   rS   ry   re   rj   r   r   r   r   r   r   r   r   r   rT   r   r   r   r      s        BB; ; [;
5 5 54 4 41 1 16 6 65 5 53 3 3T T TR R RV V VV V V V Vr   r   c                   $    e Zd ZdZd Zd Zd ZdS )GenSsCertTestz6Test for gen_ss_cert (generation of self-signed cert).c                     d| _         g | _        t          j                                        | _        | j                            t          j        j        d           d S )N      )
cert_count
serial_numOpenSSLcryptoPKeyr1   generate_keyTYPE_RSAr7   s    r   r2   zGenSsCertTest.setUp   sH    %'>&&((gn5t<<<<<r   c           	      @   ddl m} t          | j                  D ]V} || j        dgdt          j        d          g          }| j                            |	                                           Wt          t          | j                            | j        k    sJ d S )Nr   gen_ss_certdummyTz10.10.10.10)	force_sanips)r&   r   r   r   r1   	ipaddress
ip_addressr   appendget_serial_numberr   set)r   r   rZ   r#   s       r   test_sn_collisionsz GenSsCertTest.test_sn_collisions   s    000000t'' 	= 	=A;tx'd$-$8$G$G#HJ J JDO""4#9#9#;#;<<<<3t''((DO;;;;;;r   c                     ddl m} t          j        t                    5   || j        t          j        d          g            || j                   d d d            d S # 1 swxY w Y   d S )Nr   r   z1.1.1.1)r   )r&   r   rJ   rK   AssertionErrorr1   r   r   )r   r   s     r   test_no_namezGenSsCertTest.test_no_name   s    000000]>** 	" 	"Ky';I'F'F&GHHHHK!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   6A##A'*A'N)r   r   r   rS   r2   r   r   rT   r   r   r   r      sG        @@= = =< < <" " " " "r   r   c                   F    e Zd ZdZed             Zd Zd Zd Zd Z	d Z
dS )	MakeCSRTestzTest for standalone functions.c                 
   t           j                                        }|                    t           j        j        d           t           j                            t           j        j        |          }ddlm}  ||g|R i |S )Nr   r   )make_csr)	r   r   r   r   r   dump_privatekeyFILETYPE_PEMr&   r   )rc   r   r   privkeyprivkey_pemr   s         r   _call_with_keyzMakeCSRTest._call_with_key   s    .%%''W^4d;;;n44W^5PRYZZ------x5d555f555r   c                    |                      ddg          }d|v sJ d|v sJ t          j                            t          j        j        |          }t          |d          rt          |                                          dk    sJ |                                d                                         t          j        	                    dd	d
                                          k    sJ d S d S )N	a.examplez	b.example   --BEGIN CERTIFICATE REQUEST--   --END CERTIFICATE REQUEST--get_extensionsr    r      subjectAltNameFs   DNS:a.example, DNS:b.examplecriticalvalue)
r   r   r   load_certificate_requestr   hasattrr   r   get_dataX509Extensionr   csr_pemcsrs      r   test_make_csrzMakeCSRTest.test_make_csr  s   %%{K&@AA/7::::-8888n55N'2 2
 3()) 	s))++,,1111%%''*3355,,%"9 -   (**   	 	 r   c                 2   |                      dgdt          j        d          t          j        d          g          }d|v sJ d|v sJ t          j                            t          j        j        |          }t          |d          rt          |	                                          dk    sJ |	                                d	         
                                t          j                            d
dd          
                                k    sJ d S d S )Nr   Fr;   z::1r   r   r   r    r   r   s#   DNS:a.example, IP:127.0.0.1, IP:::1r   )r   r   r   r   r   r   r   r   r   r   r   r   r   s      r   test_make_csr_ipzMakeCSRTest.test_make_csr_ip  s,   %%{mUY=QR]=^=^`i`tuz`{`{<|}}/7::::-8888n55N'2 2
 3()) 	*s))++,,1111%%''*3355$^99!2*/'M :    (xzz* * * *	* 	** *r   c                 |   |                      dgd          }t          j                            t          j        j        |          }t          |d          rbt          |                                          dk    sJ d |                                D             }t          |          dk    sJ d            d S d S )	Nr   T)must_stapler      c                 B    g | ]}|                                 d k    |S )s   0)r   )r   es     r   r   z9MakeCSRTest.test_make_csr_must_staple.<locals>.<listcomp>6  s5      9  9  9a::<<#777 !"777r   r    z*Expected exactly one Must Staple extension)r   r   r   r   r   r   r   r   )r   r  r  must_staple_extss       r   test_make_csr_must_staplez%MakeCSRTest.test_make_csr_must_staple)  s    %%{m%FFn55N'2 2 3()) 	=s))++,,1111 9  93+=+=+?+?  9  9  9'((A---< .--	= 	= .-r   c                     t          j        t                    5  |                                  d d d            d S # 1 swxY w Y   d S r   )rJ   rK   r]   r   r7   s    r   test_make_csr_without_hostnamez*MakeCSRTest.test_make_csr_without_hostname;  s    ]:&& 	" 	"!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   <A A c                     |                      dg          }t          j                            t          j        j        |          }|                                dk    s
J d            d S )Nr   r   zEExpected CSR version to be v1 (encoded as 0), per RFC 2986, section 4)r   r   r   r   r   get_versionr   s      r   test_make_csr_correct_versionz)MakeCSRTest.test_make_csr_correct_version?  sf    %%{m44n55N'2 2   A%%%S &%%%%r   N)r   r   r   rS   ry   r   r  r  r  r  r  rT   r   r   r   r      s        ((6 6 [6  $* * *(= = =$" " "T T T T Tr   r   c                   4    e Zd ZdZed             Zd Zd ZdS )DumpPyopensslChainTestzTest for dump_pyopenssl_chain.c                 $    ddl m}  ||          S )Nr   )dump_pyopenssl_chain)r&   r  )rc   loadedr  s      r   re   zDumpPyopensslChainTest._callK  s'     	:99999##F+++r   c                     g d}d |D             }t          d |D                       }t          |                     |                    |k    sJ d S )Nrp   ru   r   c                 6    g | ]}t          j        |          S rT   r   rh   r   r?   s     r   r   zDDumpPyopensslChainTest.test_dump_pyopenssl_chain.<locals>.<listcomp>S  #    >>>)%d++>>>r   c              3      K   | ]@}t          t          j                            t          j        j        |                    V  Ad S r   )r   r   r   dump_certificater   )r   r#   s     r   	<genexpr>zCDumpPyopensslChainTest.test_dump_pyopenssl_chain.<locals>.<genexpr>T  sU           //0KTRRSS           r   )sumr   re   )r   namesr  lengths       r   test_dump_pyopenssl_chainz0DumpPyopensslChainTest.test_dump_pyopenssl_chainQ  sx    @@@>>>>>              4::f%%&&&000000r   c                    g d}d |D             }t           j        fd|D             }t          j        j        t          fd|D                       }t          |                     |                    |k    sJ d S )Nr  c                 6    g | ]}t          j        |          S rT   r  r  s     r   r   zLDumpPyopensslChainTest.test_dump_pyopenssl_chain_wrapped.<locals>.<listcomp>[  r  r   c                 &    g | ]} |          S rT   rT   )r   r#   	wrap_funcs     r   r   zLDumpPyopensslChainTest.test_dump_pyopenssl_chain_wrapped.<locals>.<listcomp>]  s!    666t99T??666r   c              3   h   K   | ],}t           t          j        j        |                    V  -d S r   )r   r   r   r   )r   r#   	dump_funcs     r   r  zKDumpPyopensslChainTest.test_dump_pyopenssl_chain_wrapped.<locals>.<genexpr>_  s<      ZZ4S7>#>EEFFZZZZZZr   )r=   r>   r   r   r  r   r   re   )r   r!  r  r%   r"  r)  r'  s        @@r   !test_dump_pyopenssl_chain_wrappedz8DumpPyopensslChainTest.test_dump_pyopenssl_chain_wrappedY  s    @@@>>>>>'	6666v666N3	ZZZZSYZZZZZ4::g&&''6111111r   N)r   r   r   rS   ry   re   r#  r*  rT   r   r   r  r  H  sQ        ((, , [,
1 1 12 2 2 2 2r   r  __main__r    )!rS   r   r   r   r'   sysr-   rC   typingr   unittestjosepyr=   r   rJ   acmer   acme._internal.testsr   TestCaser   rV   r`   r{   r   r   r   r  r   exitmainargv__file__rT   r   r   <module>r7     s   ! !              



                         * * * * * *57 57 57 57 57x0 57 57 57p	  	  	  	  	 H% 	  	  	 < < < < <X%6 < < <0AP AP AP AP AP 1 AP AP APH'V 'V 'V 'V 'V("3 'V 'V 'VT" " " " "H% " " "4MT MT MT MT MT(# MT MT MT`2 2 2 2 2X. 2 2 26 zCH[V[!""
23344444 r   