o
    ™¨Êhø  ã                   @   sh   d dl mZmZmZ d dlmZ d dlmZmZ e 	e¡G dd„ de
ƒƒZe 	e¡G dd„ de
ƒƒZdS )	é    )Úabsolute_importÚdivisionÚprint_function)Úutils)ÚX25519PrivateKeyÚX25519PublicKeyc                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_X25519PublicKeyc                 C   ó   || _ || _d S ©N©Ú_backendÚ	_evp_pkey©ÚselfÚbackendÚevp_pkey© r   ú]/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/x25519.pyÚ__init__   ó   
z_X25519PublicKey.__init__c                 C   s|   | j j d¡}| j j | j|¡}| j  |dk¡ | j  |d | j jjk¡ | j j |d | j jj	¡}| j j 
||¡d d … S )Nzunsigned char **é    r   )r   Ú_ffiÚnewÚ_libÚEVP_PKEY_get1_tls_encodedpointr   Úopenssl_assertÚNULLÚgcÚOPENSSL_freeÚbuffer)r   ÚucharppÚresÚdatar   r   r   Úpublic_bytes   s   ÿÿz_X25519PublicKey.public_bytesN)Ú__name__Ú
__module__Ú__qualname__r   r#   r   r   r   r   r      s    r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_X25519PrivateKeyc                 C   r	   r
   r   r   r   r   r   r   "   r   z_X25519PrivateKey.__init__c                 C   sz   | j  ¡ }| j j || j¡}| j  |dk¡ | j j || j jj¡}| j  || j jjk¡ | j j 	|| j jj
¡}t| j |ƒS )Né   )r   Ú_create_mem_bio_gcr   Úi2d_PUBKEY_bior   r   Úd2i_PUBKEY_bior   r   r   ÚEVP_PKEY_freer   )r   Úbior!   r   r   r   r   Ú
public_key&   s   

ÿ
ÿz_X25519PrivateKey.public_keyc                 C   s2  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¡}| j 	|dk¡ | jj d¡}| jj || jjj|¡}| j 	|dk¡ | j 	|d dk¡ | jj d|d ¡}| jj |||¡}|dkr‹tdƒ‚| jj ||d ¡d d … S )Nz(peer_public_key must be X25519PublicKey.r(   zsize_t *r   zunsigned char[]z1Null shared key derived from public/private pair.)Ú
isinstancer   Ú	TypeErrorr   r   ÚEVP_PKEY_CTX_newr   r   r   r   r   ÚEVP_PKEY_CTX_freeÚEVP_PKEY_derive_initÚEVP_PKEY_derive_set_peerr   ÚEVP_PKEY_deriveÚ
ValueErrorr   )r   Úpeer_public_keyÚctxr!   ÚkeylenÚbufr   r   r   Úexchange3   s4   
ÿÿÿÿz_X25519PrivateKey.exchangeN)r$   r%   r&   r   r.   r;   r   r   r   r   r'       s    r'   N)Ú
__future__r   r   r   Úcryptographyr   Ú0cryptography.hazmat.primitives.asymmetric.x25519r   r   Úregister_interfaceÚobjectr   r'   r   r   r   r   Ú<module>   s   