3 l�_��@s�ddlmZmZmZddlmZddlmZddlm Z ddl m Z m Z dZ eje �Gdd�de��Zeje �Gd d �d e��Zd S) �)�absolute_import�division�print_function)�utils)�_evp_pkey_derive)� serialization)�X25519PrivateKey�X25519PublicKey� c@s$eZdZdd�Zdd�Zdd�ZdS)�_X25519PublicKeycCs||_||_dS)N)�_backend� _evp_pkey)�self�backend�evp_pkey�r�/usr/lib64/python3.6/x25519.py�__init__sz_X25519PublicKey.__init__cCsV|tjjks|tjjkr@|tjjk s0|tjjk r8td��|j�S|jj||||jd�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�formatrrr� public_bytess    z_X25519PublicKey.public_bytescCs||jjjd�}|jjj|j|�}|jj|dk�|jj|d|jjjk�|jjj|d|jjj �}|jjj ||�dd�S)Nzunsigned char **r r) r �_ffi�new�_libZEVP_PKEY_get1_tls_encodedpointr �openssl_assert�NULL�gcZ OPENSSL_free�buffer)rZucharpp�res�datarrrr,s z"_X25519PublicKey._raw_public_bytesN)�__name__� __module__� __qualname__rrrrrrrr sr c@s4eZdZdd�Zdd�Zdd�Zdd�Zd d �Zd S) �_X25519PrivateKeycCs||_||_dS)N)r r )rrrrrrr;sz_X25519PrivateKey.__init__cCsz|jj�}|jjj||j�}|jj|dk�|jjj||jjj�}|jj||jjjk�|jjj ||jjj �}t |j|�S)N�) r �_create_mem_bio_gcrZi2d_PUBKEY_bior rZd2i_PUBKEY_biorr r!Z EVP_PKEY_freer )r�bior#rrrr� public_key?s z_X25519PrivateKey.public_keycCs"t|t�std��t|j|j|�S)Nz(peer_public_key must be X25519PublicKey.)� isinstancer � TypeErrorrr r )rZpeer_public_keyrrr�exchangeLs z_X25519PrivateKey.exchangecCsf|tjjks|tjjkrN|tjjk s>|tjjk s>t|tj� rFtd��|j�S|j j |||||j d�S)NzcWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption()) rrrrZ PrivateFormatr-Z NoEncryptionr�_raw_private_bytesr Z_private_key_bytesr )rrrZencryption_algorithmrrr� private_bytesRs     z_X25519PrivateKey.private_bytescCs||jj�}|jjj||j|jjj|jjjd|jjj|jjj�}|jj|dk�|jj|�}|jjt |�dk�|t d�S)Nrr)�0) r r*rZi2d_PKCS8PrivateKey_bior rr rZ _read_mem_bio�len�_X25519_KEY_SIZE)rr+r#Zpkcs8rrrr0is   z$_X25519PrivateKey._raw_private_bytesN)r%r&r'rr,r/r1r0rrrrr(9s  r(N)Z __future__rrrZ cryptographyrZ*cryptography.hazmat.backends.openssl.utilsrZcryptography.hazmat.primitivesrZ0cryptography.hazmat.primitives.asymmetric.x25519rr r4Zregister_interface�objectr r(rrrr�s   %