3
ãde!  ã               @   sn   d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	 e j
rJd dlmZ G dd„ de	ƒZG dd	„ d	eƒZdS )
é    N)Ú
exceptions)Úserialization)Ú_ED25519_KEY_SIZEÚ_ED25519_SIG_SIZEÚEd25519PrivateKeyÚEd25519PublicKey)ÚBackendc               @   sP   e Zd Zddœdd„Zejejedœdd„Zedœd	d
„Z	eeddœdd„Z
dS )Ú_Ed25519PublicKeyr   )Úbackendc             C   s   || _ || _d S )N)Ú_backendÚ	_evp_pkey)Úselfr
   Úevp_pkey© r   úc/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/backends/openssl/ed25519.pyÚ__init__   s    z_Ed25519PublicKey.__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_Ed25519PublicKey.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Únewr   Ú_libÚEVP_PKEY_get_raw_public_keyr   Úopenssl_assertÚbuffer)r   ÚbufÚbuflenÚresr   r   r   r   0   s    z#_Ed25519PublicKey._raw_public_bytesN)Ú	signatureÚdatar   c             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   ÚEVP_MD_CTX_newr    r   ÚNULLÚgcÚEVP_MD_CTX_freeZEVP_DigestVerifyInitr   ZEVP_DigestVerifyÚlenZ_consume_errorsr   ZInvalidSignature)r   r%   r&   Ú
evp_md_ctxr$   r   r   r   Úverify:   s     
z_Ed25519PublicKey.verify)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Úbytesr   r   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 )Ú_Ed25519PrivateKeyr   )r
   c             C   s   || _ || _d S )N)r   r   )r   r
   r   r   r   r   r   Q   s    z_Ed25519PrivateKey.__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ed25519_load_public_bytes)r   r"   r#   r$   r   r   r   r   Ú
public_keyU   s    z_Ed25519PrivateKey.public_key)r&   r   c             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   r   r+   ZEVP_DigestSignr!   )r   r&   r,   r$   r"   r#   r   r   r   Úsign`   s$    z_Ed25519PrivateKey.sign)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   ÚPrivateFormatÚ
isinstanceZNoEncryptionr   Ú_raw_private_bytesr   Z_private_key_bytesr   )r   r   r   r5   r   r   r   Úprivate_bytesw   s    z _Ed25519PrivateKey.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   r8   “   s    z%_Ed25519PrivateKey._raw_private_bytesN)r.   r/   r0   r   r   r3   r1   r4   r   r   r6   ZKeySerializationEncryptionr9   r8   r   r   r   r   r2   P   s   r2   )ÚtypingZcryptographyr   Zcryptography.hazmat.primitivesr   Z1cryptography.hazmat.primitives.asymmetric.ed25519r   r   r   r   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r	   r2   r   r   r   r   Ú<module>   s   <