3
¥K´^®  ã               @   s„   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZm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)Úutils)Ú_evp_pkey_derive)Úserialization)ÚX448PrivateKeyÚX448PublicKeyé8   c               @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú_X448PublicKeyc             C   s   || _ || _d S )N)Ú_backendÚ	_evp_pkey)ÚselfÚbackendÚevp_pkey© r   úM/tmp/pip-unpacked-wheel-vvkwn1hz/cryptography/hazmat/backends/openssl/x448.pyÚ__init__   s    z_X448PublicKey.__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_X448PublicKey.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Ú_X448_KEY_SIZEÚ_libÚEVP_PKEY_get_raw_public_keyr   Úopenssl_assertÚbuffer)r   ÚbufÚbuflenÚresr   r   r   r   3   s    z _X448PublicKey._raw_public_bytesN)Ú__name__Ú
__module__Ú__qualname__r   r   r   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 )Ú_X448PrivateKeyc             C   s   || _ || _d S )N)r   r   )r   r   r   r   r   r   r   @   s    z_X448PrivateKey.__init__c             C   sd   | 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|ƒS )Nzunsigned char []zsize_t *r   r   )	r   r   r   r    r!   r"   r   r#   Zx448_load_public_bytes)r   r%   r&   r'   r   r   r   Ú
public_keyD   s    z_X448PrivateKey.public_keyc             C   s"   t |tƒstdƒ‚t| j| j|ƒS )Nz&peer_public_key must be X448PublicKey.)Ú
isinstancer	   Ú	TypeErrorr   r   r   )r   Zpeer_public_keyr   r   r   ÚexchangeN   s    
z_X448PrivateKey.exchangec             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PrivateFormatr-   ZNoEncryptionr   Ú_raw_private_bytesr   ZPKCS8r   Z_private_key_bytesr   )r   r   r   Zencryption_algorithmr   r   r   Úprivate_bytesV   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   r0   s   s    z"_X448PrivateKey._raw_private_bytesN)r(   r)   r*   r   r,   r/   r1   r0   r   r   r   r   r+   >   s
   
r+   N)Ú
__future__r   r   r   Zcryptographyr   Z*cryptography.hazmat.backends.openssl.utilsr   Zcryptography.hazmat.primitivesr   Z.cryptography.hazmat.primitives.asymmetric.x448r   r	   r    Zregister_interfaceÚobjectr   r+   r   r   r   r   Ú<module>   s   ,