U
    ÈZjPw  ã                
   @   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œƒpÒg ZeeƒD ]¨\ZZeee ƒ�re  !de¡Z"e"�st#‚e" $d¡Z%qÜe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/e0ede e.ƒ edkrÜe0ede e/ƒ qÜG 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ƒZ5G d*d+„ d+ejƒZ6i fd,d-„Z7e8d.k�rd/d0„ Z9ej:d0d1� 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   úe/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/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   s
   t | dƒS ©Né   ©Úint©Úxr   r   r   Ú<lambda>   ó    r   c                 C   s
   t | dƒS r   r   r   r   r   r   r      r   c                 C   s
   t | dƒS r   r   r   r   r   r   r      r   c                 C   s
   t | dƒS r   r   r   r   r   r   r       r   c                 C   s
   t | dƒS r   r   r   r   r   r   r   !   r   )ÚqcavsxÚqcavsyÚdiutZqiutxZqiutyz\[([A-Za-z0-9-]+)\]é   )ÚcurveZpoint_xZpoint_y©r#   Údc                 C   s"   t ||dd„ d�}|  ||¡ d S )Nc                 S   s   | S ©Nr   r   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   s    ýr3   c                 C   s"   t ||dd„ d�}|  ||¡ d S )Nc                 S   s   | S r&   r   r   r   r   r   r   G   r   zecdh_test_rev.<locals>.<lambda>r'   r+   r-   r   r   r   Úecdh_test_rev@   s    ýr4   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   s@   dd„ }dd„ }t d|d| d|id|id	�}|  j|7  _d S )
Nc                 S   s   | d S )Nr#   r   ©Úgr   r   r   r#   U   s    z2TestVectorsECDHWycheproof.add_tests.<locals>.curvec                 S   s   t | d dƒS )NÚprivater   r   ©Úur   r   r   r8   X   s    z4TestVectorsECDHWycheproof.add_tests.<locals>.private©r   Z
wycheproofúWycheproof ECDH (%s)r#   r8   ©Z	group_tagZunit_tag©r	   Útv)r.   Úfilenamer#   r8   Úresultr   r   r   Ú	add_testsS   s    ÿû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)r?   ÚdescrB   ©r.   r   r   r   ÚsetUpd   s    






zTestVectorsECDHWycheproof.setUpc                 C   s   | j S r&   ©rC   rD   r   r   r   ÚshortDescriptionr   s    z*TestVectorsECDHWycheproof.shortDescriptionc              
   C   s  t |jƒdkrd S z6t|jd ƒdkr:tj|j|jd�}nt |j¡}W n& tk
rn   |jsh|jrht	‚Y d S X tj
|j|jd�}zt||dd„ d�}W nX tk
r¶   |jr²t	‚Y nV tk
rð } z|jrÐt	‚dt|ƒksàt	‚W 5 d }~X Y nX |  ||j¡ |j�st	‚d S )	Nr   é   )Ú
curve_namer$   c                 S   s   | S r&   r   r   r   r   r   r   ˆ   r   z7TestVectorsECDHWycheproof.test_verify.<locals>.<lambda>r'   úincompatible curve)ÚlenÚpublicr   r   Ú
import_keyr#   Ú
ValueErrorÚwarningÚvalidÚAssertionErrorÚ	constructr8   r   Ú	TypeErrorÚstrr,   Úshared)r.   r?   r/   r0   r2   Úer   r   r   Útest_verifyu   s,    þ

"z%TestVectorsECDHWycheproof.test_verifyc                 C   s0   | j D ]$}d|j|j|jf | _|  |¡ qd S )Nz(Wycheproof ECDH Verify Test #%d (%s, %s)©r?   ÚidÚcommentr@   rC   rW   ©r.   r?   r   r   r   ÚrunTest’   s    
z!TestVectorsECDHWycheproof.runTestN)	r   r   r   rC   rB   rE   rG   rW   r\   r   r   r   r   r5   O   s   r5   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   s.   dd„ }t || j| jd�}|  t|ƒd¡ d S )Nc                 S   s   t  | ¡ ¡ S r&   ©r   ÚnewÚdigestr   r   r   r   r   £   r   z#ECDH_Tests.test_1.<locals>.<lambda>)r*   r(   r)   s@   3960a1101d1193cbaffef4cc7202ebff783c22c6d2e0d5d530ffc66dc197ea9c)r   r(   r)   r,   r   ©r.   r*   r2   r   r   r   Útest_1¡   s    ý
ÿzECDH_Tests.test_1c                 C   s6   dd„ }t || j| j| j| jd�}|  t|ƒd¡ d S )Nc                 S   s   t  | ¡ ¡ S r&   r^   r   r   r   r   r   ­   r   z#ECDH_Tests.test_2.<locals>.<lambda>)r*   r(   r)   Úeph_pubÚeph_privs@   7447b733d40c8fab2c633b3dc61e4a8c742f3a6af7e16fb0cc486f5bdb5d6ba2)r   r(   r)   rc   rd   r,   r   ra   r   r   r   Útest_2«   s    û
ÿzECDH_Tests.test_2c                 C   s2   dd„ }t || j| j| jd�}|  t|ƒd¡ d S )Nc                 S   s   t  | ¡ ¡ S r&   r^   r   r   r   r   r   ¹   r   z#ECDH_Tests.test_3.<locals>.<lambda>)r*   r(   r)   rd   s@   9e977ae45f33bf67f285d064d83e6632bcafe3a7d33fe571233bab4794ace759)r   r(   r)   rd   r,   r   ra   r   r   r   Útest_3·   s    ü
ÿzECDH_Tests.test_3c                 C   s2   dd„ }t || j| j| jd�}|  t|ƒd¡ d S )Nc                 S   s   t  | ¡ ¡ S r&   r^   r   r   r   r   r   Ä   r   z#ECDH_Tests.test_4.<locals>.<lambda>)r*   r(   r)   rc   s@   c9532df6aa7e9dbe5fe85da31ee25ff19c179c88691ec4b8328cc2036dcdadf2)r   r(   r)   rc   r,   r   ra   r   r   r   Útest_4Â   s    ü
ÿzECDH_Tests.test_4c                 C   s(   dd„ }| j tt|| j| j| jd� d S )Nc                 S   s   t  | ¡ ¡ S r&   r^   r   r   r   r   r   Ï   r   z#ECDH_Tests.test_5.<locals>.<lambda>)r*   r)   rc   rd   )ÚassertRaisesrN   r   r)   rc   rd   ©r.   r*   r   r   r   Útest_5Í   s    ûzECDH_Tests.test_5c                 C   s(   dd„ }| j tt|| j| j| jd� d S )Nc                 S   s   t  | ¡ ¡ S r&   r^   r   r   r   r   r   Ù   r   z#ECDH_Tests.test_6.<locals>.<lambda>)r*   r(   rc   rd   )rh   rN   r   r(   rc   rd   ri   r   r   r   Útest_6×   s    ûzECDH_Tests.test_6c                 C   s.   dd„ }t || j| jd�}|  t|ƒd¡ d S )Nc                 S   s   t  | ¡ ¡ S r&   r^   r   r   r   r   r   ã   r   z#ECDH_Tests.test_7.<locals>.<lambda>)r*   rc   rd   s@   feb257ebe063078b1391aac07913283d7b642ad7df61b46dfc9cd6f420bb896a)r   rc   rd   r,   r   ra   r   r   r   Útest_7á   s    ý
ÿzECDH_Tests.test_7c                 C   s.   dd„ }t || j| jd�}|  t|ƒd¡ d S )Nc                 S   s   t  | ¡ ¡ S r&   r^   r   r   r   r   r   í   r   z#ECDH_Tests.test_8.<locals>.<lambda>)r*   r)   rc   s@   ee4dc995117476ed57fd17ff0ed44e9f0466d46b929443bc0db9380317583b04)r   r)   rc   r,   r   ra   r   r   r   Útest_8ë   s    ý
ÿzECDH_Tests.test_8c                 C   s.   dd„ }t || j| jd�}|  t|ƒd¡ d S )Nc                 S   s   t  | ¡ ¡ S r&   r^   r   r   r   r   r   ÷   r   z#ECDH_Tests.test_9.<locals>.<lambda>)r*   r(   rd   s@   2351cc2014f7c40468fa072b5d30f706eeaeef7507311cd8e59bab3b43f03c51)r   r(   rd   r,   r   ra   r   r   r   Útest_9õ   s    ý
ÿzECDH_Tests.test_9c                 C   s$   dd„ }| j tt|| j| jd� d S )Nc                 S   s   t  | ¡ ¡ S r&   r^   r   r   r   r   r     r   z$ECDH_Tests.test_10.<locals>.<lambda>)r*   r(   rc   )rh   rN   r   r(   rc   ri   r   r   r   Útest_10ÿ   s    üzECDH_Tests.test_10c                 C   s$   dd„ }| j tt|| j| jd� d S )Nc                 S   s   t  | ¡ ¡ S r&   r^   r   r   r   r   r   
  r   z$ECDH_Tests.test_11.<locals>.<lambda>)r*   r)   rd   )rh   rN   r   r)   rd   ri   r   r   r   Útest_11  s    üzECDH_Tests.test_11c                 C   s   | j tt| j| jd� d S )N)r(   r)   )rh   rN   r   r(   r)   rD   r   r   r   Útest_12  s
    ýzECDH_Tests.test_12N)r   r   r   r   rM   r)   r/   r(   rd   rc   rb   re   rf   rg   rj   rk   rl   rm   rn   ro   rp   rq   r   r   r   r   r]   ˜   s    








		r]   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚX25519_Testsc                 C   sV   d}|D ]H\}}}t  t|ƒ¡}t  t|ƒ¡}t||dd„ d�}|  |t|ƒ¡ qd S )N))Z@a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4Z@e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4cZ@c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552)Z@4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0dZ@e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493Z@95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957c                 S   s   | S r&   r   r   r   r   r   r   *  r   z-X25519_Tests.test_rfc7748_1.<locals>.<lambda>r'   ©r
   r   r   r   r   r,   ©r.   ZtvsÚtv1Útv2Útv3Úpriv_keyÚpub_keyrA   r   r   r   Útest_rfc7748_1  s    	þzX25519_Tests.test_rfc7748_1c                 C   sŠ   t dƒ}t |¡}t |¡}t||dd„ d�}|  |t dƒ¡ tdƒD ].}t |¡}t |¡}|}t||dd„ d�}qF|  |t dƒ¡ d S )	NZ@0900000000000000000000000000000000000000000000000000000000000000c                 S   s   | S r&   r   r   r   r   r   r   4  r   z-X25519_Tests.test_rfc7748_2.<locals>.<lambda>r'   Z@422c8e7a6227d7bca1350b3e2bb7279f7897b87bb6854b783c60e80311ae3079éç  c                 S   s   | S r&   r   r   r   r   r   r   @  r   Z@684cf59ba83309552800ef566f2f4d3c1c3887c49360e3875f2eb94d99532c51)r   r
   r   r   r   r,   Úrange©r.   Úkrx   ry   rA   Ú_r   r   r   Útest_rfc7748_2-  s.    

þþ

þþzX25519_Tests.test_rfc7748_2c                 C   s”   d}d}d}d}d}t  t|ƒ¡}t  t|ƒ¡}t  t|ƒ¡}t  t|ƒ¡}	t|ƒ}
t||dd„ d�}t|	|d	d„ d�}|  ||
¡ |  ||
¡ d S )
NZ@77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2aZ@8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6aZ@5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0ebZ@de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4fZ@4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742c                 S   s   | S r&   r   r   r   r   r   r   V  r   z-X25519_Tests.test_rfc7748_3.<locals>.<lambda>r'   c                 S   s   | S r&   r   r   r   r   r   r   Y  r   rs   ©r.   ru   rv   rw   Ztv4Ztv5Zalice_priv_keyZalice_pub_keyZbob_priv_keyZbob_pub_keyÚsecretZresult1Zresult2r   r   r   Útest_rfc7748_3G  s(    þþzX25519_Tests.test_rfc7748_3c                 C   s&   d}|D ]}|   ttjt|ƒ¡ qd S )N)Z@0000000000000000000000000000000000000000000000000000000000000000Z@0100000000000000000000000000000000000000000000000000000000000000Z@e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800Z@5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157Z@ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fZ@edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fZ@eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f)rh   rN   r
   r   r   ©r.   Z	weak_keysr   r   r   r   Ú	test_weak]  s    þzX25519_Tests.test_weakN©r   r   r   rz   r€   rƒ   r…   r   r   r   r   rr     s   rr   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú
X448_Testsc                 C   sV   d}|D ]H\}}}t  t|ƒ¡}t  t|ƒ¡}t||dd„ d�}|  |t|ƒ¡ qd S )N))Zp3d262fddf9ec8e88495266fea19a34d28882acef045104d0d1aae121700a779c984c24f8cdd78fbff44943eba368f54b29259a4f1c600ad3Zp06fce640fa3487bfda5f6cf2d5263f8aad88334cbd07437f020f08f9814dc031ddbdc38c19c6da2583fa5429db94ada18aa7a7fb4ef8a086Zpce3e4ff95a60dc6697da1db1d85e6afbdf79b50a2412d7546d5f239fe14fbaadeb445fc66a01b0779d98223961111e21766282f73dd96b6f)Zp203d494428b8399352665ddca42f9de8fef600908e0d461cb021f8c538345dd77c3e4806e25f46d3315c44e0a5b4371282dd2c8d5be3095fZp0fbcc2f993cd56d3305b0b7d9e55d4c1a8fb5dbb52f8e9a1e9b6201b165d015894e56c4d3570bee52fe205e28a78b91cdfbde71ce8d157dbZp884a02576239ff7a2f2f63b2db6a9ff37047ac13568e1e30fe63c4a7ad1b3ee3a5700df34321d62077e63633c575c1c954514e99da7c179dc                 S   s   | S r&   r   r   r   r   r   r   ‰  r   z+X448_Tests.test_rfc7748_1.<locals>.<lambda>r'   ©r
   r   r   r   r   r,   rt   r   r   r   rz   z  s    	þzX448_Tests.test_rfc7748_1c                 C   sŠ   t dƒ}t |¡}t |¡}t||dd„ d�}|  |t dƒ¡ tdƒD ].}t |¡}t |¡}|}t||dd„ d�}qF|  |t dƒ¡ d S )	NZp0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c                 S   s   | S r&   r   r   r   r   r   r   “  r   z+X448_Tests.test_rfc7748_2.<locals>.<lambda>r'   Zp3f482c8a9f19b01e6c46ee9711d9dc14fd4bf67af30765c2ae2b846a4d23a8cd0db897086239492caf350b51f833868b9bc2b3bca9cf4113r{   c                 S   s   | S r&   r   r   r   r   r   r   Ÿ  r   Zpaa3b4749d55b9daf1e5b00288826c467274ce3ebbdd5c17b975e09d4af6c67cf10d087202db88286e2b79fceea3ec353ef54faa26e219f38)r   r
   r   r   r   r,   r|   r}   r   r   r   r€   Œ  s.    

þþ

þþzX448_Tests.test_rfc7748_2c                 C   s”   d}d}d}d}d}t  t|ƒ¡}t  t|ƒ¡}t  t|ƒ¡}t  t|ƒ¡}	t|ƒ}
t||dd„ d�}t|	|d	d„ d�}|  ||
¡ |  ||
¡ d S )
NZp9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726bZp9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0Zp1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992dZp3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609Zp07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879dc                 S   s   | S r&   r   r   r   r   r   r   µ  r   z+X448_Tests.test_rfc7748_3.<locals>.<lambda>r'   c                 S   s   | S r&   r   r   r   r   r   r   ¸  r   rˆ   r�   r   r   r   rƒ   ¦  s(    þþzX448_Tests.test_rfc7748_3c                 C   s&   d}|D ]}|   ttjt|ƒ¡ qd S )N)Zp0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Zp0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ZpfefffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffZpfffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffZp00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff)rh   rN   r
   r   r   r„   r   r   r   r…   ¼  s    þzX448_Tests.test_weakNr†   r   r   r   r   r‡   x  s   r‡   c                   @   s@   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   s@   dd„ }dd„ }t d|d| d|id|id	�}|  j|7  _d S )
Nc                 S   s   | d S ©NÚtyper   r6   r   r   r   ÚencodingÒ  s    z;TestVectorsX25519Wycheproof.add_tests_hex.<locals>.encodingc                 S   s   t | d ƒS ©Nr8   ©r   r9   r   r   r   r8   Õ  s    z:TestVectorsX25519Wycheproof.add_tests_hex.<locals>.privater;   r<   rŒ   r8   r=   r>   ©r.   r@   rŒ   r8   rA   r   r   r   Úadd_tests_hexÐ  s    ÿûz)TestVectorsX25519Wycheproof.add_tests_hexc                 C   sJ   dd„ }dd„ }dd„ }t d|d| d	|i||d
œd�}|  j|7  _d S )Nc                 S   s   | d S rŠ   r   r6   r   r   r   rŒ   ã  s    z=TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.encodingc                 S   s   | d S ©NrL   r   r9   r   r   r   rL   æ  s    z;TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.publicc                 S   s   | d S r�   r   r9   r   r   r   r8   é  s    z<TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.privater;   r<   rŒ   ©rL   r8   r=   r>   ©r.   r@   rŒ   rL   r8   rA   r   r   r   Úadd_tests_asciiá  s    ÿÿûz+TestVectorsX25519Wycheproof.add_tests_asciic                 C   s8   g | _ d | _|  d¡ |  d¡ |  d¡ |  d¡ d S )Nzx25519_test.jsonzx25519_asn_test.jsonzx25519_pem_test.jsonzx25519_jwk_test.json©r?   rC   r�   r”   rD   r   r   r   rE   ö  s    


z!TestVectorsX25519Wycheproof.setUpc                 C   s   | j S r&   rF   rD   r   r   r   rG   ÿ  s    z,TestVectorsX25519Wycheproof.shortDescriptionc           	   
   C   s0  |j dkr‚zt|jƒ}W nZ tk
rr } z<|js4t‚|js>t‚d|jksLt‚dt|ƒks\t‚W Y ¢d S d }~X Y nX t	|j
ƒ}�n|j dk�r2zt |j¡}t |j
¡}W n‚ tjk
rî } z$|jrÈt‚dt|ƒksØt‚W Y ¢d S d }~X Y n@ tk
�r,   |j�s
t‚|j�st‚d|jk�s&t‚Y d S X �nf|j dk�rŒd|jk�rNd S d|jk�r^d S d|j
k�rnd 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 n  tk
�rh } z`|j�r<|j�st‚d|jk�s t‚dt|ƒk�s2t‚W Y ¢$d S dt|ƒk�sNt‚W Y ¢d S W 5 d }~X Y n" tk
�rˆ   |j�s„t‚Y nX ntd|j ƒ‚zt||dd„ d�}W nb tk
�rÐ   |j�rÌt‚Y n\ tk
�r } z"|j�rît‚dt|ƒk�s t‚W 5 d }~X Y nX |  ||j¡ |j�s,t‚d S )NÚXdhCompÚLowOrderPubliczInvalid Curve25519©Z
XdhAsnCompZ
XdhPemCompúUnsupported ECCÚ
XdhJwkCompÚyr   ÚktyÚOKPÚcrvZX25519c                 S   sF   |   dd¡  dd¡} dt| ƒd  }|dkr8| d| 7 } t | ¡}|S ©Nú-ú+r   ú/rH   ú=©ÚreplacerK   Úbase64Ú	b64decode©Z	input_strÚpaddingZdecoded_bytesr   r   r   Úbase64url_decode*  s    
zATestVectorsX25519Wycheproof.test_verify.<locals>.base64url_decoder%   úIncorrect lengthúUnknown encodingc                 S   s   | S r&   r   r   r   r   r   r   I  r   z9TestVectorsX25519Wycheproof.test_verify.<locals>.<lambda>r'   rJ   )rŒ   r   rL   rN   rP   rQ   rO   ÚflagsrT   r   r8   r   rM   ÚUnsupportedEccFeatureÚgetr   rS   r,   rU   ©	r.   r?   r/   rV   r0   rª   Z
jwk_publicZjwk_privater2   r   r   r   rW     s‚    




þ
$z'TestVectorsX25519Wycheproof.test_verifyc                 C   s0   | j D ]$}d|j|j|jf | _|  |¡ qd S ©Nz)Wycheproof XECDH Verify Test #%d (%s, %s)rX   r[   r   r   r   r\   S  s    
z#TestVectorsX25519Wycheproof.runTestN©
r   r   r   rC   r�   r”   rE   rG   rW   r\   r   r   r   r   r‰   Ì  s   	Qr‰   c                   @   s@   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 )ÚTestVectorsX448WycheproofzWycheproof X448 testsc                 C   s@   dd„ }dd„ }t d|d| d|id|id	�}|  j|7  _d S )
Nc                 S   s   | d S rŠ   r   r6   r   r   r   rŒ   _  s    z9TestVectorsX448Wycheproof.add_tests_hex.<locals>.encodingc                 S   s   t | d ƒS r�   rŽ   r9   r   r   r   r8   b  s    z8TestVectorsX448Wycheproof.add_tests_hex.<locals>.privater;   r<   rŒ   r8   r=   r>   r�   r   r   r   r�   ]  s    ÿûz'TestVectorsX448Wycheproof.add_tests_hexc                 C   sJ   dd„ }dd„ }dd„ }t d|d| d	|i||d
œd�}|  j|7  _d S )Nc                 S   s   | d S rŠ   r   r6   r   r   r   rŒ   p  s    z;TestVectorsX448Wycheproof.add_tests_ascii.<locals>.encodingc                 S   s   | d S r‘   r   r9   r   r   r   rL   s  s    z9TestVectorsX448Wycheproof.add_tests_ascii.<locals>.publicc                 S   s   | d S r�   r   r9   r   r   r   r8   v  s    z:TestVectorsX448Wycheproof.add_tests_ascii.<locals>.privater;   r<   rŒ   r’   r=   r>   r“   r   r   r   r”   n  s    ÿÿûz)TestVectorsX448Wycheproof.add_tests_asciic                 C   s8   g | _ d | _|  d¡ |  d¡ |  d¡ |  d¡ d S )Nzx448_test.jsonzx448_asn_test.jsonzx448_pem_test.jsonzx448_jwk_test.jsonr•   rD   r   r   r   rE   ƒ  s    


zTestVectorsX448Wycheproof.setUpc                 C   s   | j S r&   rF   rD   r   r   r   rG   Œ  s    z*TestVectorsX448Wycheproof.shortDescriptionc           	   
   C   s¤  |j dkr¢zt|jƒ}W nz tk
r’ } z\|js4t‚|js>t‚t|jƒdkrld|jksZt‚dt	|ƒks|t‚ndt	|ƒks|t‚W Y ¢d S d }~X Y nX t
|jƒ}�nj|j dk�rrzt |j¡}t |j¡}W n¢ tjk
�r } z$|jrêt‚dt	|ƒksút‚W Y ¢d S d }~X Y n^ tk
�rl } z>|j�s.t‚|j�s:t‚d|jk�sVd|jk�sVt‚W Y ¢d S d }~X Y nX �nš|j d	k�r d
|jk�rŽd S d|jk�ržd S d|jk�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 nÔ tk
�rÜ } z”|j�r°|j�sPt‚t|jd ƒdk�r”d|jk�s€d|jk�s€t‚dt	|ƒk�s¦t‚ndt	|ƒk�s¦t‚W Y ¢$d S dt	|ƒk�sÂt‚W Y ¢d S W 5 d }~X Y n" tk
�rü   |j�søt‚Y nX ntd|j ƒ‚zt||dd„ d�}W nb tk
�rD   |j�r@t‚Y n\ tk
�r„ } z"|j�rbt‚dt	|ƒk�stt‚W 5 d }~X Y nX |  ||j¡ |j�s t‚d S )Nr–   é8   r—   zInvalid Curve448zIncorrect Curve448r˜   r™   ZNonCanonicalPublicrš   r›   r   rœ   r�   rž   ZX448c                 S   sF   |   dd¡  dd¡} dt| ƒd  }|dkr8| d| 7 } t | ¡}|S rŸ   r¤   r¨   r   r   r   rª   º  s    
z?TestVectorsX448Wycheproof.test_verify.<locals>.base64url_decoder%   éK   r«   r¬   c                 S   s   | S r&   r   r   r   r   r   r   Ý  r   z7TestVectorsX448Wycheproof.test_verify.<locals>.<lambda>r'   rJ   )rŒ   r   rL   rN   rP   rQ   rO   rK   r­   rT   r   r8   r   rM   r®   r¯   r   rS   r,   rU   r°   r   r   r   rW   �  sŽ    



ÿ
þ
$z%TestVectorsX448Wycheproof.test_verifyc                 C   s0   | j D ]$}d|j|j|jf | _|  |¡ qd S r±   rX   r[   r   r   r   r\   ç  s    
z!TestVectorsX448Wycheproof.runTestNr²   r   r   r   r   r³   Y  s   	Xr³   c                 C   sj   g }|t tƒ7 }|tƒ g7 }|t tƒ7 }|t tƒ7 }|t tƒ7 }|tƒ g7 }|tƒ g7 }|  d¡}|rf|S )NÚ
slow_tests)	r   r   r5   r]   rr   r‡   r‰   r³   r¯   )ÚconfigZtestsr¶   r   r   r   Ú	get_testsí  s    
r¸   Ú__main__c                   C   s   t  tƒ ¡S r&   )ÚunittestZ	TestSuiter¸   r   r   r   r   Úsuite   s    r»   )ZdefaultTest);Úrer¦   rº   Úbinasciir   r   ZCrypto.Util.py3compatr   ZCrypto.Hashr   ZCrypto.PublicKeyr   ZCrypto.SelfTest.st_commonr   ZCrypto.SelfTest.loaderr   r	   ZCrypto.Protocolr
   ZCrypto.Protocol.DHr   r   r   r   r   ZTestCaser   Ztest_vectors_verifyÚ	enumerateÚidxr?   Ú
isinstancerT   ÚmatchÚresrQ   ÚgrouprI   rR   r   r    r/   r!   r0   Zziutr1   r3   r4   Úsetattrr5   r]   rr   r‡   r‰   r³   r¸   r   r»   Úmainr   r   r   r   Ú<module>   sz   ûý	÷

þÿý
ý

I _T  
