o
    ˷e                  	   @   s   d dl Z d dlZd dlmZ dZ	ddededejddf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G dd de jdZeZG dd de jdZeZdS )    N)_serializationi   	generatorkey_sizebackendreturnDHParametersc                 C   s   ddl m} || |S Nr   )r   ),cryptography.hazmat.backends.openssl.backendr   generate_dh_parameters)r   r   r   ossl r   c/var/www/ideatree/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/asymmetric/dh.pygenerate_parameters   s   r   c                	   @   s   e Zd Zddededeje ddfddZdedefd	d
Z	ddej
ddfddZedefddZedefddZedeje fddZdS )DHParameterNumbersNpgqr   c                 C   sv   t |tr
t |tstd|d urt |tstd|dk r#td| tk r0tdt|| _|| _|| _	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 {}-bit)

isinstanceint	TypeError
ValueError
bit_length_MIN_MODULUS_SIZEformat_p_g_q)selfr   r   r   r   r   r   __init__   s   
zDHParameterNumbers.__init__otherc                 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   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   r*   r!   )r   r+   r   r   r   r   =   r,   zDHParameterNumbers.gc                 C   r*   r!   )r   r+   r   r   r   r   A   r,   zDHParameterNumbers.qr!   )__name__
__module____qualname__r   typingOptionalr   objectboolr$   Anyr(   propertyr   r   r   r   r   r   r   r      s    "r   c                   @   sn   e Zd ZdededdfddZdedefdd	Zdd
e	j
ddfddZedefddZedefddZdS )DHPublicNumbersyparameter_numbersr   Nc                 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   r7   r8   r   r   r   r   G      


zDHPublicNumbers.__init__r    c                 C   &   t |tstS | j|jko| j|jkS r!   )r   r6   r"   r:   r;   r#   r   r   r   r$   S   
   

zDHPublicNumbers.__eq__r   DHPublicKeyc                 C   r%   r   )r	   r   load_dh_public_numbersr'   r   r   r   
public_key\   r)   zDHPublicNumbers.public_keyc                 C   r*   r!   )r:   r+   r   r   r   r7   c   r,   zDHPublicNumbers.yc                 C   r*   r!   )r;   r+   r   r   r   r8   g   r,   z!DHPublicNumbers.parameter_numbersr!   )r-   r.   r/   r   r   r   r2   r3   r$   r0   r4   rA   r5   r7   r8   r   r   r   r   r6   F       	r6   c                   @   sn   e Zd ZdededdfddZdedefdd	Zdd
e	j
ddfddZedefddZedefddZdS )DHPrivateNumbersxpublic_numbersr   Nc                 C   r9   )Nzx must be an integer.z6public_numbers must be an instance of DHPublicNumbers.)r   r   r   r6   _x_public_numbers)r   rD   rE   r   r   r   r   m   r<   zDHPrivateNumbers.__init__r    c                 C   r=   r!   )r   rC   r"   rF   rG   r#   r   r   r   r$   y   r>   zDHPrivateNumbers.__eq__r   DHPrivateKeyc                 C   r%   r   )r	   r   load_dh_private_numbersr'   r   r   r   private_key   r)   zDHPrivateNumbers.private_keyc                 C   r*   r!   )rG   r+   r   r   r   rE      r,   zDHPrivateNumbers.public_numbersc                 C   r*   r!   )rF   r+   r   r   r   rD      r,   zDHPrivateNumbers.xr!   )r-   r.   r/   r   r6   r   r2   r3   r$   r0   r4   rJ   r5   rE   rD   r   r   r   r   rC   l   rB   rC   c                   @   sP   e Z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fd	d
ZdS )r   r   rH   c                 C      dS )z7
        Generates and returns a DHPrivateKey.
        Nr   r+   r   r   r   generate_private_key       z!DHParameters.generate_private_keyencodingr   c                 C   rK   )z=
        Returns the parameters serialized as bytes.
        Nr   r   rN   r   r   r   r   parameter_bytes   rM   zDHParameters.parameter_bytesc                 C   rK   )z/
        Returns a DHParameterNumbers.
        Nr   r+   r   r   r   r8      rM   zDHParameters.parameter_numbersN)r   rH   )r-   r.   r/   abcabstractmethodrL   r   EncodingParameterFormatbytesrP   r   r8   r   r   r   r   r      s    	)	metaclassc                   @   sh   e Zd ZejdefddZejdefddZ	ejde
fddZejdejd	ejdefd
dZdS )r?   r   c                 C   rK   z6
        The bit length of the prime modulus.
        Nr   r+   r   r   r   r      rM   zDHPublicKey.key_sizec                 C   rK   )zJ
        The DHParameters object associated with this public key.
        Nr   r+   r   r   r   r(      rM   zDHPublicKey.parametersc                 C   rK   )z,
        Returns a DHPublicNumbers.
        Nr   r+   r   r   r   rE      rM   zDHPublicKey.public_numbersrN   r   c                 C   rK   z6
        Returns the key serialized as bytes.
        Nr   rO   r   r   r   public_bytes   rM   zDHPublicKey.public_bytesN)r-   r.   r/   rQ   abstractpropertyr   r   rR   r   r(   r6   rE   r   rS   PublicFormatrU   rY   r   r   r   r   r?      s    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
fddZejdedefd	d
ZejdefddZejdejdejdejdefddZdS )rH   r   c                 C   rK   rW   r   r+   r   r   r   r      rM   zDHPrivateKey.key_sizec                 C   rK   )zC
        The DHPublicKey associated with this private key.
        Nr   r+   r   r   r   rA      rM   zDHPrivateKey.public_keyc                 C   rK   )zK
        The DHParameters object associated with this private key.
        Nr   r+   r   r   r   r(      rM   zDHPrivateKey.parameterspeer_public_keyc                 C   rK   )zn
        Given peer's DHPublicKey, carry out the key exchange and
        return shared key as bytes.
        Nr   )r   r\   r   r   r   exchange   rM   zDHPrivateKey.exchangec                 C   rK   )z-
        Returns a DHPrivateNumbers.
        Nr   r+   r   r   r   private_numbers   rM   zDHPrivateKey.private_numbersrN   r   encryption_algorithmc                 C   rK   rX   r   )r   rN   r   r_   r   r   r   private_bytes   rM   zDHPrivateKey.private_bytesN)r-   r.   r/   rQ   rZ   r   r   rR   r?   rA   r   r(   rU   r]   rC   r^   r   rS   PrivateFormatKeySerializationEncryptionr`   r   r   r   r   rH      s*    rH   r!   )rQ   r0   cryptography.hazmat.primitivesr   r   r   r4   r   r   r6   rC   ABCMetar   DHParametersWithSerializationr?   DHPublicKeyWithSerializationrH   DHPrivateKeyWithSerializationr   r   r   r   <module>   s.   
/&&,