
    ,hd                         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y)    )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y	)PublicECDSAkey	algorithmchosen_hashcurveoctets	signaturedatareturnNc                 0   |d| j                    }|| j                   d  }t        j                  t        j	                  |d      t        j	                  |d            }| j
                  j                  ||t        j                  | j                               y )Nr   big)
r   r   encode_dss_signatureint
from_bytesr   verifyr   ECDSAr   )selfr   r   sig_rsig_ssigs         V/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/dns/dnssecalgs/ecdsa.pyr   zPublicECDSA.verify   sr    !dkk*$++-(((NN5%(#..*F
 	T288D,<,<#=>    c                     | j                   j                         }|j                  j                  | j                  d      |j
                  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   sE    XX$$&tt}}T[[%0244==e3TTTr!   c           
      r   | j                  |       |j                  d| j                   }|j                  | j                  | j                  dz   } | t        j                  | j
                  t        j                  |d      t        j                  |d            j                  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''!cjj)''#**szzA~6--ii..%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%%%K? ?U ?t ?U% U
 

f 

 

 

r!   r   c            	       x    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y)PrivateECDSAr   r   r   deterministicr   c                    t        j                  | j                  j                  |      }| j                  j                  ||      }t        j                  |      \  }}t        j                  || j                  j                  d      t        j                  || j                  j                  d      z   }|r | j                         j                  ||       |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     HHOO''}
	 dI611-@uLL$//00E ! 
LLt'='=LOP	 OO$$Y5r!   c                 v     | t        j                  | j                  j                  t	                           S )N)r   backendr+   )r   generate_private_keyrE   r   r   )r/   s    r    generatezPrivateECDSA.generateE   s/    ''nn**O4E
 	
r!   N)FT)r   r?   )r3   r4   r5   r   EllipticCurvePrivateKeyr7   r8   r   rE   r;   boolrF   r<   rN   r=   r!   r    r?   r?   -   se    		#	##((GJ
 "	  	
 
& 
 
r!   r?   c                   l    e Zd Zej                  Z ej                         Z e	j                         ZdZy)PublicECDSAP256SHA256    N)r3   r4   r5   r	   ECDSAP256SHA256r   r   SHA256r   r   	SECP256R1r   r   r=   r!   r    rR   rR   N   ,    ))I&--/KBLLNEFr!   rR   c                       e Zd ZeZy)PrivateECDSAP256SHA256N)r3   r4   r5   rR   rE   r=   r!   r    rY   rY   U       &Jr!   rY   c                   l    e Zd Zej                  Z ej                         Z e	j                         ZdZy)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y)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      sc    8 1 ? U % ) 
'  
F
) 
BK '\ 'K '\ 'r!   