B
    _e                 @   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 G dd	 d	e jZG d
d de jZG dd de jZG dd de jZG dd de jZG dd de jZG dd de jZeddddd dd dd dpg Zx6eD ].ZejejejfddZeed ej e qW G d!d" d"e jZedd#d$d%d d&d d'd dplg Zx6eD ].Zejejejfd(dZeed ej e qtW G d)d* d*e jZ edd+d,d-d d.d d/d dpg Zx6eD ].Zejejejfd0dZee d ej e qW G d1d2 d2e jZ!edd3d4d5d d6d d7d dpPg Zx6eD ].Zejejejfd8dZee!d ej e qXW G d9d: d:e jZ"edd;d<d=d d>d d?d dpg Zx6eD ].Zejejejfd@dZee"d ej e qW G dAdB dBe jZ#G dCdD dDe jZ$G dEdF dFe jZ%G dGdH dHe jZ&G dIdJ dJe jZ'G dKdL dLe jZ(G dMdN dNe jZ)G dOdP dPe jZ*G dQdR dRe jZ+G dSdT dTe jZ,i fdUdVZ-e.dWkrdXd Z/e j0dYdZ dS )[    N)	unhexlify)list_test_cases)load_test_vectors)ECC)EccPoint_curvesEccKey)Integerc               @   s   e Zd Zdd Zdd ZdS )TestEccPointc          
   C   s   t jddj}t jddj}y||  ds.tW n2 tk
rb } zdt|ksRtW d d }~X Y nX y||7 }dsvtW n2 tk
r } zdt|kstW d d }~X Y nX G dd d}| || k | || k d S )NzP-256)curvezP-384Fznot on the same curvec               @   s   e Zd ZdS )z+TestEccPoint.test_mix.<locals>.OtherKeyTypeN)__name__
__module____qualname__ r   r   j/var/www/html/afkarena_new/venv/lib/python3.7/site-packages/Cryptodome/SelfTest/PublicKey/test_ECC_NIST.pyOtherKeyType>   s   r   )r   generatepointQAssertionError
ValueErrorstrassertFalse
assertTrue)selfp1p2er   r   r   r   test_mix-   s    ""zTestEccPoint.test_mixc             C   s&   t jddddd}| t|d d S )NzP-256l   }	&_n i9]}!5$7P%^-& l   -
k%j&*/n;[jH**7 
i/v{-l   ]W][@iMmlQ;i?XU,p )r   dpoint_xpoint_ya  EccKey(curve='NIST P-256', point_x=20573031766139722500939782666697015100983491952082159880539639074939225934381, point_y=108863130203210779921520632367477406025152638284581252625277850513266505911389, d=75467964919405407085864614198393977741148485328036093939970922195112333446269))r   	constructassertEqualrepr)r   r   r   r   r   	test_reprD   s
    zTestEccPoint.test_reprN)r   r   r   r   r$   r   r   r   r   r
   +   s   r
   c               @   st   e Zd ZdZeddddZed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S )TestEccPoint_NIST_P192ztTests defined in section 4.1 of https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.204.9073&rep=rep1&type=pdfl   ,/}H 5iH\D>GEl   ;_!3o3nk3>
6@I%p192)r   l   S.7lpPa7ng>=}Tb"l   y5R]2vNA>RmKwYfe% !dc             C   s(   t dd}|| j | || j d S )Nr   )r   setpointSr"   )r   pointWr   r   r   test_setY   s    
zTestEccPoint_NIST_P192.test_setc             C   sF   | j  }| || j  || j | || j | | j | j d S )N)r(   copyr"   r'   pointTassertNotEqual)r   r)   r   r   r   	test_copy^   s
    
z TestEccPoint_NIST_P192.test_copyc             C   s(   | j  }| j | }| || j   d S )N)r(   r"   point_at_infinity)r   negSsumr   r   r   test_negatee   s    
z"TestEccPoint_NIST_P192.test_negatec             C   s   d}d}| j | j }| |j| | |j| | }| j | }| || j  || j  }| || j  || }| || d S )Nl   <Sb!tX?w|xh\7% l   K*m/_JSl(U[yq;})r(   r,   r"   xyr/   )r   pointRxpointRypointRpair   r   r   test_additionj   s    

z$TestEccPoint_NIST_P192.test_additionc             C   s   d}d}| j  }|| j7 }| |j| | |j| | }| j  }||7 }| || j  | }|| j 7 }| || j  | }||7 }| || d S )Nl   <Sb!tX?w|xh\7% l   K*m/_JSl(U[yq;})r(   r+   r,   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   test_inplace_addition   s     



z,TestEccPoint_NIST_P192.test_inplace_additionc             C   s   d}d}| j  }|  | |j| | |j| | j  }| }|  | || | j  }||7 }| |j| | |j| d S )Nl   bi~hIR wYTSD{1.-l   	%Y^-<6!N	qp )r(   r+   doubler"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   test_doubling   s    


z$TestEccPoint_NIST_P192.test_doublingc                s   d}d}d} j | } |j|  |j|  j  } j d } ||  t fdd | j  } |j|  |j| t| j  } |j|  |j| d S )Nl   tlkdcH(Lj]u5Qx
l   1m~KT4IwxIG-i!wl   {5syq-BKBior   c                  s
    j d S )N)r(   r   )r   r   r   <lambda>       z=TestEccPoint_NIST_P192.test_scalar_multiply.<locals>.<lambda>)r(   r"   r3   r4   r/   assertRaisesr   r	   )r   r   r5   r6   r7   r8   r   )r   r   test_scalar_multiply   s     



z+TestEccPoint_NIST_P192.test_scalar_multiplyc             C   sD   d}d}d}d}| j | | j|  }| |j| | |j| d S )Nl   tlkdcH(Lj]u5Qx
l   rr6O^ho3&gaOqKl   [oge?/ or6uc;'{ l   D6vMc'~vLz6bHe)r(   r,   r"   r3   r4   )r   r   r   r5   r6   r7   r   r   r   test_joint_scalar_multiply   s    z1TestEccPoint_NIST_P192.test_joint_scalar_multiplyc             C   s(   |  | j d |  | j d d S )N      )r"   r(   size_in_bitssize_in_bytes)r   r   r   r   
test_sizes   s    z!TestEccPoint_NIST_P192.test_sizesN)r   r   r   __doc__r   r(   r,   r*   r.   r2   r9   r:   r<   rA   rB   rG   r   r   r   r   r%   L   s$   
r%   c               @   st   e Zd ZdZeddddZed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S )TestEccPoint_NIST_P224ztTests defined in section 4.2 of https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.204.9073&rep=rep1&type=pdfl   [;!4E7<_1*vK6N9!TY:)Pl   "?Iq.pGA26', X-p/i;p224)r   l   m=Mp@2i#M#Y B/#nX\jd-l   4i"nQ)N}:{	hk-xBISIQ
1c             C   s(   t dd}|| j | || j d S )Nr   )r   r'   r(   r"   )r   r)   r   r   r   r*      s    
zTestEccPoint_NIST_P224.test_setc             C   sF   | j  }| || j  || j | || j | | j | j d S )N)r(   r+   r"   r'   r,   r-   )r   r)   r   r   r   r.      s
    
z TestEccPoint_NIST_P224.test_copyc             C   s(   | j  }| j | }| || j   d S )N)r(   r"   r/   )r   r0   r1   r   r   r   r2      s    
z"TestEccPoint_NIST_P224.test_negatec             C   s   d}d}| j | j }| |j| | |j| | }| j | }| || j  || j  }| || j  || }| || d S )Nl   }Q+|y%w<{ Vu{adl   pZv8)_z-hK	G^6gyO9)r(   r,   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   r9      s    

z$TestEccPoint_NIST_P224.test_additionc             C   s   d}d}| j  }|| j7 }| |j| | |j| | }| j  }||7 }| || j  | }|| j 7 }| || j  | }||7 }| || d S )Nl   }Q+|y%w<{ Vu{adl   pZv8)_z-hK	G^6gyO9)r(   r+   r,   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   r:     s     



z,TestEccPoint_NIST_P224.test_inplace_additionc             C   s   d}d}| j  }|  | |j| | |j| | j  }| }|  | || | j  }||7 }| |j| | |j| d S )Nl   _xxRh>7ZPJIw}-r*l   }]o`}MH^>A0Z]Sv>L1|+)r(   r+   r;   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   r<   &  s    


z$TestEccPoint_NIST_P224.test_doublingc                s   d}d}d} j | } |j|  |j|  j  } j d } ||  t fdd | j  } |j|  |j| t| j  } |j|  |j| d S )Nl   ;WU'uoZw]o]em82~P)l   <N0VmoLBm_J+'"/F*iKl%l   mG[nWh8z{hbIU_OxQB)Jr   c                  s
    j d S )Nr=   )r(   r   )r   r   r   r>   J  r?   z=TestEccPoint_NIST_P224.test_scalar_multiply.<locals>.<lambda>)r(   r"   r3   r4   r/   r@   r   r	   )r   r   r5   r6   r7   r8   r   )r   r   rA   ;  s     



z+TestEccPoint_NIST_P224.test_scalar_multiplyc             C   sD   d}d}d}d}| j | | j|  }| |j| | |j| d S )Nl   ;WU'uoZw]o]em82~P)l   6W]UDwyptq>3dd|?)5l   >HEK5\
5F2~?jTm{+E6l   1(^VKUC?++'*X:pC)r(   r,   r"   r3   r4   )r   r   r   r5   r6   r7   r   r   r   test_joing_scalar_multiplyU  s    z1TestEccPoint_NIST_P224.test_joing_scalar_multiplyc             C   s(   |  | j d |  | j d d S )N      )r"   r(   rE   rF   )r   r   r   r   rG   _  s    z!TestEccPoint_NIST_P224.test_sizesN)r   r   r   rH   r   r(   r,   r*   r.   r2   r9   r:   r<   rA   rK   rG   r   r   r   r   rI      s$   
rI   c               @   sl   e Zd ZdZed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S )TestEccPoint_NIST_P256ztTests defined in section 4.3 of https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.204.9073&rep=rep1&type=pdfl   ,;zQCl:a*N<xn.h&#/_"$^ l   V"`,1kWypYLG+-pJ|?W@ l   kkdg\[W9r*9.B,LI5/f:hcXUl   Cdc'2gs1E+.-'a!Tc             C   s(   t dd}|| j | || j d S )Nr   )r   r'   r(   r"   )r   r)   r   r   r   r*   o  s    
zTestEccPoint_NIST_P256.test_setc             C   sF   | j  }| || j  || j | || j | | j | j d S )N)r(   r+   r"   r'   r,   r-   )r   r)   r   r   r   r.   t  s
    
z TestEccPoint_NIST_P256.test_copyc             C   s(   | j  }| j | }| || j   d S )N)r(   r"   r/   )r   r0   r1   r   r   r   r2   {  s    
z"TestEccPoint_NIST_P256.test_negatec             C   s   d}d}| j | j }| |j| | |j| | }| j | }| || j  || j  }| || j  || }| || d S )Nl   ~(iM)E=kdHpit3&EpmRrl   dBhE@	hFTVL.E$udK].X )r(   r,   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   r9     s    

z$TestEccPoint_NIST_P256.test_additionc             C   s   d}d}| j  }|| j7 }| |j| | |j| | }| j  }||7 }| || j  | }|| j 7 }| || j  | }||7 }| || d S )Nl   ~(iM)E=kdHpit3&EpmRrl   dBhE@	hFTVL.E$udK].X )r(   r+   r,   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   r:     s     



z,TestEccPoint_NIST_P256.test_inplace_additionc             C   s   d}d}| j  }|  | |j| | |j| | j  }| }|  | || | j  }||7 }| |j| | |j| d S )Nl   '6?0T.<63GwG:]Hsivl   P6e#` {yO8^g^ w{9lJ@z )r(   r+   r;   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   r<     s    


z$TestEccPoint_NIST_P256.test_doublingc                s   d}d}d} j | } |j|  |j|  j  } j d } ||  t fdd | j  } |j|  |j| t| j  } |j|  |j| d S )Nl   _,)N$chKf-5lk<Xk#E l   ? nDf>1x066OPKFQl   ATU*-sX)>~|N\}T9%Dbu4ur   c                  s
    j d S )Nr=   )r(   r   )r   r   r   r>     r?   z=TestEccPoint_NIST_P256.test_scalar_multiply.<locals>.<lambda>)r(   r"   r3   r4   r/   r@   r   r	   )r   r   r5   r6   r7   r8   r   )r   r   rA     s     



z+TestEccPoint_NIST_P256.test_scalar_multiplyc             C   sD   d}d}d}d}| j | | j|  }| |j| | |j| d S )Nl   _,)N$chKf-5lk<Xk#E l   T:XuMKt^5~{"/T3G1S l   vbaB>Y5OgEI# d3ZgX l   uR`/.5ES6p* Pr )r(   r,   r"   r3   r4   )r   r   r   r5   r6   r7   r   r   r   rK     s    z1TestEccPoint_NIST_P256.test_joing_scalar_multiplyc             C   s(   |  | j d |  | j d d S )N       )r"   r(   rE   rF   )r   r   r   r   rG     s    z!TestEccPoint_NIST_P256.test_sizesN)r   r   r   rH   r   r(   r,   r*   r.   r2   r9   r:   r<   rA   rK   rG   r   r   r   r   rN   d  s    
rN   c               @   sp   e Zd ZdZedddZ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S )TestEccPoint_NIST_P384ztTests defined in section 4.4 of https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.204.9073&rep=rep1&type=pdfl   K<L3YUH[Am]8$_-'DM./8;V~Ho\"l   E^PjWvM0M7bKL84\mn&J

"[!66p#y|@z~W~ p384l   Q'"f4OcE-XJ9ija>:}@sMLUl   P}&zIy$GY9Q%?pa(Fv|EO{ c             C   s*   t ddd}|| j | || j d S )Nr   rR   )r   r'   r(   r"   )r   r)   r   r   r   r*     s    zTestEccPoint_NIST_P384.test_setc             C   sF   | j  }| || j  || j | || j | | j | j d S )N)r(   r+   r"   r'   r,   r-   )r   r)   r   r   r   r.      s
    
z TestEccPoint_NIST_P384.test_copyc             C   s(   | j  }| j | }| || j   d S )N)r(   r"   r/   )r   r0   r1   r   r   r   r2     s    
z"TestEccPoint_NIST_P384.test_negatec             C   s   d}d}| j | j }| |j| | |j| | }| j | }| || j  || j  }| || j  || }| || d S )Nl   ^\mLH\%sz.	_QHp)wB'2h\|Sz9Y07s\\% l   $	rQ4 1ml w{g~OM wr6bLLU;8*$0xrs, )r(   r,   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   r9     s    

z$TestEccPoint_NIST_P384.test_additionc             C   s   d}d}| j  }|| j7 }| |j| | |j| | }| j  }||7 }| || j  | }|| j 7 }| || j  | }||7 }| || d S )Nl   ~(iM)E=kdHpit3&EpmRrl   dBhE@	hFTVL.E$udK].X )r(   r+   r,   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   _test_inplace_addition"  s     



z-TestEccPoint_NIST_P384._test_inplace_additionc             C   s   d}d}| j  }|  | |j| | |j| | j  }| }|  | || | j  }||7 }| |j| | |j| d S )Nl   LPeroBr0_nCYw~s7xI|Z:Ze*X!T l   ]e^A|\"Rn0WWCs(h}	c5JBNnN=.)r(   r+   r;   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   r<   <  s    


z$TestEccPoint_NIST_P384.test_doublingc                sj   d}d}d} j | } |j|  |j|  j  } j d } ||  t fdd d S )Nl   4.v0Z:z;ODK#Gv)Z5mXCDs:frkIl   R@dV]9"O/'5r}]~AYwHoY4-?~wl   f9;Y?5.BieXcXtqMDb7K6X}1 }Xr   c                  s
    j d S )Nr=   )r(   r   )r   r   r   r>   `  r?   z=TestEccPoint_NIST_P384.test_scalar_multiply.<locals>.<lambda>)r(   r"   r3   r4   r/   r@   r   )r   r   r5   r6   r7   r8   r   )r   r   rA   Q  s    


z+TestEccPoint_NIST_P384.test_scalar_multiplyc             C   sD   d}d}d}d}| j | | j|  }| |j| | |j| d S )Nl   4.v0Z:z;ODK#Gv)Z5mXCDs:frkIl   ]8|$W!&%TxFgqeYTKeM80,YO_l   tdvO*;q/$L]0	}pn<x&"FFe5hYE~"l   q!jB%~^Y7yK\+5{SWxFJR1DwJA6g)4 )r(   r,   r"   r3   r4   )r   r   r   r5   r6   r7   r   r   r   rK   b  s    z1TestEccPoint_NIST_P384.test_joing_scalar_multiplyc             C   s(   |  | j d |  | j d d S )Ni  0   )r"   r(   rE   rF   )r   r   r   r   rG   l  s    z!TestEccPoint_NIST_P384.test_sizesN)r   r   r   rH   r   r(   r,   r*   r.   r2   r9   rS   r<   rA   rK   rG   r   r   r   r   rQ     s$   
rQ   c               @   sp   e Zd ZdZedddZ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S )TestEccPoint_NIST_P521ztTests defined in section 4.5 of https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.204.9073&rep=rep1&type=pdfl#   A5;LK5N}W,*n<UP%hA=Cb?iOtiL1!@vlv'Wl#   #5kS7?I]*[nnkYi[7.	 d9MT3X=TP5_Icc	np521l#   GJo7 $=?>D^`bXkNo	tG`xw-dg!;I7>S{) wh\.,#l#   cae.tDffI*"a%A&4h#Ww5%D2>n<!}6@fNvF$>8vpc             C   s(   t dd}|| j | || j d S )Nr   )r   r'   r(   r"   )r   r)   r   r   r   r*   ~  s    
zTestEccPoint_NIST_P521.test_setc             C   sF   | j  }| || j  || j | || j | | j | j d S )N)r(   r+   r"   r'   r,   r-   )r   r)   r   r   r   r.     s
    
z TestEccPoint_NIST_P521.test_copyc             C   s(   | j  }| j | }| || j   d S )N)r(   r"   r/   )r   r0   r1   r   r   r   r2     s    
z"TestEccPoint_NIST_P521.test_negatec             C   s   d}d}| j | j }| |j| | |j| | }| j | }| || j  || j  }| || j  || }| || d S )Nl#   Y[V=xCmuOFl*sg	Np)giD>u{9gh0!cK-Op-^Nl#   U,R&9/@a}#>;cd{cl@E'98kh~a7?!-(O+S)r(   r,   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   r9     s    

z$TestEccPoint_NIST_P521.test_additionc             C   s   d}d}| j  }|| j7 }| |j| | |j| | }| j  }||7 }| || j  | }|| j 7 }| || j  | }||7 }| || d S )Nl#   Y[V=xCmuOFl*sg	Np)giD>u{9gh0!cK-Op-^Nl#   U,R&9/@a}#>;cd{cl@E'98kh~a7?!-(O+S)r(   r+   r,   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   r:     s     



z,TestEccPoint_NIST_P521.test_inplace_additionc             C   s   d}d}| j  }|  | |j| | |j| | j  }| }|  | || | j  }||7 }| |j| | |j| d S )Nl#   k'<J cmtW9T@%T$SD!kdlPgciSW_%3byF`($/rl#   C5APS?( w8OoXx
e\**L3tX@7N&xrZ7}r.8QIa)r(   r+   r;   r"   r3   r4   r/   )r   r5   r6   r7   r8   r   r   r   r<     s    


z$TestEccPoint_NIST_P521.test_doublingc                sj   d}d}d} j | } |j|  |j|  j  } j d } ||  t fdd d S )Nl#   \??7gf@YKjrR)P6_r	[<lSfPL3ZM
TUU3TM|K\xl#   QUx2?z=[nWq0 6&7mnktztX;Ia^Rm<9-Te	bFl#   [}5]v3nLIYjzQ`:Gk`O<Y[w `5Q**e7U5qr   c                  s
    j d S )Nr=   )r(   r   )r   r   r   r>     r?   z=TestEccPoint_NIST_P521.test_scalar_multiply.<locals>.<lambda>)r(   r"   r3   r4   r/   r@   r   )r   r   r5   r6   r7   r8   r   )r   r   rA     s    


z+TestEccPoint_NIST_P521.test_scalar_multiplyc             C   sH   d}d}d}d}| j | }|| j| 7 }| |j| | |j| d S )Nl#   \??7gf@YKjrR)P6_r	[<lSfPL3ZM
TUU3TM|K\xl#   |TB)I%_
#wUV6C9c  1z7bnl<#qI"fu#0	Xajpx8=nMl#   =etEK9JBadZYx
./jVa@3hMhA]_`s}J+dptl#   XM`Wi&GgwH"!e+oeG$,oQ Tk9P>@5{U':c0'=NDH? )r(   r,   r"   r3   r4   )r   r   r   r5   r6   r7   r   r   r   rK     s    
z1TestEccPoint_NIST_P521.test_joing_scalar_multiplyc             C   s(   |  | j d |  | j d d S )Ni	  B   )r"   r(   rE   rF   )r   r   r   r   rG     s    z!TestEccPoint_NIST_P521.test_sizesN)r   r   r   rH   r   r(   r,   r*   r.   r2   r9   r:   r<   rA   rK   rG   r   r   r   r   rU   q  s$   rU   c               @   s(   e Zd ZdZed ZeejejdZ	dS )TestEccPoint_PAI_P192z9Test vectors from http://point-at-infinity.org/ecc/nisttvr&   N)
r   r   r   rH   r   r   r   GxGypointGr   r   r   r   rX     s   rX   )Z	PublicKeyr   zpoint-at-infinity.org-P192.txtz&P-192 tests from point-at-infinity.orgc             C   s   t | S )N)int)kr   r   r   r>     r?   r>   c             C   s
   t | dS )N   )r\   )r3   r   r   r   r>      r?   c             C   s
   t | dS )Nr^   )r\   )r4   r   r   r   r>     r?   )r]   r3   r4   c             C   s*   | j | }| |j| | |j| d S )N)r[   r"   r3   r4   )r   scalarr3   r4   resultr   r   r   new_test  s    
ra   ztest_%dc               @   s(   e Zd ZdZed ZeejejdZ	dS )TestEccPoint_PAI_P224z9Test vectors from http://point-at-infinity.org/ecc/nisttvrJ   N)
r   r   r   rH   r   r   r   rY   rZ   r[   r   r   r   r   rb   
  s   rb   zpoint-at-infinity.org-P224.txtz&P-224 tests from point-at-infinity.orgc             C   s   t | S )N)r\   )r]   r   r   r   r>     r?   c             C   s
   t | dS )Nr^   )r\   )r3   r   r   r   r>     r?   c             C   s
   t | dS )Nr^   )r\   )r4   r   r   r   r>     r?   c             C   s*   | j | }| |j| | |j| d S )N)r[   r"   r3   r4   )r   r_   r3   r4   r`   r   r   r   ra     s    
c               @   s(   e Zd ZdZed ZeejejdZ	dS )TestEccPoint_PAI_P256z9Test vectors from http://point-at-infinity.org/ecc/nisttvp256N)
r   r   r   rH   r   r   r   rY   rZ   r[   r   r   r   r   rc     s   rc   zpoint-at-infinity.org-P256.txtz&P-256 tests from point-at-infinity.orgc             C   s   t | S )N)r\   )r]   r   r   r   r>   )  r?   c             C   s
   t | dS )Nr^   )r\   )r3   r   r   r   r>   *  r?   c             C   s
   t | dS )Nr^   )r\   )r4   r   r   r   r>   +  r?   c             C   s*   | j | }| |j| | |j| d S )N)r[   r"   r3   r4   )r   r_   r3   r4   r`   r   r   r   ra   -  s    
c               @   s(   e Zd ZdZed ZeejejdZ	dS )TestEccPoint_PAI_P384z9Test vectors from http://point-at-infinity.org/ecc/nisttvrR   N)
r   r   r   rH   r   r   r   rY   rZ   r[   r   r   r   r   re   4  s   re   zpoint-at-infinity.org-P384.txtz&P-384 tests from point-at-infinity.orgc             C   s   t | S )N)r\   )r]   r   r   r   r>   >  r?   c             C   s
   t | dS )Nr^   )r\   )r3   r   r   r   r>   ?  r?   c             C   s
   t | dS )Nr^   )r\   )r4   r   r   r   r>   @  r?   c             C   s*   | j | }| |j| | |j| d S )N)r[   r"   r3   r4   )r   r_   r3   r4   r`   r   r   r   ra   B  s    
c               @   s(   e Zd ZdZed ZeejejdZ	dS )TestEccPoint_PAI_P521z9Test vectors from http://point-at-infinity.org/ecc/nisttvrV   N)
r   r   r   rH   r   r   r   rY   rZ   r[   r   r   r   r   rf   I  s   rf   zpoint-at-infinity.org-P521.txtz&P-521 tests from point-at-infinity.orgc             C   s   t | S )N)r\   )r]   r   r   r   r>   S  r?   c             C   s
   t | dS )Nr^   )r\   )r3   r   r   r   r>   T  r?   c             C   s
   t | dS )Nr^   )r\   )r4   r   r   r   r>   U  r?   c             C   s*   | j | }| |j| | |j| d S )N)r[   r"   r3   r4   )r   r_   r3   r4   r`   r   r   r   ra   W  s    
c               @   sD   e Z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 )TestEccKey_P192c             C   s   t ddd}| |jd | |  | |jjtd j | |jj	td j
 ttd jtd j
dd}t dd|d}| |jd | |  | |j| t ddd}t ddd}d S )	NzP-192   )r   r   r&   )r   )r   r   point	secp192r1
prime192v1)r   r"   r   r   has_privater   r3   r   rY   r4   rZ   r   )r   keyri   r   r   r   test_private_key`  s    z TestEccKey_P192.test_private_keyc             C   sF   t td jtd jdd}td|d}| |  | |j| d S )Nr&   zP-192)r   )r   ri   )	r   r   rY   rZ   r   r   rl   r"   r   )r   ri   rm   r   r   r   test_public_keyr  s    zTestEccKey_P192.test_public_keyc             C   s6   t ddd}| }| |  | |j|j d S )NzP-192   )r   r   )r   
public_keyr   rl   r"   r   )r   priv_keypub_keyr   r   r   test_public_key_derivedy  s    z'TestEccKey_P192.test_public_key_derivedc             C   s   |  tdd  d S )Nc               S   s   t dddS )NzP-193rh   )r   r   )r   r   r   r   r   r>     r?   z4TestEccKey_P192.test_invalid_curve.<locals>.<lambda>)r@   r   )r   r   r   r   test_invalid_curve  s    z"TestEccKey_P192.test_invalid_curvec             C   s$   |  tdd  |  tdd  d S )Nc               S   s   t dddS )NzP-192r   )r   r   )r   r   r   r   r   r>     r?   z0TestEccKey_P192.test_invalid_d.<locals>.<lambda>c               S   s   t dtd jdS )NzP-192r&   )r   r   )r   r   orderr   r   r   r   r>     s   )r@   r   )r   r   r   r   test_invalid_d  s    zTestEccKey_P192.test_invalid_dc             C   s   t jddd}t jddd}t jddd}| }| }| }| || | || | || | || | || d S )Nrp   zP-192)r   r      )r   r!   rq   r"   r-   )r   private_keyprivate_key2private_key3rq   public_key2public_key3r   r   r   test_equality  s    zTestEccKey_P192.test_equalityc             C   s@   t jdd}| dt| | |jd | | jd d S )Nr&   )r   zcurve='NIST P-192'z
NIST P-192)r   r   assertInr#   r"   r   rq   )r   rm   r   r   r   test_name_consistency  s    z%TestEccKey_P192.test_name_consistencyN)
r   r   r   rn   ro   rt   ru   rw   r~   r   r   r   r   r   rg   ^  s   rg   c               @   sD   e Z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 )TestEccKey_P224c             C   s   t ddd}| |jd | |  | |jjtd j | |jj	td j
 ttd jtd j
dd}t dd|d}| |jd | |  | |j| t ddd}t ddd}d S )	NzP-224rh   )r   r   rJ   )r   )r   r   ri   	secp224r1
prime224v1)r   r"   r   r   rl   r   r3   r   rY   r4   rZ   r   )r   rm   ri   r   r   r   rn     s    z TestEccKey_P224.test_private_keyc             C   sF   t td jtd jdd}td|d}| |  | |j| d S )NrJ   zP-224)r   )r   ri   )	r   r   rY   rZ   r   r   rl   r"   r   )r   ri   rm   r   r   r   ro     s    zTestEccKey_P224.test_public_keyc             C   s6   t ddd}| }| |  | |j|j d S )NzP-224rp   )r   r   )r   rq   r   rl   r"   r   )r   rr   rs   r   r   r   rt     s    z'TestEccKey_P224.test_public_key_derivedc             C   s   |  tdd  d S )Nc               S   s   t dddS )NzP-225rh   )r   r   )r   r   r   r   r   r>     r?   z4TestEccKey_P224.test_invalid_curve.<locals>.<lambda>)r@   r   )r   r   r   r   ru     s    z"TestEccKey_P224.test_invalid_curvec             C   s$   |  tdd  |  tdd  d S )Nc               S   s   t dddS )NzP-224r   )r   r   )r   r   r   r   r   r>     r?   z0TestEccKey_P224.test_invalid_d.<locals>.<lambda>c               S   s   t dtd jdS )NzP-224rJ   )r   r   )r   r   rv   r   r   r   r   r>     s   )r@   r   )r   r   r   r   rw     s    zTestEccKey_P224.test_invalid_dc             C   s   t jddd}t jddd}t jddd}| }| }| }| || | || | || | || | || d S )Nrp   zP-224)r   r   rx   )r   r!   rq   r"   r-   )r   ry   rz   r{   rq   r|   r}   r   r   r   r~     s    zTestEccKey_P224.test_equalityc             C   s@   t jdd}| dt| | |jd | | jd d S )NrJ   )r   zcurve='NIST P-224'z
NIST P-224)r   r   r   r#   r"   r   rq   )r   rm   r   r   r   r     s    z%TestEccKey_P224.test_name_consistencyN)
r   r   r   rn   ro   rt   ru   rw   r~   r   r   r   r   r   r     s   r   c               @   sD   e Z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 )TestEccKey_P256c             C   s   t ddd}| |jd | |  | |jjtd j | |jj	td j
 ttd jtd j
}t dd|d}| |jd | |  | |j| t ddd}t ddd}| jtt ddd	 d S )
NzP-256rh   )r   r   rd   )r   r   ri   	secp256r1
prime256v1s    HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH)r   seed)r   r"   r   r   rl   r   r3   r   rY   r4   rZ   r   r@   r   )r   rm   ri   r   r   r   rn     s    z TestEccKey_P256.test_private_keyc             C   sB   t td jtd j}td|d}| |  | |j| d S )Nrd   zP-256)r   ri   )	r   r   rY   rZ   r   r   rl   r"   r   )r   ri   rm   r   r   r   ro     s    zTestEccKey_P256.test_public_keyc             C   s6   t ddd}| }| |  | |j|j d S )NzP-256rp   )r   r   )r   rq   r   rl   r"   r   )r   rr   rs   r   r   r   rt     s    z'TestEccKey_P256.test_public_key_derivedc             C   s   |  tdd  d S )Nc               S   s   t dddS )NzP-257rh   )r   r   )r   r   r   r   r   r>   
  r?   z4TestEccKey_P256.test_invalid_curve.<locals>.<lambda>)r@   r   )r   r   r   r   ru   	  s    z"TestEccKey_P256.test_invalid_curvec             C   s$   |  tdd  |  tdd  d S )Nc               S   s   t dddS )NzP-256r   )r   r   )r   r   r   r   r   r>     r?   z0TestEccKey_P256.test_invalid_d.<locals>.<lambda>c               S   s   t dtd jdS )NzP-256rd   )r   r   )r   r   rv   r   r   r   r   r>     r?   )r@   r   )r   r   r   r   rw     s    zTestEccKey_P256.test_invalid_dc             C   s   t jddd}t jddd}t jddd}| }| }| }| || | || | || | || | || d S )Nrp   zP-256)r   r   rx   )r   r!   rq   r"   r-   )r   ry   rz   r{   rq   r|   r}   r   r   r   r~     s    zTestEccKey_P256.test_equalityc             C   s@   t jdd}| dt| | |jd | | jd d S )Nrd   )r   zcurve='NIST P-256'z
NIST P-256)r   r   r   r#   r"   r   rq   )r   rm   r   r   r   r   "  s    z%TestEccKey_P256.test_name_consistencyN)
r   r   r   rn   ro   rt   ru   rw   r~   r   r   r   r   r   r     s   r   c               @   sD   e Z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 )TestEccKey_P384c             C   s   t d }tddd}| |jd | |  | |jj|j | |jj	|j
 t|j|j
d}tdd|d}| |jd | |  | |j| tddd}tddd}tddd}d S )NrR   zP-384rh   )r   r   )r   r   ri   	secp384r1
prime384v1)r   r   r"   r   r   rl   r   r3   rY   r4   rZ   r   )r   rR   rm   ri   r   r   r   rn   +  s    z TestEccKey_P384.test_private_keyc             C   sD   t d }t|j|jd}td|d}| |  | |j| d S )NrR   zP-384)r   ri   )	r   r   rY   rZ   r   r   rl   r"   r   )r   rR   ri   rm   r   r   r   ro   @  s
    zTestEccKey_P384.test_public_keyc             C   s6   t ddd}| }| |  | |j|j d S )NzP-384rp   )r   r   )r   rq   r   rl   r"   r   )r   rr   rs   r   r   r   rt   H  s    z'TestEccKey_P384.test_public_key_derivedc             C   s   |  tdd  d S )Nc               S   s   t dddS )NzP-385rh   )r   r   )r   r   r   r   r   r>   P  r?   z4TestEccKey_P384.test_invalid_curve.<locals>.<lambda>)r@   r   )r   r   r   r   ru   O  s    z"TestEccKey_P384.test_invalid_curvec             C   s$   |  tdd  |  tdd  d S )Nc               S   s   t dddS )NzP-384r   )r   r   )r   r   r   r   r   r>   S  r?   z0TestEccKey_P384.test_invalid_d.<locals>.<lambda>c               S   s   t dtd jdS )NzP-384rR   )r   r   )r   r   rv   r   r   r   r   r>   T  s   )r@   r   )r   r   r   r   rw   R  s    zTestEccKey_P384.test_invalid_dc             C   s   t jddd}t jddd}t jddd}| }| }| }| || | || | || | || | || d S )Nrp   zP-384)r   r   rx   )r   r!   rq   r"   r-   )r   ry   rz   r{   rq   r|   r}   r   r   r   r~   W  s    zTestEccKey_P384.test_equalityc             C   s@   t jdd}| dt| | |jd | | jd d S )NrR   )r   zcurve='NIST P-384'z
NIST P-384)r   r   r   r#   r"   r   rq   )r   rm   r   r   r   r   i  s    z%TestEccKey_P384.test_name_consistencyN)
r   r   r   rn   ro   rt   ru   rw   r~   r   r   r   r   r   r   )  s   r   c               @   sD   e Z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 )TestEccKey_P521c             C   s   t d }tddd}| |jd | |  | |jj|j | |jj	|j
 t|j|j
d}tdd|d}| |jd | |  | |j| tddd}tddd}tddd}d S )NrV   zP-521rh   )r   r   )r   r   ri   	secp521r1
prime521v1)r   r   r"   r   r   rl   r   r3   rY   r4   rZ   r   )r   rV   rm   ri   r   r   r   rn   r  s    z TestEccKey_P521.test_private_keyc             C   sD   t d }t|j|jd}td|d}| |  | |j| d S )NrV   zP-384)r   ri   )	r   r   rY   rZ   r   r   rl   r"   r   )r   rV   ri   rm   r   r   r   ro     s
    zTestEccKey_P521.test_public_keyc             C   s6   t ddd}| }| |  | |j|j d S )NzP-521rp   )r   r   )r   rq   r   rl   r"   r   )r   rr   rs   r   r   r   rt     s    z'TestEccKey_P521.test_public_key_derivedc             C   s   |  tdd  d S )Nc               S   s   t dddS )NzP-522rh   )r   r   )r   r   r   r   r   r>     r?   z4TestEccKey_P521.test_invalid_curve.<locals>.<lambda>)r@   r   )r   r   r   r   ru     s    z"TestEccKey_P521.test_invalid_curvec             C   s$   |  tdd  |  tdd  d S )Nc               S   s   t dddS )NzP-521r   )r   r   )r   r   r   r   r   r>     r?   z0TestEccKey_P521.test_invalid_d.<locals>.<lambda>c               S   s   t dtd jdS )NzP-521rV   )r   r   )r   r   rv   r   r   r   r   r>     s   )r@   r   )r   r   r   r   rw     s    zTestEccKey_P521.test_invalid_dc             C   s   t jddd}t jddd}t jddd}| }| }| }| || | || | || | || | || d S )Nrp   zP-521)r   r   rx   )r   r!   rq   r"   r-   )r   ry   rz   r{   rq   r|   r}   r   r   r   r~     s    zTestEccKey_P521.test_equalityc             C   s@   t jdd}| dt| | |jd | | jd d S )NrV   )r   zcurve='NIST P-521'z
NIST P-521)r   r   r   r#   r"   r   rq   )r   rm   r   r   r   r     s    z%TestEccKey_P521.test_name_consistencyN)
r   r   r   rn   ro   rt   ru   rw   r~   r   r   r   r   r   r   p  s   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestEccModule_P192c             C   s`   t jdd}| |  | |jttd jtd j	d|j
 d t jdd t jdd d S )NzP-192)r   r&   rj   rk   )r   r   r   rl   r"   r   r   r   rY   rZ   r   )r   rm   r   r   r   test_generate  s    
z TestEccModule_P192.test_generatec             C   s   t jddd}| |  | |jtd j t jdtd jtd j	d}| 
|  | |jtd j t jddd t jddd t jddd d S )NzP-192rh   )r   r   r&   )r   r   r    rj   rk   )r   r!   r   rl   r"   r   r   GrY   rZ   r   )r   rm   r   r   r   test_construct  s    z!TestEccModule_P192.test_constructc             C   s^   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| d S )	N
   rx   )r   r    r&   r   zP-192   )r   r   )dictr   rY   rZ   r@   r   r   r!   )r   coordcoordGr   r   r   test_negative_construct  s    z*TestEccModule_P192.test_negative_constructN)r   r   r   r   r   r   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_P224c             C   s`   t jdd}| |  | |jttd jtd j	d|j
 d t jdd t jdd d S )NzP-224)r   rJ   r   r   )r   r   r   rl   r"   r   r   r   rY   rZ   r   )r   rm   r   r   r   r     s    
z TestEccModule_P224.test_generatec             C   s   t jddd}| |  | |jtd j t jdtd jtd j	d}| 
|  | |jtd j t jddd t jddd t jddd d S )NzP-224rh   )r   r   rJ   )r   r   r    r   r   )r   r!   r   rl   r"   r   r   r   rY   rZ   r   )r   rm   r   r   r   r     s    z!TestEccModule_P224.test_constructc             C   s^   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| d S )	Nr   rx   )r   r    rJ   r   zP-224r   )r   r   )r   r   rY   rZ   r@   r   r   r!   )r   r   r   r   r   r   r     s    z*TestEccModule_P224.test_negative_constructN)r   r   r   r   r   r   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_P256c             C   s^   t jdd}| |  | |jttd jtd j	|j
 d t jdd t jdd d S )NzP-256)r   rd   r   r   )r   r   r   rl   r"   r   r   r   rY   rZ   r   )r   rm   r   r   r   r     s    z TestEccModule_P256.test_generatec             C   s   t jddd}| |  | |jtd j t jdtd jtd j	d}| 
|  | |jtd j t jddd t jddd t jddd d S )NzP-256rh   )r   r   rd   )r   r   r    r   r   )r   r!   r   rl   r"   r   r   r   rY   rZ   r   )r   rm   r   r   r   r     s    z!TestEccModule_P256.test_constructc             C   s^   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| d S )	Nr   rx   )r   r    rd   r   zP-256r   )r   r   )r   r   rY   rZ   r@   r   r   r!   )r   r   r   r   r   r   r   #  s    z*TestEccModule_P256.test_negative_constructN)r   r   r   r   r   r   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_P384c             C   s^   t d }tjdd}| |  | |jt|j|j	d|j
  tjdd tjdd d S )NrR   zP-384)r   r   r   )r   r   r   r   rl   r"   r   r   rY   rZ   r   )r   r   rm   r   r   r   r   -  s     z TestEccModule_P384.test_generatec             C   s   t d }tjddd}| |  | |jt d j tjd|j|j	d}| 
|  | |j|j tjddd tjddd tjddd d S )NrR   zP-384rh   )r   r   )r   r   r    r   r   )r   r   r!   r   rl   r"   r   r   rY   rZ   r   )r   r   rm   r   r   r   r   8  s    z!TestEccModule_P384.test_constructc             C   s^   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| d S )	Nr   rx   )r   r    rR   r   zP-384r   )r   r   )r   r   rY   rZ   r@   r   r   r!   )r   r   r   r   r   r   r   H  s    z*TestEccModule_P384.test_negative_constructN)r   r   r   r   r   r   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_P521c             C   s^   t d }tjdd}| |  | |jt|j|j	d|j
  tjdd tjdd d S )NrV   zP-521)r   r   r   )r   r   r   r   rl   r"   r   r   rY   rZ   r   )r   r   rm   r   r   r   r   R  s     z TestEccModule_P521.test_generatec             C   s   t d }tjddd}| |  | |jt d j tjd|j|j	d}| 
|  | |j|j tjddd tjddd tjddd d S )NrV   zP-521rh   )r   r   )r   r   r    r   r   )r   r   r!   r   rl   r"   r   r   rY   rZ   r   )r   r   rm   r   r   r   r   ]  s    z!TestEccModule_P521.test_constructc             C   s^   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| d S )	Nr   rx   )r   r    rV   r   zP-521r   )r   r   )r   r   rY   rZ   r@   r   r   r!   )r   r   r   r   r   r   r   m  s    z*TestEccModule_P521.test_negative_constructN)r   r   r   r   r   r   r   r   r   r   r   P  s   r   c             C   s  g }|t t7 }|t t7 }|t t7 }|t t7 }|t t7 }|t t7 }|t t7 }|t t7 }|t t	7 }|t t
7 }|t t7 }|t t7 }|t t7 }|t t7 }|t t7 }|t t7 }|t t7 }|t t7 }|t t7 }|t t7 }|t t7 }|S )N)r   r
   r%   rI   rN   rQ   rU   rX   rb   rc   re   rf   rg   r   r   r   r   r   r   r   r   r   )configtestsr   r   r   	get_testsu  s.    r   __main__c               C   s   t t S )N)unittestZ	TestSuiter   r   r   r   r   r>     r?   suite)ZdefaultTest)1r   binasciir   ZCryptodome.SelfTest.st_commonr   ZCryptodome.SelfTest.loaderr   ZCryptodome.PublicKeyr   ZCryptodome.PublicKey.ECCr   r   r   ZCryptodome.Math.Numbersr	   ZTestCaser
   r%   rI   rN   rQ   rU   rX   Ztv_paitvr]   r3   r4   ra   setattrcountrb   rc   re   rf   rg   r   r   r   r   r   r   r   r   r   r   r   r   mainr   r   r   r   <module>   s   !     




CCEGG''&%%
