o
    `qiPw                  
   @   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 re !deZ"e"sJ 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re/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   i/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/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   
   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diutZqiutxZqiutyz\[([A-Za-z0-9-]+)\]   )curveZpoint_xZ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      r7   c                 C   r'   )Nc                 S   r(   r)   r   r   r   r   r   r   G   r*   zecdh_test_rev.<locals>.<lambda>r+   r/   r1   r   r   r   ecdh_test_rev@   r8   r9   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   r@   X   s   z4TestVectorsECDHWycheproof.add_tests.<locals>.privater   Z
wycheproofWycheproof ECDH (%s)r$   r@   Z	group_tagZunit_tagr	   tv)r2   filenamer$   r@   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)rG   descrJ   r2   r   r   r   setUpd   s   






zTestVectorsECDHWycheproof.setUpc                 C      | j S r)   rL   rM   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sJ 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	constructr@   r   	TypeErrorstrr0   shared)r2   rG   r3   r4   r6   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)rG   idcommentrH   rL   ra   r2   rG   r   r   r   runTest      
z!TestVectorsECDHWycheproof.runTestN)	r   r   r   rL   rJ   rN   rQ   ra   rg   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>)r.   r,   r-   s@   3960a1101d1193cbaffef4cc7202ebff783c22c6d2e0d5d530ffc66dc197ea9c)r   r,   r-   r0   r   r2   r.   r6   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   rk   r)   rl   r   r   r   r   r      ro   z#ECDH_Tests.test_2.<locals>.<lambda>)r.   r,   r-   eph_pubeph_privs@   7447b733d40c8fab2c633b3dc61e4a8c742f3a6af7e16fb0cc486f5bdb5d6ba2)r   r,   r-   rs   rt   r0   r   rp   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   rk   r)   rl   r   r   r   r   r      ro   z#ECDH_Tests.test_3.<locals>.<lambda>)r.   r,   r-   rt   s@   9e977ae45f33bf67f285d064d83e6632bcafe3a7d33fe571233bab4794ace759)r   r,   r-   rt   r0   r   rp   r   r   r   test_3      
zECDH_Tests.test_3c                 C   rv   )Nc                 S   rk   r)   rl   r   r   r   r   r      ro   z#ECDH_Tests.test_4.<locals>.<lambda>)r.   r,   r-   rs   s@   c9532df6aa7e9dbe5fe85da31ee25ff19c179c88691ec4b8328cc2036dcdadf2)r   r,   r-   rs   r0   r   rp   r   r   r   test_4   rx   zECDH_Tests.test_4c                 C   (   dd }| j tt|| j| j| jd d S )Nc                 S   rk   r)   rl   r   r   r   r   r      ro   z#ECDH_Tests.test_5.<locals>.<lambda>)r.   r-   rs   rt   )assertRaisesrY   r   r-   rs   rt   r2   r.   r   r   r   test_5      
zECDH_Tests.test_5c                 C   rz   )Nc                 S   rk   r)   rl   r   r   r   r   r      ro   z#ECDH_Tests.test_6.<locals>.<lambda>)r.   r,   rs   rt   )r{   rY   r   r,   rs   rt   r|   r   r   r   test_6   r~   zECDH_Tests.test_6c                 C   rj   )Nc                 S   rk   r)   rl   r   r   r   r   r      ro   z#ECDH_Tests.test_7.<locals>.<lambda>)r.   rs   rt   s@   feb257ebe063078b1391aac07913283d7b642ad7df61b46dfc9cd6f420bb896a)r   rs   rt   r0   r   rp   r   r   r   test_7   rr   zECDH_Tests.test_7c                 C   rj   )Nc                 S   rk   r)   rl   r   r   r   r   r      ro   z#ECDH_Tests.test_8.<locals>.<lambda>)r.   r-   rs   s@   ee4dc995117476ed57fd17ff0ed44e9f0466d46b929443bc0db9380317583b04)r   r-   rs   r0   r   rp   r   r   r   test_8   rr   zECDH_Tests.test_8c                 C   rj   )Nc                 S   rk   r)   rl   r   r   r   r   r      ro   z#ECDH_Tests.test_9.<locals>.<lambda>)r.   r,   rt   s@   2351cc2014f7c40468fa072b5d30f706eeaeef7507311cd8e59bab3b43f03c51)r   r,   rt   r0   r   rp   r   r   r   test_9   rr   zECDH_Tests.test_9c                 C   $   dd }| j tt|| j| jd d S )Nc                 S   rk   r)   rl   r   r   r   r   r     ro   z$ECDH_Tests.test_10.<locals>.<lambda>)r.   r,   rs   )r{   rY   r   r,   rs   r|   r   r   r   test_10      
zECDH_Tests.test_10c                 C   r   )Nc                 S   rk   r)   rl   r   r   r   r   r   
  ro   z$ECDH_Tests.test_11.<locals>.<lambda>)r.   r-   rt   )r{   rY   r   r-   rt   r|   r   r   r   test_11  r   zECDH_Tests.test_11c                 C   s   | j tt| j| jd d S )N)r,   r-   )r{   rY   r   r,   r-   rM   r   r   r   test_12  s
   
zECDH_Tests.test_12N)r   r   r   r   rX   r-   r3   r,   rt   rs   rq   ru   rw   ry   r}   r   r   r   r   r   r   r   r   r   r   r   ri      s"    








		ri   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))Z@a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4Z@e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4cZ@c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552)Z@4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0dZ@e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493Z@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   r0   r2   Ztvstv1tv2tv3priv_keypub_keyrI   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 )	NZ@0900000000000000000000000000000000000000000000000000000000000000c                 S   r(   r)   r   r   r   r   r   r   4  r*   z-X25519_Tests.test_rfc7748_2.<locals>.<lambda>r+   Z@422c8e7a6227d7bca1350b3e2bb7279f7897b87bb6854b783c60e80311ae3079  c                 S   r(   r)   r   r   r   r   r   r   @  r*   Z@684cf59ba83309552800ef566f2f4d3c1c3887c49360e3875f2eb94d99532c51)r   r
   r   r   r   r0   ranger2   kr   r   rI   _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 )
NZ@77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2aZ@8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6aZ@5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0ebZ@de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4fZ@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   r2   r   r   r   Ztv4Ztv5Zalice_priv_keyZalice_pub_keyZbob_priv_keyZbob_pub_keysecretZresult1Zresult2r   r   r   test_rfc7748_3G  (   zX25519_Tests.test_rfc7748_3c                 C   &   d}|D ]}|  ttjt| qd S )N)Z@0000000000000000000000000000000000000000000000000000000000000000Z@0100000000000000000000000000000000000000000000000000000000000000Z@e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800Z@5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157Z@ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fZ@edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fZ@eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f)r{   rY   r
   r   r   r2   Z	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))Zp3d262fddf9ec8e88495266fea19a34d28882acef045104d0d1aae121700a779c984c24f8cdd78fbff44943eba368f54b29259a4f1c600ad3Zp06fce640fa3487bfda5f6cf2d5263f8aad88334cbd07437f020f08f9814dc031ddbdc38c19c6da2583fa5429db94ada18aa7a7fb4ef8a086Zpce3e4ff95a60dc6697da1db1d85e6afbdf79b50a2412d7546d5f239fe14fbaadeb445fc66a01b0779d98223961111e21766282f73dd96b6f)Zp203d494428b8399352665ddca42f9de8fef600908e0d461cb021f8c538345dd77c3e4806e25f46d3315c44e0a5b4371282dd2c8d5be3095fZp0fbcc2f993cd56d3305b0b7d9e55d4c1a8fb5dbb52f8e9a1e9b6201b165d015894e56c4d3570bee52fe205e28a78b91cdfbde71ce8d157dbZp884a02576239ff7a2f2f63b2db6a9ff37047ac13568e1e30fe63c4a7ad1b3ee3a5700df34321d62077e63633c575c1c954514e99da7c179dc                 S   r(   r)   r   r   r   r   r   r     r*   z+X448_Tests.test_rfc7748_1.<locals>.<lambda>r+   r
   r   r   r   r   r0   r   r   r   r   r   z  r   zX448_Tests.test_rfc7748_1c                 C   r   )	NZp0500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c                 S   r(   r)   r   r   r   r   r   r     r*   z+X448_Tests.test_rfc7748_2.<locals>.<lambda>r+   Zp3f482c8a9f19b01e6c46ee9711d9dc14fd4bf67af30765c2ae2b846a4d23a8cd0db897086239492caf350b51f833868b9bc2b3bca9cf4113r   c                 S   r(   r)   r   r   r   r   r   r     r*   Zpaa3b4749d55b9daf1e5b00288826c467274ce3ebbdd5c17b975e09d4af6c67cf10d087202db88286e2b79fceea3ec353ef54faa26e219f38)r   r
   r   r   r   r0   r   r   r   r   r   r     r   zX448_Tests.test_rfc7748_2c                 C   r   )
NZp9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726bZp9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0Zp1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992dZp3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609Zp07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879dc                 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)Zp0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000Zp0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ZpfefffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffZpfffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffZp00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff)r{   rY   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   r=   r   r   r   encoding  r?   z;TestVectorsX25519Wycheproof.add_tests_hex.<locals>.encodingc                 S      t | d S Nr@   r   rA   r   r   r   r@        z:TestVectorsX25519Wycheproof.add_tests_hex.<locals>.privaterC   rD   r   r@   rE   rF   r2   rH   r   r@   rI   r   r   r   add_tests_hex  rK   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   r=   r   r   r   r     r?   z=TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.encodingc                 S   r<   NrW   r   rA   r   r   r   rW     r?   z;TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.publicc                 S   r<   r   r   rA   r   r   r   r@     r?   z<TestVectorsX25519Wycheproof.add_tests_ascii.<locals>.privaterC   rD   r   rW   r@   rE   rF   r2   rH   r   rW   r@   rI   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rG   rL   r   r   rM   r   r   r   rN        


z!TestVectorsX25519Wycheproof.setUpc                 C   rO   r)   rP   rM   r   r   r   rQ     rR   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 rz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sJ d|jv sJ Y d S w |j dkr0d|jv rd S d|jvrd S d|j	vrd S |jd	d
krd S |jddkrd S |j	ddkrd S dd }||jd }||j	d }z
t|}t|}W nR ty  } z0|jr|jsJ d|jv sJ 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sJ d S )NXdhCompLowOrderPubliczInvalid Curve25519Z
XdhAsnCompZ
XdhPemCompUnsupported ECC
XdhJwkCompyr   ktyOKPcrvZX25519c                 S   F   |  dd dd} dt| d  }|dkr| d| 7 } t| }|S N-+r   /rS   =replacerV   base64	b64decodeZ	input_strpaddingZ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+   rU   )r   r   rW   rY   r[   rZ   flagsr^   r   r@   r   rX   UnsupportedEccFeaturegetr   r]   r0   r_   	r2   rG   r3   r`   r4   r   Z
jwk_publicZjwk_privater6   r   r   r   ra     s   











 z'TestVectorsX25519Wycheproof.test_verifyc                 C   rb   Nz)Wycheproof XECDH Verify Test #%d (%s, %s)rc   rf   r   r   r   rg   S  rh   z#TestVectorsX25519Wycheproof.runTestN
r   r   r   rL   r   r   rN   rQ   ra   rg   r   r   r   r   r     s    	Qr   c                   @   r   )TestVectorsX448WycheproofzWycheproof X448 testsc                 C   r;   )
Nc                 S   r<   r   r   r=   r   r   r   r   _  r?   z9TestVectorsX448Wycheproof.add_tests_hex.<locals>.encodingc                 S   r   r   r   rA   r   r   r   r@   b  r   z8TestVectorsX448Wycheproof.add_tests_hex.<locals>.privaterC   rD   r   r@   rE   rF   r   r   r   r   r   ]  rK   z'TestVectorsX448Wycheproof.add_tests_hexc                 C   r   )Nc                 S   r<   r   r   r=   r   r   r   r   p  r?   z;TestVectorsX448Wycheproof.add_tests_ascii.<locals>.encodingc                 S   r<   r   r   rA   r   r   r   rW   s  r?   z9TestVectorsX448Wycheproof.add_tests_ascii.<locals>.publicc                 S   r<   r   r   rA   r   r   r   r@   v  r?   z:TestVectorsX448Wycheproof.add_tests_ascii.<locals>.privaterC   rD   r   r   rE   rF   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   rM   r   r   r   rN     r   zTestVectorsX448Wycheproof.setUpc                 C   rO   r)   rP   rM   r   r   r   rQ     rR   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 rz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sJ |jsJ d|jv sd|jv sJ W Y d }~d S d }~ww |j d	krld
|jv rd S d|jvrd S d|j
vrd S |jddkrd S |jddkrd S |j
ddkrd 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rJ Y d S  ty } z|jrJ dt|v sJ W Y d }~d S d }~ww | ||j |jsJ d S )Nr   8   r   zInvalid Curve448zIncorrect Curve448r   r   ZNonCanonicalPublicr   r   r   r   r   r   Z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+   rU   )r   r   rW   rY   r[   rZ   rV   r   r^   r   r@   r   rX   r   r   r   r]   r0   r_   r   r   r   r   ra     s   


	







 z%TestVectorsX448Wycheproof.test_verifyc                 C   rb   r   rc   rf   r   r   r   rg     rh   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:   ri   r   r   r   r   r   )configtestsr   r   r   r   	get_tests  s   
r   __main__c                   C   s   t t S r)   )unittestZ	TestSuiter   r   r   r   r   suite   r   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idxrG   
isinstancer^   matchresgrouprT   r\   r    r!   r3   r"   r4   Zziutr5   r7   r9   setattrr:   ri   r   r   r   r   r   r   r   mainr   r   r   r   <module>   s    	




I _T  
