U
    çe¨]ë  ã                   @   s  d dl mZmZmZ d dlZd dlZd dlm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e ej	¡G d
d„ deƒƒZe ej	¡G dd„ de
ƒƒZeZdd„ Zdd„ Zdd„ Zdd„ ZG dd„ de
ƒZG dd„ de
ƒZG dd„ de
ƒZdS )é    )Úabsolute_importÚdivisionÚprint_functionN)Úutilsc                   @   s   e Zd Zejdd„ ƒZdS )ÚDSAParametersc                 C   s   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   s    z"DSAParameters.generate_private_keyN)Ú__name__Ú
__module__Ú__qualname__ÚabcÚabstractmethodr   r   r   r   r
   r      s   r   c                   @   s   e Zd Zejdd„ ƒZdS )ÚDSAParametersWithNumbersc                 C   s   dS )z0
        Returns a DSAParameterNumbers.
        Nr   r   r   r   r
   Úparameter_numbers   s    z*DSAParametersWithNumbers.parameter_numbersN)r   r   r   r   r   r   r   r   r   r
   r      s   r   c                   @   sR   e Zd Zejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZ	ejd	d
„ ƒZ
dS )ÚDSAPrivateKeyc                 C   s   dS ©z6
        The bit length of the prime modulus.
        Nr   r   r   r   r
   Úkey_size"   s    zDSAPrivateKey.key_sizec                 C   s   dS )zD
        The DSAPublicKey associated with this private key.
        Nr   r   r   r   r
   Ú
public_key(   s    zDSAPrivateKey.public_keyc                 C   s   dS )zL
        The DSAParameters object associated with this private key.
        Nr   r   r   r   r
   Ú
parameters.   s    zDSAPrivateKey.parametersc                 C   s   dS )zN
        Returns an AsymmetricSignatureContext used for signing data.
        Nr   )r	   Úsignature_algorithmr   r   r
   Úsigner4   s    zDSAPrivateKey.signerc                 C   s   dS )z 
        Signs the data
        Nr   )r	   ÚdataÚ	algorithmr   r   r
   Úsign:   s    zDSAPrivateKey.signN)r   r   r   r   Úabstractpropertyr   r   r   r   r   r   r   r   r   r
   r       s   



r   c                   @   s(   e Zd Zejdd„ ƒZejdd„ ƒZdS )ÚDSAPrivateKeyWithSerializationc                 C   s   dS )z.
        Returns a DSAPrivateNumbers.
        Nr   r   r   r   r
   Úprivate_numbersC   s    z.DSAPrivateKeyWithSerialization.private_numbersc                 C   s   dS ©z6
        Returns the key serialized as bytes.
        Nr   )r	   ÚencodingÚformatZencryption_algorithmr   r   r
   Úprivate_bytesI   s    z,DSAPrivateKeyWithSerialization.private_bytesN)r   r   r   r   r   r   r#   r   r   r   r
   r   A   s   
r   c                   @   s`   e Zd Zejdd„ ƒZejdd„ ƒZejdd„ ƒZejdd„ ƒZ	ejd	d
„ ƒZ
ejdd„ ƒZdS )ÚDSAPublicKeyc                 C   s   dS r   r   r   r   r   r
   r   R   s    zDSAPublicKey.key_sizec                 C   s   dS )zK
        The DSAParameters object associated with this public key.
        Nr   r   r   r   r
   r   X   s    zDSAPublicKey.parametersc                 C   s   dS )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr   )r	   Ú	signaturer   r   r   r
   Úverifier^   s    zDSAPublicKey.verifierc                 C   s   dS )z-
        Returns a DSAPublicNumbers.
        Nr   r   r   r   r
   Úpublic_numbersd   s    zDSAPublicKey.public_numbersc                 C   s   dS r    r   )r	   r!   r"   r   r   r
   Úpublic_bytesj   s    zDSAPublicKey.public_bytesc                 C   s   dS )z5
        Verifies the signature of the data.
        Nr   )r	   r%   r   r   r   r   r
   Úverifyp   s    zDSAPublicKey.verifyN)r   r   r   r   r   r   r   r   r&   r'   r(   r)   r   r   r   r
   r$   P   s   




r$   c                 C   s
   |  | ¡S ©N)Zgenerate_dsa_parameters©r   Úbackendr   r   r
   Úgenerate_parametersz   s    r-   c                 C   s
   |  | ¡S r*   )Z'generate_dsa_private_key_and_parametersr+   r   r   r
   r   ~   s    r   c                 C   sR   | j  ¡ dkrtdƒ‚| j ¡ dkr,tdƒ‚d| j  k rD| j k sNn tdƒ‚d S )N)i   i   i   z/p must be exactly 1024, 2048, or 3072 bits long)é    éà   é   z,q must be exactly 160, 224, or 256 bits longé   zg, p don't satisfy 1 < g < p.)ÚpÚ
bit_lengthÚ
ValueErrorÚqÚg)r   r   r   r
   Ú_check_dsa_parameters‚   s    r7   c                 C   sT   | j j}t|ƒ | jdks&| j|jkr.tdƒ‚| j jt|j| j|j	ƒkrPtdƒ‚d S )Nr   zx must be > 0 and < q.z y must be equal to (g ** x % p).)
r'   r   r7   Úxr5   r4   ÚyÚpowr6   r2   )Znumbersr   r   r   r
   Ú_check_dsa_private_numbersŒ   s    r;   c                   @   sR   e Zd Zdd„ Ze d¡Ze d¡Ze d¡Zdd„ Z	dd	„ Z
d
d„ Zdd„ ZdS )ÚDSAParameterNumbersc                 C   sB   t |tjƒr$t |tjƒr$t |tjƒs,tdƒ‚|| _|| _|| _d S )Nz;DSAParameterNumbers p, q, and g arguments must be integers.)Ú
isinstanceÚsixÚinteger_typesÚ	TypeErrorÚ_pÚ_qÚ_g)r	   r2   r5   r6   r   r   r
   Ú__init__—   s    
ÿ
þ
ýÿzDSAParameterNumbers.__init__rA   rB   rC   c                 C   s
   |  | ¡S r*   )Zload_dsa_parameter_numbers©r	   r,   r   r   r
   r   ©   s    zDSAParameterNumbers.parametersc                 C   s2   t |tƒstS | j|jko0| j|jko0| j|jkS r*   )r=   r<   ÚNotImplementedr2   r5   r6   ©r	   Úotherr   r   r
   Ú__eq__¬   s    
zDSAParameterNumbers.__eq__c                 C   s
   | |k S r*   r   rG   r   r   r
   Ú__ne__²   s    zDSAParameterNumbers.__ne__c                 C   s   dj | dS )Nz9<DSAParameterNumbers(p={self.p}, q={self.q}, g={self.g})>r   ©r"   r   r   r   r
   Ú__repr__µ   s    ÿÿzDSAParameterNumbers.__repr__N)r   r   r   rD   r   Úread_only_propertyr2   r5   r6   r   rI   rJ   rL   r   r   r   r
   r<   –   s   


r<   c                   @   sH   e Zd Zdd„ Ze d¡Ze d¡Zdd„ Zdd„ Z	d	d
„ Z
dd„ ZdS )ÚDSAPublicNumbersc                 C   s6   t |tjƒ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>   r?   r@   r<   Ú_yÚ_parameter_numbers)r	   r9   r   r   r   r
   rD   ¾   s    
ÿzDSAPublicNumbers.__init__rO   rP   c                 C   s
   |  | ¡S r*   )Zload_dsa_public_numbersrE   r   r   r
   r   Í   s    zDSAPublicNumbers.public_keyc                 C   s&   t |tƒstS | j|jko$| j|jkS r*   )r=   rN   rF   r9   r   rG   r   r   r
   rI   Ð   s
    

þzDSAPublicNumbers.__eq__c                 C   s
   | |k S r*   r   rG   r   r   r
   rJ   Ù   s    zDSAPublicNumbers.__ne__c                 C   s   dj | dS )NzJ<DSAPublicNumbers(y={self.y}, parameter_numbers={self.parameter_numbers})>r   rK   r   r   r   r
   rL   Ü   s    ÿÿzDSAPublicNumbers.__repr__N)r   r   r   rD   r   rM   r9   r   r   rI   rJ   rL   r   r   r   r
   rN   ½   s   

	rN   c                   @   s@   e Zd Zdd„ Ze d¡Ze d¡Zdd„ Zdd„ Z	d	d
„ Z
dS )ÚDSAPrivateNumbersc                 C   s6   t |tjƒ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>   r?   r@   rN   Ú_public_numbersÚ_x)r	   r8   r'   r   r   r
   rD   ä   s    
ÿzDSAPrivateNumbers.__init__rS   rR   c                 C   s
   |  | ¡S r*   )Zload_dsa_private_numbersrE   r   r   r
   Úprivate_keyò   s    zDSAPrivateNumbers.private_keyc                 C   s&   t |tƒstS | j|jko$| j|jkS r*   )r=   rQ   rF   r8   r'   rG   r   r   r
   rI   õ   s    
ÿzDSAPrivateNumbers.__eq__c                 C   s
   | |k S r*   r   rG   r   r   r
   rJ   ý   s    zDSAPrivateNumbers.__ne__N)r   r   r   rD   r   rM   r8   r'   rT   rI   rJ   r   r   r   r
   rQ   ã   s   

rQ   )Z
__future__r   r   r   r   r>   Zcryptographyr   Zadd_metaclassÚABCMetaÚobjectr   r   r   r   r$   ZDSAPublicKeyWithSerializationr-   r   r7   r;   r<   rN   rQ   r   r   r   r
   Ú<module>   s*   


 

&

'&