o
    -&%a                     @   sT   d dl mZ d dlmZ d dlmZmZmZmZ G dd deZ	G dd deZ
dS )	    )
exceptions)serialization)Ed25519PrivateKeyEd25519PublicKey_ED25519_KEY_SIZE_ED25519_SIG_SIZEc                   @   sR   e Zd Zdd ZdejdejdefddZdefdd	Z	d
ededdfddZ
dS )_Ed25519PublicKeyc                 C      || _ || _d S N_backend	_evp_pkeyselfbackendevp_pkey r   N/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ed25519.py__init__      
z_Ed25519PublicKey.__init__encodingformatreturnc                 C   sV   |t jju s|t jju r |t jjus|t jjurtd|  S | j||| | jd S )Nz3When using Raw both encoding and format must be Raw)	r   EncodingRawPublicFormat
ValueError_raw_public_bytesr   _public_key_bytesr   )r   r   r   r   r   r   public_bytes   s   z_Ed25519PublicKey.public_bytesc                 C   p   | j jdt}| j jdt}| j j| j||}| j |dk | j |d tk | j j|td d  S Nzunsigned char []size_t *   r   )	r   _ffinewr   _libEVP_PKEY_get_raw_public_keyr   openssl_assertbufferr   bufbuflenresr   r   r   r   ,      z#_Ed25519PublicKey._raw_public_bytes	signaturedataNc                 C   s   | j j }| j || j jjk | j j|| j jj}| j j|| j jj| j jj| j jj| j	}| j |dk | j j
||t||t|}|dkrT| j   tjd S )Nr#   )r   r&   EVP_MD_CTX_newr(   r$   NULLgcEVP_MD_CTX_freeEVP_DigestVerifyInitr   EVP_DigestVerifylen_consume_errorsr   InvalidSignature)r   r/   r0   
evp_md_ctxr-   r   r   r   verify6   s(   

z_Ed25519PublicKey.verify)__name__
__module____qualname__r   r   r   r   bytesr   r   r;   r   r   r   r   r      s    

r   c                   @   sb   e Zd Zdd ZdefddZdedefddZd	ej	d
ej
dejdefddZdefddZdS )_Ed25519PrivateKeyc                 C   r	   r
   r   r   r   r   r   r   M   r   z_Ed25519PrivateKey.__init__r   c                 C   sz   | j jdt}| j jdt}| j j| j||}| j |dk | j |d tk | j j|d d  }| j 	|S r!   )
r   r$   r%   r   r&   r'   r   r(   r)   ed25519_load_public_bytes)r   r+   r,   r-   r   r   r   r   
public_keyQ   s   z_Ed25519PrivateKey.public_keyr0   c                 C   s   | j j }| j || j jjk | j j|| j jj}| j j|| j jj| j jj| j jj| j	}| j |dk | j j
dt}| j j
dt|}| j j||||t|}| j |dk | j |d tk | j j||d d d  S )Nr#   zunsigned char[]r"   r   )r   r&   r1   r(   r$   r2   r3   r4   EVP_DigestSignInitr   r%   r   r7   EVP_DigestSignr)   )r   r0   r:   r-   r+   r,   r   r   r   sign\   s*   
z_Ed25519PrivateKey.signr   r   encryption_algorithmc                 C   sd   |t jju s|t jju r&|t jjus|t jjust|t js"td|  S | j	
|||| | jd S )NzcWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption())r   r   r   r   PrivateFormat
isinstanceNoEncryptionr   _raw_private_bytesr   _private_key_bytesr   )r   r   r   rF   r   r   r   private_bytess   s   z _Ed25519PrivateKey.private_bytesc                 C   r    r!   )	r   r$   r%   r   r&   EVP_PKEY_get_raw_private_keyr   r(   r)   r*   r   r   r   rJ      r.   z%_Ed25519PrivateKey._raw_private_bytesN)r<   r=   r>   r   r   rB   r?   rE   r   r   rG   KeySerializationEncryptionrL   rJ   r   r   r   r   r@   L   s    
r@   N)cryptographyr   cryptography.hazmat.primitivesr   1cryptography.hazmat.primitives.asymmetric.ed25519r   r   r   r   r   r@   r   r   r   r   <module>   s
   <