o
    Þý°jþ  ã                   @   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 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
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�ƒ‚)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 "z" not supported by dnspython)r   Úmaker   Úgetr   Úto_text)r   r   Úcls© r   úŠ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/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 )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_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     










õÿÿÿÿ
þüÿþýüû