
    di                        d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZmZmZ erd dlmZ dZdZefddZefddZeefddZefddZefd dZ	 efd!dZefd"dZefd!dZefd!dZdS )#    )annotations)TYPE_CHECKING)ffilib)GLOBAL_CONTEXTContext)bytes_to_intint_to_bytessha256)HasherH   @   contextr   returnbytesc                    t          j        d          }t          j        dt                    }t          j        |j        |||            t          t          j        ||d                             S )Nzunsigned char[72]zsize_t *r   )r   newMAX_SIG_LENGTHr   'secp256k1_ecdsa_signature_serialize_derctxr   buffer)cdatar   der
der_lengths       M/var/www/html/volatility/venv/lib/python3.11/site-packages/coincurve/ecdsa.pycdata_to_derr      sZ    
'%
&
&C^44J/S*eTTTCA//000    r   c                    t          j        d          }t          j        |j        || t          |                     }|sd}t          |          |S )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%      sO    G122E4W[%cRUhhWWF >ooLr   messagehasherr   c                    | ||           n| }t          |          dk    rd}t          |          t          j        d          }t	          j        |j        |||          }|r|S d}t          |          )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   )r&   recover_sigr'   r   msg_hashr$   pubkey	recovereds           r   recoverr/   $   s    "("4vvg'H
8}}3ooW)**F+GKhWWI 
.C
S//r   c                   t          j        d          }t          j        d          }t          j        |j        |||            t          t          j        |t                              t          |d                   z   S )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_recoverabler6   2   sh    W())FGGE?VUZ\ghhhF$45566eAh9O9OOOr   
serializedc                V   t          |           dk    rd}t          |          | d d         t          | dd                    }}d|cxk    rdk    sn d}t          |          t          j        d          }t          j        |j        |||          }|sd}t          |          |S )	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   )r7   r   r$   ser_sigrec_idr+   r#   s          r   deserialize_recoverabler>   ;   s    
:";oo "o|JrssO'D'DVG!$oo'CDDKDW[R]_fhnooF 6oor   c                    t          j        d          }t          j        |j        ||           }|sd}t          |          t          t          j        |t                              S )Nr1   +secp256k1_ecdsa_signature_serialize_compact)	r   r   r   r@   r   r"   r   r   r3   )raw_sigr   r4   resr$   s        r   serialize_compactrC   V   s\    W())F

9'+vw
W
WC ;ooF$455666r   r<   c                    t          |           dk    rd}t          |          t          j        d          }t	          j        |j        ||           }|sd}t          |          |S )Nr   zinvalid signature lengthr   'secp256k1_ecdsa_signature_parse_compact)r!   r"   r   r   r   rE   r   )r<   r   r$   rA   rB   s        r   deserialize_compactrF   a   sh    
7||r(oog344G

5gk7G
T
TC 7ooNr   c                l    t          j        d          }t          j        |j        ||           }|  |fS )a  
    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   )rA   r   sigoutrB   s       r   signature_normalizerJ   o   s9     W233F

1'+vw
O
OCw;r   c                d    t          j        d          }t          j        |j        ||            |S )Nr   )r   r   r   -secp256k1_ecdsa_recoverable_signature_convertr   )r+   r   
normal_sigs      r   recoverable_convertrN   ~   s/    677J5gk:{[[[r   N)r   r   r   r   )r   r   r   r   )r&   r   r'   r   r   r   )r7   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   r3   r   r%   r/   r6   r>   rC   rF   rJ   rN    r   r   <module>rV      s   " " " " " "             , , , , , , , , 5 5 5 5 5 5 5 5 > > > > > > > > > > '&&&&&&  ,: 1 1 1 1 1 1?      ;AUc      ;I P P P P P CQ     * 3A 7 7 7 7 7 <J      5C      9G       r   