o
    Þý°jlw  ã                
   @   s   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„ dejƒZeddddd„ dd„ dd„ dd„ dd„ dœƒpig ZeeƒD ]R\ZZeee ƒr‡e  !de¡Z"e"s�J ‚e" #d¡Z$qnej%e$ej&ej'd�Z(ej%e$ej)d�Z*ej+Z,e(e*e,fdd„Z-e(e*e,fdd„Z.e/ede e-ƒ edkrÀe/ede e.ƒ qnG d d!„ d!ejƒZ0G d"d#„ d#ejƒZ1G d$d%„ d%ejƒZ2G d&d'„ d'ejƒZ3G d(d)„ d)ejƒZ4G d*d+„ d+ejƒZ5i fd,d-„Z6e7d.k�rd/d0„ Z8ej9d0d1� dS dS )2é    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                   @   s   e Zd ZdS )ÚFIPS_ECDH_Tests_KATN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú™/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/SelfTest/Protocol/test_ecdh.pyr      s    r   )ÚProtocolzKAS_ECC_CDH_PrimitiveTest.txtz-ECC CDH Primitive (SP800-56A Section 5.7.1.2)c                 C   ó
   t | dƒS ©Né   ©Úint©Úxr   r   r   Ú<lambda>   ó   
 r   c                 C   r   r   r   r   r   r   r   r      r   c                 C   r   r   r   r   r   r   r   r      r   c                 C   r   r   r   r   r   r   r   r       r   c                 C   r   r   r   r   r   r   r   r   !   r   )ÚqcavsxÚqcavsyÚdiutÚqiutxÚqiutyz\[([A-Za-z0-9-]+)\]é   )ÚcurveÚpoint_xÚpoint_y©r&   Údc                 C   ó"   t ||dd„ d�}|  ||¡ d S )Nc                 S   ó   | S ©Nr   r   r   r   r   r   =   ó    zecdh_test.<locals>.<lambda>©Ú
static_pubÚstatic_privÚkdf©r   ÚassertEqual©ÚselfÚ
public_keyÚprivate_keyÚexp_responseÚzr   r   r   Ú	ecdh_test6   ó   ýr;   c                 C   r+   )Nc                 S   r,   r-   r   r   r   r   r   r   G   r.   zecdh_test_rev.<locals>.<lambda>r/   r3   r5   r   r   r   Úecdh_test_rev@   r<   r=   ztest_verify_positive_%dztest_verify_positive_rev_%dc                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestVectorsECDHWycheproofzWycheproof ECDH testsc                 C   ó@   dd„ }dd„ }t d|d| d|id|id	�}|  j|7  _d S )
Nc                 S   ó   | d S )Nr&   r   ©Úgr   r   r   r&   U   ó   z2TestVectorsECDHWycheproof.add_tests.<locals>.curvec                 S   s   t | d dƒS )NÚprivater   r   ©Úur   r   r   rD   X   s   z4TestVectorsECDHWycheproof.add_tests.<locals>.private©r   Ú
wycheproofúWycheproof ECDH (%s)r&   rD   ©Ú	group_tagÚunit_tag©r	   Útv)r6   Úfilenamer&   rD   Úresultr   r   r   Ú	add_testsS   ó   ÿûz#TestVectorsECDHWycheproof.add_testsc                 C   s`   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)rN   ÚdescrQ   ©r6   r   r   r   ÚsetUpd   s   






zTestVectorsECDHWycheproof.setUpc                 C   ó   | j S r-   ©rS   rT   r   r   r   ÚshortDescriptionr   ó   z*TestVectorsECDHWycheproof.shortDescriptionc              
   C   s  t |jƒdkr	d S zt|jd ƒdkrtj|j|jd�}nt |j¡}W n ty6   |js3|jr3J ‚Y d S w tj	|j|j
d�}zt||dd„ d�}W n. tyZ   |jrWJ ‚Y d S  tyy } z|jrfJ ‚dt|ƒv snJ ‚W Y d }~d S d }~ww |  ||j¡ |js†J ‚d S )	Nr   é   )Ú
curve_namer)   c                 S   r,   r-   r   r   r   r   r   r   ˆ   r.   z7TestVectorsECDHWycheproof.test_verify.<locals>.<lambda>r/   úincompatible curve)ÚlenÚpublicr   r   Ú
import_keyr&   Ú
ValueErrorÚwarningÚvalidÚ	constructrD   r   Ú	TypeErrorÚstrr4   Úshared)r6   rN   r7   r8   r:   Úer   r   r   Útest_verifyu   s4   €þ
þ
€þz%TestVectorsECDHWycheproof.test_verifyc                 C   ó0   | j D ]}d|j|j|jf | _|  |¡ qd S )Nz(Wycheproof ECDH Verify Test #%d (%s, %s)©rN   ÚidÚcommentrO   rS   rh   ©r6   rN   r   r   r   ÚrunTest’   ó   
þz!TestVectorsECDHWycheproof.runTestN)	r   r   r   rS   rQ   rU   rX   rh   rn   r   r   r   r   r>   O   s    r>   c                   @   s˜   e Zd Ze d¡Ze d¡ ¡ Ze d¡Ze d¡Z	dd„ Z
dd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd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                 C   ó.   dd„ }t || j| jd�}|  t|ƒd¡ d S )Nc                 S   ó   t  | ¡ ¡ S r-   ©r   ÚnewÚdigestr   r   r   r   r   £   ó    z#ECDH_Tests.test_1.<locals>.<lambda>)r2   r0   r1   s@   3960a1101d1193cbaffef4cc7202ebff783c22c6d2e0d5d530ffc66dc197ea9c)r   r0   r1   r4   r   ©r6   r2   r:   r   r   r   Útest_1¡   ó   ý
ÿzECDH_Tests.test_1c                 C   s6   dd„ }t || j| j| j| jd�}|  t|ƒd¡ d S )Nc                 S   rr   r-   rs   r   r   r   r   r   ­   rv   z#ECDH_Tests.test_2.<locals>.<lambda>)r2   r0   r1   Úeph_pubÚeph_privs@   7447b733d40c8fab2c633b3dc61e4a8c742f3a6af7e16fb0cc486f5bdb5d6ba2)r   r0   r1   rz   r{   r4   r   rw   r   r   r   Útest_2«   s   û
ÿzECDH_Tests.test_2c                 C   ó2   dd„ }t || j| j| jd�}|  t|ƒd¡ d S )Nc                 S   rr   r-   rs   r   r   r   r   r   ¹   rv   z#ECDH_Tests.test_3.<locals>.<lambda>)r2   r0   r1   r{   s@   9e977ae45f33bf67f285d064d83e6632bcafe3a7d33fe571233bab4794ace759)r   r0   r1   r{   r4   r   rw   r   r   r   Útest_3·   ó   ü
ÿzECDH_Tests.test_3c                 C   r}   )Nc                 S   rr   r-   rs   r   r   r   r   r   Ä   rv   z#ECDH_Tests.test_4.<locals>.<lambda>)r2   r0   r1   rz   s@   c9532df6aa7e9dbe5fe85da31ee25ff19c179c88691ec4b8328cc2036dcdadf2)r   r0   r1   rz   r4   r   rw   r   r   r   Útest_4Â   r   zECDH_Tests.test_4c                 C   ó(   dd„ }| j tt|| j| j| jd� d S )Nc                 S   rr   r-   rs   r   r   r   r   r   Ï   rv   z#ECDH_Tests.test_5.<locals>.<lambda>)r2   r1   rz   r{   )ÚassertRaisesr`   r   r1   rz   r{   ©r6   r2   r   r   r   Útest_5Í   ó   
ûzECDH_Tests.test_5c                 C   r�   )Nc                 S   rr   r-   rs   r   r   r   r   r   Ù   rv   z#ECDH_Tests.test_6.<locals>.<lambda>)r2   r0   rz   r{   )r‚   r`   r   r0   rz   r{   rƒ   r   r   r   Útest_6×   r…   zECDH_Tests.test_6c                 C   rq   )Nc                 S   rr   r-   rs   r   r   r   r   r   ã   rv   z#ECDH_Tests.test_7.<locals>.<lambda>)r2   rz   r{   s@   feb257ebe063078b1391aac07913283d7b642ad7df61b46dfc9cd6f420bb896a)r   rz   r{   r4   r   rw   r   r   r   Útest_7á   ry   zECDH_Tests.test_7c                 C   rq   )Nc                 S   rr   r-   rs   r   r   r   r   r   í   rv   z#ECDH_Tests.test_8.<locals>.<lambda>)r2   r1   rz   s@   ee4dc995117476ed57fd17ff0ed44e9f0466d46b929443bc0db9380317583b04)r   r1   rz   r4   r   rw   r   r   r   Útest_8ë   ry   zECDH_Tests.test_8c                 C   rq   )Nc                 S   rr   r-   rs   r   r   r   r   r   ÷   rv   z#ECDH_Tests.test_9.<locals>.<lambda>)r2   r0   r{   s@   2351cc2014f7c40468fa072b5d30f706eeaeef7507311cd8e59bab3b43f03c51)r   r0   r{   r4   r   rw   r   r   r   Útest_9õ   ry   zECDH_Tests.test_9c                 C   ó$   dd„ }| j tt|| j| jd� d S )Nc                 S   rr   r-   rs   r   r   r   r   r     rv   z$ECDH_Tests.test_10.<locals>.<lambda>)r2   r0   rz   )r‚   r`   r   r0   rz   rƒ   r   r   r   Útest_10ÿ   ó   
üzECDH_Tests.test_10c                 C   rŠ   )Nc                 S   rr   r-   rs   r   r   r   r   r   
  rv   z$ECDH_Tests.test_11.<locals>.<lambda>)r2   r1   r{   )r‚   r`   r   r1   r{   rƒ   r   r   r   Útest_11  rŒ   zECDH_Tests.test_11c                 C   s   | j tt| j| jd� d S )N)r0   r1   )r‚   r`   r   r0   r1   rT   r   r   r   Útest_12  s
   
ýzECDH_Tests.test_12N)r   r   r   r   r_   r1   r7   r0   r{   rz   rx   r|   r~   r€   r„   r†   r‡   rˆ   r‰   r‹   r�   rŽ   r   r   r   r   rp   ˜   s"    








		rp   c                   @   ó,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚX25519_Testsc                 C   óV   d}|D ]$\}}}t  t|ƒ¡}t  t|ƒ¡}t||dd„ d�}|  |t|ƒ¡ qd S )N))Ú@a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4Ú@e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4cÚ@c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552)Ú@4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0dÚ@e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493Ú@95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957c                 S   r,   r-   r   r   r   r   r   r   *  r.   z-X25519_Tests.test_rfc7748_1.<locals>.<lambda>r/   ©r
   r   r   r   r   r4   ©r6   ÚtvsÚtv1Útv2Útv3Úpriv_keyÚpub_keyrP   r   r   r   Útest_rfc7748_1  ó   	þúzX25519_Tests.test_rfc7748_1c                 C   óŠ   t dƒ}t |¡}t |¡}t||dd„ d�}|  |t dƒ¡ tdƒD ]}t |¡}t |¡}|}t||dd„ d�}q#|  |t dƒ¡ d S )	NÚ@0900000000000000000000000000000000000000000000000000000000000000c                 S   r,   r-   r   r   r   r   r   r   4  r.   z-X25519_Tests.test_rfc7748_2.<locals>.<lambda>r/   Ú@422c8e7a6227d7bca1350b3e2bb7279f7897b87bb6854b783c60e80311ae3079éç  c                 S   r,   r-   r   r   r   r   r   r   @  r.   Ú@684cf59ba83309552800ef566f2f4d3c1c3887c49360e3875f2eb94d99532c51)r   r
   r   r   r   r4   Úrange©r6   Úkrž   rŸ   rP   Ú_r   r   r   Útest_rfc7748_2-  ó.   

þþ

þþzX25519_Tests.test_rfc7748_2c                 C   ó”   d}d}d}d}d}t  t|ƒ¡}t  t|ƒ¡}t  t|ƒ¡}t  t|ƒ¡}	t|ƒ}
t||dd„ d�}t|	|d	d„ d�}|  ||
¡ |  ||
¡ d S )
NÚ@77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2aÚ@8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6aÚ@5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0ebÚ@de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4fÚ@4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742c                 S   r,   r-   r   r   r   r   r   r   V  r.   z-X25519_Tests.test_rfc7748_3.<locals>.<lambda>r/   c                 S   r,   r-   r   r   r   r   r   r   Y  r.   r˜   ©r6   r›   rœ   r�   Útv4Útv5Úalice_priv_keyÚalice_pub_keyÚbob_priv_keyÚbob_pub_keyÚsecretÚresult1Úresult2r   r   r   Útest_rfc7748_3G  ó(   þþzX25519_Tests.test_rfc7748_3c                 C   ó&   d}|D ]}|   ttjt|ƒ¡ qd S )N)Ú@0000000000000000000000000000000000000000000000000000000000000000Ú@0100000000000000000000000000000000000000000000000000000000000000Ú@e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800Ú@5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157Ú@ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fÚ@edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fÚ@eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f)r‚   r`   r
   r   r   ©r6   Ú	weak_keysr   r   r   r   Ú	test_weak]  s   þÿzX25519_Tests.test_weakN©r   r   r   r    r«   r½   rÉ   r   r   r   r   r�     ó
    r�   c                   @   r�   )
Ú
X448_Testsc                 C   r‘   )N))Úp3d262fddf9ec8e88495266fea19a34d28882acef045104d0d1aae121700a779c984c24f8cdd78fbff44943eba368f54b29259a4f1c600ad3Úp06fce640fa3487bfda5f6cf2d5263f8aad88334cbd07437f020f08f9814dc031ddbdc38c19c6da2583fa5429db94ada18aa7a7fb4ef8a086Úpce3e4ff95a60dc6697da1db1d85e6afbdf79b50a2412d7546d5f239fe14fbaadeb445fc66a01b0779d98223961111e21766282f73dd96b6f)Úp203d494428b8399352665ddca42f9de8fef600908e0d461cb021f8c538345dd77c3e4806e25f46d3315c44e0a5b4371282dd2c8d5be3095fÚp0fbcc2f993cd56d3305b0b7d9e55d4c1a8fb5dbb52f8e9a1e9b6201b165d015894e56c4d3570bee52fe205e28a78b91cdfbde71ce8d157dbÚp884a02576239ff7a2f2f63b2db6a9ff37047ac13568e1e30fe63c4a7ad1b3ee3a5700df34321d62077e63633c575c1c954514e99da7c179dc                 S   r,   r-   r   r   r   r   r   r   ‰  r.   z+X448_Tests.test_rfc7748_1.<locals>.<lambda>r/   ©r
   r   r   r   r   r4   r™   r   r   r   r    z  r¡   zX448_Tests.test_rfc7748_1c                 C   r¢   )	NÚp0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c                 S   r,   r-   r   r   r   r   r   r   “  r.   z+X448_Tests.test_rfc7748_2.<locals>.<lambda>r/   Úp3f482c8a9f19b01e6c46ee9711d9dc14fd4bf67af30765c2ae2b846a4d23a8cd0db897086239492caf350b51f833868b9bc2b3bca9cf4113r¥   c                 S   r,   r-   r   r   r   r   r   r   Ÿ  r.   Úpaa3b4749d55b9daf1e5b00288826c467274ce3ebbdd5c17b975e09d4af6c67cf10d087202db88286e2b79fceea3ec353ef54faa26e219f38)r   r
   r   r   r   r4   r§   r¨   r   r   r   r«   Œ  r¬   zX448_Tests.test_rfc7748_2c                 C   r­   )
NÚp9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726bÚp9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0Úp1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992dÚp3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609Úp07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879dc                 S   r,   r-   r   r   r   r   r   r   µ  r.   z+X448_Tests.test_rfc7748_3.<locals>.<lambda>r/   c                 S   r,   r-   r   r   r   r   r   r   ¸  r.   rÓ   r³   r   r   r   r½   ¦  r¾   zX448_Tests.test_rfc7748_3c                 C   r¿   )N)Úp0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Úp0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ÚpfefffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffÚpfffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffÚp00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r‚   r`   r
   r   r   rÇ   r   r   r   rÉ   ¼  s   þÿzX448_Tests.test_weakNrÊ   r   r   r   r   rÌ   x  rË   rÌ   c                   @   ó@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚTestVectorsX25519WycheproofzWycheproof X25519 testsc                 C   r?   )
Nc                 S   r@   ©NÚtyper   rA   r   r   r   ÚencodingÒ  rC   z;TestVectorsX25519Wycheproof.add_tests_hex.<locals>.encodingc                 S   ó   t | d ƒS ©NrD   ©r   rE   r   r   r   rD   Õ  ó   z:TestVectorsX25519Wycheproof.add_tests_hex.<locals>.privaterG   rI   rå   rD   rJ   rM   ©r6   rO   rå   rD   rP   r   r   r   Úadd_tests_hexÐ  rR   z)TestVectorsX25519Wycheproof.add_tests_hexc                 C   óJ   dd„ }dd„ }dd„ }t d|d| d	|i||d
œd�}|  j|7  _d S )Nc                 S   r@   rã   r   rA   r   r   r   rå   ã  rC   z=TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.encodingc                 S   r@   ©Nr^   r   rE   r   r   r   r^   æ  rC   z;TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.publicc                 S   r@   rç   r   rE   r   r   r   rD   é  rC   z<TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.privaterG   rI   rå   ©r^   rD   rJ   rM   ©r6   rO   rå   r^   rD   rP   r   r   r   Úadd_tests_asciiá  ó   ÿÿûz+TestVectorsX25519Wycheproof.add_tests_asciic                 C   ó8   g | _ d | _|  d¡ |  d¡ |  d¡ |  d¡ d S )Nzx25519_test.jsonzx25519_asn_test.jsonzx25519_pem_test.jsonzx25519_jwk_test.json©rN   rS   rë   rð   rT   r   r   r   rU   ö  ó   


z!TestVectorsX25519Wycheproof.setUpc                 C   rV   r-   rW   rT   r   r   r   rX   ÿ  rY   z,TestVectorsX25519Wycheproof.shortDescriptionc           	   
   C   s  |j dkr?zt|jƒ}W n, ty8 } z |jsJ ‚|jsJ ‚d|jv s%J ‚dt|ƒv s-J ‚W Y d }~d S d }~ww t|j	ƒ}n÷|j dv rŽzt
 |j¡}t
 |j	¡}W nã t
jys } z|jr`J ‚dt|ƒv shJ ‚W Y d }~d S d }~w ty�   |js~J ‚|jsƒJ ‚d|jv sŠJ ‚Y d S w |j dk�r0d|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d„ }||jd ƒ}||j	d ƒ}z
t|ƒ}t|ƒ}W nR t�y  } z0|j�r|jsõJ ‚d|jv süJ ‚dt|ƒv �sJ ‚W Y d }~d S dt|ƒv �sJ ‚W Y d }~d S d }~w t�y/   |j�s-J ‚Y nw td|j ƒ‚zt||dd„ d�}W n3 t�yR   |j�rOJ ‚Y d S  t�yt } z|j�r`J ‚dt|ƒv �siJ ‚W Y d }~d S d }~ww |  ||j¡ |j�s‚J ‚d S )NÚXdhCompÚLowOrderPubliczInvalid Curve25519©Ú
XdhAsnCompÚ
XdhPemCompúUnsupported ECCÚ
XdhJwkCompÚyr   ÚktyÚOKPÚcrvÚX25519c                 S   óF   |   dd¡  dd¡} dt| ƒd  }|dkr| d| 7 } t | ¡}|S ©Nú-ú+rª   ú/rZ   ú=©Úreplacer]   Úbase64Ú	b64decode©Ú	input_strÚpaddingÚdecoded_bytesr   r   r   Úbase64url_decode*  ó   
zATestVectorsX25519Wycheproof.test_verify.<locals>.base64url_decoder*   úIncorrect lengthúUnknown encodingc                 S   r,   r-   r   r   r   r   r   r   I  r.   z9TestVectorsX25519Wycheproof.test_verify.<locals>.<lambda>r/   r\   )rå   r   r^   r`   rb   ra   Úflagsre   r   rD   r   r_   ÚUnsupportedEccFeatureÚgetr   rd   r4   rf   ©	r6   rN   r7   rg   r8   r  Ú
jwk_publicÚjwk_privater:   r   r   r   rh     s’   


€û

€

ü



€ÿ
þ €þz'TestVectorsX25519Wycheproof.test_verifyc                 C   ri   ©Nz)Wycheproof XECDH Verify Test #%d (%s, %s)rj   rm   r   r   r   rn   S  ro   z#TestVectorsX25519Wycheproof.runTestN©
r   r   r   rS   rë   rð   rU   rX   rh   rn   r   r   r   r   râ   Ì  s    	Qrâ   c                   @   rá   )ÚTestVectorsX448WycheproofzWycheproof X448 testsc                 C   r?   )
Nc                 S   r@   rã   r   rA   r   r   r   rå   _  rC   z9TestVectorsX448Wycheproof.add_tests_hex.<locals>.encodingc                 S   ræ   rç   rè   rE   r   r   r   rD   b  ré   z8TestVectorsX448Wycheproof.add_tests_hex.<locals>.privaterG   rI   rå   rD   rJ   rM   rê   r   r   r   rë   ]  rR   z'TestVectorsX448Wycheproof.add_tests_hexc                 C   rì   )Nc                 S   r@   rã   r   rA   r   r   r   rå   p  rC   z;TestVectorsX448Wycheproof.add_tests_ascii.<locals>.encodingc                 S   r@   rí   r   rE   r   r   r   r^   s  rC   z9TestVectorsX448Wycheproof.add_tests_ascii.<locals>.publicc                 S   r@   rç   r   rE   r   r   r   rD   v  rC   z:TestVectorsX448Wycheproof.add_tests_ascii.<locals>.privaterG   rI   rå   rî   rJ   rM   rï   r   r   r   rð   n  rñ   z)TestVectorsX448Wycheproof.add_tests_asciic                 C   rò   )Nzx448_test.jsonzx448_asn_test.jsonzx448_pem_test.jsonzx448_jwk_test.jsonró   rT   r   r   r   rU   ƒ  rô   zTestVectorsX448Wycheproof.setUpc                 C   rV   r-   rW   rT   r   r   r   rX   Œ  rY   z*TestVectorsX448Wycheproof.shortDescriptionc           	   
   C   s€  |j dkrPzt|jƒ}W n< tyH } z0|jsJ ‚|jsJ ‚t|jƒdkr5d|jv s,J ‚dt|ƒv s4J ‚ndt|ƒv s=J ‚W Y d }~d S d }~ww t	|j
ƒ}�n"|j dv r®zt |j¡}t |j
¡}W �n tjy… } z|jrrJ ‚dt|ƒv szJ ‚W Y d }~d S d }~w ty­ } z|js‘J ‚|js–J ‚d|jv s¢d|jv s¢J ‚W Y d }~d S d }~ww |j d	k�rld
|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d„ }||jd ƒ}||j
d ƒ}z
t|ƒ}t	|ƒ}W nn t�y\ } zL|j�rH|j�sJ ‚t|jd ƒdk�r8d|jv �s.d|jv �s.J ‚dt|ƒv �s7J ‚n	dt|ƒv �sAJ ‚W Y d }~d S dt|ƒv �sQJ ‚W Y d }~d S d }~w t�yk   |j�siJ ‚Y nw td|j ƒ‚zt||dd„ d�}W n3 t�yŽ   |j�r‹J ‚Y d S  t�y° } z|j�rœJ ‚dt|ƒv �s¥J ‚W Y d }~d S d }~ww |  ||j¡ |j�s¾J ‚d S )Nrõ   é8   rö   zInvalid Curve448zIncorrect Curve448r÷   rú   ÚNonCanonicalPublicrû   rü   r   rý   rþ   rÿ   ÚX448c                 S   r  r  r  r  r   r   r   r  º  r  z?TestVectorsX448Wycheproof.test_verify.<locals>.base64url_decoder*   éK   r  r  c                 S   r,   r-   r   r   r   r   r   r   Ý  r.   z7TestVectorsX448Wycheproof.test_verify.<locals>.<lambda>r/   r\   )rå   r   r^   r`   rb   ra   r]   r  re   r   rD   r   r_   r  r  r   rd   r4   rf   r  r   r   r   rh   �  sž   


€ø	

€

€ü


€ÿ
þ €þz%TestVectorsX448Wycheproof.test_verifyc                 C   ri   r  rj   rm   r   r   r   rn   ç  ro   z!TestVectorsX448Wycheproof.runTestNr  r   r   r   r   r  Y  s    	Xr  c                 C   sl   g }|t tƒ7 }|tƒ g7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|tƒ g7 }|tƒ g7 }|  d¡}|r4	 |S )NÚ
slow_tests)	r   r   r>   rp   r�   rÌ   râ   r  r  )ÚconfigÚtestsr   r   r   r   Ú	get_testsí  s   
r#  Ú__main__c                   C   s   t  tƒ ¡S r-   )ÚunittestÚ	TestSuiter#  r   r   r   r   Úsuite   ré   r'  )ÚdefaultTest):Úrer	  r%  Úbinasciir   r   ÚCryptodome.Util.py3compatr   ÚCryptodome.Hashr   ÚCryptodome.PublicKeyr   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.SelfTest.loaderr   r	   ÚCryptodome.Protocolr
   ÚCryptodome.Protocol.DHr   r   r   r   r   ÚTestCaser   Útest_vectors_verifyÚ	enumerateÚidxrN   Ú
isinstancere   ÚmatchÚresÚgroupr[   rc   r    r!   r7   r"   r8   Úziutr9   r;   r=   Úsetattrr>   rp   r�   rÌ   râ   r  r#  r   r'  Úmainr   r   r   r   Ú<module>   s€    ûý	÷

þÿ
ý
ý
€I _T  
ý