
    h(                        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
ej"                        Z edddd d d d d d      xs g Z ee      D ]  \  ZZ eee      r) e j2                  de      ZesJ ej7                  d      Z8 e	j:                  eej<                  ej>                        Z  e	j:                  eejB                        Z"ejF                  Z$e e"e$fdZ%e e"e$fdZ& e'edez  e%       edk(  s e'edez  e&         G d dej"                        Z( G d dej"                        Z)i fd Z*e+d!k(  rd" Z, ejZ                  d#$       yy)%    N)hexlify)bord)SHA256)ECC)list_test_cases)load_test_vectorsload_test_vectors_wycheproof)key_agreementc                       e Zd Zy)FIPS_ECDH_Tests_KATN)__name__
__module____qualname__     m/var/www/html/retail-simulation-api/retail/lib/python3.12/site-packages/Crypto/SelfTest/Protocol/test_ecdh.pyr   r      s    r   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2Jr   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                 F    t        ||d       }| j                  ||       y )Nc                     | S Nr   r   s    r   r   zecdh_test.<locals>.<lambda>7       ar   
static_pubstatic_privkdfr
   assertEqualself
public_keyprivate_keyexp_responsezs        r   	ecdh_testr=   0   )     %'! 	L)r   c                 F    t        ||d       }| j                  ||       y )Nc                     | S r/   r   r   s    r   r   zecdh_test_rev.<locals>.<lambda>A   r0   r   r1   r5   r7   s        r   ecdh_test_revrA   :   r>   r   ztest_verify_positive_%dztest_verify_positive_rev_%dc                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestVectorsECDHWycheproofzWycheproof ECDH testsc                 h    d }d }t        d|d|z  d|id|i      }| xj                  |z  c_        y )Nc                     | d   S )Nr(   r   )gs    r   r(   z2TestVectorsECDHWycheproof.add_tests.<locals>.curveO   s    W:r   c                      t        | d   d      S )Nprivater   r   )us    r   rH   z4TestVectorsECDHWycheproof.add_tests.<locals>.privateR   s    q|R((r   )r   
wycheproofzWycheproof ECDH (%s)r(   rH   )	group_tagunit_tag)r	   tv)r8   filenamer(   rH   results        r   	add_testsz#TestVectorsECDHWycheproof.add_testsM   sI    		) ..H.6.D08/99@%8H8A77K0 	6r   c                 0   g | _         d | _        | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       | j                  d       y )	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)rM   descrP   r8   s    r   setUpzTestVectorsECDHWycheproof.setUp^   sx    	9:9:9:9:12121212r   c                     | j                   S r/   )rR   rS   s    r   shortDescriptionz*TestVectorsECDHWycheproof.shortDescriptionl   s    yyr   c                    t        |j                        dk(  ry 	 t        |j                  d         dk(  r,t        j                  |j                  |j
                        }nt        j                  |j                        }t        j                  |j
                  |j                        }	 t        ||d       }| j                  ||j                         |j                  sJ y # t        $ r |j                  s|j                  rJ Y y w xY w# t        $ r |j                  rJ Y y t        $ r'}|j                  rJ dt        |      v sJ Y d }~y d }~ww xY w)Nr      )
curve_namer+   c                     | S r/   r   r   s    r   r   z7TestVectorsECDHWycheproof.test_verify.<locals>.<lambda>   s    Ar   r1   zincompatible curve)lenpublicr   r   
import_keyr(   
ValueErrorwarningvalid	constructrH   r
   r6   shared	TypeErrorstr)r8   rM   r9   r:   r<   es         r   test_verifyz%TestVectorsECDHWycheproof.test_verifyo   s   ryy>Q	BIIaL!Q& ^^BII"((K
 ^^BII6

 mm"((bjjA	*5"-/A Q		*88O8#  	::RXX--	  	 xx<x 	2xx<'3q6111	2s0   A&C' -D '#DDE)E1EEc                     | j                   D ]>  }d|j                  |j                  |j                  fz  | _        | j                  |       @ y )Nz(Wycheproof ECDH Verify Test #%d (%s, %s))rM   idcommentrN   rR   rf   )r8   rM   s     r   runTestz!TestVectorsECDHWycheproof.runTest   s@    ''BBbeeRZZY[YdYdEeeDIR  r   N)	r   r   r   rR   rP   rT   rV   rf   rj   r   r   r   rC   rC   I   s     "D"3:!r   rC   c                       e Zd Z ej                  d      Z ej                  d      j                         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y)
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                        }| j                  t	        |      d       y )Nc                 H    t        j                  |       j                         S r/   r   newdigestr   s    r   r   z#ECDH_Tests.test_1.<locals>.<lambda>       

1,,.r   )r4   r2   r3   s@   3960a1101d1193cbaffef4cc7202ebff783c22c6d2e0d5d530ffc66dc197ea9c)r
   r2   r3   r6   r   r8   r4   r<   s      r   test_1zECDH_Tests.test_1   s>    .?? ,,. 	[	]r   c                     d }t        || j                  | j                  | j                  | j                        }| j                  t        |      d       y )Nc                 H    t        j                  |       j                         S r/   ro   r   s    r   r   z#ECDH_Tests.test_2.<locals>.<lambda>   rr   r   )r4   r2   r3   eph_pubeph_privs@   7447b733d40c8fab2c633b3dc61e4a8c742f3a6af7e16fb0cc486f5bdb5d6ba2)r
   r2   r3   rw   rx   r6   r   rs   s      r   test_2zECDH_Tests.test_2   sL    .?? ,,( 	\	^r   c                     d }t        || j                  | j                  | j                        }| j	                  t        |      d       y )Nc                 H    t        j                  |       j                         S r/   ro   r   s    r   r   z#ECDH_Tests.test_3.<locals>.<lambda>   rr   r   )r4   r2   r3   rx   s@   9e977ae45f33bf67f285d064d83e6632bcafe3a7d33fe571233bab4794ace759)r
   r2   r3   rx   r6   r   rs   s      r   test_3zECDH_Tests.test_3   sE    .?? ,,	(
 	\	^r   c                     d }t        || j                  | j                  | j                        }| j	                  t        |      d       y )Nc                 H    t        j                  |       j                         S r/   ro   r   s    r   r   z#ECDH_Tests.test_4.<locals>.<lambda>   rr   r   )r4   r2   r3   rw   s@   c9532df6aa7e9dbe5fe85da31ee25ff19c179c88691ec4b8328cc2036dcdadf2)r
   r2   r3   rw   r6   r   rs   s      r   test_4zECDH_Tests.test_4   sE    .?? ,,	&
 	\	^r   c                     d }| j                  t        t        || j                  | j                  | j
                         y )Nc                 H    t        j                  |       j                         S r/   ro   r   s    r   r   z#ECDH_Tests.test_5.<locals>.<lambda>   rr   r   )r4   r3   rw   rx   )assertRaisesr^   r
   r3   rw   rx   r8   r4   s     r   test_5zECDH_Tests.test_5   s9    .* ,, 	 	(r   c                     d }| j                  t        t        || j                  | j                  | j
                         y )Nc                 H    t        j                  |       j                         S r/   ro   r   s    r   r   z#ECDH_Tests.test_6.<locals>.<lambda>   rr   r   )r4   r2   rw   rx   )r   r^   r
   r2   rw   rx   r   s     r   test_6zECDH_Tests.test_6   s7    .*?? 	 	(r   c                     d }t        || j                  | j                        }| j                  t	        |      d       y )Nc                 H    t        j                  |       j                         S r/   ro   r   s    r   r   z#ECDH_Tests.test_7.<locals>.<lambda>   rr   r   )r4   rw   rx   s@   feb257ebe063078b1391aac07913283d7b642ad7df61b46dfc9cd6f420bb896a)r
   rw   rx   r6   r   rs   s      r   test_7zECDH_Tests.test_7   s<    .( 	\	^r   c                     d }t        || j                  | j                        }| j                  t	        |      d       y )Nc                 H    t        j                  |       j                         S r/   ro   r   s    r   r   z#ECDH_Tests.test_8.<locals>.<lambda>   rr   r   )r4   r3   rw   s@   ee4dc995117476ed57fd17ff0ed44e9f0466d46b929443bc0db9380317583b04)r
   r3   rw   r6   r   rs   s      r   test_8zECDH_Tests.test_8   s>    . ,,& 	\	^r   c                     d }t        || j                  | j                        }| j                  t	        |      d       y )Nc                 H    t        j                  |       j                         S r/   ro   r   s    r   r   z#ECDH_Tests.test_9.<locals>.<lambda>   rr   r   )r4   r2   rx   s@   2351cc2014f7c40468fa072b5d30f706eeaeef7507311cd8e59bab3b43f03c51)r
   r2   rx   r6   r   rs   s      r   test_9zECDH_Tests.test_9   s<    .??( 	\	^r   c                 n    d }| j                  t        t        || j                  | j                         y )Nc                 H    t        j                  |       j                         S r/   ro   r   s    r   r   z$ECDH_Tests.test_10.<locals>.<lambda>   rr   r   )r4   r2   rw   )r   r^   r
   r2   rw   r   s     r   test_10zECDH_Tests.test_10   s0    .*??	 	 	&r   c                 n    d }| j                  t        t        || j                  | j                         y )Nc                 H    t        j                  |       j                         S r/   ro   r   s    r   r   z$ECDH_Tests.test_11.<locals>.<lambda>  rr   r   )r4   r3   rx   )r   r^   r
   r3   rx   r   s     r   test_11zECDH_Tests.test_11  s2    .* ,,	 	 	(r   c                 f    | j                  t        t        | j                  | j                         y )N)r2   r3   )r   r^   r
   r2   r3   rS   s    r   test_12zECDH_Tests.test_12  s*    *?? ,, 	 	.r   N)r   r   r   r   r]   r3   r9   r2   rx   rw   rt   ry   r|   r   r   r   r   r   r   r   r   r   r   r   r   rl   rl      s     #..  "X  YK  !W  X  c  c  eJs~~  U  VHcnn  T  UG]
^	^	^((^^^&(.r   rl   c                     g }|t        t              z  }|t               gz  }|t        t              z  }| j	                  d      }|r	 |S )N
slow_tests)r   r   rC   rl   get)configtestsr   s      r   	get_testsr     sP    E	_011E	')**E	_Z((EL)JLr   __main__c                  <    t        j                  t                     S r/   )unittest	TestSuiter   r   r   r   suiter   "  s    !!)+..r   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idxrM   
isinstancerd   matchresgrouprY   ra   r"   r#   r9   r$   r:   ziutr;   r=   rA   setattrrC   rl   r   r   r   mainr   r   r   <module>r      s   	   &    5 R ,	(++ 	 ((G(W2F2F0D1E1E)*	+ 	1 /1  ,-GC "cbhh-r2
sYYq\
Z')yy')yy2J  #--j"$''+K 77L ()+* ","-#/* !:S!@)L
ax#%BS%H-XQ .VF! 1 1 F!R~."" ~.B   z/HMMg& r   