
    Tf<                     P   d dl Z d dlZd dlZd dlZd dlZd dlmZ 	 d dlZn# e	$ r d dlZY nw xY wddl
mZmZmZmZmZmZmZmZ ddl
m
Z
 ddlmZmZmZmZmZ ddlmZmZ ddlmZ d	ej        v reegZ
ej                             d
e
d e
D                       d             Z!d Z"d Z# G d dej$                  Z%d Z&d Z'ej                             d ej(        edddd           ej(        edddd           ej(        eddd d!           ej(        ed"d#d$d%           ej(        ed&d'd(d)           ej(        ed*d+d,d-           ej(        ed.d/d0d1           ej(        ed2d3d4d5           ej(        ed6d7d8d9           ej(        ed:d;d<d=           ej(        ed>d?d@dA           ej(        edBdCdDdE           ej(        edFdGdHdI           ej(        edJdKdLdM           ej(        edNdOdPdQ          g          dR             Z)dSZ*dTZ+dUZ,dVZ-dWZ.dX Z/dY Z0 G dZ d[e1          Z2d\ Z3 e4d]  e3d^          5                    d_          D                       Z6ej        j7        ej                             d
e
d` e
D                       da                         Z8dS )b    N)	unhexlify   )NIST192pNIST224pNIST256pNIST384pNIST521pBRAINPOOLP160r1	SECP112r2	SECP128r1)curves)ECDHInvalidCurveErrorInvalidSharedSecretError
NoKeyErrorNoCurveError)
SigningKeyVerifyingKey)	CurveEdTwz--fastvcurvec                     g | ]	}|j         
S  name.0curves     A/var/www/html/env/lib/python3.11/site-packages/ecdsa/test_ecdh.py
<listcomp>r   *       ((((((    )idsc                    t          | j        t                    rt          j        d           t          |           }t          |           }|                                 |                    |                                           |                    |                                           |	                                }|	                                }||k    sJ d S )Nz(ECDH is not supported for Edwards curvesr   )

isinstancer   r   pytestskipr   generate_private_keyload_received_public_keyget_public_keygenerate_sharedsecret_bytes)r   ecdh1ecdh2secret1secret2s        r   test_ecdh_eachr0   '   s     &,	** @>???vEvE	   	""5#7#7#9#9:::	""5#=#=#?#?@@@//11G//11Ggr!   c                  ,   t          j        t                    } t          j        t                    }t          t          | |j                  }t          || j                  }|                                }|                                }||k    sJ d S )N)private_key
public_key)r   generater
   r   verifying_keyr+   )key1key2r,   r-   r.   r/   s         r   test_ecdh_both_keys_presentr8   ;   s    //D//D$(:;;ETd.@AAAE//11G//11Ggr!   c                  n   t          t                    } t          j        t                    5  |                                  d d d            n# 1 swxY w Y   |                                  t          j        t                    5  |                                  d d d            d S # 1 swxY w Y   d S Nr$   )r   r   r&   raisesr   r+   r(   r,   s    r   test_ecdh_no_public_keyr=   H   s#   x   E	z	"	" , ,))+++, , , , , , , , , , , , , , , 
   	z	"	" , ,))+++, , , , , , , , , , , , , , , , , ,s#   AAAB**B.1B.c                   &    e Zd Zd Zd Zd Zd ZdS )TestECDHc                 f   t                      }|                    t                     t          j        t
                    }|                     t                    5 }|                    |           d d d            n# 1 swxY w Y   | 	                    dt          |j                             d S )NzCurve mismatch)r   	set_curver   r   r4   r
   assertRaisesr   load_private_keyassertInstr	exception)selfr,   r6   es       r   test_load_key_from_wrong_curvez'TestECDH.test_load_key_from_wrong_curveU   s    !!!"?33011 	)Q""4(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	&AK(8(899999s   A>>BBc                     t                      }|                     t                    5 }|                                 d d d            n# 1 swxY w Y   |                     dt          |j                             d S )NCurve must be set)r   rB   r   r(   rD   rE   rF   rG   r,   rH   s      r   test_generate_without_curvez$TestECDH.test_generate_without_curve`   s    |,, 	)&&(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)3q{+;+;<<<<<s   A

AAc                     t                      }|                     t                    5 }|                    d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Ns    rK   )r   rB   r   load_private_key_bytesrD   rE   rF   rL   s      r   !test_load_bytes_without_curve_setz*TestECDH.test_load_bytes_without_curve_seth   s    |,, 	7((666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	)3q{+;+;<<<<<s   AAAc                     t                      }t          j        t                    }|                    |j                   |                     |j        t                     d S N)r   r   r4   r
   r)   r5   assertEqualr   )rG   r,   r6   s      r   'test_set_curve_from_received_public_keyz0TestECDH.test_set_curve_from_received_public_keyp   sP    "?33&&t'9:::o66666r!   N)__name__
__module____qualname__rI   rM   rP   rT   r   r!   r   r?   r?   T   sP        	: 	: 	:= = == = =7 7 7 7 7r!   r?   c                     t          t                    } |                                  t          t                    }|                                 t	          j        t                    5  |                     |                                           d d d            n# 1 swxY w Y   t	          j        t                    5  |                    |                                            d d d            n# 1 swxY w Y   |                                | _	        |                                 |_	        t	          j        t                    5  | 
                                 d d d            n# 1 swxY w Y   t	          j        t                    5  |
                                 d d d            d S # 1 swxY w Y   d S r:   )r   r   r(   r   r&   r;   r   r)   r*   r3   r+   )r,   r-   s     r    test_ecdh_wrong_public_key_curverY   z   s   x   E	   x   E	   	(	)	) ? ?&&u';';'='=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
(	)	) ? ?&&u';';'='=>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ++--E++--E	(	)	) , ,))+++, , , , , , , , , , , , , , , 
(	)	) , ,))+++, , , , , , , , , , , , , , , , , ,sH   ,(B  B$'B$(C88C<?C<E//E36E3F55F9<F9c                     t          t                    } |                                  |                     t	          j        t                                                               | j        j        j	        | j        j
        _        t          j        t                    5  |                                  d d d            d S # 1 swxY w Y   d S r:   )r   r   r(   r)   r   r4   get_verifying_keyr2   r   orderprivkeysecret_multiplierr&   r;   r   r+   r<   s    r   %test_ecdh_invalid_shared_secret_curver_      s    x   E	   	""H%%7799   382C2I2OE/	/	0	0 , ,))+++, , , , , , , , , , , , , , , , , ,s   !CC
Czcurve,privatekey,pubkey,secret0f17d3fea367b74d340851ca4270dcb24c271f445bed9d527`42ea6dd9969dd2a61fea1aac7f8e98edcc896c6e55857cc0dfbe5d7c61fac88b11811bde328e8a0d12bf01a9d204b5230803d8ab2e5b6e6fca715737c3a82f7ce3c783124f6d51cd0z
NIST192p-1)id056e853349d96fe4c442448dacb7cf92bb7a95dcf574a9bd5`deb5712fa027ac8d2f22c455ccb73a91e17b6512b5e030e77e2690a02cc9b28708431a29fb54b87b1f0c14e011ac21250c208847568b98835d7312cef1f97f7aa298283152313c29dz
NIST192p-20c6ef61fe12e80bf56f2d3f7d0bb757394519906d55500949`4edaa8efc5a0f40f843663ec5815e7762dddc008e663c20f0a9f8dc67a3e60ef6d64b522185d03df1fc0adfd42478279087229107047a3b611920d6e3b2c0c89bea4f49412260b8ddz
NIST192p-30e6747b9c23ba7044f38ff7e62c35e4038920f5a0163d3cda`8887c276edeed3e9e866b46d58d895c73fbd80b63e382e8804c5097ba6645e16206cfb70f7052655947dd44a17f1f9d50eec0bed8fc55e1feddc82158fd6dc0d48a4d796aaf47d46cz
NIST192p-40beabedd0154a1afcfc85d52181c10f5eb47adc51f655047d`0d045f30254adc1fcefa8a5b1f31bf4e739dd327cd18d594542c314e41427c08278a08ce8d7305f3b5b849c72d8aff730716e743b1b37a2cd8479f0a3d5a74c10ba2599be18d7e2f4z
NIST192p-50cf70354226667321d6e2baf40999e2fd74c7a0f793fa8699`fb35ca20d2e96665c51b98e8f6eb3d79113508d8bccd4516368eec0d5bfb847721df6aaff0e5d48c444f74bf9cd8a5a70f67053b934459985a315cb017bf0302891798d45d0e19508z
NIST192p-688346a60fc6f293ca5a0d2af68ba71d1dd389e5e40837942df3e43cbdpaf33cd0629bc7e996320a3f40368f74de8704fa37b8fab69abaae280882092ccbba7930f419a8a4f9bb16978bbc3838729992559a6f2e2d787d96f9a3bd3c05cf5cc37feb8b9d5209d5c2597464dec3e9983743e8r   @7d7dc5f71eb29ddaf80d6214632eeae03d9058af1fb6d22ed80badb62bc1a534ڀ700c48f77f56584c5cc632ca65640db91b6bacce3a4df6b42ce7cc838833d287db71e509e3fd9b060ddb20ba5c51dcc5948d46fbf640dfe0441782cab85fa4ac@46fc62106420ff012e54a434fbdd2d25ccc5852060561e68040dd7778997bd7bz
NIST256p-1@38f65d6dce47676044d58ce5139582d568f64bb16098d179dbab07741dd5caf5ڀ809f04289c64348c01515eb03d5ce7ac1a8cb9498f5caa50197e58d43a86a7aeb29d84e811197f25eba8f5194092cb6ff440e26d4421011372461f579271cda3@057d636096cb80b67a8c038c890e887d1adfa4195e9b3ce241c8a778c59cda67z
NIST256p-2@1accfaf1b97712b85a6f54b148985a1bdc4c9bec0bd258cad4b3d603f49f32c8ڀa2339c12d4a03c33546de533268b4ad667debf458b464d77443636440ee7fec3ef48a3ab26e20220bcda2c1851076839dae88eae962869a497bf73cb66faf536@2d457b78b4614132477618a5b077965ec90730a8c81a1c75d6d4ec68005d67ecz
NIST256p-3@207c43a79bfee03db6f4b944f53d2fb76cc49ef1c9c4d34d51b6c65c4db6932dڀdf3989b9fa55495719b3cf46dccd28b5153f7808191dd518eff0c3cff2b705ed422294ff46003429d739a33206c8752552c8ba54a270defc06e221e0feaf6ac4@96441259534b80f6aee3d287a6bb17b5094dd4277d9e294f8fe73e48bf2a0024z
NIST256p-4@59137e38152350b195c9718d39673d519838055ad908dd4757152fd8255c09bfڀ41192d2813e79561e6a1d6f53c8bc1a433a199c835e141b05a74a97b0faeb9221af98cc45e98a7e041b01cf35f462b7562281351c8ebf3ffa02e33a0722a1328@19d44c8d63e8e8dd12c22a87b8cd4ece27acdde04dbf47f7f27537a6999a8e62z
NIST256p-5@f5f8e0174610a661277979b58ce5c90fee6c9b3bb346a90a7196255e40b132efڀ33e82092a0f1fb38f5649d5867fba28b503172b7035574bf8e5b7100a3052792f2cf6b601e0a05945e335550bf648d782f46186c772c0f20d3cd0d6b8ca14b2f@664e45d5bba4ac931cd65d52017e4be9b19a515f669bea4703542a2c525cd3d3z
NIST256p-6`3cc3122a68f0d95027ad38c067916ba0eb8c38894d22e1b15618b6818a661774ad463b205da88cf699ab4d43c9cf98a1a7c76b970c3b5fe8b05d2838ae04ab47697b9eaf52e764592efda27fe7513272734466b400091adbf2d68c58e0c50066ac68f19f2e1cb879aed43a9969b91a0839c4c38a49749b661efedf243451915ed0905a32b060992b468c64766fc8437a`5f9d29dc5e31a163060356213669c8ce132e22f57c9a04f40ba7fcead493b457e5621e766c40a2e3d4d6a04b25e533f1r   ڄ017eecc07ab4b329068fba65e56a1f8890aa935e57134ae0ffcce802735151f4eac6564f6ee9974c5e6887a1fefee5743ae2241bfeb95d5ce31ddcb6f9edb4d6fc47  00685a48e86c79f0f0875f7bc18d25eb5fc8c0b07e5da4f4370f3a9490340854334b1e1b87fa395464c60626124a4e70d0f785601d37c09870ebf176666877a2046d01ba52c56fc8776d9e8f5db4f0cc27636d0b741bbe05400697942e80b739884a83bde99e0f6716939e632bc8986fa18dccd443a348b6c3e522497955a4f3c302f676ڄ005fc70477c3e63bc3954bd0df3ea0d1f41ee21746ed95fc5e1fdf90930d5e136672d72cc770742d1711c3c3a4c334a0ad9759436a4d3c5bf6e74b9578fac148c831r	   c                     t          |           }|                    t          |                     |                    t          |                     |                                }|t          |          k    sJ d S r:   )r   rO   r   load_received_public_key_bytesr+   )r   
privatekeypubkeysecretecdhsharedsecrets         r   test_ecdh_NISTr      s}    L eD	* 5 5666''	&(9(9:::3355L9V,,,,,,,,r!   z-----BEGIN EC PRIVATE KEY-----
MF8CAQEEGF7IQgvW75JSqULpiQQ8op9WH6Uldw6xxaAKBggqhkjOPQMBAaE0AzIA
BLiBd9CE7xf15FY5QIAoNg+fWbSk1yZOYtoGUdzkejWkxbRc9RWTQjqLVXucIJnz
bA==
-----END EC PRIVATE KEY-----
305f02010104185ec8420bd6ef9252a942e989043ca29f561fa525770eb1c5a00a06082a8648ce3d030101a13403320004b88177d084ef17f5e45639408028360f9f59b4a4d7264e62da0651dce47a35a4c5b45cf51593423a8b557b9c2099f36cz-----BEGIN PUBLIC KEY-----
MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEuIF30ITvF/XkVjlAgCg2D59ZtKTX
Jk5i2gZR3OR6NaTFtFz1FZNCOotVe5wgmfNs
-----END PUBLIC KEY-----
ږ3049301306072a8648ce3d020106082a8648ce3d03010103320004b88177d084ef17f5e45639408028360f9f59b4a4d7264e62da0651dce47a35a4c5b45cf51593423a8b557b9c2099f36c08f457e34982478d1c34b9cd2d0c15911b72dd60d869e2ceac                      t                      } |                     t                     |                     t                     |                                 }|t          t                    k    sJ d S rR   )r   load_private_key_pempem_local_private_keyload_received_public_key_pempem_remote_public_keyr+   r   gshared_secretr   r   s     r   test_ecdh_pemr   I  se    66D3444%%&;<<<3355L9^44444444r!   c                     t                      } |                     t          t                               |                     t          t
                               |                                 }|t          t                    k    sJ d S rR   )r   load_private_key_derr   der_local_private_keyload_received_public_key_derder_remote_public_keyr+   r   r   s     r   test_ecdh_derr   S  su    66Di(=>>???%%i0E&F&FGGG3355L9^44444444r!   c                       e Zd ZdS )RunOpenSslErrorN)rU   rV   rW   r   r!   r   r   r   ^  s        Dr!   r   c           
      4   d}t          j        |g|                                 z   t           j        t           j                  }|                                \  }}|j        dk    r t          d|d| d|j        d|          |                                S )Nopenssl)stdoutstderrr   zcmd ' z' failed: rc=z, stdout/err was )	
subprocessPopensplitPIPESTDOUTcommunicate
returncoder   decode)cmdOPENSSLpr   ignoreds        r   run_opensslr   b  s    G		CIIKK 	 	 	A
 mmooOFG|qowwQ\\\663
 
 	
 ==??r!   c              #   p   K   | ]1}|                     d           d                                         V  2dS ):r   N)r   strip)r   cs     r   	<genexpr>r   r  sP        	 GGCLLO     r!   zecparam -list_curves
c                     g | ]	}|j         
S r   r   r   s     r   r   r   |  r    r!   c                 |   t          | j        t                    rt          j        d           | j        sJ | j        t          vrt          j        d| j        z              	 t          d          }|                    d          dk    rt          j        d           n$# t          $ r t          j        d           Y nw xY wt          j                            d          rt          j        d           t          j        d           t          d	| j        z             t          d
| j        z             t          d           t!          |           }t!          |           }t#          d          5 }|                                }d d d            n# 1 swxY w Y   |                    |           t#          d          5 }|                                }d d d            n# 1 swxY w Y   |                    |           t#          d          5 }|                                }d d d            n# 1 swxY w Y   t)          j        |          }|                                |                                                                k    sJ |                                }t#          dd          5 }|                    |                                           d d d            n# 1 swxY w Y   |                    |           |                    |           |                                }|                                }	||	k    sJ t          d           t          d           t#          dd          5 }|                                }
d d d            n# 1 swxY w Y   t#          dd          5 }|                                }d d d            n# 1 swxY w Y   t9          |
          |j        j        dz  k    sJ t9          |          |j        j        dz  k    sJ |
|k    sJ ||
k    sJ d S )Nz)Edwards curves are not supported for ECDHz system openssl does not support zpkeyutl -helpz-deriver   z1system openssl does not support `pkeyutl -derive`z$system openssl could not be executedtz,ecparam -name %s -genkey -out t/privkey1.pemz,ecparam -name %s -genkey -out t/privkey2.pemz0ec -in t/privkey1.pem -pubout -out t/pubkey1.pemr$   zt/privkey1.pemzt/privkey2.pemzt/pubkey1.pemzt/pubkey2.pemwbzKpkeyutl -derive -inkey t/privkey1.pem -peerkey t/pubkey2.pem -out t/secret1zKpkeyutl -derive -inkey t/privkey2.pem -peerkey t/pubkey1.pem -out t/secret2z	t/secret1rb   )r%   r   r   r&   r'   openssl_nameOPENSSL_SUPPORTED_CURVESr   findr   ospathisdirshutilrmtreemkdirr   openreadr   r   from_pem	to_stringr*   writeto_pemr)   r+   lenverifying_key_length)r   hlpr,   r-   rH   keyvk1vk2r.   r/   ssl_secret1ssl_secret2s               r   test_ecdh_with_opensslr   x  s    &,	** A?@@@":::69LLMMM</**88I!##KKLLL < < <:;;;;;< 
w}}S cHSMMM69LL   69LL   BCCCvEvE			 1ffhh              	s###			 1ffhh              	s###	o		 !ffhh              


$
$C==??e2244>>@@@@@@



 
 C	ot	$	$ 	

               
""3'''	""3'''//11G//11GgU   U   
k4	 	  Affhh              	k4	 	  Affhh               {sy=BBBBBw<<399Q>>>>>+%%%%k!!!!!!s~   #<B   C C7FFFG((G,/G,H88H<?H<9(K--K14K1 N!!N%(N%<OO!$O!)9r   sysr   r   r&   binasciir   	unittest2unittestImportErrorr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   keysr   r   ellipticcurver   argvmarkparametrizer0   r8   r=   TestCaser?   rY   r_   paramr   r   r   r   r   r   r   r   	Exceptionr   r   setr   r   slowr   r   r!   r   <module>r      s0   				 



                    OOOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                    + * * * * * * * $ $ $ $ $ $ sx#F 
(((((   
  

 
 
	, 	, 	,#7 #7 #7 #7 #7x  #7 #7 #7L, , ,,, , ," $>?>	
 	
 	
 	>?>	
 	
 	
 	>?>	
 	
 	
 	>?>	
 	
 	
 	>?>	
 	
 	
 	>?>	
 	
 	
 	FGF	
 	
 	
 	NON	
 	
 	
 	NON	
 	
 	
 	NON	
 	
 	
 	NON	
 	
 	
 	NON	
 	
 	
 	NON	
 	
 	
 	???	
 	
 	
 	QQQ	
 	
 	
kAD DJ- -KD DJ-% 3 ! R  D5 5 55 5 5	 	 	 	 	i 	 	 	    3  [/0066t<<      
(((((   
C" C"  C" C" C"s   ! 	--