U
    ÒZj¸"  ã                   @   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rRd 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   úk/var/www/html/TRUCKING_PROJECT/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__;   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)	Ú__name__Ú
__module__Ú__qualname__r%   r   r.   r0   ÚDSAPrivateKeyr2   r   r   r   r   r   :   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%   T   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_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   rC   ZBN_dupZDSA_set0_keyZ_dsa_cdata_to_evp_pkeyr   )r#   r$   rF   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   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	   Q   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(     þû_