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    '!!,