
    (i                         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
Z G d de      Zy)    )big_endian_to_int)BaseSignatureNonRecoverableSignature
PrivateKey	PublicKey	Signature)BadSignature)der)coerce_low_s)&validate_uncompressed_public_key_bytes   )BaseECCBackendreturnc                  ,    	 dd l } y# t        $ r Y yw xY w)Nr   TF)	coincurveImportError)r   s    L/var/www/br/venv/lib/python3.12/site-packages/eth_keys/backends/coincurve.pyis_coincurve_availabler      s#       s    	c                        e Zd Zd fdZdededefdZdededefdZ	dede
dedefd	Zdededefd
ZdedefdZdedefdZdedefdZ xZS )CoinCurveECCBackendr   c                     	 dd l }|j                  | _        |j                  | _        t        |           y # t        $ r t        d      w xY w)Nr   zYThe CoinCurveECCBackend requires the coincurve library which is not available for import.)r   r   keysecdsasuper__init__)selfr   	__class__s     r   r   zCoinCurveECCBackend.__init__(   sQ    	 NN	__
  	= 	s	   8 Amsg_hashprivate_keyc                     |j                         }| j                  j                  |      j                  |d       }t	        ||       }|S )Nhasherbackend)to_bytesr   r   sign_recoverabler   )r   r   r   private_key_bytessignature_bytes	signatures         r   
ecdsa_signzCoinCurveECCBackend.ecdsa_sign4   sQ    '002))../@ARR S 
 ot<	    c                     |j                         }| j                  j                  |      j                  |d       }t	        j
                  |      }t        ||       }|S )Nr!   )rsr$   )r%   r   r   signr
   two_int_sequence_decoderr   )r   r   r   r'   der_encoded_signaturer-   r)   s          r   ecdsa_sign_non_recoverablez.CoinCurveECCBackend.ecdsa_sign_non_recoverable=   se     (002 $		 4 45F G L L !M !
 ))*?@+r4@	r+   r)   
public_keyc                     t        |j                        }t        j                  |j                  |      }| j
                  j                  d|j                         z         }|j                  ||d       S )N   r!   )	r   sr
   two_int_sequence_encoderrr   r   r%   verify)r   r   r)   r2   low_sr0   coincurve_public_keys          r   ecdsa_verifyz CoinCurveECCBackend.ecdsa_verifyK   sm    
 Y[[) # < <Y[[% P#yy227Z=P=P=R3RS#**! + 
 	
r+   c                    |j                         }	 | j                  j                  j                  ||d       j	                  d      dd  }t        ||       }|S # t
        $ r}t        t        |            d }~ww xY w)Nr!   F
compressedr   r#   )r%   r   r   from_signature_and_messageformat	Exceptionr	   str)r   r   r)   r(   public_key_byteserrr2   s          r   ecdsa_recoverz!CoinCurveECCBackend.ecdsa_recoverY   s    #,,.	)#yy22MM  N   ff&qr	 + />
  	)s3x((	)s   ;A 	A>%A99A>c                     | j                   j                  |j                               j                  j	                  d      dd  }t        ||       S )NFr=   r   r#   )r   r   r%   r2   r@   r   )r   r   rC   s      r   private_key_to_public_keyz-CoinCurveECCBackend.private_key_to_public_keyf   sL    99//  "

*VVuV.qr3 )488r+   compressed_public_key_bytesc                 b    | j                   j                  |      }|j                  d      dd  S )NFr=   r   )r   r   r@   )r   rH   r2   s      r   decompress_public_key_bytesz/CoinCurveECCBackend.decompress_public_key_bytesl   s2    YY(()DE
  E 21266r+   uncompressed_public_key_bytesc                     t        |       t        |d d       t        |dd        f} | j                  j                  j                  | }|j                  d      S )N    Tr=   )r   r   r   r   
from_pointr@   )r   rK   pointr2   s       r   compress_public_key_bytesz-CoinCurveECCBackend.compress_public_key_bytesp   sd    ./LM;CR@A;BC@A
 4TYY((33U;
  D 11r+   )r   N)__name__
__module____qualname__r   bytesr   r   r*   r   r1   r   r   boolr;   rE   rG   rJ   rP   __classcell__)r   s   @r   r   r   '   s    
5 z i ,6	 

*7
EN
	
e 	 i 9Z 9I 97u 7QV 72u 2QV 2r+   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   rU   r   r    r+   r   <module>r_      sG    
 P2. P2r+   