o
    )%a                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ dZdddd	Z	G d
d de
ZG dd de
ZG dd d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 jdZeZdS )    N)utils)_get_backend)serializationi   returnDHParametersc                 C   s   t |}|| |S N)r   generate_dh_parameters)	generatorkey_sizebackend r   N/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/dh.pygenerate_parameters   s   r   c                   @   sb   e Zd Zddededeje fddZdd Zd	d
 ZdddZ	e
dZe
dZe
dZdS )DHParameterNumbersNpgqc                 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__c                 C   s2   t |tstS | j|jko| j|jko| j|jkS r   )r   r   NotImplementedr   r   r   r   otherr   r   r   __eq__)   s   
"zDHParameterNumbers.__eq__c                 C   
   | |k S r   r   r!   r   r   r   __ne__1      
zDHParameterNumbers.__ne__c                 C      t |}|| S r   )r   load_dh_parameter_numbersr   r   r   r   r   
parameters4      
zDHParameterNumbers.parametersr   r   r   r   )__name__
__module____qualname__r   typingOptionalr   r#   r%   r*   r   read_only_propertyr   r   r   r   r   r   r   r      s    


r   c                   @   J   e Zd ZdefddZdd Zdd ZddddZe	dZ
e	dZdS )DHPublicNumbersparameter_numbersc                 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   yr4   r   r   r   r   >      


zDHPublicNumbers.__init__c                 C   &   t |tstS | j|jko| j|jkS r   )r   r3   r    r6   r7   r!   r   r   r   r#   J   
   

zDHPublicNumbers.__eq__c                 C   r$   r   r   r!   r   r   r   r%   S   r&   zDHPublicNumbers.__ne__Nr   DHPublicKeyc                 C   r'   r   )r   load_dh_public_numbersr)   r   r   r   
public_keyV   r+   zDHPublicNumbers.public_keyr6   r7   r   )r   r<   )r,   r-   r.   r   r   r#   r%   r>   r   r1   r8   r4   r   r   r   r   r3   =       	
r3   c                   @   r2   )DHPrivateNumberspublic_numbersc                 C   r5   )Nzx must be an integer.z6public_numbers must be an instance of DHPublicNumbers.)r   r   r   r3   _x_public_numbers)r   xrA   r   r   r   r   _   r9   zDHPrivateNumbers.__init__c                 C   r:   r   )r   r@   r    rB   rC   r!   r   r   r   r#   k   r;   zDHPrivateNumbers.__eq__c                 C   r$   r   r   r!   r   r   r   r%   t   r&   zDHPrivateNumbers.__ne__Nr   DHPrivateKeyc                 C   r'   r   )r   load_dh_private_numbersr)   r   r   r   private_keyw   r+   zDHPrivateNumbers.private_keyrC   rB   r   r   rE   )r,   r-   r.   r3   r   r#   r%   rG   r   r1   rA   rD   r   r   r   r   r@   ^   r?   r@   c                   @   sL   e Zd ZejdddZejdddddefd	d
ZejdefddZ	dS )r   r   rE   c                 C      dS )z7
        Generates and returns a DHPrivateKey.
        Nr   r   r   r   r   generate_private_key       z!DHParameters.generate_private_keyencodingserialization.Encodingr   zserialization.ParameterFormatc                 C   rI   )z=
        Returns the parameters serialized as bytes.
        Nr   r   rM   r   r   r   r   parameter_bytes   rL   zDHParameters.parameter_bytesc                 C   rI   )z/
        Returns a DHParameterNumbers.
        Nr   rJ   r   r   r   r4      rL   zDHParameters.parameter_numbersNrH   )
r,   r-   r.   abcabstractmethodrK   bytesrP   r   r4   r   r   r   r   r      s    	)	metaclassc                   @   sd   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d	d
ddefddZdS )r<   r   c                 C   rI   z6
        The bit length of the prime modulus.
        Nr   rJ   r   r   r   r
      rL   zDHPublicKey.key_sizec                 C   rI   )zJ
        The DHParameters object associated with this public key.
        Nr   rJ   r   r   r   r*      rL   zDHPublicKey.parametersc                 C   rI   )z,
        Returns a DHPublicNumbers.
        Nr   rJ   r   r   r   rA      rL   zDHPublicKey.public_numbersrM   rN   r   zserialization.PublicFormatc                 C   rI   z6
        Returns the key serialized as bytes.
        Nr   rO   r   r   r   public_bytes   rL   zDHPublicKey.public_bytesN)r,   r-   r.   rQ   abstractpropertyr   r
   rR   r   r*   r3   rA   rS   rW   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ddddddefddZdS )rE   r   c                 C   rI   rU   r   rJ   r   r   r   r
      rL   zDHPrivateKey.key_sizec                 C   rI   )zC
        The DHPublicKey associated with this private key.
        Nr   rJ   r   r   r   r>      rL   zDHPrivateKey.public_keyc                 C   rI   )zK
        The DHParameters object associated with this private key.
        Nr   rJ   r   r   r   r*      rL   zDHPrivateKey.parameterspeer_public_keyc                 C   rI   )zn
        Given peer's DHPublicKey, carry out the key exchange and
        return shared key as bytes.
        Nr   )r   rY   r   r   r   exchange   rL   zDHPrivateKey.exchangec                 C   rI   )z-
        Returns a DHPrivateNumbers.
        Nr   rJ   r   r   r   private_numbers   rL   zDHPrivateKey.private_numbersrM   rN   r   zserialization.PrivateFormatencryption_algorithmz(serialization.KeySerializationEncryptionc                 C   rI   rV   r   )r   rM   r   r\   r   r   r   private_bytes   rL   zDHPrivateKey.private_bytesN)r,   r-   r.   rQ   rX   r   r
   rR   r<   r>   r   r*   rS   rZ   r@   r[   r]   r   r   r   r   rE      s*    rE   r   )r   r   )rQ   r/   cryptographyr   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   r   r   objectr   r3   r@   ABCMetar   DHParametersWithSerializationr<   DHPublicKeyWithSerializationrE   DHPrivateKeyWithSerializationr   r   r   r   <module>   s    '!!,