a ‚oeJã@s’dZddlZddlZddlmZddlmZddlZddl m Z ddl Z ddl Z ddl Z ddlmZddlmZe d¡Zeje d¡d �ZGd d „d ejƒZGd d „d ejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZ Gdd„dejƒZ!Gdd„dejƒZ"Gd d!„d!ejƒZ#e$d"k�rŽe %e  &ej'd#d…e(g¡¡dS)$zTests for acme.challenges.éN)Úmock)ÚJWKEC)Úerrors)Ú test_utilúcert.pemúrsa512_key.pem©Úkeyc@seZdZdd„ZdS)Ú ChallengeTestcCs<ddlm}ddlm}|ddiƒ}|| |j¡ks8J‚dS)Nr)Ú Challenge©ÚUnrecognizedChallengeÚtypeÚfoo)Úacme.challengesr r Ú from_jsonÚjobj)Úselfr r Úchall©rúEC:\Program Files\Certbot\pkgs\acme\_internal\tests\challenges_test.pyÚtest_from_json_unrecognizeds   z)ChallengeTest.test_from_json_unrecognizedN)Ú__name__Ú __module__Ú __qualname__rrrrrr sr c@s$eZdZdd„Zdd„Zdd„ZdS)ÚUnrecognizedChallengeTestcCs&ddlm}ddi|_||jƒ|_dS)Nrr rr)rr rr©rr rrrÚsetUps  zUnrecognizedChallengeTest.setUpcCs|j|j ¡ksJ‚dS©N)rrÚto_partial_json©rrrrÚtest_to_partial_json$sz.UnrecognizedChallengeTest.test_to_partial_jsoncCs&ddlm}|j| |j¡ks"J‚dS)Nrr )rr rrrrrrrÚtest_from_json's z(UnrecognizedChallengeTest.test_from_jsonN)rrrrr!r"rrrrrsrc@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) Ú%KeyAuthorizationChallengeResponseTestcCs dd„}t ¡|_||jj_dS)NcSs|dks J‚dS)NÚtokenrr)ÚnamerrrÚ_encode/s z._encode)rZMockrÚencodeÚ side_effect)rr&rrrr.s z+KeyAuthorizationChallengeResponseTest.setUpcCs0ddlm}|dd�}| |jt ¡¡s,J‚dS)Nr©Ú!KeyAuthorizationChallengeResponsez/foo.oKGqedy-b-acd5eoybm2f-NVFxvyOoET5CNy3xnv8WY©Úkey_authorization©rr*ÚverifyrÚKEYÚ public_key©rr*ÚresponserrrÚtest_verify_ok5s  ÿz4KeyAuthorizationChallengeResponseTest.test_verify_okcCs0ddlm}|dd�}| |jt ¡¡r,J‚dS)Nrr)z/bar.oKGqedy-b-acd5eoybm2f-NVFxvyOoET5CNy3xnv8WYr+r-r1rrrÚtest_verify_wrong_token;s  ÿz=KeyAuthorizationChallengeResponseTest.test_verify_wrong_tokencCs0ddlm}|dd�}| |jt ¡¡r,J‚dS)Nrr)zfoo.oKGqedy-b-acd5eoybm2f-NVFxvr+r-r1rrrÚtest_verify_wrong_thumbprintAs  ÿzBKeyAuthorizationChallengeResponseTest.test_verify_wrong_thumbprintcCs0ddlm}|dd�}| |jt ¡¡r,J‚dS)Nrr)z0.foo.oKGqedy-b-acd5eoybm2f-NVFxvyOoET5CNy3xnv8WYr+r-r1rrrÚtest_verify_wrong_formGs  ÿzú+evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ+PCt92wr+oArAr;ú+evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA©rr$)rr?rKÚdecode_b64joserBrC©rr?rrrrws ÿ þzDNS01Test.setUpcCsd|j d¡ksJ‚dS)Nz_acme-challenge.www.example.comzwww.example.com©rBZvalidation_domain_namer rrrÚtest_validation_domain_name€s ÿz%DNS01Test.test_validation_domain_namecCsd|j t¡ksJ‚dS)NZ+rAa7iIg4K2y63fvUhCfy8dP1Xl7wEhmQq0oChTcE3Zk)rBÚ validationr/r rrrÚtest_validation„s ÿzDNS01Test.test_validationcCs|j|j ¡ksJ‚dSr©rCrBrr rrrr!ˆszDNS01Test.test_to_partial_jsoncCs&ddlm}|j| |j¡ks"J‚dS©Nrr>)rr?rBrrCrZrrrr"‹s zDNS01Test.test_from_jsoncCs ddlm}t| |j¡ƒdSr`)rr?rGrrCrZrrrrH�s z!DNS01Test.test_from_json_hashableN) rrrrr\r^r!r"rHrrrrrUus  rUc@s eZdZdd„Zdd„Zdd„Zdd„Zd d „Ze  d ¡d d „ƒZ e  d ¡dd„ƒZ e  d ¡dd„ƒZ e  d ¡dd„ƒZ e  d ¡dd„ƒZe  d ¡dd„ƒZdS)ÚHTTP01ResponseTestcCsPddlm}|dd�|_ddddœ|_ddlm}|d d �|_|j t¡|_dS) Nr©ÚHTTP01Responserr+r:úhttp-01r<©ÚHTTP01r@rA)rrcrBrCrfrr2r/)rrcrfrrrr–s  ý  zHTTP01ResponseTest.setUpcCsi|j ¡ksJ‚dSrrDr rrrr!£sz'HTTP01ResponseTest.test_to_partial_jsoncCs&ddlm}|j| |j¡ks"J‚dS©Nrrb)rrcrBrrC©rrcrrrr"¦s z!HTTP01ResponseTest.test_from_jsoncCs ddlm}t| |j¡ƒdSrg)rrcrGrrCrhrrrrHªs z*HTTP01ResponseTest.test_from_json_hashablecCs,tj t d¡¡}|j |jd| ¡¡dSrI© rKrLrMrrNr2rOrr0©rrPrrrÚ(test_simple_verify_bad_key_authorization®sz;HTTP01ResponseTest.test_simple_verify_bad_key_authorizationzacme.challenges.requests.getcCsR|j t¡}tj|d�|_|j |jdt ¡¡s4J‚|j |j  d¡dtj d�dS)N©ÚtextrJF©r.Útimeout) rr]r/rÚ MagicMockÚ return_valuer2rOr0Úassert_called_once_withÚuriÚANY)rÚmock_getr]rrrÚ"test_simple_verify_good_validation²s  ÿÿz5HTTP01ResponseTest.test_simple_verify_good_validationcCs,tjdd�|_|j |jdt ¡¡r(J‚dS)Nú!rlrJ)rrprqr2rOrr/r0©rrurrrÚ!test_simple_verify_bad_validation»s ÿz4HTTP01ResponseTest.test_simple_verify_bad_validationcCs`ddlm}tj|j t¡|jd�|_|j   |jdt  ¡¡sBJ‚|j |j  d¡dtjd�dS)NrrbrlrJFrn)rrcrrprr]r/ZWHITESPACE_CUTSETrqr2rOr0rrrsrt)rrurcrrrÚ(test_simple_verify_whitespace_validationÁs  ÿÿ ÿÿz;HTTP01ResponseTest.test_simple_verify_whitespace_validationcCs(tjj|_|j |jdt ¡¡r$J‚dSrS) ÚrequestsÚ exceptionsZRequestExceptionr(r2rOrr/r0rxrrrÚ#test_simple_verify_connection_errorÌs  ÿz6HTTP01ResponseTest.test_simple_verify_connection_errorcCs@|jj|jdt ¡dd�dt |jddd¡jksJ‚dS©Nr)rÚload_pyopenssl_private_keyr2Úgen_certr~Ú verify_cert©rZkey1ÚcertrPrrrÚtest_gen_verify_cert%s  z*TLSALPN01ResponseTest.test_gen_verify_certcCs<|j |j¡\}}t|tjjƒs$J‚|j |j|¡s8J‚dSr)r2r�r~Ú isinstanceÚOpenSSLZcryptoZPKeyrž)rr r rrrÚtest_gen_verify_cert_gen_key+sz2TLSALPN01ResponseTest.test_gen_verify_cert_gen_keycCs|j |jt d¡¡rJ‚dS)Nr)r2ržr~rZ load_certr rrrÚtest_verify_bad_cert0s ÿz*TLSALPN01ResponseTest.test_verify_bad_certcCsBt d¡}|j |j|¡\}}||ks*J‚|j |j|¡r>J‚dSr›)rrœr2r�r~ržr–rŸrrrÚtest_verify_bad_domain4s  z,TLSALPN01ResponseTest.test_verify_bad_domaincCs,tj t d¡¡}|j |jd| ¡¡dSrIrirjrrrrk:sz>TLSALPN01ResponseTest.test_simple_verify_bad_key_authorizationz-acme.challenges.TLSALPN01Response.verify_certT)ZautospeccCsPtjj|_tjj|jj|j|jt  ¡tjj d�ks6J‚|  |j|jtjj ¡dS)N)r ) rÚsentinelZ verificationrqr2rOrr~r/r0r rr)rZmock_verify_certrrrÚtest_simple_verify>s  þ ÿz(TLSALPN01ResponseTest.test_simple_verifyz$acme.challenges.socket.gethostbynamez%acme.challenges.crypto_util.probe_snicCs^d|_|j d¡| d¡|jd|jjddgd�|jjddd�|jd tjddgd�dS) Nz 127.0.0.1zfoo.coms 127.0.0.1sfoo.coms acme-tls/1)Úhostrr%Zalpn_protocolsz8.8.8.8)r©s8.8.8.8)rqr2Z probe_certrrZPORTZassert_called_withrrt)rZmock_probe_sniZmock_gethostbynamerrrÚtest_probe_certGs   þþz%TLSALPN01ResponseTest.test_probe_certz,acme.challenges.TLSALPN01Response.probe_certcCs(tj|_|j |j|jt ¡¡r$J‚dSr) rÚErrorr(r2rOrr~r/r0)rZmock_probe_certrrrÚ'test_simple_verify_false_on_probe_errorVsÿz=TLSALPN01ResponseTest.test_simple_verify_false_on_probe_errorN)rrrrr!r"rHr¡r¤r¥r¦rkrr‡r¨rªr¬rrrrr‘ s    r‘c@sFeZdZdd„Zdd„Zdd„Zdd„Zd d „Ze  d ¡d d „ƒZ dS)Ú TLSALPN01TestcCs.ddlm}|t d¡d�|_dddœ|_dS)Nrr’Z a82d5ff8ef740d12881f6d3c2277ab2erAr”rX)rr“rKr•rBrCr—rrrr_s ÿþzTLSALPN01Test.setUpcCs|j|j ¡ksJ‚dSrr_r rrrr!hsz"TLSALPN01Test.test_to_partial_jsoncCs&ddlm}|j| |j¡ks"J‚dS©Nrr’)rr“rBrrCr—rrrr"ks zTLSALPN01Test.test_from_jsoncCs ddlm}t| |j¡ƒdSr®)rr“rGrrCr—rrrrHos z%TLSALPN01Test.test_from_json_hashablecCsXddlm}t d¡|jd<t tj¡�| |j¡Wdƒn1sJ0YdS)Nrr’sabcdr$) rr“rKZencode_b64joserCÚpytestZraisesZDeserializationErrorrr—rrrÚ#test_from_json_invalid_token_lengthss z1TLSALPN01Test.test_from_json_invalid_token_lengthz*acme.challenges.TLSALPN01Response.gen_certcCsBd|_d|jjttjjtjjd�ks(J‚|jtjjtjjd�dS)N)r r )Úcert_keyr~)r r~) rqrBr]r/rr§r±r~rr)rZ mock_gen_certrrrr^ysÿ  ÿzTLSALPN01Test.test_validationN) rrrrr!r"rHr°rr‡r^rrrrr­]s r­c@sdeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dS)ÚDNSTestcCs.ddlm}|t d¡d�|_dddœ|_dS)Nr©ÚDNSó+evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oArAÚdnsrWrX)rr´rKr•rBrC©rr´rrrr„s ÿ þz DNSTest.setUpcCs|j|j ¡ksJ‚dSrr_r rrrr!�szDNSTest.test_to_partial_jsoncCs&ddlm}|j| |j¡ks"J‚dS©Nrr³)rr´rBrrCr·rrrr"�s zDNSTest.test_from_jsoncCs ddlm}t| |j¡ƒdSr¸)rr´rGrrCr·rrrrH”s zDNSTest.test_from_json_hashablec Cs‚tt d¡d�}ttjf|tjffD]X\}}|j||d��2|j  |jj ||d�|  ¡¡s^J‚Wdƒq$1sr0Yq$dS)Núec_secp384r1_key.pemr)r Úalg©rº) rrÚload_ecdsa_private_keyr/rKÚRS256ÚES384ZsubTestrBÚcheck_validationÚgen_validationr0)rÚec_key_secp384r1r rºrrrÚtest_gen_check_validation˜s ÿz!DNSTest.test_gen_check_validationcCs4tj t d¡¡}|j |j t¡|  ¡¡r0J‚dS)Nzrsa1024_key.pem) rKrLrMrrNrBr¿rÀr/r0rjrrrÚ#test_gen_check_validation_wrong_keyŸsÿz+DNSTest.test_gen_check_validation_wrong_keycCs6tdd„dDƒƒ}|D]}|j |t ¡¡rJ‚qdS)Ncss"|]}tjj|tjtd�VqdS)©Úpayloadrºr N)rKÚJWSÚsignr½r/)Ú.0rÅrrrÚ ¥sÿz>DNSTest.test_check_validation_wrong_payload..)óó{})ÚtuplerBr¿r/r0)rZ validationsr]rrrÚ#test_check_validation_wrong_payload¤sþÿz+DNSTest.test_check_validation_wrong_payloadcCsBtjj|jjdd� ¡ d¡tjtd�}|j  |t  ¡¡r>J‚dS)NsxxxxxxxxxxxxxxxxxxxxrAzutf-8rÄ) rKrÆrÇrBr�Ú json_dumpsr'r½r/r¿r0)rZbad_validationrrrÚ"test_check_validation_wrong_fields­sÿ ÿýz*DNSTest.test_check_validation_wrong_fieldscCspt d¡�&}tjj|_|j t¡}Wdƒn1s60Yddlm }t ||ƒsZJ‚|jtjjkslJ‚dS)Nz"acme.challenges.DNS.gen_validationr©Ú DNSResponse) rr‡r§r]rqrBZ gen_responser/rrÑr¢)rZmock_genr2rÑrrrÚtest_gen_response´s   * zDNSTest.test_gen_responsecCsd|j d¡ksJ‚dS)Nz_acme-challenge.le.wtfzle.wtfr[r rrrr\¼sz#DNSTest.test_validation_domain_namecCs<tt d¡d�}|j |jj|tjd�| ¡¡dus8J‚dS)Nr¹rr»T) rrr¼rBr¿rÀrKr¾r0)rrÁrrrÚ!test_validation_domain_name_ecdsa¿sþþz)DNSTest.test_validation_domain_name_ecdsaN)rrrrr!r"rHrÂrÃrÍrÏrÒr\rÓrrrrr²‚s  r²c@s4eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd S) ÚDNSResponseTestcCs€ddlm}|t d¡d�|_tjj|jjdd� ¡t tj d�|_ ddlm }||j d �|_ d |j i|_d d |j  ¡d œ|_dS)Nrr³rµrAT)Z sort_keys)rÅr rºrÐ)r]r]r:r¶)r=rr])rr´rKr•rrÆrÇrÎr'r/r½r]rÑrBÚjmsg_toZto_jsonÚ jmsg_from)rr´rÑrrrrÈs  ÿ þ ÿýzDNSResponseTest.setUpcCs|j|j ¡ksJ‚dSr)rÕrBrr rrrr!Ûsz$DNSResponseTest.test_to_partial_jsoncCs&ddlm}|j| |j¡ks"J‚dS©NrrÐ)rrÑrBrrÖ©rrÑrrrr"Þs zDNSResponseTest.test_from_jsoncCs ddlm}t| |j¡ƒdSr×)rrÑrGrrÖrØrrrrHâs z'DNSResponseTest.test_from_json_hashablecCs|j |jt ¡¡sJ‚dSr)rBr¿rr/r0r rrrÚtest_check_validationæsz%DNSResponseTest.test_check_validationN)rrrrr!r"rHrÙrrrrrÔÆs rÔc@seZdZdZdd„ZdS)ÚJWSPayloadRFC8555CompliantzFTest for RFC8555 compliance of JWS generated from resources/challengescCs2ddlm}|ƒ}|jdd� ¡}|dks.J‚dS)Nrrbé)ÚindentrË)rrcrÎr')rrcZchallenge_bodyrrrrÚtest_challenge_payloadìs z1JWSPayloadRFC8555Compliant.test_challenge_payloadN)rrrÚ__doc__rÝrrrrrÚêsrÚÚ__main__r€))rÞÚsysZunittestrÚ urllib.parseÚparser�ZjosepyrKZ josepy.jwkrr£r¯r{ZacmerZacme._internal.testsrZload_comparable_certZCERTrLZload_rsa_private_keyr/ZTestCaser rr#r7rUrarˆr‘r­r²rÔrÚrÚexitÚmainÚargvÚ__file__rrrrÚs6       #&Q%S%D$