o
    Þý°jÓ  ã                   @   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   ú‡/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/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   ÚgenerateH   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   Q   ó
    rI   c                   @   ó   e Zd ZeZdS )ÚPrivateECDSAP256SHA256N)r.   r/   r0   rI   r=   r   r   r   r   rP   X   ó    rP   c                   @   rH   )ÚPublicECDSAP384SHA384é0   N)r.   r/   r0   r   ÚECDSAP384SHA384r   r   ÚSHA384r   r   Ú	SECP384R1r   r   r   r   r   r   rR   \   rN   rR   c                   @   rO   )ÚPrivateECDSAP384SHA384N)r.   r/   r0   rR   r=   r   r   r   r   rW   c   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    #$