U
    <{f                     @   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rd 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!rje&(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ee4e5f e%ee	 dddZ6eee	 dddZ7dee4e5f ee	 eeej#j$e5f  ee" ddddZ8dS )    )DictOptionalTupleTypeUnionN)GenericPrivateKey)	Algorithm)UnsupportedAlgorithm)DNSKEYZ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S )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 "%s" not supported by dnspythonN)r   maker   getr	   Zto_text)r   r   cls r   V/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/dns/dnssecalgs/__init__.pyget_algorithm_cls.   s    
r   )dnskeyr   c                 C   s^   d}| j tjkr&tj| jd\}}n,| j tjkrRt| 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nameZ	from_wirekey
PRIVATEOIDintr   )r    r   _lengthr   r   r   get_algorithm_cls_from_dnskeyB   s    	r*   )r   algorithm_clsr$   oidr   c                 C   s   t |tstdt| } d}| tjkrV|dkr:tdt|trPt	j
|}|}nH| tjkr|dkrptdtt|g| }n|rtdn|rt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$   Z	from_textr&   byteslenr   )r   r+   r$   r,   r   r   r   r   register_algorithm_clsT   s&    





r4   )N)NN)9typingr   r   r   r   r   Zdns.namer#   Zdns.dnssecalgs.baser   Zdns.dnssectypesr   Zdns.exceptionr	   Zdns.rdtypes.ANY.DNSKEYr
   Z	_featuresZhaveZdns.dnssecalgs.dsar   r   Zdns.dnssecalgs.ecdsar   r   Zdns.dnssecalgs.eddsar   r   Zdns.dnssecalgs.rsar   r   r   r   r   Z_have_cryptographyr2   r$   NameZAlgorithmPrefixr   __annotations__updateZRSAMD5ZDSAZRSASHA1ZDSANSEC3SHA1ZRSASHA1NSEC3SHA1Z	RSASHA256Z	RSASHA512ZECDSAP256SHA256ZECDSAP384SHA384ZED25519ZED448r'   r1   r   r*   r4   r   r   r   r   <module>   sr                 
   
