
    gd                         S SK Jr  S SKJr  S SKJrJr  S SKJrJ	r	  S SK
Jr  S SKJr   " S S\	5      r " S	 S
\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)    )default_backend)hashes)ecutils)CryptographyPrivateKeyCryptographyPublicKey)	Algorithm)DNSKEYc                       \ rS rSr% \R
                  \S'   \R
                  r\\S'   \	R                  \S'   \R                  \S'   \\S'   S\S\S	S
4S jrS	\4S jr\S\S	S 4S j5       rSrg
)PublicECDSA
   key	algorithmchosen_hashcurveoctets	signaturedatareturnNc                 0   USU R                    nXR                   S  n[        R                  " [        R	                  US5      [        R	                  US5      5      nU R
                  R                  XR[        R                  " U R                  5      5        g )Nr   big)
r   r   encode_dss_signatureint
from_bytesr   verifyr   ECDSAr   )selfr   r   sig_rsig_ssigs         M/home/matz/Project1/venv/lib/python3.13/site-packages/dns/dnssecalgs/ecdsa.pyr   PublicECDSA.verify   sn    !dkk*++-(((NN5%(#..*F
 	288D,<,<#=>    c                     U R                   R                  5       nUR                  R                  U R                  S5      UR
                  R                  U R                  S5      -   $ )z,Encode a public key per RFC 6605, section 4.r   )r   public_numbersxto_bytesr   y)r   pns     r!   encode_key_bytesPublicECDSA.encode_key_bytes   sE    XX$$&tt}}T[[%0244==e3TTTr#   c           
      h   U R                  U5        UR                  SU R                   nUR                  U R                  U R                  S-   nU " [        R                  " U R
                  [        R                  US5      [        R                  US5      S9R                  [        5       5      S9$ )Nr      r   )r   r&   r(   r   )
!_ensure_algorithm_key_combinationr   r   r   EllipticCurvePublicNumbersr   r   r   
public_keyr   )clsr   ecdsa_xecdsa_ys       r!   from_dnskeyPublicECDSA.from_dnskey   s    --c2''!cjj)''#**szzA~6--ii..%0..%0 j*+
 	
r#    )__name__
__module____qualname____firstlineno__r   EllipticCurvePublicKey__annotations__key_clsr	   r   HashAlgorithmEllipticCurver   bytesr   r*   classmethodr
   r5   __static_attributes__r7   r#   r!   r   r   
   s    		"	""''G%%%K? ?U ?t ?U% U
 

f 

 

 

r#   r   c            	           \ rS rSr% \R
                  \S'   \R
                  r\r	  SS\
S\S\S\
4S jjr\SS j5       rS	rg
)PrivateECDSA-   r   r   r   deterministicr   c                    [         R                  " U R                  R                  US9nU R                  R                  X5      n[        R                  " U5      u  pg[        R                  X`R                  R                  SS9[        R                  XpR                  R                  SS9-   nU(       a  U R                  5       R                  X5        U$ )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   r1   r   )	r   r   r   rG   r   der_signaturedsa_rdsa_sr   s	            r!   rM   PrivateECDSA.sign2   s     HHOO''}
	 d611-@LL//00E ! 
LL'='=LOP	 OO$$Y5r#   c                 l    U " [         R                  " U R                  R                  [	        5       S9S9$ )N)r   backendr.   )r   generate_private_keyrL   r   r   )r2   s    r!   generatePrivateECDSA.generateE   s/    ''nn**O4E
 	
r#   r7   N)FT)r   rE   )r8   r9   r:   r;   r   EllipticCurvePrivateKeyr=   r>   r   rL   rA   boolrM   rB   rV   rC   r7   r#   r!   rE   rE   -   se    		#	##((GJ
 "	  	
 
& 
 
r#   rE   c                   t    \ rS rSr\R
                  r\R                  " 5       r	\
R                  " 5       rSrSrg)PublicECDSAP256SHA256N       r7   N)r8   r9   r:   r;   r	   ECDSAP256SHA256r   r   SHA256r   r   	SECP256R1r   r   rC   r7   r#   r!   r[   r[   N   (    ))I--/KLLNEFr#   r[   c                       \ rS rSr\rSrg)PrivateECDSAP256SHA256U   r7   N)r8   r9   r:   r;   r[   rL   rC   r7   r#   r!   rc   rc   U       &Jr#   rc   c                   t    \ rS rSr\R
                  r\R                  " 5       r	\
R                  " 5       rSrSrg)PublicECDSAP384SHA384Y   0   r7   N)r8   r9   r:   r;   r	   ECDSAP384SHA384r   r   SHA384r   r   	SECP384R1r   r   rC   r7   r#   r!   rg   rg   Y   ra   r#   rg   c                       \ rS rSr\rSrg)PrivateECDSAP384SHA384`   r7   N)r8   r9   r:   r;   rg   rL   rC   r7   r#   r!   rn   rn   `   re   r#   rn   N)cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   dns.dnssecalgs.cryptographyr   r   dns.dnssectypesr	   dns.rdtypes.ANY.DNSKEYr
   r   rE   r[   rc   rg   rn   r7   r#   r!   <module>rv      sc    8 1 ? U % ) 
'  
F
) 
BK '\ 'K '\ 'r#   