3 y�_&�@s�ddlmZmZmZddlmZmZddlmZddl m Z m Z m Z m Z eje �Gdd�de��Zeje �Gdd�de��Zd S) �)�absolute_import�division�print_function)� exceptions�utils)� serialization)�Ed25519PrivateKey�Ed25519PublicKey�_ED25519_KEY_SIZE�_ED25519_SIG_SIZEc@s,eZdZdd�Zdd�Zdd�Zdd�Zd S) �_Ed25519PublicKeycCs||_||_dS)N)�_backend� _evp_pkey)�self�backend�evp_pkey�r�/usr/lib64/python3.6/ed25519.py�__init__sz_Ed25519PublicKey.__init__cCsV|tjjks|tjjkr@|tjjk s0|tjjk 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�formatrrr� public_bytess    z_Ed25519PublicKey.public_bytescCsp|jjjdt�}|jjjdt�}|jjj|j||�}|jj|dk�|jj|dtk�|jjj|t�dd�S)Nzunsigned char []zsize_t *�r) r �_ffi�newr �_lib�EVP_PKEY_get_raw_public_keyr�openssl_assert�buffer)r�buf�buflen�resrrrr*s z#_Ed25519PublicKey._raw_public_bytescCs�|jjj�}|jj||jjjk�|jjj||jjj�}|jjj||jjj|jjj|jjj|j �}|jj|dk�|jjj ||t |�|t |��}|dkr�|jj �t j�dS)Nr)r r �Cryptography_EVP_MD_CTX_newr"r�NULL�gc�Cryptography_EVP_MD_CTX_freeZEVP_DigestVerifyInitrZEVP_DigestVerify�lenZ_consume_errorsrZInvalidSignature)rZ signature�data� evp_md_ctxr&rrr�verify4s   z_Ed25519PublicKey.verifyN)�__name__� __module__� __qualname__rrrr.rrrrr s r c@s4eZdZdd�Zdd�Zdd�Zdd�Zd d �Zd S) �_Ed25519PrivateKeycCs||_||_dS)N)r r)rrrrrrrLsz_Ed25519PrivateKey.__init__cCsz|jjjdt�}|jjjdt�}|jjj|j||�}|jj|dk�|jj|dtk�|jjj|�dd�}|jj |�S)Nzunsigned char []zsize_t *rr) r rrr r r!rr"r#Zed25519_load_public_bytes)rr$r%r&rrrr� public_keyPs 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||d�dd�S)Nrzunsigned char[]zsize_t *r)r r r'r"rr(r)r*ZEVP_DigestSignInitrrr r+ZEVP_DigestSignr#)rr,r-r&r$r%rrr�sign[s$ z_Ed25519PrivateKey.signcCsf|tjjks|tjjkrN|tjjk s>|tjjk s>t|tj� rFtd��|j�S|j j |||||j d�S)NzcWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption()) rrrrZ PrivateFormat� isinstanceZ NoEncryptionr�_raw_private_bytesr Z_private_key_bytesr)rrrZencryption_algorithmrrr� private_bytesrs     z _Ed25519PrivateKey.private_bytescCsp|jjjdt�}|jjjdt�}|jjj|j||�}|jj|dk�|jj|dtk�|jjj|t�dd�S)Nzunsigned char []zsize_t *rr) r rrr r ZEVP_PKEY_get_raw_private_keyrr"r#)rr$r%r&rrrr6�s z%_Ed25519PrivateKey._raw_private_bytesN)r/r0r1rr3r4r7r6rrrrr2Js  r2N)Z __future__rrrZ cryptographyrrZcryptography.hazmat.primitivesrZ1cryptography.hazmat.primitives.asymmetric.ed25519rr r r Zregister_interface�objectr r2rrrr�s 8