U
    [e                     @   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eedddZdeedddZedddZedddZdS )     N)utils)_get_backend)_serializationhashes)AsymmetricSignatureContextAsymmetricVerificationContextr   c                   @   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   o/var/www/html/services/stratfitenv/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jedddZejddddZeje	dddZ
ej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   
parameters1   s    zDSAPrivateKey.parameters)signature_algorithmr   c                 C   s   dS )zN
        Returns an AsymmetricSignatureContext used for signing data.
        Nr   )r   r   r   r   r   signer7   s    zDSAPrivateKey.signer)data	algorithmr   c                 C   s   dS )z 
        Signs the data
        Nr   )r   r    r!   r   r   r   sign@   s    zDSAPrivateKey.signDSAPrivateNumbersc                 C   s   dS )z.
        Returns a DSAPrivateNumbers.
        Nr   r   r   r   r   private_numbersJ   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_bytesP   s    zDSAPrivateKey.private_bytesN)r   r   r   r   abstractpropertyintr   r   r   r   r   r   HashAlgorithmr   r   bytestypingUnion
asym_utils	Prehashedr"   r$   r   EncodingZPrivateFormatZKeySerializationEncryptionr)   r   r   r   r   r	   $   s.   	r	   c                   @   s   e Zd ZejedddZejedddZ	eje
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ZdS )r   r
   c                 C   s   dS 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   f   s    zDSAPublicKey.parameters)	signaturer   r   c                 C   s   dS )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr   )r   r3   r   r   r   r   verifierl   s    zDSAPublicKey.verifierDSAPublicNumbersc                 C   s   dS )z-
        Returns a DSAPublicNumbers.
        Nr   r   r   r   r   public_numbersv   s    zDSAPublicKey.public_numbers)r%   r&   r   c                 C   s   dS r(   r   )r   r%   r&   r   r   r   public_bytes|   s    zDSAPublicKey.public_bytes)r3   r    r!   c                 C   s   dS )z5
        Verifies the signature of the data.
        Nr   )r   r3   r    r!   r   r   r   verify   s    zDSAPublicKey.verifyN)r   r   r   r   r*   r+   r   r   r   r   r-   r   r,   r   r4   r6   r   r2   ZPublicFormatr7   r.   r/   r0   r1   r8   r   r   r   r   r   _   s*   		r   c                   @   sd   e Zd ZeeedddZedZedZedZ	de
d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   r9   r:   r;   r   r   r   __init__   s    zDSAParameterNumbers.__init__r>   r?   r@   Nr
   c                 C   s   t |}|| S N)r   Zload_dsa_parameter_numbersr   backendr   r   r   r      s    zDSAParameterNumbers.parametersc                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS rB   )r<   r   NotImplementedr9   r:   r;   r   otherr   r   r   __eq__   s    
zDSAParameterNumbers.__eq__c                 C   s
   | |k S rB   r   rF   r   r   r   __ne__   s    zDSAParameterNumbers.__ne__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+   rA   r   read_only_propertyr9   r:   r;   r   r   rH   rI   rK   r   r   r   r   r      s   


r   c                   @   sX   e Zd ZeedddZedZedZ	de
ddd	Zd
d Zdd Zdd ZdS )r5   )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   rA      s    

zDSAPublicNumbers.__init__rN   rO   Nr
   c                 C   s   t |}|| S rB   )r   Zload_dsa_public_numbersrC   r   r   r   r      s    zDSAPublicNumbers.public_keyc                 C   s&   t |tstS | j|jko$| j|jkS rB   )r<   r5   rE   rM   r   rF   r   r   r   rH      s
    

zDSAPublicNumbers.__eq__c                 C   s
   | |k S rB   r   rF   r   r   r   rI      s    zDSAPublicNumbers.__ne__c                 C   s   dj | dS )NzJ<DSAPublicNumbers(y={self.y}, parameter_numbers={self.parameter_numbers})>r   rJ   r   r   r   r   rK      s    zDSAPublicNumbers.__repr__)N)r   r   r   r+   r   rA   r   rL   rM   r   r   r   rH   rI   rK   r   r   r   r   r5      s   

	r5   c                   @   sP   e Zd ZeedddZedZedZ	de
ddd	Zd
d Zdd ZdS )r#   )xr6   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=   r5   _public_numbers_x)r   rP   r6   r   r   r   rA      s    

zDSAPrivateNumbers.__init__rR   rQ   Nr
   c                 C   s   t |}|| S rB   )r   Zload_dsa_private_numbersrC   r   r   r   private_key   s    zDSAPrivateNumbers.private_keyc                 C   s&   t |tstS | j|jko$| j|jkS rB   )r<   r#   rE   rP   r6   rF   r   r   r   rH      s    
zDSAPrivateNumbers.__eq__c                 C   s
   | |k S rB   r   rF   r   r   r   rI      s    zDSAPrivateNumbers.__ne__)N)r   r   r   r+   r5   rA   r   rL   rP   r6   r	   rS   rH   rI   r   r   r   r   r#      s   

r#   )r   r   c                 C   s   t |}|| S rB   )r   Zgenerate_dsa_parametersr   rD   r   r   r   generate_parameters  s    rU   c                 C   s   t |}|| S rB   )r   Z'generate_dsa_private_key_and_parametersrT   r   r   r   r     s    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.)r9   
bit_length
ValueErrorr:   r;   rV   r   r   r   _check_dsa_parameters  s    r]   )numbersc                 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).)
r6   r   r]   rP   r:   r\   rM   powr;   r9   )r^   r   r   r   r   _check_dsa_private_numbers  s    r`   )N)N)r   r.   Zcryptographyr   Zcryptography.hazmat.backendsr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   r   r0   ABCMetar   ZDSAParametersWithNumbersr	   ZDSAPrivateKeyWithSerializationr   ZDSAPublicKeyWithSerializationobjectr   r5   r#   r+   rU   r   r]   r`   r   r   r   r   <module>   s$   83''