
    i                     p    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dS )	    )division   )numbertheoryc                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	CurveFpz9Elliptic Curve over the field of integers modulo a prime.c                 0    || _         || _        || _        dS )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       r/var/www/html/crypto-bot/backend/venv/lib/python3.11/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   	    x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                 \    ||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:   s7    AQTX\1DH<=IQNNr   c                 0    d| j         | j        | j        fz  S )NzCurveFp(p=%d, a=%d, b=%d)r	   r   s    r   __str__zCurveFp.__str__>   s    *dh$(-KKKr   N)
__name__
__module____qualname____doc__r   r   r   r   r   r    r   r   r   r   (   s|        CC        O O OL L L L Lr   r   c                   V    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dS )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                             ||          sJ |r| |z  t
          k    sJ dS dS )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   ss    < 	5<..q!44444 	,%<8++++	, 	,++r   c                 j    | j         |j         k    r"| j        |j        k    r| j        |j        k    rdS dS )z9Return True if the points are identical, False otherwise.TF)r(   r)   r*   r   others     r   __eq__zPoint.__eq__R   s9    <5=((H	))H	))45r   c                 2   |t           k    r| S | t           k    r|S | j        |j        k    sJ | j        |j        k    rH| j        |j        z   | j                                        z  dk    rt           S |                                 S | 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},,,,8uy  59$(8(88A=={{}}$LNNi$("%ei$(&:A>>?BCD !edh*a/48b=!DH,1T\2r***r   c                    d }|}| j         r
|| j         z  }|dk    rt          S | t          k    rt          S |dk    sJ d|z  }t          | j        | j        | j         | j                   } ||          dz  }| }|dk    rM|                                }||z  dk    r||z  dk    r|| z   }||z  dk    r||z  dk    r||z   }|dz  }|dk    M|S )Multiply a point by an integer.c                 B    | dk    sJ d}|| k    rd|z  }|| k    |dz  S )Nr   r      r$   )r   results     r   leftmost_bitz#Point.__mul__.<locals>.leftmost_bitx   s;    q5555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   	 	 	 < 	!DL A66O8O1uuuu UdlDHtxiNNL!!ee]]__FQ1}}!a%A$Q1}}!a%A-/QA !ee r   c                     | |z  S )r;   r$   r0   s     r   __rmul__zPoint.__rmul__   s     e|r   c                 >    | t           k    rdS d| j        | j        fz  S )Ninfinityz(%d,%d))r,   r)   r*   r   s    r   r   zPoint.__str__   s&    8:DHdh///r   c                 x   | t           k    rt           S | 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 LNNLNN$(lTX%)%a$(lA667:;< !ea$(l"a'48b=!DH,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 9
, 
, 
, 
,  + + +4# # #J  
0 0 0
+ + +&          r   r&   N)
__future__r    r   objectr   r&   r,   r$   r   r   <module>rS      s   F             L L L L Lf L L L4    F   F 5tT""r   