
    ,hPw                        d dl Z d dlZd dlZd dlmZm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 d dlmZ d d	lmZmZmZmZmZ  G d
 dej2                        Z edddd d d d d d      xs g Z ee      D ]  \  ZZ eee       r) e jB                  de      Z"e"sJ e"jG                  d      Z$8 ejJ                  e$ejL                  ejN                        Z( ejJ                  e$ejR                        Z*ejV                  Z,e(e*e,fdZ-e(e*e,fdZ. e/edez  e-       edk(  s e/edez  e.         G d dej2                        Z0 G d d ej2                        Z1 G d! d"ej2                        Z2 G d# d$ej2                        Z3 G d% d&ej2                        Z4 G d' d(ej2                        Z5i fd)Z6e7d*k(  rd+ Z8 ejr                  d,-       yy).    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                       e Zd Zy)FIPS_ECDH_Tests_KATN)__name__
__module____qualname__     d/var/www/html/Resume-Scraper/venv/lib/python3.12/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                     t        | d      S N   intxs    r   <lambda>r!          C2J r   c                     t        | d      S r   r   r   s    r   r!   r!      r"   r   c                     t        | d      S r   r   r   s    r   r!   r!      s    #a* r   c                     t        | d      S r   r   r   s    r   r!   r!           3q": r   c                     t        | d      S r   r   r   s    r   r!   r!   !   r&   r   )qcavsxqcavsydiutqiutxqiutyz\[([A-Za-z0-9-]+)\]   )curvepoint_xpoint_yr.   dc                 F    t        ||d       }| j                  ||       y )Nc                     | S Nr   r   s    r   r!   zecdh_test.<locals>.<lambda>=       a r   
static_pubstatic_privkdfr   assertEqualself
public_keyprivate_keyexp_responsezs        r   	ecdh_testrC   6   )     %'! 	L)r   c                 F    t        ||d       }| j                  ||       y )Nc                     | S r5   r   r   s    r   r!   zecdh_test_rev.<locals>.<lambda>G   r6   r   r7   r;   r=   s        r   ecdh_test_revrG   @   rD   r   ztest_verify_positive_%dztest_verify_positive_rev_%dc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestVectorsECDHWycheproofzWycheproof ECDH testsc                 h    d }d }t        d|d|z  d|id|i      }| xj                  |z  c_        y )Nc                     | d   S )Nr.   r   gs    r   r.   z2TestVectorsECDHWycheproof.add_tests.<locals>.curveU   s    W:r   c                      t        | d   d      S )Nprivater   r   us    r   rO   z4TestVectorsECDHWycheproof.add_tests.<locals>.privateX   s    q|R((r   r   
wycheproofWycheproof ECDH (%s)r.   rO   	group_tagunit_tagr
   tv)r>   filenamer.   rO   results        r   	add_testsz#TestVectorsECDHWycheproof.add_testsS   sI    		) ..H.6.D08/99@%8H8A77K0 	6r   c                 0   g | _         d | _        | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       y )	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)rY   descr\   r>   s    r   setUpzTestVectorsECDHWycheproof.setUpd   sx    	9:9:9:9:12121212r   c                     | j                   S r5   r^   r_   s    r   shortDescriptionz*TestVectorsECDHWycheproof.shortDescriptionr       yyr   c                    t        |j                        dk(  ry 	 t        |j                  d         dk(  r,t        j                  |j                  |j
                        }nt        j                  |j                        }t        j                  |j
                  |j                        }	 t        ||d       }| j                  ||j                         |j                  sJ y # t        $ r |j                  s|j                  rJ Y y w xY w# t        $ r |j                  rJ Y y t        $ r'}|j                  rJ dt        |      v sJ Y d }~y d }~ww xY w)Nr      )
curve_namer1   c                     | S r5   r   r   s    r   r!   z7TestVectorsECDHWycheproof.test_verify.<locals>.<lambda>       A r   r7   incompatible curve)lenpublicr   r   
import_keyr.   
ValueErrorwarningvalid	constructrO   r   r<   shared	TypeErrorstr)r>   rY   r?   r@   rB   es         r   test_verifyz%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	2s0   A&C' -D '#DDE)E1EEc                     | j                   D ]>  }d|j                  |j                  |j                  fz  | _        | j                  |       @ y )Nz(Wycheproof ECDH Verify Test #%d (%s, %s)rY   idcommentrZ   r^   rv   r>   rY   s     r   runTestz!TestVectorsECDHWycheproof.runTest   sE    '' 	!BBbeeRZZY[YdYdEeeDIR 	!r   N)	r   r   r   r^   r\   r`   rc   rv   r|   r   r   r   rI   rI   O   s     "D"3:!r   rI   c                       e Zd Z ej                  d      Z ej                  d      j                         Z ej                  d      Z ej                  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 Zy)
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                     d }t        || j                  | j                        }| j                  t	        |      d       y )Nc                 H    t        j                  |       j                         S r5   r   newdigestr   s    r   r!   z#ECDH_Tests.test_1.<locals>.<lambda>       

1,,. r   )r:   r8   r9   s@   3960a1101d1193cbaffef4cc7202ebff783c22c6d2e0d5d530ffc66dc197ea9c)r   r8   r9   r<   r   r>   r:   rB   s      r   test_1zECDH_Tests.test_1   s>    .?? ,,. 	\	^r   c                     d }t        || j                  | j                  | j                  | j                        }| j                  t        |      d       y )Nc                 H    t        j                  |       j                         S r5   r   r   s    r   r!   z#ECDH_Tests.test_2.<locals>.<lambda>   r   r   )r:   r8   r9   eph_pubeph_privs@   7447b733d40c8fab2c633b3dc61e4a8c742f3a6af7e16fb0cc486f5bdb5d6ba2)r   r8   r9   r   r   r<   r   r   s      r   test_2zECDH_Tests.test_2   sL    .?? ,,( 	\	^r   c                     d }t        || j                  | j                  | j                        }| j	                  t        |      d       y )Nc                 H    t        j                  |       j                         S r5   r   r   s    r   r!   z#ECDH_Tests.test_3.<locals>.<lambda>   r   r   )r:   r8   r9   r   s@   9e977ae45f33bf67f285d064d83e6632bcafe3a7d33fe571233bab4794ace759)r   r8   r9   r   r<   r   r   s      r   test_3zECDH_Tests.test_3   sE    .?? ,,	(
 	\	^r   c                     d }t        || j                  | j                  | j                        }| j	                  t        |      d       y )Nc                 H    t        j                  |       j                         S r5   r   r   s    r   r!   z#ECDH_Tests.test_4.<locals>.<lambda>   r   r   )r:   r8   r9   r   s@   c9532df6aa7e9dbe5fe85da31ee25ff19c179c88691ec4b8328cc2036dcdadf2)r   r8   r9   r   r<   r   r   s      r   test_4zECDH_Tests.test_4   sE    .?? ,,	&
 	\	^r   c                     d }| j                  t        t        || j                  | j                  | j
                         y )Nc                 H    t        j                  |       j                         S r5   r   r   s    r   r!   z#ECDH_Tests.test_5.<locals>.<lambda>   r   r   )r:   r9   r   r   )assertRaisesrn   r   r9   r   r   r>   r:   s     r   test_5zECDH_Tests.test_5   s9    .* ,, 	 	(r   c                     d }| j                  t        t        || j                  | j                  | j
                         y )Nc                 H    t        j                  |       j                         S r5   r   r   s    r   r!   z#ECDH_Tests.test_6.<locals>.<lambda>   r   r   )r:   r8   r   r   )r   rn   r   r8   r   r   r   s     r   test_6zECDH_Tests.test_6   s7    .*?? 	 	(r   c                     d }t        || j                  | j                        }| j                  t	        |      d       y )Nc                 H    t        j                  |       j                         S r5   r   r   s    r   r!   z#ECDH_Tests.test_7.<locals>.<lambda>   r   r   )r:   r   r   s@   feb257ebe063078b1391aac07913283d7b642ad7df61b46dfc9cd6f420bb896a)r   r   r   r<   r   r   s      r   test_7zECDH_Tests.test_7   s<    .( 	\	^r   c                     d }t        || j                  | j                        }| j                  t	        |      d       y )Nc                 H    t        j                  |       j                         S r5   r   r   s    r   r!   z#ECDH_Tests.test_8.<locals>.<lambda>   r   r   )r:   r9   r   s@   ee4dc995117476ed57fd17ff0ed44e9f0466d46b929443bc0db9380317583b04)r   r9   r   r<   r   r   s      r   test_8zECDH_Tests.test_8   s>    . ,,& 	\	^r   c                     d }t        || j                  | j                        }| j                  t	        |      d       y )Nc                 H    t        j                  |       j                         S r5   r   r   s    r   r!   z#ECDH_Tests.test_9.<locals>.<lambda>   r   r   )r:   r8   r   s@   2351cc2014f7c40468fa072b5d30f706eeaeef7507311cd8e59bab3b43f03c51)r   r8   r   r<   r   r   s      r   test_9zECDH_Tests.test_9   s<    .??( 	\	^r   c                 n    d }| j                  t        t        || j                  | j                         y )Nc                 H    t        j                  |       j                         S r5   r   r   s    r   r!   z$ECDH_Tests.test_10.<locals>.<lambda>  r   r   )r:   r8   r   )r   rn   r   r8   r   r   s     r   test_10zECDH_Tests.test_10   s0    .*??	 	 	&r   c                 n    d }| j                  t        t        || j                  | j                         y )Nc                 H    t        j                  |       j                         S r5   r   r   s    r   r!   z$ECDH_Tests.test_11.<locals>.<lambda>
  r   r   )r:   r9   r   )r   rn   r   r9   r   r   s     r   test_11zECDH_Tests.test_11  s2    .* ,,	 	 	(r   c                 f    | j                  t        t        | j                  | j                         y )N)r8   r9   )r   rn   r   r8   r9   r_   s    r   test_12zECDH_Tests.test_12  s*    *?? ,, 	 	.r   N)r   r   r   r   rm   r9   r?   r8   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s~~  U  VHcnn  T  UG^
^	^	^((^^^&(.r   r~   c                   $    e Zd Zd Zd Zd Zd Zy)X25519_Testsc                     d}|D ]l  \  }}}t        j                  t        |            }t        j                  t        |            }t	        ||d       }| j                  |t        |             n y )N))@a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4@e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c@c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552)@4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0d@e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493@95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957c                     | S r5   r   r   s    r   r!   z-X25519_Tests.test_rfc7748_1.<locals>.<lambda>*       r   r7   r   r   r   r   r   r<   r>   tvstv1tv2tv3priv_keypub_keyr[   s           r   test_rfc7748_1zX25519_Tests.test_rfc7748_1  sp    
 ! 	5MCc33IcNCH11)C.AG"g/7'24F VYs^4	5r   c                    t        d      }t        j                  |      }t        j                  |      }t	        ||d       }| j                  |t        d             t        d      D ]=  }t        j                  |      }t        j                  |      }|}t	        ||d       }? | j                  |t        d             y )N@0900000000000000000000000000000000000000000000000000000000000000c                     | S r5   r   r   s    r   r!   z-X25519_Tests.test_rfc7748_2.<locals>.<lambda>4      Q r   r7   @422c8e7a6227d7bca1350b3e2bb7279f7897b87bb6854b783c60e80311ae3079  c                     | S r5   r   r   s    r   r!   z-X25519_Tests.test_rfc7748_2.<locals>.<lambda>@  r   r   @684cf59ba83309552800ef566f2f4d3c1c3887c49360e3875f2eb94d99532c51)r   r   r   r   r   r<   ranger>   kr   r   r[   _s         r   test_rfc7748_2zX25519_Tests.test_rfc7748_2-  s    XY//2--a0'+3#.0 	XY	

 s 	4A33F;H11!4GA"g/7'24F		4 	XY	
r   c                    d}d}d}d}d}t        j                  t        |            }t        j                  t        |            }t        j                  t        |            }t        j                  t        |            }	t        |      }
t	        ||d       }t	        |	|d       }| j                  ||
       | j                  ||
       y )	N@77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a@8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a@5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb@de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f@4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742c                     | S r5   r   r   s    r   r!   z-X25519_Tests.test_rfc7748_3.<locals>.<lambda>V      a r   r7   c                     | S r5   r   r   s    r   r!   z-X25519_Tests.test_rfc7748_3.<locals>.<lambda>Y  r   r   r   r>   r   r   r   tv4tv5alice_priv_keyalice_pub_keybob_priv_keybob_pub_keysecretresult1result2s                r   test_rfc7748_3z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                 r    d}|D ]0  }| j                  t        t        j                  t	        |             2 y )N)@0000000000000000000000000000000000000000000000000000000000000000@0100000000000000000000000000000000000000000000000000000000000000@e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800@5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157@ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f@edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f@eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f)r   rn   r   r   r   r>   	weak_keysr    s      r   	test_weakzX25519_Tests.test_weak]  s:    
	&  	,Aj 99'l,	,r   Nr   r   r   r   r   r   r   r   r   r   r   r     s    5$
4*,,r   r   c                   $    e Zd Zd Zd Zd Zd Zy)
X448_Testsc                     d}|D ]l  \  }}}t        j                  t        |            }t        j                  t        |            }t	        ||d       }| j                  |t        |             n y )N))p3d262fddf9ec8e88495266fea19a34d28882acef045104d0d1aae121700a779c984c24f8cdd78fbff44943eba368f54b29259a4f1c600ad3p06fce640fa3487bfda5f6cf2d5263f8aad88334cbd07437f020f08f9814dc031ddbdc38c19c6da2583fa5429db94ada18aa7a7fb4ef8a086pce3e4ff95a60dc6697da1db1d85e6afbdf79b50a2412d7546d5f239fe14fbaadeb445fc66a01b0779d98223961111e21766282f73dd96b6f)p203d494428b8399352665ddca42f9de8fef600908e0d461cb021f8c538345dd77c3e4806e25f46d3315c44e0a5b4371282dd2c8d5be3095fp0fbcc2f993cd56d3305b0b7d9e55d4c1a8fb5dbb52f8e9a1e9b6201b165d015894e56c4d3570bee52fe205e28a78b91cdfbde71ce8d157dbp884a02576239ff7a2f2f63b2db6a9ff37047ac13568e1e30fe63c4a7ad1b3ee3a5700df34321d62077e63633c575c1c954514e99da7c179dc                     | S r5   r   r   s    r   r!   z+X448_Tests.test_rfc7748_1.<locals>.<lambda>  r   r   r7   r   r   r   r   r   r<   r   s           r   r   zX448_Tests.test_rfc7748_1z  sp    
 ! 	5MCc11)C.AH//	#?G"g/7'24F VYs^4	5r   c                    t        d      }t        j                  |      }t        j                  |      }t	        ||d       }| j                  |t        d             t        d      D ]=  }t        j                  |      }t        j                  |      }|}t	        ||d       }? | j                  |t        d             y )Np0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c                     | S r5   r   r   s    r   r!   z+X448_Tests.test_rfc7748_2.<locals>.<lambda>  r   r   r7   p3f482c8a9f19b01e6c46ee9711d9dc14fd4bf67af30765c2ae2b846a4d23a8cd0db897086239492caf350b51f833868b9bc2b3bca9cf4113r   c                     | S r5   r   r   s    r   r!   z+X448_Tests.test_rfc7748_2.<locals>.<lambda>  r   r   paa3b4749d55b9daf1e5b00288826c467274ce3ebbdd5c17b975e09d4af6c67cf10d087202db88286e2b79fceea3ec353ef54faa26e219f38)r   r   r   r   r   r<   r   r   s         r   r   zX448_Tests.test_rfc7748_2  s      I  J--a0++A.'+3#.0 	  I  J	

 s 	4A11&9H//2GA"g/7'24F		4 	  I  J	
r   c                    d}d}d}d}d}t        j                  t        |            }t        j                  t        |            }t        j                  t        |            }t        j                  t        |            }	t        |      }
t	        ||d       }t	        |	|d       }| j                  ||
       | j                  ||
       y )	Np9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726bp9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0p1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992dp3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609p07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879dc                     | S r5   r   r   s    r   r!   z+X448_Tests.test_rfc7748_3.<locals>.<lambda>  r   r   r7   c                     | S r5   r   r   s    r   r!   z+X448_Tests.test_rfc7748_3.<locals>.<lambda>  r   r   r   r   s                r   r   z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                 r    d}|D ]0  }| j                  t        t        j                  t	        |             2 y )N)p0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000p0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000pfefffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffpfffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffp00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r   rn   r   r   r   r   s      r   r   zX448_Tests.test_weak  s:    
	  	,Aj 77'l,	,r   Nr   r   r   r   r   r   x  s    5$
4*,,r   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestVectorsX25519WycheproofzWycheproof X25519 testsc                 h    d }d }t        d|d|z  d|id|i      }| xj                  |z  c_        y )Nc                     | d   S Ntyper   rL   s    r   encodingz;TestVectorsX25519Wycheproof.add_tests_hex.<locals>.encoding      V9r   c                     t        | d         S NrO   r   rP   s    r   rO   z:TestVectorsX25519Wycheproof.add_tests_hex.<locals>.private      Qy\**r   rR   rT   r  rO   rU   rX   r>   rZ   r  rO   r[   s        r   add_tests_hexz)TestVectorsX25519Wycheproof.add_tests_hex  I    		+ ..H.6.D08/99CX8N8A77K0 	6r   c           	      p    d }d }d }t        d|d|z  d|i||d      }| xj                  |z  c_        y )	Nc                     | d   S r  r   rL   s    r   r  z=TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.encoding  r  r   c                     | d   S Nrl   r   rP   s    r   rl   z;TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.public      X;r   c                     | d   S r  r   rP   s    r   rO   z<TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.private      Y<r   rR   rT   r  rl   rO   rU   rX   r>   rZ   r  rl   rO   r[   s         r   add_tests_asciiz+TestVectorsX25519Wycheproof.add_tests_ascii  R    			  ..H.6.D08/99CX8NBHCJ8L0 	6r   c                     g | _         d | _        | j                  d       | j                  d       | j                  d       | j                  d       y )Nzx25519_test.jsonzx25519_asn_test.jsonzx25519_pem_test.jsonzx25519_jwk_test.jsonrY   r^   r  r#  r_   s    r   r`   z!TestVectorsX25519Wycheproof.setUp  sL    	-.123434r   c                     | j                   S r5   rb   r_   s    r   rc   z,TestVectorsX25519Wycheproof.shortDescription  rd   r   c                    |j                   dk(  r-	 t        |j                        }t        |j                        }nB|j                   dv r@	 t        j                  |j                        }t        j                  |j                        }n|j                   dk(  rd|j                  v ry d|j                  vry d|j                  vry |j                  j                  d	      d
k7  ry |j                  j                  d      dk7  ry |j                  j                  d      dk7  ry d } ||j                  d         } ||j                  d         }	 t        |      }t        |      }nt        d|j                         	 t        d       }| j                  ||j                          |j                  sJ y # t        $ rE}|j                  sJ |j
                  sJ d|j                  v sJ dt        |      v sJ Y d }~y d }~ww xY w# t        j                  $ r'}|j                  rJ dt        |      v sJ Y d }~y d }~wt        $ r/ |j                  sJ |j
                  sJ d|j                  v sJ Y y w xY w# t        $ rW}|j                  r2|j
                  sJ d|j                  v sJ dt        |      v sJ Y d }~y dt        |      v sJ Y d }~y d }~wt        $ r |j                  sJ Y ww xY w# t        $ r |j                  rJ Y y t"        $ r'}|j                  rJ dt        |      v sJ Y d }~y d }~ww xY w)NXdhCompLowOrderPubliczInvalid Curve25519
XdhAsnComp
XdhPemCompUnsupported ECC
XdhJwkCompyr    ktyOKPcrvX25519c                     | j                  dd      j                  dd      } dt        |       dz  z
  }|dk7  r| d|z  z  } t        j                  |       }|S N-+r   /rf   =replacerk   base64	b64decode	input_strpaddingdecoded_bytess      r   base64url_decodezATestVectorsX25519Wycheproof.test_verify.<locals>.base64url_decode*  _    %--c37??SI	s9~12a<w.I & 0 0 ;$$r   r2   Incorrect lengthUnknown encodingc                     | S r5   r   r   s    r   r!   z9TestVectorsX25519Wycheproof.test_verify.<locals>.<lambda>I  ri   r   r7   rj   )r  r   rl   rn   rp   ro   flagsrt   r   rO   r   rm   UnsupportedEccFeaturegetr   r<   rr   rs   	r>   rY   r?   ru   r@   rC  
jwk_publicjwk_privaterB   s	            r   rv   z'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zz!'28833+s1v55 ,, 88#(CF22 xxzz!'28833	D  88::%+rxx77/3q699-Q77  xxx   	 xxx 	2xx'3q6111	2sw   F: >H I>  K: :	H;HHI;I  8I;:I;>	K79KKK76K7:MML==Mc                     | j                   D ]>  }d|j                  |j                  |j                  fz  | _        | j                  |       @ y Nz)Wycheproof XECDH Verify Test #%d (%s, %s)rx   r{   s     r   r|   z#TestVectorsX25519Wycheproof.runTestS  E    '' 	!BCruubjjZ\ZeZeFffDIR 	!r   N
r   r   r   r^   r  r#  r`   rc   rv   r|   r   r   r   r  r    s'    $D"*5Ob!r   r  c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	TestVectorsX448WycheproofzWycheproof X448 testsc                 h    d }d }t        d|d|z  d|id|i      }| xj                  |z  c_        y )Nc                     | d   S r  r   rL   s    r   r  z9TestVectorsX448Wycheproof.add_tests_hex.<locals>.encoding_  r  r   c                     t        | d         S r  r  rP   s    r   rO   z8TestVectorsX448Wycheproof.add_tests_hex.<locals>.privateb  r  r   rR   rT   r  rO   rU   rX   r  s        r   r  z'TestVectorsX448Wycheproof.add_tests_hex]  r  r   c           	      p    d }d }d }t        d|d|z  d|i||d      }| xj                  |z  c_        y )	Nc                     | d   S r  r   rL   s    r   r  z;TestVectorsX448Wycheproof.add_tests_ascii.<locals>.encodingp  r  r   c                     | d   S r  r   rP   s    r   rl   z9TestVectorsX448Wycheproof.add_tests_ascii.<locals>.publics  r  r   c                     | d   S r  r   rP   s    r   rO   z:TestVectorsX448Wycheproof.add_tests_ascii.<locals>.privatev  r   r   rR   rT   r  r!  rU   rX   r"  s         r   r#  z)TestVectorsX448Wycheproof.add_tests_asciin  r$  r   c                     g | _         d | _        | j                  d       | j                  d       | j                  d       | j                  d       y )Nzx448_test.jsonzx448_asn_test.jsonzx448_pem_test.jsonzx448_jwk_test.jsonr&  r_   s    r   r`   zTestVectorsX448Wycheproof.setUp  sL    	+,/01212r   c                     | j                   S r5   rb   r_   s    r   rc   z*TestVectorsX448Wycheproof.shortDescription  rd   r   c                 r   |j                   dk(  r-	 t        |j                        }t        |j                        }nB|j                   dv r@	 t        j                  |j                        }t        j                  |j                        }n|j                   d	k(  rd
|j                  v ry d|j                  vry d|j                  vry |j                  j                  d      dk7  ry |j                  j                  d      dk7  ry |j                  j                  d      dk7  ry d } ||j                  d         } ||j                  d         }	 t        |      }t        |      }nt        d|j                         	 t        d       }| j!                  ||j"                         |j                  sJ y # t        $ rl}|j                  sJ |j
                  sJ t        |j                        dk(  rd|j                  v sJ dt        |      v sJ dt        |      v sJ Y d }~y d }~ww xY w# t        j                  $ r'}|j                  rJ dt        |      v sJ Y d }~y d }~wt        $ rD}|j                  sJ |j
                  sJ d|j                  v sd|j                  v sJ Y d }~y d }~ww xY w# t        $ r}|j                  rj|j
                  sJ t        |j                  d         dk(  r-d|j                  v sd|j                  v sJ dt        |      v sJ dt        |      v sJ Y d }~y dt        |      v sJ Y d }~y d }~wt        $ r |j                  sJ Y w xY w# t        $ r |j                  rJ Y y t$        $ r'}|j                  rJ dt        |      v sJ Y d }~y d }~ww xY w)Nr)  8   r*  zInvalid Curve448zIncorrect Curve448r+  r.  NonCanonicalPublicr/  r0  r    r1  r2  r3  X448c                     | j                  dd      j                  dd      } dt        |       dz  z
  }|dk7  r| d|z  z  } t        j                  |       }|S r6  r;  r?  s      r   rC  z?TestVectorsX448Wycheproof.test_verify.<locals>.base64url_decode  rD  r   r2   K   rE  rF  c                     | S r5   r   r   s    r   r!   z7TestVectorsX448Wycheproof.test_verify.<locals>.<lambda>  ri   r   r7   rj   )r  r   rl   rn   rp   ro   rk   rH  rt   r   rO   r   rm   rI  rJ  r   r<   rr   rs   rK  s	            r   rv   z%TestVectorsX448Wycheproof.test_verify  s*   ;;)#
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zz!ryy>R'+rxx77-Q77/3q699 ,, 88#(CF22 xxzz!'28837Krxx7WW	D  88::%299S>*b0/288;3rxx?@1SV;;3s1v==-Q77  xxx   	 xxx 	2xx'3q6111	2s   F: >H2 J:  M. :	H/A"H**H/2J7I''J73:J22J7:	M+A1M9MM+*M+.N6N6N11N6c                     | j                   D ]>  }d|j                  |j                  |j                  fz  | _        | j                  |       @ y rO  rx   r{   s     r   r|   z!TestVectorsX448Wycheproof.runTest  rP  r   NrQ  r   r   r   rS  rS  Y  s'    "D"*3Vp!r   rS  c                    g }|t        t              z  }|t               gz  }|t        t              z  }|t        t              z  }|t        t
              z  }|t               gz  }|t               gz  }| j                  d      }|r	 |S )N
slow_tests)	r   r   rI   r~   r   r   r  rS  rJ  )configtestsrf  s      r   	get_testsri    s    E	_011E	')**E	_Z((E	_\**E	_Z((E	)+,,E	')**EL)JLr   __main__c                  <    t        j                  t                     S r5   )unittest	TestSuiteri  r   r   r   suitern     s    !!)+..r   rn  )defaultTest):rer=  rl  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idxrY   
isinstancert   matchresgrouprg   rq   r(   r)   r?   r*   r@   ziutrA   rC   rG   setattrrI   r~   r   r   r  rS  ri  r   rn  mainr   r   r   <module>r     s   	   ' &    5 R 9 9	(++ 	 ((G(W2F2F0D1E1E)*	+ 	1 /1  ,- (YGC "cbhh-r2
YYq\
Z')yy')yy2J  #--j"$''+K 77L ()+* ","-#/* !:S!@)L
ax#%BS%H-XQ(YVF! 1 1 F!R~."" ~.B\,8$$ \,~Q,"" Q,hJ!("3"3 J!ZQ! 1 1 Q!h  $ z/HMMg& r   