3 L]@sddlmZmZmZddlmZmZddlmZddl m Z m Z m Z m Z eje GdddeZeje GdddeZd S) )absolute_importdivisionprint_function) exceptionsutils) serialization)Ed25519PrivateKeyEd25519PublicKey_ED25519_KEY_SIZE_ED25519_SIG_SIZEc@s,eZdZddZddZddZddZd S) _Ed25519PublicKeycCs||_||_dS)N)_backend _evp_pkey)selfbackendevp_pkeyrV/tmp/pip-install-wfra5znf/cryptography/cryptography/hazmat/backends/openssl/ed25519.py__init__sz_Ed25519PublicKey.__init__cCst|tjjks|tjjkr@|tjjk s0|tjjk r8td|jS|tjkr^|tjjk r^td|jj ||||j dS)Nz3When using Raw both encoding and format must be Rawz?format must be SubjectPublicKeyInfo when encoding is PEM or DER) rEncodingRaw PublicFormat ValueError_raw_public_bytes_PEM_DERZSubjectPublicKeyInfor Z_public_key_bytesr)rencodingformatrrr public_bytess      z_Ed25519PublicKey.public_bytescCsp|jjjdt}|jjjdt}|jjj|j||}|jj|dk|jj|dtk|jjj|tddS)Nzunsigned char []zsize_t *r) r _ffinewr _libEVP_PKEY_get_raw_public_keyropenssl_assertbuffer)rbufbuflenresrrrr0s z#_Ed25519PublicKey._raw_public_bytescCs|jjj}|jj||jjjk|jjj||jjj}|jjj||jjj|jjj|jjj|j }|jj|dk|jjj ||t ||t |}|dkr|jj t jdS)Nr)r r!Cryptography_EVP_MD_CTX_newr#rNULLgcCryptography_EVP_MD_CTX_freeZEVP_DigestVerifyInitrZEVP_DigestVerifylenZ_consume_errorsrZInvalidSignature)r signaturedata evp_md_ctxr'rrrverify:s  z_Ed25519PublicKey.verifyN)__name__ __module__ __qualname__rrrr0rrrrr s r c@s4eZdZddZddZddZddZd d Zd S) _Ed25519PrivateKeycCs||_||_dS)N)r r)rrrrrrrOsz_Ed25519PrivateKey.__init__cCsz|jjjdt}|jjjdt}|jjj|j||}|jj|dk|jj|dtk|jjj|dd}|jj |S)Nzunsigned char []zsize_t *rr) r rr r r!r"rr#r$Zed25519_load_public_bytes)rr%r&r'rrrr public_keySs z_Ed25519PrivateKey.public_keycCs|jjj}|jj||jjjk|jjj||jjj}|jjj||jjj|jjj|jjj|j }|jj|dk|jjj dt }|jjj dt |}|jjj ||||t |}|jj|dk|jj|dt k|jjj||dddS)Nrzunsigned char[]zsize_t *r)r r!r(r#rr)r*r+ZEVP_DigestSignInitrr r r,ZEVP_DigestSignr$)rr.r/r'r%r&rrrsign^s z_Ed25519PrivateKey.signcCs|tjjks|tjjkrN|tjjk s>|tjjk s>t|tj rFtd|jS|tj krl|tjj k rltd|j j ||||j dS)NzaWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryptionz0format must be PKCS8 when encoding is PEM or DER)rrrrZ PrivateFormat isinstanceZ NoEncryptionr_raw_private_bytesrZPKCS8r Z_private_key_bytesr)rrrZencryption_algorithmrrr private_bytesrs      z _Ed25519PrivateKey.private_bytescCsp|jjjdt}|jjjdt}|jjj|j||}|jj|dk|jj|dtk|jjj|tddS)Nzunsigned char []zsize_t *rr) r rr r r!ZEVP_PKEY_get_raw_private_keyrr#r$)rr%r&r'rrrr8s z%_Ed25519PrivateKey._raw_private_bytesN)r1r2r3rr5r6r9r8rrrrr4Ms  r4N) __future__rrrZ cryptographyrrZcryptography.hazmat.primitivesrZ1cryptography.hazmat.primitives.asymmetric.ed25519rr r r Zregister_interfaceobjectr r4rrrrs >