o
    ™¨Êh&(  ã                   @   s   d dl mZmZm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 dd„ Zd	d
„ Ze e¡G dd„ deƒƒZe e¡G dd„ deƒƒZe ej¡G dd„ deƒƒZe ej¡G dd„ deƒƒZe ej¡G dd„ deƒƒZdS )é    )Úabsolute_importÚdivisionÚprint_function)Úutils)ÚInvalidSignature)Ú_calculate_digest_and_algorithmÚ_check_not_prehashedÚ_warn_sign_verify_deprecated)ÚhashesÚserialization)ÚAsymmetricSignatureContextÚAsymmetricVerificationContextÚdsac                 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)ÚbackendÚprivate_keyÚdataÚsig_buf_lenÚsig_bufÚbuflenÚres© r    úZ/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/dsa.pyÚ_dsa_sig_sign   s   ÿr"   c                 C   s8   | j  d|t|ƒ|t|ƒ|j¡}|dkr|  ¡  t‚d S )Nr   r   )r   Ú
DSA_verifyr   r   Ú_consume_errorsr   )r   Ú
public_keyÚ	signaturer   r   r    r    r!   Ú_dsa_sig_verify#   s   ÿþr'   c                   @   ó$   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__1   s
   z _DSAVerificationContext.__init__c                 C   ó   | j  |¡ d S r*   ©r0   Úupdate©r1   r   r    r    r!   r6   9   ó   z_DSAVerificationContext.updatec                 C   s"   | j  ¡ }t| j| j| j|ƒ d S r*   )r0   Úfinalizer'   r+   r,   r-   )r1   Údata_to_verifyr    r    r!   Úverify<   s   
ÿz_DSAVerificationContext.verifyN)Ú__name__Ú
__module__Ú__qualname__r3   r6   r;   r    r    r    r!   r)   /   s    r)   c                   @   r(   )Ú_DSASignatureContextc                 C   s(   || _ || _|| _t | j| j ¡| _d S r*   )r+   Ú_private_keyr.   r
   r/   r0   )r1   r   r   r2   r    r    r!   r3   F   s   z_DSASignatureContext.__init__c                 C   r4   r*   r5   r7   r    r    r!   r6   L   r8   z_DSASignatureContext.updatec                 C   s   | j  ¡ }t| j| j|ƒS r*   )r0   r9   r"   r+   r@   )r1   Údata_to_signr    r    r!   r9   O   s   
z_DSASignatureContext.finalizeN)r<   r=   r>   r3   r6   r9   r    r    r    r!   r?   D   s    r?   c                   @   r(   )Ú_DSAParametersc                 C   s   || _ || _d S r*   )r+   r   )r1   r   Ú	dsa_cdatar    r    r!   r3   V   s   
z_DSAParameters.__init__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)r1   rF   rG   rH   r    r    r!   Úparameter_numbersZ   s   ýz _DSAParameters.parameter_numbersc                 C   s   | j  | ¡S r*   )r+   Úgenerate_dsa_private_key)r1   r    r    r!   Úgenerate_private_keyh   s   z#_DSAParameters.generate_private_keyN)r<   r=   r>   r3   rM   rO   r    r    r    r!   rB   T   s    rB   c                   @   sN   e Zd Zdd„ Ze d¡Zdd„ Zdd„ Zdd	„ Z	d
d„ Z
dd„ Zdd„ ZdS )Ú_DSAPrivateKeyc                 C   óp   || _ || _|| _| j j d¡}| j j ||| j jj| j jj¡ | j  |d |jjk¡ | j j 	|d ¡| _
d S ©NrD   r   ©r+   r   Ú	_evp_pkeyr   r   r   rI   rJ   r   ÚBN_num_bitsÚ	_key_size©r1   r   rC   Úevp_pkeyrF   r    r    r!   r3   n   s   ÿz_DSAPrivateKey.__init__rV   c                 C   s   t ƒ  t|ƒ t| j| |ƒS r*   )r	   r   r?   r+   )r1   Úsignature_algorithmr    r    r!   Úsigner|   s   z_DSAPrivateKey.signerc              	   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 )NrD   r   rE   ©rM   Úy)Úpublic_numbersÚx)r+   r   r   r   rI   r   r   rJ   ÚDSA_get0_keyr   ÚDSAPrivateNumbersÚDSAPublicNumbersrK   rL   )r1   rF   rG   rH   Úpub_keyÚ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 )NrD   r   r   )r+   r   ÚDSAparams_dupr   r   r   rJ   ÚgcÚDSA_freer   r_   ÚBN_dupÚDSA_set0_keyÚ_dsa_cdata_to_evp_pkeyÚ_DSAPublicKey)r1   rC   rb   Úpub_key_dupr   rX   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   re   r   r   r   rJ   rf   rg   rB   ©r1   rC   r    r    r!   Ú
parameters­   s   
ÿz_DSAPrivateKey.parametersc                 C   s   | j  |||| j| j¡S r*   )r+   Ú_private_key_bytesrT   r   )r1   ÚencodingÚformatÚencryption_algorithmr    r    r!   Úprivate_bytesµ   s   ûz_DSAPrivateKey.private_bytesc                 C   s    t | j||ƒ\}}t| j| |ƒS r*   )r   r+   r"   )r1   r   r2   r    r    r!   Úsign¾   s   ÿz_DSAPrivateKey.signN)r<   r=   r>   r3   r   Úread_only_propertyÚkey_sizerZ   rd   r%   rn   rs   rt   r    r    r    r!   rP   l   s    
	rP   c                   @   sF   e Zd Zdd„ Ze d¡Zdd„ Zdd„ Zdd	„ Z	d
d„ Z
dd„ ZdS )rk   c                 C   rQ   rR   rS   rW   r    r    r!   r3   Ç   s   ÿz_DSAPublicKey.__init__rV   c                 C   s0   t ƒ  t|tƒstdƒ‚t|ƒ t| j| ||ƒS )Nzsignature must be bytes.)r	   Ú
isinstanceÚbytesÚ	TypeErrorr   r)   r+   )r1   r&   rY   r    r    r!   ÚverifierÔ   s   

ÿz_DSAPublicKey.verifierc                 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 )NrD   r   rE   r[   )r+   r   r   r   rI   r   r   rJ   r_   r   ra   rK   rL   )r1   rF   rG   rH   rb   r    r    r!   r]   Þ   s(   ÿýúz_DSAPublicKey.public_numbersc                 C   s2   | j j | j¡}| j j || j jj¡}t| j |ƒS r*   )r+   r   re   r   r   rf   rg   rB   rm   r    r    r!   rn   ô   s
   
ÿz_DSAPublicKey.parametersc                 C   s*   |t jju r
tdƒ‚| j ||| | jd ¡S )Nz2DSA public keys do not support PKCS1 serialization)r   ÚPublicFormatÚPKCS1Ú
ValueErrorr+   Ú_public_key_bytesrT   )r1   rp   rq   r    r    r!   Úpublic_bytesû   s   ÿûz_DSAPublicKey.public_bytesc                 C   s"   t | j||ƒ\}}t| j| ||ƒS r*   )r   r+   r'   )r1   r&   r   r2   r    r    r!   r;   	  s   ÿz_DSAPublicKey.verifyN)r<   r=   r>   r3   r   ru   rv   rz   r]   rn   r   r;   r    r    r    r!   rk   Å   s    

rk   N)Ú
__future__r   r   r   Úcryptographyr   Úcryptography.exceptionsr   Ú*cryptography.hazmat.backends.openssl.utilsr   r   r	   Úcryptography.hazmat.primitivesr
   r   Ú)cryptography.hazmat.primitives.asymmetricr   r   r   r"   r'   Úregister_interfaceÚobjectr)   r?   ÚDSAParametersWithNumbersrB   ÚDSAPrivateKeyWithSerializationrP   ÚDSAPublicKeyWithSerializationrk   r    r    r    r!   Ú<module>   s$   


X