o
    6h^"                     @   s  d dl Z zd dlZW n ey   d dlZY nw d dlmZmZ d dlmZ	 z
d dlm
Z
 dZW n ey;   dZY nw ddlmZ ddlmZmZmZmZ i Zer\e
jged	< d
ed< dZdZdZdZdZeedeZeeeeeZedddZeedddZeeZded< ed+i eee	j ded ddd Z!dd Z"e j#j$ddd e%e"edD d d e&d!D d"d#d$ Z'G d%d& d&ej(Z)G d'd( d(ej(Z*G d)d* d*ej(Z+dS ),    N)givensettings)HealthCheckTF   )inverse_mod)CurveFpINFINITYPoint	CurveEdTwsuppress_health_checki  deadline      1(i&^#a;   9{uDjSg9g(B   +' 1t:_|v!a:@m   H<^W]dZ{cxW\Iq             max_examples)	min_value	max_valuec                 C   s&   t | t}t|  }|| tksJ d S N)r   rp192)multipleinv_mp1 r    l/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/ecdsa/test_ellipticcurve.pytest_p192_mult_tests.   s   
r"   c                 c   s8    t }d}||kr|V  ||  }|d7 }||ks	d S d S )Nr   r   )r   )pointnretir    r    r!   add_n_times7   s   r'   zp, m, checkc                 C   s   g | ]	\}}t ||fqS r    )g_23).0r$   expr    r    r!   
<listcomp>C   s    r+      c                 C   s   g | ]}d  |qS )zg_23 test with mult {0})format)r)   r&   r    r    r!   r+   D   s    	   )idsc                 C   s   | | |ksJ d S r   r    )pmcheckr    r    r!   test_add_and_mult_equivalenceA   s   r3   c                   @   sX   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd ZdS )	TestCurvec                 C      t ddd| _d S Nr   r   )r   c_23clsr    r    r!   
setUpClassK      zTestCurve.setUpClassc                 C   s   |  | jtddd d S r6   )assertEqualr7   r   selfr    r    r!   test_equality_curvesO   s   zTestCurve.test_equality_curvesc                 C   s   t tdt}| | j| d S )Nr   )r   r0   bassertNotEqualr7   )r>   c192r    r    r!   test_inequality_curvesR      z TestCurve.test_inequality_curvesc                 C   s(   t ddd}t ddd}| || d S )Nr   r   r   )r   rA   )r>   ar@   r    r    r!    test_inequality_curves_by_b_onlyV   s   z*TestCurve.test_inequality_curves_by_b_onlyc                 C      | j d i d S r   r7   r=   r    r    r!   ,test_usability_in_a_hashed_collection_curves[      z6TestCurve.test_usability_in_a_hashed_collection_curvesc                 C      t | j d S r   hashr7   r=   r    r    r!   test_hashability_curves^   rJ   z!TestCurve.test_hashability_curvesc                 C   s   t dddt dddt ddd}}}t dddt ddd| j}}}| ttt|||fd | ttt|||fd | td i|d i | ||d i d S )N   r   r   r      )r   r7   r<   lensetassertDictEqualassertIn)r>   ne1ne2ne3eq1eq2eq3r    r    r!   test_conflation_curvesa   s   ("z TestCurve.test_conflation_curvesc                 C      |  t| jd d S )NzCurveFp(p=23, a=1, b=1)r<   strr7   r=   r    r    r!   test___str__i      zTestCurve.test___str__c                 C   "   t dddd}| t|d d S )Nr   r   rP   zCurveFp(p=23, a=1, b=1, h=4))r   r<   r^   r>   cr    r    r!   test___str___with_cofactorl      z$TestCurve.test___str___with_cofactorN)__name__
__module____qualname__classmethodr:   r?   rC   rF   rI   rN   r[   r_   rd   r    r    r    r!   r4   J   s    
r4   c                   @   s8   e Zd Zedd Zdd Zdd Zdd Zd	d
 ZdS )TestCurveEdTwc                 C   r5   r6   )r
   r7   r8   r    r    r!   r:   r   r;   zTestCurveEdTw.setUpClassc                 C   r\   )NzCurveEdTw(p=23, a=1, d=1)r]   r=   r    r    r!   r_   v   r`   zTestCurveEdTw.test___str__c                 C   ra   )Nr   r   rP   zCurveEdTw(p=23, a=1, d=1, h=4))r
   r<   r^   rb   r    r    r!   rd   y   re   z(TestCurveEdTw.test___str___with_cofactorc                 C   rG   r   rH   r=   r    r    r!   rI   }   rJ   z:TestCurveEdTw.test_usability_in_a_hashed_collection_curvesc                 C   rK   r   rL   r=   r    r    r!   rN      rJ   z%TestCurveEdTw.test_hashability_curvesN)	rf   rg   rh   ri   r:   r_   rd   rI   rN   r    r    r    r!   rj   q   s    
rj   c                   @   s   e Zd Zedd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+S ),	TestPointc                 C   sX   t ddd| _t| jddd| _d}d}d}d}d	}t |d
|| _t| j|||| _d S )Nr   r   r   r   r   r   r   r   r   r   )r   r7   r	   r(   rB   r   )r9   r0   r   r@   GxGyr    r    r!   r:      s   zTestPoint.setUpClassc                 C   s   d}|| j  }| | d d}|| j  }| | d | | d d}d}|| j  ||  }| | d | | d d S )Nl   uH=.t.#",W}7?jl   Z`uSG;R-]]0sk	+l   N/vZL_~XXw]ol   ~n&DJ,6'1a47b?`l   5XD+8n#w}rO	l   WTY>n+BtC*Yql   !M_JT96wfF[,z=)r   r<   xy)r>   dQkRu1u2tempr    r    r!   	test_p192   s,   

zTestPoint.test_p192c                 C   sD   t }| }| || | | |  | | |  d S r   )r   doubler<   rn   ro   )r>   r   p3r    r    r!   test_double_infinity   s
   zTestPoint.test_double_infinityc                 C   sF   d\}}}}t | j||}| }| | | | | | d S )N)   
   r      )r	   r7   rx   r<   rn   ro   )r>   x1y1x3y3r   ry   r    r    r!   test_double   s
   zTestPoint.test_doublec                 C   s^   t | jdd}| }| | | fd | |t | }| |t | |t d S N      rP   r   )	r	   r7   rx   r<   rn   ro   rA   r   assertIsr>   r   p2ry   r    r    r!   test_double_to_infinity      z!TestPoint.test_double_to_infinityc                 C   s^   t | jdd}|| }| | | fd | |t || }| |t | |t d S r   r	   r7   r<   rn   ro   rA   r   r   r   r    r    r!   test_add_self_to_infinity   r   z#TestPoint.test_add_self_to_infinityc                 C   s^   t | jdd}|d }| | | fd | |t |d }| |t | |t d S )Nr   r   r   r   r   r   r    r    r!   test_mul_to_infinity   r   zTestPoint.test_mul_to_infinityc                 C   sH   d\}}}}}t | j||}|| }| | | | | | d S )N)r{   r|   r   r   r}   r	   r7   r<   rn   ro   )r>   r~   r   r1   r   r   r   ry   r    r    r!   test_multiply   s
   zTestPoint.test_multiplyc           
      C   X   d\}}}}}}t | j||}t | j||}|| }	| |	 | | |	 | dS ):We expect that on curve c, (x1,y1) + (x2, y2 ) = (x3, y3).)r{   r|   r.   r      r   Nr   
r>   r~   r   x2y2r   r   r   r   ry   r    r    r!   test_add      zTestPoint.test_addc           
      C   r   )r   )r{   r|   r{   r|   r   r}   Nr   r   r    r    r!   test_add_as_double   r   zTestPoint.test_add_as_doublec                 C   s   |  | jt| jddd d S )Nr   r   )r<   r(   r	   r7   r=   r    r    r!   test_equality_points   s   zTestPoint.test_equality_pointsc                 C   s,   t ddd}t|ddd}| | j| d S Nd   r   )r   r	   rA   r(   )r>   rc   r0   r    r    r!   test_inequality_points   s   z TestPoint.test_inequality_pointsc                 C   s   t ddd}| | j| d S r   )r   rA   r(   rb   r    r    r!   !test_inequality_points_diff_types   rD   z+TestPoint.test_inequality_points_diff_typesc                 C   s,   t | jdd}t | jdd}| || d S )N   rP      )r	   r7   rA   )r>   r   r   r    r    r!   test_inequality_diff_y  s   z TestPoint.test_inequality_diff_yc                 C   s,   t | jdd}| |t | j|  d S Nr{   r|   )r	   r7   r<   
from_bytesto_bytesr>   r0   r    r    r!   test_to_bytes_from_bytes	  s   z"TestPoint.test_to_bytes_from_bytesc                 C   s$   t | jdd}| t||   d S r   )r	   r7   r<   r   r   r    r    r!   test_add_to_neg_self  s   zTestPoint.test_add_to_neg_selfc                 C   s"   t | jdd}| ||t  d S r   )r	   r7   r   r   r   r    r    r!   test_add_to_infinity     zTestPoint.test_add_to_infinityc                 C   s   |  ttd  d S )Nr|   )r   r   r=   r    r    r!   test_mul_infinity_by_scalar     z%TestPoint.test_mul_infinity_by_scalarc                 C   s(   t | jdd}| |d | d  d S )Nr{   r|      )r	   r7   r<   r   r    r    r!   test_mul_by_negative  s   zTestPoint.test_mul_by_negativec                 C   s   |  ttd d S )Ninfinity)r<   r^   r   r=   r    r    r!   test_str_infinity   r   zTestPoint.test_str_infinityc                 C   s"   t | jdd}| t|d d S )Nr{   r|   z(3,10))r	   r7   r<   r^   r   r    r    r!   test_str_point#  r   zTestPoint.test_str_pointN)rf   rg   rh   ri   r:   rw   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   rk      s.    
			

rk   r    ),pytest	unittest2unittestImportError
hypothesisr   r   hypothesis.strategies
strategiesstr   
HC_PRESENTnumbertheoryr   ellipticcurver   r   r	   r
   HYP_SETTINGStoo_slowr0   r   r@   rl   rm   rB   r   r7   r(   dictHYP_SLOW_SETTINGSintegersr"   r'   markparametrize	enumerateranger3   TestCaser4   rj   rk   r    r    r    r!   <module>   sX    

'