U
    e]                     @   s   d dl mZmZmZ d dlmZmZ d dlmZ d dl	m
Z
mZ dZdZeeG dd deZee
G d	d
 d
eZdS )    )absolute_importdivisionprint_function)
exceptionsutils)serialization)Ed448PrivateKeyEd448PublicKey9   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_Ed448PublicKeyc                 C   s   || _ || _d S N_backend	_evp_pkeyselfZbackendZevp_pkey r   L/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ed448.py__init__   s    z_Ed448PublicKey.__init__c                 C   st   |t jjks|t jjkr@|t jjk	s0|t jjk	r8td|  S |t jkr^|t jjk	r^td| j	||| | j
d S )Nz3When using Raw both encoding and format must be Rawz?format must be SubjectPublicKeyInfo when encoding is PEM or DER)r   EncodingRawPublicFormat
ValueError_raw_public_bytes_PEM_DERZSubjectPublicKeyInfor   Z_public_key_bytesr   )r   encodingformatr   r   r   public_bytes   s4    




    z_Ed448PublicKey.public_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 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   3   s      z!_Ed448PublicKey._raw_public_bytesc                 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%   Cryptography_EVP_MD_CTX_newr'   r"   NULLgcCryptography_EVP_MD_CTX_freeZEVP_DigestVerifyInitr   ZEVP_DigestVerifylenZ_consume_errorsr   ZInvalidSignature)r   Z	signaturedata
evp_md_ctxr,   r   r   r   verify=   s0            
z_Ed448PublicKey.verifyN)__name__
__module____qualname__r   r   r   r4   r   r   r   r   r      s   
r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )_Ed448PrivateKeyc                 C   s   || _ || _d S r   r   r   r   r   r   r   R   s    z_Ed448PrivateKey.__init__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_keyV   s      z_Ed448PrivateKey.public_keyc                 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/   r0   ZEVP_DigestSignInitr   r#   _ED448_SIG_SIZEr1   ZEVP_DigestSignr(   )r   r2   r3   r,   r*   r+   r   r   r   signa   s4            z_Ed448PrivateKey.signc                 C   s   |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 |t j	krj|t jj
k	rjtd| j|||| jd S )NzcWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption()z0format must be PKCS8 when encoding is PEM or DER)r   r   r   r   ZPrivateFormat
isinstanceZNoEncryptionr   _raw_private_bytesr   ZPKCS8r   Z_private_key_bytesr   )r   r   r   Zencryption_algorithmr   r   r   private_bytesu   s8    





    z_Ed448PrivateKey.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#_Ed448PrivateKey._raw_private_bytesN)r5   r6   r7   r   r9   r;   r>   r=   r   r   r   r   r8   P   s
   r8   N)Z
__future__r   r   r   Zcryptographyr   r   Zcryptography.hazmat.primitivesr   Z/cryptography.hazmat.primitives.asymmetric.ed448r   r	   r$   r:   Zregister_interfaceobjectr   r8   r   r   r   r   <module>   s   >