U ¨Ãq`ã@sPddlmZddlmZddlmZmZdZGdd„deƒZGdd„deƒZ d S) é)Ú_evp_pkey_derive)Ú serialization)ÚX25519PrivateKeyÚX25519PublicKeyé c@s8eZdZdd„Zejejedœdd„Zedœdd„Z d S) Ú_X25519PublicKeycCs||_||_dS©N©Ú_backendÚ _evp_pkey©ÚselfÚbackendÚevp_pkey©rúR/tmp/pip-target-nv4zd3e_/lib/python/cryptography/hazmat/backends/openssl/x25519.pyÚ__init__sz_X25519PublicKey.__init__)ÚencodingÚformatÚreturncCsV|tjjks|tjjkr@|tjjk s0|tjjk r8tdƒ‚| ¡S|j ||||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 rrrrrÚ public_bytess& ÿ þ ÿ þÿÿz_X25519PublicKey.public_bytes©rcCs||jj d¡}|jj |j|¡}|j |dk¡|j |d|jjjk¡|jj |d|jjj ¡}|jj  ||¡dd…S)Nzunsigned char **rr) r Ú_ffiÚnewÚ_libZEVP_PKEY_get1_tls_encodedpointr Úopenssl_assertÚNULLÚgcZ OPENSSL_freeÚbuffer)r ZucharppÚresÚdatarrrr-sÿÿz"_X25519PublicKey._raw_public_bytesN) Ú__name__Ú __module__Ú __qualname__rrrrÚbytesrrrrrrrs ü rc@sZeZdZdd„Zedœdd„Zeedœdd„Zej ej ej ed œd d „Z edœd d „Z dS)Ú_X25519PrivateKeycCs||_||_dSrr r rrrr;sz_X25519PrivateKey.__init__rcCsz|j ¡}|jj ||j¡}|j |dk¡|jj ||jjj¡}|j ||jjjk¡|jj  ||jjj ¡}t |j|ƒS)Né) r Ú_create_mem_bio_gcrZi2d_PUBKEY_bior r Zd2i_PUBKEY_biorr!r"Z EVP_PKEY_freer)r Úbior$rrrrÚ public_key?s ÿÿz_X25519PrivateKey.public_key)Úpeer_public_keyrcCs"t|tƒstdƒ‚t|j|j|ƒS)Nz(peer_public_key must be X25519PublicKey.)Ú isinstancerÚ TypeErrorrr r )r r/rrrÚexchangeLs z_X25519PrivateKey.exchange)rrÚencryption_algorithmrcCsd|tjjks|tjjkrL|tjjk s<|tjjk ss  )