o
     `'                     @   s   d dl mZmZmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ dd Zdd	 ZeejG d
d deZdd ZeejG dd deZeejG dd deZdS )    )absolute_importdivisionprint_function)utils)UnsupportedAlgorithm_Reasons)serialization)dhc                 C   s   |j }|j}|| }|||jk |||j}|jrD|d}|	| |j||j |
|d }|||j||j}||dk |S N	BIGNUM **r      )_lib_ffiZDHparams_dupopenssl_assertNULLgcZDH_freeZCRYPTOGRAPHY_IS_LIBRESSLnewDH_get0_pqgBN_dupZDH_set0_pqg)dh_cdatabackendlibffiparam_cdataqZq_dupres r   }home/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/dh.py_dh_params_dup   s   

r   c                 C   s   t | |}t||S N)r   _DHParameters)r   r   r   r   r   r   _dh_cdata_to_parameters   s   

r!   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r    c                 C   s   || _ || _d S r   )_backend	_dh_cdata)selfr   r   r   r   r   __init__&   s   
z_DHParameters.__init__c                 C   s   | j jd}| j jd}| j jd}| j j| j||| | j |d | j jjk | j |d | j jjk |d | j jjkrFd }n| j |d }t	j
| j |d | j |d |dS )Nr   r   pgr   )r"   r   r   r   r   r#   r   r   
_bn_to_intr	   DHParameterNumbers)r$   r'   r(   r   q_valr   r   r   parameter_numbers*   s   z_DHParameters.parameter_numbersc                 C   s   | j | S r   )r"   Zgenerate_dh_private_keyr$   r   r   r   generate_private_key;   s   z"_DHParameters.generate_private_keyc                 C   s~   |t jjur
td| jjjs6| jjd}| jj	| j
| jjj|| jjj |d | jjjkr6tdtj| j||| j
S )Nz%Only PKCS3 serialization is supportedr   r   'DH X9.42 serialization is not supported)r   ZParameterFormatZPKCS3
ValueErrorr"   r   Cryptography_HAS_EVP_PKEY_DHXr   r   r   r#   r   r   r   UNSUPPORTED_SERIALIZATIONZ_parameter_bytesr$   encodingformatr   r   r   r   parameter_bytes>   s    
z_DHParameters.parameter_bytesN)__name__
__module____qualname__r%   r,   r.   r6   r   r   r   r   r    $   s
    r    c                 C   sL   | j d}| j||| j j| j j | |d | j jk | j|d S )Nr   r   )r   r   r   r   r   r   ZBN_num_bits)r   r   r'   r   r   r   _get_dh_num_bitsR   s   r:   c                   @   sH   e Zd Zdd Zedd Zdd Zdd Zd	d
 Zdd Z	dd Z
dS )_DHPrivateKeyc                 C   s&   || _ || _|| _| j j|| _d S r   )r"   r#   	_evp_pkeyr   ZDH_size_key_size_bytesr$   r   r   evp_pkeyr   r   r   r%   [      z_DHPrivateKey.__init__c                 C      t | j| jS r   )r:   r"   r#   r-   r   r   r   key_sizea   s   z_DHPrivateKey.key_sizec                 C   sT  | j jd}| j jd}| j jd}| j j| j||| | j |d | j jjk | j |d | j jjk |d | j jjkrFd }n| j |d }| j jd}| j jd}| j j	| j|| | j |d | j jjk | j |d | j jjk t
jt
jt
j| j |d | j |d |d| j |d d| j |d dS )Nr   r   r&   r,   y)public_numbersx)r"   r   r   r   r   r#   r   r   r)   DH_get0_keyr	   ZDHPrivateNumbersDHPublicNumbersr*   )r$   r'   r(   r   r+   pub_keyZpriv_keyr   r   r   private_numberse   s2   z_DHPrivateKey.private_numbersc                 C   s   | j jd| j}| j jd}| j j|j|| j jj | j |d | j jjk | j j	||d | j}|dkrD| j 
 }td|| j |dk | j j|d | }| jt| }|dkrhd| | }|S )Nzunsigned char[]r   r   zKError computing shared key. Public key is likely invalid for this exchange.r       )r"   r   r   r=   r   rG   r#   r   r   ZDH_compute_keyZ_consume_errors_with_textr0   bufferlen)r$   Zpeer_public_keybufrI   r   Zerrors_with_textkeypadr   r   r   exchange   s*   
z_DHPrivateKey.exchangec                 C   s   t | j| j}| jjd}| jj| j|| jjj | j|d | jjjk | jj	|d }| j|| jjjk | jj
||| jjj}| j|dk | j|}t| j||S r
   )r   r#   r"   r   r   r   rG   r   r   r   ZDH_set0_keyZ_dh_cdata_to_evp_pkey_DHPublicKey)r$   r   rI   Zpub_key_dupr   r?   r   r   r   
public_key   s   z_DHPrivateKey.public_keyc                 C   rA   r   r!   r#   r"   r-   r   r   r   
parameters      z_DHPrivateKey.parametersc                 C   s   |t jjur
td| jjjs6| jjd}| jj	| j
| jjj|| jjj |d | jjjkr6tdtj| j|||| | j| j
S )Nz0DH private keys support only PKCS8 serializationr   r   r/   )r   ZPrivateFormatZPKCS8r0   r"   r   r1   r   r   r   r#   r   r   r   r2   Z_private_key_bytesr<   )r$   r4   r5   Zencryption_algorithmr   r   r   r   private_bytes   s2   
z_DHPrivateKey.private_bytesN)r7   r8   r9   r%   propertyrB   rJ   rR   rT   rV   rX   r   r   r   r   r;   Y   s    
r;   c                   @   s8   e Zd Zdd Zedd Zdd Zdd Zd	d
 ZdS )rS   c                 C   s&   || _ || _|| _t| j | j| _d S r   )r"   r#   r<   r:   _key_size_bitsr>   r   r   r   r%      r@   z_DHPublicKey.__init__c                 C   s   | j S r   )rZ   r-   r   r   r   rB      s   z_DHPublicKey.key_sizec                 C   s  | j jd}| j jd}| j jd}| j j| j||| | j |d | j jjk | j |d | j jjk |d | j jjkrFd }n| j |d }| j jd}| j j	| j|| j jj | j |d | j jjk t
jt
j| j |d | j |d |d| j |d dS )Nr   r   r&   rC   )r"   r   r   r   r   r#   r   r   r)   rG   r	   rH   r*   )r$   r'   r(   r   r+   rI   r   r   r   rE      s,   z_DHPublicKey.public_numbersc                 C   rA   r   rU   r-   r   r   r   rV      rW   z_DHPublicKey.parametersc                 C   s   |t jjur
td| jjjs6| jjd}| jj	| j
| jjj|| jjj |d | jjjkr6tdtj| j||| | jd S )Nz>DH public keys support only SubjectPublicKeyInfo serializationr   r   r/   )r   ZPublicFormatZSubjectPublicKeyInfor0   r"   r   r1   r   r   r   r#   r   r   r   r2   Z_public_key_bytesr<   r3   r   r   r   public_bytes   s(   
z_DHPublicKey.public_bytesN)	r7   r8   r9   r%   rY   rB   rE   rV   r[   r   r   r   r   rS      s    
rS   N)
__future__r   r   r   cryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   Z)cryptography.hazmat.primitives.asymmetricr	   r   r!   Zregister_interfaceZDHParametersWithSerializationobjectr    r:   ZDHPrivateKeyWithSerializationr;   ZDHPublicKeyWithSerializationrS   r   r   r   r   <module>   s   
-

v