ÿØÿà JFIF    ÿÛ „ !.%+&8&+/1555$;@;4?.451 4,$,44444444444414444444444444444444444444444444444444ÿÀ  á á" ÿÄ     ÿÄ ?    !1AQaq"2‘¡±ÁðBRbrÑá#‚’¢²3S CñÿÄ   ÿÄ !    !1QAa‘2ÿÚ   ? 5˜Z¯V¦cø)›t/? z¨±>Õ5€¶‹Á¤·¼z¼Ü¬+ñ®v¤¨_ˆR­BFn©—˜ý®ç̝P8gýt·ÉSTŦˆìät?þé¼íìN/Þa)ì–í6ô… Ï¿øÃj´¿KÇü]ÿ ªô¹-eKànëÕHTx}ýSÜ›ÿ ”7Ø×&µ<¦  ¥ÑO¶[Ù¯ä¨ÞÃÿ PZ-¬;#õ|•oaÿ ©CìÞz3˜öː/¤­ñTûIØ}š^ mÓ%ªxˆ¥ÉŸu=Z+ISe¿45™¼u;ú&WØ÷€æßQ™®{|íx*TC“#ZŠìZ§²‹ 6pv…³¿¡äª*áZÐ%ÒOáˆo"x«OHk w±æ+¬V(kMúŸ5Vö«$ ÁrÏbàb57/luR ¸ÑÛj Òµì`Мq­û žICÀÊ•©4€Âcà¨Ï€O´<èÐ:›ù(Ë^L8þ‘ÍÌ#¸Ð_Ì©ÙK(Öz 4¬û+¸;ü’V’84‘¬ÃŽ:[â‡ÔÌáõp¢~§ªlæ£ö{®G>J¼"°‡7¯ÆÉèßû ‹É‹§ÁòÃýâßî ^ƾÙõ‹×óH#«LP½ïX=xÑÍ$|W?•~• îëÔ©ª‹ {ÝT…Kÿ ”hûâá)J*ö˜–ÔU;iÇ€/ ÆþjóZ\ýwØ=Ìm ºèËL9 ýèÆð/¨’¥öo=nË.%Îì ŽÕ¯È|{Oj²ƒE6e/ßdÄõ²Ìâ1O®ò×TsəԸhOMýíMˆ¿¼H˜l²,7Â¥#MF/Úf°Ö½± ¸–dr‹NýÊ íjqx{œÉ ä-È ¦ øÄër¨q°ð †nцýÑÄÆ’mä…n<0È™;ÁÝá¯ÁZƒ7FÀmì­ É&9ˆîéi¶ùN§Y• ÃZãAâ?•‡©‰ , ó¾IŸŠc1 4â&y­&pŠ­6;M À 0¹qç»p.á …ŸÅáK@%6·y6ƒ‰3?”úºŽ‰éX5ªPT §µ!=Mž«Ú½‹ÅgÂSâÉaþÓoö–¯ÁÔìR>5éÿ üs¶ÆUcÌ kÇR ]ÿ ù¬¼«VŽ;Â|‡~¢¦”ÏŰæ {L™Õ°Óv¹ò¸írޡעCÃ!íVÕ {¶»sŒNPg/ "uÕbkm²“$ďå¿é¹§°½æz¯6 †s¿!s–wÚÝ“™Œ °.ûj>·+™Òa…©Œ&rÝÎtÛë긪Ît’LAVp%c Úý[ÄzJ¾ÇàXXç@˜ó<êL]·T˜¾¥1Ó©V‡g´æ½¦Ý@¹óø!_@´ÞâSÁ —S3™•& ]@JHÚý©ZŽ €×æÔr»Áf!‡yÞ4Mv*èÓã_{‘åóUuљØ«Oïé*®EvÑ Œ÷‡U \"㪒ÍK+À 4“M¡ï:0¥5í!'<@î´”>Ç»&Z–ïCCV˜Ì5Šo&îhè.žû |ÓK©h$s6KìŒëã)¹hI¦GïOåóI;ììü#É$Š0…Ææ¥TØ.5­¾gn´ “ÂÖ\:hœ89G)J@„}œ:’Ò{/Š"¦_Æ×7Æ3VÇŠÊa]ÚŒÙ€Ä–=®uÁßâACZƒ§§£ Qnâ:«,×{tyø¬iÛcœÜÄ€H½ÄÍCk´÷šß .W'b¤Íåh]÷€=,Žv×cÚEÚHXJX¶îo¨FÒtèöŸ>ªª6[J®Fµ£sGÁeqõfe\íjÒÐïÄÐGˆe1Ø‹.Ø”‘Ëuø Y­ˆÜ ŽG|zùªüMpDnQWÄ”%JŠ™)â*p@Örš«ÕT2Ð%ˆG#ª„ ·¤!°ŸOTÂT¸aÚ%4&h™LµšØüÐ.F¿²ÐÞ_Ç‚¾ÅÃaÜ÷09Æ q€öy˜v‡85õN÷]¬äѼóS{°_MެúÔ#°Ç¸0åÞè2ëôPcvÆw9®ií1Ä8F™˜à‰´+‰Ik1òÝ7“Ñ×ÒsÝ\x‚h`ÞÑ`ó"|µEcý£n˜h`}GÞ !±ù²Ápü²ß6 0ïi󜵩SÈÇ7˜-ÕURO˜¦´f$ªž-Í6(œ}<„ éc øs]ŽŽ„*—¾ ìdŽ„)méª\¿êÎIg¾ØÞ~I#C/¼¼´EÁÈŽi8“©õådô·>euä ƒ'Ê×लR1ÉJE1ÐAát`t;ÇР%Ý<‡¥„ÍÆ`×Oyó)õiI€ñQaŸ4Ûù\áàaÃÔ¹HÃu¹*k€¦<„e S‡&õÏ B!ŽhüÞ`yj}mªf×\¿ Ç~æ­9‡û\՞Ǖg²1Žû5V7 !àöšm° c`ܬøÇìµÒ'P"?…´Ö,"§^•õލsÔ)6˜sæéÍR¼ ò|Sl”‹7 nPW Gòú÷½§O¯‡„l¡kSÞŒr½PÊ@æ¢pŽ-mÿ #Ÿ˜Àº¶Áä¦;ïÔæ$1££`“Õ>„—·ž)ßð³ñ#Ï Ô$¶œ‰ÊE‹À;÷º ¯«P:Ñ”8–IÊtpÞ3ª“>ê“þës4ò2OÏÕ­±zô†Õ§‰.÷ä¸;¿˜“'œ›žª}«Œ{ª±Ì 9ÔóÞÕ‡0 $íWV3Üì¬ —@kÝ4@¿r¼±½¬™›?øØæ´'Áé®CË3-g$˜ö‡×auÚi´Žp/êÛ æF›Ú2v‹ã¿¿,nB1̨ƃqÞa5͝@&Æû“él÷ \C²½UÍc ¯k×¢U ÖéQå™—-r wô ÞÏ<Ò=&=ÿ Ôê Òêˈt,i—;LîÜ á¸*ÚÃ1$êL•LÍ <É)ýÐà’ ;F™{ƒ™˜€&'}‚ãÄK`¡ÞT@I;®žZóè‚s’7®°›+§O­Åq©é»²9<Ô J ¼9O’HL»Ùïì¸rk¼Ž_ý‘TŸu[²ßÚŒ·ü÷B%¯E ŸÔX5êO´ Ç•€’I0 ÉJX` ñ¹õ%;µŸD‘«´€àwÒ™U ûئžÖö\×®×´8 ½‡ºÐÆÓ§?Àkmœ=;d5*@-ì0F Rªýš[Ü6âö̃ڸr*KA9· u*µæ£?U¸Âêí†8@¦X4 e-ò„0s{ HâUpU?¼mñRa°®a%Ð'tÉ×’\¾ÊÉ]t›h>·(Ë@R¼¡Ãt h}’O÷au<+nT…Ö…MӐ??Óe95 q>í/;&JSû °¯ÊéÞ øƒ*Ã2½Ài&:nôUl=¾¿5eˆ3”ñc|Ú2V”>„»&eE;«ÚäC p¢Û úy 9š[ŒÌx¼擼A&DåÒ¯ˆ¤ÀÌ;"˜ ÏQä¸åhÊ}Ûq«Û0WžÒ|»€ø®öCm5•\ÇÀ§Pe3£]0ÃàLDÉ‰1øªxjgwT‚÷¿LΨK‹›ùs—xˆÜ±µ kæ¸f‰‰ÜGk/LÛØ6d9ò¶ùA{ƒA3š/¬D¬khÓk‰`˜"㯒r¿±Óã jx‡°e}<Ñø\3y:'À•/h½Í€Ç4~g ?Û(¼]v‘ªlKÎâ~?O‚W%{Ì:“'©úNq¾›úo(X’¥¯ˆ nFê{Ç€ü?º'ë ø‹ì Þ09ŒÌç9Æ —ËC`j@ÓÄ(+a‹un¸#ÂꟋ{K`‘ÑÍÍ'à´»/Û,KW;Þ4²þð ï Nm|~fGÏ(…³Ã)«1ö­Õ ¥‡¨©ƒÃ™ü-s=à=U66Ï«Ýc蓦W¹íž®›nÔ%êÇìŒ<#Ü×84ån®Ð ÒåOC` ñânÑs‡¢ç 1õ%Îhì½Ã½® e:ݼUZo™`  ÅZŸŒÊ«ê1ÏÄo$q¹Þ€©ˆhÐÉä¯ñ[!…Ú˜àJ:x2$Íß&PåT£6ç— ‡Í*4Ýšçjÿ ‰É nófÐ ó(L5C•åÆ\rMÒ@ò }y-W}™üýVù—ú¢=Ù”c®‘< M ž ´Phr ¦©TD ‘ù.$´÷O‡‘V2Æò.=IUŒ=ž‡â¬i™aþÓåÙ?òUø'ØÖ•.~* šTŒ!•-×áºTâ®ä#õü'´ eýlYÅÓeÕKÂrT"CÚ@u!Óxƒ{š3€}1¿(r}%«nËamjÑ%ÑNEò v ˜à  σöK³,*º.àzù¨™Ó ÚçâU¦*¿ 9{%Ö¹ njûdaXöb) kÛÆ±ûÓ\°M7ˆÂ=û›ç¿Ã‚­V»Cg–8ÙêE- j)k$º`Ã-ùEýeBÆÇ]c¡°ñty&Òd0nõ'¡W+ƒ*|–øµFa\GQªEAÔp5\Ǽ·¼Ç8·õ -â§Ú[ ‡ uZeÖ 3}×d'+¹:ð+K†Û®s!Ï$úe€<Û”x)1»a­¡LC]¸µík…ÚàA»AYº{†ªS[¦5HÒ7ù --,ísòDØ€èk ÞÀîÜ ò@â( ËNˆë›4ô½•/¦o‡€Û7 ê•ÆêòðÜy'Án½µ á˜ݦ ndeo…[ì¶Ê,¥R³Ä=À±—–ß;£™´ñSâ*g§”ïaið‘Jå~™ÓÞ ß³Õ¢»8x埒²52>AÊb&-÷\7´éÄù€T˜,w;3{ï˜k…à¹ÄqÀ«œ{€\ ˆ¾[´¨јr &Úé„Ívˆ±8†¿]|¬ņ4I×pÞS1ÈÖz‰#Ìv‡G!YNògñ:màTz¢Ý1ô©^O=~ë|5Bã™ç•¼µõ•bÆ@úÕS¬ÈŒ#¬zünrŸ û” Z²•èðV"ÁHÚý©wÝ €7¼Ìu1hÑa3Éä û f$o¿É ™Ú›ÝçnpÒ3äÌ3†Í§,Äï]$‰/pê †«À¼¸e9­Æê_C]žƒ·ý·frÁN«, E=›Çq -‰öŒ:aÏ¿±í&£Í:-} 84‘ÿ eƒQÑeëSsuiA ³g㟥ú£?ÿ ʼn*”“÷aühe:ÊWa@ÒÞk±eØ] F Ô—r.åä˜ @ö¥ªZoÐýYL·¥S²G/‡ñ <~*ZÆ´è>JlòàÛÆ½ÿ 窘ìGN¢:I®KšJp/`íIÁÀõ#Ä-€ö­šµŒoF4|ÆQØÆ@Ì|£Ô…¢À{9˜è½Üó›€ôYÒÎYsið;ís¤€à²ˆ‚4qÉVŒI$ ‰"° æµ8cXGjœˏ¡Aâý•ËÜ¢ûï e·çLx']á"oÅÎê3¯Ç—¹”ó0nå‚âg{Œñ> S´˜îè°g238‚ãköÝfÚd´6Ò€;ò÷±¢™¼›º ¢Æ'¥Ðx'e¬ç ]bÈÆV¢ó‹kýBO ðÊâ$Ÿ!×T 3Mýמ žìٍàÌü‘8÷€àæØ8æ©6‰©L´«…oãpð„~Çk‰!ñ;‹”ÛžÍ àž±z Ÿôû øŸÝužÏ;ÿ #|u6™Þ¬ÚˆÐõA4¶â|ôl|Ê2ŽÇ¤ÝÅÇY.<#Aí.k§hóF‚”Y; M½Ö4hŸ4&›­¿tès´%FìL¥£Ãk‰ÇT¤haÁ¤ÚxfÉ`ÑìË›>i 3t‚:,–+^÷´–{Û–Nxi"x‘Ûg î¨>¥Õ܁ùZH,2Û“:8xÊ¢Çí9.É-Ìâã-=çjwµS˜dütžçwýGòú®®ûº_ˆýx$–¡ãøO EÚÛÏ÷R„×w+3£Á£öUMyR²¹âŒ°š›¸Ñãò9§Ó_Dl+Ùßc›úšGÅÌc†Ž!Ko=¶.‘Îÿ c²(2®V mª.ÿ ¹B›¹å ù„öŸSV>™ü¯$y:G¢Z×àøúdî¹û­·ýÇ´:•c LÍõi_‹ö+ÎæGÊè>OŠ•äž´§Þ{X}¨1ÚTc›»Qþ•êô°t¿OP?eæ~É{5]•ÙR£r5†nZ\ã@ &îJõ ¾àC°þV>fé¥/ü5ñÊIº_é5 ;e­h<@ Ä&æÃëE%;X,ÒãÆÞ`Oò¦kŸm#˜!ÀyÄ¢| óLšò¥Ä` ¶R=|ÈCâh5ò3DˆïF†ðÒ#ÅìÛœ?¸yhBãœí ZxßÎÄhºRK„`Þödvײ™ÀÈÑÒgŒuY w³%†ƒÓzõ ÖÏp‚dH®¦A´ù§»ÓÇMæ~)ˆð‡û:ù&Ä •vGD´À n ݇¼Ö8Fö óáà£~Ë¥x`oK|Ä?fxiØü%pìR>éò+Û±éÎ>núlFŤ'tq8LZÏvÃ?„¡ß±È⽆¯³íü@x|PöUäèØã¡ð‚ŒAìÏ"vÍwóŸÍ{ ý0.z È•Ö{,N¡£¡ŸKÕÙž>Ýœþ ÍÀ°<×EA!Å‚D™IúOÍ¡>ôG}Â` ÍßkÜL™Ž Þð™ {IøF²¹òQ3&!ÃÂÞz.d&Ï-sH¸,Ôõ˜ŽP€ 77ˆÝ¼ÊëÜw =cÕ Ú,ØÐ5ÎYÐ)ì´öœgŒ[¤ßv㙑8心>h]§µháYš£²ºÑ.{Ï7Sð•?´~×SÃKýJÛ˜ ™Íäiúu<µX¶1õ^kâçIÑ£sZ4h>j*ÔšD:4­¿_ ÷¸ Õxæÿ ¸?Mù _•­ÊÐ ä ÷ý ÑwL œ­ïnTkÛUÍN©ë:¦fV ¶ÜÔÜMªÅâA½–¿R×TXš-%iTÊT•‡Ù‚JôϐZxWÑè‰f‰òG º ×Õû2aZ7OU3[“×AT–ÞŒ…-‘¤”Ì ì&(ˆ¿­•ƒkï’:ðY¦W‘ Å)“†‘˜³Åtcø˜ñTÂwÚÇ4|üLÇªí–v- qˆèU qPE.†â‘˜µ Æ,ÐÅs]8¾„oúÑ i>ÜxxÈó)ƒ ´æÁâØ$À‰vžŸf$Ž |ãw;ÀÁIJ»b` {¦Ó¤Ú$©YÀ‘n@Óïž«9J¼êG m¤ ܯ¹ÌW4€ÐÒÅÛ‡#褕Ÿn-?í|с¥÷Ú¹¬'´ÞÜ9ÓK `hê£SÄSà?7—Wí_´…óB›»:=Ãïq`<8ñÓŒÑlú2d¬ê³£hÖ[l|$vÝro~'R®‰§°ñmY ͧäP |PUª¹·:3Œ[Û{Xÿ ºâ@‚W–Äé u‚ ¯´*=íή.pûÒdt @G‰¬ s¸ ëÉücr ÞæÑ¨Ê@>¤¢Ö±. Þ'¯°ÌME[YéïĵÂCå½ Ué©Áû'Ê9%eÔðNU”ë‘ÌsD3/®+UI˜9h.WC”빓$#:pz:YÓ ¿xž* ³$Í +$kñAŠ‹†¢ Uê>¸)_š¬÷©ßAÂÔb9ÇU ¯¾á•9¯ÏÏ÷O÷¼¼Fähal1‰3Ì[Ïr•´UCksNÐ] R‘¸¥H+§Šé†c©vÖÞ0iÓ76s†î!§=ß ¼~Ô'°Ãmäoäš³ªøi1úÉ)³yV8 CLÄØÁ‘WYïi€H6ÖÑiámø^ÈY´°Ñ7¥Û*—Ñ©L«Qƒï—Ùrÿ ›£Ð*š¸ˆL©ˆ$ˆ ÷¾D§9È®«qbqC)–ˆïv´çñsÑVT­Ø, <àïºÀO«Jý·õ àfPìð .wFšir´þ’2_Y *Æ€x\« ì€9š@ Ž|F⇥ˆkZ@hÖÄ0t¿-<“‹qµ¾*ZL¤Ú)&BJpÓF5=$„at*Zš$’ÑtdûÝRI1 2މ$€$I$#‰SÞ’Hë¬ï;Á$¡t$’`<(ñÇt)$‡Ð.Êf¢X’Kt=Éé$‚ˆªè¢oÝëòI%Rgcª÷ŠyI%¡‰ÿ !ñ)´õ $¤ Ô’IIGÿÙ EcWdZddlZddlZddlZddlZddlZddlZddlmZddlm Z ddlm Z ddlm Z ddlm Z ddlm Z dd lmZdd lmZdd lmZdd lmZddlZdd lmZddlmZddlZddlmZddlmZejeZeddZGddej Z!Gddej Z"Gdde!Z#Gdde!Z$Gdde"Z%Gdde$ej&Z'e"j(Gd d!e%Z)e!j(Gd"d#e'Z*e"j(Gd$d%e%Z+e!j(Gd&d'e'Z,e"j(Gd(d)e%Z-e!j(Gd*d+e'Z.e!j(Gd,d-e$Z/e"j(Gd.d/e"Z0dS)0z&ACME Identifier Validation Challenges.N)cast)Any)Dict)Mapping)Optional)Tuple)Type)TypeVar)Union)hashes)crypto)SSL) crypto_util)errorsGenericChallenge Challenge)boundc eZdZUdZiZeeedfed<e dee de ee fde e dfffd ZxZS)rzACME challenge.TYPESclsjobjreturnUnrecognizedChallengec ttt|S#tj$r>}t |t|cYd}~Sd}~wwxYwN) rrsuper from_jsonjoseUnrecognizedTypeErrorloggerdebugr)rrerror __class__s 1/usr/lib/python3/dist-packages/acme/challenges.pyrzChallenge.from_json%s 9(%''*;*;D*A*ABB B) 9 9 9 LL   (22488 8 8 8 8 8 8 9s37B3A?9B?B)__name__ __module__ __qualname____doc__rrstrr __annotations__ classmethodrrrr r __classcell__r#s@r$rr s*,E4T+&& ',,,9t,-9S)9.34DF]4].^99999[99999cdeZdZUdZiZeeedfed<deee fffd Z xZ S)ChallengeResponsezACME challenge response.rrc~t}||jd|Sr)rto_partial_jsonpoptype_field_nameselfrr#s r$r2z!ChallengeResponse.to_partial_json4s6ww&&(( %t,,, r.) r%r&r'r(rrr)r r*rr2r,r-s@r$r0r0/st""24E4T-.. /444c3hr.r0ceZdZUdZeeefed<deeefddffd Z deeeffdZ e deeefddfdZ xZ S)ralUnrecognized challenge. ACME specification defines a generic framework for challenges and defines some standard challenges that are implemented in this module. However, other implementations (including peers) might define additional challenge types, which should be ignored if unrecognized. :ivar jobj: Original JSON decoded object. rrNctt|d|dS)Nr)r__init__object __setattr__r5s r$r9zUnrecognizedChallenge.__init__Js7 4.....r.c|jSr)rr6s r$r2z%UnrecognizedChallenge.to_partial_jsonNs yr.c||Sr)rrs r$rzUnrecognizedChallenge.from_jsonQss4yyr.)r%r&r'r(rr)rr*rr9r2r+rr,r-s@r$rr<s   sCx./WS#X./4//////c3hWS#X.3J[r.rc eZdZUdZdZ ejdejej ej edZ e e d<edefdZd S) _TokenChallengez3Challenge with token. :ivar bytes token: g0@tokenT)sizeminimum)encoderdecoderrc&d|jvod|jvS)zIs `token` good? .. todo:: acme-spec wants "It MUST NOT contain any non-ASCII characters", but it should also warrant that it doesn't contain ".." or "/"... s../)rBr=s r$ good_tokenz_TokenChallenge.good_tokenesDJ&A4tz+AAr.N)r%r&r'r( TOKEN_SIZErfieldencode_b64jose functoolspartialdecode_b64joserBbytesr*propertyboolrIr?r.r$rArAVs J54:,6Gi6G  j$7@7@7@AAAE5AAA  BD B B BX B B Br.rAceZdZUdZejdZeed<e j Z dddej de fdZdeeefffd ZxZS) !KeyAuthorizationChallengeResponsez[Response to Challenges based on Key Authorization. :param str key_authorization: keyAuthorizationkey_authorizationchallKeyAuthorizationChallengeaccount_public_keyrc.|jd}t|dkr"td|jdS|d|dkr7td|d|ddSt j||j  }|d |kr$td |d|dSd S) a%Verify the key authorization. :param KeyAuthorization chall: Challenge that corresponds to this response. :param JWK account_public_key: :return: ``True`` iff verification of the key authorization was successful. :rtype: bool .z)Key authorization (%r) is not well formedFrrBz8Mismatching token in key authorization: %r instead of %r hash_functionz=Mismatching thumbprint in key authorization: %r instead of %rT) rVsplitlenr r!encoder b64encode thumbprintthumbprint_hash_functiondecode)r6rWrYpartsrds r$verifyz(KeyAuthorizationChallengeResponse.verify}s&,,S11 u::?? LLD/ 1 1 15 8u||G,, , , LL,-21Xu||G7L7L N N N5^$6$A$A7%B%9%9:::@&((  8z ! ! LL,-21Xz C C C5tr.ctt}|dd|S)NrU)rr2r3r5s r$r2z1KeyAuthorizationChallengeResponse.to_partial_jsons2ww&&(( #T*** r.)r%r&r'r(rrKrVr)r*r SHA256reJWKrRrhrrr2r,r-s@r$rTrTts (TZ(:;;s;;;%}7TXZ^@c3hr.rTc eZdZUdZeZeed<eZe e ed<e j Z de j defdZde j de fdZejde j dedefd Zde j d ededee effd Zd S) rXzChallenge based on Key Authorization. :param response_cls: Subclass of `KeyAuthorizationChallengeResponse` that will be used to generate ``response``. :param str typ: type of the challenge typ response_cls account_keyrc|ddztj||jzS)zZGenerate Key Authorization. :param JWK account_key: :rtype str: rBr[r])rbrrcrdrerfr6ros r$rVz+KeyAuthorizationChallenge.key_authorizationsY{{7##c)DN  " ""; # = =->->>DfhhG Gr.cT|||S)zGenerate response to the challenge. :param JWK account_key: :returns: Response (initialized `response_cls`) to the challenge. :rtype: KeyAuthorizationChallengeResponse rV)rnrVrqs r$responsez"KeyAuthorizationChallenge.responses5  "44[AA!CC Cr.kwargsc t)aGenerate validation for the challenge. Subclasses must implement this method, but they are likely to return completely different data structures, depending on what's necessary to complete the challenge. Interpretation of that return value must be known to the caller. :param JWK account_key: :returns: Challenge-specific validation. )NotImplementedErrorr6rorus r$ validationz$KeyAuthorizationChallenge.validations"###r.argscN|||j|g|Ri|fS)zGenerate response and validation. Convenience function that return results of `response` and `validation`. :param JWK account_key: :rtype: tuple )rtry)r6rorzrus r$response_and_validationz1KeyAuthorizationChallenge.response_and_validations< k** =d===f==? ?r.N)r%r&r'r(NotImplementedrmr)r*rnr rTrerrkrVrtabcabstractmethodrryrr|r?r.r$rXrXs" C||jkr3td||d|z }||}td|j| tj |d|}n>#tj j $r'}t d||Yd}~dSd}~wwxYwd |_ td ||j|j|j|j} |j| kr#td |j| dSd S) aSimple verify. :param challenges.SimpleHTTP chall: Corresponding challenge. :param str domain: Domain name being verified. :param JWK account_public_key: Public key for the key pair being authorized. :param int port: Port used in the validation. :param int timeout: Timeout in seconds. :returns: ``True`` iff validation with the files currently served by the HTTP server is successful. :rtype: bool rFNz4Using non-standard port for http-01 verification: %sz:{0}zVerifying %s at %s...)rhrzUnable to reach %s: %sasciizReceived %s: %s. Headers: %szEKey authorization from response (%r) doesn't match HTTP response (%r)T)rhr r!PORTwarningformaturirmrequestsget exceptionsRequestExceptionr"encodingtextheadersrstripWHITESPACE_CUTSETrV) r6rWrrYrrr http_responser"challenge_responses r$rzHTTP01Response.simple_verify/s {{5"455  LLO P P P5   1 1 NNF N N N fmmD)) )Fii ,ei=== $LUGLLLMM"3    LL13 > > >55555 ")  3]"')> @ @ @+/66t7MNN  !%7 7 7 LL./3/E+ - - -5ts*CC=C88C=)Nr)r%r&r'r(rmrrr)rrkrintrRrr?r.r$rrs** C D"OBD6686S6dh6$SM6;>6HL666666r.rcteZdZdZeZejZdZ ede fdZ de de fdZ de j dede fd Zd S) rzACME http-01 challenge.z.well-known/acme-challengercHd|jzdz|dzS)zQPath (starting with '/') for provisioned resource. :rtype: str /rB) URI_ROOT_PATHrbr=s r$pathz HTTP01.pathqs(T''#- G0D0DDDr.rcd|z|jzS)zCreate an URI to the provisioned resource. Forms an URI to the HTTPS server provisioned resource (containing :attr:`~SimpleHTTP.token`). :param str domain: Domain name being verified. :rtype: str zhttp://)r)r6rs r$rz HTTP01.urizs6!DI--r.rorc ,||S)rrsrs r$ryzHTTP01.validations%%k222r.N)r%r&r'r(rrnrmrrQr)rrrrkrryr?r.r$rrhs!!!L  C0M< EcEEEXE .# .# . . . .3dh33333333r.rcTeZdZdZdZdZ dZdZede fdZ dd e d e e jd edee je jffd Z dd e de e de ede jfdZd e de jdefdZ dddd e dejde e jde e de edefdZdS)TLSALPN01Responsez$ACME tls-alpn-01 challenge response.z tls-alpn-01is1.3.6.1.5.5.7.1.30.1s acme-tls/1rc~tj|jdS)z*Hash value stored in challenge certificater)rrrVrbrr=s r$hzTLSALPN01Response.hs1~d4;;GDDEELLNNNr.Nrkeybitsc|3tj}|tj|dt j|jdz}tj|jd|}tj ||gd|g|fS)aGenerate tls-alpn-01 certificate. :param str domain: Domain verified by the challenge. :param OpenSSL.crypto.PKey key: Optional private key used in certificate generation. If not provided (``None``), then fresh key will be generated. :param int bits: Number of bits for newly generated key. :rtype: `tuple` of `OpenSSL.crypto.X509` and `OpenSSL.crypto.PKey` NsDER:hexT)criticalvalue) force_san extensions) r PKey generate_keyTYPE_RSAcodecsrbr X509ExtensionID_PE_ACME_IDENTIFIER_V1r gen_ss_cert)r6rrr der_valueacme_extensions r$gen_certzTLSALPN01Response.gen_certs ;+--C   V_d 3 3 3fmDFE::: -d.K7;9NNN&sVH3A2BDDDEHI Ir.hostrc|0tj|}td||||j}t j||||jgS)zProbe tls-alpn-01 challenge certificate. :param str domain: domain being validated, required. :param str host: IP address used to probe the certificate. :param int port: Port used to probe the certificate. Nz%s resolved to %s)rrralpn_protocols) socket gethostbynamer r!rr probe_snirbACME_TLS_1_PROTOCOL)r6rrrs r$ probe_certzTLSALPN01Response.probe_certsy <'//D LL,fd ; ; ; <9D$$++--d595M4NPPP Pr.certctj|}td|d|t |dks0|d|krdSt|D]P}| |}| dkr!| }||j kcSQdS)aVerify tls-alpn-01 challenge certificate. :param str domain: Domain name being validated. :param OpensSSL.crypto.X509 cert: Challenge certificate. :returns: Whether the certificate was successfully verified. :rtype: bool zCertificate %s. SANs: %srr_rFsUNDEF) r _pyopenssl_cert_or_req_all_namesr r!rralowerrangeget_extension_count get_extensionget_short_nameget_datar)r6rrnamesiextdatas r$ verify_certzTLSALPN01Response.verify_certsISIFK45IIII0=A)-PPPHSMP!#P28+PPPP$#V[T>QU,0!.!.;!.!.QUQY!.$V[1!.@H !.$SM!.59!.!.!.!.!.!.r.rceZdZdZeZejZdejde de e j e j ffdZedefdZdS)rzACME tls-alpn-01 challenge.rorurc tt|||dtt |dS)aGenerate validation. :param JWK account_key: :param str domain: Domain verified by the challenge. :param OpenSSL.crypto.PKey cert_key: Optional private key used in certificate generation. If not provided (``None``), then fresh key will be generated. :rtype: `tuple` of `OpenSSL.crypto.X509` and `OpenSSL.crypto.PKey` cert_keyr)rr)rrrtrrr)rxs r$ryzTLSALPN01.validationsa%t}}['A'ABBKK :&&VZZ1122L44 4r.cjttjdottjdS)ai Check if TLS-ALPN-01 challenge is supported on this machine. This implies that a recent version of OpenSSL is installed (>= 1.0.2), or a recent cryptography version shipped with the OpenSSL library is installed. :returns: ``True`` if TLS-ALPN-01 is supported on this machine, ``False`` otherwise. :rtype: bool set_alpn_protosset_alpn_select_callback)hasattrr ConnectionContextr?r.r$ is_supportedzTLSALPN01.is_supported(s0(9::ECK)CDD Fr.N)r%r&r'r(rrnrmrrkrrr rrry staticmethodrRrr?r.r$rrs%%$L  C4dh4#4% U[U`H`Ba4444" F$ F F F\ F F Fr.rc eZdZdZdZdZ ejfdejdej de dej fdZ d ej d ejde fd Zdejde dd fd ZdedefdZdS)DNSzACME "dns" challenge.dnsrroalgrurc tjjd|dd||d|S)zGenerate validation. :param .JWK account_key: Private account key. :param .JWA alg: :returns: This challenge wrapped in `.JWS` :rtype: .JWS T) sort_keysr)payloadrrr?)rJWSsign json_dumpsrb)r6rorrus r$gen_validationzDNS.gen_validation?sPx}0OOdO33::7CC00(.00 0r.ryrYc||sdS |||jdkS#tj$r&}t d|Yd}~dSd}~wwxYw)zwCheck validation. :param JWS validation: :param JWK account_public_key: :rtype: bool )rFrz&Checking validation for DNS failed: %sN)rh json_loadsrrfrDeserializationErrorr r!)r6ryrYr"s r$check_validationzDNS.check_validationNs  %7 88 5 4??"))'22444 4(    LLA5 I I I55555 s0A BA;;B DNSResponsec :t|j|fi|S)zGenerate response. :param .JWK account_key: Private account key. :param .JWA alg: :rtype: DNSResponse )ry)rrrxs r$ gen_responsezDNS.gen_response_s+&9d&9+&P&P&P&PQQQQr.rc8d|j|S)zgDomain name for TXT validation record. :param str name: Domain name being validated. z{0}.{1})rrrs r$rzDNS.validation_domain_namejs  D111r.N)r%r&r'r(rmrrRS256rk JWASignaturerrrrRrrr)rr?r.r$rr7s C ECMQZ 0 0$( 09J 0!$ 0)- 0 0 0 048VZ" R RC RM R R R R2323222222r.rceZdZUdZdZejdejjZ eje d<dddej de fd Z d S) rz@ACME "dns" challenge response. :param JWS validation: rry)rFrWrrYrc8||j|S)z~Check validation. :param challenges.DNS chall: :param JWK account_public_key: :rtype: bool )rry)r6rWrYs r$rzDNSResponse.check_validation~s%%do7IJJJr.N)r%r&r'r(rmrrKrrryr*rkrRrr?r.r$rrss C%4:lDHrs,,  111111  8 $ $7-[AAA 9 9 9 9 9. 9 9 9     6   I4BBBBBiBBB<,,,,,(9,,,d>?>?>?>?>?3;>?>?>?>?B54 &&&&& %&&&8EEEEE6EEEP $3$3$3$3$3 &$3$3$3N}.}.}.}.}.9}.}.}.@ "F"F"F"F"F)"F"F"FJ 8282828282/828282vKKKKK#KKKKKr.