ó
    ÌÅLg  ã                   ó¬   • S SK r S SKrS SKJr  S SKrS SKrS SKrS SKrS SK	rS SK
r\R                  R                  S5      r " S S5      rS rS rS rg)	é    N)Úurlparsez_dns.resolver.arpac                   ó6   • \ rS rSrS rS rS rS rS	S jrSr	g)
Ú	_SVCBInfoé   c                 ó4   • Xl         X l        X0l        X@l        g ©N)Úbootstrap_addressÚportÚhostnameÚnameservers)Úselfr	   r
   r   r   s        Ú*/usr/lib/python3/dist-packages/dns/_ddr.pyÚ__init__Ú_SVCBInfo.__init__   s   € Ø!2ÔØŒ	Ø ŒØ&Õó    c                 óR   • US    H  u  p#US:X  d  M  X0R                   :X  d  M    g   g)zIVerify that the _SVCBInfo's address is in the cert's subjectAltName (SAN)ÚsubjectAltNamez
IP AddressTF)r	   )r   ÚcertÚnameÚvalues       r   Úddr_check_certificateÚ_SVCBInfo.ddr_check_certificate!   s/   € àÐ 0Ô1‰KˆDØ�|Õ#¨×1GÑ1GÕ(GÙñ 2ð r   c                 ó�   • [         R                  R                  nUR                  5       nUR                  R
                  Ul        U$ r   )ÚdnsÚqueryÚsslÚcreate_default_contextÚ
TLSVersionÚTLSv1_2Úminimum_version)r   r   Úctxs      r   Úmake_tls_contextÚ_SVCBInfo.make_tls_context(   s4   € Ü�i‰i�m‰mˆØ×(Ñ(Ó*ˆØ!Ÿn™n×4Ñ4ˆÔØˆ
r   c                 ó  • U R                  5       n[        R                  " 5       U-   n[        R                  " U R                  U R
                  4U5       nUR                  X@R                  S9 nUR                  [        R                  R                  U5      5        UR                  5         UR                  5       nU R                  U5      sS S S 5        sS S S 5        $ ! , (       d  f       O= f S S S 5        g ! , (       d  f       g = f)N)Úserver_hostname)r"   ÚtimeÚsocketÚcreate_connectionr	   r
   Úwrap_socketr   Ú
settimeoutr   r   Ú
_remainingÚdo_handshakeÚgetpeercertr   )r   Úlifetimer!   Ú
expirationÚsÚtsr   s          r   Úddr_tls_check_syncÚ_SVCBInfo.ddr_tls_check_sync.   sÈ   € Ø×#Ñ#Ó%ˆÜ—Y’Y“[ 8Ñ+ˆ
Ü×%Ò%Ø×#Ñ# T§Y¡YÐ/°ô
àØ—‘ ·M±M�ÑBÀbØ—‘œcŸi™i×2Ñ2°:Ó>Ô?Ø—‘Ô!Ø—~‘~Ó'�Ø×1Ñ1°$Ó7÷	 CÐB÷
ñ 
÷ CÕBúÐB÷
÷ 
ö 
ús%   ÁC=Á0AC"Ã	C=Ã"
C0	Ã,C=Ã=
DNc           
   ƒ   óŒ  #   • Uc  [         R                  R                  5       nU R                  5       n[        R                  " 5       U-   nUR                  [         R                  R                  U R                  5      [        R                  SS U R                  U R                  4UUU R                  5      I S h  v•N  IS h  v•N nUR                  [         R                  R                  U5      5      I S h  v•N nU R!                  U5      sS S S 5      IS h  v•N   $  Ne N^ N* N! , IS h  v•N  (       d  f       g = f7f)Nr   )r   ÚasyncbackendÚget_default_backendr"   r&   Úmake_socketÚinetÚaf_for_addressr	   r'   ÚSOCK_STREAMr
   r   r-   r   r+   r   )r   r.   Úbackendr!   r/   r1   r   s          r   Úddr_tls_check_asyncÚ_SVCBInfo.ddr_tls_check_async:   sû   é € Ø‰?Ü×&Ñ&×:Ñ:Ó<ˆGØ×#Ñ#Ó%ˆÜ—Y’Y“[ 8Ñ+ˆ
Ø ×,Ñ,Ü�H‰H×#Ñ# D×$:Ñ$:Ó;Ü×ÑØØØ×#Ñ# T§Y¡YÐ/ØØØ�M‰Mó	
÷ 	
÷ 	
ð 	
ð ØŸ™¬¯	©	×(<Ñ(<¸ZÓ(HÓI×IˆDØ×-Ñ-¨dÓ3÷	
÷ 	
õ 	
ñ J÷	
÷ 	
÷ 	
ð 	
üsl   ‚B:EÂ<D"Â=EÃD$ÃEÃ	2D*Ã;D&Ã<D*ÄEÄD(ÄEÄ$EÄ&D*Ä(EÄ*EÄ0D3Ä1EÄ=E)r	   r   r   r
   r   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r"   r2   r<   Ú__static_attributes__© r   r   r   r      s   † ò'òòò
8÷4r   r   c           	      ó¨  • U R                   n[        R                  R                  U5      (       d  / $ / nU R                  R                  5        GHn  n/ nUR                  R                  [        R                  R                  R                  R                  5      nUc  MR  [        UR                  5      nUR                  R                  SS9nS nUR                  R                  [        R                  R                  R                  R                   5      nUb  UR"                  nSU;   aî  UR                  R                  [        R                  R                  R                  R$                  5      nUb   UR&                  R)                  S5      (       d  GMK  UR&                  S S R+                  5       n	U	R-                  S5      (       d  SU	-   n	Uc  SnSU S	U U	 3n
 [/        U
5        UR1                  [        R                   R3                  X¡5      5        S
U;   a4  Uc  SnUR1                  [        R                   R7                  XU5      5        SU;   a5  Uc  SnUR1                  [        R                   R9                  XSU5      5        [;        U5      S:”  d  GMS  UR1                  [=        XXt5      5        GMq     U$ ! [4         a     Nµf = f)NT)Úomit_final_dots   h2s   {?dns}iúÿÿÿÚ/i»  zhttps://Ú:s   dotiU  s   doqr   )Ú
nameserverr   r8   Ú
is_addressÚrrsetÚprocessing_orderÚparamsÚgetÚrdtypesÚsvcbbaseÚParamKeyÚALPNÚsetÚidsÚtargetÚto_textÚPORTr
   ÚDOHPATHr   ÚendswithÚdecodeÚ
startswithr   ÚappendÚDoHNameserverÚ	ExceptionÚDoTNameserverÚDoQNameserverÚlenr   )Úanswerr	   ÚinfosÚrrr   ÚparamÚalpnsÚhostr
   ÚpathÚurls              r   Ú_extract_nameservers_from_svcbri   M   sO  € Ø×)Ñ)ÐÜ�8‰8×ÑÐ0×1Ñ1Øˆ	Ø€EØ�l‰l×+Ñ+×-ˆØˆØ—	‘	—‘œcŸk™k×2Ñ2×;Ñ;×@Ñ@ÓAˆØ‰=ÙÜ�E—I‘I“ˆØ�y‰y× Ñ °Ð Ð5ˆØˆØ—	‘	—‘œcŸk™k×2Ñ2×;Ñ;×@Ñ@ÓAˆØÑØ—:‘:ˆDð �E‹>Ø—I‘I—M‘M¤#§+¡+×"6Ñ"6×"?Ñ"?×"GÑ"GÓHˆEØ‰} E§K¡K×$8Ñ$8¸×$CÑ$CÚØ—;‘;˜s Ð#×*Ñ*Ó,ˆDØ—?‘? 3×'Ñ'Ø˜T‘z�Ø‰|Ø�Ø˜T˜F ! D 6¨$¨Ð0ˆCðÜ˜”Ø×"Ñ"¤3§>¡>×#?Ñ#?ÀÓ#WÔXð �U‹?Ø‰|Ø�Ø×ÑÜ—‘×,Ñ,Ð->ÀdÓKôð �U‹?Ø‰|Ø�Ø×ÑÜ—‘×,Ñ,Ð->ÀdÈDÓQôô ˆ{Ó˜aÖØ�L‰LœÐ#4¸DÓN×OñW .ðX €Løô# ó áðús   Ç"9KË
KËKc                 ó¼   • / n[        U 5      nU H7  n UR                  U5      (       a  UR                  UR                  5        M7  M9     U$ ! [         a     MJ  f = f)úRReturn a list of TLS-validated resolver nameservers extracted from an SVCB
answer.)ri   r2   Úextendr   r]   ©ra   r.   r   rb   Úinfos        r   Ú_get_nameservers_syncro   �   sh   € ð €KÜ*¨6Ó2€EÛˆð	Ø×&Ñ& x×0Ñ0Ø×"Ñ" 4×#3Ñ#3Ö4ñ 1ñ ð Ðøô ó 	Úð	ús   ”1AÁ
AÁAc              ƒ   óØ   #   • / n[        U 5      nU H?  n UR                  U5      I Sh  v•N (       a  UR                  UR                  5        M?  MA     U$  N,! [         a     MT  f = f7f)rk   N)ri   r<   rl   r   r]   rm   s        r   Ú_get_nameservers_asyncrq   �   sp   é € ð €KÜ*¨6Ó2€EÛˆð	Ø×-Ñ-¨hÓ7×7Õ7Ø×"Ñ" 4×#3Ñ#3Ö4ñ 8ñ ð Ðñ	 8øäó 	Úð	üs8   ‚A*–AªA«$AÁA*ÁAÁ
A'Á#A*Á&A'Á'A*)r'   r&   Úurllib.parser   Údns.asyncbackendr   Údns.inetÚdns.nameÚdns.nameserverÚ	dns.queryÚdns.rdtypes.svcbbaser   Ú	from_textÚ_local_resolver_namer   ri   ro   rq   rC   r   r   Ú<module>r{      sU   ðó
 Û Ý !ã Û Û Û Û Û ð —x‘x×)Ñ)Ð*>Ó?Ð ÷04ñ 04òf1òhór   