o
    ˷e                     @   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dedejde	fddZ	ddedejdefddZdeddfddZdeddfddZdS )    N)_serializationhashes)utilsc                   @   s,   e Zd Zejd	ddZejd
ddZdS )DSAParametersreturnDSAPrivateKeyc                 C      dS )z8
        Generates and returns a DSAPrivateKey.
        N selfr	   r	   d/var/www/ideatree/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/asymmetric/dsa.pygenerate_private_key       z"DSAParameters.generate_private_keyDSAParameterNumbersc                 C   r   )z0
        Returns a DSAParameterNumbers.
        Nr	   r
   r	   r	   r   parameter_numbers   r   zDSAParameters.parameter_numbersN)r   r   )r   r   )__name__
__module____qualname__abcabstractmethodr   r   r	   r	   r	   r   r      s
    r   )	metaclassc                	   @   s   e Zd ZejdefddZejdddZejde	fddZ
ejd	ed
ejejejf defddZejdddZejdejdejdejdefddZdS )r   r   c                 C   r   z6
        The bit length of the prime modulus.
        Nr	   r
   r	   r	   r   key_size!   r   zDSAPrivateKey.key_sizeDSAPublicKeyc                 C   r   )zD
        The DSAPublicKey associated with this private key.
        Nr	   r
   r	   r	   r   
public_key'   r   zDSAPrivateKey.public_keyc                 C   r   )zL
        The DSAParameters object associated with this private key.
        Nr	   r
   r	   r	   r   
parameters-   r   zDSAPrivateKey.parametersdata	algorithmc                 C   r   )z 
        Signs the data
        Nr	   )r   r   r   r	   r	   r   sign3   r   zDSAPrivateKey.signDSAPrivateNumbersc                 C   r   )z.
        Returns a DSAPrivateNumbers.
        Nr	   r
   r	   r	   r   private_numbers=   r   zDSAPrivateKey.private_numbersencodingformatencryption_algorithmc                 C   r   z6
        Returns the key serialized as bytes.
        Nr	   )r   r!   r"   r#   r	   r	   r   private_bytesC   r   zDSAPrivateKey.private_bytesN)r   r   )r   r   )r   r   r   r   abstractpropertyintr   r   r   r   r   bytestypingUnion
asym_utils	Prehashedr   HashAlgorithmr   r    r   EncodingPrivateFormatKeySerializationEncryptionr%   r	   r	   r	   r   r       s6    	r   c                	   @   s   e Zd ZejdefddZejdefddZ	ejdddZ
ejd	ejd
ejdefddZejdededejejejf ddfddZdS )r   r   c                 C   r   r   r	   r
   r	   r	   r   r   S   r   zDSAPublicKey.key_sizec                 C   r   )zK
        The DSAParameters object associated with this public key.
        Nr	   r
   r	   r	   r   r   Y   r   zDSAPublicKey.parametersDSAPublicNumbersc                 C   r   )z-
        Returns a DSAPublicNumbers.
        Nr	   r
   r	   r	   r   public_numbers_   r   zDSAPublicKey.public_numbersr!   r"   c                 C   r   r$   r	   )r   r!   r"   r	   r	   r   public_bytese   r   zDSAPublicKey.public_bytes	signaturer   r   Nc                 C   r   )z5
        Verifies the signature of the data.
        Nr	   )r   r4   r   r   r	   r	   r   verifyo   r   zDSAPublicKey.verify)r   r1   )r   r   r   r   r&   r'   r   r   r   r   r2   r   r.   PublicFormatr(   r3   r)   r*   r+   r,   r   r-   r5   r	   r	   r	   r   r   R   s2    	r   c                   @   s   e Zd ZdededefddZedefddZedefd	d
ZedefddZdde	j
defddZdedefddZdef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   r7   r8   r9   r	   r	   r   __init__   s   
zDSAParameterNumbers.__init__r   c                 C      | j S N)r<   r
   r	   r	   r   r7         zDSAParameterNumbers.pc                 C   r@   rA   )r=   r
   r	   r	   r   r8      rB   zDSAParameterNumbers.qc                 C   r@   rA   )r>   r
   r	   r	   r   r9      rB   zDSAParameterNumbers.gNbackendc                 C      ddl m} || S Nr   )rC   ),cryptography.hazmat.backends.openssl.backendrC   load_dsa_parameter_numbersr   rC   osslr	   r	   r   r         
zDSAParameterNumbers.parametersotherc                 C   s2   t |tstS | j|jko| j|jko| j|jkS rA   )r:   r   NotImplementedr7   r8   r9   r   rK   r	   r	   r   __eq__   s   
$zDSAParameterNumbers.__eq__c                 C      dj | dS )Nz9<DSAParameterNumbers(p={self.p}, q={self.q}, g={self.g})>r
   r"   r
   r	   r	   r   __repr__      zDSAParameterNumbers.__repr__rA   )r   r   r   r'   r?   propertyr7   r8   r9   r)   Anyr   r   objectboolrN   strrQ   r	   r	   r	   r   r   ~   s    r   c                   @   sx   e Zd ZdedefddZedefddZedefdd	Zdde	j
defddZdedefddZdef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.)r:   r'   r;   r   _y_parameter_numbers)r   rX   r   r	   r	   r   r?      s   


zDSAPublicNumbers.__init__r   c                 C   r@   rA   )rY   r
   r	   r	   r   rX      rB   zDSAPublicNumbers.yc                 C   r@   rA   )rZ   r
   r	   r	   r   r      rB   z"DSAPublicNumbers.parameter_numbersNrC   c                 C   rD   rE   )rF   rC   load_dsa_public_numbersrH   r	   r	   r   r      rJ   zDSAPublicNumbers.public_keyrK   c                 C   &   t |tstS | j|jko| j|jkS rA   )r:   r1   rL   rX   r   rM   r	   r	   r   rN      s
   

zDSAPublicNumbers.__eq__c                 C   rO   )NzJ<DSAPublicNumbers(y={self.y}, parameter_numbers={self.parameter_numbers})>r
   rP   r
   r	   r	   r   rQ      rR   zDSAPublicNumbers.__repr__rA   )r   r   r   r'   r   r?   rS   rX   r   r)   rT   r   r   rU   rV   rN   rW   rQ   r	   r	   r	   r   r1      s    	r1   c                   @   sj   e Zd ZdedefddZedefddZedefdd	Zdde	j
defddZdedef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.)r:   r'   r;   r1   _public_numbers_x)r   r]   r2   r	   r	   r   r?      s   


zDSAPrivateNumbers.__init__r   c                 C   r@   rA   )r_   r
   r	   r	   r   r]      rB   zDSAPrivateNumbers.xc                 C   r@   rA   )r^   r
   r	   r	   r   r2      rB   z DSAPrivateNumbers.public_numbersNrC   c                 C   rD   rE   )rF   rC   load_dsa_private_numbersrH   r	   r	   r   private_key   rJ   zDSAPrivateNumbers.private_keyrK   c                 C   r\   rA   )r:   r   rL   r]   r2   rM   r	   r	   r   rN      s   
zDSAPrivateNumbers.__eq__rA   )r   r   r   r'   r1   r?   rS   r]   r2   r)   rT   r   ra   rU   rV   rN   r	   r	   r	   r   r      s    r   r   rC   r   c                 C   rD   rE   )rF   rC   generate_dsa_parametersr   rC   rI   r	   r	   r   generate_parameters      
rd   c                 C   rD   rE   )rF   rC   'generate_dsa_private_key_and_parametersrc   r	   r	   r   r     re   r   r   c                 C   sX   | j  dvrtd| j dvrtdd| j  k r%| j k s*td 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.)r7   
bit_length
ValueErrorr8   r9   )r   r	   r	   r   _check_dsa_parameters  s   rm   numbersc                 C   sT   | j j}t| | jdks| j|jkrtd| j jt|j| j|j	kr(tdd S )Nr   zx must be > 0 and < q.z y must be equal to (g ** x % p).)
r2   r   rm   r]   r8   rl   rX   powr9   r7   )rn   r   r	   r	   r   _check_dsa_private_numbers  s   rp   rA   )r   r)   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetricr   r+   ABCMetar   DSAParametersWithNumbersr   DSAPrivateKeyWithSerializationr   DSAPublicKeyWithSerializationr   r1   r   r'   rT   rd   r   rm   rp   r	   r	   r	   r   <module>   s>   /)/,%
	
