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	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      )	_libZDSA_size
_dsa_cdata_ffinewZDSA_signlenopenssl_assertbuffer)r	   r
   r   Zsig_buf_lenZsig_bufbuflenres r   Lusr/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   Z
DSA_verifyr   r   Z_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__;   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!   Zgenerate_dsa_private_keyr"   r   r   r   generate_private_keyM   s   z#_DSAParameters.generate_private_keyNr	   r   )	__name__
__module____qualname__r$   r   r,   r.   DSAPrivateKeyr0   r   r   r   r   r   :   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   r*   r+   r   ZBN_num_bitsr6   r"   r	   r#   evp_pkeyr'   r   r   r   r$   T   s   z_DSAPrivateKey.__init__r   c                 C      | j S r    r6   r/   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&   r.   y)public_numbersx)r!   r   r   r   r*   r   r   r+   DSA_get0_keyr   DSAPrivateNumbersDSAPublicNumbersr,   r-   )r"   r'   r(   r)   pub_keyZpriv_keyr   r   r   private_numbersd   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   r+   gcDSA_freer   rE   ZBN_dupZDSA_set0_keyZ_dsa_cdata_to_evp_pkeyr   )r"   r#   rH   Zpub_key_dupr   r<   r   r   r   r   }   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   rJ   r   r   r   r+   rK   rL   r   r"   r#   r   r   r   
parameters   s   
z_DSAPrivateKey.parametersencodingformatencryption_algorithmc                 C   s   | j |||| | j| jS r    )r!   Z_private_key_bytesr:   r   )r"   rO   rP   rQ   r   r   r   private_bytes   s   z_DSAPrivateKey.private_bytesr   	algorithmc                 C   s   t ||\}}t| j| |S r    )r   r   r!   )r"   r   rS   _r   r   r   sign   s   z_DSAPrivateKey.signNr1   )r2   r3   r4   int__annotations__r$   propertyr?   r   rF   rI   DSAPublicKeyr   DSAParametersrN   r   EncodingZPrivateFormatZKeySerializationEncryptionbytesrR   typingUnion
asym_utils	Prehashedr   HashAlgorithmrU   r   r   r   r   r   Q   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   r6   r	   r   c                 C   r7   r8   r9   r;   r   r   r   r$      s   z_DSAPublicKey.__init__r   c                 C   r=   r    r>   r/   r   r   r   r?      r@   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&   rA   )r!   r   r   r   r*   r   r   r+   rE   r   rG   r,   r-   )r"   r'   r(   r)   rH   r   r   r   rC      s(   z_DSAPublicKey.public_numbersc                 C   s2   | j j| j}| j j|| j jj}t| j |S r    )r!   r   rJ   r   r   rK   rL   r   rM   r   r   r   rN      s
   
z_DSAPublicKey.parametersrO   rP   c                 C   s   | j ||| | jd S r    )r!   Z_public_key_bytesr:   )r"   rO   rP   r   r   r   public_bytes   s   z_DSAPublicKey.public_bytesr   r   rS   Nc                 C   s   t ||\}}t| j| ||S r    )r   r   r!   )r"   r   r   rS   rT   r   r   r   verify   s   z_DSAPublicKey.verifyr1   )r2   r3   r4   rV   rW   r$   rX   r?   r   rG   rC   rZ   rN   r   r[   ZPublicFormatr\   rb   r]   r^   r_   r`   r   ra   rc   r   r   r   r   r      s.   
 

	)r]   Zcryptography.exceptionsr   Z*cryptography.hazmat.backends.openssl.utilsr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   r   r_   TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r\   r   r   rZ   r   r5   r   rY   r   r   r   r   r   <module>   s<   

_