o
    -&%a�  ã                   @   sT   d dl mZ d dlmZ d dlmZmZmZmZ G dd„ deƒZ	G dd„ deƒZ
dS )	é    )Ú
exceptions)Úserialization)ÚEd25519PrivateKeyÚEd25519PublicKeyÚ_ED25519_KEY_SIZEÚ_ED25519_SIG_SIZEc                   @   sR   e Zd Zdd„ Zdejdejdefdd„Zdefdd	„Z	d
ededdfdd„Z
dS )Ú_Ed25519PublicKeyc                 C   ó   || _ || _d S ©N©Ú_backendÚ	_evp_pkey©ÚselfÚbackendÚevp_pkey© r   úN/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/ed25519.pyÚ__init__   ó   
z_Ed25519PublicKey.__init__ÚencodingÚformatÚreturnc                 C   sV   |t jju s|t jju r |t jjus|t jjurtdƒ‚|  ¡ S | j ||| | jd ¡S )Nz3When using Raw both encoding and format must be Raw)	r   ÚEncodingÚRawÚPublicFormatÚ
ValueErrorÚ_raw_public_bytesr   Ú_public_key_bytesr   )r   r   r   r   r   r   Úpublic_bytes   s   ÿÿz_Ed25519PublicKey.public_bytesc                 C   óp   | 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   ,   ó   ÿz#_Ed25519PublicKey._raw_public_bytesÚ	signatureÚdataNc                 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rT| j  ¡  tj‚d S )Nr#   )r   r&   ÚEVP_MD_CTX_newr(   r$   ÚNULLÚgcÚEVP_MD_CTX_freeÚEVP_DigestVerifyInitr   ÚEVP_DigestVerifyÚlenÚ_consume_errorsr   ÚInvalidSignature)r   r/   r0   Ú
evp_md_ctxr-   r   r   r   Úverify6   s(   
ÿûÿ
þz_Ed25519PublicKey.verify)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   Úbytesr   r   r;   r   r   r   r   r      s    þý
ü
r   c                   @   sb   e Zd Zdd„ Zdefdd„Zdedefdd„Zd	ej	d
ej
dejdefdd„Zdefdd„ZdS )Ú_Ed25519PrivateKeyc                 C   r	   r
   r   r   r   r   r   r   M   r   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)   Úed25519_load_public_bytes)r   r+   r,   r-   r   r   r   r   Ú
public_keyQ   s   ÿz_Ed25519PrivateKey.public_keyr0   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&   r1   r(   r$   r2   r3   r4   ÚEVP_DigestSignInitr   r%   r   r7   ÚEVP_DigestSignr)   )r   r0   r:   r-   r+   r,   r   r   r   Úsign\   s*   
ÿûÿz_Ed25519PrivateKey.signr   r   Úencryption_algorithmc                 C   sd   |t jju s|t jju r&|t jjus|t jjust|t jƒs"t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   ÚPrivateFormatÚ
isinstanceÚNoEncryptionr   Ú_raw_private_bytesr   Ú_private_key_bytesr   )r   r   r   rF   r   r   r   Úprivate_bytess   s   ÿÿÿÿz _Ed25519PrivateKey.private_bytesc                 C   r    r!   )	r   r$   r%   r   r&   ÚEVP_PKEY_get_raw_private_keyr   r(   r)   r*   r   r   r   rJ   �   r.   z%_Ed25519PrivateKey._raw_private_bytesN)r<   r=   r>   r   r   rB   r?   rE   r   r   rG   ÚKeySerializationEncryptionrL   rJ   r   r   r   r   r@   L   s    þýü
ûr@   N)Úcryptographyr   Úcryptography.hazmat.primitivesr   Ú1cryptography.hazmat.primitives.asymmetric.ed25519r   r   r   r   r   r@   r   r   r   r   Ú<module>   s
   <