3
K^                 @   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jeG dd deZej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)selfbackendevp_pkey r   N/tmp/pip-unpacked-wheel-vvkwn1hz/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| j S |t jkr^|t jjk	r^td| j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   s    
z_Ed448PublicKey.public_bytesc             C   sp   | j jjdt}| j jjdt}| j jj| j||}| j j|dk | j j|d tk | j jj|td d  S )Nzunsigned char []z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 jjk | j jj|| j jj}| j jj|| j jj| j jj| j jj| j	}| j j|dk | j jj
||t||t|}|dkr| j 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   	signaturedata
evp_md_ctxr(   r   r   r   verify=   s    
z_Ed448PublicKey.verifyN)__name__
__module____qualname__r   r   r   r1   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 )N)r   r   )r   r   r   r   r   r   r   R   s    z_Ed448PrivateKey.__init__c             C   sz   | j jjdt}| j jjdt}| j jj| j||}| j j|dk | j j|d tk | j jj|d d  }| j j	|S )Nzunsigned char []zsize_t *r   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 jjk | j jj|| j jj}| j jj|| j jj| j jj| j jj| j	}| j j|dk | j jj
dt}| j jj
dt|}| j jj||||t|}| j j|dk | j j|d tk | j jj||d d d  S )Nr   zunsigned char[]zsize_t *r   )r   r"   r)   r$   r   r*   r+   r,   ZEVP_DigestSignInitr   r    _ED448_SIG_SIZEr-   ZEVP_DigestSignr%   )r   r/   r0   r(   r&   r'   r   r   r   signa   s    z_Ed448PrivateKey.signc             C   s   |t jjks|t jjkrN|t jjk	s>|t jjk	s>t|t j rFtd| j S |t j	krl|t jj
k	rltd| j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   s    
z_Ed448PrivateKey.private_bytesc             C   sp   | j jjdt}| j jjdt}| j jj| j||}| j j|dk | j j|d tk | j jj|td d  S )Nzunsigned char []zsize_t *r   r   )	r   r   r    r!   r"   ZEVP_PKEY_get_raw_private_keyr   r$   r%   )r   r&   r'   r(   r   r   r   r:      s    z#_Ed448PrivateKey._raw_private_bytesN)r2   r3   r4   r   r6   r8   r;   r:   r   r   r   r   r5   P   s
   r5   N)
__future__r   r   r   Zcryptographyr   r   Zcryptography.hazmat.primitivesr   Z/cryptography.hazmat.primitives.asymmetric.ed448r   r	   r!   r7   Zregister_interfaceobjectr   r5   r   r   r   r   <module>   s   >