gh6:ddlZddlmZddlmZddlmZddlmZddl m Z m Z m Z ddl mZddlmZGd d ejZGd d ejZGd dejZifdZedkrdZejddSdS)N) unhexlify)list_test_cases)load_test_vectors)ECC)EccPoint_curvesEccKey)Integer)SHAKE128c eZdZdddZdddZdddZeeded d Zeeded d Zeeded d Z d Z d Z dZ dZ dZdZdZdZdZdZdZdS)TestEccPoint_Ed448^@ 518`b8Cl\p*At(qmj.<+FaS[/SDZ74_3  zadoeC@ ZK^DsxssZhNx02>Ilq2 vIZu gt' )xyUU*UU*UU*UU*UU*UU*UU*UUTU*UU*UU*UU*UU*UU*UU*U'U7oWW9/Y^aT ,+"67!V=6V!(Yf\V^l/ \@9uKQZ[1V?N__N ybj3\\A"f-d=H"\X lV1M0AZZ?M}pNmoQ C;A|s[ l$Hj=K nsI^ZrrEd448curvec`t|jd|jddtddd}||jd||jd||jd|j}||jd||jd ||j|j|jf|j}||jd ||jd ||j|j|jftd d d| ttddddS)Nrrrrr)rrrrrr4$BtL x;c=yHjPb%0VN[{ =Cmv`'W,7$-3yS5eQLD%D* X222 4<>222k++--  %%%%%r+cd}||jz}||jd||jdd}||jz}||j|jj||j|jjd}||jz}||j|jj||j|jjd}||jz}||j|jj||j|jjd}||jz}||jd||jdd}||jz}||jd ||jd d }||jz}||jd ||jd d}||jz}||jd||jdd}||jz}||jd||jdd}||jz}||jd||jddS)Nrrl0t r<)b^pW!:;EE=0i1_R#"8zNUD=J>9(X83`cK; l9[[u! "jr(zG xKa I0_x|KrR3K,N7f%~rr l=0!EZs-$@bDU=N.r1aJOi4A8ac)d> 59Yhlg_I'* k[QP`1? \W5p_`?k?w7:hk9 C9%?qI /X~ l8`}\&0< FYr pcJ)A}"Hos2'@`C#*4x'16F| 3 [lkM`7C5SWh+k3 e6\D=C:D`IecjEGuOC3l$`:i z=nUYzz*ZGb9LhQut.q97URMT|sia\[yFd6})r rrrr"rD)r%dr7s r)test_scalar_multiplyz'TestEccPoint_Ed448.test_scalar_multiplysB T[ 1%%% 1%%% T[ 4;=111 4;=111 T[ 4<>222 4<>222 T[ 4<>222 4<>222 T[ $V W W W $V W W W T[ $V W W W $V W W W T[ $V W W W $V W W W T[ $V W W W $V W W W T[ $V W W W $V W W W T[ $V W W W $V W W W W Wr+c||jd||jddS)Ni8)rr size_in_bits size_in_bytesr%s r) test_sizeszTestEccPoint_Ed448.test_sizessP 1133S999 2244b99999r+N)__name__ __module__ __qualname__rG2xyG3xyrr r"rDr*r1r4r9r>rBrFrHrLrWr]r+r)r r -smCC D DCDD E EDCD E EDXc#hC 8 8 8FhtCy$s)7;;;GhtCy$s)7;;;GGGG:222 222 111 777 444 SSS/// & & &1W1W1Wf:::::r+r c2eZdZdZdZdZdZdZdZdS)TestEccKey_Ed448ctd}d}d}td|}||j|||jd||||jj|||jj |t||d}td||}||jd||||j|td|}| ttdd dS) Nr4adf5d37ac6785e83e99a924f92676d366a78690af59c92b6bdf14f9cdbcf26fdad478109607583d633b60078d61d51d81b7509c5433b0d4c9&`KOed448)rrkpointrrrV) rr rrkrVr; has_privatepointQrrrr#r$)r%rkPxPykeyrns r)test_private_keyz!TestEccKey_Ed448.test_private_keysyNOO  7... 4((( !S T T T ))*** r*** r***R))7U;;; !S T T T ))*** U+++7... *fGqAAAAAr+cttdjtdjd}t d|}||||j|dS)Nrmr)rrn) rrGxGyr assertFalserprrq)r%rnrts r)test_public_keyz TestEccKey_Ed448.test_public_keyst),gg.>.AQQQ7%000 **+++ U+++++r+ctdd}|}||||j|jdS)Nrm9HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrj)r public_keyryrprrq)r%priv_keypub_keys r)test_public_key_derivedz(TestEccKey_Ed448.test_public_key_derivedseg666%%'' ,,../// '.99999r+c>|tddS)Nc$tddS)Nrms8HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrj)r rcr+r)z4TestEccKey_Ed448.test_invalid_seed..sf7.S.S.Sr+)r#r$r\s r)test_invalid_seedz"TestEccKey_Ed448.test_invalid_seeds" *&S&STTTTTr+ctjdd}tjdd}tjdd}|}|}|}|||||||||||||||dS)Nr|r)rkrrms9CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC)r constructr}rr6)r% private_key private_key2 private_key3r} public_key2 public_key3s r) test_equalityzTestEccKey_Ed448.test_equalitysm@@@ }'AAA }'AAA  ++-- "--// "--//  l333 K666 [111 J 444 J 44444r+ctjd}|dt|||jd||jddS)Nrmrz curve='Ed448'r)rgenerateassertInreprrrr})r%rts r)test_name_consistencyz&TestEccKey_Ed448.test_name_consistencysol))) otCyy111 G,,, ))/99999r+N) r^r_r`rurzrrrrrcr+r)rerestBBB0,,, ::: UUU555":::::r+rec eZdZdZdZdZdS)TestEccModule_Ed448ctjd}||t t djt djd|jz}| |j |tjd}| ||tjdtjdtj j}tjdtj j}| ||dS)Nrr)rrandfunc)rrr;rprrrwrxrVrrqr6r newread)r%rtrnkey2key1s r) test_generatez!TestEccModule_Ed448.test_generates l))) ))***),gg.>.AQQQTWTYY U+++|'*** C&&& 7####|'HLNN4GHHH|'HLNN4GHHH t$$$$$r+ctd}d}d}d}t||d}tjd|}||j|||tjd||}||j|||tjd||| }||j|||tjd |}dS) Nrgrhrirlrrrj)rpoint_xpoint_y)rrkrrrm) rrrrrrqr;rpry)r%rkrrrsrVrnrts r)test_constructz"TestEccModule_Ed448.test_construct s<NOO   ~Rw///m'555 U+++ ))***m'2rBBB U+++ **+++m'b"MMM U+++ ))***m'555r+c\tdd}ttdjtdj}|jt t jfddi||jt t jfddd||t t jdd dS) NrRrP)rrrmrrrNros:HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHrj)dictrrwrxr#r$rr)r%coordcoordGs r)test_negative_constructz+TestEccModule_Ed448.test_negative_construct9sR+++gg.177;K;NOOO*cmLL7LeLLL*cmR7aRR6RRR *cm7QQQQQr+N)r^r_r`rrrrcr+r)rr sF%%%$6662RRRRRr+rcg}|ttz }|ttz }|ttz }|Sr3)rr rer)configtestss r) get_testsrBsE E _/ 0 00E _- . ..E _0 1 11E Lr+__main__cBtjtSr3)unittest TestSuiterrcr+r)suiterKs!)++...r+r) defaultTest)rbinasciirCrypto.SelfTest.st_commonrCrypto.SelfTest.loaderrCrypto.PublicKeyrCrypto.PublicKey.ECCrrr Crypto.Math.Numbersr Crypto.Hashr TestCaser rerrr^rmainrcr+r)rs>555555444444 ::::::::::'''''' [:[:[:[:[:*[:[:[:|>:>:>:>:>:x(>:>:>:B3R3R3R3R3R(+3R3R3Rl z///HMg&&&&&&r+