
    E#i}              	          S SK r S SKJrJrJr  SSKJr  SSKJr  SSK	J
r
  SSKJrJrJr  SS	KJr  SS
-  S-
  rSrS\S\4S jrS\S\4S jr SS\S\S\\   S\4S jjrSS\S\S\4S jjrS\\   S\4S jrS\S\4S jrg)    N)ListOptionalSequence   )keccak   )int_from_bytes)EC_ORDER)ECSignatureprivate_to_stark_keysign)pedersen_hash      0xdatareturnc                 N    [        [        R                  " U 5      5      [        -  $ )zV
A variant of eth-keccak that computes a value that fits in a Starknet field element.
)r	   r   SHA3MASK_250r   s    f/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/starknet/hash/utils.py_starknet_keccakr      s     &++d+,x77    c                 T    [         R                  " [        / U Q[        U 5      PS5      $ )aA  
Computes a hash chain over the data, in the following order:
    h(h(h(h(0, data[0]), data[1]), ...), data[n-1]), n).

The hash is initialized with 0 and ends with the data length appended.
The length is appended in order to avoid collisions of the following kind:
H([x,y,z]) = h(h(x,y),z) = H([w, z]) where w = h(x,y).
r   )	functoolsreducer   lenr   s    r   compute_hash_on_elementsr   $   s(     M+=T+=3t9+=qAAr   msg_hashpriv_keyseedc                     [        XU5      $ )z%
Signs the message with private key.
)r   )r    r!   r"   s      r   message_signaturer$   0   s     D))r   valuebytes_lengthc                 "    U R                  USS9$ )Nbig)	byteorder)to_bytes)r%   r&   s     r   encode_uintr+   E   s    >>,%>88r   c                 2    SR                  S U  5       5      $ )Nr   c              3   8   #    U  H  n[        U5      v   M     g 7f)N)r+   ).0xs     r   	<genexpr>#encode_uint_list.<locals>.<genexpr>J   s     1DqKNNDs   )joinr   s    r   encode_uint_listr3   I   s    881D111r   c                 .    U R                  5       S-   S-  $ )N      )
bit_length)r%   s    r   get_bytes_lengthr8   M   s    "q((r   )    )r   typingr   r   r    r   commonr	   	constantsr
   starkware.crypto.signaturer   r   r   #starkware.crypto.fast_pedersen_hashr   r   
HEX_PREFIXbytesintr   r   r$   r+   r3   r8    r   r   <module>rD      s     + +  #    c6A:
85 8S 8	B8 	B 	B 9;** *(0***9s 9# 9u 9249 2 2)C )C )r   