
    <f(                        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          pg Z ee          D ]\  ZZ eee          r+ e j        de          ZesJ e                    d          Z< e	j        eej        ej                  Z  e	j        eej!                  Z"ej#        Z$e e"e$fdZ%e e"e$fdZ& e'edez  e%           edk    r 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j-        d#$           dS dS )%    N)hexlify)bord)SHA256)ECC)list_test_cases)load_test_vectorsload_test_vectors_wycheproof)key_agreementc                       e Zd ZdS )FIPS_ECDH_Tests_KATN)__name__
__module____qualname__     q/home/panchajanya/Development/work/volatility3/lib/python3.11/site-packages/Crypto/SelfTest/Protocol/test_ecdh.pyr   r      s        Dr   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2JJ r   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                 X    t          ||d           }|                     ||           d S )Nc                     | S Nr   r   s    r   r   zecdh_test.<locals>.<lambda>7       a r   
static_pubstatic_privkdfr
   assertEqualself
public_keyprivate_keyexp_responsezs        r   	ecdh_testr=   0   A     %'K! ! ! 	L)))))r   c                 X    t          ||d           }|                     ||           d S )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                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )TestVectorsECDHWycheproofzWycheproof ECDH testsc                 h    d }d }t          d|d|z  d|id|i          }| xj        |z  c_        d S )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   sm    	 	 		) 	) 	) ..H.6.D08/99@%8H8A77K0 0 0 	6r   c                 r   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)rM   descrP   r8   s    r   setUpzTestVectorsECDHWycheproof.setUp^   s    	9:::9:::9:::9:::122212221222122222r   c                     | j         S r/   )rR   rS   s    r   shortDescriptionz*TestVectorsECDHWycheproof.shortDescriptionl   s
    yr   c                 r   t          |j                  dk    rd S 	 t          |j        d                   dk    r!t          j        |j        |j                  }nt          j        |j                  }n!# t          $ r |j        s	|j        rJ Y d S w xY wt          j	        |j        |j
                  }	 t          ||d           }|                     ||j                   |j        sJ d S # t          $ r |j        rJ Y d S t          $ r'}|j        rJ dt          |          v sJ Y d }~d S d }~ww xY w)Nr      )
curve_namer+   c                     | S r/   r   r   s    r   r   z7TestVectorsECDHWycheproof.test_verify.<locals>.<lambda>   s    A r   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   ry>>QF	BIaL!!Q&& ^BI"(KKK

 ^BI66
 	 	 	:-RX---FF	 m"(bjAAA	*5"-+/ / /A Q	***8OOOOO  	  	  	 x 	2 	2 	2x'3q661111111111	2s0   AA5 5BB7C0 0D6	D6D11D6c                 |    | j         D ]3}d|j        |j        |j        fz  | _        |                     |           4d S )Nz(Wycheproof ECDH Verify Test #%d (%s, %s))rM   idcommentrN   rR   rf   )r8   rM   s     r   runTestz!TestVectorsECDHWycheproof.runTest   sO    ' 	! 	!BBbeRZY[YdEeeDIR    	! 	!r   N)	r   r   r   rR   rP   rT   rV   rf   rj   r   r   r   rC   rC   I   sd        "D  "3 3 3    :! ! ! ! !r   rC   c                       e Zd Z ej        d          Z ej        d                                          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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                     d }t          || j        | j                  }|                     t	          |          d           d S )Nc                 N    t          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                  }|                     t          |          d           d S )Nc                 N    t          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   sj    ..? ,( ( ( 	\	^ 	^ 	^ 	^ 	^r   c                     d }t          || j        | j        | j                  }|                     t          |          d           d S )Nc                 N    t          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                  }|                     t          |          d           d S )Nc                 N    t          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                 t    d }|                      t          t          || j        | j        | j                   d S )Nc                 N    t          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   sI    ..* , 	 	( 	( 	( 	( 	(r   c                 t    d }|                      t          t          || j        | j        | j                   d S )Nc                 N    t          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   sH    ..*? 	 	( 	( 	( 	( 	(r   c                     d }t          || j        | j                  }|                     t	          |          d           d S )Nc                 N    t          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                  }|                     t	          |          d           d S )Nc                 N    t          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                  }|                     t	          |          d           d S )Nc                 N    t          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                 h    d }|                      t          t          || j        | j                   d S )Nc                 N    t          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   sC    ..*?	 	 	& 	& 	& 	& 	&r   c                 h    d }|                      t          t          || j        | j                   d S )Nc                 N    t          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  sD    ..* ,	 	 	( 	( 	( 	( 	(r   c                 `    |                      t          t          | j        | j                   d S )N)r2   r3   )r   r^   r
   r2   r3   rS   s    r   test_12zECDH_Tests.test_12  s9    *? , 	 	. 	. 	. 	. 	.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      sa        #.  "X  Y  YK  !W  X  X  c  c  e  eJs~  U  V  VHcn  T  U  UG] ] ]
^ 
^ 
^	^ 	^ 	^	^ 	^ 	^( ( (( ( (^ ^ ^^ ^ ^^ ^ ^& & &( ( (. . . . .r   rl   c                     g }|t          t                    z  }|t                      gz  }|t          t                    z  }|                     d          }|r	 |S )N
slow_tests)r   r   rC   rl   get)configtestsr   s      r   	get_testsr     sa    E	_0111E	'))**E	_Z(((EL))J Lr   __main__c                  B    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 5 5 5 5 5 R R R R R R R R , , , , , ,	 	 	 	 	(+ 	 	 	 ('(G(W2F2F2F2F0D0D1E1E1E1E)* )*	+ 	+ 	1 /1  y,-- (Y (YGC z"c bh-r22


YYq\\
Z')y')y2 2 2J  #-j"$'+ + +K 7L ()+* * * * ","-#/* * * * G!:S!@)LLL
axx#%BS%H-XXXF! F! F! F! F! 1 F! F! F!R~. ~. ~. ~. ~." ~. ~. ~.B      z/ / /HMg&&&&&& r   