o
    ¢ØÆh  ã                   @   s†   d dl mZ d dlmZmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ ddlmZ d	efd
d„ZG dd„ deƒZdS )é    )Úbig_endian_to_int)ÚBaseSignatureÚNonRecoverableSignatureÚ
PrivateKeyÚ	PublicKeyÚ	Signature)ÚBadSignature)Úder)Úcoerce_low_s)Ú&validate_uncompressed_public_key_bytesé   )ÚBaseECCBackendÚreturnc                  C   s$   zdd l } W dS  ty   Y dS w )Nr   FT)Ú	coincurveÚImportError)r   © r   úh/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/eth_keys/backends/coincurve.pyÚis_coincurve_available   s   
ýÿr   c                       s°   e Zd Zd‡ fdd„Zdededefdd„Zdededefd	d
„Z	dede
dedefdd„Zdededefdd„Zdedefdd„Zdedefdd„Zdedefdd„Z‡  ZS )ÚCoinCurveECCBackendr   Nc                    sB   zdd l }W n ty   tdƒ‚w |j| _|j| _tƒ  ¡  d S )Nr   zYThe CoinCurveECCBackend requires the coincurve library which is not available for import.)r   r   ÚkeysÚecdsaÚsuperÚ__init__)Úselfr   ©Ú	__class__r   r   r   (   s   ÿÿzCoinCurveECCBackend.__init__Úmsg_hashÚprivate_keyc                 C   s.   |  ¡ }| j |¡j|d d�}t|| d�}|S )N©Úhasher©Úbackend)Úto_bytesr   r   Úsign_recoverabler   )r   r   r   Úprivate_key_bytesÚsignature_bytesÚ	signaturer   r   r   Ú
ecdsa_sign4   s   þzCoinCurveECCBackend.ecdsa_signc                 C   s8   |  ¡ }| j |¡j|d d�}t |¡}t|| d�}|S )Nr   )Úrsr!   )r"   r   r   Úsignr	   Útwo_int_sequence_decoderr   )r   r   r   r$   Úder_encoded_signaturer(   r&   r   r   r   Úecdsa_sign_non_recoverable=   s   þ
z.CoinCurveECCBackend.ecdsa_sign_non_recoverabler&   Ú
public_keyc                 C   s<   t |jƒ}t |j|¡}| j d| ¡  ¡}|j||d d�S )Nó   r   )	r
   Úsr	   Útwo_int_sequence_encoderÚrr   r   r"   Úverify)r   r   r&   r-   Úlow_sr+   Úcoincurve_public_keyr   r   r   Úecdsa_verifyK   s   
ýz CoinCurveECCBackend.ecdsa_verifyc              
   C   sf   |  ¡ }z| jjj||d d�jdd�dd … }W n ty* } ztt|ƒƒ‚d }~ww t|| d�}|S )Nr   F©Ú
compressedr   r    )r"   r   r   Úfrom_signature_and_messageÚformatÚ	Exceptionr   Ústr)r   r   r&   r%   Úpublic_key_bytesÚerrr-   r   r   r   Úecdsa_recoverY   s"   ýüü€ÿz!CoinCurveECCBackend.ecdsa_recoverc                 C   s.   | j  | ¡ ¡jjdd�dd … }t|| d�S )NFr6   r   r    )r   r   r"   r-   r9   r   )r   r   r<   r   r   r   Úprivate_key_to_public_keyf   s   ÿþþz-CoinCurveECCBackend.private_key_to_public_keyÚcompressed_public_key_bytesc                 C   s    | j  |¡}|jdd�dd … S )NFr6   r   )r   r   r9   )r   r@   r-   r   r   r   Údecompress_public_key_bytesl   s   z/CoinCurveECCBackend.decompress_public_key_bytesÚuncompressed_public_key_bytesc                 C   sB   t |ƒ t|d d… ƒt|dd … ƒf}| jjj|Ž }|jdd�S )Né    Tr6   )r   r   r   r   Ú
from_pointr9   )r   rB   Úpointr-   r   r   r   Úcompress_public_key_bytesp   s   þz-CoinCurveECCBackend.compress_public_key_bytes)r   N)Ú__name__Ú
__module__Ú__qualname__r   Úbytesr   r   r'   r   r,   r   r   Úboolr5   r>   r?   rA   rF   Ú__classcell__r   r   r   r   r   '   s.    	ÿÿ
þÿÿÿ
þr   N)Ú	eth_utilsr   Úeth_keys.datatypesr   r   r   r   r   Úeth_keys.exceptionsr   Úeth_keys.utilsr	   Úeth_keys.utils.numericr
   Úeth_keys.validationr   Úbaser   rK   r   r   r   r   r   r   Ú<module>   s    	