a
     `                     @   s   d dl mZmZmZ d dlZd dlZd dlmZ d dlm	Z	 dZ
dddZG dd	 d	eZG d
d deZG dd deZeejG dd deZeZeejG dd deZeejG dd deZeejG dd deZeZdS )    )absolute_importdivisionprint_functionN)utils)_get_backendi   c                 C   s   t |}|| |S N)r   Z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 Zdd Zdd Zddd	Zed
Z	edZ
dS )DHPrivateNumbersc                 C   s6   t |tjstdt |ts&td|| _|| _d S )Nzx must be an integer.z6public_numbers must be an instance of DHPublicNumbers.)
isinstancesixinteger_types	TypeErrorDHPublicNumbers_x_public_numbers)selfxpublic_numbersr   r   r   __init__   s    
zDHPrivateNumbers.__init__c                 C   s&   t |tstS | j|jko$| j|jkS r   )r   r   NotImplementedr   r   r   otherr   r   r   __eq__$   s
    

zDHPrivateNumbers.__eq__c                 C   s
   | |k S r   r   r   r   r   r   __ne__-   s    zDHPrivateNumbers.__ne__Nc                 C   s   t |}|| S r   )r   Zload_dh_private_numbersr   r
   r   r   r   private_key0   s    zDHPrivateNumbers.private_keyr   r   )N)__name__
__module____qualname__r   r   r   r    r   read_only_propertyr   r   r   r   r   r   r      s   	

r   c                   @   sB   e Zd Zdd Zdd Zdd Zddd	Zed
Z	edZ
dS )r   c                 C   s6   t |tj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   DHParameterNumbers_y_parameter_numbers)r   yparameter_numbersr   r   r   r   9   s    
zDHPublicNumbers.__init__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   E   s
    

zDHPublicNumbers.__eq__c                 C   s
   | |k S r   r   r   r   r   r   r   N   s    zDHPublicNumbers.__ne__Nc                 C   s   t |}|| S r   )r   Zload_dh_public_numbersr   r   r   r   
public_keyQ   s    zDHPublicNumbers.public_keyr&   r'   )N)r!   r"   r#   r   r   r   r*   r   r$   r(   r)   r   r   r   r   r   8   s   	

r   c                   @   sN   e Zd ZdddZdd Zdd Zddd	Zed
Z	edZ
edZdS )r%   Nc                 C   s|   t |tjrt |tjs td|d ur<t |tjs<td|dk rLtd| tk rft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)r   r   r   r   
ValueError
bit_length_MIN_MODULUS_SIZEformat_p_g_q)r   pgqr   r   r   r   Z   s    zDHParameterNumbers.__init__c                 C   s2   t |tstS | j|jko0| j|jko0| j|jkS r   )r   r%   r   r0   r1   r2   r   r   r   r   r   n   s    
"zDHParameterNumbers.__eq__c                 C   s
   | |k S r   r   r   r   r   r   r   v   s    zDHParameterNumbers.__ne__c                 C   s   t |}|| S r   )r   Zload_dh_parameter_numbersr   r   r   r   
parametersy   s    zDHParameterNumbers.parametersr0   r1   r2   )N)N)r!   r"   r#   r   r   r   r6   r   r$   r3   r4   r5   r   r   r   r   r%   Y   s   



r%   c                   @   s6   e Zd Zejdd Zejdd Zejdd ZdS )DHParametersc                 C   s   dS )z7
        Generates and returns a DHPrivateKey.
        Nr   r   r   r   r   generate_private_key   s    z!DHParameters.generate_private_keyc                 C   s   dS )z=
        Returns the parameters serialized as bytes.
        Nr   r   encodingr/   r   r   r   parameter_bytes   s    zDHParameters.parameter_bytesc                 C   s   dS )z/
        Returns a DHParameterNumbers.
        Nr   r8   r   r   r   r)      s    zDHParameters.parameter_numbersN)r!   r"   r#   abcabstractmethodr9   r<   r)   r   r   r   r   r7      s   

r7   c                   @   sD   e Zd Zejdd Zejdd Zejdd Zejdd Z	d	S )
DHPrivateKeyc                 C   s   dS z6
        The bit length of the prime modulus.
        Nr   r8   r   r   r   r	      s    zDHPrivateKey.key_sizec                 C   s   dS )zC
        The DHPublicKey associated with this private key.
        Nr   r8   r   r   r   r*      s    zDHPrivateKey.public_keyc                 C   s   dS )zK
        The DHParameters object associated with this private key.
        Nr   r8   r   r   r   r6      s    zDHPrivateKey.parametersc                 C   s   dS )zn
        Given peer's DHPublicKey, carry out the key exchange and
        return shared key as bytes.
        Nr   )r   Zpeer_public_keyr   r   r   exchange   s    zDHPrivateKey.exchangeN)
r!   r"   r#   r=   abstractpropertyr	   r>   r*   r6   rA   r   r   r   r   r?      s   


r?   c                   @   s(   e Zd Zejdd Zejdd ZdS )DHPrivateKeyWithSerializationc                 C   s   dS )z-
        Returns a DHPrivateNumbers.
        Nr   r8   r   r   r   private_numbers   s    z-DHPrivateKeyWithSerialization.private_numbersc                 C   s   dS z6
        Returns the key serialized as bytes.
        Nr   )r   r;   r/   Zencryption_algorithmr   r   r   private_bytes   s    z+DHPrivateKeyWithSerialization.private_bytesN)r!   r"   r#   r=   r>   rD   rF   r   r   r   r   rC      s   
rC   c                   @   sD   e Zd Zejdd Zejdd Zejdd Zejdd Z	d	S )
DHPublicKeyc                 C   s   dS r@   r   r8   r   r   r   r	      s    zDHPublicKey.key_sizec                 C   s   dS )zJ
        The DHParameters object associated with this public key.
        Nr   r8   r   r   r   r6      s    zDHPublicKey.parametersc                 C   s   dS )z,
        Returns a DHPublicNumbers.
        Nr   r8   r   r   r   r      s    zDHPublicKey.public_numbersc                 C   s   dS rE   r   r:   r   r   r   public_bytes   s    zDHPublicKey.public_bytesN)
r!   r"   r#   r=   rB   r	   r>   r6   r   rH   r   r   r   r   rG      s   


rG   )N)Z
__future__r   r   r   r=   r   Zcryptographyr   Zcryptography.hazmat.backendsr   r.   r   objectr   r   r%   Zadd_metaclassABCMetar7   ZDHParametersWithSerializationr?   rC   rG   ZDHPublicKeyWithSerializationr   r   r   r   <module>   s&   
!!)



