o
     `                     @   s   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ d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)_evp_pkey_derive)serialization)X25519PrivateKeyX25519PublicKey    c                   @   s$   e Zd Zdd Zdd Zdd ZdS )_X25519PublicKeyc                 C      || _ || _d S N_backend	_evp_pkeyselfbackendevp_pkey r   home/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/x25519.py__init__      
z_X25519PublicKey.__init__c                 C   sV   |t jju s|t jju r |t jjus|t jjurtd|  S | j||| | jd S )Nz3When using Raw both encoding and format must be Raw)	r   EncodingRawPublicFormat
ValueError_raw_public_bytesr   Z_public_key_bytesr   )r   encodingformatr   r   r   public_bytes   s   



z_X25519PublicKey.public_bytesc                 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   )r   _ffinew_libZEVP_PKEY_get1_tls_encodedpointr   openssl_assertNULLgcZOPENSSL_freebuffer)r   Zucharppresdatar   r   r   r   ,   s   z"_X25519PublicKey._raw_public_bytesN)__name__
__module____qualname__r   r    r   r   r   r   r   r      s    r   c                   @   s4   e Zd Zdd Zd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#   Zi2d_PUBKEY_bior   r$   Zd2i_PUBKEY_bior!   r%   r&   ZEVP_PKEY_freer   )r   bior(   r   r   r   r   
public_key?   s   


z_X25519PrivateKey.public_keyc                 C   s"   t |ts	tdt| j| j|S )Nz(peer_public_key must be X25519PublicKey.)
isinstancer	   	TypeErrorr   r   r   )r   Zpeer_public_keyr   r   r   exchangeL   s   
z_X25519PrivateKey.exchangec                 C   sd   |t jju s|t jju r&|t jjus|t jjust|t js"td|  S | j	
|||| | jd S )NzcWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption())r   r   r   r   ZPrivateFormatr2   ZNoEncryptionr   _raw_private_bytesr   Z_private_key_bytesr   )r   r   r   Zencryption_algorithmr   r   r   private_bytesR   s&   



z_X25519PrivateKey.private_bytesc              	   C   s|   | j  }| j j|| j| j jj| j jjd| j jj| j jj}| j |dk | j |}| j t	|dk |t
 d  S )Nr   r.   0   )r   r/   r#   Zi2d_PKCS8PrivateKey_bior   r!   r%   r$   Z_read_mem_biolen_X25519_KEY_SIZE)r   r0   r(   Zpkcs8r   r   r   r5   i   s   
	z$_X25519PrivateKey._raw_private_bytesN)r*   r+   r,   r   r1   r4   r6   r5   r   r   r   r   r-   9   s    r-   N)
__future__r   r   r   cryptographyr   Z*cryptography.hazmat.backends.openssl.utilsr   Zcryptography.hazmat.primitivesr   Z0cryptography.hazmat.primitives.asymmetric.x25519r   r	   r9   Zregister_interfaceobjectr   r-   r   r   r   r   <module>   s   %