o
    �)%a´  ã                   @   s  d dl Z 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mZ G dd„ de jd�ZeZG d	d
„ d
e jd�ZeZG dd„ de jd�ZeZG dd„ deƒZG dd„ deƒZG dd„ deƒZddedefdd„Zddedefdd„Zdefdd„Zdefdd„ZdS ) é    N)Úutils)Ú_get_backend)Ú_serializationÚhashes)ÚAsymmetricSignatureContextÚAsymmetricVerificationContextr   c                   @   s,   e Zd Zejd	dd„ƒZejd
dd„ƒZdS )ÚDSAParametersÚreturnÚDSAPrivateKeyc                 C   ó   dS )z8
        Generates and returns a DSAPrivateKey.
        N© ©Úselfr   r   úO/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/dsa.pyÚgenerate_private_key   ó    z"DSAParameters.generate_private_keyÚDSAParameterNumbersc                 C   r   )z0
        Returns a DSAParameterNumbers.
        Nr   r   r   r   r   Úparameter_numbers   r   zDSAParameters.parameter_numbersN)r	   r
   )r	   r   )Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodr   r   r   r   r   r   r      s
    r   )Ú	metaclassc                	   @   s¾   e Zd Zejdefdd„ƒZejddd„ƒZejde	fdd„ƒZ
ejd	ejdefd
d„ƒZejdedejejejf defdd„ƒZejddd„ƒZejdejdejdejdefdd„ƒZdS )r
   r	   c                 C   r   ©z6
        The bit length of the prime modulus.
        Nr   r   r   r   r   Úkey_size%   r   zDSAPrivateKey.key_sizeÚDSAPublicKeyc                 C   r   )zD
        The DSAPublicKey associated with this private key.
        Nr   r   r   r   r   Ú
public_key+   r   zDSAPrivateKey.public_keyc                 C   r   )zL
        The DSAParameters object associated with this private key.
        Nr   r   r   r   r   Ú
parameters1   r   zDSAPrivateKey.parametersÚsignature_algorithmc                 C   r   )zN
        Returns an AsymmetricSignatureContext used for signing data.
        Nr   )r   r   r   r   r   Úsigner7   r   zDSAPrivateKey.signerÚdataÚ	algorithmc                 C   r   )z 
        Signs the data
        Nr   )r   r!   r"   r   r   r   Úsign@   r   zDSAPrivateKey.signÚDSAPrivateNumbersc                 C   r   )z.
        Returns a DSAPrivateNumbers.
        Nr   r   r   r   r   Úprivate_numbersJ   r   zDSAPrivateKey.private_numbersÚencodingÚformatÚencryption_algorithmc                 C   r   ©z6
        Returns the key serialized as bytes.
        Nr   )r   r&   r'   r(   r   r   r   Úprivate_bytesP   r   zDSAPrivateKey.private_bytesN)r	   r   )r	   r$   )r   r   r   r   ÚabstractpropertyÚintr   r   r   r   r   r   ÚHashAlgorithmr   r    ÚbytesÚtypingÚUnionÚ
asym_utilsÚ	Prehashedr#   r%   r   ÚEncodingÚPrivateFormatÚKeySerializationEncryptionr*   r   r   r   r   r
   $   sB    þýþýü	þýüûr
   c                	   @   s¬   e Zd Zejdefdd„ƒZejdefdd„ƒZ	ejde
dejdefdd	„ƒZejddd„ƒZejdejdejde
fdd„ƒZejde
de
dejejejf fdd„ƒZdS )r   r	   c                 C   r   r   r   r   r   r   r   r   `   r   zDSAPublicKey.key_sizec                 C   r   )zK
        The DSAParameters object associated with this public key.
        Nr   r   r   r   r   r   f   r   zDSAPublicKey.parametersÚ	signaturer   c                 C   r   )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr   )r   r6   r   r   r   r   Úverifierl   r   zDSAPublicKey.verifierÚDSAPublicNumbersc                 C   r   )z-
        Returns a DSAPublicNumbers.
        Nr   r   r   r   r   Úpublic_numbersv   r   zDSAPublicKey.public_numbersr&   r'   c                 C   r   r)   r   )r   r&   r'   r   r   r   Úpublic_bytes|   r   zDSAPublicKey.public_bytesr!   r"   c                 C   r   )z5
        Verifies the signature of the data.
        Nr   )r   r6   r!   r"   r   r   r   Úverify†   r   zDSAPublicKey.verifyN)r	   r8   )r   r   r   r   r+   r,   r   r   r   r   r.   r   r-   r   r7   r9   r   r3   ÚPublicFormatr:   r/   r0   r1   r2   r;   r   r   r   r   r   _   s>    þýü	þýü	þýür   c                   @   sh   e Zd Zdededefdd„Ze d¡Ze d¡Ze d¡Z	dd
e
fdd„Zdd„ Zdd„ Zdd„ Zd	S )r   ÚpÚqÚgc                 C   s<   t |tƒrt |tƒrt |tƒstdƒ‚|| _|| _|| _d S )Nz;DSAParameterNumbers p, q, and g arguments must be integers.)Ú
isinstancer,   Ú	TypeErrorÚ_pÚ_qÚ_g)r   r=   r>   r?   r   r   r   Ú__init__–   s   ÿþýÿ
zDSAParameterNumbers.__init__rB   rC   rD   Nr	   c                 C   ó   t |ƒ}| | ¡S ©N)r   Úload_dsa_parameter_numbers©r   Úbackendr   r   r   r   ¨   ó   
zDSAParameterNumbers.parametersc                 C   s2   t |tƒstS | j|jko| j|jko| j|jkS rG   )r@   r   ÚNotImplementedr=   r>   r?   ©r   Úotherr   r   r   Ú__eq__¬   s   
$zDSAParameterNumbers.__eq__c                 C   ó
   | |k S rG   r   rM   r   r   r   Ú__ne__²   ó   
zDSAParameterNumbers.__ne__c                 C   ó   dj | d�S )Nz9<DSAParameterNumbers(p={self.p}, q={self.q}, g={self.g})>r   ©r'   r   r   r   r   Ú__repr__µ   ó   ÿÿzDSAParameterNumbers.__repr__rG   )r   r   r   r,   rE   r   Úread_only_propertyr=   r>   r?   r   r   rO   rQ   rU   r   r   r   r   r   •   s    


r   c                   @   sZ   e Zd Zdedefdd„Ze d¡Ze d¡Z	dde
fd	d
„Zdd„ Zdd„ Zdd„ ZdS )r8   Úyr   c                 C   s4   t |tƒs	tdƒ‚t |tƒstdƒ‚|| _|| _d S )Nz/DSAPublicNumbers y argument must be an integer.z9parameter_numbers must be a DSAParameterNumbers instance.)r@   r,   rA   r   Ú_yÚ_parameter_numbers)r   rX   r   r   r   r   rE   ½   s   

ÿ
zDSAPublicNumbers.__init__rY   rZ   Nr	   c                 C   rF   rG   )r   Úload_dsa_public_numbersrI   r   r   r   r   Ì   rK   zDSAPublicNumbers.public_keyc                 C   ó&   t |tƒstS | j|jko| j|jkS rG   )r@   r8   rL   rX   r   rM   r   r   r   rO   Ð   s
   

þzDSAPublicNumbers.__eq__c                 C   rP   rG   r   rM   r   r   r   rQ   Ù   rR   zDSAPublicNumbers.__ne__c                 C   rS   )NzJ<DSAPublicNumbers(y={self.y}, parameter_numbers={self.parameter_numbers})>r   rT   r   r   r   r   rU   Ü   rV   zDSAPublicNumbers.__repr__rG   )r   r   r   r,   r   rE   r   rW   rX   r   r   r   rO   rQ   rU   r   r   r   r   r8   ¼   s    

	r8   c                   @   sR   e Zd Zdedefdd„Ze d¡Ze d¡Z	dde
fd	d
„Zdd„ Zdd„ ZdS )r$   Úxr9   c                 C   s4   t |tƒs	tdƒ‚t |tƒstdƒ‚|| _|| _d S )Nz0DSAPrivateNumbers x argument must be an integer.z3public_numbers must be a DSAPublicNumbers instance.)r@   r,   rA   r8   Ú_public_numbersÚ_x)r   r]   r9   r   r   r   rE   ä   s   

ÿ
zDSAPrivateNumbers.__init__r_   r^   Nr	   c                 C   rF   rG   )r   Úload_dsa_private_numbersrI   r   r   r   Úprivate_keyò   rK   zDSAPrivateNumbers.private_keyc                 C   r\   rG   )r@   r$   rL   r]   r9   rM   r   r   r   rO   ö   s   
ÿzDSAPrivateNumbers.__eq__c                 C   rP   rG   r   rM   r   r   r   rQ   þ   rR   zDSAPrivateNumbers.__ne__rG   )r   r   r   r,   r8   rE   r   rW   r]   r9   r
   ra   rO   rQ   r   r   r   r   r$   ã   s    

r$   r   r	   c                 C   rF   rG   )r   Úgenerate_dsa_parameters©r   rJ   r   r   r   Úgenerate_parameters  rK   rd   c                 C   rF   rG   )r   Ú'generate_dsa_private_key_and_parametersrc   r   r   r   r     rK   r   r   c                 C   sX   | j  ¡ dvrtdƒ‚| j ¡ dvrtdƒ‚d| j  k r%| j k s*tdƒ‚ tdƒ‚d S )N)i   i   i   i   z5p must be exactly 1024, 2048, 3072, or 4096 bits long)é    éà   é   z,q must be exactly 160, 224, or 256 bits longé   zg, p don't satisfy 1 < g < p.)r=   Ú
bit_lengthÚ
ValueErrorr>   r?   )r   r   r   r   Ú_check_dsa_parameters  s   ÿÿÿrl   Únumbersc                 C   sT   | j j}t|ƒ | jdks| j|jkrtdƒ‚| j jt|j| j|j	ƒkr(tdƒ‚d S )Nr   zx must be > 0 and < q.z y must be equal to (g ** x % p).)
r9   r   rl   r]   r>   rk   rX   Úpowr?   r=   )rm   r   r   r   r   Ú_check_dsa_private_numbers  s   ÿro   rG   )r   r/   Úcryptographyr   Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr   r   Ú)cryptography.hazmat.primitives.asymmetricr   r   r1   ÚABCMetar   ÚDSAParametersWithNumbersr
   ÚDSAPrivateKeyWithSerializationr   ÚDSAPublicKeyWithSerializationÚobjectr   r8   r$   r,   rd   r   rl   ro   r   r   r   r   Ú<module>   s&   83''