B
    _e5                 @   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rdd Ze jdd 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_Ed25519l   UK5J,{$%Xci\-G'
lJ[sii!l   XfL33ffL33ffL33ffL33ff)xyl   NP8-E:E,g`t!C@'&6l   #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   l   UK5J,{$%Xci\-G'
lJ[sii!l   XfL33ffL33ffL33ffL33ffl   NP8-E:E,g`t!C@'&6l   #Ur`
YTV>D&#!8eHBf`"l   3r]d s
Y|CO~\^K[D_{?kx+SIl   H,~5a(21f$&Rpc~U?&H_)r   r   r   "   #   )r   GxyassertEqualr   r   ZxypointGcopypointG2assertRaises
ValueError)selfpaiZbpZbp2 r   k/var/www/html/afkarena_new/venv/lib/python3.7/site-packages/Cryptodome/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   r   	test_copy_   s    
zTestEccPoint_Ed25519.test_copyc             C   s4   | j  }| j }| | j | | | j | d S )N)r   r   r   r   assertNotEqual)r   pointHZpointIr   r   r   
test_equald   s    

zTestEccPoint_Ed25519.test_equalc             C   s0   t dddd}| |  | ||  d S )Nr   r   r   )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 )N)r   r&   r'   )r   Z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 )Nl   3r]d s
Y|CO~\^K[D_{?kx+SIl   H,~5a(21f$&Rpc~U?&H_)r   r   r   pointG3r(   r   r   )r   Z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 )N)r   r   r   r   r,   r(   )r   r$   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 )N)r   r   Zdoubler   r   r   r   r(   )r   r$   r   Z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   l   3r]d s
Y|CO~\^K[D_{?kx+SIl   H,~5a(21f$&Rpc~U?&H_
   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   dr$   r   r   r   test_scalar_multiply   sP    









z)TestEccPoint_Ed25519.test_scalar_multiplyc             C   s(   |  | j d |  | j d d S )Nr6       )r   r   Zsize_in_bitsZsize_in_bytes)r   r   r   r   
test_sizes   s    zTestEccPoint_Ed25519.test_sizesN)__name__
__module____qualname__r   ZG2xyZG3xyr   r   r   r,   r   r!   r"   r%   r)   r+   r-   r.   r/   r9   r;   r   r   r   r   r   -   s(   
	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@9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60l   En<	KBc	 !5?)&
MpUl   Z0FU8[=t2:ek6RrU@ZQr   )r   seedl   0|>!Y,$%<0 <}Oe<Z&Oed25519)r   rA   pointr   )r   r8   )r   r   r   rA   r8   r&   has_privatepointQr   r   r   r   r   )r   rA   PxPykeyrC   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 )NrB   )r   )r   rC   )	r   r   GxGyr   assertFalserD   r   rE   )r   rC   rH   r   r   r   test_public_key   s    z"TestEccKey_Ed25519.test_public_keyc             C   s6   t ddd}| }| |  | |j|j d S )NrB   s    HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH)r   rA   )r   
public_keyrL   rD   r   rE   )r   Zpriv_keyZ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 )NrB   s   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH)r   rA   )r   r   r   r   r   <lambda>       z6TestEccKey_Ed25519.test_invalid_seed.<locals>.<lambda>)r   r   )r   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 )Ns    HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHr   )rA   r   rB   s    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)r   	constructrN   r   r#   )r   Zprivate_keyZprivate_key2Zprivate_key3rN   Zpublic_key2Z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 )NrB   )r   zcurve='Ed25519'r   )r   generateZassertInreprr   r   rN   )r   rH   r   r   r   test_name_consistency  s    z(TestEccKey_Ed25519.test_name_consistencyN)	r<   r=   r>   rI   rM   rO   rR   rT   rW   r   r   r   r   r?      s   r?   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   Zrandfunc)r   rU   r&   rD   r   r   rJ   rK   r8   r   rE   r#   r
   newread)r   rH   rC   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 )Nr@   l   En<	KBc	 !5?)&
MpUl   Z0FU8[=t2:ek6RrU@ZQl   0|>!Y,$%<0 <}Oe<Z&Or   )r   )r   rA   )r   point_xpoint_y)r   rA   r^   r_   rB   )	r   r   r   rS   r   rE   r&   rD   rL   )r   rA   rF   rG   r8   rC   rH   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 )Nr4   r2   )r^   r_   rB   r   r   r0   )r   r8   s   HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH)r   rA   )dictr   rJ   rK   r   r   r   rS   )r   ZcoordZcoordGr   r   r   test_negative_construct9  s
    z-TestEccModule_Ed25519.test_negative_constructN)r<   r=   r>   r]   r`   rb   r   r   r   r   rX     s   rX   c             C   s,   g }|t t7 }|t t7 }|t t7 }|S )N)r   r   r?   rX   )configtestsr   r   r   	get_testsB  s
    re   __main__c               C   s   t t S )N)unittestZ	TestSuitere   r   r   r   r   suiteK  s    rh   )ZdefaultTest)rg   binasciir   ZCryptodome.SelfTest.st_commonr   ZCryptodome.SelfTest.loaderr   ZCryptodome.PublicKeyr   ZCryptodome.PublicKey.ECCr   r   r   ZCryptodome.Math.Numbersr	   ZCryptodome.Hashr
   ZTestCaser   r?   rX   re   r<   rh   mainr   r   r   r   <module>   s    A6