U
    ςdG                      @  s,  d dl mZ d dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ G dd dejdZeZeejj G d	d
 d
ejdZeZeejj G dd dejdZeZeejj G dd dZG dd dZG dd dZd!ddddddZd"ddd
dddZdddddZddddd ZdS )#    )annotationsN)openssl)_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   j/var/www/html/myproject/myenv/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ddddZejddddZejddd	d
ZejddddddZ	ejddddZ
ejdddddddZdS )r   intr	   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_keyr   c                 C  s   dS )zL
        The DSAParameters object associated with this private key.
        Nr   r   r   r   r   
parameters/   s    zDSAPrivateKey.parametersbytes8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm])data	algorithmr
   c                 C  s   dS )z 
        Signs the data
        Nr   )r   r    r!   r   r   r   sign5   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_serialization.Encodingz_serialization.PrivateFormatz)_serialization.KeySerializationEncryption)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_bytesE   s    zDSAPrivateKey.private_bytesN)r   r   r   propertyr   r   r   r   r   r"   r$   r*   r   r   r   r   r   !   s   	r   c                   @  s   e Zd ZeejddddZejddddZejddd	d
ZejddddddZ	ejdddddddZ
ejdddddZdS )r   r   r	   c                 C  s   dS r   r   r   r   r   r   r   V   s    zDSAPublicKey.key_sizer   c                 C  s   dS )zK
        The DSAParameters object associated with this public key.
        Nr   r   r   r   r   r   ]   s    zDSAPublicKey.parametersDSAPublicNumbersc                 C  s   dS )z-
        Returns a DSAPublicNumbers.
        Nr   r   r   r   r   public_numbersc   s    zDSAPublicKey.public_numbersr%   z_serialization.PublicFormatr   )r&   r'   r
   c                 C  s   dS r)   r   )r   r&   r'   r   r   r   public_bytesi   s    zDSAPublicKey.public_bytesr   None)	signaturer    r!   r
   c                 C  s   dS )z5
        Verifies the signature of the data.
        Nr   )r   r0   r    r!   r   r   r   verifys   s    zDSAPublicKey.verifyobjectboolotherr
   c                 C  s   dS )z"
        Checks equality.
        Nr   r   r5   r   r   r   __eq__~   s    zDSAPublicKey.__eq__N)r   r   r   r+   r   r   r   r   r-   r.   r1   r7   r   r   r   r   r   U   s   	
r   c                   @  s   e Zd ZddddddZeddddZedddd	Zeddd
dZddddddZdddddZ	ddddZ
dS )r   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   r8   r9   r:   r   r   r   __init__   s    zDSAParameterNumbers.__init__r	   c                 C  s   | j S N)r=   r   r   r   r   r8      s    zDSAParameterNumbers.pc                 C  s   | j S rA   )r>   r   r   r   r   r9      s    zDSAParameterNumbers.qc                 C  s   | j S rA   )r?   r   r   r   r   r:      s    zDSAParameterNumbers.gN
typing.Anyr   backendr
   c                 C  s   ddl m} || S Nr   )rD   ),cryptography.hazmat.backends.openssl.backendrD   Zload_dsa_parameter_numbersr   rD   osslr   r   r   r      s    zDSAParameterNumbers.parametersr2   r3   r4   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS rA   )r;   r   NotImplementedr8   r9   r:   r6   r   r   r   r7      s    
zDSAParameterNumbers.__eq__strc                 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+   r8   r9   r:   r   r7   rL   r   r   r   r   r      s   r   c                   @  sp   e Zd ZdddddZeddddZeddd	d
ZddddddZdddddZddddZ	dS )r,   r   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.)r;   r   r<   r   _y_parameter_numbers)r   rM   r   r   r   r   r@      s    

zDSAPublicNumbers.__init__r	   c                 C  s   | j S rA   )rN   r   r   r   r   rM      s    zDSAPublicNumbers.yc                 C  s   | j S rA   )rO   r   r   r   r   r      s    z"DSAPublicNumbers.parameter_numbersNrB   r   rC   c                 C  s   ddl m} || S rE   )rF   rD   Zload_dsa_public_numbersrG   r   r   r   r      s    zDSAPublicNumbers.public_keyr2   r3   r4   c                 C  s&   t |tstS | j|jko$| j|jkS rA   )r;   r,   rI   rM   r   r6   r   r   r   r7      s
    

zDSAPublicNumbers.__eq__rJ   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   r@   r+   rM   r   r   r7   rL   r   r   r   r   r,      s   	r,   c                   @  sb   e Zd ZdddddZeddddZeddd	d
ZddddddZdddddZdS )r#   r   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.)r;   r   r<   r,   _public_numbers_x)r   rP   r-   r   r   r   r@      s    

zDSAPrivateNumbers.__init__r	   c                 C  s   | j S rA   )rR   r   r   r   r   rP      s    zDSAPrivateNumbers.xc                 C  s   | j S rA   )rQ   r   r   r   r   r-      s    z DSAPrivateNumbers.public_numbersNrB   r   rC   c                 C  s   ddl m} || S rE   )rF   rD   Zload_dsa_private_numbersrG   r   r   r   private_key   s    zDSAPrivateNumbers.private_keyr2   r3   r4   c                 C  s&   t |tstS | j|jko$| j|jkS rA   )r;   r#   rI   rP   r-   r6   r   r   r   r7      s    
zDSAPrivateNumbers.__eq__)N)	r   r   r   r@   r+   rP   r-   rS   r7   r   r   r   r   r#      s   r#   r   rB   )r   rD   r
   c                 C  s   ddl m} || S rE   )rF   rD   Zgenerate_dsa_parametersr   rD   rH   r   r   r   generate_parameters  s    rU   c                 C  s   ddl m} || S rE   )rF   rD   Z'generate_dsa_private_key_and_parametersrT   r   r   r   r     s    r   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.)r8   
bit_length
ValueErrorr9   r:   )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\   rP   r9   r[   rM   powr:   r8   )r]   r   r   r   r   _check_dsa_private_numbers$  s    r_   )N)N)
__future__r   r   typingZ"cryptography.hazmat.bindings._rustr   Zrust_opensslZcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   Z
asym_utilsABCMetar   ZDSAParametersWithNumbersregisterZdsar   ZDSAPrivateKeyWithSerializationr   ZDSAPublicKeyWithSerializationr   r,   r#   rU   r   r\   r_   r   r   r   r   <module>   s.   00/,% 	 