U
    EZh                     @   s   d dl Z d dlZd dlmZmZ d dl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ZG dd dZG dd dZdeeje	dddZdeejedddZeddddZeddddZdS )    N)_serializationhashes)utilsc                   @   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	   t/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/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ejedddZejddddZ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   
parameters,   s    zDSAPrivateKey.parameters)data	algorithmr   c                 C   s   dS )z 
        Signs the data
        Nr	   )r   r   r   r	   r	   r   sign2   s    zDSAPrivateKey.signDSAPrivateNumbersc                 C   s   dS )z.
        Returns a DSAPrivateNumbers.
        Nr	   r
   r	   r	   r   private_numbers<   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_bytesB   s    zDSAPrivateKey.private_bytesN)r   r   r   propertyr   r   intr   r   r   r   bytestypingUnion
asym_utils	Prehashedr   HashAlgorithmr   r   r   EncodingZPrivateFormatZKeySerializationEncryptionr$   r	   r	   r	   r   r      s(   	r   c                   @   s   e Zd ZeejedddZ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dZdS )r   r   c                 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   Y   s    zDSAPublicKey.parametersDSAPublicNumbersc                 C   s   dS )z-
        Returns a DSAPublicNumbers.
        Nr	   r
   r	   r	   r   public_numbers_   s    zDSAPublicKey.public_numbers)r    r!   r   c                 C   s   dS r#   r	   )r   r    r!   r	   r	   r   public_bytese   s    zDSAPublicKey.public_bytesN)	signaturer   r   r   c                 C   s   dS )z5
        Verifies the signature of the data.
        Nr	   )r   r1   r   r   r	   r	   r   verifyo   s    zDSAPublicKey.verify)r   r   r   r%   r   r   r&   r   r   r   r/   r   r-   ZPublicFormatr'   r0   r(   r)   r*   r+   r   r,   r2   r	   r	   r	   r   r   Q   s$   	r   c                   @   s   e Zd ZeeedddZeedddZeedddZeedd	d
Zde	j
edddZeedddZed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   r3   r4   r5   r	   r	   r   __init__   s    zDSAParameterNumbers.__init__r   c                 C   s   | j S N)r8   r
   r	   r	   r   r3      s    zDSAParameterNumbers.pc                 C   s   | j S r<   )r9   r
   r	   r	   r   r4      s    zDSAParameterNumbers.qc                 C   s   | j S r<   )r:   r
   r	   r	   r   r5      s    zDSAParameterNumbers.gNbackendr   c                 C   s   ddl m} || S Nr   )r>   ),cryptography.hazmat.backends.openssl.backendr>   Zload_dsa_parameter_numbersr   r>   osslr	   r	   r   r      s    zDSAParameterNumbers.parametersotherr   c                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS r<   )r6   r   NotImplementedr3   r4   r5   r   rD   r	   r	   r   __eq__   s    
zDSAParameterNumbers.__eq__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%   r3   r4   r5   r(   Anyr   r   objectboolrG   strrI   r	   r	   r	   r   r   ~   s   r   c                   @   sr   e Zd ZeedddZeedddZeedddZde	j
ed
ddZeedddZedddZd	S )r.   )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.)r6   r&   r7   r   _y_parameter_numbers)r   rN   r   r	   r	   r   r;      s    

zDSAPublicNumbers.__init__r   c                 C   s   | j S r<   )rO   r
   r	   r	   r   rN      s    zDSAPublicNumbers.yc                 C   s   | j S r<   )rP   r
   r	   r	   r   r      s    z"DSAPublicNumbers.parameter_numbersNr=   c                 C   s   ddl m} || S r?   )r@   r>   Zload_dsa_public_numbersrA   r	   r	   r   r      s    zDSAPublicNumbers.public_keyrC   c                 C   s&   t |tstS | j|jko$| j|jkS r<   )r6   r.   rE   rN   r   rF   r	   r	   r   rG      s
    

zDSAPublicNumbers.__eq__c                 C   s   dj | dS )NzJ<DSAPublicNumbers(y={self.y}, parameter_numbers={self.parameter_numbers})>r
   rH   r
   r	   r	   r   rI      s    zDSAPublicNumbers.__repr__)N)r   r   r   r&   r   r;   r%   rN   r   r(   rJ   r   r   rK   rL   rG   rM   rI   r	   r	   r	   r   r.      s   	r.   c                   @   sd   e Zd ZeedddZeedddZeedddZde	j
ed
ddZeedddZd	S )r   )xr/   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.)r6   r&   r7   r.   _public_numbers_x)r   rQ   r/   r	   r	   r   r;      s    

zDSAPrivateNumbers.__init__r   c                 C   s   | j S r<   )rS   r
   r	   r	   r   rQ      s    zDSAPrivateNumbers.xc                 C   s   | j S r<   )rR   r
   r	   r	   r   r/      s    z DSAPrivateNumbers.public_numbersNr=   c                 C   s   ddl m} || S r?   )r@   r>   Zload_dsa_private_numbersrA   r	   r	   r   private_key   s    zDSAPrivateNumbers.private_keyrC   c                 C   s&   t |tstS | j|jko$| j|jkS r<   )r6   r   rE   rQ   r/   rF   r	   r	   r   rG      s    
zDSAPrivateNumbers.__eq__)N)r   r   r   r&   r.   r;   r%   rQ   r/   r(   rJ   r   rT   rK   rL   rG   r	   r	   r	   r   r      s   r   )r   r>   r   c                 C   s   ddl m} || S r?   )r@   r>   Zgenerate_dsa_parametersr   r>   rB   r	   r	   r   generate_parameters   s    rV   c                 C   s   ddl m} || S r?   )r@   r>   Z'generate_dsa_private_key_and_parametersrU   r	   r	   r   r     s    r   )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.)r3   
bit_length
ValueErrorr4   r5   )r   r	   r	   r   _check_dsa_parameters  s    r]   )numbersr   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   r]   rQ   r4   r\   rN   powr5   r3   )r^   r   r	   r	   r   _check_dsa_private_numbers  s    r`   )N)N)r   r(   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   r*   ABCMetar   ZDSAParametersWithNumbersr   ZDSAPrivateKeyWithSerializationr   ZDSAPublicKeyWithSerializationr   r.   r   r&   rJ   rV   r   r]   r`   r	   r	   r	   r   <module>   s4   0*/,%  	  