
    Eqgd                         d dl m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 d dlmZ  G d de	          Z G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )    )default_backend)hashes)ecutils)CryptographyPrivateKeyCryptographyPublicKey)	Algorithm)DNSKEYc                       e Zd ZU ej        ed<   ej        Zeed<   ej	        ed<   ej
        ed<   eed<   dededd	fd
ZdefdZededd fd            Zd	S )PublicECDSAkey	algorithmchosen_hashcurveoctets	signaturedatareturnNc                 6   |d| j                  }|| j         d          }t          j        t                              |d          t                              |d                    }| j                            ||t          j        | j	                             d S )Nr   big)
r   r   encode_dss_signatureint
from_bytesr   verifyr   ECDSAr   )selfr   r   sig_rsig_ssigs         F/var/www/html/env/lib/python3.11/site-packages/dns/dnssecalgs/ecdsa.pyr   zPublicECDSA.verify   s    !dk/*$+--((NN5%((#..*F*F
 
 	T28D,<#=#=>>>>>    c                     | j                                         }|j                            | j        d          |j                            | j        d          z   S )z,Encode a public key per RFC 6605, section 4.r   )r   public_numbersxto_bytesr   y)r   pns     r    encode_key_byteszPublicECDSA.encode_key_bytes   sD    X$$&&t}}T[%0024==e3T3TTTr!   c           
      z   |                      |           |j        d| j                 }|j        | j        | j        dz           } | t          j        | j        t                              |d          t                              |d                                        t                                          S )Nr      r   )r   r$   r&   r   )
!_ensure_algorithm_key_combinationr   r   r   EllipticCurvePublicNumbersr   r   r   
public_keyr   )clsr   ecdsa_xecdsa_ys       r    from_dnskeyzPublicECDSA.from_dnskey   s    --c222'!cj.)'#*szA~56s-i..%00..%00   j**++
 
 
 	
r!   )__name__
__module____qualname__r   EllipticCurvePublicKey__annotations__key_clsr	   r   HashAlgorithmEllipticCurver   bytesr   r(   classmethodr
   r2    r!   r    r   r   
   s         		""""'G%%%%KKK? ?U ?t ? ? ? ?U% U U U U
 

f 

 

 

 

 [

 

 

r!   r   c            	       l    e Zd ZU ej        ed<   ej        ZeZ	 	 dde	de
de
de	fdZedd	            Zd
S )PrivateECDSAr   FTr   r   deterministicr   c                    t          j        | j        j        |          }| j                            ||          }t          j        |          \  }}t          	                    || j        j
        d          t          	                    || j        j
        d          z   }|r(|                                                     ||           |S )z1Sign using a private key per RFC 6605, section 4.)deterministic_signingr   )length	byteorder)r   r   
public_clsr   r   signr   decode_dss_signaturer   r%   r   r.   r   )	r   r   r   r@   r   der_signaturedsa_rdsa_sr   s	            r    rF   zPrivateECDSA.sign2   s     HO'}
 
 
	 dI661-@@uLL$/0E ! 
 
LLt'=LOOP	  	6OO$$Y555r!   c                 n     | t          j        | j        j        t	                                          S )N)r   backendr+   )r   generate_private_keyrE   r   r   )r/   s    r    generatezPrivateECDSA.generateE   s@    s'n*O4E4E  
 
 
 	
r!   N)FT)r   r?   )r3   r4   r5   r   EllipticCurvePrivateKeyr7   r8   r   rE   r;   boolrF   r<   rN   r=   r!   r    r?   r?   -   s         		####(GJ
 "	   	
 
   & 
 
 
 [
 
 
r!   r?   c                   \    e Zd Zej        Z ej                    Z e	j
                    ZdZdS )PublicECDSAP256SHA256    N)r3   r4   r5   r	   ECDSAP256SHA256r   r   SHA256r   r   	SECP256R1r   r   r=   r!   r    rR   rR   N   5        )I&-//KBLNNEFFFr!   rR   c                       e Zd ZeZdS )PrivateECDSAP256SHA256N)r3   r4   r5   rR   rE   r=   r!   r    rY   rY   U           &JJJr!   rY   c                   \    e Zd Zej        Z ej                    Z e	j
                    ZdZdS )PublicECDSAP384SHA3840   N)r3   r4   r5   r	   ECDSAP384SHA384r   r   SHA384r   r   	SECP384R1r   r   r=   r!   r    r\   r\   Y   rW   r!   r\   c                       e Zd ZeZdS )PrivateECDSAP384SHA384N)r3   r4   r5   r\   rE   r=   r!   r    rb   rb   `   rZ   r!   rb   N)cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   dns.dnssecalgs.cryptographyr   r   dns.dnssectypesr	   dns.rdtypes.ANY.DNSKEYr
   r   r?   rR   rY   r\   rb   r=   r!   r    <module>ri      s   8 8 8 8 8 8 1 1 1 1 1 1 ? ? ? ? ? ? ? ? U U U U U U U U % % % % % % ) ) ) ) ) ) 
  
  
  
  
'  
  
  
F
 
 
 
 
) 
 
 
B    K   ' ' ' ' '\ ' ' '    K   ' ' ' ' '\ ' ' ' ' 'r!   