U
    <æ{fÈ  ã                   @   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   úS/var/www/html/Darija-Ai-API/env/lib/python3.8/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                   @   sH   e Zd ZU ejed< ejZeZd
e	e
e	dœdd„Zed dœdd„ƒZd	S )ÚPrivateECDSAr   F)r   r   r   c                 C   sf   | j  |t | jj¡¡}t |¡\}}tj	|| jj
ddtj	|| jj
dd }|rb|  ¡  ||¡ |S )z1Sign using a private key per RFC 6605, section 4.r   )ÚlengthÚ	byteorder)r   Úsignr   r   Ú
public_clsr   r   Zdecode_dss_signaturer   r   r   r#   r   )r   r   r   Zder_signatureZdsa_rZdsa_sr   r   r   r   r0   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   Úgenerate=   s     ÿÿzPrivateECDSA.generateN)F)r&   r'   r(   r   ZEllipticCurvePrivateKeyr)   r*   r
   r1   r+   Úboolr0   r,   r3   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   r5   F   s   r5   c                   @   s   e Zd ZeZdS )ÚPrivateECDSAP256SHA256N)r&   r'   r(   r5   r1   r   r   r   r   r8   M   s   r8   c                   @   s&   e Zd ZejZe ¡ Ze	 
¡ ZdZdS )ÚPublicECDSAP384SHA384é0   N)r&   r'   r(   r   ZECDSAP384SHA384r   r   ÚSHA384r   r   Z	SECP384R1r   r   r   r   r   r   r9   Q   s   r9   c                   @   s   e Zd ZeZdS )ÚPrivateECDSAP384SHA384N)r&   r'   r(   r9   r1   r   r   r   r   r<   X   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-   r5   r8   r9   r<   r   r   r   r   Ú<module>   s   #