
     h!                         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
        rd dlmZ  G d de	          Z G d d	e          ZdS )
    N)
exceptions)serialization)_ED25519_KEY_SIZE_ED25519_SIG_SIZEEd25519PrivateKeyEd25519PublicKey)Backendc                   ^    e Zd ZddZdej        dej        defdZdefdZ	d	ed
eddfdZ
dS )_Ed25519PublicKeybackendr	   c                 "    || _         || _        d S N_backend	_evp_pkeyselfr   evp_pkeys      h/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/cryptography/hazmat/backends/openssl/ed25519.py__init__z_Ed25519PublicKey.__init__       !    encodingformatreturnc                 &   |t           j        j        u s|t           j        j        u rI|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   s      r   public_bytesz_Ed25519PublicKey.public_bytes   s     .2223777  6 :::!;!??? I   ))+++}..fdDND
 
 	
r   c                    | 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ress       r   r!   z#_Ed25519PublicKey._raw_public_bytes0   s    m $$%79JKK#''
4EFFm <<NC
 
 	$$SAX...$$VAY2C%CDDD}!((.?@@CCr   	signaturedataNc           	         | 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_freeEVP_DigestVerifyInitr   EVP_DigestVerifylen_consume_errorsr   InvalidSignature)r   r2   r3   
evp_md_ctxr1   s        r   verifyz_Ed25519PublicKey.verify:   s#   ]'6688
$$Z4=3E3J%JKKK]'***:
 

 m 55M#M#M#N
 
 	$$SAX...m 11	3y>>4T
 
 !88M))+++-- 8r   r   r	   )__name__
__module____qualname__r   r   r   r   bytesr#   r!   r?    r   r   r   r      s        " " " "
(
 *
 
	
 
 
 
.D5 D D D D. .U .t . . . . . .r   r   c                   t    e Zd ZddZdefdZdedefdZdej	        d	ej
        d
ej        defdZdefdZdS )_Ed25519PrivateKeyr   r	   c                 "    || _         || _        d S r   r   r   s      r   r   z_Ed25519PrivateKey.__init__Q   r   r   r   c                    | 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/   r0   r1   r#   s        r   
public_keyz_Ed25519PrivateKey.public_keyU   s    m $$%79JKK#''
4EFFm <<NC
 
 	$$SAX...$$VAY2C%CDDD})0055aaa8}66|DDDr   r3   c           	         | 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*   r5   r,   r(   r6   r7   r8   EVP_DigestSignInitr   r)   r   r;   EVP_DigestSignr-   )r   r3   r>   r1   r/   r0   s         r   signz_Ed25519PrivateKey.sign`   s   ]'6688
$$Z4=3E3J%JKKK]'***:
 

 m 33M#M#M#N
 
 	$$SAX...m $$%68IJJ#''
CHH==m //VT3t99
 
 	$$SAX...$$VAY2C%CDDD}!((fQi88;;r   r   r   encryption_algorithmc                 \   |t           j        j        u s|t           j        j        u rc|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   PrivateFormat
isinstanceNoEncryptionr    _raw_private_bytesr   _private_key_bytesr   )r   r   r   rP   s       r   private_bytesz _Ed25519PrivateKey.private_bytesw   s     .2224888 m9====#9#===!(-*D  >
 !F  
 **,,,}//f2D$.$
 
 	
r   c                    | 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*   EVP_PKEY_get_raw_private_keyr   r,   r-   r.   s       r   rU   z%_Ed25519PrivateKey._raw_private_bytes   s    m $$%79JKK#''
4EFFm ==NC
 
 	$$SAX...$$VAY2C%CDDD}!((.?@@CCr   Nr@   )rA   rB   rC   r   r   rK   rD   rO   r   r   rR   KeySerializationEncryptionrW   rU   rE   r   r   rG   rG   P   s        " " " "	E, 	E 	E 	E 	E< <5 < < < <.
(
 +
 ,F	

 

 
 
 
8DE D D D D D Dr   rG   )typingcryptographyr   cryptography.hazmat.primitivesr   1cryptography.hazmat.primitives.asymmetric.ed25519r   r   r   r   TYPE_CHECKING,cryptography.hazmat.backends.openssl.backendr	   r   rG   rE   r   r   <module>ra      s  
  # # # # # # 8 8 8 8 8 8            
 EDDDDDD9. 9. 9. 9. 9.( 9. 9. 9.xKD KD KD KD KD* KD KD KD KD KDr   