U
    [e)                     @   s   d dl Z d dlmZ d dlmZ d dlmZmZmZ d dl	m
Z
mZ d dlmZmZmZmZ dd Zd	d
 ZG dd deZG dd de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)utils)InvalidSignature)_calculate_digest_and_algorithm_check_not_prehashed_warn_sign_verify_deprecated)hashesserialization)AsymmetricSignatureContextAsymmetricVerificationContextdsar   c                 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)backendprivate_keydataZsig_buf_lenZsig_bufbuflenres r   j/var/www/html/services/stratfitenv/lib/python3.8/site-packages/cryptography/hazmat/backends/openssl/dsa.py_dsa_sig_sign   s         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   
public_key	signaturer   r   r   r   r   _dsa_sig_verify(   s         r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_DSAVerificationContextc                 C   s.   || _ || _|| _|| _t| j| j | _d S N)_backend_public_key
_signature
_algorithmr   Hash	_hash_ctx)selfr   r   r   	algorithmr   r   r   __init__5   s
    z _DSAVerificationContext.__init__c                 C   s   | j | d S r    r&   updater'   r   r   r   r   r+   =   s    z_DSAVerificationContext.updatec                 C   s"   | j  }t| j| j| j| d S r    )r&   finalizer   r!   r"   r#   )r'   Zdata_to_verifyr   r   r   verify@   s    
   z_DSAVerificationContext.verifyN)__name__
__module____qualname__r)   r+   r.   r   r   r   r   r   4   s   r   c                   @   s>   e Zd ZejejdddZeddddZ	edd	d
Z
dS )_DSASignatureContext)r   r(   c                 C   s(   || _ || _|| _t| j| j | _d S r    )r!   _private_keyr$   r   r%   r&   )r'   r   r   r(   r   r   r   r)   I   s    z_DSASignatureContext.__init__N)r   returnc                 C   s   | j | d S r    r*   r,   r   r   r   r+   T   s    z_DSASignatureContext.updater4   c                 C   s   | j  }t| j| j|S r    )r&   r-   r   r!   r3   )r'   Zdata_to_signr   r   r   r-   W   s    
z_DSASignatureContext.finalize)r/   r0   r1   r   DSAPrivateKeyr   HashAlgorithmr)   bytesr+   r-   r   r   r   r   r2   H   s
   r2   c                   @   s4   e Zd Zdd ZejdddZejdddZdS )	_DSAParametersc                 C   s   || _ || _d S r    )r!   r   )r'   r   	dsa_cdatar   r   r   r)   ]   s    z_DSAParameters.__init__r5   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_numbersa   s    z _DSAParameters.parameter_numbersc                 C   s   | j | S r    )r!   Zgenerate_dsa_private_key)r'   r   r   r   generate_private_keyo   s    z#_DSAParameters.generate_private_keyN)	r/   r0   r1   r)   r   rB   rD   r6   rE   r   r   r   r   r9   \   s   r9   c                   @   s   e Zd Zdd ZedZej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 )_DSAPrivateKeyc                 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@   rA   r   ZBN_num_bits	_key_sizer'   r   r:   evp_pkeyr=   r   r   r   r)   t   s       z_DSAPrivateKey.__init__rJ   )signature_algorithmr4   c                 C   s   t   t| t| j| |S r    )r   r   r2   r!   )r'   rM   r   r   r   signer   s    z_DSAPrivateKey.signerr5   c              	   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<   rD   y)public_numbersx)r!   r   r   r   r@   r   r   rA   DSA_get0_keyr   DSAPrivateNumbersDSAPublicNumbersrB   rC   )r'   r=   r>   r?   pub_keyZpriv_keyr   r   r   private_numbers   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   rA   gcDSA_freer   rS   ZBN_dupZDSA_set0_keyZ_dsa_cdata_to_evp_pkey_DSAPublicKey)r'   r:   rV   Zpub_key_dupr   rL   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   rX   r   r   r   rA   rY   rZ   r9   r'   r:   r   r   r   
parameters   s     z_DSAPrivateKey.parameters)encodingformatencryption_algorithmr4   c                 C   s   | j |||| | j| jS r    )r!   Z_private_key_bytesrI   r   )r'   r^   r_   r`   r   r   r   private_bytes   s    z_DSAPrivateKey.private_bytes)r   r(   r4   c                 C   s    t | j||\}}t| j| |S r    )r   r!   r   )r'   r   r(   r   r   r   sign   s      z_DSAPrivateKey.signN)r/   r0   r1   r)   r   read_only_propertykey_sizer   r7   r	   rN   r   rT   rW   DSAPublicKeyr   DSAParametersr]   r   EncodingZPrivateFormatZKeySerializationEncryptionr8   ra   typingUnion
asym_utils	Prehashedrb   r   r   r   r   rF   s   s"   

rF   c                   @   s   e Zd Zdd ZedZeej	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ZdS )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 rG   rH   rK   r   r   r   r)      s       z_DSAPublicKey.__init__rJ   )r   rM   r4   c                 C   s*   t   td| t| t| j| ||S )Nr   )r   r   _check_bytesr   r   r!   )r'   r   rM   r   r   r   verifier   s       z_DSAPublicKey.verifierr5   c                 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<   rO   )r!   r   r   r   r@   r   r   rA   rS   r   rU   rB   rC   )r'   r=   r>   r?   rV   r   r   r   rQ      s,      z_DSAPublicKey.public_numbersc                 C   s2   | j j| j}| j j|| j jj}t| j |S r    )r!   r   rX   r   r   rY   rZ   r9   r\   r   r   r   r]     s     z_DSAPublicKey.parameters)r^   r_   r4   c                 C   s   | j ||| | jd S r    )r!   Z_public_key_bytesrI   )r'   r^   r_   r   r   r   public_bytes  s        z_DSAPublicKey.public_bytes)r   r   r(   c                 C   s"   t | j||\}}t| j| ||S r    )r   r!   r   )r'   r   r   r(   r   r   r   r.     s      z_DSAPublicKey.verifyN)r/   r0   r1   r)   r   rc   rd   r8   r   r7   r
   rm   r   rU   rQ   rf   r]   r   rg   ZPublicFormatrn   rh   ri   rj   rk   r.   r   r   r   r   r[      s    
	r[   )rh   Zcryptographyr   Zcryptography.exceptionsr   Z*cryptography.hazmat.backends.openssl.utilsr   r   r   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr	   r
   r   rj   r   r   r   r2   rf   r9   r6   rF   re   r[   r   r   r   r   <module>   s   d