
     h/                         d dl Z d dlmZmZ d dlmZ d dlmZ e j        rd dl	m
Z
 ddZddZ G d d
ej                  Zd	efdZ G d dej                  Z G d dej                  ZdS )    N)UnsupportedAlgorithm_Reasons)serialization)dh)Backendbackendr   c                    |j         }|j        }|                    |           }|                    ||j        k               |                    ||j                  }|j        r|                    d          }|	                    | |j        ||j                   |
                    |d                   }|                    ||j        ||j                  }|                    |dk               |S N	BIGNUM **r      )_lib_ffiDHparams_dupopenssl_assertNULLgcDH_freeCRYPTOGRAPHY_IS_LIBRESSLnewDH_get0_pqgBN_dupDH_set0_pqg)dh_cdatar   libffiparam_cdataqq_dupress           c/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/dh.py_dh_params_dupr!      s    
,C
,C""8,,K;#(2333&&ck22K
# )GGK  #(Asx888

1Q4  ook38UCHEEsax(((    return_DHParametersc                 B    t          | |          }t          ||          S N)r!   r$   )r   r   r   s      r    _dh_cdata_to_parametersr'   !   s!     733K+...r"   c                   j    e Zd ZddZdej        fdZdej        fdZde	j
        de	j        defd	Zd
S )r$   r   r   c                 "    || _         || _        d S r&   )_backend	_dh_cdata)selfr   r   s      r    __init__z_DHParameters.__init__'   s    !r"   r#   c                    | 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    rd }n | j                             |d                   }t          j
        | j                             |d                   | j                             |d                   |          S )Nr   r   pgr   )r*   r   r   r   r   r+   r   r   
_bn_to_intr   DHParameterNumbers)r,   r0   r1   r   q_vals        r    parameter_numbersz_DHParameters.parameter_numbers+   s;   M"";//M"";//M"";//&&t~q!Q???$$QqTT]-?-D%DEEE$$QqTT]-?-D%DEEEQ44=%***EEM,,QqT22E$m&&qt,,m&&qt,,
 
 
 	
r"   c                 6    | j                             |           S r&   )r*   generate_dh_private_keyr,   s    r    generate_private_keyz"_DHParameters.generate_private_key=   s    }44T:::r"   encodingformatc                    |t           j        j        u rt          d          |t           j        j        urt          d          | j        j        	                    d          }| j        j
                            | j        | j        j        j        || j        j        j                   |d         | j        j        j        k    r+| j        j
        j        st          dt           j                  |t           j        j        u r?|d         | j        j        j        k    r| j        j
        j        }ns| j        j
        j        }na|t           j        j        u r?|d         | j        j        j        k    r| j        j
        j        }n!| j        j
        j        }nt          d          | j                                        } ||| j                  }| j                            |dk               | j                            |          S )Nz!OpenSSH encoding is not supportedz%Only PKCS3 serialization is supportedr   r   'DH X9.42 serialization is not supportedz/encoding must be an item from the Encoding enumr   )r   EncodingOpenSSH	TypeErrorParameterFormatPKCS3
ValueErrorr*   r   r   r   r   r+   r   Cryptography_HAS_EVP_PKEY_DHXr   r   UNSUPPORTED_SERIALIZATIONPEMPEM_write_bio_DHxparamsPEM_write_bio_DHparamsDERi2d_DHxparams_bioi2d_DHparams_bio_create_mem_bio_gcr   _read_mem_bio)r,   r:   r;   r   	write_biobior   s          r    parameter_bytesz_DHParameters.parameter_bytes@   s   
 }-555?@@@6<<<DEEEM"";//&&NDM.3Q8J8O	
 	
 	
 aDDM&+++M&D , '92  
 }-111tt})... M.F		 M.E		/333tt})... M.@		 M.?		MNNNm..00iT^,,$$SAX...}**3///r"   Nr   r   )__name__
__module____qualname__r-   r   r3   r5   DHPrivateKeyr9   r   r>   rA   bytesrP    r"   r    r$   r$   &   s        " " " "
2#8 
 
 
 
$;bo ; ; ; ;(0((0 -(0 
	(0 (0 (0 (0 (0 (0r"   c                 *   | j                             d          }| j                            ||| j         j        | j         j                   |                     |d         | j         j        k               | j                            |d                   S )Nr   r   )r   r   r   r   r   r   BN_num_bits)r   r   r0   s      r    _get_dh_num_bitsrZ   k   sy    %%ALXq',*;W\=NOOO1Q47<#44555<##AaD)))r"   c                       e Zd ZddZedefd            Zdej        fdZ	dej
        defdZd	edd
fdZdej
        fdZdej        fdZdej        dej        dej        defdZd
S )_DHPrivateKeyr   r   c                 x    || _         || _        || _        | j         j                            |          | _        d S r&   )r*   r+   	_evp_pkeyr   DH_size_key_size_bytesr,   r   r   evp_pkeys       r    r-   z_DHPrivateKey.__init__s   s8    !!#}199(CCr"   r#   c                 6    t          | j        | j                  S r&   )rZ   r*   r+   r8   s    r    key_sizez_DHPrivateKey.key_sizey   s    t~>>>r"   c                 T   | 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    rd }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                   |          | j                             |d                             | j                             |d                             S )Nr   r   r/   r5   y)public_numbersx)r*   r   r   r   r   r+   r   r   r2   DH_get0_keyr   DHPrivateNumbersDHPublicNumbersr3   )r,   r0   r1   r   r4   pub_keypriv_keys          r    private_numbersz_DHPrivateKey.private_numbers}   s4   M"";//M"";//M"";//&&t~q!Q???$$QqTT]-?-D%DEEE$$QqTT]-?-D%DEEEQ44=%***EEM,,QqT22E-$((55=%))+66&&t~wIII$$WQZ4=3E3J%JKKK$$Xa[DM4F4K%KLLL"-"$"7m..qt44m..qt44# # #
 -**71:66   m&&x{33

 

 

 
	
r"   peer_public_keyc                    t          |t                    st          d          | j        j                            | j        | j        j        j                  }| j        	                    || j        j        j        k               | j        j        
                    || j        j        j                  }| j        j                            |          }| j        	                    |dk               | j        j                            ||j                  }|                     |dk               | j        j                            d          }| j        j                            || j        j        j        |          }|                     |dk               | j        	                    |d         dk               | j        j                            d|d                   }| j        j                            |||          }| j        	                    |dk               | j        j                            ||d                   d d          }| j        t'          |          z
  }|dk    rd|z  |z   }|S )Nz%peer_public_key must be a DHPublicKeyr   zsize_t *r   zunsigned char[]    )
isinstance_DHPublicKeyr@   r*   r   EVP_PKEY_CTX_newr^   r   r   r   r   EVP_PKEY_CTX_freeEVP_PKEY_derive_initEVP_PKEY_derive_set_peer_exchange_assertr   EVP_PKEY_derivebufferr`   len)r,   rp   ctxr   keylenbufkeypads           r    exchangez_DHPrivateKey.exchange   s&   /<88 	ECDDDm 11NDM.3
 
 	$$SDM,>,C%CDDDm ##C);)MNNm 55c::$$SAX...m 99*
 

 	cQh'''#''
33m 00#(&
 
 	cQh'''$$VAY]333m $$%6q	BBm 00c6BB$$SAX...m ''VAY77:"SXX-77S=C'C
r"   okNc                 \    |s)| j                                         }t          d|          d S )NzError computing shared key.)r*   _consume_errorsrC   )r,   r   errorss      r    ry   z_DHPrivateKey._exchange_assert   s?     	]2244F-  	 	r"   c                    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   rj   r   r   r   DH_set0_key_dh_cdata_to_evp_pkeyrt   )r,   r   rm   pub_key_dupr   rb   s         r    
public_keyz_DHPrivateKey.public_key   s1   !$.$-@@-$((55&&NGT]%7%<	
 	
 	
 	$$WQZ4=3E3J%JKKKm(//
;;$$[DM4F4K%KLLLm ,,k4=#5#:
 
 	$$SAX...=66x@@DM8X>>>r"   c                 6    t          | j        | j                  S r&   r'   r+   r*   r8   s    r    
parametersz_DHPrivateKey.parameters       &t~t}EEEr"   r:   r;   encryption_algorithmc                    |t           j        j        urt          d          | j        j        j        s| j        j                            d          }| j        j        	                    | j
        | j        j        j        || j        j        j                   |d         | j        j        j        k    rt          dt          j                  | j                            |||| | j        | j
                  S )Nz0DH private keys support only PKCS8 serializationr   r   r=   )r   PrivateFormatPKCS8rC   r*   r   rD   r   r   r   r+   r   r   r   rE   _private_key_bytesr^   )r,   r:   r;   r   r   s        r    private_bytesz_DHPrivateKey.private_bytes   s     4:::B   }!? 	"&&{33AM**"'"'	   tt})...*=6  
 }// NN
 
 	
r"   rQ   )rR   rS   rT   r-   propertyintrd   r   rk   ro   DHPublicKeyrV   r   boolry   r   DHParametersr   r   r>   r   KeySerializationEncryptionr   rW   r"   r    r\   r\   r   s:       D D D D ?# ? ? ? X?
!4 
 
 
 
8" "5 " " " "H4 D    ?BN ? ? ? ?"FBO F F F F
(
 +
 ,F	

 

 
 
 
 
 
r"   r\   c                       e Zd ZddZedefd            Zdej        fdZ	dej
        fdZdej        d	ej        defd
ZdS )rt   r   r   c                 n    || _         || _        || _        t          | j         | j                  | _        d S r&   )r*   r+   r^   rZ   _key_size_bitsra   s       r    r-   z_DHPublicKey.__init__   s3    !!.t}dnMMr"   r#   c                     | j         S r&   )r   r8   s    r    rd   z_DHPublicKey.key_size  s    ""r"   c           	      j   | 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    rd }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                   |          | j                             |d                             S )Nr   r   r/   rf   )r*   r   r   r   r   r+   r   r   r2   rj   r   rl   r3   )r,   r0   r1   r   r4   rm   s         r    rh   z_DHPublicKey.public_numbers  s   M"";//M"";//M"";//&&t~q!Q???$$QqTT]-?-D%DEEE$$QqTT]-?-D%DEEEQ44=%***EEM,,QqT22E-$((55&&NGT]%7%<	
 	
 	
 	$$WQZ4=3E3J%JKKK! 3-**1Q400-**1Q400  
 m&&wqz22
 
 
 	
r"   c                 6    t          | j        | j                  S r&   r   r8   s    r    r   z_DHPublicKey.parameters  r   r"   r:   r;   c                    |t           j        j        urt          d          | j        j        j        s| j        j                            d          }| j        j        	                    | j
        | j        j        j        || j        j        j                   |d         | j        j        j        k    rt          dt          j                  | j                            ||| | j        d           S )Nz>DH public keys support only SubjectPublicKeyInfo serializationr   r   r=   )r   PublicFormatSubjectPublicKeyInforC   r*   r   rD   r   r   r   r+   r   r   r   rE   _public_key_bytesr^   )r,   r:   r;   r   s       r    public_bytesz_DHPublicKey.public_bytes"  s    
 3HHH5  
 }!? 	"&&{33AM**"'"'	   tt})...*=6  
 }..fdDND
 
 	
r"   NrQ   )rR   rS   rT   r-   r   r   rd   r   rl   rh   r   r   r   r>   r   rV   r   rW   r"   r    rt   rt      s        N N N N ## # # # X#
 2 
 
 
 
2FBO F F F F
(
 *
 
	
 
 
 
 
 
r"   rt   rQ   )r   r   r#   r$   )typingcryptography.exceptionsr   r   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   TYPE_CHECKING,cryptography.hazmat.backends.openssl.backendr   r!   r'   r   r$   r   rZ   rU   r\   r   rt   rW   r"   r    <module>r      sW  
  B B B B B B B B 8 8 8 8 8 8 8 8 8 8 8 8	 EDDDDDD   $/ / / /
B0 B0 B0 B0 B0BO B0 B0 B0J*3 * * * *F
 F
 F
 F
 F
BO F
 F
 F
RB
 B
 B
 B
 B
2> B
 B
 B
 B
 B
r"   