U
    ςde                     @  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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int
typing.AnyDHParameters)	generatorkey_sizebackendreturnc                 C  s   ddl m} || |S Nr   )r
   ),cryptography.hazmat.backends.openssl.backendr
   Zgenerate_dh_parameters)r   r	   r
   ossl r   i/var/www/html/myproject/myenv/lib/python3.8/site-packages/cryptography/hazmat/primitives/asymmetric/dh.pygenerate_parameters   s    r   c                   @  sz   e Zd ZddddddddZdd	d
ddZddddddZeddddZeddddZeddddZ	dS )DHParameterNumbersNr   ztyping.Optional[int]None)pgqr   c                 C  s   t |trt |tstd|d k	r6t |ts6td|dk rFtd| tjjk rjt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dhZMIN_MODULUS_SIZE_p_g_q)selfr   r   r   r   r   r   __init__   s    zDHParameterNumbers.__init__objectboolotherr   c                 C  s2   t |tstS | j|jko0| j|jko0| j|jkS N)r   r   NotImplementedr   r   r    r!   r&   r   r   r   __eq__*   s    
"zDHParameterNumbers.__eq__r   r   r
   r   c                 C  s   ddl m} || S r   )r   r
   Zload_dh_parameter_numbersr!   r
   r   r   r   r   
parameters2   s    zDHParameterNumbers.parametersr   c                 C  s   | j S r'   )r   r!   r   r   r   r   9   s    zDHParameterNumbers.pc                 C  s   | j S r'   )r   r/   r   r   r   r   =   s    zDHParameterNumbers.gc                 C  s   | j S r'   )r    r/   r   r   r   r   A   s    zDHParameterNumbers.q)N)N)
__name__
__module____qualname__r"   r*   r-   propertyr   r   r   r   r   r   r   r      s   r   c                   @  sd   e Zd ZddddddZddd	d
dZddddddZeddddZeddddZdS )DHPublicNumbersr   r   r   )yparameter_numbersr   c                 C  s4   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!   r5   r6   r   r   r   r"   G   s    

zDHPublicNumbers.__init__r#   r$   r%   c                 C  s&   t |tstS | j|jko$| j|jkS r'   )r   r4   r(   r7   r8   r)   r   r   r   r*   S   s
    

zDHPublicNumbers.__eq__Nr   DHPublicKeyr+   c                 C  s   ddl m} || S r   )r   r
   Zload_dh_public_numbersr,   r   r   r   
public_key\   s    zDHPublicNumbers.public_keyr.   c                 C  s   | j S r'   )r7   r/   r   r   r   r5   c   s    zDHPublicNumbers.yc                 C  s   | j S r'   )r8   r/   r   r   r   r6   g   s    z!DHPublicNumbers.parameter_numbers)N)	r0   r1   r2   r"   r*   r:   r3   r5   r6   r   r   r   r   r4   F   s   	r4   c                   @  sd   e Zd ZddddddZddd	d
dZddddddZeddddZeddddZdS )DHPrivateNumbersr   r4   r   )xpublic_numbersr   c                 C  s4   t |tstdt |ts$td|| _|| _d S )Nzx must be an integer.z6public_numbers must be an instance of DHPublicNumbers.)r   r   r   r4   _x_public_numbers)r!   r<   r=   r   r   r   r"   m   s    

zDHPrivateNumbers.__init__r#   r$   r%   c                 C  s&   t |tstS | j|jko$| j|jkS r'   )r   r;   r(   r>   r?   r)   r   r   r   r*   y   s
    

zDHPrivateNumbers.__eq__Nr   DHPrivateKeyr+   c                 C  s   ddl m} || S r   )r   r
   Zload_dh_private_numbersr,   r   r   r   private_key   s    zDHPrivateNumbers.private_keyr.   c                 C  s   | j S r'   )r?   r/   r   r   r   r=      s    zDHPrivateNumbers.public_numbersc                 C  s   | j S r'   )r>   r/   r   r   r   r<      s    zDHPrivateNumbers.x)N)	r0   r1   r2   r"   r*   rA   r3   r=   r<   r   r   r   r   r;   l   s   	r;   c                   @  sL   e Zd ZejddddZejddddd	d
ZejddddZdS )r   r@   r.   c                 C  s   dS )z7
        Generates and returns a DHPrivateKey.
        Nr   r/   r   r   r   generate_private_key   s    z!DHParameters.generate_private_key_serialization.Encodingz_serialization.ParameterFormatbytesencodingformatr   c                 C  s   dS )z=
        Returns the parameters serialized as bytes.
        Nr   r!   rF   rG   r   r   r   parameter_bytes   s    zDHParameters.parameter_bytesr   c                 C  s   dS )z/
        Returns a DHParameterNumbers.
        Nr   r/   r   r   r   r6      s    zDHParameters.parameter_numbersN)r0   r1   r2   abcabstractmethodrB   rI   r6   r   r   r   r   r      s   	)	metaclassc                   @  sz   e Zd ZeejddddZejddddZejddd	d
ZejddddddZ	ejdddddZ
dS )r9   r   r.   c                 C  s   dS z6
        The bit length of the prime modulus.
        Nr   r/   r   r   r   r	      s    zDHPublicKey.key_sizer   c                 C  s   dS )zJ
        The DHParameters object associated with this public key.
        Nr   r/   r   r   r   r-      s    zDHPublicKey.parametersr4   c                 C  s   dS )z,
        Returns a DHPublicNumbers.
        Nr   r/   r   r   r   r=      s    zDHPublicKey.public_numbersrC   z_serialization.PublicFormatrD   rE   c                 C  s   dS z6
        Returns the key serialized as bytes.
        Nr   rH   r   r   r   public_bytes   s    zDHPublicKey.public_bytesr#   r$   r%   c                 C  s   dS )z"
        Checks equality.
        Nr   r)   r   r   r   r*      s    zDHPublicKey.__eq__N)r0   r1   r2   r3   rJ   rK   r	   r-   r=   rO   r*   r   r   r   r   r9      s   	r9   c                   @  s   e Zd ZeejddddZejddddZejddd	d
ZejdddddZ	ejddddZ
ejdddddddZdS )r@   r   r.   c                 C  s   dS rM   r   r/   r   r   r   r	      s    zDHPrivateKey.key_sizer9   c                 C  s   dS )zC
        The DHPublicKey associated with this private key.
        Nr   r/   r   r   r   r:      s    zDHPrivateKey.public_keyr   c                 C  s   dS )zK
        The DHParameters object associated with this private key.
        Nr   r/   r   r   r   r-      s    zDHPrivateKey.parametersrD   )peer_public_keyr   c                 C  s   dS )zn
        Given peer's DHPublicKey, carry out the key exchange and
        return shared key as bytes.
        Nr   )r!   rP   r   r   r   exchange   s    zDHPrivateKey.exchanger;   c                 C  s   dS )z-
        Returns a DHPrivateNumbers.
        Nr   r/   r   r   r   private_numbers   s    zDHPrivateKey.private_numbersrC   z_serialization.PrivateFormatz)_serialization.KeySerializationEncryption)rF   rG   encryption_algorithmr   c                 C  s   dS rN   r   )r!   rF   rG   rS   r   r   r   private_bytes   s    zDHPrivateKey.private_bytesN)r0   r1   r2   r3   rJ   rK   r	   r:   r-   rQ   rR   rT   r   r   r   r   r@      s   r@   )N)
__future__r   rJ   typingZ"cryptography.hazmat.bindings._rustr   r   Zcryptography.hazmat.primitivesr   r   r   r4   r;   ABCMetar   ZDHParametersWithSerializationregisterr   r9   ZDHPublicKeyWithSerializationr@   ZDHPrivateKeyWithSerializationr   r   r   r   <module>   s$    0&&%-