o
    Mfq5                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZ G d	d
 d
e jZG dd de jZG dd de jZi fddZedkrcdd Ze jdd dS dS )    N)	unhexlify)list_test_cases)load_test_vectors)ECC)EccPoint_curvesEccKey)Integer)SHAKE128c                   @   s   e Zd ZdddZdddZdddZeed ed	 d
dZeed ed	 d
dZeed ed	 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 )#TestEccPoint_Ed25519   UK5J,{$%Xci\-G'
lJ[sii!   XfL33ffL33ffL33ffL33ff)xy   NP8-E:E,g`t!C@'&6   #Ur`
YTV>D&#!8eHBf`"l   \b'!cjI,`!c:5Ps%Q%Ngl   4q!!@0dvw=M95:5M]Xgr   r   Ed25519curvec                 C   s   t | jd | jd dd t dddd}| |jd | |jd | |jd | j }| |jd | |jd	 | |j|j|jf | j }| |jd
 | |jd | |j|j|jf t dddd | j	t
t dddd d S )Nr   r   r   r   r      )r   r   r   r   r   r      3r]d s
Y|CO~\^K[D_{?kx+SI   H,~5a(21f$&Rpc~U?&H_)r   r   r   "   #   )r   GxyassertEqualr   r   xypointGcopypointG2assertRaises
ValueError)selfpaibpbp2 r&   i/var/www/html/humari/django-venv/lib/python3.10/site-packages/Crypto/SelfTest/PublicKey/test_ECC_25519.pytest_init_xy<   s$   

z!TestEccPoint_Ed25519.test_init_xyc                 C   sB   t dddd}|| j | |j| jj | |j| jj d S Nr   r   r   r   )r   setr   r   r   r   r"   pointWr&   r&   r'   test_setY   s   zTestEccPoint_Ed25519.test_setc                 C   s2   | j  }| |j| j j | |j| j j d S N)r   r   r   r   r   r+   r&   r&   r'   	test_copy_   s   
zTestEccPoint_Ed25519.test_copyc                 C   s4   | j  }| j }| | j | | | j | d S r.   )r   r   r   r   assertNotEqual)r"   pointHpointIr&   r&   r'   
test_equald   s   

zTestEccPoint_Ed25519.test_equalc                 C   s0   t dddd}| |  | ||  d S r)   )r   
assertTrueis_point_at_infinityr   point_at_infinity)r"   r#   r&   r&   r'   test_paij   s   zTestEccPoint_Ed25519.test_paic                 C   s$   | j  }| j | }| |  d S r.   )r   r4   r5   )r"   negGsumr&   r&   r'   test_negateo   s   
z TestEccPoint_Ed25519.test_negatec                 C   s   |  | j| j | j |  | j| j | j |  | j| j  | j |  | j | j | j | j| j }|  |jd |  |jd d S )Nr   r   )r   r   r   pointG3r6   r   r   )r"   G5r&   r&   r'   test_additiont   s   z"TestEccPoint_Ed25519.test_additionc                 C   sZ   | j  }|| j 7 }| || j || j 7 }| || j || j  7 }| || j d S r.   )r   r   r   r   r;   r6   )r"   r1   r&   r&   r'   test_inplace_addition~   s   


z*TestEccPoint_Ed25519.test_inplace_additionc                 C   s`   | j  }|  | |j| jj | |j| jj | j  }| }|  | || d S r.   )r   r   doubler   r   r   r   r6   )r"   r1   r#   pointRr&   r&   r'   test_doubling   s   

z"TestEccPoint_Ed25519.test_doublingc                 C   s  d}|| j  }| |jd | |jd d}|| j  }| |j| j j | |j| j j d}|| j  }| |j| jj | |j| jj d}|| j  }| |j| jj | |j| jj d}|| j  }| |jd | |jd d}|| j  }| |jd	 | |jd
 d}|| j  }| |jd | |jd d}|| j  }| |jd | |jd d}|| j  }| |jd | |jd d}|| j  }| |jd | |jd d S )Nr   r            l   px	_ItTyd09yAja.2h(~UmT= l   /d-yEyLl*up2rtG   r   r   
   l   Oy|$DG? wyJ;GTM2<,`l   ,{URCT;<O!S;%O1"Sj"|dU~c   l   yV	ZD)CBiunU]Su;2<gl   8Zx^ioi,Uo8pk
EQUSA-ul   l   

+pR'
+KC0kRqPQ|qtQl   aj 53TotKa1*lO|=<#^S\1   l   V%tsv*,>ZI ^Nn~=S~^l   v, p$f}L&*]/O |:U)r   r   r   r   r   r;   )r"   dr1   r&   r&   r'   test_scalar_multiply   sP   









z)TestEccPoint_Ed25519.test_scalar_multiplyc                 C   s(   |  | j d |  | j d d S )NrH       )r   r   size_in_bitssize_in_bytesr"   r&   r&   r'   
test_sizes   s   zTestEccPoint_Ed25519.test_sizesN)__name__
__module____qualname__r   G2xyG3xyr   r   r   r;   r(   r-   r/   r3   r7   r:   r=   r>   rA   rK   rP   r&   r&   r&   r'   r   -   s0    
	3r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestEccKey_Ed25519c                 C   s   t d}d}d}td|d}| |j| | |jd | |  | |jj| | |jj	| t
||d}td||d}| |jd | |  | |j| td|d}| jttdd	d
 d S )N@9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60   En<	KBc	 !5?)&
MpU   Z0FU8[=t2:ek6RrU@ZQr   r   seed   0|>!Y,$%<0 <}Oe<Z&Oed25519)r   r[   pointr   r   rJ   )r   r   r   r[   rJ   r4   has_privatepointQr   r   r   r    r!   )r"   r[   PxPykeyr^   r&   r&   r'   test_private_key   s    z#TestEccKey_Ed25519.test_private_keyc                 C   sF   t td jtd jdd}td|d}| |  | |j| d S )Nr]   r   )r   r^   )	r   r   GxGyr   assertFalser`   r   ra   )r"   r^   rd   r&   r&   r'   test_public_key   s   z"TestEccKey_Ed25519.test_public_keyc                 C   s6   t ddd}| }| |  | |j|j d S )Nr]       HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrZ   )r   
public_keyrh   r`   r   ra   )r"   priv_keypub_keyr&   r&   r'   test_public_key_derived   s   z*TestEccKey_Ed25519.test_public_key_derivedc                 C   s   |  tdd  d S )Nc                   S   s   t dddS )Nr]      HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrZ   )r   r&   r&   r&   r'   <lambda>   s    z6TestEccKey_Ed25519.test_invalid_seed.<locals>.<lambda>)r    r!   rO   r&   r&   r'   test_invalid_seed   s   z$TestEccKey_Ed25519.test_invalid_seedc                 C   s   t jddd}t jddd}t jddd}| }| }| }| || | || | || | || | || d S )Nrj   r   )r[   r   r]   s    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)r   	constructrk   r   r0   )r"   private_keyprivate_key2private_key3rk   public_key2public_key3r&   r&   r'   test_equality   s   z TestEccKey_Ed25519.test_equalityc                 C   s@   t jdd}| dt| | |jd | | jd d S )Nr]   r   zcurve='Ed25519'r   )r   generateassertInreprr   r   rk   )r"   rd   r&   r&   r'   test_name_consistency  s   z(TestEccKey_Ed25519.test_name_consistencyN)	rQ   rR   rS   re   ri   rn   rq   rx   r|   r&   r&   r&   r'   rV      s    rV   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestEccModule_Ed25519c                 C   s   t jdd}| |  ttd jtd jdd|j }| 	|j
| t jdd}| || t jdd t jdt jd}t jdt jd}| 	|| d S )Nr   r   )r   randfunc)r   ry   r4   r`   r   r   rf   rg   rJ   r   ra   r0   r
   newread)r"   rd   r^   key2key1r&   r&   r'   test_generate  s    z#TestEccModule_Ed25519.test_generatec                 C   s   t d}d}d}d}t||dd}tjd|d}| |j| | |  tjd||d}| |j| | |  tjd|||d	}| |j| | |  tjd
|d}d S )NrW   rX   rY   r\   r   r   rZ   )r   point_xpoint_y)r   r[   r   r   r]   )	r   r   r   rr   r   ra   r4   r`   rh   )r"   r[   rb   rc   rJ   r^   rd   r&   r&   r'   test_construct   s   z$TestEccModule_Ed25519.test_constructc                 C   sr   t ddd}t td jtd jd}| jttjfddi| | jttjfddd| | jttjdd	d
 d S )NrF   rD   )r   r   r]   r   r   rB   r_   ro   rZ   )dictr   rf   rg   r    r!   r   rr   )r"   coordcoordGr&   r&   r'   test_negative_construct9  s
   z-TestEccModule_Ed25519.test_negative_constructN)rQ   rR   rS   r   r   r   r&   r&   r&   r'   r}     s    r}   c                 C   s,   g }|t t7 }|t t7 }|t t7 }|S r.   )r   r   rV   r}   )configtestsr&   r&   r'   	get_testsB  s
   r   __main__c                   C   s   t t S r.   )unittest	TestSuiter   r&   r&   r&   r'   suiteK  s   r   )defaultTest)r   binasciir   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   Crypto.PublicKeyr   Crypto.PublicKey.ECCr   r   r   Crypto.Math.Numbersr	   Crypto.Hashr
   TestCaser   rV   r}   r   rQ   r   mainr&   r&   r&   r'   <module>   s"    A6