
    <fq5                        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
e j                  Z G d de j                  Z G d de j                  Zi fdZedk    rd Z e j        d           dS dS )    N)	unhexlify)list_test_cases)load_test_vectors)ECC)EccPoint_curvesEccKey)Integer)SHAKE128c                   
   e Zd ZdddZdddZdddZ eed         ed	         d
          Z eed         ed	         d
          Z eed         ed	         d
          Z	d Z
d Zd Zd Zd Zd Zd Zd Zd Zd Z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                 `   t          | j        d         | j        d         d           t          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           | 	                    t          t           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bp2s       w/home/panchajanya/Development/work/volatility3/lib/python3.11/site-packages/Crypto/SelfTest/PublicKey/test_ECC_25519.pytest_init_xyz!TestEccPoint_Ed25519.test_init_xy<   s   #Y???? q!9---""""""((( [lmmmlmmmrt--- l!! mnnn mnnn#%000 	`` 	" 	" 	" 	"
 	*hBiHHHHH    c                     t          ddd          }|                    | j                   |                     |j        | j        j                   |                     |j        | j        j                   d S Nr   r   r   r   )r   setr    r   r   r   r%   pointWs     r)   test_setzTestEccPoint_Ed25519.test_setY   sh    !Qi000

4;4;=1114;=11111r+   c                     | j                                         }|                     |j        | j         j                   |                     |j        | j         j                   d S N)r    r!   r   r   r   r/   s     r)   	test_copyzTestEccPoint_Ed25519.test_copy_   sS    !!##4;=1114;=11111r+   c                     | j                                         }| j                                        }|                     | j         |           |                     | j         |           d S r3   )r    r!   r"   r   assertNotEqual)r%   pointHpointIs      r)   
test_equalzTestEccPoint_Ed25519.test_equald   s^    !!##""$$f---DK00000r+   c                     t          ddd          }|                     |                                           |                     ||                                           d S r-   )r   
assertTrueis_point_at_infinityr   point_at_infinity)r%   r&   s     r)   test_paizTestEccPoint_Ed25519.test_paij   s\    q!9---0022333c335566666r+   c                 x    | j          }| j         |z   }|                     |                                           d S r3   )r    r;   r<   )r%   negGsums      r)   test_negatez TestEccPoint_Ed25519.test_negateo   s;    |kD 002233333r+   c                    |                      | j        | j        z   | j                   |                      | j        | j        z   | j                   |                      | j        | j                                        z   | j                   |                      | j                                        | j        z   | j                   | j        | j        z   }|                      |j        d           |                      |j        d           d S )Nr   r   )r   r    r"   pointG3r=   r   r   )r%   G5s     r)   test_additionz"TestEccPoint_Ed25519.test_additiont   s    t|3T\BBB3T\BBB(E(E(G(GGVVV66884<GVVV\DL(lmmmlmmmmmr+   c                 :   | j                                         }|| j         z  }|                     || j                   || j         z  }|                     || j                   || j                                         z  }|                     || j                   d S r3   )r    r!   r   r"   rD   r=   )r%   r7   s     r)   test_inplace_additionz*TestEccPoint_Ed25519.test_inplace_addition~   s    !!##$+...$+...$+//111.....r+   c                    | j                                         }|                                 |                     |j        | j        j                   |                     |j        | j        j                   | j                                         }|                                }|                                 |                     ||           d S r3   )r    r!   doubler   r   r"   r   r=   )r%   r7   r&   pointRs       r)   test_doublingz"TestEccPoint_Ed25519.test_doubling   s    !!##4<>2224<>222 k++--%%%%%r+   c                    d}|| j         z  }|                     |j        d           |                     |j        d           d}|| j         z  }|                     |j        | j         j                   |                     |j        | j         j                   d}|| j         z  }|                     |j        | j        j                   |                     |j        | j        j                   d}|| j         z  }|                     |j        | j        j                   |                     |j        | j        j                   d}|| j         z  }|                     |j        d           |                     |j        d           d}|| j         z  }|                     |j        d	           |                     |j        d
           d}|| j         z  }|                     |j        d           |                     |j        d           d}|| j         z  }|                     |j        d           |                     |j        d           d}|| j         z  }|                     |j        d           |                     |j        d           d}|| j         z  }|                     |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"   rD   )r%   dr7   s      r)   test_scalar_multiplyz)TestEccPoint_Ed25519.test_scalar_multiply   s   T[1%%%1%%%T[4;=1114;=111T[4<>2224<>222T[4<>2224<>222T[#pqqq#pqqqT[#pqqq#pqqqT[#pqqq#pqqqT[#pqqq#opppT[#pqqq#pqqqT[#pqqq#opppppr+   c                     |                      | j                                        d           |                      | j                                        d           d S )NrT       )r   r    size_in_bitssize_in_bytesr%   s    r)   
test_sizeszTestEccPoint_Ed25519.test_sizes   sP    1133S9992244b99999r+   N)__name__
__module____qualname__r   G2xyG3xyr   r    r"   rD   r*   r1   r4   r9   r>   rB   rF   rH   rL   rW   r]    r+   r)   r   r   -   sa       ]]_ _C _^` `D _]_ _D Xc#hC	:::FhtCy$s)9===GhtCy$s)9===GI I I:2 2 22 2 2
1 1 17 7 7
4 4 4
n n n/ / /
& 
& 
&1q 1q 1qf: : : : :r+   r   c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )TestEccKey_Ed25519c                    t          d          }d}d}t          d|          }|                     |j        |           |                     |j        d           |                     |                                           |                     |j        j        |           |                     |j        j	        |           t          ||d          }t          d||          }|                     |j        d           |                     |                                           |                     |j        |           t          d|          }|                     t          t          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   rk   pointr   r   rV   )r   r	   r   rk   rV   r;   has_privatepointQr   r   r   r#   r$   )r%   rk   PxPykeyrn   s         r)   test_private_keyz#TestEccKey_Ed25519.test_private_key   sX   [\\ZZ940004((( mnnn))***r***r***R++94u=== mnnn))***U+++ 94000 	*fICCCCCr+   c                    t          t          d         j        t          d         j        d          }t	          d|          }|                     |                                           |                     |j        |           d S )Nrm   r   )r   rn   )	r   r   GxGyr	   assertFalserp   r   rq   )r%   rn   rt   s      r)   test_public_keyz"TestEccKey_Ed25519.test_public_key   st    +.	0B0EYWWW9E222**+++U+++++r+   c                     t          dd          }|                                }|                     |                                           |                     |j        |j                   d S )Nrm       HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrj   )r	   
public_keyry   rp   r   rq   )r%   priv_keypub_keys      r)   test_public_key_derivedz*TestEccKey_Ed25519.test_public_key_derived   se    	888%%'',,..///'.99999r+   c                 >    |                      t          d            d S )Nc                  $    t          dd          S )Nrm      HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrj   )r	   rc   r+   r)   <lambda>z6TestEccKey_Ed25519.test_invalid_seed.<locals>.<lambda>   s    f99.U.U.U r+   )r#   r$   r\   s    r)   test_invalid_seedz$TestEccKey_Ed25519.test_invalid_seed   s"    *&U&UVVVVVr+   c                    t          j        dd          }t          j        dd          }t          j        dd          }|                                }|                                }|                                }|                     ||           |                     ||           |                     ||           |                     ||           |                     ||           d S )Nr|   r   )rk   r   rm   s    CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)r   	constructr}   r   r6   )r%   private_keyprivate_key2private_key3r}   public_key2public_key3s          r)   test_equalityz TestEccKey_Ed25519.test_equality   s    m	BBB}'CCC}'CCC ++--
"--//"--//l333K666[111J444J44444r+   c                    t          j        d          }|                     dt          |                     |                     |j        d           |                     |                                j        d           d S )Nrm   r   zcurve='Ed25519'r   )r   generateassertInreprr   r   r}   )r%   rt   s     r)   test_name_consistencyz(TestEccKey_Ed25519.test_name_consistency  sp    l+++'c333I...))/;;;;;r+   N)	r^   r_   r`   ru   rz   r   r   r   r   rc   r+   r)   re   re      st        D D D0, , ,: : :W W W5 5 5"< < < < <r+   re   c                        e Zd Zd Zd Zd ZdS )TestEccModule_Ed25519c                    t          j        d          }|                     |                                           t	          t
          d         j        t
          d         j        d          |j        z  }| 	                    |j
        |           t          j        d          }|                     ||           t          j        d           t          j        dt          j                    j                  }t          j        dt          j                    j                  }| 	                    ||           d S )Nr   r   )r   randfunc)r   r   r;   rp   r   r   rw   rx   rV   r   rq   r6   r   newread)r%   rt   rn   key2key1s        r)   test_generatez#TestEccModule_Ed25519.test_generate  s   l+++))***+.	0B0EYWWWZ]Z__U+++ |),,,C&&& 	9%%%% |)hlnn6IJJJ|)hlnn6IJJJt$$$$$r+   c                    t          d          }d}d}d}t          ||d          }t          j        d|          }|                     |j        |           |                     |                                           t          j        d||          }|                     |j        |           |                     |                                           t          j        d|||	          }|                     |j        |           |                     |                                           t          j        d
|          }d S )Nrg   rh   ri   rl   r   r   rj   )r   point_xpoint_y)r   rk   r   r   rm   )	r   r   r   r   r   rq   r;   rp   ry   )r%   rk   rr   rs   rV   rn   rt   s          r)   test_constructz$TestEccModule_Ed25519.test_construct   s3   [\\ZZYRy111 m)$777U+++))*** m)RDDDU+++**+++ m)$BOOOU+++))*** m)$777r+   c                 \   t          dd          }t          t          d         j        t          d         j                  } | j        t
          t          j        fddi|  | j        t
          t          j        fddd| |                     t
          t          j        dd	
           d S )NrR   rP   )r   r   rm   r   r   rN   ro   r   rj   )dictr   rw   rx   r#   r$   r   r   )r%   coordcoordGs      r)   test_negative_constructz-TestEccModule_Ed25519.test_negative_construct9  s    R+++gi03WY=O=RSSS*cmNN9NNNN*cmT9TTVTTT*cm97SSSSSr+   N)r^   r_   r`   r   r   r   rc   r+   r)   r   r     sF        % % %$8 8 82T T T T Tr+   r   c                     g }|t          t                    z  }|t          t                    z  }|t          t                    z  }|S r3   )r   r   re   r   )configtestss     r)   	get_testsr   B  sE    E	_1222E	_/000E	_2333ELr+   __main__c                  B    t          j        t                                S r3   )unittest	TestSuiter   rc   r+   r)   suiter   K  s    !)++...r+   r   )defaultTest)r   binasciir   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   Crypto.PublicKeyr   Crypto.PublicKey.ECCr   r   r	   Crypto.Math.Numbersr
   Crypto.Hashr   TestCaser   re   r   r   r^   r   mainrc   r+   r)   <module>r      s  >        5 5 5 5 5 5 4 4 4 4 4 4             : : : : : : : : : : ' ' ' ' ' '            [: [: [: [: [:8, [: [: [:|>< >< >< >< ><* >< >< ><B3T 3T 3T 3T 3TH- 3T 3T 3Tl      z/ / /HMg&&&&&& r+   