+
    '(jPw                        ^ RI t ^ RIt^ RIt^ RIHtHt ^ RIHt ^ RIH	t	 ^ RI
Ht ^ RIHt ^ RIHtHt ^ RIHt ^ R	IHtHtHtHtHt  ! R
 R]P2                  4      t]! R0RRRR RR RR RR RR /4      ;'       g    . t]! ]4       F  w  tt]! ]] 4      '       d1   ] PB                  ! R]4      t"]"'       g   Q h]"PG                  ^4      t$KE  ]PJ                  ! ]$]PL                  ]PN                  R7      t(]PJ                  ! ]$]PR                  R7      t*]PV                  t,](]*],3R lt-](]*],3R lt.]/! ]R],          ]-4       ]^8X  g   K  ]/! ]R],          ].4       K  	   ! R R ]P2                  4      t0 ! R! R"]P2                  4      t1 ! R# R$]P2                  4      t2 ! R% R&]P2                  4      t3 ! R' R(]P2                  4      t4 ! R) R*]P2                  4      t5/ 3R+ lt6]7R,8X  d   R- t8]Pr                  ! R.R/7       R# R# )1    N)hexlify	unhexlify)bord)SHA256)ECC)list_test_cases)load_test_vectorsload_test_vectors_wycheproof)DH)key_agreementimport_x25519_public_keyimport_x25519_private_keyimport_x448_public_keyimport_x448_private_keyc                       ] tR t^tRtR# )FIPS_ECDH_Tests_KAT N)__name__
__module____qualname____firstlineno____static_attributes__r       W/home/ubuntu/cf-venv/lib/python3.14/site-packages/Crypto/SelfTest/Protocol/test_ecdh.pyr   r      s    r   r   zKAS_ECC_CDH_PrimitiveTest.txtz-ECC CDH Primitive (SP800-56A Section 5.7.1.2)qcavsxc                     \        V ^4      #    intxs   &r   <lambda>r#      
    C2Jr   qcavsyc                     \        V ^4      # r   r   r!   s   &r   r#   r#      r$   r   diutc                     \        V ^4      # r   r   r!   s   &r   r#   r#      s
    #a*r   qiutxc                     \        V ^4      # r   r   r!   s   &r   r#   r#       
    3q":r   qiutyc                     \        V ^4      # r   r   r!   s   &r   r#   r#   !   r+   r   z\[([A-Za-z0-9-]+)\])curvepoint_xpoint_yr.   dc                 F    \        VVR  R7      pV P                  WC4       R# )c                     V # Nr   r!   s   &r   r#   ecdh_test.<locals>.<lambda>=       ar   
static_pubstatic_privkdfNr   assertEqualself
public_keyprivate_keyexp_responsezs   &&&& r   	ecdh_testrD   6   '     %'! 	)r   c                 F    \        VVR  R7      pV P                  WC4       R# )c                     V # r5   r   r!   s   &r   r#   ecdh_test_rev.<locals>.<lambda>G   r7   r   r8   Nr<   r>   s   &&&& r   ecdh_test_revrI   @   rE   r   ztest_verify_positive_%dztest_verify_positive_rev_%dc                   B   a  ] tR t^Ot o RtR tR tR tR tR t	Rt
V tR# )	TestVectorsECDHWycheproofzWycheproof ECDH testsc                z    R  pR p\        RVRV,          RV/RV/R7      pV ;P                  V,          un        R# )c                     V R ,          # )r.   r   gs   &r   r.   2TestVectorsECDHWycheproof.add_tests.<locals>.curveU   s    W:r   c                 (    \        V R ,          ^4      # privater   us   &r   rS   4TestVectorsECDHWycheproof.add_tests.<locals>.privateX   s    q|R((r   Wycheproof ECDH (%s)r.   rS   	group_tagunit_tagNProtocol
wycheproofr
   tv)r?   filenamer.   rS   results   &&   r   	add_tests#TestVectorsECDHWycheproof.add_testsS   sI    		) ..H.6.D08/99@%8H8A77K0 	6r   c                2   . V n         R V n        V P                  R4       V P                  R4       V P                  R4       V P                  R4       V P                  R4       V P                  R4       V P                  R4       V P                  R4       R # )	Nz ecdh_secp224r1_ecpoint_test.jsonz ecdh_secp256r1_ecpoint_test.jsonz ecdh_secp384r1_ecpoint_test.jsonz ecdh_secp521r1_ecpoint_test.jsonzecdh_secp224r1_test.jsonzecdh_secp256r1_test.jsonzecdh_secp384r1_test.jsonzecdh_secp521r1_test.json)r_   descrb   r?   s   &r   setUpTestVectorsECDHWycheproof.setUpd   sx    	9:9:9:9:12121212r   c                    V P                   # r5   re   rf   s   &r   shortDescription*TestVectorsECDHWycheproof.shortDescriptionr       yyr   c                $   \        VP                  4      ^ 8X  d   R#  \        VP                  ^ ,          4      ^8X  d.   \        P                  ! VP                  VP
                  R7      pM!\        P                  ! VP                  4      p \        P                  ! VP
                  VP                  R7      p \        VVR R7      pV P                  WAP                  4       VP                  '       g   Q hR#   \         d+    TP                  '       g   TP                  '       d   Q h R# i ; i  \         d    TP                  '       d   Q h R# \         d2   pTP                  '       d   Q hR\        T4      9   g   Q h Rp?R# Rp?ii ; i)r   N)
curve_namer1   c                     V # r5   r   r!   s   &r   r#   7TestVectorsECDHWycheproof.test_verify.<locals>.<lambda>       Ar   r8   incompatible curve)lenpublicr   r   
import_keyr.   
ValueErrorwarningvalid	constructrS   r   r=   shared	TypeErrorstr)r?   r_   r@   rA   rC   es   &&    r   test_verify%TestVectorsECDHWycheproof.test_verifyu   s   ryy>Q	BIIaL!Q& ^^BII"((K
 ^^BII6

 mm"((bjjA	*5"-/A Q		*888O8#  	:::RXXX--	  	 xxx<x 	2xxx<'3q6111	2sN   AC: , C: :D2 :D/D/)D/.D/2FFFF&F

Fc                    V P                    FC  pR VP                  VP                  VP                  3,          V n        V P                  V4       KE  	  R# )z(Wycheproof ECDH Verify Test #%d (%s, %s)Nr_   idcommentr`   re   r   r?   r_   s   & r   runTest!TestVectorsECDHWycheproof.runTest   s@    ''BBbeeRZZY[YdYdEeeDIR  r   re   r_   N)r   r   r   r   re   rb   rg   rk   r   r   r   __classdictcell____classdict__s   @r   rK   rK   O   s(     "D"3:! !r   rK   c                     a  ] tR t^t o ]P
                  ! R4      t]P
                  ! R4      P                  4       t]P
                  ! R4      t	]P
                  ! R4      t
R tR tR tR tR	 tR
 tR tR tR tR tR tR tRtV tR# )
ECDH_Testsz-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg9VHFVKh2a1aVFifH
+BiyNaRa2kttEg3165Ye/dJxJ7KhRANCAARImIEXro5ZOcyWU2mq/+d79FEZXtTA
bKkz1aICQXihQdCMzRNbeNtC9LFLzhu1slRKJ2xsDAlw9r6w6vwtkRzr
-----END PRIVATE KEY-----z-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgHhmv8zmZ+Nw8fsZd
s8tlZflyfw2NE1CRS9DWr3Y3O46hRANCAAS3hZVUCbk+uk3w4S/YOraEVGG+WYpk
NO/vrwzufUUks2GV2OnBQESe0EBk4Jq8gn4ij8Lvs3rZX2yT+XfeATYd
-----END PRIVATE KEY-----z-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGPdJmFFFKzLPspIr
E1T2cEjeIf4ajS9CpneP0e2b3AyhRANCAAQBexAA5BYDcXHs2KOksTYUsst4HhPt
kp0zkgI2virc3OGJFNGPaCCPfFCQJHwLRaEpiq3SoQlgoBwSc8ZPsl3y
-----END PRIVATE KEY-----z-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQghaVZXElSEGEojFKF
OU0JCpxWUWHvWQUR81gwWrOp76ShRANCAATi1Ib2K+YR3AckD8wxypWef7pw5PRw
tBaB3RDPyE7IjHZC6yu1DbcXoCdtaw+F5DM+4zpl59n5ZaIy/Yl1BdIy
-----END PRIVATE KEY-----c                    R  p\        VV P                  V P                  R7      pV P                  \	        V4      R4       R# )c                 J    \         P                  ! V 4      P                  4       # r5   r   newdigestr!   s   &r   r#   #ECDH_Tests.test_1.<locals>.<lambda>       

1,,.r   )r;   r9   r:   s@   3960a1101d1193cbaffef4cc7202ebff783c22c6d2e0d5d530ffc66dc197ea9cN)r   r9   r:   r=   r   r?   r;   rC   s   &  r   test_1ECDH_Tests.test_1   s>    .?? ,,. 	\	^r   c                    R  p\        VV P                  V P                  V P                  V P                  R7      pV P                  \        V4      R4       R# )c                 J    \         P                  ! V 4      P                  4       # r5   r   r!   s   &r   r#   #ECDH_Tests.test_2.<locals>.<lambda>   r   r   )r;   r9   r:   eph_pubeph_privs@   7447b733d40c8fab2c633b3dc61e4a8c742f3a6af7e16fb0cc486f5bdb5d6ba2N)r   r9   r:   r   r   r=   r   r   s   &  r   test_2ECDH_Tests.test_2   sL    .?? ,,( 	\	^r   c                    R  p\        VV P                  V P                  V P                  R7      pV P	                  \        V4      R4       R# )c                 J    \         P                  ! V 4      P                  4       # r5   r   r!   s   &r   r#   #ECDH_Tests.test_3.<locals>.<lambda>   r   r   )r;   r9   r:   r   s@   9e977ae45f33bf67f285d064d83e6632bcafe3a7d33fe571233bab4794ace759N)r   r9   r:   r   r=   r   r   s   &  r   test_3ECDH_Tests.test_3   sE    .?? ,,	(
 	\	^r   c                    R  p\        VV P                  V P                  V P                  R7      pV P	                  \        V4      R4       R# )c                 J    \         P                  ! V 4      P                  4       # r5   r   r!   s   &r   r#   #ECDH_Tests.test_4.<locals>.<lambda>   r   r   )r;   r9   r:   r   s@   c9532df6aa7e9dbe5fe85da31ee25ff19c179c88691ec4b8328cc2036dcdadf2N)r   r9   r:   r   r=   r   r   s   &  r   test_4ECDH_Tests.test_4   sE    .?? ,,	&
 	\	^r   c           	         R  pV P                  \        \        VV P                  V P                  V P
                  R7       R# )c                 J    \         P                  ! V 4      P                  4       # r5   r   r!   s   &r   r#   #ECDH_Tests.test_5.<locals>.<lambda>   r   r   )r;   r:   r   r   N)assertRaisesrw   r   r:   r   r   r?   r;   s   & r   test_5ECDH_Tests.test_5   s9    .* ,, 	 	(r   c           	         R  pV P                  \        \        VV P                  V P                  V P
                  R7       R# )c                 J    \         P                  ! V 4      P                  4       # r5   r   r!   s   &r   r#   #ECDH_Tests.test_6.<locals>.<lambda>   r   r   )r;   r9   r   r   N)r   rw   r   r9   r   r   r   s   & r   test_6ECDH_Tests.test_6   s7    .*?? 	 	(r   c                    R  p\        VV P                  V P                  R7      pV P                  \	        V4      R4       R# )c                 J    \         P                  ! V 4      P                  4       # r5   r   r!   s   &r   r#   #ECDH_Tests.test_7.<locals>.<lambda>   r   r   )r;   r   r   s@   feb257ebe063078b1391aac07913283d7b642ad7df61b46dfc9cd6f420bb896aN)r   r   r   r=   r   r   s   &  r   test_7ECDH_Tests.test_7   s<    .( 	\	^r   c                    R  p\        VV P                  V P                  R7      pV P                  \	        V4      R4       R# )c                 J    \         P                  ! V 4      P                  4       # r5   r   r!   s   &r   r#   #ECDH_Tests.test_8.<locals>.<lambda>   r   r   )r;   r:   r   s@   ee4dc995117476ed57fd17ff0ed44e9f0466d46b929443bc0db9380317583b04N)r   r:   r   r=   r   r   s   &  r   test_8ECDH_Tests.test_8   s>    . ,,& 	\	^r   c                    R  p\        VV P                  V P                  R7      pV P                  \	        V4      R4       R# )c                 J    \         P                  ! V 4      P                  4       # r5   r   r!   s   &r   r#   #ECDH_Tests.test_9.<locals>.<lambda>   r   r   )r;   r9   r   s@   2351cc2014f7c40468fa072b5d30f706eeaeef7507311cd8e59bab3b43f03c51N)r   r9   r   r=   r   r   s   &  r   test_9ECDH_Tests.test_9   s<    .??( 	\	^r   c                p    R  pV P                  \        \        VV P                  V P                  R7       R# )c                 J    \         P                  ! V 4      P                  4       # r5   r   r!   s   &r   r#   $ECDH_Tests.test_10.<locals>.<lambda>  r   r   )r;   r9   r   N)r   rw   r   r9   r   r   s   & r   test_10ECDH_Tests.test_10   s0    .*??	 	 	&r   c                p    R  pV P                  \        \        VV P                  V P                  R7       R# )c                 J    \         P                  ! V 4      P                  4       # r5   r   r!   s   &r   r#   $ECDH_Tests.test_11.<locals>.<lambda>
  r   r   )r;   r:   r   N)r   rw   r   r:   r   r   s   & r   test_11ECDH_Tests.test_11  s2    .* ,,	 	 	(r   c                h    V P                  \        \        V P                  V P                  R 7       R# ))r9   r:   N)r   rw   r   r9   r:   rf   s   &r   test_12ECDH_Tests.test_12  s*    *?? ,, 	 	.r   r   N)r   r   r   r   r   rv   r:   r@   r9   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s   @r   r   r      s     ..  "X  YK  !W  X  c  c  eJ~~  U  VHnn  T  UG^
^	^	^((^^^&(. .r   r   c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )X25519_Testsi  c                    RpV Fn  w  r#p\         P                  ! \        V4      4      p\         P                  ! \        V4      4      p\	        VVR R7      pV P                  V\        V4      4       Kp  	  R# )@a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4c                     V # r5   r   r!   s   &r   r#   -X25519_Tests.test_rfc7748_1.<locals>.<lambda>*      r   r8   N))r   @e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c@c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552)@4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0d@e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493@95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957r   r   r   r   r   r=   r?   tvstv1tv2tv3priv_keypub_keyra   s   &       r   test_rfc7748_1X25519_Tests.test_rfc7748_1  si    
 !MCc33IcNCH11)C.AG"g/7'24F VYs^4 !r   c                   \        R 4      p\        P                  ! V4      p\        P                  ! V4      p\	        VVR R7      pV P                  V\        R4      4       \        R4       F@  p\        P                  ! V4      p\        P                  ! V4      pTp\	        VVR R7      pKB  	  V P                  V\        R4      4       R# )@0900000000000000000000000000000000000000000000000000000000000000c                     V # r5   r   r!   s   &r   r#   -X25519_Tests.test_rfc7748_2.<locals>.<lambda>4      Qr   r8   @422c8e7a6227d7bca1350b3e2bb7279f7897b87bb6854b783c60e80311ae3079  c                     V # r5   r   r!   s   &r   r#   r   @  r   r   @684cf59ba83309552800ef566f2f4d3c1c3887c49360e3875f2eb94d99532c51N)r   r   r   r   r   r=   ranger?   kr   r   ra   _s   &     r   test_rfc7748_2X25519_Tests.test_rfc7748_2-  s    XY//2--a0'+3#.0 	XY	

 sA33F;H11!4GA"g/7'24F	  	XY	
r   c                   R pRpRpRpRp\         P                  ! \        V4      4      p\         P                  ! \        V4      4      p\         P                  ! \        V4      4      p\         P                  ! \        V4      4      p	\        V4      p
\	        VVR R7      p\	        V	VR R7      pV P                  W4       V P                  W4       R# )	@77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a@8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a@5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb@de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f@4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742c                     V # r5   r   r!   s   &r   r#   -X25519_Tests.test_rfc7748_3.<locals>.<lambda>V      ar   r8   c                     V # r5   r   r!   s   &r   r#   r   Y  r   r   Nr   r?   r   r   r   tv4tv5alice_priv_keyalice_pub_keybob_priv_keybob_pub_keysecretresult1result2s   &            r   test_rfc7748_3X25519_Tests.test_rfc7748_3G  s    PPPPP55inE33IcNC33IcNC11)C.A3=,8$/1  ;,:$/1 	))r   c                x    RpV F1  pV P                  \        \        P                  \	        V4      4       K3  	  R# )@0000000000000000000000000000000000000000000000000000000000000000N)r  @0100000000000000000000000000000000000000000000000000000000000000@e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800@5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157@ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f@edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f@eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f)r   rw   r   r   r   r?   	weak_keysr"   s   &  r   	test_weakX25519_Tests.test_weak]  s5    
	& Aj 99'l, r   r   N
r   r   r   r   r   r   r
  r  r   r   r   s   @r   r   r     s     5$
4*,, ,r   r   c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )
X448_Testsix  c                    RpV Fn  w  r#p\         P                  ! \        V4      4      p\         P                  ! \        V4      4      p\	        VVR R7      pV P                  V\        V4      4       Kp  	  R# )p3d262fddf9ec8e88495266fea19a34d28882acef045104d0d1aae121700a779c984c24f8cdd78fbff44943eba368f54b29259a4f1c600ad3c                     V # r5   r   r!   s   &r   r#   +X448_Tests.test_rfc7748_1.<locals>.<lambda>  r   r   r8   N))r  p06fce640fa3487bfda5f6cf2d5263f8aad88334cbd07437f020f08f9814dc031ddbdc38c19c6da2583fa5429db94ada18aa7a7fb4ef8a086pce3e4ff95a60dc6697da1db1d85e6afbdf79b50a2412d7546d5f239fe14fbaadeb445fc66a01b0779d98223961111e21766282f73dd96b6f)p203d494428b8399352665ddca42f9de8fef600908e0d461cb021f8c538345dd77c3e4806e25f46d3315c44e0a5b4371282dd2c8d5be3095fp0fbcc2f993cd56d3305b0b7d9e55d4c1a8fb5dbb52f8e9a1e9b6201b165d015894e56c4d3570bee52fe205e28a78b91cdfbde71ce8d157dbp884a02576239ff7a2f2f63b2db6a9ff37047ac13568e1e30fe63c4a7ad1b3ee3a5700df34321d62077e63633c575c1c954514e99da7c179dr   r   r   r   r   r=   r   s   &       r   r   X448_Tests.test_rfc7748_1z  si    
 !MCc11)C.AH//	#?G"g/7'24F VYs^4 !r   c                   \        R 4      p\        P                  ! V4      p\        P                  ! V4      p\	        VVR R7      pV P                  V\        R4      4       \        R4       F@  p\        P                  ! V4      p\        P                  ! V4      pTp\	        VVR R7      pKB  	  V P                  V\        R4      4       R# )p0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c                     V # r5   r   r!   s   &r   r#   +X448_Tests.test_rfc7748_2.<locals>.<lambda>  r   r   r8   p3f482c8a9f19b01e6c46ee9711d9dc14fd4bf67af30765c2ae2b846a4d23a8cd0db897086239492caf350b51f833868b9bc2b3bca9cf4113r   c                     V # r5   r   r!   s   &r   r#   r)    r   r   paa3b4749d55b9daf1e5b00288826c467274ce3ebbdd5c17b975e09d4af6c67cf10d087202db88286e2b79fceea3ec353ef54faa26e219f38N)r   r   r   r   r   r=   r   r   s   &     r   r   X448_Tests.test_rfc7748_2  s      I  J--a0++A.'+3#.0 	  I  J	

 sA11&9H//2GA"g/7'24F	  	  I  J	
r   c                   R pRpRpRpRp\         P                  ! \        V4      4      p\         P                  ! \        V4      4      p\         P                  ! \        V4      4      p\         P                  ! \        V4      4      p	\        V4      p
\	        VVR R7      p\	        V	VR R7      pV P                  W4       V P                  W4       R# )	p9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726bp9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0p1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992dp3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609p07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879dc                     V # r5   r   r!   s   &r   r#   +X448_Tests.test_rfc7748_3.<locals>.<lambda>  r   r   r8   c                     V # r5   r   r!   s   &r   r#   r5    r   r   Nr$  r   s   &            r   r
  X448_Tests.test_rfc7748_3  s     A A A A A33IcNC11)C.A11)C.A//	#?3=,8$/1  ;,:$/1 	))r   c                x    RpV F1  pV P                  \        \        P                  \	        V4      4       K3  	  R# )p0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000N)r9  p0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000pfefffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffpfffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffp00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r   rw   r   r   r   r  s   &  r   r  X448_Tests.test_weak  s5    
	 Aj 77'l, r   r   Nr  r   s   @r   r  r  x  s     5$
4*,, ,r   r  c                   H   a  ] tR tRt o RtR tR tR tR tR t	R t
R	tV tR
# )TestVectorsX25519Wycheproofi  zWycheproof X25519 testsc                z    R  pR p\        RVRV,          RV/RV/R7      pV ;P                  V,          un        R# )c                     V R ,          # typer   rN   s   &r   encoding;TestVectorsX25519Wycheproof.add_tests_hex.<locals>.encoding      V9r   c                 &    \        V R ,          4      # rR   r   rT   s   &r   rS   :TestVectorsX25519Wycheproof.add_tests_hex.<locals>.private      Qy\**r   rW   rE  rS   rX   Nr[   r^   r?   r`   rE  rS   ra   s   &&   r   add_tests_hex)TestVectorsX25519Wycheproof.add_tests_hex  I    		+ ..H.6.D08/99CX8N8A77K0 	6r   c           
         R  pR pR p\        R	VRV,          RV/RVRV/R7      pV ;P                  V,          un        R# )
c                     V R ,          # rC  r   rN   s   &r   rE  =TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.encoding  rG  r   c                     V R ,          # ru   r   rT   s   &r   ru   ;TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.public      X;r   c                     V R ,          # rR   r   rT   s   &r   rS   <TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.private      Y<r   rW   rE  ru   rS   rX   Nr[   r^   r?   r`   rE  ru   rS   ra   s   &&    r   add_tests_ascii+TestVectorsX25519Wycheproof.add_tests_ascii  V    			  ..H.6.D08/99CX8N8@&8A78L0 	6r   c                    . V n         R V n        V P                  R4       V P                  R4       V P                  R4       V P                  R4       R # )Nzx25519_test.jsonzx25519_asn_test.jsonzx25519_pem_test.jsonzx25519_jwk_test.jsonr_   re   rM  r[  rf   s   &r   rg   !TestVectorsX25519Wycheproof.setUp  sL    	-.123434r   c                    V P                   # r5   rj   rf   s   &r   rk   ,TestVectorsX25519Wycheproof.shortDescription  rm   r   c                   VP                   R 8X  d.    \        VP                  4      p\        TP                  4      pEMgVP                   R9   dD    \        P                  ! VP                  4      p\        P                  ! VP                  4      pEMVP                   R8X  d   RVP                  9   d   R# RVP                  9  d   R# RVP                  9  d   R# VP                  P                  R4      R	8w  d   R# VP                  P                  R
4      R8w  d   R# VP                  P                  R
4      R8w  d   R# R pV! VP                  R,          4      pV! VP                  R,          4      p \        V4      p\        V4      pM\        RVP                   4      h \        XXR R7      pV P                  WP                   4       VP                  '       g   Q hR#   \         dY   pTP                  '       g   Q hTP
                  '       g   Q hRTP                  9   g   Q hR\        T4      9   g   Q h Rp?R# Rp?ii ; i  \        P                   d2   pTP                  '       d   Q hR\        T4      9   g   Q h Rp?R# Rp?i\         d@    TP                  '       g   Q hTP
                  '       g   Q hRTP                  9   g   Q h R# i ; i  \         do   pTP                  '       d@   TP
                  '       g   Q hRTP                  9   g   Q hR\        T4      9   g   Q h Rp?R# R\        T4      9   g   Q h Rp?R# Rp?i\         d    TP                  '       g   Q h ELi ; i  \         d    TP                  '       d   Q h R# \"         d2   pTP                  '       d   Q hR\        T4      9   g   Q h Rp?R# Rp?ii ; i)XdhCompLowOrderPubliczInvalid Curve25519NUnsupported ECC
XdhJwkCompyr"   ktyOKPcrvX25519c                     V P                  R R4      P                  RR4      p ^\        V 4      ^,          ,
          pV^8w  d   V RV,          ,          p \        P                  ! V 4      pV# -+r   /=replacert   base64	b64decode	input_strpaddingdecoded_bytess   &  r   base64url_decodeATestVectorsX25519Wycheproof.test_verify.<locals>.base64url_decode*  _    %--c37??SI	s9~12a<w.I & 0 0 ;$$r   r2   Incorrect lengthUnknown encodingc                     V # r5   r   r!   s   &r   r#   9TestVectorsX25519Wycheproof.test_verify.<locals>.<lambda>I  rr   r   r8   rs   
XdhAsnComp
XdhPemComp)rE  r   ru   rw   ry   rx   flagsr}   r   rS   r   rv   UnsupportedEccFeaturegetr   r=   r{   r|   	r?   r_   r@   r~   rA   r{  
jwk_publicjwk_privaterC   s	   &&       r   r   'TestVectorsX25519Wycheproof.test_verify  s   ;;)#5bii@
 4BJJ?K[[88 ^^BII6
!nnRZZ8 [[L(bii"))#"**$yy}}U#u,yy}}U#x/zz~~e$0% *"))C.9J*2::c?;K 5jA
7D /==	*5"-/A Q		*888O8U  xxxxzzz!z'288333+s1v555 ,, 888#|(CF222 xxxxzzz!z'288333	D  888:::%:+rxx777/3q6999-Q777  xxxx   	 xxx<x 	2xxx<'3q6111	2s   G' A I 9K 'M; 'I
2%I'II
K"&JKK.KKKM8)#M'M:MM8M82M87M8;OOO&O'&OOc                    V P                    FC  pR VP                  VP                  VP                  3,          V n        V P                  V4       KE  	  R# z)Wycheproof XECDH Verify Test #%d (%s, %s)Nr   r   s   & r   r   #TestVectorsX25519Wycheproof.runTestS  @    ''BCruubjjZ\ZeZeFffDIR  r   r   Nr   r   r   r   re   rM  r[  rg   rk   r   r   r   r   r   s   @r   r@  r@    s/     $D"*5Ob! !r   r@  c                   H   a  ] tR tRt o RtR tR tR tR tR t	R t
R	tV tR
# )TestVectorsX448WycheproofiY  zWycheproof X448 testsc                z    R  pR p\        RVRV,          RV/RV/R7      pV ;P                  V,          un        R# )c                     V R ,          # rC  r   rN   s   &r   rE  9TestVectorsX448Wycheproof.add_tests_hex.<locals>.encoding_  rG  r   c                 &    \        V R ,          4      # rR   rI  rT   s   &r   rS   8TestVectorsX448Wycheproof.add_tests_hex.<locals>.privateb  rK  r   rW   rE  rS   rX   Nr[   r^   rL  s   &&   r   rM  'TestVectorsX448Wycheproof.add_tests_hex]  rO  r   c           
         R  pR pR p\        R	VRV,          RV/RVRV/R7      pV ;P                  V,          un        R# )
c                     V R ,          # rC  r   rN   s   &r   rE  ;TestVectorsX448Wycheproof.add_tests_ascii.<locals>.encodingp  rG  r   c                     V R ,          # rT  r   rT   s   &r   ru   9TestVectorsX448Wycheproof.add_tests_ascii.<locals>.publics  rV  r   c                     V R ,          # rR   r   rT   s   &r   rS   :TestVectorsX448Wycheproof.add_tests_ascii.<locals>.privatev  rY  r   rW   rE  ru   rS   rX   Nr[   r^   rZ  s   &&    r   r[  )TestVectorsX448Wycheproof.add_tests_asciin  r]  r   c                    . V n         R V n        V P                  R4       V P                  R4       V P                  R4       V P                  R4       R # )Nzx448_test.jsonzx448_asn_test.jsonzx448_pem_test.jsonzx448_jwk_test.jsonr_  rf   s   &r   rg   TestVectorsX448Wycheproof.setUp  sL    	+,/01212r   c                    V P                   # r5   rj   rf   s   &r   rk   *TestVectorsX448Wycheproof.shortDescription  rm   r   c                   VP                   R 8X  d.    \        VP                  4      p\        TP                  4      pEMgVP                   R9   dD    \        P                  ! VP                  4      p\        P                  ! VP                  4      pEMVP                   R8X  d   RVP                  9   d   R# R	VP                  9  d   R# R	VP                  9  d   R# VP                  P                  R
4      R8w  d   R# VP                  P                  R4      R8w  d   R# VP                  P                  R4      R8w  d   R# R pV! VP                  R	,          4      pV! VP                  R,          4      p \        V4      p\        V4      pM\        RVP                   4      h \        XXR R7      pV P!                  WP"                  4       VP                  '       g   Q hR#   \         d   pTP                  '       g   Q hTP
                  '       g   Q h\        TP                  4      ^88X  d'   RTP                  9   g   Q hR\        T4      9   g   Q hMR\        T4      9   g   Q h Rp?R# Rp?ii ; i  \        P                   d2   pTP                  '       d   Q hR\        T4      9   g   Q h Rp?R# Rp?i\         dX   pTP                  '       g   Q hTP
                  '       g   Q hRTP                  9   g   RTP                  9   g   Q h Rp?R# Rp?ii ; i  \         d   pTP                  '       d   TP
                  '       g   Q h\        TP                  R	,          4      ^K8X  d8   RTP                  9   g   RTP                  9   g   Q hR\        T4      9   g   Q hMR\        T4      9   g   Q h Rp?R# R\        T4      9   g   Q h Rp?R# Rp?i\         d    TP                  '       g   Q h EL[i ; i  \         d    TP                  '       d   Q h R# \$         d2   pTP                  '       d   Q hR\        T4      9   g   Q h Rp?R# Rp?ii ; i)rd  re  zInvalid Curve448zIncorrect Curve448Nrf  NonCanonicalPublicrg  rh  r"   ri  rj  rk  X448c                     V P                  R R4      P                  RR4      p ^\        V 4      ^,          ,
          pV^8w  d   V RV,          ,          p \        P                  ! V 4      pV# rn  rs  rw  s   &  r   r{  ?TestVectorsX448Wycheproof.test_verify.<locals>.base64url_decode  r}  r   r2   r~  r  c                     V # r5   r   r!   s   &r   r#   7TestVectorsX448Wycheproof.test_verify.<locals>.<lambda>  rr   r   r8   rs   r  )rE  r   ru   rw   ry   rx   rt   r  r}   r   rS   r   rv   r  r  r   r=   r{   r|   r  s	   &&       r   r   %TestVectorsX448Wycheproof.test_verify  sl   ;;)#
3BII>
 2"**=K[[88 ^^BII6
!nnRZZ8 [[L(bii"))#"**$yy}}U#u,yy}}U#v-zz~~e$.% *"))C.9J*2::c?;K 3J?
5kB" /==	*5"-/A Q		*888O8c  xxxxzzz!zryy>R'+rxx777-Q777/3q6999 ,, 888#|(CF222 xxxxzzz!z'28837Krxx7WWW	D  888:::%:299S>*b0/288;3rxx?@  @1SV;;;3s1v===-Q777  xxxx   	 xxx<x 	2xxx<'3q6111	2s   G' A I: 9L# 'P 'I72%I2AI22I7:L &J;;L L 	%L/&LL #P.#OA,OOP)P<PPQ""Q"'Q"0Q"1&QQ"c                    V P                    FC  pR VP                  VP                  VP                  3,          V n        V P                  V4       KE  	  R# r  r   r   s   & r   r   !TestVectorsX448Wycheproof.runTest  r  r   r   Nr  r   s   @r   r  r  Y  s/     "D"*3Vp! !r   r  c                 Z   . pV\        \        4      ,          pV\        4       .,          pV\        \        4      ,          pV\        \        4      ,          pV\        \
        4      ,          pV\        4       .,          pV\        4       .,          pV P                  R 4      pV'       d    V# )
slow_tests)	r   r   rK   r   r   r  r@  r  r  )configtestsr  s   &  r   	get_testsr    s    E	_011E	')**E	_Z((E	_\**E	_Z((E	)+,,E	')**EL)JLr   __main__c                  >    \         P                  ! \        4       4      # r5   )unittest	TestSuiter  r   r   r   suiter     s    !!)+..r   r  )defaultTest)r\   ):reru  r  binasciir   r   Crypto.Util.py3compatr   Crypto.Hashr   Crypto.PublicKeyr   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr	   r
   Crypto.Protocolr   Crypto.Protocol.DHr   r   r   r   r   TestCaser   test_vectors_verify	enumerateidxr_   
isinstancer}   matchresgroupro   rz   r   r%   r@   r'   rA   ziutrB   rD   rI   setattrrK   r   r   r  r@  r  r  r   r  mainr   r   r   <module>r     s   	   ' &    5 R 9 9	(++ 	 ((G(W(02F(02F(.0D(/1E(/1E)*	+ 	1 	1 /1  ,-GC "chh-r2
sYYq\
Z')yy')yy2J --j"$''+K 77L ()+* ","-#/* !:S!@)L
ax#%BS%H-XQ .VF! 1 1 F!R~."" ~.B\,8$$ \,~Q,"" Q,hJ!("3"3 J!ZQ! 1 1 Q!h  $ z/MMg& r   