o
    Mf(                  
   @   s  d dl Z d dl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 d dlmZmZ d dlmZ G d	d
 d
ejZeddddd dd dd dd dd dpUg ZeeD ]R\ZZeeerse deZesmJ edZqZe	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& qZG dd  d ejZ(G d!d" d"ejZ)i fd#d$Z*e+d%krd&d' Z,ej-d'd( dS dS ))    N)hexlify)bord)SHA256)ECC)list_test_cases)load_test_vectorsload_test_vectors_wycheproof)key_agreementc                   @   s   e Zd ZdS )FIPS_ECDH_Tests_KATN)__name__
__module____qualname__ r   r   c/var/www/html/humari/django-venv/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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   7       zecdh_test.<locals>.<lambda>
static_pubstatic_privkdfr	   assertEqualself
public_keyprivate_keyexp_responsezr   r   r   	ecdh_test0      r5   c                 C   r%   )Nc                 S   r&   r'   r   r   r   r   r   r   A   r(   zecdh_test_rev.<locals>.<lambda>r)   r-   r/   r   r   r   ecdh_test_rev:   r6   r7   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    O   s   z2TestVectorsECDHWycheproof.add_tests.<locals>.curvec                 S   s   t | d dS )Nprivater   r   )ur   r   r   r:   R   s   z4TestVectorsECDHWycheproof.add_tests.<locals>.private)r   
wycheproofzWycheproof ECDH (%s)r    r:   )	group_tagunit_tag)r   tv)r0   filenamer    r:   resultr   r   r   	add_testsM   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   r0   r   r   r   setUp^   s   






zTestVectorsECDHWycheproof.setUpc                 C   s   | j S r'   )rC   rD   r   r   r   shortDescriptionl   s   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)   zincompatible curve)lenpublicr   r   
import_keyr    
ValueErrorwarningvalid	constructr:   r	   	TypeErrorstrr.   shared)r0   r?   r1   r2   r4   er   r   r   test_verifyo   s4   

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   rT   )r0   r?   r   r   r   runTest   s   
z!TestVectorsECDHWycheproof.runTestN)	r   r   r   rC   rB   rE   rF   rT   rW   r   r   r   r   r8   I   s    r8   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+   r.   r   r0   r,   r4   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   rZ   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+   rb   rc   r.   r   r_   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   rZ   r'   r[   r   r   r   r   r      r^   z#ECDH_Tests.test_3.<locals>.<lambda>)r,   r*   r+   rc   s@   9e977ae45f33bf67f285d064d83e6632bcafe3a7d33fe571233bab4794ace759)r	   r*   r+   rc   r.   r   r_   r   r   r   test_3      
zECDH_Tests.test_3c                 C   re   )Nc                 S   rZ   r'   r[   r   r   r   r   r      r^   z#ECDH_Tests.test_4.<locals>.<lambda>)r,   r*   r+   rb   s@   c9532df6aa7e9dbe5fe85da31ee25ff19c179c88691ec4b8328cc2036dcdadf2)r	   r*   r+   rb   r.   r   r_   r   r   r   test_4   rg   zECDH_Tests.test_4c                 C   (   dd }| j tt|| j| j| jd d S )Nc                 S   rZ   r'   r[   r   r   r   r   r      r^   z#ECDH_Tests.test_5.<locals>.<lambda>)r,   r+   rb   rc   )assertRaisesrL   r	   r+   rb   rc   r0   r,   r   r   r   test_5      
zECDH_Tests.test_5c                 C   ri   )Nc                 S   rZ   r'   r[   r   r   r   r   r      r^   z#ECDH_Tests.test_6.<locals>.<lambda>)r,   r*   rb   rc   )rj   rL   r	   r*   rb   rc   rk   r   r   r   test_6   rm   zECDH_Tests.test_6c                 C   rY   )Nc                 S   rZ   r'   r[   r   r   r   r   r      r^   z#ECDH_Tests.test_7.<locals>.<lambda>)r,   rb   rc   s@   feb257ebe063078b1391aac07913283d7b642ad7df61b46dfc9cd6f420bb896a)r	   rb   rc   r.   r   r_   r   r   r   test_7   ra   zECDH_Tests.test_7c                 C   rY   )Nc                 S   rZ   r'   r[   r   r   r   r   r      r^   z#ECDH_Tests.test_8.<locals>.<lambda>)r,   r+   rb   s@   ee4dc995117476ed57fd17ff0ed44e9f0466d46b929443bc0db9380317583b04)r	   r+   rb   r.   r   r_   r   r   r   test_8   ra   zECDH_Tests.test_8c                 C   rY   )Nc                 S   rZ   r'   r[   r   r   r   r   r      r^   z#ECDH_Tests.test_9.<locals>.<lambda>)r,   r*   rc   s@   2351cc2014f7c40468fa072b5d30f706eeaeef7507311cd8e59bab3b43f03c51)r	   r*   rc   r.   r   r_   r   r   r   test_9   ra   zECDH_Tests.test_9c                 C   $   dd }| j tt|| j| jd d S )Nc                 S   rZ   r'   r[   r   r   r   r   r      r^   z$ECDH_Tests.test_10.<locals>.<lambda>)r,   r*   rb   )rj   rL   r	   r*   rb   rk   r   r   r   test_10      
zECDH_Tests.test_10c                 C   rr   )Nc                 S   rZ   r'   r[   r   r   r   r   r     r^   z$ECDH_Tests.test_11.<locals>.<lambda>)r,   r+   rc   )rj   rL   r	   r+   rc   rk   r   r   r   test_11  rt   zECDH_Tests.test_11c                 C   s   | j tt| j| jd d S )N)r*   r+   )rj   rL   r	   r*   r+   rD   r   r   r   test_12  s
   
zECDH_Tests.test_12N)r   r   r   r   rK   r+   r1   r*   rc   rb   r`   rd   rf   rh   rl   rn   ro   rp   rq   rs   ru   rv   r   r   r   r   rX      s"    








		rX   c                 C   s<   g }|t t7 }|t g7 }|t t7 }| d}|r	 |S )N
slow_tests)r   r
   r8   rX   get)configtestsrw   r   r   r   	get_tests  s   
r{   __main__c                   C   s   t t S r'   )unittest	TestSuiter{   r   r   r   r   suite"  s   r   )defaultTest).rer}   binasciir   Crypto.Util.py3compatr   Crypto.Hashr   Crypto.PublicKeyr   Crypto.SelfTest.st_commonr   Crypto.SelfTest.loaderr   r   Crypto.Protocol.DHr	   TestCaser
   test_vectors_verify	enumerateidxr?   
isinstancerQ   matchresgrouprH   rO   r   r   r1   r   r2   ziutr3   r5   r7   setattrr8   rX   r{   r   r   mainr   r   r   r   <module>   sp    	




I 