o
    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e	de	dej
e d	d
f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)_get_backend)Backend)serializationi   	generatorkey_sizebackendreturnDHParametersc                 C   s   t |}|| |S N)r   Zgenerate_dh_parameters)r   r   r    r   k/var/www/secure340b-portal/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/asymmetric/dh.pygenerate_parameters   s   r   c                	   @   s~   e Zd Zddededeje ddfddZdd	 Zd
d Z	ddeje	 ddfddZ
edd Zedd Zedd ZdS )DHParameterNumbersNpgqr   c                 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__3      
zDHParameterNumbers.__ne__r   r	   c                 C      t |}|| S r
   )r   Zload_dh_parameter_numbersr   r   r   r   r   
parameters6      
zDHParameterNumbers.parametersc                 C      | j S r
   )r   r   r   r   r   <lambda><       zDHParameterNumbers.<lambda>c                 C   r*   r
   )r   r+   r   r   r   r,   =   r-   c                 C   r*   r
   )r   r+   r   r   r   r,   >   r-   r
   )__name__
__module____qualname__r   typingOptionalr   r"   r$   r   r(   propertyr   r   r   r   r   r   r   r      s    "
r   c                   @   f   e Zd ZdededdfddZdd Zd	d
 Z	ddej	e
 ddfddZedd Zedd ZdS )DHPublicNumbersyparameter_numbersr   Nc                 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   r6   r7   r   r   r   r   B      


zDHPublicNumbers.__init__c                 C   &   t |tstS | j|jko| j|jkS r
   )r   r5   r   r9   r:   r    r   r   r   r"   N   
   

zDHPublicNumbers.__eq__c                 C   r#   r
   r   r    r   r   r   r$   W   r%   zDHPublicNumbers.__ne__r   DHPublicKeyc                 C   r&   r
   )r   Zload_dh_public_numbersr'   r   r   r   
public_keyZ   r)   zDHPublicNumbers.public_keyc                 C   r*   r
   )r9   r+   r   r   r   r,   `   r-   zDHPublicNumbers.<lambda>c                 C   r*   r
   )r:   r+   r   r   r   r,   a   r-   r
   )r.   r/   r0   r   r   r   r"   r$   r1   r2   r   r?   r3   r6   r7   r   r   r   r   r5   A       	
r5   c                   @   r4   )DHPrivateNumbersxpublic_numbersr   Nc                 C   r8   )Nzx must be an integer.z6public_numbers must be an instance of DHPublicNumbers.)r   r   r   r5   _x_public_numbers)r   rB   rC   r   r   r   r   e   r;   zDHPrivateNumbers.__init__c                 C   r<   r
   )r   rA   r   rD   rE   r    r   r   r   r"   q   r=   zDHPrivateNumbers.__eq__c                 C   r#   r
   r   r    r   r   r   r$   z   r%   zDHPrivateNumbers.__ne__r   DHPrivateKeyc                 C   r&   r
   )r   Zload_dh_private_numbersr'   r   r   r   private_key}   r)   zDHPrivateNumbers.private_keyc                 C   r*   r
   )rE   r+   r   r   r   r,      r-   zDHPrivateNumbers.<lambda>c                 C   r*   r
   )rD   r+   r   r   r   r,      r-   r
   )r.   r/   r0   r   r5   r   r"   r$   r1   r2   r   rG   r3   rC   rB   r   r   r   r   rA   d   r@   rA   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   rF   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   rH   )z=
        Returns the parameters serialized as bytes.
        Nr   r   rK   r   r   r   r   parameter_bytes   rJ   zDHParameters.parameter_bytesc                 C   rH   )z/
        Returns a DHParameterNumbers.
        Nr   r+   r   r   r   r7      rJ   zDHParameters.parameter_numbersN)r   rF   )
r.   r/   r0   abcabstractmethodrI   bytesrN   r   r7   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   rH   z6
        The bit length of the prime modulus.
        Nr   r+   r   r   r   r      rJ   zDHPublicKey.key_sizec                 C   rH   )zJ
        The DHParameters object associated with this public key.
        Nr   r+   r   r   r   r(      rJ   zDHPublicKey.parametersc                 C   rH   )z,
        Returns a DHPublicNumbers.
        Nr   r+   r   r   r   rC      rJ   zDHPublicKey.public_numbersrK   rL   r   zserialization.PublicFormatc                 C   rH   z6
        Returns the key serialized as bytes.
        Nr   rM   r   r   r   public_bytes   rJ   zDHPublicKey.public_bytesN)r.   r/   r0   rO   abstractpropertyr   r   rP   r	   r(   r5   rC   rQ   rU   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 )rF   r   c                 C   rH   rS   r   r+   r   r   r   r      rJ   zDHPrivateKey.key_sizec                 C   rH   )zC
        The DHPublicKey associated with this private key.
        Nr   r+   r   r   r   r?      rJ   zDHPrivateKey.public_keyc                 C   rH   )zK
        The DHParameters object associated with this private key.
        Nr   r+   r   r   r   r(      rJ   zDHPrivateKey.parameterspeer_public_keyc                 C   rH   )zn
        Given peer's DHPublicKey, carry out the key exchange and
        return shared key as bytes.
        Nr   )r   rW   r   r   r   exchange   rJ   zDHPrivateKey.exchangec                 C   rH   )z-
        Returns a DHPrivateNumbers.
        Nr   r+   r   r   r   private_numbers   rJ   zDHPrivateKey.private_numbersrK   rL   r   zserialization.PrivateFormatencryption_algorithmz(serialization.KeySerializationEncryptionc                 C   rH   rT   r   )r   rK   r   rZ   r   r   r   private_bytes   rJ   zDHPrivateKey.private_bytesN)r.   r/   r0   rO   rV   r   r   rP   r>   r?   r	   r(   rQ   rX   rA   rY   r[   r   r   r   r   rF      s*    rF   r
   )rO   r1   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   Zcryptography.hazmat.primitivesr   r   r   r2   r   objectr   r5   rA   ABCMetar	   ZDHParametersWithSerializationr>   ZDHPublicKeyWithSerializationrF   ZDHPrivateKeyWithSerializationr   r   r   r   <module>   s2   
)##,