B
    `                 @   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eedddZdeedddZedddZedddZdS )     N)utils)_get_backend)_serializationhashes)AsymmetricSignatureContextAsymmetricVerificationContextr   c               @   s4   e Zd ZejddddZejddddZdS )	DSAParametersDSAPrivateKey)returnc             C   s   dS )z8
        Generates and returns a DSAPrivateKey.
        N )selfr   r   \/home/dcms/DCMS/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.pygenerate_private_key   s    z"DSAParameters.generate_private_keyDSAParameterNumbersc             C   s   dS )z0
        Returns a DSAParameterNumbers.
        Nr   )r   r   r   r   parameter_numbers   s    zDSAParameters.parameter_numbersN)__name__
__module____qualname__abcabstractmethodr   r   r   r   r   r   r      s   r   )	metaclassc               @   s   e Zd ZejedddZejddddZeje	dddZ
ejejed	d
dZejeejejejf edddZejddddZejejejejedddZdS )r	   )r
   c             C   s   dS )z6
        The bit length of the prime modulus.
        Nr   )r   r   r   r   key_size%   s    zDSAPrivateKey.key_sizeDSAPublicKeyc             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   
parameters1   s    zDSAPrivateKey.parameters)signature_algorithmr
   c             C   s   dS )zN
        Returns an AsymmetricSignatureContext used for signing data.
        Nr   )r   r   r   r   r   signer7   s    zDSAPrivateKey.signer)data	algorithmr
   c             C   s   dS )z 
        Signs the data
        Nr   )r   r   r   r   r   r   sign@   s    zDSAPrivateKey.signDSAPrivateNumbersc             C   s   dS )z.
        Returns a DSAPrivateNumbers.
        Nr   )r   r   r   r   private_numbersJ   s    zDSAPrivateKey.private_numbers)encodingformatencryption_algorithmr
   c             C   s   dS )z6
        Returns the key serialized as bytes.
        Nr   )r   r"   r#   r$   r   r   r   private_bytesP   s    	zDSAPrivateKey.private_bytesN)r   r   r   r   abstractpropertyintr   r   r   r   r   r   HashAlgorithmr   r   bytestypingUnion
asym_utils	Prehashedr   r!   r   EncodingZPrivateFormatZKeySerializationEncryptionr%   r   r   r   r   r	   $   s(   r	   c               @   s   e Zd ZejedddZejedddZ	eje
ejedddZejd	dd
dZejejeje
dddZeje
e
ejejejf dddZdS )r   )r
   c             C   s   dS )z6
        The bit length of the prime modulus.
        Nr   )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   f   s    zDSAPublicKey.parameters)	signaturer   r
   c             C   s   dS )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr   )r   r/   r   r   r   r   verifierl   s    zDSAPublicKey.verifierDSAPublicNumbersc             C   s   dS )z-
        Returns a DSAPublicNumbers.
        Nr   )r   r   r   r   public_numbersv   s    zDSAPublicKey.public_numbers)r"   r#   r
   c             C   s   dS )z6
        Returns the key serialized as bytes.
        Nr   )r   r"   r#   r   r   r   public_bytes|   s    zDSAPublicKey.public_bytes)r/   r   r   c             C   s   dS )z5
        Verifies the signature of the data.
        Nr   )r   r/   r   r   r   r   r   verify   s    	zDSAPublicKey.verifyN)r   r   r   r   r&   r'   r   r   r   r   r)   r   r(   r   r0   r2   r   r.   ZPublicFormatr3   r*   r+   r,   r-   r4   r   r   r   r   r   _   s$   r   c               @   sd   e Zd ZeeedddZedZedZedZ	de
d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   r5   r6   r7   r   r   r   __init__   s    


zDSAParameterNumbers.__init__r:   r;   r<   N)r
   c             C   s   t |}|| S )N)r   Zload_dsa_parameter_numbers)r   backendr   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 )N)r8   r   NotImplementedr5   r6   r7   )r   otherr   r   r   __eq__   s    
zDSAParameterNumbers.__eq__c             C   s
   | |k S )Nr   )r   r@   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   r'   r=   r   read_only_propertyr5   r6   r7   r   r   rA   rB   rC   r   r   r   r   r      s   


r   c               @   sX   e Zd ZeedddZedZedZ	de
ddd	Zd
d Zdd Zdd ZdS )r1   )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.)r8   r'   r9   r   _y_parameter_numbers)r   rE   r   r   r   r   r=      s    

zDSAPublicNumbers.__init__rF   rG   N)r
   c             C   s   t |}|| S )N)r   Zload_dsa_public_numbers)r   r>   r   r   r   r      s    zDSAPublicNumbers.public_keyc             C   s&   t |tstS | j|jko$| j|jkS )N)r8   r1   r?   rE   r   )r   r@   r   r   r   rA      s    
zDSAPublicNumbers.__eq__c             C   s
   | |k S )Nr   )r   r@   r   r   r   rB      s    zDSAPublicNumbers.__ne__c             C   s   dj | dS )NzJ<DSAPublicNumbers(y={self.y}, parameter_numbers={self.parameter_numbers})>)r   )r#   )r   r   r   r   rC      s    zDSAPublicNumbers.__repr__)N)r   r   r   r'   r   r=   r   rD   rE   r   r   r   rA   rB   rC   r   r   r   r   r1      s   

	r1   c               @   sP   e Zd ZeedddZedZedZ	de
ddd	Zd
d Zdd ZdS )r    )xr2   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.)r8   r'   r9   r1   _public_numbers_x)r   rH   r2   r   r   r   r=      s    

zDSAPrivateNumbers.__init__rJ   rI   N)r
   c             C   s   t |}|| S )N)r   Zload_dsa_private_numbers)r   r>   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 )N)r8   r    r?   rH   r2   )r   r@   r   r   r   rA      s    
zDSAPrivateNumbers.__eq__c             C   s
   | |k S )Nr   )r   r@   r   r   r   rB      s    zDSAPrivateNumbers.__ne__)N)r   r   r   r'   r1   r=   r   rD   rH   r2   r	   rK   rA   rB   r   r   r   r   r       s   

r    )r   r
   c             C   s   t |}|| S )N)r   Zgenerate_dsa_parameters)r   r>   r   r   r   generate_parameters  s    rL   c             C   s   t |}|| S )N)r   Z'generate_dsa_private_key_and_parameters)r   r>   r   r   r   r     s    r   )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.)r5   
bit_length
ValueErrorr6   r7   )r   r   r   r   _check_dsa_parameters  s    rS   )numbersc             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).)
r2   r   rS   rH   r6   rR   rE   powr7   r5   )rT   r   r   r   r   _check_dsa_private_numbers  s    rV   )N)N)r   r*   Zcryptographyr   Zcryptography.hazmat.backendsr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   r   r,   ABCMetar   ZDSAParametersWithNumbersr	   ZDSAPrivateKeyWithSerializationr   ZDSAPublicKeyWithSerializationobjectr   r1   r    r'   rL   r   rS   rV   r   r   r   r   <module>   s$   83''