U
    *”}f  ã                   @   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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_backendc                 C   s   t |ƒ}| | |¡S ©N)r   Zgenerate_dh_parameters)Ú	generatorÚkey_sizeÚbackend© r   úP/tmp/pip-unpacked-wheel-x36vw73o/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_key-   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   6   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   B   s
    

þzDHPublicNumbers.__eq__c                 C   s
   | |k S r   r   r   r   r   r   r   K   s    zDHPublicNumbers.__ne__Nc                 C   s   t |ƒ}| | ¡S r   )r   Zload_dh_public_numbersr   r   r   r   Ú
public_keyN   s    zDHPublicNumbers.public_keyr&   r'   )N)r!   r"   r#   r   r   r   r*   r   r$   r(   r)   r   r   r   r   r   5   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   sb   t |tjƒrt |tjƒs tdƒ‚|d k	r<t |tjƒs<tdƒ‚|dk rLtdƒ‚|| _|| _|| _d S )Nzp and g must be integerszq must be integer or Noneé   z!DH generator must be 2 or greater)r   r   r   r   Ú
ValueErrorÚ_pÚ_gÚ_q)r   ÚpÚgÚqr   r   r   r   W   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   r-   r.   r/   r   r   r   r   r   f   s    
"ÿzDHParameterNumbers.__eq__c                 C   s
   | |k S r   r   r   r   r   r   r   n   s    zDHParameterNumbers.__ne__c                 C   s   t |ƒ}| | ¡S r   )r   Zload_dh_parameter_numbersr   r   r   r   Ú
parametersq   s    zDHParameterNumbers.parametersr-   r.   r/   )N)N)r!   r"   r#   r   r   r   r3   r   r$   r0   r1   r2   r   r   r   r   r%   V   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   ÚencodingÚformatr   r   r   Úparameter_bytes‚   s    zDHParameters.parameter_bytesc                 C   s   dS )z/
        Returns a DHParameterNumbers.
        Nr   r5   r   r   r   r)   ˆ   s    zDHParameters.parameter_numbersN)r!   r"   r#   ÚabcÚabstractmethodr6   r:   r)   r   r   r   r   r4   z   s   

r4   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   r5   r   r   r   r	   ”   s    zDHPrivateKey.key_sizec                 C   s   dS )zC
        The DHPublicKey associated with this private key.
        Nr   r5   r   r   r   r*   š   s    zDHPrivateKey.public_keyc                 C   s   dS )zK
        The DHParameters object associated with this private key.
        Nr   r5   r   r   r   r3       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*   r3   r?   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   r5   r   r   r   Úprivate_numbers°   s    z-DHPrivateKeyWithSerialization.private_numbersc                 C   s   dS ©z6
        Returns the key serialized as bytes.
        Nr   )r   r8   r9   Zencryption_algorithmr   r   r   Úprivate_bytes¶   s    z+DHPrivateKeyWithSerialization.private_bytesN)r!   r"   r#   r;   r<   rB   rD   r   r   r   r   rA   ®   s   
rA   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   r5   r   r   r   r	   ¿   s    zDHPublicKey.key_sizec                 C   s   dS )zJ
        The DHParameters object associated with this public key.
        Nr   r5   r   r   r   r3   Å   s    zDHPublicKey.parametersc                 C   s   dS )z,
        Returns a DHPublicNumbers.
        Nr   r5   r   r   r   r   Ë   s    zDHPublicKey.public_numbersc                 C   s   dS rC   r   r7   r   r   r   Úpublic_bytesÑ   s    zDHPublicKey.public_bytesN)
r!   r"   r#   r;   r@   r	   r<   r3   r   rF   r   r   r   r   rE   ½   s   


rE   )N)Ú
__future__r   r   r   r;   r   Zcryptographyr   Zcryptography.hazmat.backendsr   r   Úobjectr   r   r%   Úadd_metaclassÚABCMetar4   ZDHParametersWithSerializationr=   rA   rE   ZDHPublicKeyWithSerializationr   r   r   r   Ú<module>   s$   
!!$



