
    ":h                     \    d dl mZ ddlmZ  G d de      Z G d de      Z eddd      Zy)	    )division   )numbertheoryc                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	CurveFpz9Elliptic Curve over the field of integers modulo a prime.c                 .    || _         || _        || _        y)z;The curve of points satisfying y^2 = x^3 + a*x + b (mod p).N_CurveFp__p_CurveFp__a_CurveFp__b)selfpabs       f/var/www/html/turnos/venv/lib/python3.12/site-packages/ccxt/static_dependencies/ecdsa/ellipticcurve.py__init__zCurveFp.__init__+   s        c                     | j                   S N)r
   r   s    r   r   z	CurveFp.p1       xxr   c                     | j                   S r   )r   r   s    r   r   z	CurveFp.a4   r   r   c                     | j                   S r   )r   r   s    r   r   z	CurveFp.b7   r   r   c                 x    ||z  ||z  |z  | j                   |z  z   | j                  z   z
  | j                  z  dk(  S )z!Is the point (x,y) on this curve?r   )r   r   r
   )r   xys      r   contains_pointzCurveFp.contains_point:   s=    AQTXX\1DHH<=IQNNr   c                 N    d| j                   | j                  | j                  fz  S )NzCurveFp(p=%d, a=%d, b=%d)r	   r   s    r   __str__zCurveFp.__str__>   s     *dhh$((-KKKr   N)
__name__
__module____qualname____doc__r   r   r   r   r   r    r   r   r   r   (   s%    COLr   r   c                   T    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zy)PointzsA point on an elliptic curve. Altering x and y is forbidding,
     but they can be read by the x() and y() methods.Nc                     || _         || _        || _        || _        | j                   r| j                   j	                  ||      sJ |r| |z  t
        k(  sJ yy)z@curve, x, y, order; order (optional) is the order of this point.N)_Point__curve	_Point__x	_Point__y_Point__orderr   INFINITY)r   curver   r   orders        r   r   zPoint.__init__F   sY    <<<<..q!444%<8+++ r   c                     | j                   |j                   k(  r3| j                  |j                  k(  r| j                  |j                  k(  ryy)z9Return True if the points are identical, False otherwise.TF)r(   r)   r*   r   others     r   __eq__zPoint.__eq__R   s8    <<5==(HH		)HH		)r   c                    |t         k(  r| S | t         k(  r|S | j                  |j                  k(  sJ | j                  |j                  k(  rM| j                  |j                  z   | j                  j	                         z  dk(  rt         S | j                         S | j                  j	                         }|j                  | j                  z
  t        j                  |j                  | j                  z
  |      z  |z  }||z  | j                  z
  |j                  z
  |z  }|| j                  |z
  z  | j                  z
  |z  }t        | j                  ||      S )zAdd one point to another point.r   )	r,   r(   r)   r*   r   doubler   inverse_modr&   )r   r1   r   lx3y3s         r   __add__zPoint.__add__[   s   
 HK8L||u}},,,88uyy 599$(88A={{}$LLNNii$(("%%eii$((&:A>?BCD !edhh*a/488b=!DHH,1T\\2r**r   c                    d }|}| j                   r|| j                   z  }|dk(  rt        S | t        k(  rt        S |dkD  sJ d|z  }t        | j                  | j                  | j
                   | j                         } ||      dz  }| }|dkD  rE|j                         }||z  dk7  r||z  dk(  r|| z   }||z  dk(  r||z  dk7  r||z   }|dz  }|dkD  rE|S )Multiply a point by an integer.c                 >    | dkD  sJ d}|| k  rd|z  }|| k  r|dz  S )Nr   r      r$   )r   results     r   leftmost_bitz#Point.__mul__.<locals>.leftmost_bitx   s5    q5L5FA+V A+Q;r   r      r=   r   )r+   r,   r&   r(   r)   r*   r4   )r   r1   r?   ee3negative_selfir>   s           r   __mul__zPoint.__mul__u   s    	 <<DLL A6O8O1uu UdllDHHtxxiN!!e]]_FQ1}!a%A$Q1}!a%A-/QA !e r   c                     | |z  S )r;   r$   r0   s     r   __rmul__zPoint.__rmul__   s     e|r   c                 L    | t         k(  ryd| j                  | j                  fz  S )Ninfinityz(%d,%d))r,   r)   r*   r   s    r   r   zPoint.__str__   s%    8DHHdhh///r   c                    | t         k(  rt         S | j                  j                         }| j                  j                         }d| j                  z  | j                  z  |z   t        j                  d| j                  z  |      z  |z  }||z  d| j                  z  z
  |z  }|| j                  |z
  z  | j                  z
  |z  }t        | j                  ||      S )z)Return a new point that is twice the old.r@   r=   )	r,   r(   r   r   r)   r   r5   r*   r&   )r   r   r   r6   r7   r8   s         r   r4   zPoint.double   s     8O LLNNLLNN$((lTXX%)%%a$((lA67:;< !ea$((l"a'488b=!DHH,1T\\2r**r   c                     | j                   S r   )r)   r   s    r   r   zPoint.x   r   r   c                     | j                   S r   )r*   r   s    r   r   zPoint.y   r   r   c                     | j                   S r   )r(   r   s    r   r-   zPoint.curve       ||r   c                     | j                   S r   )r+   r   s    r   r.   zPoint.order   rN   r   r   )r    r!   r"   r#   r   r2   r9   rE   rG   r   r4   r   r   r-   r.   r$   r   r   r&   r&   B   s?    9
,+4#J
0
+&r   r&   N)
__future__r    r   objectr   r&   r,   r$   r   r   <module>rS      s;   F   Lf L4F F tT"r   