o
    ee                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ 	ddddZ	G dd dZ
G dd dZG dd dZG dd dejdZeZeejj G dd dejdZeZeejj G dd dejdZeZeejj dS )    )annotationsN)openssl)_serialization	generatorintkey_sizebackend
typing.AnyreturnDHParametersc                 C  s   ddl m} || |S Nr   )r   ),cryptography.hazmat.backends.openssl.backendr   generate_dh_parameters)r   r   r   ossl r   _/var/www/html/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/asymmetric/dh.pygenerate_parameters   s   r   c                   @  sX   e Zd Zddd	d
ZdddZddddZedddZedddZed ddZ	dS )!DHParameterNumbersNpr   gqtyping.Optional[int]r
   Nonec                 C  s   t |tr
t |tstd|d urt |tstd|dk r#td| tjjk r5tdtjj d|| _|| _	|| _
d S )Nzp and g must be integerszq must be integer or None   z!DH generator must be 2 or greaterzp (modulus) must be at least z-bit)
isinstancer   	TypeError
ValueError
bit_lengthrust_openssldhMIN_MODULUS_SIZE_p_g_q)selfr   r   r   r   r   r   __init__   s   
zDHParameterNumbers.__init__otherobjectboolc                 C  s2   t |tstS | j|jko| j|jko| j|jkS N)r   r   NotImplementedr!   r"   r#   r$   r&   r   r   r   __eq__*   s   
"zDHParameterNumbers.__eq__r   r	   r   c                 C     ddl m} || S r   )r   r   load_dh_parameter_numbersr$   r   r   r   r   r   
parameters2      
zDHParameterNumbers.parametersc                 C     | j S r)   )r!   r$   r   r   r   r   9      zDHParameterNumbers.pc                 C  r2   r)   )r"   r3   r   r   r   r   =   r4   zDHParameterNumbers.gc                 C  r2   r)   )r#   r3   r   r   r   r   A   r4   zDHParameterNumbers.qr)   )r   r   r   r   r   r   r
   r   r&   r'   r
   r(   )r   r	   r
   r   r
   r   )r
   r   )
__name__
__module____qualname__r%   r,   r0   propertyr   r   r   r   r   r   r   r      s    
r   c                   @  H   e Zd ZdddZdddZddddZedddZedddZdS )DHPublicNumbersyr   parameter_numbersr   r
   r   c                 C  4   t |ts	tdt |tstd|| _|| _d S )Nzy must be an integer.z5parameters must be an instance of DHParameterNumbers.)r   r   r   r   _y_parameter_numbers)r$   r=   r>   r   r   r   r%   G      


zDHPublicNumbers.__init__r&   r'   r(   c                 C  &   t |tstS | j|jko| j|jkS r)   )r   r<   r*   r@   rA   r+   r   r   r   r,   S   
   

zDHPublicNumbers.__eq__Nr   r	   DHPublicKeyc                 C  r-   r   )r   r   load_dh_public_numbersr/   r   r   r   
public_key\   r1   zDHPublicNumbers.public_keyc                 C  r2   r)   )r@   r3   r   r   r   r=   c   r4   zDHPublicNumbers.yc                 C  r2   r)   )rA   r3   r   r   r   r>   g   r4   z!DHPublicNumbers.parameter_numbers)r=   r   r>   r   r
   r   r5   r)   )r   r	   r
   rE   r6   r
   r   )	r7   r8   r9   r%   r,   rG   r:   r=   r>   r   r   r   r   r<   F       

	r<   c                   @  r;   )DHPrivateNumbersxr   public_numbersr<   r
   r   c                 C  r?   )Nzx must be an integer.z6public_numbers must be an instance of DHPublicNumbers.)r   r   r   r<   _x_public_numbers)r$   rK   rL   r   r   r   r%   m   rB   zDHPrivateNumbers.__init__r&   r'   r(   c                 C  rC   r)   )r   rJ   r*   rM   rN   r+   r   r   r   r,   y   rD   zDHPrivateNumbers.__eq__Nr   r	   DHPrivateKeyc                 C  r-   r   )r   r   load_dh_private_numbersr/   r   r   r   private_key   r1   zDHPrivateNumbers.private_keyc                 C  r2   r)   )rN   r3   r   r   r   rL      r4   zDHPrivateNumbers.public_numbersc                 C  r2   r)   )rM   r3   r   r   r   rK      r4   zDHPrivateNumbers.x)rK   r   rL   r<   r
   r   r5   r)   )r   r	   r
   rO   r
   r<   r6   )	r7   r8   r9   r%   r,   rQ   r:   rL   rK   r   r   r   r   rJ   l   rI   rJ   c                   @  s<   e Zd ZejdddZejdd
dZejdddZdS )r   r
   rO   c                 C     dS )z7
        Generates and returns a DHPrivateKey.
        Nr   r3   r   r   r   generate_private_key       z!DHParameters.generate_private_keyencoding_serialization.Encodingformat_serialization.ParameterFormatbytesc                 C  rS   )z=
        Returns the parameters serialized as bytes.
        Nr   r$   rV   rX   r   r   r   parameter_bytes   rU   zDHParameters.parameter_bytesr   c                 C  rS   )z/
        Returns a DHParameterNumbers.
        Nr   r3   r   r   r   r>      rU   zDHParameters.parameter_numbersN)r
   rO   )rV   rW   rX   rY   r
   rZ   rH   )r7   r8   r9   abcabstractmethodrT   r\   r>   r   r   r   r   r      s    	)	metaclassc                   @  s`   e Zd ZeejdddZejdddZejdd	d
ZejdddZ	ejdddZ
dS )rE   r
   r   c                 C  rS   z6
        The bit length of the prime modulus.
        Nr   r3   r   r   r   r      rU   zDHPublicKey.key_sizer   c                 C  rS   )zJ
        The DHParameters object associated with this public key.
        Nr   r3   r   r   r   r0      rU   zDHPublicKey.parametersr<   c                 C  rS   )z,
        Returns a DHPublicNumbers.
        Nr   r3   r   r   r   rL      rU   zDHPublicKey.public_numbersrV   rW   rX   _serialization.PublicFormatrZ   c                 C  rS   z6
        Returns the key serialized as bytes.
        Nr   r[   r   r   r   public_bytes   rU   zDHPublicKey.public_bytesr&   r'   r(   c                 C  rS   )z"
        Checks equality.
        Nr   r+   r   r   r   r,      rU   zDHPublicKey.__eq__Nr6   r
   r   rR   )rV   rW   rX   ra   r
   rZ   r5   )r7   r8   r9   r:   r]   r^   r   r0   rL   rc   r,   r   r   r   r   rE      s    	rE   c                   @  sp   e Zd ZeejdddZejdddZejdd	d
ZejdddZ	ejdddZ
ejd ddZdS )!rO   r
   r   c                 C  rS   r`   r   r3   r   r   r   r      rU   zDHPrivateKey.key_sizerE   c                 C  rS   )zC
        The DHPublicKey associated with this private key.
        Nr   r3   r   r   r   rG      rU   zDHPrivateKey.public_keyr   c                 C  rS   )zK
        The DHParameters object associated with this private key.
        Nr   r3   r   r   r   r0      rU   zDHPrivateKey.parameterspeer_public_keyrZ   c                 C  rS   )zn
        Given peer's DHPublicKey, carry out the key exchange and
        return shared key as bytes.
        Nr   )r$   re   r   r   r   exchange   rU   zDHPrivateKey.exchangerJ   c                 C  rS   )z-
        Returns a DHPrivateNumbers.
        Nr   r3   r   r   r   private_numbers   rU   zDHPrivateKey.private_numbersrV   rW   rX   _serialization.PrivateFormatencryption_algorithm)_serialization.KeySerializationEncryptionc                 C  rS   rb   r   )r$   rV   rX   ri   r   r   r   private_bytes   rU   zDHPrivateKey.private_bytesNr6   )r
   rE   rd   )re   rE   r
   rZ   )r
   rJ   )rV   rW   rX   rh   ri   rj   r
   rZ   )r7   r8   r9   r:   r]   r^   r   rG   r0   rf   rg   rk   r   r   r   r   rO      s    rO   r)   )r   r   r   r   r   r	   r
   r   )
__future__r   r]   typing"cryptography.hazmat.bindings._rustr   r   cryptography.hazmat.primitivesr   r   r   r<   rJ   ABCMetar   DHParametersWithSerializationregisterr   rE   DHPublicKeyWithSerializationrO   DHPrivateKeyWithSerializationr   r   r   r   <module>   s&   0&&%-