<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
yá˜_&  ã               @   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jeƒG dd„ deƒƒZej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)ÚselfÚbackendÚevp_pkey© r   ú/usr/lib64/python3.6/ed25519.pyÚ__init__   s    z_Ed25519PublicKey.__init__c             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   ÚencodingÚformatr   r   r   Úpublic_bytes   s    z_Ed25519PublicKey.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Ú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 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    ÚCryptography_EVP_MD_CTX_newr"   r   ÚNULLÚgcÚCryptography_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   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 )Ú_Ed25519PrivateKeyc             C   s   || _ || _d S )N)r   r   )r   r   r   r   r   r   r   L   s    z_Ed25519PrivateKey.__init__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_keyP   s    z_Ed25519PrivateKey.public_keyc             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.signc             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   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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   r6   ‰   s    z%_Ed25519PrivateKey._raw_private_bytesN)r/   r0   r1   r   r3   r4   r7   r6   r   r   r   r   r2   J   s
   r2   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   r2   r   r   r   r   Ú<module>   s   8