£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
l_                 @   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jeG dd deZej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   s   || _ || _d S )N)_backend	_evp_pkey)selfbackendevp_pkey r   /usr/lib64/python3.6/x25519.py__init__   s    z_X25519PublicKey.__init__c             C   sV   |t jjks|t jjkr@|t jjk	s0|t jjk	r8td| j S | j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jd}| j jj| j|}| j j|dk | j j|d | j jjk | j jj|d | j 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   s   || _ || _d S )N)r   r   )r   r   r   r   r   r   r   ;   s    z_X25519PrivateKey.__init__c             C   sz   | j j }| j jj|| j}| j j|dk | j jj|| j jj}| j j|| j jjk | j 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   sf   |t jjks|t jjkrN|t jjk	s>|t jjk	s>t|t j rFtd| j S | j	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PrivateFormatr-   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 jjd| j jj| j jj}| j j|dk | j j|}| 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   r+   r#   Zpkcs8r   r   r   r0   i   s    
z$_X25519PrivateKey._raw_private_bytesN)r%   r&   r'   r   r,   r/   r1   r0   r   r   r   r   r(   9   s
   r(   N)Z
__future__r   r   r   Zcryptographyr   Z*cryptography.hazmat.backends.openssl.utilsr   Zcryptography.hazmat.primitivesr   Z0cryptography.hazmat.primitives.asymmetric.x25519r   r	   r4   Zregister_interfaceobjectr   r(   r   r   r   r   <module>   s   %