o
    ŽR®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¡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!r´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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   s2   t  | ¡} t | |f¡}|r|S tdt  | ¡ ƒ‚)zèGet 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 dnspython)r   Úmaker   Úgetr	   Úto_text)r   r   Úcls© r   úP/home/ubuntu/webapp/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 )zÕGet 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_dnskeyB   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_clsT   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     










õÿÿ
ÿÿ
þü
ÿþýüû