
    I]0i                        U d dl mZmZmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ ej                            d          r)d dlmZmZ d d	lmZmZ d d
lmZmZ d dlmZmZmZmZmZ dZ ndZ e!ej"        j#        z  dz  Z$i Z%eee
e$f         ee         f         e&d<   e rxe%'                    e
j(        dfee
j)        dfee
j*        dfee
j+        dfee
j,        dfee
j-        dfee
j.        dfee
j/        dfee
j0        dfee
j1        dfee
j2        dfei           	 dde3e4z  de$dee         fdZ5dedee         fdZ6	 	 dde3e4z  dee         dej"        j#        e4z  dz  de!dz  ddf
dZ7dS )    )DictTupleTypeN)GenericPrivateKey)	Algorithm)UnsupportedAlgorithm)DNSKEYdnssec)
PrivateDSAPrivateDSANSEC3SHA1)PrivateECDSAP256SHA256PrivateECDSAP384SHA384)PrivateED448PrivateED25519)PrivateRSAMD5PrivateRSASHA1PrivateRSASHA1NSEC3SHA1PrivateRSASHA256PrivateRSASHA512TF
algorithms	algorithmprefixreturnc                     t          j        |           } t                              | |f          }|r|S t	          dt          j        |            d          )zGet Private Key class from Algorithm.

    *algorithm*, a ``str`` or ``int`` specifying the DNSKEY algorithm.

    Raises ``UnsupportedAlgorithm`` if the algorithm is unknown.

    Returns a ``dns.dnssecalgs.GenericPrivateKey``
    zalgorithm "z" not supported by dnspython)r   maker   getr   to_text)r   r   clss      J/var/www/html/venv/lib/python3.11/site-packages/dns/dnssecalgs/__init__.pyget_algorithm_clsr    2   sa     y))I
..)V,
-
-C
 

Pi'	22PPP      dnskeyc                 .   d}| j         t          j        k    r)t          j                            | j        d          \  }}nA| j         t          j        k    r,t          | j        d                   }| j        d|dz            }t          | j         |          S )zGet Private Key class from DNSKEY.

    *dnskey*, a ``DNSKEY`` to get Algorithm class for.

    Raises ``UnsupportedAlgorithm`` if the algorithm is unknown.

    Returns a ``dns.dnssecalgs.GenericPrivateKey``
    Nr      )
r   r   
PRIVATEDNSdnsname	from_wirekey
PRIVATEOIDintr    )r"   r   _lengths       r   get_algorithm_cls_from_dnskeyr.   F   s     #F9///H&&vz155			Y1	1	1VZ]##A
N+V-v666r!   algorithm_clsr'   oidc                 
   t          |t                    st          d          t          j        |           } d}| t          j        k    rH|t          d          t          |t                    rt          j
                            |          }|}nd| t          j        k    r2|t          d          t          t          |          g          |z   }n"|rt          d          |rt          d          |t          | |f<   dS )a  Register Algorithm Private Key class.

    *algorithm*, a ``str`` or ``int`` specifying the DNSKEY algorithm.

    *algorithm_cls*: A `GenericPrivateKey` class.

    *name*, an optional ``dns.name.Name`` or ``str``, for for PRIVATEDNS algorithms.

    *oid*: an optional BER-encoded `bytes` for PRIVATEOID algorithms.

    Raises ``ValueError`` if a name or oid is specified incorrectly.
    zInvalid algorithm classNz'Name required for PRIVATEDNS algorithmsz&OID required for PRIVATEOID algorithmsz,Name only supported for PRIVATEDNS algorithmz+OID only supported for PRIVATEOID algorithm)
issubclassr   	TypeErrorr   r   r%   
ValueError
isinstancestrr&   r'   	from_textr*   byteslenr   )r   r/   r'   r0   r   s        r   register_algorithm_clsr:   X   s   $ m%677 31222y))I"FI(((<FGGGdC   	,8%%d++D	i*	*	*;EFFFCz""S(	 HGHHH	 HFGGG&3J	6"###r!   )N)NN)8typingr   r   r   dns._featuresr&   dns.namedns.dnssecalgs.baser   dns.dnssectypesr   dns.exceptionr   dns.rdtypes.ANY.DNSKEYr	   	_featureshavedns.dnssecalgs.dsar   r   dns.dnssecalgs.ecdsar   r   dns.dnssecalgs.eddsar   r   dns.dnssecalgs.rsar   r   r   r   r   _have_cryptographyr8   r'   NameAlgorithmPrefixr   __annotations__updateRSAMD5DSARSASHA1DSANSEC3SHA1RSASHA1NSEC3SHA1	RSASHA256	RSASHA512ECDSAP256SHA256ECDSAP384SHA384ED25519ED448r+   r6   r    r.   r:    r!   r   <module>rY      s   $ $ $ $ $ $ $ $ $ $ $      1 1 1 1 1 1 % % % % % % . . . . . . ) ) ) ) ) ) =h BBBBBBBBSSSSSSSSAAAAAAAA              #(-'$.OQ
Dy/12D9J4KKL Q Q Q t$m]D!:%~#T*,?'.0G $')9 $')9&-/E&-/E%~_d#\	
  $ 59 Sy"1	
   (7& 7T:K5L 7 7 7 7* (,	$4 $4Sy$4)*$4 (-#

$$4 
	$4
 
$4 $4 $4 $4 $4 $4r!   