o
    'h                     @   s   d dl Z 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dS )    N)default_backend)hashes)dsautils)CryptographyPrivateKeyCryptographyPublicKey)	Algorithm)DNSKEYc                   @   sf   e Zd ZU ejed< ejZejZ	e
 Z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 )	PublicDSAkey	signaturedatareturnNc                 C   sJ   |dd }|dd  }t t|dt|d}| j||| j d S )N      big)r   encode_dss_signatureint
from_bytesr   verifychosen_hash)selfr   r   sig_rsig_ssig r   N/var/www/html/olx_land/venv/lib/python3.10/site-packages/dns/dnssecalgs/dsa.pyr      s   zPublicDSA.verifyc                 C   s   | j  }| j jd d d }|dkrtdd|d  }td|}||jjdd7 }||jj	|d7 }||jj
|d7 }||j|d7 }|S )z,Encode a public key per RFC 2536, section 2.   @   zunsupported DSA key size!B   r   )r   public_numberskey_size
ValueErrorstructpackparameter_numbersqto_bytespgy)r   pndsa_toctetsresr   r   r   encode_key_bytes   s   
zPublicDSA.encode_key_bytesc           	      C   s   |  | |j}td|dd \}|dd  }d|d  }|dd }|dd  }|d| }||d  }|d| }||d  }|d| }| tt|dtt|dt|dt|d	t
 dS )	Nr   r   r   r   r   r    r   r   )!_ensure_algorithm_key_combinationr   r$   unpackr   DSAPublicNumbersr   r   DSAParameterNumbers
public_keyr   )	clsr   keyptrtr.   dsa_qdsa_pdsa_gdsa_yr   r   r   from_dnskey(   s.   




zPublicDSA.from_dnskey)__name__
__module____qualname__r   DSAPublicKey__annotations__key_clsr   DSA	algorithmr   SHA1r   bytesr   r0   classmethodr	   r>   r   r   r   r   r
      s   
 
r
   c                	   @   sX   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
edd fddZdS )
PrivateDSAr   FTr   r   deterministicr   c                 C   s   | j  }|jdkrtd| j || jj}t|\}}|jd d d }d}	t	
d|tj||	dd tj||	dd }
|rI|  |
| |
S )	z1Sign using a private key per RFC 2536, section 3.i   zDSA key size overflowr   r   r    r   r   )length	byteorder)r   r6   r"   r#   sign
public_clsr   r   decode_dss_signaturer$   r%   r   r(   r   )r   r   r   rK   public_dsa_keyder_signaturedsa_rdsa_sr-   r.   r   r   r   r   rN   G   s    


zPrivateDSA.signr"   c                 C   s   | t j|ddS )N)r"   r1   )r   generate_private_key)r7   r"   r   r   r   generate^   s   
zPrivateDSA.generateN)FT)r?   r@   rA   r   DSAPrivateKeyrC   rD   r
   rO   rH   boolrN   rI   r   rV   r   r   r   r   rJ   B   s"   
 

rJ   c                   @   s   e Zd ZejZdS )PublicDSANSEC3SHA1N)r?   r@   rA   r   DSANSEC3SHA1rF   r   r   r   r   rY   e   s    
rY   c                   @   s   e Zd ZeZdS )PrivateDSANSEC3SHA1N)r?   r@   rA   rY   rO   r   r   r   r   r[   i   s    r[   )r$   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   r   dns.dnssecalgs.cryptographyr   r   dns.dnssectypesr   dns.rdtypes.ANY.DNSKEYr	   r
   rJ   rY   r[   r   r   r   r   <module>   s    6#