
    di                       d dl mZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZmZ erd dlmZ d d	lmZ d
ZdZdZdZdZdZdZ e	j        d          dk    rej        ej        fZ d:dZn< G d de!          Z" G d d          Z# e"ej        ej        f          Z  e#            Zd;dZ$d<dZ%d=d Z&d=d!Z'd>d"Z(d?d&Z)d@d(Z*dAd*Z+dBd+Z,dCd-Z-dDd/Z.eefdEd8Z/d9S )F    )annotations)	b64decode	b64encode)sha256)environurandom)TYPE_CHECKING)ffilib)GLOBAL_CONTEXTContext)	Generator)Hashers    H;^6AAl   AAl 3z~i9nW~         s   -----BEGIN PRIVATE KEY-----
s   -----END PRIVATE KEY-----
COINCURVE_BUILDING_DOCStruebytestrbytesreturnc                D    t          |                                           S N_sha256digestr   s    M/var/www/html/volatility/venv/lib/python3.11/site-packages/coincurve/utils.pyr   r      s    w&&(((    c                      e Zd ZddZdS )__Noncer   strc                    dS )Nz(ffi.NULL, ffi.NULL) selfs    r   __repr__z__Nonce.__repr__$   s    ))r   Nr   r!   )__name__
__module____qualname__r&   r#   r   r   r    r    #   s(        	* 	* 	* 	* 	* 	*r   r    c                      e Zd ZddZd	dZdS )
__HasherSHA256r   r   r   c                D    t          |                                          S r   r   )r%   r   s     r   __call__z__HasherSHA256.__call__(   s    7##**,,,r   r!   c                    dS )Nr   r#   r$   s    r   r&   z__HasherSHA256.__repr__+   s    8r   Nr   r   r   r   r'   )r(   r)   r*   r.   r&   r#   r   r   r,   r,   '   s<        	- 	- 	- 	-	 	 	 	 	 	r   r,   hexedr!   c                4    t          |           dz  s| nd|  S )N   0)lenr1   s    r   pad_hexr7   2   s!    E

Q755KKK7r   intc                8    t                               | d          S )Nbig)r8   
from_bytesr   s    r   bytes_to_intr<   7   s    >>'5)))r   numc                b    |                      |                                 dz   dz  pdd          S N      r3   r:   )to_bytes
bit_lengthr=   s    r   int_to_bytesrE   ;   s/    <<))A-!38q%@@@r   c                |    t          |                     |                                 dz   dz  pdd                    S r?   )
pad_scalarrB   rC   rD   s    r   int_to_bytes_paddedrH   ?   s7    cllCNN$4$4q$8Q#>#C!UKKLLLr   c                j    t          t                              t          |                               S r   )rG   r   fromhexr7   r6   s    r   hex_to_bytesrK   C   s"    emmGENN33444r   datasizeGenerator[bytes, None, None]c                \      fdt          dt                               D             S )Nc              3  2   K   | ]}||z            V  d S r   r#   ).0irL   rM   s     r   	<genexpr>zchunk_data.<locals>.<genexpr>H   s0      BB1DQXBBBBBBr   r   )ranger5   )rL   rM   s   ``r   
chunk_datarU   G   s3    BBBBBaTD(A(ABBBBr   derc           
         d                     t          d                     t          t          |           d                    dt          g          S )Nr      
@   )join
PEM_HEADERrU   r   
PEM_FOOTER)rV   s    r   
der_to_pemr]   K   s:    88ZJy~~r,J,J!K!KUT^_```r   pemc                    t          d                    |                                                                 dd                             S )Nr   r3   )r   rZ   strip
splitlines)r^   s    r   
pem_to_derrc   O   s9    SXXciikk4466qt<==>>>r   c                 f    	 t          t                    } t          | cxk     rt          k     rn n| S 1r   )r   KEY_SIZEZEROGROUP_ORDER)secrets    r   get_valid_secretri   S   s@    ""&&&&&;&&&&&Mr   scalarc                F    t           t          t          |           z
  z  | z   S r   )rf   re   r5   )rj   s    r   rG   rG   Z   s    Hs6{{*+v55r   rh   c                    dt          |           cxk     rt          k     sn dt           d}t          |          t          |           S )Nr   z3Secret scalar must be greater than 0 and less than .)r<   GROUP_ORDER_INT
ValueErrorrG   )rh   msgs     r   validate_secretrq   ^   sS    |F##5555o5555VOVVVoofr   	signaturemessage
public_keyhasherr   contextr   boolc                   t          j        d          }t          j        |j        ||t          |                    }|sd}t          |          | ||          n|}t          |          t          k    rd}t          |          t          j        d          }	t          j        |j        |	| t          |                     }
|
sd}t          |          t          j	        |j        |	||          }|  S )a  
    Verify an ECDSA signature.

    Parameters:
        signature: The ECDSA signature.
        message: The message that was supposedly signed.
        public_key: The formatted public key.
        hasher (collections.abc.Callable[[bytes], bytes] | None): The hash function to use, which must return 32 bytes.
            By default, the `sha256` algorithm is used. If `None`, no hashing occurs.
        context: The secp256k1 context.

    Returns:
        A boolean indicating whether or not the signature is correct.

    Raises:
        ValueError: If the public key could not be parsed or was invalid, the
            message hash was not 32 bytes long, or the DER-encoded signature
            could not be parsed.
    zsecp256k1_pubkey *z1The public key could not be parsed or is invalid.Nz#Message hash must be 32 bytes long.zsecp256k1_ecdsa_signature *z.The DER-encoded signature could not be parsed.)
r
   newr   secp256k1_ec_pubkey_parsectxr5   ro   MSG_HASH_SIZE#secp256k1_ecdsa_signature_parse_dersecp256k1_ecdsa_verify)rr   rs   rt   ru   rv   pubkeypubkey_parsedrp   msg_hashsig
sig_parsedverifieds               r   verify_signaturer   e   s    , W)**F1'+vzSVWaSbSbccM Aoo"("4vvg'H
8}}%%3oo
'/
0
0C8c9VYZcVdVdeeJ >oo)'+sHfMMH |r   Nr0   )r1   r!   r   r!   )r   r   r   r8   )r=   r8   r   r   )r1   r!   r   r   )rL   r   rM   r8   r   rN   )rV   r   r   r   )r^   r   r   r   )r   r   )rj   r   r   r   )rh   r   r   r   )rr   r   rs   r   rt   r   ru   r   rv   r   r   rw   )0
__future__r   base64r   r   hashlibr   r   osr   r   typingr	   coincurve._libsecp256k1r
   r   coincurve.contextr   r   collections.abcr   coincurve.typesr   rg   rn   re   r|   rf   r[   r\   getNULLDEFAULT_NONCEtupler    r,   r7   r<   rE   rH   rK   rU   r]   rc   ri   rG   rq   r   r#   r   r   <module>r      s   " " " " " " ' ' ' ' ' ' ' ' % % % % % %                     , , , , , , , , 5 5 5 5 5 5 5 5 '))))))&&&&&& v  U-
+
 7;())V33Xsx(M) ) ) ) )
* * * * *% * * *        GSXsx011M^F8 8 8 8
* * * *A A A AM M M M5 5 5 5C C C Ca a a a? ? ? ?   6 6 6 6    KQes. . . . . . .r   