o
    w+f
                     @   s   d dl mZ d dlmZ G dd dZdd dD Zdd	 Zd
d Zedddddddg ddZeddddddddg dd	Z	e	Z
ee ee	 dS )    )Math)Pointc                   @   s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )CurveFpNc
           
      C   s:   || _ || _|| _|| _t||| _|| _|	| _|| _d S N)	ABPNr   GnamenistNameoid)
selfr   r   r   r	   GxGyr   r   r    r   F/var/www/html/venv/lib/python3.10/site-packages/ellipticcurve/curve.py__init__   s   
zCurveFp.__init__c                 C   s   d|j   kr| jd ksdS  dS d|j  kr!| jd ks$dS  dS |jd |j d | j|j   | j  | j dkr>dS dS )z{
        Verify if the point `p` is on the curve

        :param p: Point p = Point(x, y)
        :return: boolean
            r   F      T)xr   yr   r   )r   pr   r   r   contains   s   0zCurveFp.containsc                 C   s   dt d| j  d S )Nr   z%xr   )lenr	   )r   r   r   r   length%   s   zCurveFp.lengthc                 C   sP   t |d| j| j|  | j | j }t|| j}||d dkkr&| j| }|S )Nr   r   r   )powr   r   r   r   modularSquareRoot)r   r   isEvenySquaredr   r   r   r   r   (   s
   $
z	CurveFp.yr   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   
   s
    

r   c                 C   s   i | ]}t |j|qS r   )tupler   .0curver   r   r   
<dictcomp>0   s    r(   r   c                 C   s   | t t| j< d S r   )_curvesByOidr$   r   )r'   r   r   r   add3   s   r*   c                 C   sF   | t vrtdjddd | D ddd t  D dt |  S )NzCUnknown curve with oid {oid}; The following are registered: {names}.c                 S   s   g | ]}t |qS r   )str)r&   numberr   r   r   
<listcomp>:   s    zgetByOid.<locals>.<listcomp>z, c                 S   s   g | ]}|j qS r   )r   r%   r   r   r   r.   ;   s    )r   names)r)   	Exceptionformatjoinvalues)r   r   r   r   getByOid7   s   r4   	secp256k1r      l   /| l   AAl 3z~i9nW~ l   -lO96M:WZEuw>?3yl   T!v?B>bAP)("8p'UxI;m:H)r   r      r   
   )r   r   r   r   r	   r   r   r   
prime256v1zP-256l   ?               @ l   K`Opq^cv
3,e<1U]>{|R*Zl   ?               @ l   Q%x+Ohbi+}s   @ l   B11e	%:f=K`wrH7gHK8hkl   Q~o]l+fUg+<)Z?8O?q!O)r   r   iH  i='  r   r   r6   )	r   r   r   r   r   r	   r   r   r   N)mathr   pointr   r   r)   r*   r4   r5   r9   p256r   r   r   r   <module>   s<   &	