o
    'hd                     @   s   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 de	ZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZdS )    )default_backend)hashes)ecutils)CryptographyPrivateKeyCryptographyPublicKey)	Algorithm)DNSKEYc                   @   s|   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
dZdefddZededd fddZd	S )PublicECDSAkey	algorithmchosen_hashcurveoctets	signaturedatareturnNc                 C   sT   |d| j  }|| j d  }tt|dt|d}| j||t| j	 d S )Nr   big)
r   r   encode_dss_signatureint
from_bytesr   verifyr   ECDSAr   )selfr   r   sig_rsig_ssig r   P/var/www/html/olx_land/venv/lib/python3.10/site-packages/dns/dnssecalgs/ecdsa.pyr      s   zPublicECDSA.verifyc                 C   s*   | j  }|j| jd|j| jd S )z,Encode a public key per RFC 6605, section 4.r   )r   public_numbersxto_bytesr   y)r   pnr   r   r   encode_key_bytes   s   
 zPublicECDSA.encode_key_bytesc                 C   s`   |  | |jd| j }|j| j| jd  }| tj| jt|dt|ddt	 dS )Nr      r   )r   r    r"   r   )
!_ensure_algorithm_key_combinationr   r   r   EllipticCurvePublicNumbersr   r   r   
public_keyr   )clsr   ecdsa_xecdsa_yr   r   r   from_dnskey   s   


zPublicECDSA.from_dnskey)__name__
__module____qualname__r   EllipticCurvePublicKey__annotations__key_clsr   r   HashAlgorithmEllipticCurver   bytesr   r$   classmethodr	   r-   r   r   r   r   r
   
   s   
 


r
   c                	   @   sP   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d	Zedd
dZdS )PrivateECDSAr   FTr   r   deterministicr   c           	      C   sn   t j| jj|d}| j||}t|\}}tj	|| jj
ddtj	|| jj
dd }|r5|  || |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   r9   r   der_signaturedsa_rdsa_sr   r   r   r   r>   2   s   
zPrivateECDSA.signc                 C   s   | t j| jjt ddS )N)r   backendr&   )r   generate_private_keyr=   r   r   )r*   r   r   r   generateE   s
   
zPrivateECDSA.generateN)FT)r   r8   )r.   r/   r0   r   EllipticCurvePrivateKeyr2   r3   r
   r=   r6   boolr>   r7   rE   r   r   r   r   r8   -   s"   
 

r8   c                   @   &   e Zd ZejZe Ze	
 ZdZdS )PublicECDSAP256SHA256    N)r.   r/   r0   r   ECDSAP256SHA256r   r   SHA256r   r   	SECP256R1r   r   r   r   r   r   rI   N   
    rI   c                   @      e Zd ZeZdS )PrivateECDSAP256SHA256N)r.   r/   r0   rI   r=   r   r   r   r   rP   U       rP   c                   @   rH   )PublicECDSAP384SHA3840   N)r.   r/   r0   r   ECDSAP384SHA384r   r   SHA384r   r   	SECP384R1r   r   r   r   r   r   rR   Y   rN   rR   c                   @   rO   )PrivateECDSAP384SHA384N)r.   r/   r0   rR   r=   r   r   r   r   rW   `   rQ   rW   N)cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   dns.dnssecalgs.cryptographyr   r   dns.dnssectypesr   dns.rdtypes.ANY.DNSKEYr	   r
   r8   rI   rP   rR   rW   r   r   r   r   <module>   s    #!