<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
l_'                 @   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jejG d
d deZdd ZejejG dd deZej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| }|j||jk |j||j}|jr|jd}|j	| |j||j |j
|d }|j||j||j}|j|dk |S )Nz	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libZffiparam_cdataqZq_dupres r   /usr/lib64/python3.6/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 )N)_backend	_dh_cdata)selfr   r   r   r   r   __init__&   s    z_DHParameters.__init__c             C   s   | j jjd}| j jjd}| j jjd}| j jj| j||| | j j|d | j jjk | j j|d | j jjk |d | j jjkrd }n| j j|d }t	j
| j j|d | j j|d |dS )Nz	BIGNUM **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 j| S )N)r   Zgenerate_dh_private_key)r    r   r   r   generate_private_key;   s    z"_DHParameters.generate_private_keyc             C   s~   |t jjk	rtd| jjjsl| jjjd}| jjj	| j
| jjj|| jjj |d | jjjkrltdtj| jj||| j
S )Nz%Only PKCS3 serialization is supportedz	BIGNUM **r   z'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(   r.   r   r   r   r   r   $   s   r   c             C   sL   | j jd}| jj||| j j| j j | j|d | j jk | jj|d S )Nz	BIGNUM **r   )r   r   r   r   r   r   ZBN_num_bits)r   r   r"   r   r   r   _get_dh_num_bitsR   s    r2   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j|| _d S )N)r   r   	_evp_pkeyr   ZDH_size_key_size_bytes)r    r   r   evp_pkeyr   r   r   r!   [   s    z_DHPrivateKey.__init__c             C   s   t | j| jS )N)r2   r   r   )r    r   r   r   key_sizea   s    z_DHPrivateKey.key_sizec             C   sT  | j jjd}| j jjd}| j jjd}| j jj| j||| | j j|d | j jjk | j j|d | j jjk |d | j jjkrd }n| j j|d }| j jjd}| j jjd}| j jj	| j|| | j j|d | j jjk | j j|d | j jjk t
jt
jt
j| j j|d | j j|d |d| j j|d d| j j|d dS )Nz	BIGNUM **r   )r"   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   s,    z_DHPrivateKey.private_numbersc             C   s   | j jjd| j}| j jjd}| j jj|j|| j jj | j j|d | j jjk | j jj	||d | j}|dkr| j j
 }td|nL| j j|dk | j jj|d | }| jt| }|dkrd| | }|S d S )Nzunsigned char[]z	BIGNUM **r   r
   zKError computing shared key. Public key is likely invalid for this exchange.    )r   r   r   r5   r   r;   r   r   r   ZDH_compute_keyZ_consume_errors_with_textr)   bufferlen)r    Zpeer_public_keyZbufr=   r   Zerrors_with_textkeyZpadr   r   r   exchange   s$    
z_DHPrivateKey.exchangec             C   s   t | j| j}| jjjd}| jjj| j|| jjj | jj|d | jjjk | jjj	|d }| jj|| jjjk | jjj
||| jjj}| jj|dk | jj|}t| j||S )Nz	BIGNUM **r   r
   )r   r   r   r   r   r   r;   r   r   r   ZDH_set0_keyZ_dh_cdata_to_evp_pkey_DHPublicKey)r    r   r=   Zpub_key_dupr   r6   r   r   r   
public_key   s    z_DHPrivateKey.public_keyc             C   s   t | j| jS )N)r   r   r   )r    r   r   r   
parameters   s    z_DHPrivateKey.parametersc             C   s   |t jjk	rtd| jjjsl| jjjd}| jjj	| j
| jjj|| jjj |d | jjjkrltdtj| jj|||| | j| j
S )Nz0DH private keys support only PKCS8 serializationz	BIGNUM **r   z'DH X9.42 serialization is not supported)r   ZPrivateFormatZPKCS8r)   r   r   r*   r   r   r   r   r   r   r   r+   Z_private_key_bytesr4   )r    r,   r-   Zencryption_algorithmr   r   r   r   private_bytes   s*    
z_DHPrivateKey.private_bytesN)r/   r0   r1   r!   propertyr7   r>   rD   rF   rG   rH   r   r   r   r   r3   Y   s   r3   c               @   s8   e Zd Zdd Zedd Zdd Zdd Zd	d
 ZdS )rE   c             C   s&   || _ || _|| _t| j | j| _d S )N)r   r   r4   r2   _key_size_bits)r    r   r   r6   r   r   r   r!      s    z_DHPublicKey.__init__c             C   s   | j S )N)rJ   )r    r   r   r   r7      s    z_DHPublicKey.key_sizec             C   s  | j jjd}| j jjd}| j jjd}| j jj| j||| | j j|d | j jjk | j j|d | j jjk |d | j jjkrd }n| j j|d }| j jjd}| j jj	| j|| j jj | j j|d | j jjk t
jt
j| j j|d | j j|d |d| j j|d dS )Nz	BIGNUM **r   )r"   r#   r   )r'   r8   )r   r   r   r   r   r   r   r   r$   r;   r	   r<   r%   )r    r"   r#   r   r&   r=   r   r   r   r9      s&    z_DHPublicKey.public_numbersc             C   s   t | j| jS )N)r   r   r   )r    r   r   r   rG      s    z_DHPublicKey.parametersc             C   s   |t jjk	rtd| jjjsl| jjjd}| jjj	| j
| jjj|| jjj |d | jjjkrltdtj| jj||| | jd S )Nz>DH public keys support only SubjectPublicKeyInfo serializationz	BIGNUM **r   z'DH X9.42 serialization is not supported)r   ZPublicFormatZSubjectPublicKeyInfor)   r   r   r*   r   r   r   r   r   r   r   r+   Z_public_key_bytesr4   )r    r,   r-   r   r   r   r   public_bytes   s     
z_DHPublicKey.public_bytesN)	r/   r0   r1   r!   rI   r7   r9   rG   rK   r   r   r   r   rE      s
   rE   N)Z
__future__r   r   r   Zcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat.primitivesr   Z)cryptography.hazmat.primitives.asymmetricr	   r   r   Zregister_interfaceZDHParametersWithSerializationobjectr   r2   ZDHPrivateKeyWithSerializationr3   ZDHPublicKeyWithSerializationrE   r   r   r   r   <module>   s   -v