o -&%aã@sPddlmZddlmZddlmZmZdZGdd„deƒZGdd„deƒZ d S) é)Ú_evp_pkey_derive)Ú serialization)ÚX25519PrivateKeyÚX25519PublicKeyé c@s<eZdZdd„Zdejdejdefdd„Zdefdd „Z d S) Ú_X25519PublicKeycCó||_||_dS©N©Ú_backendÚ _evp_pkey©ÚselfÚbackendÚevp_pkey©rúM/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/x25519.pyÚ__init__ó z_X25519PublicKey.__init__ÚencodingÚformatÚreturncCsV|tjjus |tjjur |tjjus|tjjurtdƒ‚| ¡S|j ||||jd¡S)Nz3When using Raw both encoding and format must be Raw) rÚEncodingÚRawÚ PublicFormatÚ ValueErrorÚ_raw_public_bytesr Ú_public_key_bytesr )rrrrrrÚ public_bytess    ÿ ÿz_X25519PublicKey.public_bytescCs||jj d¡}|jj |j|¡}|j |dk¡|j |d|jjjk¡|jj |d|jjj ¡}|jj  ||¡dd…S)Nzunsigned char **rr) r Ú_ffiÚnewÚ_libÚEVP_PKEY_get1_tls_encodedpointr Úopenssl_assertÚNULLÚgcÚ OPENSSL_freeÚbuffer)rÚucharppÚresÚdatarrrr-sÿÿz"_X25519PublicKey._raw_public_bytesN) Ú__name__Ú __module__Ú __qualname__rrrrÚbytesrrrrrrrsþý ürc@sbeZdZdd„Zdefdd„Zdedefdd„Zd ej d ej d ej defd d „Z defdd„Z dS)Ú_X25519PrivateKeycCrr r r rrrr;rz_X25519PrivateKey.__init__rcCsz|j ¡}|jj ||j¡}|j |dk¡|jj ||jjj¡}|j ||jjjk¡|jj  ||jjj ¡}t |j|ƒS)Né) r Ú_create_mem_bio_gcr!Úi2d_PUBKEY_bior r#Úd2i_PUBKEY_biorr$r%Ú EVP_PKEY_freer)rÚbior)rrrrÚ public_key?s  ÿ ÿ z_X25519PrivateKey.public_keyÚpeer_public_keycCs"t|tƒs tdƒ‚t|j|j|ƒS)Nz(peer_public_key must be X25519PublicKey.)Ú isinstancerÚ TypeErrorrr r )rr7rrrÚexchangeLs z_X25519PrivateKey.exchangerrÚencryption_algorithmcCsd|tjjus |tjjur&|tjjus|tjjust|tjƒs"tdƒ‚| ¡S|j   |||||j d¡S)NzcWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption()) rrrrÚ PrivateFormatr8Ú NoEncryptionrÚ_raw_private_bytesr Ú_private_key_bytesr )rrrr;rrrÚ private_bytesRs    ÿÿÿÿz_X25519PrivateKey.private_bytesc Cs||j ¡}|jj ||j|jjj|jjjd|jjj|jjj¡}|j |dk¡|j |¡}|j t |ƒdk¡|t d…S)Nrr0é0) r r1r!Úi2d_PKCS8PrivateKey_bior rr$r#Ú _read_mem_bioÚlenÚ_X25519_KEY_SIZE)rr5r)Úpkcs8rrrr>ns ù z$_X25519PrivateKey._raw_private_bytesN)r+r,r-rrr6r.r:rrr<ÚKeySerializationEncryptionr@r>rrrrr/:s þýü ûr/N) Ú*cryptography.hazmat.backends.openssl.utilsrÚcryptography.hazmat.primitivesrÚ0cryptography.hazmat.primitives.asymmetric.x25519rrrErr/rrrrÚs  )