a ‚oe±4ã@s>dZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl Z ddl Z ddl Z ddlZddlmZddlmZGdd„de jƒZGdd „d e jƒZGd d „d e jƒZGd d „d e jƒZGdd„de jƒZGdd„de jƒZGdd„de jƒZGdd„de jƒZedk�r:e e ejdd…e g¡¡dS)zTests for acme.crypto_util.éN)ÚList)Úerrors)Ú test_utilc@sHeZdZdZdd„Zdd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dS)ÚSSLSocketAndProbeSNITestz/Tests for acme.crypto_util.SSLSocket/probe_sni.cs€t d¡|_t d¡}d||jjfi‰ddlm‰G‡‡fdd„dtjƒ}|dtj ƒ|_ |j j   ¡d |_ tj|j jd �|_dS) Nzrsa2048_cert.pemzrsa2048_key.pemófoor©Ú SSLSocketcs eZdZ‡‡‡fdd„Z‡ZS)z3SSLSocketAndProbeSNITest.setUp.._TestServercs$tƒj|i|¤Žˆ|jˆƒ|_dS©N)ÚsuperÚ__init__Úsocket)ÚselfÚargsÚkwargs)rÚ __class__Úcerts©úFC:\Program Files\Certbot\pkgs\acme\_internal\tests\crypto_util_test.pyr sz._TestServer.__init__)Ú__name__Ú __module__Ú __qualname__r Ú __classcell__r©rr)rrÚ _TestServersr)Úré)Útarget)rZload_comparable_certÚcertZload_pyopenssl_private_keyÚwrappedÚacme.crypto_utilrÚ socketserverZ TCPServerZBaseRequestHandlerÚserverr Z getsocknameÚportÚ threadingÚThreadZhandle_requestÚ server_thread)r ÚkeyrrrrÚsetUps   ÿzSSLSocketAndProbeSNITest.setUpcCs"|j ¡r|j ¡|j ¡dSr )r%Úis_aliveÚjoinr!Ú server_close©r rrrÚtearDown)s  z!SSLSocketAndProbeSNITest.tearDowncCs"ddlm}t ||d|jd�¡S)Nr)Ú probe_sniú 127.0.0.1)Úhostr")rr-ÚjoseÚComparableX509r")r Únamer-rrrÚ_probe/s ÿzSSLSocketAndProbeSNITest._probecCs|j ¡t d¡dS)Nr)r%ÚstartÚtimeÚsleepr+rrrÚ _start_server4s z&SSLSocketAndProbeSNITest._start_servercCs | ¡|j| d¡ksJ‚dS)Nr)r7rr3r+rrrÚ test_probe_ok8sz&SSLSocketAndProbeSNITest.test_probe_okcCsB| ¡t tj¡�| d¡Wdƒn1s40YdS)Nóbar)r7ÚpytestÚraisesrÚErrorr3r+rrrÚtest_probe_not_recognized_name<sz7SSLSocketAndProbeSNITest.test_probe_not_recognized_namec Csr|j ¡t ¡}zNt d¡t tj¡�|  d¡Wdƒn1sJ0YWt |¡n t |¡0dS)Nrr9) r!r*r ZgetdefaulttimeoutZsetdefaulttimeoutr:r;rr<r3)r Zoriginal_timeoutrrrÚtest_probe_connection_errorAs  *z4SSLSocketAndProbeSNITest.test_probe_connection_errorN) rrrÚ__doc__r'r,r3r7r8r=r>rrrrrsrc@seZdZdZdd„ZdS)Ú SSLSocketTestz%Tests for acme.crypto_util.SSLSocket.cCs‚ddlm}t t¡�&|dddidd„d�}Wdƒn1sB0Yt t¡�|dƒ}Wdƒn1st0YdS)NrrZsni)r&rcSsdSr r)Ú_rrrÚSózASSLSocketTest.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<eZdZdZedd„ƒZdd„Zdd„Zdd „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)ÚclsÚloaderr2rGrrrÚ_call[s z$PyOpenSSLCertOrReqAllNamesTest._callcCs| tj|¡Sr ©rJrÚ load_cert©r r2rrrÚ _call_certasz)PyOpenSSLCertOrReqAllNamesTest._call_certcCs| d¡dgksJ‚dS)Nz cert-nocn.derzno-common-name.badssl.com©rNr+rrrÚtest_cert_one_san_no_commondsÿz:PyOpenSSLCertOrReqAllNamesTest.test_cert_one_san_no_commoncCs| d¡dgksJ‚dS)Núcert.pemú example.comrOr+rrrÚtest_cert_no_sans_yes_commonhsz;PyOpenSSLCertOrReqAllNamesTest.test_cert_no_sans_yes_commoncCs| d¡ddgksJ‚dS©Nú cert-san.pemrRúwww.example.comrOr+rrrÚtest_cert_two_sans_yes_commonksÿz|rCz.iÃiiAiüi iwcs&g|]}d ˆ||d…¡d‘qS)ré-z.invalid)r)r\©Úcharsrrr_sÿrr`)Ú itertoolsÚchainÚrangeÚlen)rHrrarÚ_get_idn_namesysþ ÿz(PyOpenSSLCertOrReqSANTest._get_idn_namescCs| tj|¡Sr rKrMrrrrN‚sz$PyOpenSSLCertOrReqSANTest._call_certcCs| tj|¡Sr ©rJrZload_csrrMrrrÚ _call_csr…sz#PyOpenSSLCertOrReqSANTest._call_csrcCs| d¡gksJ‚dS©NrQrOr+rrrÚtest_cert_no_sansˆsz+PyOpenSSLCertOrReqSANTest.test_cert_no_sanscCs| d¡ddgksJ‚dSrTrOr+rrrÚtest_cert_two_sans‹sÿz,PyOpenSSLCertOrReqSANTest.test_cert_two_sanscCs&| d¡dd„tddƒDƒks"J‚dS)Nzcert-100sans.pemcSsg|]}d |¡‘qS©zexample{0}.com©Úformatr\rrrr_‘rCzDPyOpenSSLCertOrReqSANTest.test_cert_hundred_sans..rée)rNrer+rrrÚtest_cert_hundred_sans�sÿz0PyOpenSSLCertOrReqSANTest.test_cert_hundred_sanscCs| d¡| ¡ksJ‚dS)Núcert-idnsans.pem)rNrgr+rrrÚtest_cert_idn_sans“sÿz,PyOpenSSLCertOrReqSANTest.test_cert_idn_sanscCs| d¡gksJ‚dS©Nzcsr-nosans.pem©rir+rrrÚtest_csr_no_sans—sz*PyOpenSSLCertOrReqSANTest.test_csr_no_sanscCs| d¡dgksJ‚dS)Nzcsr.pemrRrur+rrrÚtest_csr_one_sanšsz*PyOpenSSLCertOrReqSANTest.test_csr_one_sancCs| d¡ddgksJ‚dS)Nú csr-san.pemrRrVrur+rrrÚtest_csr_two_sans�sÿz+PyOpenSSLCertOrReqSANTest.test_csr_two_sanscCs| d¡gd¢ksJ‚dS)Nz csr-6sans.pem)rRz example.orgz example.netz example.infozsubdomain.example.comzother.subdomain.example.comrur+rrrÚtest_csr_six_sans¡sÿz+PyOpenSSLCertOrReqSANTest.test_csr_six_sanscCs&| d¡dd„tddƒDƒks"J‚dS)Nzcsr-100sans.pemcSsg|]}d |¡‘qSrmrnr\rrrr_©rCzCPyOpenSSLCertOrReqSANTest.test_csr_hundred_sans..rrp)rirer+rrrÚtest_csr_hundred_sans§sÿz/PyOpenSSLCertOrReqSANTest.test_csr_hundred_sanscCs| d¡| ¡ksJ‚dS)Nzcsr-idnsans.pem)rirgr+rrrÚtest_csr_idn_sans«sÿz+PyOpenSSLCertOrReqSANTest.test_csr_idn_sanscCs| d¡ddgksJ‚dS)Nzcritical-san.pemzchicago-cubs.venafi.examplezcubs.venafi.examplerOr+rrrÚtest_critical_san¯sÿz+PyOpenSSLCertOrReqSANTest.test_critical_sanN)rrrr?rXrJrgrNrirkrlrqrsrvrwryrzr{r|r}rrrrrYps$  rYc@sleZdZdZedd„ƒZdd„Zdd„Zdd „Zd d „Z d d „Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)ÚPyOpenSSLCertOrReqSANIPTestz8Test for acme.crypto_util._pyopenssl_cert_or_req_san_ip.cCsddlm}|||ƒƒS)Nr)Ú_pyopenssl_cert_or_req_san_ip)rr)rHrIr2rrrrrJ·s z!PyOpenSSLCertOrReqSANIPTest._callcCs| tj|¡Sr rKrMrrrrN½sz&PyOpenSSLCertOrReqSANIPTest._call_certcCs| tj|¡Sr rhrMrrrriÀsz%PyOpenSSLCertOrReqSANIPTest._call_csrcCs| d¡gksJ‚dSrjrOr+rrrrkÃsz-PyOpenSSLCertOrReqSANIPTest.test_cert_no_sanscCs| d¡gksJ‚dSrtrur+rrrrvÆsz,PyOpenSSLCertOrReqSANIPTest.test_csr_no_sanscCs| d¡gksJ‚dS)NrUrOr+rrrÚtest_cert_domain_sansÉsz1PyOpenSSLCertOrReqSANIPTest.test_cert_domain_sanscCs| d¡gksJ‚dS)Nrxrur+rrrÚtest_csr_domain_sansÌsz0PyOpenSSLCertOrReqSANIPTest.test_csr_domain_sanscCs| d¡ddgksJ‚dS)Nzcert-ipsans.pemú 192.0.2.145ú 203.0.113.1rOr+rrrÚtest_cert_ip_two_sansÏsz1PyOpenSSLCertOrReqSANIPTest.test_cert_ip_two_sanscCs| d¡ddgksJ‚dS)Nzcsr-ipsans.pemr‚rƒrur+rrrÚtest_csr_ip_two_sansÒsz0PyOpenSSLCertOrReqSANIPTest.test_csr_ip_two_sanscCs| d¡ddgksJ‚dS)Nzcsr-ipv6sans.pemú0:0:0:0:0:0:0:1ú%A3BE:32F3:206E:C75D:956:CEE:9858:5EC5rur+rrrÚtest_csr_ipv6_sansÕsÿz.PyOpenSSLCertOrReqSANIPTest.test_csr_ipv6_sanscCs| d¡ddgksJ‚dS)Nzcert-ipv6sans.pemr†r‡rOr+rrrÚtest_cert_ipv6_sansÙsÿz/PyOpenSSLCertOrReqSANIPTest.test_cert_ipv6_sansN)rrrr?rXrJrNrirkrvr€r�r„r…rˆr‰rrrrr~´s r~c@s(eZdZdZdd„Zdd„Zdd„ZdS) Ú GenSsCertTestz6Test for gen_ss_cert (generation of self-signed cert).cCs.d|_g|_tj ¡|_|j tjjd¡dS)Néé)Ú cert_countÚ serial_numÚOpenSSLÚcryptoÚPKeyr&Ú generate_keyÚTYPE_RSAr+rrrr'âs zGenSsCertTest.setUpcCsdddlm}t|jƒD]0}||jdgdt d¡gd�}|j |  ¡¡qt t |jƒƒ|jks`J‚dS)Nr©Ú gen_ss_certZdummyTz 10.10.10.10)Z force_sanÚips) rr•rer�r&Ú ipaddressÚ ip_addressrŽÚappendZget_serial_numberrfÚset)r r•rArrrrÚtest_sn_collisionsès   ÿz GenSsCertTest.test_sn_collisionscCsZddlm}t t¡�0||jt d¡gd�||jƒWdƒn1sL0YdS)Nrr”z1.1.1.1)r–)rr•r:r;ÚAssertionErrorr&r—r˜)r r•rrrÚ test_no_nameñs  zGenSsCertTest.test_no_nameN)rrrr?r'r›r�rrrrrŠÞs rŠc@sDeZdZdZedd„ƒZdd„Zdd„Zdd „Zd d „Z d d „Z dS)Ú MakeCSRTestzTest for standalone functions.cOsNtj ¡}| tjjd¡tj tjj|¡}ddlm}||g|¢Ri|¤ŽS)NrŒr)Úmake_csr) r�r�r‘r’r“Zdump_privatekeyÚ FILETYPE_PEMrrŸ)rHrrZprivkeyZ privkey_pemrŸrrrÚ_call_with_keyûs   zMakeCSRTest._call_with_keycCs„| ddg¡}d|vsJ‚d|vs&J‚tj tjj|¡}t|dƒr€t| ¡ƒdksVJ‚| ¡d ¡tjj dd d d � ¡ks€J‚dS) Nú a.examplez b.exampleó--BEGIN CERTIFICATE REQUEST--ó--END CERTIFICATE REQUEST--Úget_extensionsrrósubjectAltNameFsDNS:a.example, DNS:b.example©ZcriticalÚvalue) r¡r�r�Úload_certificate_requestr Úhasattrrfr¥Úget_dataÚ X509Extension©r Úcsr_pemÚcsrrrrÚ test_make_csrs  ÿ ýÿzMakeCSRTest.test_make_csrcCs–| dgdt d¡t d¡g¡}d|vs,J‚d|vs8J‚tj tjj|¡}t|dƒr’t|  ¡ƒdkshJ‚|  ¡d   ¡tjj d dd d �  ¡ks’J‚dS) Nr¢Fr.z::1r£r¤r¥rrr¦s#DNS:a.example, IP:127.0.0.1, IP:::1r§) r¡r—r˜r�r�r©r rªrfr¥r«r¬r­rrrÚtest_make_csr_ips   ÿ ýÿzMakeCSRTest.test_make_csr_ipcCsj|jdgdd�}tj tjj|¡}t|dƒrft| ¡ƒdks@J‚dd„| ¡Dƒ}t|ƒdksfJd ƒ‚dS) Nr¢T)Z must_stapler¥écSsg|]}| ¡dkr|‘qS)s0)r«)r]Úerrrr_6s ÿz9MakeCSRTest.test_make_csr_must_staple..rz*Expected exactly one Must Staple extension)r¡r�r�r©r rªrfr¥)r r®r¯Zmust_staple_extsrrrÚtest_make_csr_must_staple)sÿ ÿz%MakeCSRTest.test_make_csr_must_staplecCs6t t¡�| ¡Wdƒn1s(0YdSr )r:r;rDr¡r+rrrÚtest_make_csr_without_hostname;s z*MakeCSRTest.test_make_csr_without_hostnamecCs6| dg¡}tj tjj|¡}| ¡dks2Jdƒ‚dS)Nr¢rzEExpected CSR version to be v1 (encoded as 0), per RFC 2986, section 4)r¡r�r�r©r Z get_versionr­rrrÚtest_make_csr_correct_version?s ÿÿz)MakeCSRTest.test_make_csr_correct_versionN) rrrr?rXr¡r°r±r´rµr¶rrrrržøs ržc@s,eZdZdZedd„ƒZdd„Zdd„ZdS) ÚDumpPyopensslChainTestzTest for dump_pyopenssl_chain.cCsddlm}||ƒS)Nr)Údump_pyopenssl_chain)rr¸)rHÚloadedr¸rrrrJKs zDumpPyopensslChainTest._callcCsBgd¢}dd„|Dƒ}tdd„|Dƒƒ}t| |¡ƒ|ks>J‚dS)N©rQrUrrcSsg|]}t |¡‘qSr©rrL©r]r2rrrr_SrCzDDumpPyopensslChainTest.test_dump_pyopenssl_chain..css$|]}ttj tjj|¡ƒVqdSr )rfr�r�Údump_certificater ©r]rrrrÚ TsÿzCDumpPyopensslChainTest.test_dump_pyopenssl_chain..)ÚsumrfrJ)r Únamesr¹ÚlengthrrrÚtest_dump_pyopenssl_chainQs þz0DumpPyopensslChainTest.test_dump_pyopenssl_chaincsfgd¢}dd„|Dƒ}tj‰‡fdd„|Dƒ}tjj‰t‡fdd„|Dƒƒ}t| |¡ƒ|ksbJ‚dS)NrºcSsg|]}t |¡‘qSrr»r¼rrrr_[rCzLDumpPyopensslChainTest.test_dump_pyopenssl_chain_wrapped..csg|] }ˆ|ƒ‘qSrrr¾)Ú wrap_funcrrr_]rCc3s |]}tˆtjj|ƒƒVqdSr )rfr�r�r r¾)Ú dump_funcrrr¿_rCzKDumpPyopensslChainTest.test_dump_pyopenssl_chain_wrapped..)r0r1r�r�r½rÀrfrJ)r rÁr¹rrÂr)rÅrÄrÚ!test_dump_pyopenssl_chain_wrappedYsz8DumpPyopensslChainTest.test_dump_pyopenssl_chain_wrappedN)rrrr?rXrJrÃrÆrrrrr·Hs  r·Ú__main__r)!r?r—rcr r Úsysr#r5ÚtypingrZunittestZjosepyr0r�r:ZacmerZacme._internal.testsrZTestCaserr@rFrYr~rŠržr·rÚexitÚmainÚargvÚ__file__rrrrÚs0   8 D*P