o
    h                     @   s  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rZd 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#B dB Z$i Z%eee
e$f ee f e&d< e re%'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
j0dfee
j1dfee
j2dfei 	dde3e4B de$dee fddZ5dedee fddZ6		dde3e4B dee dej"j#e4B dB de!dB ddf
d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                 C   s6   t | } t| |f}|r|S tdt |  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   cls r   Y/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/dns/dnssecalgs/__init__.pyget_algorithm_cls2   s   
r   dnskeyc                 C   s^   d}| j tjkrtj| jd\}}n| j tjkr)t| jd }| jd|d  }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   _lengthr   r   r   get_algorithm_cls_from_dnskeyF   s   	r+   algorithm_clsr$   oidc                 C   s   t |ts	tdt| } d}| tjkr+|du rtdt|tr(t	j
|}|}n#| tjkrB|du r8tdtt|g| }n|rHtd|rNt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$   r-   r   r   r   r   register_algorithm_clsX   s&   




r6   )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_cryptographyr4   r$   NameAlgorithmPrefixr   __annotations__updateRSAMD5DSARSASHA1DSANSEC3SHA1RSASHA1NSEC3SHA1	RSASHA256	RSASHA512ECDSAP256SHA256ECDSAP384SHA384ED25519ED448r(   r2   r   r+   r6   r   r   r   r   <module>   sj     











