o
    bo                     @   sT   d dl mZ d dlmZ d dlmZmZ dZdZG dd deZ	G dd	 d	eZ
d
S )    )
exceptions)serialization)Ed448PrivateKeyEd448PublicKey9   r   c                   @   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 )_Ed448PublicKeyc                 C      || _ || _d S N_backend	_evp_pkeyselfbackendZevp_pkey r   i/var/www/secure340b-portal/env/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/ed448.py__init__      
z_Ed448PublicKey.__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   Z_public_key_bytesr   )r   r   r   r   r   r   public_bytes   s   



z_Ed448PublicKey.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new_ED448_KEY_SIZE_libEVP_PKEY_get_raw_public_keyr   openssl_assertbufferr   bufbuflenresr   r   r   r   -      z!_Ed448PublicKey._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_freeZEVP_DigestVerifyInitr   ZEVP_DigestVerifylenZ_consume_errorsr   ZInvalidSignature)r   r.   r/   
evp_md_ctxr,   r   r   r   verify7   s(   

z_Ed448PublicKey.verify)__name__
__module____qualname__r   r   r   r   bytesr   r   r6   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 )_Ed448PrivateKeyc                 C   r	   r
   r   r   r   r   r   r   N   r   z_Ed448PrivateKey.__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ed448_load_public_bytes)r   r*   r+   r,   r   r   r   r   
public_keyR   s   z_Ed448PrivateKey.public_keyr/   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%   r0   r'   r"   r1   r2   r3   ZEVP_DigestSignInitr   r#   _ED448_SIG_SIZEr4   ZEVP_DigestSignr(   )r   r/   r5   r,   r*   r+   r   r   r   sign]   s*   
z_Ed448PrivateKey.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
isinstanceZNoEncryptionr   _raw_private_bytesr   Z_private_key_bytesr   )r   r   r   r?   r   r   r   private_bytest   s&   



z_Ed448PrivateKey.private_bytesc                 C   r   r   )	r   r"   r#   r$   r%   ZEVP_PKEY_get_raw_private_keyr   r'   r(   r)   r   r   r   rB      r-   z#_Ed448PrivateKey._raw_private_bytesN)r7   r8   r9   r   r   r<   r:   r>   r   r   r@   ZKeySerializationEncryptionrC   rB   r   r   r   r   r;   M   s    
r;   N)Zcryptographyr   Zcryptography.hazmat.primitivesr   Z/cryptography.hazmat.primitives.asymmetric.ed448r   r   r$   r=   r   r;   r   r   r   r   <module>   s   <