
    iPw                        S SK r S SKrS SKrS SKJrJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJrJr  S SKJr  S S	KJrJrJrJrJr   " S
 S\R2                  5      r\" SSSS S S S S S.5      =(       d    / r\" \5       H  u  rr\" \\ 5      (       a/  \ RB                  " S\5      r"\"(       d   e\"RG                  S5      r$MC  \RJ                  " \$\RL                  \RN                  S9r(\RJ                  " \$\RR                  S9r*\RV                  r,\(\*\,4S jr-\(\*\,4S jr.\/" \S\-  \-5        \S:X  d  M  \/" \S\-  \.5        M      " S S\R2                  5      r0 " S S \R2                  5      r1 " S! S"\R2                  5      r2 " S# S$\R2                  5      r3 " S% S&\R2                  5      r4 " S' S(\R2                  5      r50 4S) jr6\7S*:X  a  S+ r8\Rr                  " S,S-9  gg).    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                       \ rS rSrSrg)FIPS_ECDH_Tests_KAT    N)__name__
__module____qualname____firstlineno____static_attributes__r       ]/var/www/html/trading/venv/lib/python3.13/site-packages/Crypto/SelfTest/Protocol/test_ecdh.pyr   r      s    r   r   )ProtocolzKAS_ECC_CDH_PrimitiveTest.txtz-ECC CDH Primitive (SP800-56A Section 5.7.1.2)c                     [        U S5      $ N   intxs    r   <lambda>r$      
    C2Jr   c                     [        U S5      $ r   r    r"   s    r   r$   r$      r%   r   c                     [        U S5      $ r   r    r"   s    r   r$   r$      s
    #a*r   c                     [        U S5      $ r   r    r"   s    r   r$   r$       
    3q":r   c                     [        U S5      $ r   r    r"   s    r   r$   r$   !   r)   r   )qcavsxqcavsydiutqiutxqiutyz\[([A-Za-z0-9-]+)\]   )curvepoint_xpoint_yr1   dc                 >    [        UUS S9nU R                  XC5        g )Nc                     U $ Nr   r"   s    r   r$   ecdh_test.<locals>.<lambda>=       ar   
static_pubstatic_privkdfr   assertEqualself
public_keyprivate_keyexp_responsezs        r   	ecdh_testrG   6   '     %'! 	)r   c                 >    [        UUS S9nU R                  XC5        g )Nc                     U $ r8   r   r"   s    r   r$   ecdh_test_rev.<locals>.<lambda>G   r:   r   r;   r?   rA   s        r   ecdh_test_revrL   @   rH   r   ztest_verify_positive_%dztest_verify_positive_rev_%dc                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
TestVectorsECDHWycheproofO   zWycheproof ECDH testsc                 b    S nS n[        SUSU-  SU0SU0S9nU =R                  U-  sl        g )Nc                     U S   $ )Nr1   r   gs    r   r1   2TestVectorsECDHWycheproof.add_tests.<locals>.curveU   s    W:r   c                      [        U S   S5      $ )Nprivater   r    us    r   rV   4TestVectorsECDHWycheproof.add_tests.<locals>.privateX   s    q|R((r   r   
wycheproofWycheproof ECDH (%s)r1   rV   	group_tagunit_tagr
   tv)rB   filenamer1   rV   results        r   	add_tests#TestVectorsECDHWycheproof.add_testsS   sI    		) ..H.6.D08/99@%8H8A77K0 	6r   c                 0   / U l         S U l        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        g )	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)ra   descrd   rB   s    r   setUpTestVectorsECDHWycheproof.setUpd   sx    	9:9:9:9:12121212r   c                     U R                   $ r8   rg   rh   s    r   shortDescription*TestVectorsECDHWycheproof.shortDescriptionr       yyr   c                    [        UR                  5      S:X  a  g  [        UR                  S   5      S:X  a*  [        R                  " UR                  UR
                  S9nO![        R                  " UR                  5      n [        R                  " UR
                  UR                  S9n [        UUS S9nU R                  XAR                  5        UR                  (       d   eg ! [         a'    UR                  (       d  UR                  (       a   e g f = f! [         a    UR                  (       a   e g [         a.  nUR                  (       a   eS[        U5      ;   d   e S nAg S nAff = f)Nr      )
curve_namer4   c                     U $ r8   r   r"   s    r   r$   7TestVectorsECDHWycheproof.test_verify.<locals>.<lambda>       Ar   r;   incompatible curve)lenpublicr   r   
import_keyr1   
ValueErrorwarningvalid	constructrV   r   r@   shared	TypeErrorstr)rB   ra   rC   rD   rF   es         r   test_verify%TestVectorsECDHWycheproof.test_verifyu   s   ryy>Q	BIIaL!Q& ^^BII"((K
 ^^BII6

 mm"((bjjA	*5"-/A Q		*88O8#  	::RXX--	  	 xx<x 	2xx<'3q6111	2s6   AC( " C( -D (.DDE2;	E2$E--E2c                     U R                    H?  nSUR                  UR                  UR                  4-  U l        U R                  U5        MA     g )Nz(Wycheproof ECDH Verify Test #%d (%s, %s)ra   idcommentrb   rg   r   rB   ra   s     r   runTest!TestVectorsECDHWycheproof.runTest   s@    ''BBbeeRZZY[YdYdEeeDIR  r   rg   ra   N)r   r   r   r   rg   rd   ri   rm   r   r   r   r   r   r   rN   rN   O   s     "D"3:!r   rN   c                      \ rS rSr\R
                  " S5      r\R
                  " S5      R                  5       r\R
                  " S5      r	\R
                  " S5      r
S rS rS rS	 rS
 rS rS rS rS rS rS rS rSrg)
ECDH_Tests   z-----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                 ~    S n[        UU R                  U R                  S9nU R                  [	        U5      S5        g )Nc                 J    [         R                  " U 5      R                  5       $ r8   r   newdigestr"   s    r   r$   #ECDH_Tests.test_1.<locals>.<lambda>       

1,,.r   )r>   r<   r=   s@   3960a1101d1193cbaffef4cc7202ebff783c22c6d2e0d5d530ffc66dc197ea9c)r   r<   r=   r@   r   rB   r>   rF   s      r   test_1ECDH_Tests.test_1   s>    .?? ,,. 	\	^r   c                     S n[        UU R                  U R                  U R                  U R                  S9nU R                  [        U5      S5        g )Nc                 J    [         R                  " U 5      R                  5       $ r8   r   r"   s    r   r$   #ECDH_Tests.test_2.<locals>.<lambda>   r   r   )r>   r<   r=   eph_pubeph_privs@   7447b733d40c8fab2c633b3dc61e4a8c742f3a6af7e16fb0cc486f5bdb5d6ba2)r   r<   r=   r   r   r@   r   r   s      r   test_2ECDH_Tests.test_2   sL    .?? ,,( 	\	^r   c                     S n[        UU R                  U R                  U R                  S9nU R	                  [        U5      S5        g )Nc                 J    [         R                  " U 5      R                  5       $ r8   r   r"   s    r   r$   #ECDH_Tests.test_3.<locals>.<lambda>   r   r   )r>   r<   r=   r   s@   9e977ae45f33bf67f285d064d83e6632bcafe3a7d33fe571233bab4794ace759)r   r<   r=   r   r@   r   r   s      r   test_3ECDH_Tests.test_3   sE    .?? ,,	(
 	\	^r   c                     S n[        UU R                  U R                  U R                  S9nU R	                  [        U5      S5        g )Nc                 J    [         R                  " U 5      R                  5       $ r8   r   r"   s    r   r$   #ECDH_Tests.test_4.<locals>.<lambda>   r   r   )r>   r<   r=   r   s@   c9532df6aa7e9dbe5fe85da31ee25ff19c179c88691ec4b8328cc2036dcdadf2)r   r<   r=   r   r@   r   r   s      r   test_4ECDH_Tests.test_4   sE    .?? ,,	&
 	\	^r   c           	      ~    S nU R                  [        [        UU R                  U R                  U R
                  S9  g )Nc                 J    [         R                  " U 5      R                  5       $ r8   r   r"   s    r   r$   #ECDH_Tests.test_5.<locals>.<lambda>   r   r   )r>   r=   r   r   )assertRaisesrz   r   r=   r   r   rB   r>   s     r   test_5ECDH_Tests.test_5   s9    .* ,, 	 	(r   c           	      ~    S nU R                  [        [        UU R                  U R                  U R
                  S9  g )Nc                 J    [         R                  " U 5      R                  5       $ r8   r   r"   s    r   r$   #ECDH_Tests.test_6.<locals>.<lambda>   r   r   )r>   r<   r   r   )r   rz   r   r<   r   r   r   s     r   test_6ECDH_Tests.test_6   s7    .*?? 	 	(r   c                 ~    S n[        UU R                  U R                  S9nU R                  [	        U5      S5        g )Nc                 J    [         R                  " U 5      R                  5       $ r8   r   r"   s    r   r$   #ECDH_Tests.test_7.<locals>.<lambda>   r   r   )r>   r   r   s@   feb257ebe063078b1391aac07913283d7b642ad7df61b46dfc9cd6f420bb896a)r   r   r   r@   r   r   s      r   test_7ECDH_Tests.test_7   s<    .( 	\	^r   c                 ~    S n[        UU R                  U R                  S9nU R                  [	        U5      S5        g )Nc                 J    [         R                  " U 5      R                  5       $ r8   r   r"   s    r   r$   #ECDH_Tests.test_8.<locals>.<lambda>   r   r   )r>   r=   r   s@   ee4dc995117476ed57fd17ff0ed44e9f0466d46b929443bc0db9380317583b04)r   r=   r   r@   r   r   s      r   test_8ECDH_Tests.test_8   s>    . ,,& 	\	^r   c                 ~    S n[        UU R                  U R                  S9nU R                  [	        U5      S5        g )Nc                 J    [         R                  " U 5      R                  5       $ r8   r   r"   s    r   r$   #ECDH_Tests.test_9.<locals>.<lambda>   r   r   )r>   r<   r   s@   2351cc2014f7c40468fa072b5d30f706eeaeef7507311cd8e59bab3b43f03c51)r   r<   r   r@   r   r   s      r   test_9ECDH_Tests.test_9   s<    .??( 	\	^r   c                 h    S nU R                  [        [        UU R                  U R                  S9  g )Nc                 J    [         R                  " U 5      R                  5       $ r8   r   r"   s    r   r$   $ECDH_Tests.test_10.<locals>.<lambda>  r   r   )r>   r<   r   )r   rz   r   r<   r   r   s     r   test_10ECDH_Tests.test_10   s0    .*??	 	 	&r   c                 h    S nU R                  [        [        UU R                  U R                  S9  g )Nc                 J    [         R                  " U 5      R                  5       $ r8   r   r"   s    r   r$   $ECDH_Tests.test_11.<locals>.<lambda>
  r   r   )r>   r=   r   )r   rz   r   r=   r   r   s     r   test_11ECDH_Tests.test_11  s2    .* ,,	 	 	(r   c                 `    U R                  [        [        U R                  U R                  S9  g )N)r<   r=   )r   rz   r   r<   r=   rh   s    r   test_12ECDH_Tests.test_12  s*    *?? ,, 	 	.r   r   N)r   r   r   r   r   ry   r=   rC   r<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    ..  "X  YK  !W  X  c  c  eJ~~  U  VHnn  T  UG^
^	^	^((^^^&(.r   r   c                   ,    \ rS rSrS rS rS rS rSrg)X25519_Testsi  c                     SnU Hk  u  p#n[         R                  " [        U5      5      n[         R                  " [        U5      5      n[	        UUS S9nU R                  U[        U5      5        Mm     g )N))@a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4@e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c@c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552)@4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0d@e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493@95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957c                     U $ r8   r   r"   s    r   r$   -X25519_Tests.test_rfc7748_1.<locals>.<lambda>*      r   r;   r   r   r   r   r   r@   rB   tvstv1tv2tv3priv_keypub_keyrc   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                    [        S5      n[        R                  " U5      n[        R                  " U5      n[	        UUS S9nU R                  U[        S5      5        [        S5       H=  n[        R                  " U5      n[        R                  " U5      nUn[	        UUS S9nM?     U R                  U[        S5      5        g )N@0900000000000000000000000000000000000000000000000000000000000000c                     U $ r8   r   r"   s    r   r$   -X25519_Tests.test_rfc7748_2.<locals>.<lambda>4      Qr   r;   @422c8e7a6227d7bca1350b3e2bb7279f7897b87bb6854b783c60e80311ae3079  c                     U $ r8   r   r"   s    r   r$   r   @  r   r   @684cf59ba83309552800ef566f2f4d3c1c3887c49360e3875f2eb94d99532c51)r   r   r   r   r   r@   rangerB   kr   r   rc   _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                    SnSnSnSnSn[         R                  " [        U5      5      n[         R                  " [        U5      5      n[         R                  " [        U5      5      n[         R                  " [        U5      5      n	[        U5      n
[	        UUS S9n[	        U	US S9nU R                  X5        U R                  X5        g )	N@77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a@8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a@5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb@de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f@4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742c                     U $ r8   r   r"   s    r   r$   -X25519_Tests.test_rfc7748_3.<locals>.<lambda>V      ar   r;   c                     U $ r8   r   r"   s    r   r$   r   Y  r   r   r   rB   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                 v    SnU H1  nU R                  [        [        R                  [	        U5      5        M3     g )N)@0000000000000000000000000000000000000000000000000000000000000000@0100000000000000000000000000000000000000000000000000000000000000@e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800@5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157@ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f@edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f@eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f)r   rz   r   r   r   rB   	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   r   r   r     s    5$
4*,,r   r   c                   ,    \ rS rSrS rS rS rS rSrg)
X448_Testsix  c                     SnU Hk  u  p#n[         R                  " [        U5      5      n[         R                  " [        U5      5      n[	        UUS S9nU R                  U[        U5      5        Mm     g )N))p3d262fddf9ec8e88495266fea19a34d28882acef045104d0d1aae121700a779c984c24f8cdd78fbff44943eba368f54b29259a4f1c600ad3p06fce640fa3487bfda5f6cf2d5263f8aad88334cbd07437f020f08f9814dc031ddbdc38c19c6da2583fa5429db94ada18aa7a7fb4ef8a086pce3e4ff95a60dc6697da1db1d85e6afbdf79b50a2412d7546d5f239fe14fbaadeb445fc66a01b0779d98223961111e21766282f73dd96b6f)p203d494428b8399352665ddca42f9de8fef600908e0d461cb021f8c538345dd77c3e4806e25f46d3315c44e0a5b4371282dd2c8d5be3095fp0fbcc2f993cd56d3305b0b7d9e55d4c1a8fb5dbb52f8e9a1e9b6201b165d015894e56c4d3570bee52fe205e28a78b91cdfbde71ce8d157dbp884a02576239ff7a2f2f63b2db6a9ff37047ac13568e1e30fe63c4a7ad1b3ee3a5700df34321d62077e63633c575c1c954514e99da7c179dc                     U $ r8   r   r"   s    r   r$   +X448_Tests.test_rfc7748_1.<locals>.<lambda>  r   r   r;   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                    [        S5      n[        R                  " U5      n[        R                  " U5      n[	        UUS S9nU R                  U[        S5      5        [        S5       H=  n[        R                  " U5      n[        R                  " U5      nUn[	        UUS S9nM?     U R                  U[        S5      5        g )Np0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c                     U $ r8   r   r"   s    r   r$   +X448_Tests.test_rfc7748_2.<locals>.<lambda>  r   r   r;   p3f482c8a9f19b01e6c46ee9711d9dc14fd4bf67af30765c2ae2b846a4d23a8cd0db897086239492caf350b51f833868b9bc2b3bca9cf4113r   c                     U $ r8   r   r"   s    r   r$   r*    r   r   paa3b4749d55b9daf1e5b00288826c467274ce3ebbdd5c17b975e09d4af6c67cf10d087202db88286e2b79fceea3ec353ef54faa26e219f38)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                    SnSnSnSnSn[         R                  " [        U5      5      n[         R                  " [        U5      5      n[         R                  " [        U5      5      n[         R                  " [        U5      5      n	[        U5      n
[	        UUS S9n[	        U	US S9nU R                  X5        U R                  X5        g )	Np9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726bp9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0p1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992dp3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609p07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879dc                     U $ r8   r   r"   s    r   r$   +X448_Tests.test_rfc7748_3.<locals>.<lambda>  r   r   r;   c                     U $ r8   r   r"   s    r   r$   r6    r   r   r%  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                 v    SnU H1  nU R                  [        [        R                  [	        U5      5        M3     g )N)p0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000p0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000pfefffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffpfffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffp00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r   rz   r   r   r   r  s      r   r  X448_Tests.test_weak  s5    
	 Aj 77'l, r   r   Nr  r   r   r   r  r  x  s    5$
4*,,r   r  c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)TestVectorsX25519Wycheproofi  zWycheproof X25519 testsc                 b    S nS n[        SUSU-  SU0SU0S9nU =R                  U-  sl        g )Nc                     U S   $ Ntyper   rR   s    r   encoding;TestVectorsX25519Wycheproof.add_tests_hex.<locals>.encoding      V9r   c                     [        U S   5      $ NrV   r   rW   s    r   rV   :TestVectorsX25519Wycheproof.add_tests_hex.<locals>.private      Qy\**r   rZ   r\   rF  rV   r]   r`   rB   rb   rF  rV   rc   s        r   add_tests_hex)TestVectorsX25519Wycheproof.add_tests_hex  I    		+ ..H.6.D08/99CX8N8A77K0 	6r   c           	      j    S nS nS n[        SUSU-  SU0UUS.S9nU =R                  U-  sl        g )	Nc                     U S   $ rD  r   rR   s    r   rF  =TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.encoding  rH  r   c                     U S   $ Nrx   r   rW   s    r   rx   ;TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.public      X;r   c                     U S   $ rJ  r   rW   s    r   rV   <TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.private      Y<r   rZ   r\   rF  rx   rV   r]   r`   rB   rb   rF  rx   rV   rc   s         r   add_tests_ascii+TestVectorsX25519Wycheproof.add_tests_ascii  R    			  ..H.6.D08/99CX8NBHCJ8L0 	6r   c                     / U l         S U l        U R                  S5        U R                  S5        U R                  S5        U R                  S5        g )Nzx25519_test.jsonzx25519_asn_test.jsonzx25519_pem_test.jsonzx25519_jwk_test.jsonra   rg   rO  r^  rh   s    r   ri   !TestVectorsX25519Wycheproof.setUp  sL    	-.123434r   c                     U R                   $ r8   rl   rh   s    r   rm   ,TestVectorsX25519Wycheproof.shortDescription  ro   r   c                 <   UR                   S:X  a-   [        UR                  5      n[        UR                  5      nGOPUR                   S;   aB   [        R                  " UR                  5      n[        R                  " UR                  5      nOUR                   S:X  a  SUR                  ;   a  g SUR                  ;  a  g SUR                  ;  a  g UR                  R                  S	5      S
:w  a  g UR                  R                  S5      S:w  a  g UR                  R                  S5      S:w  a  g S nU" UR                  S   5      nU" UR                  S   5      n [        U5      n[        U5      nO[        SUR                   5      e [        WWS S9nU R                  XR                   5        UR                  (       d   eg ! [         aS  nUR                  (       d   eUR
                  (       d   eSUR                  ;   d   eS[        U5      ;   d   e S nAg S nAff = f! [        R                   a.  nUR                  (       a   eS[        U5      ;   d   e S nAg S nAf[         a;    UR                  (       d   eUR
                  (       d   eSUR                  ;   d   e g f = f! [         ag  nUR                  (       a;  UR
                  (       d   eSUR                  ;   d   eS[        U5      ;   d   e S nAg S[        U5      ;   d   e S nAg S nAf[         a    UR                  (       d   e GNf = f! [         a    UR                  (       a   e g ["         a.  nUR                  (       a   eS[        U5      ;   d   e S nAg S nAff = f)NXdhCompLowOrderPubliczInvalid Curve25519
XdhAsnComp
XdhPemCompUnsupported ECC
XdhJwkCompyr#   ktyOKPcrvX25519c                     U R                  SS5      R                  SS5      n S[        U 5      S-  -
  nUS:w  a  U SU-  -  n [        R                  " U 5      nU$ N-+r   /rq   =replacerw   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   r5   Incorrect lengthUnknown encodingc                     U $ r8   r   r"   s    r   r$   9TestVectorsX25519Wycheproof.test_verify.<locals>.<lambda>I  ru   r   r;   rv   )rF  r   rx   rz   r|   r{   flagsr   r   rV   r   ry   UnsupportedEccFeaturegetr   r@   r~   r   	rB   ra   rC   r   rD   r  
jwk_publicjwk_privaterF   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		*88O8U  xxxzz!z'288333+s1v555 ,, 88#|(CF222 xxxzz!z'288333	D  88::%:+rxx777/3q6999-Q777  xxx   	 xx<x 	2xx<'3q6111	2s{   G
 A H* !J2 M 

H'A	H""H'*J/>$I''AJ/.J/2
M<ALL MMN$	N-$NNc                     U R                    H?  nSUR                  UR                  UR                  4-  U l        U R                  U5        MA     g Nz)Wycheproof XECDH Verify Test #%d (%s, %s)r   r   s     r   r   #TestVectorsX25519Wycheproof.runTestS  @    ''BCruubjjZ\ZeZeFffDIR  r   r   Nr   r   r   r   rg   rO  r^  ri   rm   r   r   r   r   r   r   rA  rA    s'    $D"*5Ob!r   rA  c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)TestVectorsX448WycheproofiY  zWycheproof X448 testsc                 b    S nS n[        SUSU-  SU0SU0S9nU =R                  U-  sl        g )Nc                     U S   $ rD  r   rR   s    r   rF  9TestVectorsX448Wycheproof.add_tests_hex.<locals>.encoding_  rH  r   c                     [        U S   5      $ rJ  rK  rW   s    r   rV   8TestVectorsX448Wycheproof.add_tests_hex.<locals>.privateb  rM  r   rZ   r\   rF  rV   r]   r`   rN  s        r   rO  'TestVectorsX448Wycheproof.add_tests_hex]  rQ  r   c           	      j    S nS nS n[        SUSU-  SU0UUS.S9nU =R                  U-  sl        g )	Nc                     U S   $ rD  r   rR   s    r   rF  ;TestVectorsX448Wycheproof.add_tests_ascii.<locals>.encodingp  rH  r   c                     U S   $ rV  r   rW   s    r   rx   9TestVectorsX448Wycheproof.add_tests_ascii.<locals>.publics  rX  r   c                     U S   $ rJ  r   rW   s    r   rV   :TestVectorsX448Wycheproof.add_tests_ascii.<locals>.privatev  r[  r   rZ   r\   rF  r\  r]   r`   r]  s         r   r^  )TestVectorsX448Wycheproof.add_tests_asciin  r`  r   c                     / U l         S U l        U R                  S5        U R                  S5        U R                  S5        U R                  S5        g )Nzx448_test.jsonzx448_asn_test.jsonzx448_pem_test.jsonzx448_jwk_test.jsonrb  rh   s    r   ri   TestVectorsX448Wycheproof.setUp  sL    	+,/01212r   c                     U R                   $ r8   rl   rh   s    r   rm   *TestVectorsX448Wycheproof.shortDescription  ro   r   c                 <   UR                   S:X  a-   [        UR                  5      n[        UR                  5      nGOPUR                   S;   aB   [        R                  " UR                  5      n[        R                  " UR                  5      nOUR                   S	:X  a  S
UR                  ;   a  g SUR                  ;  a  g SUR                  ;  a  g UR                  R                  S5      S:w  a  g UR                  R                  S5      S:w  a  g UR                  R                  S5      S:w  a  g S nU" UR                  S   5      nU" UR                  S   5      n [        U5      n[        U5      nO[        SUR                   5      e [        WWS S9nU R!                  XR"                  5        UR                  (       d   eg ! [         a~  nUR                  (       d   eUR
                  (       d   e[        UR                  5      S:X  a$  SUR                  ;   d   eS[        U5      ;   d   eOS[        U5      ;   d   e S nAg S nAff = f! [        R                   a.  nUR                  (       a   eS[        U5      ;   d   e S nAg S nAf[         aR  nUR                  (       d   eUR
                  (       d   eSUR                  ;   d  SUR                  ;   d   e S nAg S nAff = f! [         a  nUR                  (       ay  UR
                  (       d   e[        UR                  S   5      S:X  a4  SUR                  ;   d  SUR                  ;   d   eS[        U5      ;   d   eOS[        U5      ;   d   e S nAg S[        U5      ;   d   e S nAg S nAf[         a    UR                  (       d   e GN3f = f! [         a    UR                  (       a   e g [$         a.  nUR                  (       a   eS[        U5      ;   d   e S nAg S nAff = f)Nrg  8   rh  zInvalid Curve448zIncorrect Curve448ri  rl  NonCanonicalPublicrm  rn  r#   ro  rp  rq  X448c                     U R                  SS5      R                  SS5      n S[        U 5      S-  -
  nUS:w  a  U SU-  -  n [        R                  " U 5      nU$ rt  ry  r}  s      r   r  ?TestVectorsX448Wycheproof.test_verify.<locals>.base64url_decode  r  r   r5   K   r  r  c                     U $ r8   r   r"   s    r   r$   7TestVectorsX448Wycheproof.test_verify.<locals>.<lambda>  ru   r   r;   rv   )rF  r   rx   rz   r|   r{   rw   r  r   r   rV   r   ry   r  r  r   r@   r~   r   r  s	            r   r   %TestVectorsX448Wycheproof.test_verify  sV   ;;)#
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		*88O8c  xxxzz!zryy>R'+rxx777-Q777/3q6999 ,, 88#|(CF222 xxxzz!z'28837Krxx7WWW	D  88::%:299S>*b0/288;3rxx?@  @1SV;;;3s1v===-Q777  xxx   	 xx<x 	2xx<'3q6111	2s   G
 A I !K4 O 

IA4IIK1)$JK1AK,,K14
O>BNN OOP$	P-$PPc                     U R                    H?  nSUR                  UR                  UR                  4-  U l        U R                  U5        MA     g r  r   r   s     r   r   !TestVectorsX448Wycheproof.runTest  r  r   r   Nr  r   r   r   r  r  Y  s'    "D"*3Vp!r   r  c                     / nU[        [        5      -  nU[        5       /-  nU[        [        5      -  nU[        [        5      -  nU[        [
        5      -  nU[        5       /-  nU[        5       /-  nU R                  S5      nU(       a   U$ )N
slow_tests)	r   r   rN   r   r   r  rA  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                  >    [         R                  " [        5       5      $ r8   )unittest	TestSuiter  r   r   r   suiter     s    !!)+..r   r  )defaultTest):rer{  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idxra   
isinstancer   matchresgrouprr   r}   r+   r,   rC   r-   rD   ziutrE   rG   rL   setattrrN   r   r   r  rA  r  r  r   r  mainr   r   r   <module>r     s   	   ' &    5 R 9 9	(++ 	 ((G(W2F2F0D1E1E)*	+ 	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   