U
    *}f                     @   s$  d dl mZmZmZ d dlZd dlZd dlm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dZd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)utils)_get_backendc                   @   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   Q/tmp/pip-unpacked-wheel-x36vw73o/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   signer5   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_numbersD   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_bytesJ   s    z,DSAPrivateKeyWithSerialization.private_bytesN)r   r   r   r   r   r    r$   r   r   r   r   r   B   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   S   s    zDSAPublicKey.key_sizec                 C   s   dS )zK
        The DSAParameters object associated with this public key.
        Nr   r	   r   r   r   r   Y   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_numberse   s    zDSAPublicKey.public_numbersc                 C   s   dS r!   r   )r
   r"   r#   r   r   r   public_bytesk   s    zDSAPublicKey.public_bytesc                 C   s   dS )z5
        Verifies the signature of the data.
        Nr   )r
   r&   r   r   r   r   r   verifyq   s    zDSAPublicKey.verifyN)r   r   r   r   r   r   r   r   r'   r(   r)   r*   r   r   r   r   r%   Q   s   




r%   c                 C   s   t |}|| S N)r   Zgenerate_dsa_parametersr   backendr   r   r   generate_parameters{   s    r.   c                 C   s   t |}|| S r+   )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   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.)p
bit_length
ValueErrorqg)r   r   r   r   _check_dsa_parameters   s    r8   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   r8   xr6   r5   ypowr7   r3   )Znumbersr   r   r   r   _check_dsa_private_numbers   s    r<   c                   @   sT   e Zd Zdd ZedZedZedZd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
   r3   r6   r7   r   r   r   __init__   s    


zDSAParameterNumbers.__init__rB   rC   rD   Nc                 C   s   t |}|| S r+   )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=   NotImplementedr3   r6   r7   r
   otherr   r   r   __eq__   s    
zDSAParameterNumbers.__eq__c                 C   s
   | |k S r+   r   rH   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   rE   r   read_only_propertyr3   r6   r7   r   rJ   rK   rM   r   r   r   r   r=      s   



r=   c                   @   sJ   e Zd Zdd ZedZedZd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@   rA   r=   _y_parameter_numbers)r
   r:   r   r   r   r   rE      s    
zDSAPublicNumbers.__init__rP   rQ   Nc                 C   s   t |}|| S r+   )r   Zload_dsa_public_numbersrF   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>   rO   rG   r:   r   rH   r   r   r   rJ      s
    

zDSAPublicNumbers.__eq__c                 C   s
   | |k S r+   r   rH   r   r   r   rK      s    zDSAPublicNumbers.__ne__c                 C   s   dj | dS )NzJ<DSAPublicNumbers(y={self.y}, parameter_numbers={self.parameter_numbers})>r	   rL   r	   r   r   r   rM      s    zDSAPublicNumbers.__repr__)N)r   r   r   rE   r   rN   r:   r   r   rJ   rK   rM   r   r   r   r   rO      s   


	rO   c                   @   sB   e Zd Zdd ZedZedZd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@   rA   rO   _public_numbers_x)r
   r9   r(   r   r   r   rE      s    
zDSAPrivateNumbers.__init__rT   rS   Nc                 C   s   t |}|| S r+   )r   Zload_dsa_private_numbersrF   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>   rR   rG   r9   r(   rH   r   r   r   rJ      s    
zDSAPrivateNumbers.__eq__c                 C   s
   | |k S r+   r   rH   r   r   r   rK     s    zDSAPrivateNumbers.__ne__)N)r   r   r   rE   r   rN   r9   r(   rU   rJ   rK   r   r   r   r   rR      s   


rR   )N)N)
__future__r   r   r   r   r?   Zcryptographyr   Zcryptography.hazmat.backendsr   add_metaclassABCMetaobjectr   r   r   r   r%   ZDSAPublicKeyWithSerializationr.   r   r8   r<   r=   rO   rR   r   r   r   r   <module>   s,   


 

&


''