o
    ee                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ 	ddddZ	G dd dZ
G dd dZG dd dZG dd dejdZeZeejj G dd dejdZeZeejj G dd dejdZeZeejj dS )    )annotationsN)openssl)_serialization	generatorintkey_sizebackend
typing.AnyreturnDHParametersc                 C  s   ddl m} || |S Nr   )r   ),cryptography.hazmat.backends.openssl.backendr   Zgenerate_dh_parameters)r   r   r   ossl r   \D:\Projects\ConvertPro\env\Lib\site-packages\cryptography/hazmat/primitives/asymmetric/dh.pygenerate_parameters   s   r   c                   @  sX   e Zd Zddd	d
ZdddZddddZedddZedddZed ddZ	dS )!DHParameterNumbersNpr   gqtyping.Optional[int]r
   Nonec                 C  s   t |tr
t |tstd|d urt |tstd|dk r#td| tjjk r5tdtjj d|| _|| _	|| _
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 z-bit)
isinstancer   	TypeError
ValueError
bit_lengthrust_openssldhZMIN_MODULUS_SIZE_p_g_q)selfr   r   r   r   r   r   __init__   s   
zDHParameterNumbers.__init__otherobjectboolc                 C  s2   t |tstS | j|jko| j|jko| j|jkS N)r   r   NotImplementedr   r    r!   r"   r$   r   r   r   __eq__*   s   
"zDHParameterNumbers.__eq__r   r	   r   c                 C     ddl m} || S r   )r   r   Zload_dh_parameter_numbersr"   r   r   r   r   r   
parameters2      
zDHParameterNumbers.parametersc                 C     | j S r'   )r   r"   r   r   r   r   9      zDHParameterNumbers.pc                 C  r/   r'   )r    r0   r   r   r   r   =   r1   zDHParameterNumbers.gc                 C  r/   r'   )r!   r0   r   r   r   r   A   r1   zDHParameterNumbers.qr'   )r   r   r   r   r   r   r
   r   r$   r%   r
   r&   )r   r	   r
   r   r
   r   )r
   r   )
__name__
__module____qualname__r#   r*   r-   propertyr   r   r   r   r   r   r   r      s    
r   c                   @  H   e Zd ZdddZdddZddddZedddZedddZdS )DHPublicNumbersyr   parameter_numbersr   r
   r   c                 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"   r:   r;   r   r   r   r#   G      


zDHPublicNumbers.__init__r$   r%   r&   c                 C  &   t |tstS | j|jko| j|jkS r'   )r   r9   r(   r=   r>   r)   r   r   r   r*   S   
   

zDHPublicNumbers.__eq__Nr   r	   DHPublicKeyc                 C  r+   r   )r   r   Zload_dh_public_numbersr,   r   r   r   
public_key\   r.   zDHPublicNumbers.public_keyc                 C  r/   r'   )r=   r0   r   r   r   r:   c   r1   zDHPublicNumbers.yc                 C  r/   r'   )r>   r0   r   r   r   r;   g   r1   z!DHPublicNumbers.parameter_numbers)r:   r   r;   r   r
   r   r2   r'   )r   r	   r
   rB   r3   r
   r   )	r4   r5   r6   r#   r*   rC   r7   r:   r;   r   r   r   r   r9   F       

	r9   c                   @  r8   )DHPrivateNumbersxr   public_numbersr9   r
   r   c                 C  r<   )Nzx must be an integer.z6public_numbers must be an instance of DHPublicNumbers.)r   r   r   r9   _x_public_numbers)r"   rG   rH   r   r   r   r#   m   r?   zDHPrivateNumbers.__init__r$   r%   r&   c                 C  r@   r'   )r   rF   r(   rI   rJ   r)   r   r   r   r*   y   rA   zDHPrivateNumbers.__eq__Nr   r	   DHPrivateKeyc                 C  r+   r   )r   r   Zload_dh_private_numbersr,   r   r   r   private_key   r.   zDHPrivateNumbers.private_keyc                 C  r/   r'   )rJ   r0   r   r   r   rH      r1   zDHPrivateNumbers.public_numbersc                 C  r/   r'   )rI   r0   r   r   r   rG      r1   zDHPrivateNumbers.x)rG   r   rH   r9   r
   r   r2   r'   )r   r	   r
   rK   r
   r9   r3   )	r4   r5   r6   r#   r*   rL   r7   rH   rG   r   r   r   r   rF   l   rE   rF   c                   @  s<   e Zd ZejdddZejdd
dZejdddZdS )r   r
   rK   c                 C     dS )z7
        Generates and returns a DHPrivateKey.
        Nr   r0   r   r   r   generate_private_key       z!DHParameters.generate_private_keyencoding_serialization.Encodingformat_serialization.ParameterFormatbytesc                 C  rN   )z=
        Returns the parameters serialized as bytes.
        Nr   r"   rQ   rS   r   r   r   parameter_bytes   rP   zDHParameters.parameter_bytesr   c                 C  rN   )z/
        Returns a DHParameterNumbers.
        Nr   r0   r   r   r   r;      rP   zDHParameters.parameter_numbersN)r
   rK   )rQ   rR   rS   rT   r
   rU   rD   )r4   r5   r6   abcabstractmethodrO   rW   r;   r   r   r   r   r      s    	)	metaclassc                   @  s`   e Zd ZeejdddZejdddZejdd	d
ZejdddZ	ejdddZ
dS )rB   r
   r   c                 C  rN   z6
        The bit length of the prime modulus.
        Nr   r0   r   r   r   r      rP   zDHPublicKey.key_sizer   c                 C  rN   )zJ
        The DHParameters object associated with this public key.
        Nr   r0   r   r   r   r-      rP   zDHPublicKey.parametersr9   c                 C  rN   )z,
        Returns a DHPublicNumbers.
        Nr   r0   r   r   r   rH      rP   zDHPublicKey.public_numbersrQ   rR   rS   _serialization.PublicFormatrU   c                 C  rN   z6
        Returns the key serialized as bytes.
        Nr   rV   r   r   r   public_bytes   rP   zDHPublicKey.public_bytesr$   r%   r&   c                 C  rN   )z"
        Checks equality.
        Nr   r)   r   r   r   r*      rP   zDHPublicKey.__eq__Nr3   r
   r   rM   )rQ   rR   rS   r\   r
   rU   r2   )r4   r5   r6   r7   rX   rY   r   r-   rH   r^   r*   r   r   r   r   rB      s    	rB   c                   @  sp   e Zd ZeejdddZejdddZejdd	d
ZejdddZ	ejdddZ
ejd ddZdS )!rK   r
   r   c                 C  rN   r[   r   r0   r   r   r   r      rP   zDHPrivateKey.key_sizerB   c                 C  rN   )zC
        The DHPublicKey associated with this private key.
        Nr   r0   r   r   r   rC      rP   zDHPrivateKey.public_keyr   c                 C  rN   )zK
        The DHParameters object associated with this private key.
        Nr   r0   r   r   r   r-      rP   zDHPrivateKey.parameterspeer_public_keyrU   c                 C  rN   )zn
        Given peer's DHPublicKey, carry out the key exchange and
        return shared key as bytes.
        Nr   )r"   r`   r   r   r   exchange   rP   zDHPrivateKey.exchangerF   c                 C  rN   )z-
        Returns a DHPrivateNumbers.
        Nr   r0   r   r   r   private_numbers   rP   zDHPrivateKey.private_numbersrQ   rR   rS   _serialization.PrivateFormatencryption_algorithm)_serialization.KeySerializationEncryptionc                 C  rN   r]   r   )r"   rQ   rS   rd   r   r   r   private_bytes   rP   zDHPrivateKey.private_bytesNr3   )r
   rB   r_   )r`   rB   r
   rU   )r
   rF   )rQ   rR   rS   rc   rd   re   r
   rU   )r4   r5   r6   r7   rX   rY   r   rC   r-   ra   rb   rf   r   r   r   r   rK      s    rK   r'   )r   r   r   r   r   r	   r
   r   )
__future__r   rX   typingZ"cryptography.hazmat.bindings._rustr   r   Zcryptography.hazmat.primitivesr   r   r   r9   rF   ABCMetar   ZDHParametersWithSerializationregisterr   rB   ZDHPublicKeyWithSerializationrK   ZDHPrivateKeyWithSerializationr   r   r   r   <module>   s&   0&&%-