o
    `^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    V/home/air/shanriGPT/back/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                   @   sP   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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      | j d i d S r   r7   r=   r    r    r!   ,test_usability_in_a_hashed_collection_curvesV      z6TestCurve.test_usability_in_a_hashed_collection_curvesc                 C      t | j d S r   hashr7   r=   r    r    r!   test_hashability_curvesY   rH   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_curves\   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__d      zTestCurve.test___str__c                 C   "   t dddd}| t|d d S )Nr   r   rN   zCurveFp(p=23, a=1, b=1, h=4))r   r<   r\   r>   cr    r    r!   test___str___with_cofactorg      z$TestCurve.test___str___with_cofactorN)__name__
__module____qualname__classmethodr:   r?   rC   rG   rL   rY   r]   rb   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:   m   r;   zTestCurveEdTw.setUpClassc                 C   rZ   )NzCurveEdTw(p=23, a=1, d=1)r[   r=   r    r    r!   r]   q   r^   zTestCurveEdTw.test___str__c                 C   r_   )Nr   r   rN   zCurveEdTw(p=23, a=1, d=1, h=4))r
   r<   r\   r`   r    r    r!   rb   t   rc   z(TestCurveEdTw.test___str___with_cofactorc                 C   rE   r   rF   r=   r    r    r!   rG   x   rH   z:TestCurveEdTw.test_usability_in_a_hashed_collection_curvesc                 C   rI   r   rJ   r=   r    r    r!   rL   {   rH   z%TestCurveEdTw.test_hashability_curvesN)	rd   re   rf   rg   r:   r]   rb   rG   rL   r    r    r    r!   rh   l   s    
rh   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#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<   rl   rm   )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   rv   r<   rl   rm   )r>   x1y1x3y3r   rw   r    r    r!   test_double   s
   zTestPoint.test_doublec                 C   sH   d\}}}}}t | j||}|| }| | | | | | d S )N)ry   rz   r   r   r{   r	   r7   r<   rl   rm   )r>   r|   r}   r1   r~   r   r   rw   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).)ry   rz   r.   r         Nr   
r>   r|   r}   x2y2r~   r   r   p2rw   r    r    r!   test_add      zTestPoint.test_addc           
      C   r   )r   )ry   rz   ry   rz   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>   ra   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(   r`   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 S Nry   rz   )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   assertIsr   r   r    r    r!   test_add_to_infinity      zTestPoint.test_add_to_infinityc                 C   s   |  ttd  d S )Nrz   )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 )Nry   rz      )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 )Nry   rz   z(3,10))r	   r7   r<   r\   r   r    r    r!   test_str_point   r   zTestPoint.test_str_pointN)rd   re   rf   rg   r:   ru   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   ri      s&    


ri   r    ),pytest	unittest2unittestImportError
hypothesisr   r   hypothesis.strategies
strategiesstr   
HC_PRESENTnumbertheoryr   ellipticcurver   r   r	   r
   HYP_SETTINGStoo_slowr0   r   r@   rj   rk   rB   r   r7   r(   dictHYP_SLOW_SETTINGSintegersr"   r'   markparametrize	enumerateranger3   TestCaser4   rh   ri   r    r    r    r!   <module>   sX    

"