
    E#i                       S SK Jr  S SKJr  S SKJrJr  S SKJrJ	r	  S SK
JrJrJr  \(       a  S SKJr  SrSr\4SS	 jjr\4SS
 jjr\\4SS jjr\4SS jjr\4SS jjr \4SS jjr\4SS jjr\4SS jjr\4SS jjrg)    )annotations)TYPE_CHECKING)ffilib)GLOBAL_CONTEXTContext)bytes_to_intint_to_bytessha256)HasherH   @   c                    [         R                  " S5      n[         R                  " S[        5      n[        R                  " UR
                  X#U 5        [        [         R                  " X#S   5      5      $ )Nzunsigned char[72]zsize_t *r   )r   newMAX_SIG_LENGTHr   'secp256k1_ecdsa_signature_serialize_derctxbytesbuffer)cdatacontextder
der_lengths       I/home/james-whalen/.local/lib/python3.13/site-packages/coincurve/ecdsa.pycdata_to_derr      sO    
''%
&C^4J//SeTCA/00    c                    [         R                  " S5      n[        R                  " UR                  X [        U 5      5      nU(       d  Sn[        U5      eU$ )Nsecp256k1_ecdsa_signature *z.The DER-encoded signature could not be parsed.)r   r   r   #secp256k1_ecdsa_signature_parse_derr   len
ValueError)r   r   r   parsedmsgs        r   der_to_cdatar$      sE    GG12E44W[[%cRUhWF>oLr   c                    Ub  U" U 5      OU n[        U5      S:w  a  Sn[        U5      e[        R                  " S5      n[        R
                  " UR                  XaU5      nU(       a  U$ Sn[        U5      e)N    z#Message hash must be 32 bytes long.zsecp256k1_pubkey *z"failed to recover ECDSA public key)r    r!   r   r   r   secp256k1_ecdsa_recoverr   )messagerecover_sighasherr   msg_hashr#   pubkey	recovereds           r   recoverr.   $   sk    "("4vg'H
8}3oWW)*F++GKKhWI
.C
S/r   c                   [         R                  " S5      n[         R                  " S5      n[        R                  " UR                  X#U 5        [        [         R                  " U[        5      5      [        US   5      -   $ )Nunsigned char[64]zint *r   )	r   r   r   7secp256k1_ecdsa_recoverable_signature_serialize_compactr   r   r   CDATA_SIG_LENGTHr
   )r)   r   outputrecids       r   serialize_recoverabler5   2   s[    WW()FGGGE??V\ghF$456eAh9OOOr   c                2   [        U 5      S:w  a  Sn[        U5      eU S S [        U SS  5      pCSUs=::  a  S::  d  O  Sn[        U5      e[        R                  " S5      n[
        R                  " UR                  XSU5      nU(       d  Sn[        U5      eU$ )	NA   z+Serialized signature must be 65 bytes long.r   r      zInvalid recovery id.z'secp256k1_ecdsa_recoverable_signature *z&Failed to parse recoverable signature.)r    r!   r	   r   r   r   3secp256k1_ecdsa_recoverable_signature_parse_compactr   )
serializedr   r#   ser_sigrec_idr)   r"   s          r   deserialize_recoverabler=   ;   s    
:";o "o|JrsO'DV!$o''CDKDDW[[R]hnoF6or   c                    [         R                  " S5      n[        R                  " UR                  X 5      nU(       d  Sn[        U5      e[        [         R                  " U[        5      5      $ )Nr0   +secp256k1_ecdsa_signature_serialize_compact)	r   r   r   r?   r   r!   r   r   r2   )raw_sigr   r3   resr#   s        r   serialize_compactrB   V   sP    WW()F

9
9'++v
WC;oF$4566r   c                    [        U 5      S:w  a  Sn[        U5      e[        R                  " S5      n[        R
                  " UR                  X05      nU(       d  Sn[        U5      eU$ )Nr   zinvalid signature lengthr   'secp256k1_ecdsa_signature_parse_compact)r    r!   r   r   r   rD   r   )r;   r   r#   r@   rA   s        r   deserialize_compactrE   a   sY    
7|r(ogg34G

5
5gkk7
TC7oNr   c                    [         R                  " S5      n[        R                  " UR                  X 5      nU(       U4$ )z
Check and optionally convert a signature to a normalized lower-S form.

This function always return a tuple containing a boolean (True if
not previously normalized or False if signature was already
normalized), and the normalized signature.
r   )r   r   r   #secp256k1_ecdsa_signature_normalizer   )r@   r   sigoutrA   s       r   signature_normalizerI   o   s6     WW23F

1
1'++v
OCwr   c                t    [         R                  " S5      n[        R                  " UR                  X 5        U$ )Nr   )r   r   r   -secp256k1_ecdsa_recoverable_signature_convertr   )r)   r   
normal_sigs      r   recoverable_convertrM   ~   s+    67J55gkk:[r   N)r   r   returnr   )r   r   r   r   )r(   r   r*   r   r   r   )r:   r   r   r   )r   r   )r;   r   r   r   )
__future__r   typingr   coincurve._libsecp256k1r   r   coincurve.contextr   r   coincurve.utilsr	   r
   r   coincurve.typesr   r   r2   r   r$   r.   r5   r=   rB   rE   rI   rM    r   r   <module>rV      s    "   , 5 > >&  ,: 1 1?  ;AUc  ;I P CQ * 3A 7 <J  5C  9G r   