B
    `                 @   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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   DHParameters)returnc             C   s   t |}|| |S )N)r   Zgenerate_dh_parameters)	generatorkey_sizebackend r
   [/home/dcms/DCMS/lib/python3.7/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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 k	r6t |ts6td|dk rFtd| tk r`t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o0| j|jko0| j|jkS )N)r   r   NotImplementedr   r   r   )r   otherr
   r
   r   __eq__)   s    
zDHParameterNumbers.__eq__c             C   s
   | |k S )Nr
   )r   r   r
   r
   r   __ne__1   s    zDHParameterNumbers.__ne__c             C   s   t |}|| S )N)r   Zload_dh_parameter_numbers)r   r	   r
   r
   r   
parameters4   s    zDHParameterNumbers.parametersr   r   r   )N)N)__name__
__module____qualname__r   typingOptionalr   r    r!   r"   r   read_only_propertyr   r   r   r
   r
   r
   r   r      s   


r   c               @   sN   e Zd ZedddZdd Zdd Zdd	d
ddZe	dZ
e	dZdS )DHPublicNumbers)parameter_numbersc             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   yr*   r
   r
   r   r   >   s    

zDHPublicNumbers.__init__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r)   r   r+   r,   )r   r   r
   r
   r   r    J   s    
zDHPublicNumbers.__eq__c             C   s
   | |k S )Nr
   )r   r   r
   r
   r   r!   S   s    zDHPublicNumbers.__ne__NDHPublicKey)r   c             C   s   t |}|| S )N)r   Zload_dh_public_numbers)r   r	   r
   r
   r   
public_keyV   s    zDHPublicNumbers.public_keyr+   r,   )N)r#   r$   r%   r   r   r    r!   r/   r   r(   r-   r*   r
   r
   r
   r   r)   =   s   	
r)   c               @   sN   e Zd ZedddZdd Zdd Zdd	d
ddZe	dZ
e	dZdS )DHPrivateNumbers)public_numbersc             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   r)   _x_public_numbers)r   xr1   r
   r
   r   r   _   s    

zDHPrivateNumbers.__init__c             C   s&   t |tstS | j|jko$| j|jkS )N)r   r0   r   r2   r3   )r   r   r
   r
   r   r    k   s    
zDHPrivateNumbers.__eq__c             C   s
   | |k S )Nr
   )r   r   r
   r
   r   r!   t   s    zDHPrivateNumbers.__ne__NDHPrivateKey)r   c             C   s   t |}|| S )N)r   Zload_dh_private_numbers)r   r	   r
   r
   r   private_keyw   s    zDHPrivateNumbers.private_keyr3   r2   )N)r#   r$   r%   r)   r   r    r!   r6   r   r(   r1   r4   r
   r
   r
   r   r0   ^   s   	
r0   c               @   sL   e Zd ZejddddZejddeddd	Zejedd
dZ	dS )r   r5   )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_keyzserialization.Encodingzserialization.ParameterFormat)encodingr   r   c             C   s   dS )z=
        Returns the parameters serialized as bytes.
        Nr
   )r   r8   r   r
   r
   r   parameter_bytes   s    zDHParameters.parameter_bytesc             C   s   dS )z/
        Returns a DHParameterNumbers.
        Nr
   )r   r
   r
   r   r*      s    zDHParameters.parameter_numbersN)
r#   r$   r%   abcabstractmethodr7   bytesr9   r   r*   r
   r
   r
   r   r      s   )	metaclassc               @   s`   e Zd ZejedddZejedddZ	eje
dddZejdd	ed
ddZdS )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_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   r1      s    zDHPublicKey.public_numberszserialization.Encodingzserialization.PublicFormat)r8   r   r   c             C   s   dS )z6
        Returns the key serialized as bytes.
        Nr
   )r   r8   r   r
   r
   r   public_bytes   s    zDHPublicKey.public_bytesN)r#   r$   r%   r:   abstractpropertyr   r   r;   r   r"   r)   r1   r<   r>   r
   r
   r
   r   r.      s   r.   c               @   s   e Zd Z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dddedddZdS )r5   )r   c             C   s   dS )z6
        The bit length of the prime modulus.
        Nr
   )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   r/      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   r@   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_numberszserialization.Encodingzserialization.PrivateFormatz(serialization.KeySerializationEncryption)r8   r   encryption_algorithmr   c             C   s   dS )z6
        Returns the key serialized as bytes.
        Nr
   )r   r8   r   rC   r
   r
   r   private_bytes   s    	zDHPrivateKey.private_bytesN)r#   r$   r%   r:   r?   r   r   r;   r.   r/   r   r"   r<   rA   r0   rB   rD   r
   r
   r
   r   r5      s   r5   )N)r:   r&   Zcryptographyr   Zcryptography.hazmat.backendsr   Zcryptography.hazmat.primitivesr   r   r   objectr   r)   r0   ABCMetar   ZDHParametersWithSerializationr.   ZDHPublicKeyWithSerializationr5   ZDHPrivateKeyWithSerializationr
   r
   r
   r   <module>   s   '!!,