o
    b                      @   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je defddZ	d dedeje 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)_get_backend)Backend)_serializationhashes)AsymmetricSignatureContextAsymmetricVerificationContext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   l/var/www/secure340b-portal/env/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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   EncodingZPrivateFormatZ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 dd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   r5   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#   Nc                 C   r   )z5
        Verifies the signature of the data.
        Nr   )r   r5   r"   r#   r   r   r   verify   r   zDSAPublicKey.verify)r
   r7   )r   r   r   r   r,   r-   r   r   r	   r   r/   r   r.   r   r6   r8   r   r4   ZPublicFormatr9   r0   r1   r2   r3   r:   r   r   r   r   r   _   sB    		r   c                   @   sz   e Zd ZdededefddZedd Zedd Zed	d Z	
dde	j
e 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__c                 C      | j S N)r@   r   r   r   r   <lambda>       zDSAParameterNumbers.<lambda>c                 C   rD   rE   )rA   r   r   r   r   rF      rG   c                 C   rD   rE   )rB   r   r   r   r   rF      rG   Nbackendr
   c                 C      t |}|| S rE   )r   Zload_dsa_parameter_numbersr   rH   r   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 rE   )r>   r   NotImplementedr;   r<   r=   r   otherr   r   r   __eq__   s   
$zDSAParameterNumbers.__eq__c                 C   
   | |k S rE   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__rE   )r   r   r   r-   rC   propertyr;   r<   r=   r0   Optionalr   r	   r   rO   rQ   rU   r   r   r   r   r      s    
r   c                   @   sj   e Zd ZdedefddZedd Zedd Z	dd	e	j
e d
efddZdd Zdd Zdd ZdS )r7   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   rY   r   r   r   r   rC      s   


zDSAPublicNumbers.__init__c                 C   rD   rE   )rZ   r   r   r   r   rF      rG   zDSAPublicNumbers.<lambda>c                 C   rD   rE   )r[   r   r   r   r   rF      rG   NrH   r
   c                 C   rI   rE   )r   Zload_dsa_public_numbersrJ   r   r   r   r      rK   zDSAPublicNumbers.public_keyc                 C   &   t |tstS | j|jko| j|jkS rE   )r>   r7   rL   rY   r   rM   r   r   r   rO      s
   

zDSAPublicNumbers.__eq__c                 C   rP   rE   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__rE   )r   r   r   r-   r   rC   rW   rY   r   r0   rX   r   r   r   rO   rQ   rU   r   r   r   r   r7      s    
	r7   c                   @   sb   e Zd ZdedefddZedd Zedd Z	dd	e	j
e d
efddZdd Zdd ZdS )r%   xr8   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?   r7   _public_numbers_x)r   r]   r8   r   r   r   rC      s   


zDSAPrivateNumbers.__init__c                 C   rD   rE   )r_   r   r   r   r   rF      rG   zDSAPrivateNumbers.<lambda>c                 C   rD   rE   )r^   r   r   r   r   rF      rG   NrH   r
   c                 C   rI   rE   )r   Zload_dsa_private_numbersrJ   r   r   r   private_key   rK   zDSAPrivateNumbers.private_keyc                 C   r\   rE   )r>   r%   rL   r]   r8   rM   r   r   r   rO      s   
zDSAPrivateNumbers.__eq__c                 C   rP   rE   r   rM   r   r   r   rQ     rR   zDSAPrivateNumbers.__ne__rE   )r   r   r   r-   r7   rC   rW   r]   r8   r0   rX   r   r   r`   rO   rQ   r   r   r   r   r%      s    
r%   r   rH   r
   c                 C   rI   rE   )r   Zgenerate_dsa_parametersr   rH   r   r   r   generate_parameters  rK   rb   c                 C   rI   rE   )r   Z'generate_dsa_private_key_and_parametersra   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   ri   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).)
r8   r   ri   r]   r<   rh   rY   powr=   r;   )rj   r   r   r   r   _check_dsa_private_numbers"  s   rl   rE   )r   r0   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   r   r   r2   ABCMetar	   ZDSAParametersWithNumbersr   ZDSAPrivateKeyWithSerializationr   ZDSAPublicKeyWithSerializationobjectr   r7   r%   r-   rX   rb   r   ri   rl   r   r   r   r   <module>   sB   83))"

