o
    c                     @   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	   Qusr/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   EncodingZPrivateFormatZ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   r2   r   r   r	   r	   r   verifyo   r   zDSAPublicKey.verify)r   r/   )r   r   r   r   r&   r'   r   r   r   r   r0   r   r.   ZPublicFormatr(   r1   r)   r*   r+   r,   r   r-   r3   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   r4   r5   r6   r	   r	   r   __init__   s   
zDSAParameterNumbers.__init__r   c                 C      | j S N)r9   r
   r	   r	   r   r4         zDSAParameterNumbers.pc                 C   r=   r>   )r:   r
   r	   r	   r   r5      r?   zDSAParameterNumbers.qc                 C   r=   r>   )r;   r
   r	   r	   r   r6      r?   zDSAParameterNumbers.gNbackendc                 C      ddl m} || S Nr   )r@   ),cryptography.hazmat.backends.openssl.backendr@   Zload_dsa_parameter_numbersr   r@   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 r>   )r7   r   NotImplementedr4   r5   r6   r   rG   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__r>   )r   r   r   r'   r<   propertyr4   r5   r6   r)   Anyr   r   objectboolrJ   strrM   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 )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.)r7   r'   r8   r   _y_parameter_numbers)r   rT   r   r	   r	   r   r<      s   


zDSAPublicNumbers.__init__r   c                 C   r=   r>   )rU   r
   r	   r	   r   rT      r?   zDSAPublicNumbers.yc                 C   r=   r>   )rV   r
   r	   r	   r   r      r?   z"DSAPublicNumbers.parameter_numbersNr@   c                 C   rA   rB   )rC   r@   Zload_dsa_public_numbersrD   r	   r	   r   r      rF   zDSAPublicNumbers.public_keyrG   c                 C   &   t |tstS | j|jko| j|jkS r>   )r7   r/   rH   rT   r   rI   r	   r	   r   rJ      s
   

zDSAPublicNumbers.__eq__c                 C   rK   )NzJ<DSAPublicNumbers(y={self.y}, parameter_numbers={self.parameter_numbers})>r
   rL   r
   r	   r	   r   rM      rN   zDSAPublicNumbers.__repr__r>   )r   r   r   r'   r   r<   rO   rT   r   r)   rP   r   r   rQ   rR   rJ   rS   rM   r	   r	   r	   r   r/      s    	r/   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   xr0   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.)r7   r'   r8   r/   _public_numbers_x)r   rX   r0   r	   r	   r   r<      s   


zDSAPrivateNumbers.__init__r   c                 C   r=   r>   )rZ   r
   r	   r	   r   rX      r?   zDSAPrivateNumbers.xc                 C   r=   r>   )rY   r
   r	   r	   r   r0      r?   z DSAPrivateNumbers.public_numbersNr@   c                 C   rA   rB   )rC   r@   Zload_dsa_private_numbersrD   r	   r	   r   private_key   rF   zDSAPrivateNumbers.private_keyrG   c                 C   rW   r>   )r7   r   rH   rX   r0   rI   r	   r	   r   rJ      s   
zDSAPrivateNumbers.__eq__r>   )r   r   r   r'   r/   r<   rO   rX   r0   r)   rP   r   r[   rQ   rR   rJ   r	   r	   r	   r   r      s    r   r   r@   r   c                 C   rA   rB   )rC   r@   Zgenerate_dsa_parametersr   r@   rE   r	   r	   r   generate_parameters      
r]   c                 C   rA   rB   )rC   r@   Z'generate_dsa_private_key_and_parametersr\   r	   r	   r   r     r^   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.)r4   
bit_length
ValueErrorr5   r6   )r   r	   r	   r   _check_dsa_parameters  s   re   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).)
r0   r   re   rX   r5   rd   rT   powr6   r4   )rf   r   r	   r	   r   _check_dsa_private_numbers  s   rh   r>   )r   r)   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   r+   ABCMetar   ZDSAParametersWithNumbersr   ZDSAPrivateKeyWithSerializationr   ZDSAPublicKeyWithSerializationr   r/   r   r'   rP   r]   r   re   rh   r	   r	   r	   r   <module>   s>   /)/,%
	
