
    E#i5'                     "   S SK Jr  S SKrS SKrS SKrS SKJr  SSKJr  SSK	J
r
  Sr\R                  " \6 rSS jr " S	 S
5      rS rS rS r\4S jr\4S jrS rS rS rS rS rSS jrSS jrSS jrSS jrSS jrSS jrS r S r!S r"g)    )divisionN)sha256   )der)orderlen)r      iH  i='  r   r   c                     Uc  [         R                  nU S:  d   e[        U 5      nSnUS:  a,  US-  n[        U" U5      5      S-   nSUs=::  a  U :  a   U$   M2  [	        SU -  5      e)a  Return a random integer k such that 1 <= k < order, uniformly
distributed across that range. For simplicity, this only behaves well if
'order' is fairly close (but below) a power of 256. The try-try-again
algorithm we use takes longer and longer time (on average) to complete as
'order' falls, rising to a maximum of avg=512 loops for the worst-case
(256**k)+1 . All of the standard curves behave well. There is a cutoff at
10k loops (which raises RuntimeError) to prevent an infinite loop when
something is really broken like the entropy function not working.

Note that this function is not declared to be forwards-compatible: we may
change the behavior in future releases. The entropy= argument (which
should get a callable that behaves like os.urandom) can be used to
achieve stability within a given release (for repeatable unit tests), but
should not be used as a long-term-compatible key generation algorithm.
r   i'  r   zlrandrange() tried hard but gave up, either something is very wrong or you got realllly unlucky. Order was %x)osurandomr   string_to_numberRuntimeError)orderentropybytesdont_try_forever	candidates        ]/home/james-whalen/.local/lib/python3.13/site-packages/ccxt/static_dependencies/ecdsa/util.py	randranger      s    2 **199UOE
Q
A$WU^4q8		!E! "
 $% & &    c                   &    \ rS rSrS rS rS rSrg)PRNG<   c                 0    U R                  U5      U l        g N)block_generator	generator)selfseeds     r   __init__PRNG.__init__B   s    --d3r   c                 ~    [        U5       Vs/ s H  n[        U R                  5      PM     nn[        U5      $ s  snf r   )rangenextr   r   )r   numbytesias       r   __call__PRNG.__call__E   s1    +0?;?aT$..!?;Qx <s   :c              #      #    Sn [        SX!4-  R                  5       5      R                  5        H  nUv   M	     US-  nM=  7f)Nr   z
prng-%d-%sr   )r   encodedigest)r   r   counterbytes       r   r   PRNG.block_generatorI   sI      >FFHIPPR
 SqLG s   AA)r   N)__name__
__module____qualname____firstlineno__r   r'   r   __static_attributes__ r   r   r   r   <   s    4r   r   c                     [        U 5      " S[        U5      -  5      n[        [        R                  " U5      S5      US-
  -  S-   nSUs=::  a  U:  d  O   SX145       eU$ )Nr      r   )r   r   intbinasciihexlify)r   r   basenumbers       r   %randrange_from_seed__overshoot_modulor<   Q   sb     :a(5/)*D(""4("-;q@F2F 22Mr   c                     SU -  S-
  $ )Nr   r4   )numbitss    r   lsb_of_onesr?   ^   s    LAr   c                 j    [        [        R                  " U S-
  S5      S-   5      nUS-  nUS-  nXU4$ )Nr   r      )r7   mathlog)r   bitsr   	extrabitss       r   bits_and_bytesrF   b   s=    txx	1%)*DAIEqI	!!r   c                     [        U5      u  p4nU(       a  US-  nU" U 5      R                  5       S U nSU[        U5      -
  -  U-   nS[        [        R
                  " U5      S5      -   nSUs=::  a  U:  d   e   eU$ )Nr    r6   )rF   r+   lenr7   r8   r9   )r   r   hashmodrD   _bytesrE   r:   r;   s           r   #randrange_from_seed__truncate_bytesrL   t   s     -U3D)!4=!'6*DVc$i'(4/DX%%d+R00FMr   c                    [        [        R                  " US-
  S5      S-   5      nUS-   S-  nU" U 5      R                  5       S U nSU[	        U5      -
  -  U-   nSU-  U-
  nU(       a5  [         R                  [        US   5      [        U5      -  SS5      USS  -   nS[        [        R                  " U5      S5      -   nSUs=::  a  U:  d   e   eU$ )	Nr   r      rA   rH   r   bigr6   )
r7   rB   rC   r+   rI   to_bytesordr?   r8   r9   )r   r   rJ   rD   maxbytesr:   topbitsr;   s           r   "randrange_from_seed__truncate_bitsrT      s     txx	1%)*DqQH4=!)8,DXD	)*T1D(lT!G||CQL;w+??EJTRSRTXUX%%d+R00FMr   c                    US:  d   e[        U5      u  p#n[        U 5      n SnU(       a2  [        R                  [	        U" S5      5      [        U5      -  SS5      n[        Xe" U5      -   5      S-   nSUs=::  a  U:  a   U$   Md  )Nr   r   rO   )rF   r   r7   rP   rQ   r?   r   )r   r   rD   r   rE   generate	extrabyteguesss           r    randrange_from_seed__trytryagainrY      s     199+E2DDzH
	S!%5I8N%NPQSXYI Xe_!<=AL  r   c                     [        U5      nS[        SU-  5      -   S-   n[        R                  " X0-  R	                  5       5      n[        U5      U:X  d   [        U5      U45       eU$ Nz%0r   x)r   strr8   	unhexlifyr*   rI   numr   lfmt_strstrings        r   number_to_stringrd      sb    ASQZ#%G 6 6 89Fv;!-c&k1--Mr   c                     [        U5      nS[        SU-  5      -   S-   n[        R                  " X0-  R	                  5       5      nUS U $ r[   )r   r]   r8   r^   r*   r_   s        r   number_to_string_croprf      sI    ASQZ#%G 6 6 89F"1:r   c                 B    [        [        R                  " U 5      S5      $ Nr6   )r7   r8   r9   )rc   s    r   r   r      s    x',,r   c                     [        U5      n[        U 5      U:X  d   [        U 5      U45       e[        [        R                  " U 5      S5      $ rh   )r   rI   r7   r8   r9   )rc   r   ra   s      r   string_to_number_fixedlenrj      sC    Av;!-c&k1--x',,r   c                 6    [        X5      n[        X5      nXEU4$ r   )rd   rsr   vr_strs_strs         r   sigencode_stringsrr      s     Q&EQ&E?r   c                 (    [        XU5      u  pEnXE-   $ r   rr   rl   s         r   sigencode_stringru      s     (e4OE!=r   c                     [         R                  " [         R                  " U 5      [         R                  " U5      5      $ r   )r   encode_sequenceencode_integerrm   rn   r   ro   s       r   sigencode_derrz      s+    s11!4c6H6H6KLLr   c                 B    XS-  :  a  X!-
  nUb  US-  n[        XX#5      $ Nr   r   rt   ry   s       r   sigencode_strings_canonizer}      s-    19}I=FAQ5,,r   c                 B    XS-  :  a  X!-
  nUb  US-  n[        XX#5      $ r|   )ru   ry   s       r   sigencode_string_canonizer      s-    19}I=FAA%++r   c                 B    XS-  :  a  X!-
  nUb  US-  n[        XX#5      $ r|   )rz   ry   s       r   sigencode_der_canonizer      s-    19}I=FAu((r   c                     [        U5      n[        U 5      SU-  :X  d   [        U 5      SU-  45       e[        U S U U5      n[        XS  U5      nX44$ )Nr   r   rI   rj   )	signaturer   ra   rm   rn   s        r   sigdecode_stringr      s\    Ay>QU";S^QU$;;"!)BQ-7A!)B-7A4Kr   c                     U u  p#[        U5      n[        U5      U:X  d   [        U5      U45       e[        U5      U:X  d   [        U5      U45       e[        X!5      n[        X15      nXV4$ r   r   )
rs_stringsr   rp   rq   ra   rm   rn   s          r   sigdecode_stringsr      sg    NUAu:?+SZO+?u:?+SZO+?!%/A!%/A4Kr   c                 d   [         R                  " U 5      u  p#US:w  a-  [         R                  " S[        R                  " U5      -  5      e[         R
                  " U5      u  pE[         R
                  " U5      u  pcUS:w  a-  [         R                  " S[        R                  " U5      -  5      eXF4$ )Nr   ztrailing junk after DER sig: %sz#trailing junk after DER numbers: %s)r   remove_sequenceUnexpectedDERr8   r9   remove_integer)sig_derr   r   emptyrm   restrn   s          r   sigdecode_derr      s    ++G4J| A ( 0 0 7!8 9 	9  ,GA!!$'HA| E ( 0 0 7!8 9 	94Kr   r   )#
__future__r   r
   rB   r8   hashlibr    r   curvesr   oid_ecPublicKey
encode_oidencoded_oid_ecPublicKeyr   r   r<   r?   rF   rL   rT   rY   rd   rf   r   rj   rr   ru   rz   r}   r   r   r   r   r   r4   r   r   <module>r      s     	      +../: &&R *
"$ >D  =C &--M-,)r   