3
ãdeó  ã               @   sj   d dl Z d dlmZ d dlmZ d dlmZmZ e jrBd dl	m
Z
 dZG dd„ deƒZG d	d
„ d
eƒZdS )é    N)Ú_evp_pkey_derive)Úserialization)ÚX448PrivateKeyÚX448PublicKey)ÚBackendé8   c               @   s>   e Zd Zddœdd„Zejejedœdd„Zedœd	d
„Z	dS )Ú_X448PublicKeyr   )Úbackendc             C   s   || _ || _d S )N)Ú_backendÚ	_evp_pkey)Úselfr	   Úevp_pkey© r   ú`/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/x448.pyÚ__init__   s    z_X448PublicKey.__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ƒ‚| jƒ S | j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_X448PublicKey.public_bytes)r   c             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Ú_X448_KEY_SIZEÚ_libÚEVP_PKEY_get_raw_public_keyr   Úopenssl_assertÚbuffer)r   ÚbufÚbuflenÚresr   r   r   r   0   s    z _X448PublicKey._raw_public_bytesN)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Úbytesr   r   r   r   r   r   r      s
   r   c               @   s`   e Zd Zddœ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 )Ú_X448PrivateKeyr   )r	   c             C   s   || _ || _d S )N)r
   r   )r   r	   r   r   r   r   r   <   s    z_X448PrivateKey.__init__)r   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x448_load_public_bytes)r   r"   r#   r$   r   r   r   r   Ú
public_key@   s    z_X448PrivateKey.public_key)Úpeer_public_keyr   c             C   s"   t |tƒstdƒ‚t| j| j|ƒS )Nz&peer_public_key must be X448PublicKey.)Ú
isinstancer   Ú	TypeErrorr   r
   r   )r   r+   r   r   r   ÚexchangeK   s    
z_X448PrivateKey.exchange)r   r   Úencryption_algorithmr   c             C   sf   |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 | jj	|||| | j
d ƒS )NzcWhen using Raw both encoding and format must be Raw and encryption_algorithm must be NoEncryption())r   r   r   ÚPrivateFormatr,   ZNoEncryptionr   Ú_raw_private_bytesr
   Z_private_key_bytesr   )r   r   r   r/   r   r   r   Úprivate_bytesQ   s    z_X448PrivateKey.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   r1   m   s    z"_X448PrivateKey._raw_private_bytesN)r%   r&   r'   r   r   r*   r(   r.   r   r   r0   ZKeySerializationEncryptionr2   r1   r   r   r   r   r)   ;   s   r)   )ÚtypingZ*cryptography.hazmat.backends.openssl.utilsr   Zcryptography.hazmat.primitivesr   Z.cryptography.hazmat.primitives.asymmetric.x448r   r   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r   r   r)   r   r   r   r   Ú<module>   s   '