o
    'h                     @   s  U d dl mZmZmZmZm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e"ej#j$f  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j0dfeej1dfeej2dfeej3dfei 	ddee4e5f de%dee	 fddZ6dedee	 fddZ7		ddee4e5f dee	 deeej#j$e5f  dee" ddf
ddZ8dS )    )DictOptionalTupleTypeUnionN)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   S/var/www/html/olx_land/venv/lib/python3.10/site-packages/dns/dnssecalgs/__init__.pyget_algorithm_cls/   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_dnskeyC   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_clsU   s&   




r8   )N)NN)9typingr   r   r   r   r   dns.namer%   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_cryptographyr6   r&   NameAlgorithmPrefixr   __annotations__updateRSAMD5DSARSASHA1DSANSEC3SHA1RSASHA1NSEC3SHA1	RSASHA256	RSASHA512ECDSAP256SHA256ECDSAP384SHA384ED25519ED448r*   r4   r!   r-   r8   r   r   r   r    <module>   sh     













