
    *DCf                         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         T/var/www/highfloat_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                   p    e Zd ZU ej                  ed<   ej                  ZeZdde	de
de	fdZed	d       Zy)
PrivateECDSAr   r   r   r   c                    | j                   j                  |t        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.r   )length	byteorder)r   signr   r   
public_clsr   r   decode_dss_signaturer   r%   r   r.   r   )r   r   r   der_signaturedsa_rdsa_sr   s          r    rC   zPrivateECDSA.sign2   s    dBHHT__5P5P,QR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_keyrD   r   r   )r/   s    r    generatezPrivateECDSA.generate=   s/    ''nn**O4E
 	
r!   N)F)r   r?   )r3   r4   r5   r   EllipticCurvePrivateKeyr7   r8   r   rD   r;   boolrC   r<   rL   r=   r!   r    r?   r?   -   sL    		#	##((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    rP   rP   F   ,    ))I&--/KBLLNEFr!   rP   c                       e Zd ZeZy)PrivateECDSAP256SHA256N)r3   r4   r5   rP   rD   r=   r!   r    rW   rW   M       &Jr!   rW   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    rZ   rZ   Q   rU   r!   rZ   c                       e Zd ZeZy)PrivateECDSAP384SHA384N)r3   r4   r5   rZ   rD   r=   r!   r    r`   r`   X   rX   r!   r`   N)cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   dns.dnssecalgs.cryptographyr   r   dns.dnssectypesr	   dns.rdtypes.ANY.DNSKEYr
   r   r?   rP   rW   rZ   r`   r=   r!   r    <module>rg      sb    8 1 ? U % ) 
'  
F
) 
2K '\ 'K '\ 'r!   