3 lá˜_ˆ ã @ s„ d dl mZmZmZ d dlmZ d dlmZ d dlm Z d dl mZmZ dZ ejeƒG dd„ deƒƒZejeƒG d d „ d eƒƒZdS )é )Úabsolute_importÚdivisionÚprint_function)Úutils)Ú_evp_pkey_derive)Ú serialization)ÚX25519PrivateKeyÚX25519PublicKeyé c @ s$ e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_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 jjks|t jjkr@|t jjk s0|t jjk 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Úformatr r r Úpublic_bytes s z_X25519PublicKey.public_bytesc C s| | j jjdƒ}| j jj| j|ƒ}| j j|dkƒ | j j|d | j jjkƒ | j jj|d | j jj ƒ}| j jj ||ƒd d … S )Nzunsigned char **r r )r Ú_ffiÚnewÚ_libZEVP_PKEY_get1_tls_encodedpointr Úopenssl_assertÚNULLÚgcZOPENSSL_freeÚbuffer)r ZucharppÚ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 Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd d „ ZdS )Ú_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 jj|| jƒ}| j j|dkƒ | j jj|| j jjƒ}| j j|| j jjkƒ | j jj || j jj ƒ}t| j |ƒS )Né )r Ú_create_mem_bio_gcr Zi2d_PUBKEY_bior r Zd2i_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ƒstdƒ‚t| j| j|ƒS )Nz(peer_public_key must be X25519PublicKey.)Ú isinstancer Ú TypeErrorr r r )r Zpeer_public_keyr r r ÚexchangeL s z_X25519PrivateKey.exchangec C sf |t jjks|t jjkrN|t jjk s>|t jjk s>t|t jƒ rFtdƒ‚| jƒ S | j j |||| | jd ƒS )NzcWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption())r r r r Z PrivateFormatr- ZNoEncryptionr Ú_raw_private_bytesr Z_private_key_bytesr )r r r Zencryption_algorithmr r r Ú private_bytesR s z_X25519PrivateKey.private_bytesc C s| | j jƒ }| j jj|| j| j jj| j jjd| j jj| j jjƒ}| j j|dkƒ | j j|ƒ}| j jt |ƒdkƒ |t d … S )Nr r) é0 )r r* r Zi2d_PKCS8PrivateKey_bior r r r Z _read_mem_bioÚlenÚ_X25519_KEY_SIZE)r r+ r# Zpkcs8r r r r0 i s z$_X25519PrivateKey._raw_private_bytesN)r% r&