U
    öEZh!  ã                   @   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   Zevp_pkey© r   ús/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/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ƒ‚|  ¡ 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   r   r   r   r   r   Úpublic_bytes   s&    
ÿ
þ
ÿ
þÿ    ÿz_Ed25519PublicKey.public_bytes©r   c                 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   0   s      ÿz#_Ed25519PublicKey._raw_public_bytesN)Ú	signatureÚdatar   c                 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   r,   r-   Ú
evp_md_ctxr+   r   r   r   Úverify:   s0     ÿû    ÿ
z_Ed25519PublicKey.verify)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Úbytesr   r   r4   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 r   r   r   r   r   r   r   Q   s    z_Ed25519PrivateKey.__init__r   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_keyU   s      ÿz_Ed25519PrivateKey.public_key)r-   r   c                 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/   r0   r1   ZEVP_DigestSignInitr   r#   r   r2   ZEVP_DigestSignr'   )r   r-   r3   r+   r)   r*   r   r   r   Úsign`   s4     ÿû    ÿz_Ed25519PrivateKey.sign)r   r   Úencryption_algorithmr   c                 C   sd   |t jjks|t jjkrL|t jjk	s<|t jjk	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   ÚPrivateFormatÚ
isinstanceZNoEncryptionr   Ú_raw_private_bytesr   Z_private_key_bytesr   )r   r   r   r<   r   r   r   Úprivate_bytesw   s2    
ÿ
þ
ÿ
þ ÿýÿ     ÿ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)r5   r6   r7   r   r   r:   r8   r;   r   r   r=   ZKeySerializationEncryptionr@   r?   r   r   r   r   r9   P   s   ûr9   )ÚtypingZcryptographyr   Zcryptography.hazmat.primitivesr   Z1cryptography.hazmat.primitives.asymmetric.ed25519r   r   r   r   ÚTYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendr   r	   r9   r   r   r   r   Ú<module>   s   <