a oe4@s>dZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl Z ddl Z ddl Z ddlZddlmZddlmZGddde jZGdd d e jZGd d d e jZGd d d e jZGddde jZGddde jZGddde jZGddde jZedkr:eeejdde gdS)zTests for acme.crypto_util.N)List)errors) test_utilc@sHeZdZdZddZddZddZdd Zd d Zd d Z ddZ dS)SSLSocketAndProbeSNITestz/Tests for acme.crypto_util.SSLSocket/probe_sni.cstd|_td}d||jjfiddlmGfdddtj}|dtj |_ |j j d |_ tj|j jd |_dS) Nzrsa2048_cert.pemzrsa2048_key.pemfoor SSLSocketcs eZdZfddZZS)z3SSLSocketAndProbeSNITest.setUp.._TestServercs$tj|i||j|_dSN)super__init__socket)selfargskwargs)r __class__certsFC:\Program Files\Certbot\pkgs\acme\_internal\tests\crypto_util_test.pyr sz._TestServer.__init__)__name__ __module__ __qualname__r __classcell__rrr)rr _TestServersr)r)target)rZload_comparable_certcertZload_pyopenssl_private_keywrappedacme.crypto_utilr socketserverZ TCPServerZBaseRequestHandlerserverr Z getsocknameport threadingThreadZhandle_request server_thread)r keyrrrrsetUps   zSSLSocketAndProbeSNITest.setUpcCs"|jr|j|jdSr )r%is_alivejoinr! server_closer rrrtearDown)s  z!SSLSocketAndProbeSNITest.tearDowncCs"ddlm}t||d|jdS)Nr) probe_sni 127.0.0.1)hostr")rr-joseComparableX509r")r namer-rrr_probe/s zSSLSocketAndProbeSNITest._probecCs|jtddS)Nr)r%starttimesleepr+rrr _start_server4s z&SSLSocketAndProbeSNITest._start_servercCs ||j|dksJdS)Nr)r7rr3r+rrr test_probe_ok8sz&SSLSocketAndProbeSNITest.test_probe_okcCsB|ttj|dWdn1s40YdS)Nbar)r7pytestraisesrErrorr3r+rrrtest_probe_not_recognized_name<sz7SSLSocketAndProbeSNITest.test_probe_not_recognized_namec Csr|jt}zNtdttj| dWdn1sJ0YWt|n t|0dS)Nrr9) r!r*r ZgetdefaulttimeoutZsetdefaulttimeoutr:r;rr<r3)r Zoriginal_timeoutrrrtest_probe_connection_errorAs  *z4SSLSocketAndProbeSNITest.test_probe_connection_errorN) rrr__doc__r'r,r3r7r8r=r>rrrrrsrc@seZdZdZddZdS) SSLSocketTestz%Tests for acme.crypto_util.SSLSocket.cCsddlm}tt&|dddiddd}Wdn1sB0Ytt|d}Wdn1st0YdS)NrrZsni)r&rcSsdSr r)_rrrSzASSLSocketTest.test_ssl_socket_invalid_arguments..)Zcert_selection)rrr:r; ValueError)r rrArrr!test_ssl_socket_invalid_argumentsOs   $ z/SSLSocketTest.test_ssl_socket_invalid_argumentsN)rrrr?rErrrrr@Lsr@c@s<eZdZdZeddZddZddZdd Zd d Z d S) PyOpenSSLCertOrReqAllNamesTestz;Test for acme.crypto_util._pyopenssl_cert_or_req_all_names.cCsddlm}|||S)Nr) _pyopenssl_cert_or_req_all_names)rrG)clsloaderr2rGrrr_call[s z$PyOpenSSLCertOrReqAllNamesTest._callcCs|tj|Sr rJr load_certr r2rrr _call_certasz)PyOpenSSLCertOrReqAllNamesTest._call_certcCs|ddgksJdS)Nz cert-nocn.derzno-common-name.badssl.comrNr+rrrtest_cert_one_san_no_commondsz:PyOpenSSLCertOrReqAllNamesTest.test_cert_one_san_no_commoncCs|ddgksJdS)Ncert.pem example.comrOr+rrrtest_cert_no_sans_yes_commonhsz;PyOpenSSLCertOrReqAllNamesTest.test_cert_no_sans_yes_commoncCs|dddgksJdSN cert-san.pemrRwww.example.comrOr+rrrtest_cert_two_sans_yes_commonksz|rCz.iiiAii iwcs&g|]}d||ddqS)r-z.invalid)r)r\charsrrr_srr`) itertoolschainrangelen)rHrrar_get_idn_namesys z(PyOpenSSLCertOrReqSANTest._get_idn_namescCs|tj|Sr rKrMrrrrNsz$PyOpenSSLCertOrReqSANTest._call_certcCs|tj|Sr rJrZload_csrrMrrr _call_csrsz#PyOpenSSLCertOrReqSANTest._call_csrcCs|dgksJdSNrQrOr+rrrtest_cert_no_sanssz+PyOpenSSLCertOrReqSANTest.test_cert_no_sanscCs|dddgksJdSrTrOr+rrrtest_cert_two_sanssz,PyOpenSSLCertOrReqSANTest.test_cert_two_sanscCs&|dddtddDks"JdS)Nzcert-100sans.pemcSsg|]}d|qSzexample{0}.comformatr\rrrr_rCzDPyOpenSSLCertOrReqSANTest.test_cert_hundred_sans..re)rNrer+rrrtest_cert_hundred_sanssz0PyOpenSSLCertOrReqSANTest.test_cert_hundred_sanscCs|d|ksJdS)Ncert-idnsans.pem)rNrgr+rrrtest_cert_idn_sanssz,PyOpenSSLCertOrReqSANTest.test_cert_idn_sanscCs|dgksJdSNzcsr-nosans.pemrir+rrrtest_csr_no_sanssz*PyOpenSSLCertOrReqSANTest.test_csr_no_sanscCs|ddgksJdS)Nzcsr.pemrRrur+rrrtest_csr_one_sansz*PyOpenSSLCertOrReqSANTest.test_csr_one_sancCs|dddgksJdS)N csr-san.pemrRrVrur+rrrtest_csr_two_sanssz+PyOpenSSLCertOrReqSANTest.test_csr_two_sanscCs|dgdksJdS)Nz csr-6sans.pem)rRz example.orgz example.netz example.infozsubdomain.example.comzother.subdomain.example.comrur+rrrtest_csr_six_sanssz+PyOpenSSLCertOrReqSANTest.test_csr_six_sanscCs&|dddtddDks"JdS)Nzcsr-100sans.pemcSsg|]}d|qSrmrnr\rrrr_rCzCPyOpenSSLCertOrReqSANTest.test_csr_hundred_sans..rrp)rirer+rrrtest_csr_hundred_sanssz/PyOpenSSLCertOrReqSANTest.test_csr_hundred_sanscCs|d|ksJdS)Nzcsr-idnsans.pem)rirgr+rrrtest_csr_idn_sanssz+PyOpenSSLCertOrReqSANTest.test_csr_idn_sanscCs|dddgksJdS)Nzcritical-san.pemzchicago-cubs.venafi.examplezcubs.venafi.examplerOr+rrrtest_critical_sansz+PyOpenSSLCertOrReqSANTest.test_critical_sanN)rrrr?rXrJrgrNrirkrlrqrsrvrwryrzr{r|r}rrrrrYps$  rYc@sleZdZdZeddZddZddZdd Zd d Z d d Z ddZ ddZ ddZ ddZddZdS)PyOpenSSLCertOrReqSANIPTestz8Test for acme.crypto_util._pyopenssl_cert_or_req_san_ip.cCsddlm}|||S)Nr)_pyopenssl_cert_or_req_san_ip)rr)rHrIr2rrrrrJs z!PyOpenSSLCertOrReqSANIPTest._callcCs|tj|Sr rKrMrrrrNsz&PyOpenSSLCertOrReqSANIPTest._call_certcCs|tj|Sr rhrMrrrrisz%PyOpenSSLCertOrReqSANIPTest._call_csrcCs|dgksJdSrjrOr+rrrrksz-PyOpenSSLCertOrReqSANIPTest.test_cert_no_sanscCs|dgksJdSrtrur+rrrrvsz,PyOpenSSLCertOrReqSANIPTest.test_csr_no_sanscCs|dgksJdS)NrUrOr+rrrtest_cert_domain_sanssz1PyOpenSSLCertOrReqSANIPTest.test_cert_domain_sanscCs|dgksJdS)Nrxrur+rrrtest_csr_domain_sanssz0PyOpenSSLCertOrReqSANIPTest.test_csr_domain_sanscCs|dddgksJdS)Nzcert-ipsans.pem 192.0.2.145 203.0.113.1rOr+rrrtest_cert_ip_two_sanssz1PyOpenSSLCertOrReqSANIPTest.test_cert_ip_two_sanscCs|dddgksJdS)Nzcsr-ipsans.pemrrrur+rrrtest_csr_ip_two_sanssz0PyOpenSSLCertOrReqSANIPTest.test_csr_ip_two_sanscCs|dddgksJdS)Nzcsr-ipv6sans.pem0:0:0:0:0:0:0:1%A3BE:32F3:206E:C75D:956:CEE:9858:5EC5rur+rrrtest_csr_ipv6_sanssz.PyOpenSSLCertOrReqSANIPTest.test_csr_ipv6_sanscCs|dddgksJdS)Nzcert-ipv6sans.pemrrrOr+rrrtest_cert_ipv6_sanssz/PyOpenSSLCertOrReqSANIPTest.test_cert_ipv6_sansN)rrrr?rXrJrNrirkrvrrrrrrrrrrr~s r~c@s(eZdZdZddZddZddZdS) GenSsCertTestz6Test for gen_ss_cert (generation of self-signed cert).cCs.d|_g|_tj|_|jtjjddS)N) cert_count serial_numOpenSSLcryptoPKeyr& generate_keyTYPE_RSAr+rrrr's zGenSsCertTest.setUpcCsdddlm}t|jD]0}||jdgdtdgd}|j| qt t |j|jks`JdS)Nr gen_ss_certZdummyTz 10.10.10.10)Z force_sanips) rrrerr& ipaddress ip_addressrappendZget_serial_numberrfset)r rrArrrrtest_sn_collisionss   z GenSsCertTest.test_sn_collisionscCsZddlm}tt0||jtdgd||jWdn1sL0YdS)Nrrz1.1.1.1)r)rrr:r;AssertionErrorr&rr)r rrrr test_no_names  zGenSsCertTest.test_no_nameN)rrrr?r'rrrrrrrs rc@sDeZdZdZeddZddZddZdd Zd d Z d d Z dS) MakeCSRTestzTest for standalone functions.cOsNtj}|tjjdtjtjj|}ddlm}||g|Ri|S)Nrr)make_csr) rrrrrZdump_privatekey FILETYPE_PEMrr)rHrrZprivkeyZ privkey_pemrrrr_call_with_keys   zMakeCSRTest._call_with_keycCs|ddg}d|vsJd|vs&Jtjtjj|}t|drt|dksVJ|dtjj dd d d ksJdS) N a.examplez b.example--BEGIN CERTIFICATE REQUEST----END CERTIFICATE REQUEST--get_extensionsrrsubjectAltNameFsDNS:a.example, DNS:b.exampleZcriticalvalue) rrrload_certificate_requestrhasattrrfrget_data X509Extensionr csr_pemcsrrrr test_make_csrs   zMakeCSRTest.test_make_csrcCs|dgdtdtdg}d|vs,Jd|vs8Jtjtjj|}t|drt| dkshJ| d  tjj d dd d  ksJdS) NrFr.z::1rrrrrrs#DNS:a.example, IP:127.0.0.1, IP:::1r) rrrrrrrrrfrrrrrrrtest_make_csr_ips    zMakeCSRTest.test_make_csr_ipcCsj|jdgdd}tjtjj|}t|drft|dks@Jdd|D}t|dksfJd dS) NrT)Z must_staplercSsg|]}|dkr|qS)s0)r)r]errrr_6s z9MakeCSRTest.test_make_csr_must_staple..rz*Expected exactly one Must Staple extension)rrrrrrrfr)r rrZmust_staple_extsrrrtest_make_csr_must_staple)s z%MakeCSRTest.test_make_csr_must_staplecCs6tt|Wdn1s(0YdSr )r:r;rDrr+rrrtest_make_csr_without_hostname;s z*MakeCSRTest.test_make_csr_without_hostnamecCs6|dg}tjtjj|}|dks2JddS)NrrzEExpected CSR version to be v1 (encoded as 0), per RFC 2986, section 4)rrrrrZ get_versionrrrrtest_make_csr_correct_version?s z)MakeCSRTest.test_make_csr_correct_versionN) rrrr?rXrrrrrrrrrrrs rc@s,eZdZdZeddZddZddZdS) DumpPyopensslChainTestzTest for dump_pyopenssl_chain.cCsddlm}||S)Nr)dump_pyopenssl_chain)rr)rHloadedrrrrrJKs zDumpPyopensslChainTest._callcCsBgd}dd|D}tdd|D}t|||ks>JdS)NrQrUrrcSsg|]}t|qSrrrLr]r2rrrr_SrCzDDumpPyopensslChainTest.test_dump_pyopenssl_chain..css$|]}ttjtjj|VqdSr )rfrrdump_certificaterr]rrrr TszCDumpPyopensslChainTest.test_dump_pyopenssl_chain..)sumrfrJ)r namesrlengthrrrtest_dump_pyopenssl_chainQs z0DumpPyopensslChainTest.test_dump_pyopenssl_chaincsfgd}dd|D}tjfdd|D}tjjtfdd|D}t|||ksbJdS)NrcSsg|]}t|qSrrrrrrr_[rCzLDumpPyopensslChainTest.test_dump_pyopenssl_chain_wrapped..csg|] }|qSrrr) wrap_funcrrr_]rCc3s |]}ttjj|VqdSr )rfrrrr) dump_funcrrr_rCzKDumpPyopensslChainTest.test_dump_pyopenssl_chain_wrapped..)r0r1rrrrrfrJ)r rrrrr)rrr!test_dump_pyopenssl_chain_wrappedYsz8DumpPyopensslChainTest.test_dump_pyopenssl_chain_wrappedN)rrrr?rXrJrrrrrrrHs  r__main__r)!r?rrcr r sysr#r5typingrZunittestZjosepyr0rr:ZacmerZacme._internal.testsrZTestCaserr@rFrYr~rrrrexitmainargv__file__rrrrs0   8 D*P