U
    EZh                     @   s   d dl Z d dlZd dlmZ dZdeeej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G dd de jdZeZG dd de jdZeZdS )    N)_serializationi   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   s/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/asymmetric/dh.pygenerate_parameters   s    r   c                   @   s   e Zd Zdeeeje ddddZeedddZ	dej
dd	d
dZeedddZeedddZeeje dddZdS )DHParameterNumbersN)pgqr   c                 C   sx   t |trt |tstd|d k	r6t |ts6td|dk rFtd| tk rbtdt 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)	
isinstanceint	TypeError
ValueError
bit_length_MIN_MODULUS_SIZE_p_g_q)selfr   r   r   r   r   r   __init__   s    
zDHParameterNumbers.__init__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   c                 C   s   ddl m} || S r   )r	   r   Zload_dh_parameter_numbersr   r   r
   r   r   r   
parameters1   s    zDHParameterNumbers.parametersr   c                 C   s   | j S r    )r   r   r   r   r   r   8   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   @   s    zDHParameterNumbers.q)N)N)__name__
__module____qualname__r   typingOptionalr   objectboolr#   Anyr&   propertyr   r   r   r   r   r   r   r      s   r   c                   @   sf   e Zd ZeeddddZeedddZde	j
dd	d
dZeedddZeedddZdS )DHPublicNumbersN)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   r3   r4   r   r   r   r   F   s    

zDHPublicNumbers.__init__r   c                 C   s&   t |tstS | j|jko$| j|jkS r    )r   r2   r!   r5   r6   r"   r   r   r   r#   R   s
    

zDHPublicNumbers.__eq__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    )r5   r(   r   r   r   r3   b   s    zDHPublicNumbers.yc                 C   s   | j S r    )r6   r(   r   r   r   r4   f   s    z!DHPublicNumbers.parameter_numbers)N)r)   r*   r+   r   r   r   r.   r/   r#   r,   r0   r8   r1   r3   r4   r   r   r   r   r2   E   s   	r2   c                   @   sf   e Zd ZeeddddZeedddZde	j
dd	d
dZeedddZeedddZdS )DHPrivateNumbersN)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   r2   _x_public_numbers)r   r:   r;   r   r   r   r   l   s    

zDHPrivateNumbers.__init__r   c                 C   s&   t |tstS | j|jko$| j|jkS r    )r   r9   r!   r<   r=   r"   r   r   r   r#   x   s
    

zDHPrivateNumbers.__eq__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)r)   r*   r+   r   r2   r   r.   r/   r#   r,   r0   r?   r1   r;   r:   r   r   r   r   r9   k   s   	r9   c                   @   sP   e Zd ZejddddZejejeje	dddZ
eje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encodingformatr   c                 C   s   dS )z=
        Returns the parameters serialized as bytes.
        Nr   r   rB   rC   r   r   r   parameter_bytes   s    zDHParameters.parameter_bytesc                 C   s   dS )z/
        Returns a DHParameterNumbers.
        Nr   r(   r   r   r   r4      s    zDHParameters.parameter_numbersN)r)   r*   r+   abcabstractmethodr@   r   EncodingZParameterFormatbytesrE   r   r4   r   r   r   r   r      s   	)	metaclassc                   @   sh   e Zd ZeejedddZejedddZ	eje
dddZejejejedd	d
ZdS )r7   r'   c                 C   s   dS z6
        The bit length of the prime modulus.
        Nr   r(   r   r   r   r      s    zDHPublicKey.key_sizec                 C   s   dS )zJ
        The DHParameters object associated with this public key.
        Nr   r(   r   r   r   r&      s    zDHPublicKey.parametersc                 C   s   dS )z,
        Returns a DHPublicNumbers.
        Nr   r(   r   r   r   r;      s    zDHPublicKey.public_numbersrA   c                 C   s   dS z6
        Returns the key serialized as bytes.
        Nr   rD   r   r   r   public_bytes   s    zDHPublicKey.public_bytesN)r)   r*   r+   r1   rF   rG   r   r   r   r&   r2   r;   r   rH   ZPublicFormatrI   rM   r   r   r   r   r7      s   r7   c                   @   s   e Zd ZeejedddZejedddZ	eje
dddZejeedd	d
Zeje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 rK   r   r(   r   r   r   r      s    zDHPrivateKey.key_sizec                 C   s   dS )zC
        The DHPublicKey associated with this private key.
        Nr   r(   r   r   r   r8      s    zDHPrivateKey.public_keyc                 C   s   dS )zK
        The DHParameters object associated with this private key.
        Nr   r(   r   r   r   r&      s    zDHPrivateKey.parameters)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   rN   r   r   r   exchange   s    zDHPrivateKey.exchangec                 C   s   dS )z-
        Returns a DHPrivateNumbers.
        Nr   r(   r   r   r   private_numbers   s    zDHPrivateKey.private_numbers)rB   rC   encryption_algorithmr   c                 C   s   dS rL   r   )r   rB   rC   rQ   r   r   r   private_bytes   s    zDHPrivateKey.private_bytesN)r)   r*   r+   r1   rF   rG   r   r   r7   r8   r   r&   rI   rO   r9   rP   r   rH   ZPrivateFormatZKeySerializationEncryptionrR   r   r   r   r   r>      s"   r>   )N)rF   r,   Zcryptography.hazmat.primitivesr   r   r   r0   r   r   r2   r9   ABCMetar   ZDHParametersWithSerializationr7   ZDHPublicKeyWithSerializationr>   ZDHPrivateKeyWithSerializationr   r   r   r   <module>   s&      /&&-