
    ,h                         d dl Z d dlZd dlmZ d dlZd dlZd dlZd dlZd dl	Zd dl
Zej                  j                  d      Z G d d      Zd Zd Zd Zy)	    N)urlparsez_dns.resolver.arpac                   ,    e Zd Zd Zd Zd Zd ZddZy)	_SVCBInfoc                 <    || _         || _        || _        || _        y N)bootstrap_addressporthostnamenameservers)selfr   r	   r
   r   s        J/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/dns/_ddr.py__init__z_SVCBInfo.__init__   s     !2	 &    c                 L    |d   D ]  \  }}|dk(  s|| j                   k(  s y y)zIVerify that the _SVCBInfo's address is in the cert's subjectAltName (SAN)subjectAltNamez
IP AddressTF)r   )r   certnamevalues       r   ddr_check_certificatez_SVCBInfo.ddr_check_certificate!   s8     01 	KD%|#1G1G(G	 r   c                     t         j                  j                  }|j                         }|j                  j
                  |_        |S r   )dnsquerysslcreate_default_context
TLSVersionTLSv1_2minimum_version)r   r   ctxs      r   make_tls_contextz_SVCBInfo.make_tls_context(   s4    iimm((*!nn44
r   c                    | j                         }t        j                         |z   }t        j                  | j                  | j
                  f|      5 }|j                  || j                        5 }|j                  t        j                  j                  |             |j                          |j                         }| j                  |      cd d d        cd d d        S # 1 sw Y   nxY w	 d d d        y # 1 sw Y   y xY w)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_syncz_SVCBInfo.ddr_tls_check_sync.   s    ##%YY[8+
%%##TYY/
 	8DMMB 8bcii22:>?!~~'11$7	8 8	8 	88 8 8	8 	8 	8s%   C:2AC$	C:$C-	)C::DNc           
      ~  K   |t         j                  j                         }| j                         }t	        j                         |z   }|j                  t         j                  j                  | j                        t        j                  dd | j                  | j                  f||| j                         d {   4 d {   }|j                  t         j                  j                  |             d {   }| j!                  |      cd d d       d {    S 7 e7 ^7 *7 # 1 d {  7  sw Y   y xY ww)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+   r-   r   s          r   ddr_tls_check_asyncz_SVCBInfo.ddr_tls_check_async:   s
    ?&&::<G##%YY[8+
 ,,HH##D$:$:;##TYY/MM	
 	
 	4 	4 		(<(<Z(HIID--d3	4 	4 	4 	
 	4 J	4 	4 	4 	4sl   B8D=:D ;D=D"D=2D(9D$:D(D=D&D="D=$D(&D=(D:.D1/D:6D=r   )__name__
__module____qualname__r   r   r   r.   r7    r   r   r   r      s    '
84r   r   c           	      t   | j                   }t        j                  j                  |      sg S g }| j                  j                         D ][  }g }|j                  j                  t        j                  j                  j                  j                        }|Pt        |j                        }|j                  j                  d      }d }|j                  j                  t        j                  j                  j                  j                         }||j"                  }d|v r|j                  j                  t        j                  j                  j                  j$                        }||j&                  j)                  d      sB|j&                  d d j+                         }	|	j-                  d      sd|	z   }	|d}d| d	| |	 }
	 t/        |
       |j1                  t        j                   j3                  |
|             d
|v r4|d}|j1                  t        j                   j7                  |||             d|v r5|d}|j1                  t        j                   j9                  ||d|             t;        |      dkD  s?|j1                  t=        ||||             ^ |S # t4        $ r Y w xY w)NT)omit_final_dots   h2s   {?dns}i/i  zhttps://:s   dotiU  s   doqr   )
nameserverr   r3   
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_svcbra   M   sX   ))8801	Ell++- +P		ckk22;;@@A=EIIyy   5		ckk22;;@@A::D E>IIMM#++"6"6"?"?"G"GHE}EKK$8$8$C;;s#**,D??3'Tz|TF!D6$0C""3>>#?#?EV#WX U?|,,->dK U?|,,->dDQ {aLL#4dD+NOW+PX L#  s   :J++	J76J7c                     g }t        |       }|D ]/  }	 |j                  |      r|j                  |j                         1 |S # t        $ r Y ?w xY w)VReturn a list of TLS-validated resolver nameservers extracted from an SVCB
    answer.)ra   r.   extendr   rU   rY   r*   r   rZ   infos        r   _get_nameservers_syncrg      sf     K*62E 	&&x0""4#3#34   		s   ,A	AAc                    K   g }t        |       }|D ]7  }	 |j                  |       d{   r|j                  |j                         9 |S 7 ## t        $ r Y Iw xY ww)rc   N)ra   r7   rd   r   rU   re   s        r   _get_nameservers_asyncri      sr      K*62E 	--h777""4#3#34 	 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   ra   rg   ri   r;   r   r   <module>rs      sU   
   !       xx))*>? 04 04f1hr   