U
    EZh"                     @   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rZd dlmZ dd	eed
ddZddeedd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)Backendr   _DSAPrivateKey)backendprivate_key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   o/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/backends/openssl/dsa.py_dsa_sig_sign   s         r   _DSAPublicKey)r
   
public_key	signaturer   r   c                 C   s8   | j d|t||t||j}|dkr4|   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                   @   s:   e Zd ZddddZejdddZejd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"   Zgenerate_dsa_private_keyr#   r   r   r   generate_private_keyJ   s    z#_DSAParameters.generate_private_keyN)	__name__
__module____qualname__r%   r   r.   r0   DSAPrivateKeyr2   r   r   r   r   r   7   s   r   c                   @   s   e Zd ZU eed< ddddZeedddZej	dd	d
Z
ejdddZejdddZejejejedddZeejejejf edddZdS )r	   	_key_sizer   r    c                 C   sp   || _ || _|| _| 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_bitsr7   r#   r
   r$   evp_pkeyr)   r   r   r   r%   Q   s       z_DSAPrivateKey.__init__r&   c                 C   s   | j S r!   r7   r1   r   r   r   key_size]   s    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(   r0   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_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   r-   gcDSA_freer   rC   ZBN_dupZDSA_set0_keyZ_dsa_cdata_to_evp_pkeyr   )r#   r$   rF   Zpub_key_dupr   r<   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   rH   r   r   r   r-   rI   rJ   r   r#   r$   r   r   r   
parameters   s     z_DSAPrivateKey.parameters)encodingformatencryption_algorithmr   c                 C   s   | j |||| | j| jS r!   )r"   Z_private_key_bytesr:   r   )r#   rM   rN   rO   r   r   r   private_bytes   s    z_DSAPrivateKey.private_bytes)r   	algorithmr   c                 C   s   t ||\}}t| j| |S r!   )r   r   r"   )r#   r   rQ   _r   r   r   sign   s    z_DSAPrivateKey.signN)r3   r4   r5   int__annotations__r%   propertyr>   r   rD   rG   DSAPublicKeyr   DSAParametersrL   r   EncodingZPrivateFormatZKeySerializationEncryptionbytesrP   typingUnion
asym_utils	Prehashedr   HashAlgorithmrS   r   r   r   r   r	   N   s    

c                   @   s   e Zd ZU eed< ddddZeedddZej	dd	d
Z
ejdddZejejedddZeeejejejf ddddZdS )r   r7   r   r    c                 C   sp   || _ || _|| _| j jd}| j j||| j jj| j jj | j |d |jjk | j j	|d | _
d S r8   r9   r;   r   r   r   r%      s       z_DSAPublicKey.__init__r&   c                 C   s   | j S r!   r=   r1   r   r   r   r>      s    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(   r?   )r"   r   r   r   r,   r   r   r-   rC   r   rE   r.   r/   )r#   r)   r*   r+   rF   r   r   r   rA      s,      z_DSAPublicKey.public_numbersc                 C   s2   | j j| j}| j j|| j jj}t| j |S r!   )r"   r   rH   r   r   rI   rJ   r   rK   r   r   r   rL      s     z_DSAPublicKey.parameters)rM   rN   r   c                 C   s   | j ||| | jd S r!   )r"   Z_public_key_bytesr:   )r#   rM   rN   r   r   r   public_bytes   s        z_DSAPublicKey.public_bytesN)r   r   rQ   r   c                 C   s   t ||\}}t| j| ||S r!   )r   r   r"   )r#   r   r   rQ   rR   r   r   r   verify   s    z_DSAPublicKey.verify)r3   r4   r5   rT   rU   r%   rV   r>   r   rE   rA   rX   rL   r   rY   ZPublicFormatrZ   r`   r[   r\   r]   r^   r   r_   ra   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   rZ   r   r   rX   r   r6   r	   rW   r   r   r   r   r   <module>   s*     _