
    df                     4   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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d d
lmZ d dlmZ d dlm Z  eee!ejD                  jF                  f      Z$i Z%eeee$f   ee	   f   e&d<   ere%jO                  ejP                  dfeejR                  dfeejT                  dfeejV                  dfeejX                  dfeejZ                  dfeej\                  dfeej^                  dfeej`                  dfeejb                  dfeejd                  dfei       	 ddee3e4f   de$dee	   fdZ5de dee	   fdZ6	 	 ddee3e4f   dee	   deeejD                  jF                  e4f      dee!   ddf
dZ7y# e$ r d	ZY Sw xY w)    )DictOptionalTupleTypeUnionN)GenericPrivateKey)
PrivateDSAPrivateDSANSEC3SHA1)PrivateECDSAP256SHA256PrivateECDSAP384SHA384)PrivateED448PrivateED25519)PrivateRSAMD5PrivateRSASHA1PrivateRSASHA1NSEC3SHA1PrivateRSASHA256PrivateRSASHA512TF)	Algorithm)UnsupportedAlgorithm)DNSKEY
algorithms	algorithmprefixreturnc                     t        j                  |       } t        j                  | |f      }|r|S t	        dt        j
                  |       z        )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 dnspython)r   maker   getr   to_text)r   r   clss      P/home/api-vastappli/venv/lib/python3.12/site-packages/dns/dnssecalgs/__init__.pyget_algorithm_clsr!   /   sM     y)I
..)V,
-C


3i6G6G	6RR     dnskeyc                 V   d}| j                   t        j                  k(  r.t        j                  j                  | j                  d      \  }}nG| j                   t        j                  k(  r*t        | j                  d         }| j                  d|dz    }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   _lengths       r    get_algorithm_cls_from_dnskeyr/   C   s     #F9///HH&&vzz15				Y11	1VZZ]#A
+V--v66r"   algorithm_clsr(   oidc                    t        |t              st        d      t        j                  |       } d}| t        j
                  k(  r?|t        d      t        |t              rt        j                  j                  |      }|}nS| t        j                  k(  r&|t        d      t        t        |      g      |z   }n|rt        d      |rt        d      |t        | |f<   y)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   r0   r(   r1   r   s        r    register_algorithm_clsr;   U   s    $ m%67122y)I"FI(((<FGGdC 88%%d+D	i**	*;EFFCz"S(	GHH	FGG&3J	6"#r"   )N)NN)8typingr   r   r   r   r   dns.namer'   dns.dnssecalgs.baser   dns.dnssecalgs.dsar	   r
   dns.dnssecalgs.ecdsar   r   dns.dnssecalgs.eddsar   r   dns.dnssecalgs.rsar   r   r   r   r   _have_cryptographyImportErrordns.dnssectypesr   dns.exceptionr   dns.rdtypes.ANY.DNSKEYr   r9   r(   NameAlgorithmPrefixr   __annotations__updateRSAMD5DSARSASHA1DSANSEC3SHA1RSASHA1NSEC3SHA1	RSASHA256	RSASHA512ECDSAP256SHA256ECDSAP384SHA384ED25519ED448r,   r7   r!   r/   r;    r"   r    <module>rX      s	   5 5 5BSA   & . )5!567OQ
Dy/12D9J4KKL Qt$m]]D!:%~##T*,?''.0G  $')9  $')9&&-/E&&-/E%~__d#\	
$ ;?S#X(7	
(7& 7T:K5L 7* 15	$4S#X$4)*$4 5+,
-$4 
%	$4
 
$4E  s   .F FF