
    iD              
          U d Z ddlZddlZddlZddlZddlmZ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	ddlZ	 G d de	j        j                  Z G d d          Z G d d	e          Z G d
 de          Z G d de	j        j                  Z G d de          Z G d de          Z G d de          Z G d de          Zej        eej        eej        eej        eej        eiZ eeef         e!d<   dedefdZ"dee#z  dddefdZ$dee#z  de%de&de&def
d Z'd!ededdfd"Z(ej        Zej)        Z)ej*        Z*ej+        Z+ej        Zej,        Z,ej        Zej-        Z-ej.        Z.ej/        Z/ej        Zej        ZdS )#zEDNS Options    N)AnyDictc                   X    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZed             ZdS )
OptionTypezEDNS option type codes               	   
                  c                     dS Ni   clss    X/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/dns/edns.py_maximumzOptionType._maximum?       u    N)__name__
__module____qualname____doc__NSIDDAUDHUN3UECSEXPIRECOOKIE	KEEPALIVEPADDINGCHAINEDEREPORTCHANNELclassmethodr   r   r   r   r   r   #   sq           D
C
C
C
CFFIGE
CM  [  r   r   c                       e Zd ZdZdeez  fdZddedz  dedz  fdZ	defdZ
dd
Zededddd fd            Zd Zd Zd Zd Zd Zd Zd Zd ZdS )Optionz%Base class for all EDNS option types.otypec                 D    t                               |          | _        dS )z_Initialize an option.

        *otype*, a ``dns.edns.OptionType``, is the option type.
        N)r   maker/   )selfr/   s     r   __init__zOption.__init__G   s    
  __U++


r   Nfilereturnc                     t           )zUConvert an option to wire format.

        Returns a ``bytes`` or ``None``.

        NotImplementedErrorr2   r4   s     r   to_wirezOption.to_wireN   s
     "!r   c                     t           Nr7   r2   s    r   to_textzOption.to_textV   s    !!r   GenericOptionc                 \    |                                  }|J t          | j        |          S )zrCreates a dns.edns.GenericOption equivalent of this rdata.

        Returns a ``dns.edns.GenericOption``.
        )r:   r?   r/   )r2   wires     r   
to_genericzOption.to_genericY   s/    
 ||~~TZ...r   parserdns.wire.Parserc                     t           )a  Build an EDNS option object from wire format.

        *otype*, a ``dns.edns.OptionType``, is the option type.

        *parser*, a ``dns.wire.Parser``, the parser, which should be
        restructed to the option length.

        Returns a ``dns.edns.Option``.
        r7   r   r/   rC   s      r   from_wire_parserzOption.from_wire_parserb   s
     "!r   c                 v    |                                  }|                                 }||k    rdS ||k    rdS dS )zCompare an EDNS option with another option of the same type.

        Returns < 0 if < *other*, 0 if == *other*, and > 0 if > *other*.
        r      )r:   )r2   otherrA   owires       r   _cmpzOption._cmpo   s?    
 ||~~5==1%<<1rr   c                     t          |t                    sdS | j        |j        k    rdS |                     |          dk    S )NFr   
isinstancer.   r/   rM   r2   rK   s     r   __eq__zOption.__eq__|   sD    %(( 	5:$$5yy1$$r   c                     t          |t                    sdS | j        |j        k    rdS |                     |          dk    S )NTr   rO   rQ   s     r   __ne__zOption.__ne__   sD    %(( 	4:$$4yy1$$r   c                     t          |t                    r| j        |j        k    rt          S |                     |          dk     S Nr   rP   r.   r/   NotImplementedrM   rQ   s     r   __lt__zOption.__lt__   ?    %(( 	"DJ%+,E,E!!yy!##r   c                     t          |t                    r| j        |j        k    rt          S |                     |          dk    S rV   rW   rQ   s     r   __le__zOption.__le__   ?    %(( 	"DJ%+,E,E!!yy1$$r   c                     t          |t                    r| j        |j        k    rt          S |                     |          dk    S rV   rW   rQ   s     r   __ge__zOption.__ge__   r]   r   c                     t          |t                    r| j        |j        k    rt          S |                     |          dk    S rV   rW   rQ   s     r   __gt__zOption.__gt__   rZ   r   c                 *    |                                  S r<   )r>   r=   s    r   __str__zOption.__str__   s    ||~~r   r<   r5   r?   )r   r   r   r   r   strr3   r   bytesr:   r>   rB   r,   rG   rM   rR   rT   rY   r\   r_   ra   rc   r   r   r   r.   r.   D   sF       //,j3. , , , ," "C$J "%$, " " " "" " " " "/ / / / 
"Z 
"9J 
"x 
" 
" 
" [
"  % % %% % %$ $ $
% % %
% % %
$ $ $
    r   r.   c                        e Zd ZdZdeez  deez  f fdZddedz  dedz  fdZ	defd	Z
dd
Zedeez  dddefd            Z xZS )r?   zwGeneric Option Class

    This class is used for EDNS option types for which we have no better
    implementation.
    r/   datac                     t                                          |           t          j        j                            |d          | _        d S )NT)superr3   dnsrdataRdata	_as_bytesrh   )r2   r/   rh   	__class__s      r   r3   zGenericOption.__init__   s:    IO--dD99			r   Nr4   r5   c                 L    |r|                     | j                   d S | j        S r<   )writerh   r9   s     r   r:   zGenericOption.to_wire   +     	JJty!!!49r   c                     d| j          S )NzGeneric )r/   r=   s    r   r>   zGenericOption.to_text   s    &$*&&&r   c                     | S r<   r   r=   s    r   rB   zGenericOption.to_generic   s    r   rC   rD   c                 >     | ||                                           S r<   get_remainingrF   s      r   rG   zGenericOption.from_wire_parser   s"     s5&..00111r   r<   rd   )r   r   r   r   r   re   rf   r3   r   r:   r>   rB   r,   r.   rG   __classcell__ro   s   @r   r?   r?      s         :j3. :eck : : : : : : C$J %$,    ' ' ' ' '    2$2.?2	2 2 2 [2 2 2 2 2r   r?   c                        e Zd ZdZddededz  def fdZdefd	Zed
ede	fd            Z
ddedz  dedz  fdZedeez  ddde	fd            Z xZS )	ECSOptionz!EDNS Client Subnet (ECS, RFC7871)Nr   addresssrclenscopelenc                 z   t                                          t          j                   t          j                            |          }|t          j        k    r|d| _	        |d}t          j
        j                            |          }t          j
        j                            |dd          }t          j
        j                            |dd          }n|t          j        k    r|d| _	        |d}t          j
        j                            |          }t          j
        j                            |dd          }t          j
        j                            |dd          }nt!          d	          |J || _        || _        || _        t          j                            ||          }t+          t-          j        |d
z                      }|d|         | _        |dz  }|dk    rQt3          j        dt7          | j        dd                   dd|z
  z  z            }| j        dd         |z   | _        dS dS )a  *address*, a ``str``, is the client address information.

        *srclen*, an ``int``, the source prefix length, which is the
        leftmost number of bits of the address to be used for the
        lookup.  The default is 24 for IPv4 and 56 for IPv6.

        *scopelen*, an ``int``, the scope prefix length.  This value
        must be 0 in queries, and should be set in responses.
           N8   r      rI          zBad address family       @r   BrJ      )rj   r3   r   r$   rk   inetaf_for_addresssocketAF_INET6familyrl   rm   _as_ipv6_address_as_intAF_INET_as_ipv4_address
ValueErrorr|   r}   r~   	inet_ptonintmathceiladdrdatastructpackord)
r2   r|   r}   r~   afr   nbytesnbitslastro   s
            r   r3   zECSOption.__init__   s    	(((X$$W--  DK~io66w??GY_,,VQ<<Fy..xC@@HH6>!!DK~io66w??GY_,,VQ;;Fy..xB??HH1222!!! 8%%b'22TYv|,,-- !&)
A::;sCbcc(:$;$;tE	?R$STTD M#2#.5DMMM :r   r5   c                 6    d| j          d| j         d| j         S )NzECS /z scope/)r|   r}   r~   r=   s    r   r>   zECSOption.to_text   s&    HdlHHT[HHHHHr   textc                    d}|                                  }d}t          |          dk    r	|d         }nNt          |          dk    r(|d         |k    rt          d|  d          |d         }nt          d|  d          |                    d          }|dk    r|                     d          \  }}d	}n3|dk    r|                     d          \  }}}nt          d|  d          	 t	          |          }n$# t          $ r t          d
d| dz             w xY w	 t	          |          }	n$# t          $ r t          dd| dz             w xY wt          ||	|          S )a  Convert a string into a `dns.edns.ECSOption`

        *text*, a `str`, the text form of the option.

        Returns a `dns.edns.ECSOption`.

        Examples:

        >>> import dns.edns
        >>>
        >>> # basic example
        >>> dns.edns.ECSOption.from_text('1.2.3.4/24')
        >>>
        >>> # also understands scope
        >>> dns.edns.ECSOption.from_text('1.2.3.4/24/32')
        >>>
        >>> # IPv6
        >>> dns.edns.ECSOption.from_text('2001:4b98::1/64/64')
        >>>
        >>> # it understands results from `dns.edns.ECSOption.to_text()`
        >>> dns.edns.ECSOption.from_text('ECS 1.2.3.4/24/32')
        r$   NrI   r   r   zcould not parse ECS from ""r   0zinvalid scope z": scope must be an integerzinvalid srclen z": srclen must be an integer)splitlenr   countr   r{   )
r   optional_prefixtokensecs_text	n_slashesr|   tsrclentscopescoper}   s
             r   	from_textzECSOption.from_text   s   0  v;;!ayHH[[AayO++ !Ed!E!E!EFFFayHHA$AAABBBNN3''	>>'~~c22GWFF!^^'/~~c':':$GWffA$AAABBB	YKKEE 	Y 	Y 	Y-0WF0W0W0WWXXX	Y	\\FF 	 	 	!$M$M$M$MM  	 &%000s   -C= =!D"D2 2!Er4   c                     t          j        d| j        | j        | j                  | j        z   }|r|                    |           d S |S )N!HBB)r   r   r   r}   r~   r   rq   r2   r4   values      r   r:   zECSOption.to_wire-  sM    KT[$-HH4=X 	  	JJu4Lr   r/   rC   rD   c                    |                     d          \  }}}t          t          j        |dz                      }|                    |          }|dk    r+d|z
  }t
          j                            |d|z  z             }	n@|dk    r+d|z
  }t
          j                            |d|z  z             }	nt          d           | |	||          S )	Nr   r   rI          r      zunsupported family)

get_structr   r   r   	get_bytesrk   ipv4	inet_ntoaipv6r   )
r   r/   rC   r   srcr   addrlenprefixpadaddrs
             r   rG   zECSOption.from_wire_parser7  s     $..v66Udic	**++!!'**Q;;g+C8%%fw}&<==DDq[[w,C8%%fw}&<==DD1222s4e$$$r   rV   r<   )r   r   r   r   re   r   r3   r>   staticmethodr.   r   r   rf   r:   r,   r   rG   rx   ry   s   @r   r{   r{      s       ++-6 -6 -6S4Z -6# -6 -6 -6 -6 -6 -6^I I I I I 41 41 41 41 41 \41l C$J %$,     %$%.?%	% % % [% % % % %r   r{   c                       e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZed             ZdS )EDECodezExtended DNS Error (EDE) codesr   rI   r   r   r   r   r	   r
   r   r   r   r   r   r      r   r      r                  r   c                     dS r   r   r   s    r   r   zEDECode._maximumg  r   r   N)r   r   r   r   OTHERUNSUPPORTED_DNSKEY_ALGORITHMUNSUPPORTED_DS_DIGEST_TYPESTALE_ANSWERFORGED_ANSWERDNSSEC_INDETERMINATEDNSSEC_BOGUSSIGNATURE_EXPIREDSIGNATURE_NOT_YET_VALIDDNSKEY_MISSINGRRSIGS_MISSINGNO_ZONE_KEY_BIT_SETNSEC_MISSINGCACHED_ERROR	NOT_READYBLOCKEDCENSOREDFILTERED
PROHIBITEDSTALE_NXDOMAIN_ANSWERNOT_AUTHORITATIVENOT_SUPPORTEDNO_REACHABLE_AUTHORITYNETWORK_ERRORINVALID_DATAr,   r   r   r   r   r   r   J  s        ((E#$ !"LMLNNLLIGHHJMML  [  r   r   c                        e Zd ZdZh dZddeez  dedz  f fdZdefdZdd	e	dz  de
dz  fd
Zedeez  dddefd            Z xZS )	EDEOptionz!Extended DNS Error (EDE, RFC8914)>   DSNSECDNSKEYDNSSECRRSIGsNXDOMAINNcoder   c                     t                                          t          j                   t                              |          | _        |$t          |t                    st          d          || _
        dS )z*code*, a ``dns.edns.EDECode`` or ``str``, the info code of the
        extended error.

        *text*, a ``str`` or ``None``, specifying additional information about
        the error.
        Nztext must be string or None)rj   r3   r   r*   r   r1   r   rP   re   r   r   )r2   r   r   ro   s      r   r3   zEDEOption.__init__q  sa     	(((LL&&	JtS$9$9:;;;			r   r5   c                     d j          } j         t          v r\t                               j                   }d                     fd|                    d          D                       }|d| dz  } j        |d j         z  }|S )NzEDE  c              3   V   K   | ]#}|j         v r|n|                                V  $d S r<   )_preserve_casetitle).0wordr2   s     r   	<genexpr>z$EDEOption.to_text.<locals>.<genexpr>  sP          333     r   _z ()z: )r   r   r>   joinr   r   )r2   outputdescs   `  r   r>   zEDEOption.to_text  s    #	##9??49--D88     JJsOO    D l4lll"F9 &49&&&Fr   r4   c                     t          j        d| j                  }| j        || j                            d          z  }|r|                    |           d S |S )Nz!Hutf8)r   r   r   r   encoderq   r   s      r   r:   zEDEOption.to_wire  s[    D$),,9 TY%%f---E 	JJu4Lr   r/   rC   rD   c                     t                               |                                          }|                                }|r,|d         dk    r
|d d         }|                    d          }nd } | ||          S )NrJ   r   r   )r   r1   
get_uint16rw   decode)r   r/   rC   r   r   btexts         r   rG   zEDEOption.from_wire_parser  s~     ||F--//00##%% 	Bx1}}CRCyKK''EEEs4r   r<   )r   r   r   r   r   r   re   r3   r>   r   rf   r:   r,   r   r.   rG   rx   ry   s   @r   r   r   l  s        ++MMMN Ws] #*          	 	C$J 	%$, 	 	 	 	  $ .? 	      [         r   r   c                        e Zd Zdef fdZddededz  fdZdefdZe	de
ez  d	ej        j        defd
            Z xZS )
NSIDOptionnsidc                 l    t                                          t          j                   || _        d S r<   )rj   r3   r   r    r  )r2   r  ro   s     r   r3   zNSIDOption.__init__  s(    )))			r   Nr4   r5   c                 L    |r|                     | j                   d S | j        S r<   )rq   r  r9   s     r   r:   zNSIDOption.to_wire  rr   r   c                     t          d | j        D                       r| j                                        }n+t          j        | j                                                  }d| S )Nc              3   .   K   | ]}|d k    o|dk    V  dS )r   ~   Nr   )r   cs     r   r   z%NSIDOption.to_text.<locals>.<genexpr>  s/      ::1qDy&Q$Y::::::r   zNSID )allr  r  binasciihexlify)r2   r   s     r   r>   zNSIDOption.to_text  sb    ::	::::: 	9I$$&&EE$TY//6688Eur   r/   rC   c                 <     | |                                           S r<   rv   rF   s      r   rG   zNSIDOption.from_wire_parser  s      s6''))***r   r<   r   r   r   rf   r3   r   r:   re   r>   r,   r   rk   rA   Parserr.   rG   rx   ry   s   @r   r  r    s        U       C 54<         +$+.1ho+	+ + + [+ + + + +r   r  c                        e Zd Zdedef fdZddededz  fdZdefdZe	d	e
ez  d
ej        j        defd            Z xZS )CookieOptionclientserverc                 R   t                                          t          j                   || _        || _        t          |          dk    rt          d          t          |          dk    r5t          |          dk     st          |          dk    rt          d          d S d S )Nr   zclient cookie must be 8 bytesr   r   z5server cookie must be empty or between 8 and 32 bytes)rj   r3   r   r&   r  r  r   r   )r2   r  r  ro   s      r   r3   zCookieOption.__init__  s    *+++v;;!<===v;;!VqCKK"4D4DTUUU 4D4Dr   Nr4   r5   c                     |rN|                     | j                   t          | j                  dk    r|                     | j                   d S | j        | j        z   S rV   )rq   r  r   r  r9   s     r   r:   zCookieOption.to_wire  s[     	-JJt{###4;!##

4;'''4;,,r   c                     t          j        | j                                                  }t	          | j                  dk    r,t          j        | j                                                  }nd}d| | S )Nr    zCOOKIE )r  r  r  r  r   r  )r2   r  r  s      r   r>   zCookieOption.to_text  sm    !$+..5577t{a%dk2299;;FFF)))))r   r/   rC   c                 d     | |                     d          |                                          S )Nr   )r   rw   rF   s      r   rG   zCookieOption.from_wire_parser  s0     s6##A&&(<(<(>(>???r   r<   r  ry   s   @r   r  r    s        Vu Ve V V V V V V- -C -54< - - - -* * * * * @$@.1ho@	@ @ @ [@ @ @ @ @r   r  c                        e Zd Zdej        j        f fdZddededz  fdZ	de
fdZedee
z  d	ej        j        defd
            Z xZS )ReportChannelOptionagent_domainc                 l    t                                          t          j                   || _        d S r<   )rj   r3   r   r+   r  )r2   r  ro   s     r   r3   zReportChannelOption.__init__  s,    1222(r   Nr4   r5   c                 6    | j                             |          S r<   )r  r:   r9   s     r   r:   zReportChannelOption.to_wire  s     ((...r   c                 :    d| j                                         z   S )NzREPORTCHANNEL )r  r>   r=   s    r   r>   zReportChannelOption.to_text  s    $"3";";"="===r   r/   rC   c                 <     | |                                           S r<   )get_namerF   s      r   rG   z$ReportChannelOption.from_wire_parser  s     s6??$$%%%r   r<   )r   r   r   rk   nameNamer3   r   rf   r:   re   r>   r,   r   rA   r  r.   rG   rx   ry   s   @r   r  r    s        )SX] ) ) ) ) ) )/ /C /54< / / / /> > > > > &$&.1ho&	& & & [& & & & &r   r  _type_to_classr/   r5   c                 L    t                               |           }|t          }|S )zReturn the class for the specified option type.

    The GenericOption class is used if a more specific class is not
    known.
    )r%  getr?   )r/   r   s     r   get_option_classr(    s&     

U
#
#C
{Jr   rC   rD   c                     t                               |           } t          |           }|                    | |          S )a  Build an EDNS option object from wire format.

    *otype*, an ``int``, is the option type.

    *parser*, a ``dns.wire.Parser``, the parser, which should be
    restricted to the option length.

    Returns an instance of a subclass of ``dns.edns.Option``.
    )r   r1   r(  rG   )r/   rC   r   s      r   option_from_wire_parserr*    s8     OOE""E
5
!
!Cv...r   rA   currentolenc                     t           j                            ||          }|                    |          5  t	          | |          cddd           S # 1 swxY w Y   dS )ar  Build an EDNS option object from wire format.

    *otype*, an ``int``, is the option type.

    *wire*, a ``bytes``, is the wire-format message.

    *current*, an ``int``, is the offset in *wire* of the beginning
    of the rdata.

    *olen*, an ``int``, is the length of the wire-format option data

    Returns an instance of a subclass of ``dns.edns.Option``.
    N)rk   rA   r  restrict_tor*  )r/   rA   r+  r,  rC   s        r   option_from_wirer/     s      X__T7++F			D	!	! 6 6&uf556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   AAAimplementationc                     | t           |<   dS )zRegister the implementation of an option type.

    *implementation*, a ``class``, is a subclass of ``dns.edns.Option``.

    *otype*, an ``int``, is the option type.
    N)r%  )r0  r/   s     r   register_typer2  5  s     +N5r   )0r   r  r   r   r   typingr   r   dns.enumrk   dns.inetdns.ipv4dns.ipv6dns.name	dns.rdatadns.wireenumIntEnumr   r.   r?   r{   r   r   r  r  r  r$   r*   r    r&   r+   r%  __annotations__r(  re   r*  rf   r   r/  r2  r!   r"   r#   r%   r'   r(   r)   r   r   r   <module>r>     s  $                             !   B[ [ [ [ [ [ [ [|2 2 2 2 2F 2 2 2>F% F% F% F% F% F% F% F%R    ch   D:  :  :  :  :  :  :  : z+ + + + + + + +6@ @ @ @ @6 @ @ @D& & & & && & & &( NINIOZ|1)Z_%   
J 
3 
 
 
 
//%6// / / /"66#(6366>A66 6 6 6*+# +j +T + + + + nnnn				 	

n(r   