U
    [e                     @   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                   @   sJ   e Zd Zdd ZejejedddZedddZ	eed	d
ddZ
d	S )_Ed25519PublicKeyc                 C   s   || _ || _d S N_backend	_evp_pkeyselfbackendZevp_pkey r   n/var/www/html/services/stratfitenv/lib/python3.8/site-packages/cryptography/hazmat/backends/openssl/ed25519.py__init__   s    z_Ed25519PublicKey.__init__)encodingformatreturnc                 C   sV   |t jjks|t jjkr@|t jjk	s0|t jjk	r8td|  S | j||| | jd S )Nz3When using Raw both encoding and format must be Raw)	r   EncodingRawPublicFormat
ValueError_raw_public_bytesr   Z_public_key_bytesr   )r   r   r   r   r   r   public_bytes   s&    



    z_Ed25519PublicKey.public_bytesr   c                 C   sp   | 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   ,   s      z#_Ed25519PublicKey._raw_public_bytesN)	signaturedatar   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
||t||t|}|dkr| j   tjd S )Nr   )r   r"   EVP_MD_CTX_newr$   r    NULLgcEVP_MD_CTX_freeZEVP_DigestVerifyInitr   ZEVP_DigestVerifylenZ_consume_errorsr   ZInvalidSignature)r   r*   r+   
evp_md_ctxr)   r   r   r   verify6   s0         
z_Ed25519PublicKey.verify)__name__
__module____qualname__r   r   r   r   bytesr   r   r2   r   r   r   r   r      s   
r   c                   @   sZ   e Zd Zdd ZedddZeedddZej	ej
ejed	d
dZedddZdS )_Ed25519PrivateKeyc                 C   s   || _ || _d S r	   r
   r   r   r   r   r   M   s    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%   Zed25519_load_public_bytes)r   r'   r(   r)   r   r   r   r   
public_keyQ   s      z_Ed25519PrivateKey.public_key)r+   r   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"   r,   r$   r    r-   r.   r/   ZEVP_DigestSignInitr   r!   r   r0   ZEVP_DigestSignr%   )r   r+   r1   r)   r'   r(   r   r   r   sign\   s4         z_Ed25519PrivateKey.sign)r   r   encryption_algorithmr   c                 C   sd   |t jjks|t jjkrL|t jjk	s<|t jjk	s<t|t jsDt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
isinstanceZNoEncryptionr   _raw_private_bytesr   Z_private_key_bytesr   )r   r   r   r:   r   r   r   private_bytess   s2    



      z _Ed25519PrivateKey.private_bytesc                 C   sp   | j jdt}| j jdt}| j j| j||}| j |dk | j |d tk | j j|td d  S r   )	r   r    r!   r   r"   ZEVP_PKEY_get_raw_private_keyr   r$   r%   r&   r   r   r   r=      s      z%_Ed25519PrivateKey._raw_private_bytesN)r3   r4   r5   r   r   r8   r6   r9   r   r   r;   ZKeySerializationEncryptionr>   r=   r   r   r   r   r7   L   s   r7   N)Zcryptographyr   Zcryptography.hazmat.primitivesr   Z1cryptography.hazmat.primitives.asymmetric.ed25519r   r   r   r   r   r7   r   r   r   r   <module>   s   <