a
    9gd                     @   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                   @   sv   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< eedddd	Zed
ddZeed dddZdS )PublicECDSAkey	algorithmchosen_hashcurveoctetsN)	signaturedatareturnc                 C   sT   |d| j  }|| j d  }tt|dt|d}| j||t| j	 d S )Nr   big)
r   r   Zencode_dss_signatureint
from_bytesr   verifyr   ECDSAr   )selfr   r   Zsig_rZsig_ssig r   q/var/www/vosh/data/www/fastworkle.ru/webshop-tgbot-v.1.0/venv/lib/python3.9/site-packages/dns/dnssecalgs/ecdsa.pyr      s    zPublicECDSA.verifyr   c                 C   s*   | j  }|j| jd|j| jd S )z,Encode a public key per RFC 6605, section 4.r   )r   Zpublic_numbersxto_bytesr   y)r   Zpnr   r   r   encode_key_bytes   s    
zPublicECDSA.encode_key_bytes)r   r   c                 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   )
Z!_ensure_algorithm_key_combinationr   r   r   ZEllipticCurvePublicNumbersr   r   r   
public_keyr   )clsr   Zecdsa_xZecdsa_yr   r   r   from_dnskey   s    


zPublicECDSA.from_dnskey)__name__
__module____qualname__r   ZEllipticCurvePublicKey__annotations__key_clsr   r   ZHashAlgorithmZEllipticCurver   bytesr   r    classmethodr	   r%   r   r   r   r   r
   
   s   



r
   c                   @   sJ   e Zd ZU ejed< ejZeZde	e
e
e	dddZed ddd	Zd
S )PrivateECDSAr   FT)r   r   deterministicr   c           	      C   sn   t j| jj|d}| j||}t|\}}tj	|| jj
ddtj	|| jj
dd }|rj|  || |S )z1Sign using a private key per RFC 6605, section 4.)Zdeterministic_signingr   )length	byteorder)r   r   
public_clsr   r   signr   Zdecode_dss_signaturer   r   r   r#   r   )	r   r   r   r.   r   Zder_signatureZdsa_rZdsa_sr   r   r   r   r2   2   s    
zPrivateECDSA.signr   c                 C   s   | t j| jjt ddS )N)r   backendr"   )r   Zgenerate_private_keyr1   r   r   )r$   r   r   r   generateE   s
    
zPrivateECDSA.generateN)FT)r&   r'   r(   r   ZEllipticCurvePrivateKeyr)   r*   r
   r1   r+   boolr2   r,   r4   r   r   r   r   r-   -   s   

  r-   c                   @   s&   e Zd ZejZe Ze	
 ZdZdS )PublicECDSAP256SHA256    N)r&   r'   r(   r   ZECDSAP256SHA256r   r   SHA256r   r   Z	SECP256R1r   r   r   r   r   r   r6   N   s   r6   c                   @   s   e Zd ZeZdS )PrivateECDSAP256SHA256N)r&   r'   r(   r6   r1   r   r   r   r   r9   U   s   r9   c                   @   s&   e Zd ZejZe Ze	
 ZdZdS )PublicECDSAP384SHA3840   N)r&   r'   r(   r   ZECDSAP384SHA384r   r   SHA384r   r   Z	SECP384R1r   r   r   r   r   r   r:   Y   s   r:   c                   @   s   e Zd ZeZdS )PrivateECDSAP384SHA384N)r&   r'   r(   r:   r1   r   r   r   r   r=   `   s   r=   N)Zcryptography.hazmat.backendsr   Zcryptography.hazmat.primitivesr   Z)cryptography.hazmat.primitives.asymmetricr   r   Zdns.dnssecalgs.cryptographyr   r   Zdns.dnssectypesr   Zdns.rdtypes.ANY.DNSKEYr	   r
   r-   r6   r9   r:   r=   r   r   r   r   <module>   s   #!