o
    )%a                     @   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dedefddZddedefddZdefddZdefddZdS )     N)utils)_get_backend)_serializationhashes)AsymmetricSignatureContextAsymmetricVerificationContextr   c                   @   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   O/usr/lib/python3/dist-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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   
parameters1   r   zDSAPrivateKey.parameterssignature_algorithmc                 C   r   )zN
        Returns an AsymmetricSignatureContext used for signing data.
        Nr   )r   r   r   r   r   signer7   r   zDSAPrivateKey.signerdata	algorithmc                 C   r   )z 
        Signs the data
        Nr   )r   r!   r"   r   r   r   sign@   r   zDSAPrivateKey.signDSAPrivateNumbersc                 C   r   )z.
        Returns a DSAPrivateNumbers.
        Nr   r   r   r   r   private_numbersJ   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_bytesP   r   zDSAPrivateKey.private_bytesN)r	   r   )r	   r$   )r   r   r   r   abstractpropertyintr   r   r   r   r   r   HashAlgorithmr   r    bytestypingUnion
asym_utils	Prehashedr#   r%   r   EncodingPrivateFormatKeySerializationEncryptionr*   r   r   r   r   r
   $   sB    	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e
d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 fddZdS )r   r	   c                 C   r   r   r   r   r   r   r   r   `   r   zDSAPublicKey.key_sizec                 C   r   )zK
        The DSAParameters object associated with this public key.
        Nr   r   r   r   r   r   f   r   zDSAPublicKey.parameters	signaturer   c                 C   r   )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr   )r   r6   r   r   r   r   verifierl   r   zDSAPublicKey.verifierDSAPublicNumbersc                 C   r   )z-
        Returns a DSAPublicNumbers.
        Nr   r   r   r   r   public_numbersv   r   zDSAPublicKey.public_numbersr&   r'   c                 C   r   r)   r   )r   r&   r'   r   r   r   public_bytes|   r   zDSAPublicKey.public_bytesr!   r"   c                 C   r   )z5
        Verifies the signature of the data.
        Nr   )r   r6   r!   r"   r   r   r   verify   r   zDSAPublicKey.verifyN)r	   r8   )r   r   r   r   r+   r,   r   r   r   r   r.   r   r-   r   r7   r9   r   r3   PublicFormatr:   r/   r0   r1   r2   r;   r   r   r   r   r   _   s>    		r   c                   @   sh   e Zd ZdededefddZedZedZedZ	dd
e
f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   r=   r>   r?   r   r   r   __init__   s   
zDSAParameterNumbers.__init__rB   rC   rD   Nr	   c                 C      t |}|| S N)r   load_dsa_parameter_numbersr   backendr   r   r   r         
zDSAParameterNumbers.parametersc                 C   s2   t |tstS | j|jko| j|jko| j|jkS rG   )r@   r   NotImplementedr=   r>   r?   r   otherr   r   r   __eq__   s   
$zDSAParameterNumbers.__eq__c                 C   
   | |k S rG   r   rM   r   r   r   __ne__      
zDSAParameterNumbers.__ne__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__rG   )r   r   r   r,   rE   r   read_only_propertyr=   r>   r?   r   r   rO   rQ   rU   r   r   r   r   r      s    


r   c                   @   sZ   e Zd ZdedefddZedZedZ	dde
fd	d
Zdd Zdd Zdd ZdS )r8   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,   rA   r   _y_parameter_numbers)r   rX   r   r   r   r   rE      s   


zDSAPublicNumbers.__init__rY   rZ   Nr	   c                 C   rF   rG   )r   load_dsa_public_numbersrI   r   r   r   r      rK   zDSAPublicNumbers.public_keyc                 C   &   t |tstS | j|jko| j|jkS rG   )r@   r8   rL   rX   r   rM   r   r   r   rO      s
   

zDSAPublicNumbers.__eq__c                 C   rP   rG   r   rM   r   r   r   rQ      rR   zDSAPublicNumbers.__ne__c                 C   rS   )NzJ<DSAPublicNumbers(y={self.y}, parameter_numbers={self.parameter_numbers})>r   rT   r   r   r   r   rU      rV   zDSAPublicNumbers.__repr__rG   )r   r   r   r,   r   rE   r   rW   rX   r   r   r   rO   rQ   rU   r   r   r   r   r8      s    

	r8   c                   @   sR   e Zd ZdedefddZedZedZ	dde
fd	d
Zdd Zdd ZdS )r$   xr9   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,   rA   r8   _public_numbers_x)r   r]   r9   r   r   r   rE      s   


zDSAPrivateNumbers.__init__r_   r^   Nr	   c                 C   rF   rG   )r   load_dsa_private_numbersrI   r   r   r   private_key   rK   zDSAPrivateNumbers.private_keyc                 C   r\   rG   )r@   r$   rL   r]   r9   rM   r   r   r   rO      s   
zDSAPrivateNumbers.__eq__c                 C   rP   rG   r   rM   r   r   r   rQ      rR   zDSAPrivateNumbers.__ne__rG   )r   r   r   r,   r8   rE   r   rW   r]   r9   r
   ra   rO   rQ   r   r   r   r   r$      s    

r$   r   r	   c                 C   rF   rG   )r   generate_dsa_parametersr   rJ   r   r   r   generate_parameters  rK   rd   c                 C   rF   rG   )r   'generate_dsa_private_key_and_parametersrc   r   r   r   r     rK   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.)r=   
bit_length
ValueErrorr>   r?   )r   r   r   r   _check_dsa_parameters  s   rl   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).)
r9   r   rl   r]   r>   rk   rX   powr?   r=   )rm   r   r   r   r   _check_dsa_private_numbers  s   ro   rG   )r   r/   cryptographyr   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetricr   r   r1   ABCMetar   DSAParametersWithNumbersr
   DSAPrivateKeyWithSerializationr   DSAPublicKeyWithSerializationobjectr   r8   r$   r,   rd   r   rl   ro   r   r   r   r   <module>   s&   83''