a
    Ç `ò  ã                   @   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mZm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)ÚEd25519PrivateKeyÚEd25519PublicKeyÚ_ED25519_KEY_SIZEÚ_ED25519_SIG_SIZEc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú_Ed25519PublicKeyc                 C   s   || _ || _d S ©N©Ú_backendÚ	_evp_pkey©ÚselfZbackendZevp_pkey© r   úN/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ed25519.pyÚ__init__   s    z_Ed25519PublicKey.__init__c                 C   sV   |t jju s|t jju r@|t jjus0|t jjur8t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   ÚencodingÚformatr   r   r   Úpublic_bytes   s    
ÿ
þ
ÿ
þÿÿz_Ed25519PublicKey.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Únewr
   Ú_libÚEVP_PKEY_get_raw_public_keyr   Úopenssl_assertÚbuffer©r   ÚbufÚbuflenÚresr   r   r   r   *   s    ÿz#_Ed25519PublicKey._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#   ÚEVP_MD_CTX_newr%   r!   ÚNULLÚgcÚEVP_MD_CTX_freeZEVP_DigestVerifyInitr   ZEVP_DigestVerifyÚlenZ_consume_errorsr   ZInvalidSignature)r   Z	signatureÚdataÚ
evp_md_ctxr*   r   r   r   Úverify4   s&    
ÿûÿ
z_Ed25519PublicKey.verifyN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r2   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 )Ú_Ed25519PrivateKeyc                 C   s   || _ || _d S r   r   r   r   r   r   r   L   s    z_Ed25519PrivateKey.__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ed25519_load_public_bytes)r   r(   r)   r*   r   r   r   r   Ú
public_keyP   s    ÿz_Ed25519PrivateKey.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-   r.   ZEVP_DigestSignInitr   r"   r   r/   ZEVP_DigestSignr&   )r   r0   r1   r*   r(   r)   r   r   r   Úsign[   s*    
ÿûÿz_Ed25519PrivateKey.signc                 C   sd   |t jju s|t jju rL|t jjus<|t jjus<t|t jƒsDt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   ZPrivateFormatÚ
isinstanceZNoEncryptionr   Ú_raw_private_bytesr   Z_private_key_bytesr   )r   r   r   Zencryption_algorithmr   r   r   Úprivate_bytesr   s&    
ÿ
þ
ÿ
þÿýÿÿz _Ed25519PrivateKey.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%_Ed25519PrivateKey._raw_private_bytesN)r3   r4   r5   r   r7   r8   r;   r:   r   r   r   r   r6   J   s
   r6   N)Z
__future__r   r   r   Zcryptographyr   r   Zcryptography.hazmat.primitivesr   Z1cryptography.hazmat.primitives.asymmetric.ed25519r   r	   r
   r   Zregister_interfaceÚobjectr   r6   r   r   r   r   Ú<module>   s   8