
    ¿iga                     X   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  G d
 dej                  Z edddd d d d d d          pg Z ee          D ]\  ZZ eee          r+ e j        de          Z e sJ e !                    d          Z"< ej#        e"ej$        ej%                  Z& ej#        e"ej'                  Z(ej)        Z*e&e(e*fdZ+e&e(e*fdZ, e-edez  e+           edk    r e-edez  e,            G d dej                  Z. G d d ej                  Z/ G d! d"ej                  Z0 G d# d$ej                  Z1 G d% d&ej                  Z2i fd'Z3e4d(k    rd) Z5 ej6        d*+           dS dS ),    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_keyc                       e Zd ZdS )FIPS_ECDH_Tests_KATN)__name__
__module____qualname__     b/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Protocol/test_ecdh.pyr   r      s        Dr   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2JJ 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                 X    t          ||d           }|                     ||           d S )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_testrA   4   A     %'K! ! ! 	L)))))r   c                 X    t          ||d           }|                     ||           d S )Nc                     | S r3   r   r   s    r   r   zecdh_test_rev.<locals>.<lambda>E   r4   r   r5   r9   r;   s        r   ecdh_test_revrE   >   rB   r   ztest_verify_positive_%dztest_verify_positive_rev_%dc                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )TestVectorsECDHWycheproofzWycheproof ECDH testsc                 h    d }d }t          d|d|z  d|id|i          }| xj        |z  c_        d S )Nc                     | d         S )Nr,   r   gs    r   r,   z2TestVectorsECDHWycheproof.add_tests.<locals>.curveS   s    W:r   c                 .    t          | d         d          S )Nprivater   r   us    r   rM   z4TestVectorsECDHWycheproof.add_tests.<locals>.privateV   s    q|R(((r   r   
wycheproofWycheproof ECDH (%s)r,   rM   	group_tagunit_tagr
   tv)r<   filenamer,   rM   results        r   	add_testsz#TestVectorsECDHWycheproof.add_testsQ   sm    	 	 		) 	) 	) ..H.6.D08/99@%8H8A77K0 0 0 	6r   c                 r   g | _         d | _        |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           d S )	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)rW   descrZ   r<   s    r   setUpzTestVectorsECDHWycheproof.setUpb   s    	9:::9:::9:::9:::122212221222122222r   c                     | j         S r3   r\   r]   s    r   shortDescriptionz*TestVectorsECDHWycheproof.shortDescriptionp   
    yr   c                 r   t          |j                  dk    rd S 	 t          |j        d                   dk    r!t          j        |j        |j                  }nt          j        |j                  }n!# t          $ r |j        s	|j        rJ Y d S w xY wt          j	        |j        |j
                  }	 t          ||d           }|                     ||j                   |j        sJ d S # t          $ r |j        rJ Y d S t          $ r'}|j        rJ dt          |          v sJ Y d }~d S d }~ww xY w)Nr      )
curve_namer/   c                     | S r3   r   r   s    r   r   z7TestVectorsECDHWycheproof.test_verify.<locals>.<lambda>       A r   r5   incompatible curve)lenpublicr   r   
import_keyr,   
ValueErrorwarningvalid	constructrM   r   r:   shared	TypeErrorstr)r<   rW   r=   r>   r@   es         r   test_verifyz%TestVectorsECDHWycheproof.test_verifys   s   ry>>QF	BIaL!!Q&& ^BI"(KKK

 ^BI66
 	 	 	:-RX---FF	 m"(bjAAA	*5"-+/ / /A Q	***8OOOOO  	  	  	 x 	2 	2 	2x'3q661111111111	2s0   AA5 5BB7C0 0D6	D6D11D6c                 |    | j         D ]3}d|j        |j        |j        fz  | _        |                     |           4d S )Nz(Wycheproof ECDH Verify Test #%d (%s, %s)rW   idcommentrX   r\   rt   r<   rW   s     r   runTestz!TestVectorsECDHWycheproof.runTest   sO    ' 	! 	!BBbeRZY[YdEeeDIR    	! 	!r   N)	r   r   r   r\   rZ   r^   ra   rt   rz   r   r   r   rG   rG   M   sd        "D  "3 3 3    :! ! ! ! !r   rG   c                       e Zd Z ej        d          Z ej        d                                          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dS )
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                  }|                     t	          |          d           d S )Nc                 N    t          j        |                                           S r3   r   newdigestr   s    r   r   z#ECDH_Tests.test_1.<locals>.<lambda>       
1,,.. r   )r8   r6   r7   s@   3960a1101d1193cbaffef4cc7202ebff783c22c6d2e0d5d530ffc66dc197ea9c)r   r6   r7   r:   r   r<   r8   r@   s      r   test_1zECDH_Tests.test_1   s`    ..? ,. . . 	\	^ 	^ 	^ 	^ 	^r   c                     d }t          || j        | j        | j        | j                  }|                     t          |          d           d S )Nc                 N    t          j        |                                           S r3   r   r   s    r   r   z#ECDH_Tests.test_2.<locals>.<lambda>   r   r   )r8   r6   r7   eph_pubeph_privs@   7447b733d40c8fab2c633b3dc61e4a8c742f3a6af7e16fb0cc486f5bdb5d6ba2)r   r6   r7   r   r   r:   r   r   s      r   test_2zECDH_Tests.test_2   sj    ..? ,( ( ( 	\	^ 	^ 	^ 	^ 	^r   c                     d }t          || j        | j        | j                  }|                     t          |          d           d S )Nc                 N    t          j        |                                           S r3   r   r   s    r   r   z#ECDH_Tests.test_3.<locals>.<lambda>   r   r   )r8   r6   r7   r   s@   9e977ae45f33bf67f285d064d83e6632bcafe3a7d33fe571233bab4794ace759)r   r6   r7   r   r:   r   r   s      r   test_3zECDH_Tests.test_3   se    ..? ,	( ( (
 	\	^ 	^ 	^ 	^ 	^r   c                     d }t          || j        | j        | j                  }|                     t          |          d           d S )Nc                 N    t          j        |                                           S r3   r   r   s    r   r   z#ECDH_Tests.test_4.<locals>.<lambda>   r   r   )r8   r6   r7   r   s@   c9532df6aa7e9dbe5fe85da31ee25ff19c179c88691ec4b8328cc2036dcdadf2)r   r6   r7   r   r:   r   r   s      r   test_4zECDH_Tests.test_4   se    ..? ,	& & &
 	\	^ 	^ 	^ 	^ 	^r   c                 t    d }|                      t          t          || j        | j        | j                   d S )Nc                 N    t          j        |                                           S r3   r   r   s    r   r   z#ECDH_Tests.test_5.<locals>.<lambda>   r   r   )r8   r7   r   r   )assertRaisesrl   r   r7   r   r   r<   r8   s     r   test_5zECDH_Tests.test_5   sI    ..* , 	 	( 	( 	( 	( 	(r   c                 t    d }|                      t          t          || j        | j        | j                   d S )Nc                 N    t          j        |                                           S r3   r   r   s    r   r   z#ECDH_Tests.test_6.<locals>.<lambda>   r   r   )r8   r6   r   r   )r   rl   r   r6   r   r   r   s     r   test_6zECDH_Tests.test_6   sH    ..*? 	 	( 	( 	( 	( 	(r   c                     d }t          || j        | j                  }|                     t	          |          d           d S )Nc                 N    t          j        |                                           S r3   r   r   s    r   r   z#ECDH_Tests.test_7.<locals>.<lambda>   r   r   )r8   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                  }|                     t	          |          d           d S )Nc                 N    t          j        |                                           S r3   r   r   s    r   r   z#ECDH_Tests.test_8.<locals>.<lambda>   r   r   )r8   r7   r   s@   ee4dc995117476ed57fd17ff0ed44e9f0466d46b929443bc0db9380317583b04)r   r7   r   r:   r   r   s      r   test_8zECDH_Tests.test_8   s`    .. ,& & & 	\	^ 	^ 	^ 	^ 	^r   c                     d }t          || j        | j                  }|                     t	          |          d           d S )Nc                 N    t          j        |                                           S r3   r   r   s    r   r   z#ECDH_Tests.test_9.<locals>.<lambda>   r   r   )r8   r6   r   s@   2351cc2014f7c40468fa072b5d30f706eeaeef7507311cd8e59bab3b43f03c51)r   r6   r   r:   r   r   s      r   test_9zECDH_Tests.test_9   s_    ..?( ( ( 	\	^ 	^ 	^ 	^ 	^r   c                 h    d }|                      t          t          || j        | j                   d S )Nc                 N    t          j        |                                           S r3   r   r   s    r   r   z$ECDH_Tests.test_10.<locals>.<lambda>   r   r   )r8   r6   r   )r   rl   r   r6   r   r   s     r   test_10zECDH_Tests.test_10   sC    ..*?	 	 	& 	& 	& 	& 	&r   c                 h    d }|                      t          t          || j        | j                   d S )Nc                 N    t          j        |                                           S r3   r   r   s    r   r   z$ECDH_Tests.test_11.<locals>.<lambda>  r   r   )r8   r7   r   )r   rl   r   r7   r   r   s     r   test_11zECDH_Tests.test_11  sD    ..* ,	 	 	( 	( 	( 	( 	(r   c                 `    |                      t          t          | j        | j                   d S )N)r6   r7   )r   rl   r   r6   r7   r]   s    r   test_12zECDH_Tests.test_12  s9    *? , 	 	. 	. 	. 	. 	.r   N)r   r   r   r   rk   r7   r=   r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r|   r|      sa        #.  "X  Y  YK  !W  X  X  c  c  e  eJs~  U  V  VHcn  T  U  UG^ ^ ^
^ 
^ 
^	^ 	^ 	^	^ 	^ 	^( ( (( ( (^ ^ ^^ ^ ^^ ^ ^& & &( ( (. . . . .r   r|   c                   &    e Zd Zd Zd Zd Zd ZdS )X25519_Testsc                    d}|D ]~\  }}}t          j        t          |                    }t          j        t          |                    }t	          ||d           }|                     |t          |                     d S )N))@a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4@e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c@c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552)@4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0d@e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493@95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957c                     | S r3   r   r   s    r   r   z-X25519_Tests.test_rfc7748_1.<locals>.<lambda>(       r   r5   r   r   r   r   r   r:   r<   tvstv1tv2tv3priv_keypub_keyrY   s           r   test_rfc7748_1zX25519_Tests.test_rfc7748_1  s    
 ! 	5 	5MCc3IcNNCCH1)C..AAG"g/7'2{4 4 4F VYs^^4444	5 	5r   c                    t          d          }t          j        |          }t          j        |          }t	          ||d           }|                     |t          d                     t          d          D ]?}t          j        |          }t          j        |          }|}t	          ||d           }@|                     |t          d                     d S )N@0900000000000000000000000000000000000000000000000000000000000000c                     | S r3   r   r   s    r   r   z-X25519_Tests.test_rfc7748_2.<locals>.<lambda>2      Q r   r5   @422c8e7a6227d7bca1350b3e2bb7279f7897b87bb6854b783c60e80311ae3079  c                     | S r3   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   rY   _s         r   test_rfc7748_2zX25519_Tests.test_rfc7748_2+  s   XYY/22-a00'+3#.;0 0 0 	XYY	
 	
 	

 s 	4 	4A3F;;H1!44GA"g/7'2{4 4 4FF 	XY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           }|                     ||
           |                     ||
           d S )	N@77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a@8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a@5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb@de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f@4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742c                     | S r3   r   r   s    r   r   z-X25519_Tests.test_rfc7748_3.<locals>.<lambda>T      a r   r5   c                     | S r3   r   r   s    r   r   z-X25519_Tests.test_rfc7748_3.<locals>.<lambda>W  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_3E  s    PPPPP5innEE3IcNNCC3IcNNCC1)C..AA3=,8$/K1 1 1  ;,:$/K1 1 1 	&)))&)))))r   c                 z    d}|D ]5}|                      t          t          j        t	          |                     6d S )N)@0000000000000000000000000000000000000000000000000000000000000000@0100000000000000000000000000000000000000000000000000000000000000@e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800@5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157@ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f@edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f@eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f)r   rl   r   r   r   r<   	weak_keysr   s      r   	test_weakzX25519_Tests.test_weak[  sR    
	&  	, 	,Aj 9'll, , , ,	, 	,r   Nr   r   r   r   r   r   r   r   r   r   r   r     sP        5 5 5$
 
 
4* * *,, , , , ,r   r   c                   &    e Zd Zd Zd Zd Zd ZdS )
X448_Testsc                    d}|D ]~\  }}}t          j        t          |                    }t          j        t          |                    }t	          ||d           }|                     |t          |                     d S )N))p3d262fddf9ec8e88495266fea19a34d28882acef045104d0d1aae121700a779c984c24f8cdd78fbff44943eba368f54b29259a4f1c600ad3p06fce640fa3487bfda5f6cf2d5263f8aad88334cbd07437f020f08f9814dc031ddbdc38c19c6da2583fa5429db94ada18aa7a7fb4ef8a086pce3e4ff95a60dc6697da1db1d85e6afbdf79b50a2412d7546d5f239fe14fbaadeb445fc66a01b0779d98223961111e21766282f73dd96b6f)p203d494428b8399352665ddca42f9de8fef600908e0d461cb021f8c538345dd77c3e4806e25f46d3315c44e0a5b4371282dd2c8d5be3095fp0fbcc2f993cd56d3305b0b7d9e55d4c1a8fb5dbb52f8e9a1e9b6201b165d015894e56c4d3570bee52fe205e28a78b91cdfbde71ce8d157dbp884a02576239ff7a2f2f63b2db6a9ff37047ac13568e1e30fe63c4a7ad1b3ee3a5700df34321d62077e63633c575c1c954514e99da7c179dc                     | S r3   r   r   s    r   r   z+X448_Tests.test_rfc7748_1.<locals>.<lambda>  r   r   r5   r   import_x448_private_keyr   import_x448_public_keyr   r:   r   s           r   r   zX448_Tests.test_rfc7748_1x  s    
 ! 	5 	5MCc1)C..AAH/	#??G"g/7'2{4 4 4F VYs^^4444	5 	5r   c                    t          d          }t          j        |          }t          j        |          }t	          ||d           }|                     |t          d                     t          d          D ]?}t          j        |          }t          j        |          }|}t	          ||d           }@|                     |t          d                     d S )Np0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c                     | S r3   r   r   s    r   r   z+X448_Tests.test_rfc7748_2.<locals>.<lambda>  r   r   r5   p3f482c8a9f19b01e6c46ee9711d9dc14fd4bf67af30765c2ae2b846a4d23a8cd0db897086239492caf350b51f833868b9bc2b3bca9cf4113r   c                     | S r3   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  J-a00+A..'+3#.;0 0 0 	  I  J  J	
 	
 	

 s 	4 	4A1&99H/22GA"g/7'2{4 4 4FF 	  I  J  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           }|                     ||
           |                     ||
           d S )	Np9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726bp9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0p1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992dp3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609p07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879dc                     | S r3   r   r   s    r   r   z+X448_Tests.test_rfc7748_3.<locals>.<lambda>  r   r   r5   c                     | S r3   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3IcNNCC1)C..AA1)C..AA/	#??3=,8$/K1 1 1  ;,:$/K1 1 1 	&)))&)))))r   c                 z    d}|D ]5}|                      t          t          j        t	          |                     6d S )N)p0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000p0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000pfefffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffpfffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffp00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r   rl   r   r   r   r   s      r   r   zX448_Tests.test_weak  sR    
	  	, 	,Aj 7'll, , , ,	, 	,r   Nr   r   r   r   r   r   v  sP        5 5 5$
 
 
4* * *,, , , , ,r   r   c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )	TestVectorsXECDHWycheproofzWycheproof XECDH testsc                 h    d }d }t          d|d|z  d|id|i          }| xj        |z  c_        d S )Nc                     | d         S Ntyper   rJ   s    r   encodingz:TestVectorsXECDHWycheproof.add_tests_hex.<locals>.encoding      V9r   c                 ,    t          | d                   S NrM   )r   rN   s    r   rM   z9TestVectorsXECDHWycheproof.add_tests_hex.<locals>.private  s    Qy\***r   rP   rR   r  rM   rS   rV   )r<   rX   r  rM   rY   s        r   add_tests_hexz(TestVectorsXECDHWycheproof.add_tests_hex  sm    	 	 		+ 	+ 	+ ..H.6.D08/99CX8N8A77K0 0 0 	6r   c           	      p    d }d }d }t          d|d|z  d|i||d          }| xj        |z  c_        d S )	Nc                     | d         S r  r   rJ   s    r   r  z<TestVectorsXECDHWycheproof.add_tests_ascii.<locals>.encoding  r  r   c                     | d         S )Nrj   r   rN   s    r   rj   z:TestVectorsXECDHWycheproof.add_tests_ascii.<locals>.public  s    X;r   c                     | d         S r  r   rN   s    r   rM   z;TestVectorsXECDHWycheproof.add_tests_ascii.<locals>.private  s    Y<r   rP   rR   r  )rj   rM   rS   rV   )r<   rX   r  rj   rM   rY   s         r   add_tests_asciiz*TestVectorsXECDHWycheproof.add_tests_ascii  s    	 	 		 	 		  	  	  ..H.6.D08/99CX8NBHCJ8L 8L0 0 0 	6r   c                     g | _         d | _        |                     d           |                     d           |                     d           |                     d           d S )Nzx25519_test.jsonzx25519_asn_test.jsonzx25519_pem_test.jsonzx25519_jwk_test.json)rW   r\   r  r  r]   s    r   r^   z TestVectorsXECDHWycheproof.setUp  sj    	-...12223444344444r   c                     | j         S r3   r`   r]   s    r   ra   z+TestVectorsXECDHWycheproof.shortDescription  rb   r   c                    |j         dk    rt	 t          |j                  }nH# t          $ r;}|j        sJ |j        sJ d|j        v sJ dt          |          v sJ Y d }~d S d }~ww xY wt          |j	                  }n|j         dv r	 t          j        |j                  }t          j        |j	                  }n# t          j        $ r'}|j        rJ dt          |          v sJ Y d }~d S d }~wt          $ r! |j        sJ |j        sJ d|j        v sJ Y d S w xY w|j         dk    rCd|j        v rd S d|j        vrd S d|j	        vrd S |j                            d	          d
k    rd S |j                            d          dk    rd S |j	                            d          dk    rd S d } ||j        d                   } ||j	        d                   }	 t          |          }t          |          }n# t          $ rR}|j        r-|j        sJ d|j        v sJ dt          |          v sJ Y d }~d S dt          |          v sJ Y d }~d S d }~wt          $ r |j        sJ Y nw xY wt          d|j                   	 t          ||d           }|                     ||j                   |j        sJ d S # t          $ r |j        rJ Y d S t"          $ r'}|j        rJ dt          |          v sJ Y d }~d S d }~ww xY w)NXdhCompLowOrderPubliczInvalid Curve25519)
XdhAsnComp
XdhPemCompzUnsupported ECC
XdhJwkCompyr   ktyOKPcrvX25519c                     |                      dd                               dd          } dt          |           dz  z
  }|dk    r| d|z  z  } t          j        |           }|S )N-+r   /rd   =)replaceri   base64	b64decode)	input_strpaddingdecoded_bytess      r   base64url_decodez@TestVectorsXECDHWycheproof.test_verify.<locals>.base64url_decode(  si    %--c377??SII	s9~~12a<<w.I & 0 ; ;$$r   r0   zIncorrect lengthzUnknown encodingc                     | S r3   r   r   s    r   r   z8TestVectorsXECDHWycheproof.test_verify.<locals>.<lambda>G  rg   r   r5   rh   )r  r   rj   rl   rn   rm   flagsrr   r   rM   r   rk   UnsupportedEccFeaturegetr   r:   rp   rq   )	r<   rW   r=   rs   r>   r3  
jwk_publicjwk_privater@   s	            r   rt   z&TestVectorsXECDHWycheproof.test_verify   s	   ;)##5bi@@

   xz!!!'283333+s1vv5555 4BJ??KK[888 ^BI66
!nRZ88,   8###(CFF2222   xz!!!'283333	
 [L((bi")##"*$$y}}U##u,,y}}U##x//z~~e$$00% % % *)")C.99J**2:c?;;K 5jAA
7DD   8 :%%%+rx7777/3q669999FFFFF-Q7777FFFFF      x  /===	*5"-+/ / /A Q	***8OOOOO  	  	  	 x 	2 	2 	2x'3q661111111111	2st   " 
A'0A""A'
2B> >DC//*DDG< <
I,.I:II,+I,J> >L	LK??Lc                 |    | j         D ]3}d|j        |j        |j        fz  | _        |                     |           4d S )Nz)Wycheproof XECDH Verify Test #%d (%s, %s)rv   ry   s     r   rz   z"TestVectorsXECDHWycheproof.runTestQ  sO    ' 	! 	!BCrubjZ\ZeFffDIR    	! 	!r   N)
r   r   r   r\   r  r  r^   ra   rt   rz   r   r   r   r  r    sw        #D  "  *5 5 5  O O Ob! ! ! ! !r   r  c                 :   g }|t          t                    z  }|t                      gz  }|t          t                    z  }|t          t                    z  }|t          t
                    z  }|t                      gz  }|                     d          }|r	 |S )N
slow_tests)r   r   rG   r|   r   r   r  r7  )configtestsr<  s      r   	get_testsr?  W  s    E	_0111E	'))**E	_Z(((E	_\***E	_Z(((E	(**++EL))J Lr   __main__c                  B    t          j        t                                S r3   )unittest	TestSuiter?  r   r   r   suiterD  i  s    !)++...r   rD  )defaultTest)7rer.  rB  binasciir   r   Cryptodome.Util.py3compatr   Cryptodome.Hashr   Cryptodome.PublicKeyr   Cryptodome.SelfTest.st_commonr   Cryptodome.SelfTest.loaderr	   r
   Cryptodome.Protocolr   Cryptodome.Protocol.DHr   r   r   TestCaser   test_vectors_verify	enumerateidxrW   
isinstancerr   matchresgroupre   ro   r&   r'   r=   r(   r>   ziutr?   rA   rE   setattrrG   r|   r   r   r  r?  r   rD  mainr   r   r   <module>rZ     s   				   ' ' ' ' ' ' ' ' * * * * * * " " " " " " $ $ $ $ $ $ 9 9 9 9 9 9 V V V V V V V V " " " " " "; ; ; ; ; ; ; ; ; ;
	 	 	 	 	(+ 	 	 	 ('(G(W2F2F2F2F0D0D1E1E1E1E)* )*	+ 	+ 	1 /1  y,-- (Y (YGC z"c bh-r22


YYq\\
Z')y')y2 2 2J  #-j"$'+ + +K 7L ()+* * * * ","-#/* * * * G!:S!@)LLL
axx#%BS%H-XXXF! F! F! F! F! 1 F! F! F!R~. ~. ~. ~. ~." ~. ~. ~.B\, \, \, \, \,8$ \, \, \,~Q, Q, Q, Q, Q," Q, Q, Q,hJ! J! J! J! J!!2 J! J! J!Z     " z/ / /HMg&&&&&& r   