o
    
c"                  
   @   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	 d dlm
Z e jr-d dlmZ dd	d
ddedefddZdd	dddededdf
ddZG dd de	jZG dd de	jZG dd de	jZdS )    N)InvalidSignature)_calculate_digest_and_algorithm)hashesserialization)dsa)utils)Backendbackendr   private_key_DSAPrivateKeydatareturnc                 C   sx   | j |j}| jd|}| jd}| j d|t||||j}| |dk | |d  | j|d |d  S )Nzunsigned char[]zunsigned int *r      )	_libDSA_size
_dsa_cdata_ffinewDSA_signlenopenssl_assertbuffer)r	   r
   r   sig_buf_lensig_bufbuflenres r   U/opt/certbot/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/dsa.py_dsa_sig_sign   s   r   
public_key_DSAPublicKey	signaturec                 C   s8   | j d|t||t||j}|dkr|   td S )Nr   r   )r   
DSA_verifyr   r   _consume_errorsr   )r	   r   r!   r   r   r   r   r   _dsa_sig_verify&   s   r$   c                   @   s6   e Zd ZdddZdejfddZdejfdd	Zd
S )_DSAParametersr	   r   c                 C   s   || _ || _d S N)_backendr   )selfr	   	dsa_cdatar   r   r   __init__8   s   
z_DSAParameters.__init__r   c                 C   s   | j jd}| j jd}| j jd}| j j| j||| | j |d | j jjk | j |d | j jjk | j |d | j jjk tj	| j 
|d | j 
|d | j 
|d dS )N	BIGNUM **r   pqg)r'   r   r   r   DSA_get0_pqgr   r   NULLr   DSAParameterNumbers
_bn_to_int)r(   r-   r.   r/   r   r   r   parameter_numbers<   s   z _DSAParameters.parameter_numbersc                 C   s   | j | S r&   )r'   generate_dsa_private_keyr(   r   r   r   generate_private_keyJ   s   z#_DSAParameters.generate_private_keyNr	   r   )	__name__
__module____qualname__r*   r   r2   r4   DSAPrivateKeyr7   r   r   r   r   r%   7   s    
r%   c                   @   s   e Zd ZU eed< dddZedefddZdej	fd	d
Z
dejfddZdejfddZdejdejdejdefddZdedejejejf defddZdS )r   	_key_sizer	   r   c                 C   p   || _ || _|| _| j jd}| j j||| j jj| j jj | j |d |jjk | j j	|d | _
d S Nr+   r   r'   r   	_evp_pkeyr   r   r   r0   r1   r   BN_num_bitsr=   r(   r	   r)   evp_pkeyr-   r   r   r   r*   Q   s   z_DSAPrivateKey.__init__r   c                 C      | j S r&   r=   r6   r   r   r   key_size]      z_DSAPrivateKey.key_sizec              	   C   sR  | j jd}| j jd}| j jd}| j jd}| j jd}| j j| j||| | j |d | j jjk | j |d | j jjk | j |d | j jjk | j j| j|| | j |d | j jjk | j |d | j jjk t	j
t	jt	j| j |d | j |d | j |d d| j |d d| j |d dS )Nr+   r   r,   r4   y)public_numbersx)r'   r   r   r   r0   r   r   r1   DSA_get0_keyr   DSAPrivateNumbersDSAPublicNumbersr2   r3   )r(   r-   r.   r/   pub_keypriv_keyr   r   r   private_numbersa   s.   z_DSAPrivateKey.private_numbersc                 C   s   | j j| j}| j || j jjk | j j|| j jj}| j j	d}| j j
| j|| j jj | j |d | j jjk | j j|d }| j j||| j jj}| j |dk | j |}t| j ||S )Nr+   r   r   )r'   r   DSAparams_dupr   r   r   r1   gcDSA_freer   rM   BN_dupDSA_set0_key_dsa_cdata_to_evp_pkeyr    )r(   r)   rP   pub_key_dupr   rD   r   r   r   r   z   s"   
z_DSAPrivateKey.public_keyc                 C   sH   | j j| j}| j || j jjk | j j|| j jj}t	| j |S r&   )
r'   r   rS   r   r   r   r1   rT   rU   r%   r(   r)   r   r   r   
parameters   s   
z_DSAPrivateKey.parametersencodingformatencryption_algorithmc                 C   s   | j |||| | j| jS r&   )r'   _private_key_bytesrA   r   )r(   r\   r]   r^   r   r   r   private_bytes   s   z_DSAPrivateKey.private_bytesr   	algorithmc                 C   s   t ||\}}t| j| |S r&   )r   r   r'   )r(   r   ra   _r   r   r   sign   s   z_DSAPrivateKey.signNr8   )r9   r:   r;   int__annotations__r*   propertyrG   r   rN   rR   DSAPublicKeyr   DSAParametersr[   r   EncodingPrivateFormatKeySerializationEncryptionbytesr`   typingUnion
asym_utils	Prehashedr   HashAlgorithmrc   r   r   r   r   r   N   s0   
 

c                   @   s   e Zd ZU eed< dddZedefddZdej	fd	d
Z
dejfddZdejdejdefddZdededejejejf ddfddZdS )r    r=   r	   r   c                 C   r>   r?   r@   rC   r   r   r   r*      s   z_DSAPublicKey.__init__r   c                 C   rE   r&   rF   r6   r   r   r   rG      rH   z_DSAPublicKey.key_sizec                 C   s  | j jd}| j jd}| j jd}| j jd}| j j| j||| | j |d | j jjk | j |d | j jjk | j |d | j jjk | j j| j|| j jj | j |d | j jjk t	j
t	j| j |d | j |d | j |d d| j |d dS )Nr+   r   r,   rI   )r'   r   r   r   r0   r   r   r1   rM   r   rO   r2   r3   )r(   r-   r.   r/   rP   r   r   r   rK      s(   z_DSAPublicKey.public_numbersc                 C   s2   | j j| j}| j j|| j jj}t| j |S r&   )r'   r   rS   r   r   rT   rU   r%   rZ   r   r   r   r[      s
   
z_DSAPublicKey.parametersr\   r]   c                 C   s   | j ||| | jd S r&   )r'   _public_key_bytesrA   )r(   r\   r]   r   r   r   public_bytes   s   z_DSAPublicKey.public_bytesr!   r   ra   Nc                 C   s   t ||\}}t| j| ||S r&   )r   r$   r'   )r(   r!   r   ra   rb   r   r   r   verify   s   z_DSAPublicKey.verifyr8   )r9   r:   r;   rd   re   r*   rf   rG   r   rO   rK   rh   r[   r   ri   PublicFormatrl   rs   rm   rn   ro   rp   r   rq   rt   r   r   r   r   r       s.   
 

	)rm   cryptography.exceptionsr   *cryptography.hazmat.backends.openssl.utilsr   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetricr   r   ro   TYPE_CHECKING,cryptography.hazmat.backends.openssl.backendr   rl   r   r$   rh   r%   r<   r   rg   r    r   r   r   r   <module>   s>   

_