o -&%a@sTddlmZddlmZddlmZmZmZmZGdddeZ GdddeZ dS) ) exceptions) serialization)Ed25519PrivateKeyEd25519PublicKey_ED25519_KEY_SIZE_ED25519_SIG_SIZEc@sReZdZddZdejdejdefddZdefdd Z d ed edd fd dZ d S)_Ed25519PublicKeycC||_||_dSN_backend _evp_pkeyselfbackendevp_pkeyrN/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ed25519.py__init__ z_Ed25519PublicKey.__init__encodingformatreturncCsV|tjjus |tjjur |tjjus|tjjurtd|S|j||||jdS)Nz3When using Raw both encoding and format must be Raw) rEncodingRaw PublicFormat ValueError_raw_public_bytesr _public_key_bytesr )rrrrrr public_bytess     z_Ed25519PublicKey.public_bytescCp|jjdt}|jjdt}|jj|j||}|j|dk|j|dtk|jj|tddSNzunsigned char []size_t *r) r _ffinewr_libEVP_PKEY_get_raw_public_keyr openssl_assertbufferrbufbuflenresrrrr,z#_Ed25519PublicKey._raw_public_bytes signaturedataNcCs|jj}|j||jjjk|jj||jjj}|jj||jjj|jjj|jjj|j }|j|dk|jj ||t ||t |}|dkrT|j t jdS)Nr#)r r&EVP_MD_CTX_newr(r$NULLgcEVP_MD_CTX_freeEVP_DigestVerifyInitr EVP_DigestVerifylen_consume_errorsrInvalidSignature)rr/r0 evp_md_ctxr-rrrverify6s(   z_Ed25519PublicKey.verify) __name__ __module__ __qualname__rrrrbytesrrr;rrrrrs  rc@sbeZdZddZdefddZdedefddZd ej d ej d ej defd d Z defddZ dS)_Ed25519PrivateKeycCr r r rrrrrMrz_Ed25519PrivateKey.__init__rcCsz|jjdt}|jjdt}|jj|j||}|j|dk|j|dtk|jj|dd}|j |Sr!) r r$r%rr&r'r r(r)ed25519_load_public_bytes)rr+r,r-rrrr public_keyQs z_Ed25519PrivateKey.public_keyr0cCs|jj}|j||jjjk|jj||jjj}|jj||jjj|jjj|jjj|j }|j|dk|jj dt }|jj dt |}|jj ||||t |}|j|dk|j|dt k|jj||dddS)Nr#zunsigned char[]r"r)r r&r1r(r$r2r3r4EVP_DigestSignInitr r%rr7EVP_DigestSignr))rr0r:r-r+r,rrrsign\s*  z_Ed25519PrivateKey.signrrencryption_algorithmcCsd|tjjus |tjjur&|tjjus|tjjust|tjs"td|S|j |||||j dS)NzcWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption()) rrrr PrivateFormat isinstance NoEncryptionr_raw_private_bytesr _private_key_bytesr )rrrrFrrr private_bytesss    z _Ed25519PrivateKey.private_bytescCr r!) r r$r%rr&EVP_PKEY_get_raw_private_keyr r(r)r*rrrrJr.z%_Ed25519PrivateKey._raw_private_bytesN)r<r=r>rrrBr?rErrrGKeySerializationEncryptionrLrJrrrrr@Ls  r@N) cryptographyrcryptography.hazmat.primitivesr1cryptography.hazmat.primitives.asymmetric.ed25519rrrrrr@rrrrs  <