<!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 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   %