3 l�_�@s�ddlmZmZmZddlZddlZddlmZddlm Z ddd�Z Gdd�de �Z Gd d �d e �Z Gd d �d e �Zejej�Gd d�de ��ZeZejej�Gdd�de ��Zejej�Gdd�de��Zejej�Gdd�de ��ZeZdS)�)�absolute_import�division�print_functionN)�utils)� _get_backendcCst|�}|j||�S)N)rZgenerate_dh_parameters)� generator�key_size�backend�r �/usr/lib64/python3.6/dh.py�generate_parameterssr c@sBeZdZdd�Zdd�Zdd�Zd dd �Zejd �Z ejd �Z dS) �DHPrivateNumberscCs6t|tj�std��t|t�s&td��||_||_dS)Nzx 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  zDHPrivateNumbers.__init__cCs&t|t�stS|j|jko$|j|jkS)N)rr �NotImplementedrr)r�otherr r r �__eq__!s  zDHPrivateNumbers.__eq__cCs ||k S)Nr )rrr r r �__ne__*szDHPrivateNumbers.__ne__NcCst|�}|j|�S)N)rZload_dh_private_numbers)rr r r r � private_key-szDHPrivateNumbers.private_keyrr)N) �__name__� __module__� __qualname__rrrrr�read_only_propertyrrr r r r r s     r c@sBeZdZdd�Zdd�Zdd�Zd dd �Zejd �Z ejd �Z dS) rcCs6t|tj�std��t|t�s&td��||_||_dS)Nzy must be an integer.z5parameters must be an instance of DHParameterNumbers.)rrrr�DHParameterNumbers�_y�_parameter_numbers)r�y�parameter_numbersr r r r6s  zDHPublicNumbers.__init__cCs&t|t�stS|j|jko$|j|jkS)N)rrrr#r$)rrr r r rBs  zDHPublicNumbers.__eq__cCs ||k S)Nr )rrr r r rKszDHPublicNumbers.__ne__NcCst|�}|j|�S)N)rZload_dh_public_numbers)rr r r r � public_keyNszDHPublicNumbers.public_keyr#r$)N) rrr rrrr'rr!r%r&r r r r r5s     rc@sNeZdZd dd�Zdd�Zdd�Zddd �Zejd �Z ejd �Z ejd �Z dS)r"NcCsht|tj� st|tj� r$td��|dk rBt|tj� rBtd��|dkrRtd��||_||_||_dS)Nzp and g must be integerszq must be integer or None�z!DH generator must be 2 or greater)rrrr� ValueError�_p�_g�_q)r�p�g�qr r r rWs zDHParameterNumbers.__init__cCs2t|t�stS|j|jko0|j|jko0|j|jkS)N)rr"rr*r+r,)rrr r r rfs zDHParameterNumbers.__eq__cCs ||k S)Nr )rrr r r rnszDHParameterNumbers.__ne__cCst|�}|j|�S)N)rZload_dh_parameter_numbers)rr r r r � parametersqszDHParameterNumbers.parametersr*r+r,)N)N) rrr rrrr0rr!r-r.r/r r r r r"Vs    r"c@s6eZdZejdd��Zejdd��Zejdd��ZdS)� DHParameterscCsdS)z7 Generates and returns a DHPrivateKey. Nr )rr r r �generate_private_key|sz!DHParameters.generate_private_keycCsdS)z= Returns the parameters serialized as bytes. Nr )r�encoding�formatr r r �parameter_bytes�szDHParameters.parameter_bytescCsdS)z/ Returns a DHParameterNumbers. Nr )rr r r r&�szDHParameters.parameter_numbersN)rrr �abc�abstractmethodr2r5r&r r r r r1zsr1c@sDeZdZejdd��Zejdd��Zejdd��Zejdd��Z d S) � DHPrivateKeycCsdS)z6 The bit length of the prime modulus. Nr )rr r r r�szDHPrivateKey.key_sizecCsdS)zC The DHPublicKey associated with this private key. Nr )rr r r r'�szDHPrivateKey.public_keycCsdS)zK The DHParameters object associated with this private key. Nr )rr r r r0�szDHPrivateKey.parameterscCsdS)zn Given peer's DHPublicKey, carry out the key exchange and return shared key as bytes. Nr )rZpeer_public_keyr r r �exchange�szDHPrivateKey.exchangeN) rrr r6�abstractpropertyrr7r'r0r9r r r r r8�sr8c@s(eZdZejdd��Zejdd��ZdS)�DHPrivateKeyWithSerializationcCsdS)z- Returns a DHPrivateNumbers. Nr )rr r r �private_numbers�sz-DHPrivateKeyWithSerialization.private_numberscCsdS)z6 Returns the key serialized as bytes. Nr )rr3r4Zencryption_algorithmr r r � private_bytes�sz+DHPrivateKeyWithSerialization.private_bytesN)rrr r6r7r<r=r r r r r;�sr;c@sDeZdZejdd��Zejdd��Zejdd��Zejdd��Z d S) � DHPublicKeycCsdS)z6 The bit length of the prime modulus. Nr )rr r r r�szDHPublicKey.key_sizecCsdS)zJ The DHParameters object associated with this public key. Nr )rr r r r0�szDHPublicKey.parameterscCsdS)z, Returns a DHPublicNumbers. Nr )rr r r r�szDHPublicKey.public_numberscCsdS)z6 Returns the key serialized as bytes. Nr )rr3r4r r r � public_bytes�szDHPublicKey.public_bytesN) rrr r6r:rr7r0rr?r r r r r>�sr>)N)Z __future__rrrr6rZ cryptographyrZcryptography.hazmat.backendsrr �objectr rr"Z add_metaclass�ABCMetar1ZDHParametersWithSerializationr8r;r>ZDHPublicKeyWithSerializationr r r r �s$   !!$