§
    qŠtj<  ã                   ó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     úM/var/www/html/CA-Chatbot/venv/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Ô1€GØ×/Ò/Ñ1Ô1€GØ�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Ý˜T¨dÔ.@ÐAÑAÔA€Eà×/Ò/Ñ1Ô1€GØ×/Ò/Ñ1Ô1€Gà�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Ñ(Ô(Ð(ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð 	�ŠÐ&­¨A¬KÑ(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ª   € Ý‘”ˆà×Ò�|Ñ,Ô,ð 	)°Ø×&Ò&Ñ(Ô(Ð(ð	)ð 	)ð 	)ñ 	)ô 	)ð 	)ð 	)ð 	)ð 	)ð 	)ð 	)øøøð 	)ð 	)ð 	)ð 	)ð 	�ŠÐ)­3¨q¬{Ñ+;Ô+;Ñ<Ô<Ð<Ð<Ð<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ð 	�ŠÐ)­3¨q¬{Ñ+;Ô+;Ñ<Ô<Ð<Ð<Ð<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ñô ð ð 38Ô2CÔ2IÔ2O€EÔÔÔ/å	ŒÕ/Ñ	0Ô	0ð ,ð ,Ø×)Ò)Ñ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,s   Â!CÃCÃ
Czcurve,privatekey,pubkey,secretÚ0f17d3fea367b74d340851ca4270dcb24c271f445bed9d527Ú`42ea6dd9969dd2a61fea1aac7f8e98edcc896c6e55857cc0dfbe5d7c61fac88b11811bde328e8a0d12bf01a9d204b523Ú0803d8ab2e5b6e6fca715737c3a82f7ce3c783124f6d51cd0z
NIST192p-1)ÚidÚ056e853349d96fe4c442448dacb7cf92bb7a95dcf574a9bd5Ú`deb5712fa027ac8d2f22c455ccb73a91e17b6512b5e030e77e2690a02cc9b28708431a29fb54b87b1f0c14e011ac2125Ú0c208847568b98835d7312cef1f97f7aa298283152313c29dz
NIST192p-2Ú0c6ef61fe12e80bf56f2d3f7d0bb757394519906d55500949Ú`4edaa8efc5a0f40f843663ec5815e7762dddc008e663c20f0a9f8dc67a3e60ef6d64b522185d03df1fc0adfd42478279Ú087229107047a3b611920d6e3b2c0c89bea4f49412260b8ddz
NIST192p-3Ú0e6747b9c23ba7044f38ff7e62c35e4038920f5a0163d3cdaÚ`8887c276edeed3e9e866b46d58d895c73fbd80b63e382e8804c5097ba6645e16206cfb70f7052655947dd44a17f1f9d5Ú0eec0bed8fc55e1feddc82158fd6dc0d48a4d796aaf47d46cz
NIST192p-4Ú0beabedd0154a1afcfc85d52181c10f5eb47adc51f655047dÚ`0d045f30254adc1fcefa8a5b1f31bf4e739dd327cd18d594542c314e41427c08278a08ce8d7305f3b5b849c72d8aff73Ú0716e743b1b37a2cd8479f0a3d5a74c10ba2599be18d7e2f4z
NIST192p-5Ú0cf70354226667321d6e2baf40999e2fd74c7a0f793fa8699Ú`fb35ca20d2e96665c51b98e8f6eb3d79113508d8bccd4516368eec0d5bfb847721df6aaff0e5d48c444f74bf9cd8a5a7Ú0f67053b934459985a315cb017bf0302891798d45d0e19508z
NIST192p-6Ú88346a60fc6f293ca5a0d2af68ba71d1dd389e5e40837942df3e43cbdÚpaf33cd0629bc7e996320a3f40368f74de8704fa37b8fab69abaae280882092ccbba7930f419a8a4f9bb16978bbc3838729992559a6f2e2d7Ú87d96f9a3bd3c05cf5cc37feb8b9d5209d5c2597464dec3e9983743e8r   Ú@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Ú`3cc3122a68f0d95027ad38c067916ba0eb8c38894d22e1b15618b6818a661774ad463b205da88cf699ab4d43c9cf98a1ÚÀa7c76b970c3b5fe8b05d2838ae04ab47697b9eaf52e764592efda27fe7513272734466b400091adbf2d68c58e0c50066ac68f19f2e1cb879aed43a9969b91a0839c4c38a49749b661efedf243451915ed0905a32b060992b468c64766fc8437aÚ`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Ô5€Là�9 VÑ,Ô,Ò,Ð,Ð,Ð,Ð,Ð,r!   zÃ-----BEGIN EC PRIVATE KEY-----
MF8CAQEEGF7IQgvW75JSqULpiQQ8op9WH6Uldw6xxaAKBggqhkjOPQMBAaE0AzIA
BLiBd9CE7xf15FY5QIAoNg+fWbSk1yZOYtoGUdzkejWkxbRc9RWTQjqLVXucIJnz
bA==
-----END EC PRIVATE KEY-----
ÚÂ305f02010104185ec8420bd6ef9252a942e989043ca29f561fa525770eb1c5a00a06082a8648ce3d030101a13403320004b88177d084ef17f5e45639408028360f9f59b4a4d7264e62da0651dce47a35a4c5b45cf51593423a8b557b9c2099f36czš-----BEGIN PUBLIC KEY-----
MEkwEwYHKoZIzj0CAQYIKoZIzj0DAQEDMgAEuIF30ITvF/XkVjlAgCg2D59ZtKTX
Jk5i2gZR3OR6NaTFtFz1FZNCOotVe5wgmfNs
-----END PUBLIC KEY-----
Ú–3049301306072a8648ce3d020106082a8648ce3d03010103320004b88177d084ef17f5e45639408028360f9f59b4a4d7264e62da0651dce47a35a4c5b45cf51593423a8b557b9c2099f36cÚ08f457e34982478d1c34b9cd2d0c15911b72dd60d869e2ceac                  óæ   — 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   € Ý‰6Œ6€DØ×ÒÕ3Ñ4Ô4Ð4Ø×%Ò%Õ&;Ñ<Ô<Ð<à×3Ò3Ñ5Ô5€Là�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   € Ý‰6Œ6€DØ×Ò�iÕ(=Ñ>Ô>Ñ?Ô?Ð?Ø×%Ò%¥iÕ0EÑ&FÔ&FÑGÔGÐGà×3Ò3Ñ5Ô5€Là�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ÝÔØ	ˆ	�C—I’I‘K”KÑÝŒÝÔ ð	ñ 	ô 	€Að
 —m’m‘o”o�O€FˆGØ„|�qÒÐÝˆoàˆwˆw˜˜˜˜Qœ\˜\˜\¨6¨6ð3ñ
ô 
ð 	
ð �=Š=‰?Œ?Ðr!   c              #   óp   K  — | ]1}|                      d ¦  «        d                              ¦   «         V — Œ2dS )ú:r   N)r°   Ústrip)r   Úcs     r   ú	<genexpr>r¿   r  sP   è è € ð ð à	ð ‡G‚GˆC�L„L�„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ð<Ý˜/Ñ*Ô*ˆØ�8Š8�IÑÔ !Ò#Ð#ÝŒKÐKÑLÔLÐLøøÝð <ð <ð <ÝŒÐ:Ñ;Ô;Ð;Ð;Ð;ð<øøøõ 
„w‡}‚}�SÑÔð ÝŒ�cÑÔÐÝ„HˆS�M„M€MÝØ6¸Ô9LÑLñô ð õ Ø6¸Ô9LÑLñô ð õ ÐBÑCÔCÐCå�vÐÑÔ€EÝ�vÐÑÔ€EÝ	ÐÑ	Ô	ð  1Ø�fŠf‰hŒhˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à	×Ò˜sÑ#Ô#Ð#Ý	ÐÑ	Ô	ð  1Ø�fŠf‰hŒhˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à	×Ò˜sÑ#Ô#Ð#å	ˆoÑ	Ô	ð  !Ø�fŠf‰hŒhˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð å
Ô
 Ñ
$Ô
$€CØ�=Š=‰?Œ?˜e×2Ò2Ñ4Ô4×>Ò>Ñ@Ô@Ò@Ð@Ð@Ð@Ø
×
Ò
Ñ
 Ô
 €CÝ	ˆo˜tÑ	$Ô	$ð ¨Ø	�Š�—
’
‘”ÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð 
×"Ò" 3Ñ'Ô'Ð'Ø	×"Ò" 3Ñ'Ô'Ð'Ø×/Ò/Ñ1Ô1€GØ×/Ò/Ñ1Ô1€Gà�gÒÐÐÐåØUñô ð õ ØUñô ð õ 
ˆk˜4Ñ	 Ô	 ð  AØ—f’f‘h”hˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð å	ˆk˜4Ñ	 Ô	 ð  AØ—f’f‘h”hˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ ˆ{ÑÔ˜sœyÔ=ÀÑBÒBÐBÐBÐBÝˆw‰<Œ<˜3œ9Ô9¸QÑ>Ò>Ð>Ð>Ð>à˜+Ò%Ð%Ð%Ð%Ø�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  ðØ 	€	€	€	Ø 
€
€
€
Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð ðØ Ð Ð Ð Ð øØð ð ð Ø€O€O€O€O€Oðøøøð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø $Ð $Ð $Ð $Ð $Ð $ð ˆsŒxÐÐØ˜Ð#€Fð „×ÒØØ
Ø(Ð( Ð(Ñ(Ô(ð ñ ô ð
ð ñô ð
ð
ð 
ð 
ð	,ð 	,ð 	,ð#7ð #7ð #7ð #7ð #7ˆxÔ ñ #7ô #7ð #7ðL,ð ,ð ,ð,,ð ,ð ,ð" „×ÒØ$àˆŒØØ>ð?à>Øð	
ñ 	
ô 	
ð 	ˆŒØØ>ð?à>Øð	
ñ 	
ô 	
ð 	ˆŒØØ>ð?à>Øð	
ñ 	
ô 	
ð 	ˆŒØØ>ð?à>Øð	
ñ 	
ô 	
ð 	ˆŒØØ>ð?à>Øð	
ñ 	
ô 	
ð 	ˆŒØØ>ð?à>Øð	
ñ 	
ô 	
ð 	ˆŒØØ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Ò6°tÑ<Ô<ðñ ô ñ ô Ð ð „ÔØ„×ÒØØ
Ø(Ð( Ð(Ñ(Ô(ð ñ ô ð
C"ð C"ñô ñ ÔðC"ð C"ð C"s   œ! ¡	-¬-