Ë
    V.j<  ã                   óÆ  — 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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>                  jA                  d
e
e
D � cg c]  } | jB                  ‘Œ c} ¬«      d„ «       Z"d„ Z#d„ Z$ G d„ dejJ                  «      Z&d„ Z'd„ Z(ej>                  jA                  d ejR                  edddd¬«       ejR                  edddd¬«       ejR                  edddd ¬«       ejR                  ed!d"d#d$¬«       ejR                  ed%d&d'd(¬«       ejR                  ed)d*d+d,¬«       ejR                  ed-d.d/d0¬«       ejR                  ed1d2d3d4¬«       ejR                  ed5d6d7d8¬«       ejR                  ed9d:d;d<¬«       ejR                  ed=d>d?d@¬«       ejR                  edAdBdCdD¬«       ejR                  edEdFdGdH¬«       ejR                  edIdJdKdL¬«       ejR                  edMdNdOdP¬«      g«      dQ„ «       Z*dRZ+dSZ,dTZ-dUZ.dVZ/dW„ Z0dX„ Z1 G dY„ dZe2«      Z3d[„ Z4 e5d\„  e4d]«      jm                  d^«      D «       «      Z7ej>                  jp                  ej>                  jA                  d
e
e
D � cg c]  } | jB                  ‘Œ c} ¬«      d_„ «       «       Z9y# e	$ r d dlZY �Œµw xY wc c} w c c} w )`é    N)Ú	unhexlifyé   )ÚNIST192pÚNIST224pÚNIST256pÚNIST384pÚNIST521pÚBRAINPOOLP160r1Ú	SECP112r2Ú	SECP128r1)Úcurves)ÚECDHÚInvalidCurveErrorÚInvalidSharedSecretErrorÚ
NoKeyErrorÚNoCurveError)Ú
SigningKeyÚVerifyingKey)Ú	CurveEdTwz--fastÚvcurve)Úidsc                 ó|  — t        | j                  t        «      rt        j                  d«       t        | ¬«      }t        | ¬«      }|j                  «        |j                  |j                  «       «       |j                  |j                  «       «       |j                  «       }|j                  «       }||k(  sJ ‚y )Nz(ECDH is not supported for Edwards curves©Úcurve)
Ú
isinstancer   r   ÚpytestÚskipr   Úgenerate_private_keyÚload_received_public_keyÚget_public_keyÚgenerate_sharedsecret_bytes)r   Úecdh1Úecdh2Úsecret1Úsecret2s        úQC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\ecdsa/test_ecdh.pyÚtest_ecdh_eachr'   '   s—   € ô �&—,‘,¤	Ô*Ü�‰Ð>Ô?Ü�vÔ€EÜ�vÔ€Eà	×ÑÔ Ø	×"Ñ" 5×#7Ñ#7Ó#9Ô:Ø	×"Ñ" 5×#=Ñ#=Ó#?Ô@à×/Ñ/Ó1€GØ×/Ñ/Ó1€GØ�gÒÐÑó    c                  ó  — t        j                  t        «      } t        j                  t        «      }t        t        | |j                  «      }t        || j                  ¬«      }|j                  «       }|j                  «       }||k(  sJ ‚y )N)Úprivate_keyÚ
public_key)r   Úgenerater
   r   Úverifying_keyr!   )Úkey1Úkey2r"   r#   r$   r%   s         r&   Útest_ecdh_both_keys_presentr0   ;   sr   € Ü×ÑœÓ/€DÜ×ÑœÓ/€Dä” $¨×(:Ñ(:Ó;€EÜ˜T¨d×.@Ñ.@ÔA€Eà×/Ñ/Ó1€GØ×/Ñ/Ó1€Gà�gÒÐÑr(   c                  ó<  — t        t        ¬«      } t        j                  t        «      5  | j                  «        d d d «       | j                  «        t        j                  t        «      5  | j                  «        d d d «       y # 1 sw Y   ŒLxY w# 1 sw Y   y xY w©Nr   )r   r   r   Úraisesr   r!   r   ©r"   s    r&   Útest_ecdh_no_public_keyr5   H   si   € Ü”xÔ €Eä	�‰”zÕ	"Ø×)Ñ)Ô+÷ 
#ð 
×ÑÔ ä	�‰”zÕ	"Ø×)Ñ)Ô+÷ 
#Ð	"÷ 
#Ð	"ú÷
 
#Ð	"ús   ªBÁ,BÂBÂBc                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚTestECDHc                 ó4  — t        «       }|j                  t        «       t        j                  t
        «      }| j                  t        «      5 }|j                  |«       d d d «       | j                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)NzCurve mismatch)r   Ú	set_curver   r   r,   r
   ÚassertRaisesr   Úload_private_keyÚassertInÚstrÚ	exception)Úselfr"   r.   Úes       r&   Útest_load_key_from_wrong_curvez'TestECDH.test_load_key_from_wrong_curveU   sl   € Ü“ˆØ�‰œÔ!ä×"Ñ"¤?Ó3ˆà×ÑÔ0Ô1°QØ×"Ñ" 4Ô(÷ 2ð 	�‰Ð&¬¨A¯K©KÓ(8Õ9÷ 2Ð1ús   ÁBÂBc                 óÖ   — t        «       }| j                  t        «      5 }|j                  «        d d d «       | j	                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)NúCurve must be set)r   r:   r   r   r<   r=   r>   ©r?   r"   r@   s      r&   Útest_generate_without_curvez$TestECDH.test_generate_without_curve`   sM   € Ü“ˆà×Ñœ|Ô,°Ø×&Ñ&Ô(÷ -ð 	�‰Ð)¬3¨q¯{©{Ó+;Õ<÷ -Ð,ús    AÁA(c                 óØ   — t        «       }| j                  t        «      5 }|j                  d«       d d d «       | j	                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Ns    rC   )r   r:   r   Úload_private_key_bytesr<   r=   r>   rD   s      r&   Ú!test_load_bytes_without_curve_setz*TestECDH.test_load_bytes_without_curve_seth   sO   € Ü“ˆà×Ñœ|Ô,°Ø×(Ñ(¨Ô6÷ -ð 	�‰Ð)¬3¨q¯{©{Ó+;Õ<÷ -Ð,ús    A Á A)c                 óÀ   — t        «       }t        j                  t        «      }|j	                  |j
                  «       | j                  |j                  t        «       y ©N)r   r   r,   r
   r   r-   ÚassertEqualr   )r?   r"   r.   s      r&   Ú'test_set_curve_from_received_public_keyz0TestECDH.test_set_curve_from_received_public_keyp   sA   € Ü“ˆä×"Ñ"¤?Ó3ˆà×&Ñ& t×'9Ñ'9Ô:à×Ñ˜Ÿ™¤oÕ6r(   N)Ú__name__Ú
__module__Ú__qualname__rA   rE   rH   rL   © r(   r&   r7   r7   T   s   „ ò	:ò=ò=ó7r(   r7   c                  ó  — t        t        ¬«      } | j                  «        t        t        ¬«      }|j                  «        t	        j
                  t        «      5  | j                  |j                  «       «       d d d «       t	        j
                  t        «      5  |j                  | j                  «       «       d d d «       |j                  «       | _	        | j                  «       |_	        t	        j
                  t        «      5  | j                  «        d d d «       t	        j
                  t        «      5  |j                  «        d d d «       y # 1 sw Y   ŒÙxY w# 1 sw Y   Œ¤xY w# 1 sw Y   ŒTxY w# 1 sw Y   y xY wr2   )r   r   r   r   r   r3   r   r   r    r+   r!   )r"   r#   s     r&   Ú test_ecdh_wrong_public_key_curverR   z   s  € Ü”xÔ €EØ	×ÑÔ Ü”xÔ €EØ	×ÑÔ ä	�‰Ô(Õ	)Ø×&Ñ& u×';Ñ';Ó'=Ô>÷ 
*ô 
�‰Ô(Õ	)Ø×&Ñ& u×';Ñ';Ó'=Ô>÷ 
*ð ×+Ñ+Ó-€EÔØ×+Ñ+Ó-€EÔä	�‰Ô(Õ	)Ø×)Ñ)Ô+÷ 
*ô 
�‰Ô(Õ	)Ø×)Ñ)Ô+÷ 
*Ð	)÷ 
*Ð	)ú÷ 
*Ð	)ú÷ 
*Ð	)ú÷ 
*Ð	)ús0   Á EÂ EÄE*Ä8E6ÅEÅE'Å*E3Å6E?c                  óž  — t        t        ¬«      } | j                  «        | j                  t	        j
                  t        «      j                  «       «       | j                  j                  j                  | j                  j                  _        t        j                  t        «      5  | j                  «        d d d «       y # 1 sw Y   y xY wr2   )r   r   r   r   r   r,   Úget_verifying_keyr*   r   ÚorderÚprivkeyÚsecret_multiplierr   r3   r   r!   r4   s    r&   Ú%test_ecdh_invalid_shared_secret_curverX   �   sŠ   € Ü”xÔ €EØ	×ÑÔ à	×"Ñ"Ü×ÑœHÓ%×7Ñ7Ó9ôð 38×2CÑ2C×2IÑ2I×2OÑ2O€E×Ñ×ÑÔ/ä	�‰Ô/Õ	0Ø×)Ñ)Ô+÷ 
1×	0Ñ	0ús   Â)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        | ¬«      }|j                  t        |«      «       |j                  t        |«      «       |j	                  «       }|t        |«      k(  sJ ‚y r2   )r   rG   r   Úload_received_public_key_bytesr!   )r   Ú
privatekeyÚpubkeyÚsecretÚecdhÚsharedsecrets         r&   Útest_ecdh_NISTrŽ   ¡   sV   € ôL �eÔ€DØ×Ñ¤	¨*Ó 5Ô6Ø×'Ñ'¬	°&Ó(9Ô:à×3Ñ3Ó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        «       } | j                  t        «       | j                  t        «       | j                  «       }|t        t        «      k(  sJ ‚y rJ   )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  sH   € Ü‹6€DØ×ÑÔ3Ô4Ø×%Ñ%Ô&;Ô<à×3Ñ3Ó5€Làœ9¤^Ó4Ò4Ð4Ñ4r(   c                  óØ   — t        «       } | j                  t        t        «      «       | j	                  t        t
        «      «       | j                  «       }|t        t        «      k(  sJ ‚y rJ   )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  sR   € Ü‹6€DØ×ÑœiÔ(=Ó>Ô?Ø×%Ñ%¤iÔ0EÓ&FÔGà×3Ñ3Ó5€Làœ9¤^Ó4Ò4Ð4Ñ4r(   c                   ó   — e Zd Zy)ÚRunOpenSslErrorN)rM   rN   rO   rP   r(   r&   r¡   r¡   ^  s   „ Ør(   r¡   c           
      ó8  — d}t        j                  |g| j                  «       z   t         j                  t         j                  ¬«      }|j                  «       \  }}|j                  dk7  r!t        d|›d| ›d|j                  ›d|›�«      ‚|j                  «       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ÑÜ�‰Ü× Ñ ô	€Að
 —m‘m“o�O€FˆGØ‡|�|�qÒÝâš˜QŸ\›\©6ð3ó
ð 	
ð �=‰=‹?Ðr(   c              #   ó`   K  — | ]&  }|j                  d «      d   j                  «       –— Œ( y­w)Ú:r   N)r©   Ústrip)Ú.0Úcs     r&   Ú	<genexpr>r¹   r  s-   è ø€ ð á<ˆð ‡G�GˆCƒL��O×Ñ×Ù<ùs   ‚,.zecparam -list_curvesÚ
c                 ó¤  — t        | j                  t        «      rt        j                  d«       | j
                  sJ ‚| j
                  t        vr"t        j                  d| j
                  z   «       	 t        d«      }|j                  d«      dk(  rt        j                  d«       t        j                  j                  d«      rt        j                  d«       t        j                  d«       t        d	| j
                  z  «       t        d
| j
                  z  «       t        d«       t!        | ¬«      }t!        | ¬«      }t#        d«      5 }|j%                  «       }d d d «       |j'                  «       t#        d«      5 }|j%                  «       }d d d «       |j'                  |«       t#        d«      5 }|j%                  «       }d d d «       t)        j*                  |«      }|j-                  «       |j/                  «       j-                  «       k(  sJ ‚|j/                  «       }t#        dd«      5 }|j1                  |j3                  «       «       d d d «       |j5                  |«       |j5                  |«       |j7                  «       }|j7                  «       }	||	k(  sJ ‚t        d«       t        d«       t#        dd«      5 }|j%                  «       }
d d d «       t#        dd«      5 }|j%                  «       }d d d «       t9        
«      |j                  j:                  dz  k(  sJ ‚t9        |«      |j                  j:                  dz  k(  sJ ‚|
k(  sJ ‚||
k(  sJ ‚y # t        $ r t        j                  d«       Y �ŒÛw xY w# 1 sw Y   �Œ)xY w# 1 sw Y   �ŒxY w# 1 sw Y   �ŒÙxY w# 1 sw Y   �Œ\xY w# 1 sw Y   ŒäxY w# 1 sw Y   ŒËxY w)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#   r@   ÚkeyÚvk1Úvk2r$   r%   Ússl_secret1Ússl_secret2s               r&   Útest_ecdh_with_opensslr×   x  s  € ô �&—,‘,¤	Ô*Ü�‰Ð?Ô@à×ÒÐÐà×ÑÔ":Ñ:Ü�‰Ð6¸×9LÑ9LÑLÔMð<Ü˜/Ó*ˆØ�8‰8�IÓ !Ò#Ü�K‰KÐKÔLô 
‡w�w‡}�}�SÔÜ�‰�cÔÜ‡H�HˆS„MÜØ6¸×9LÑ9LÑLôô Ø6¸×9LÑ9LÑLôô ÐBÔCä�vÔ€EÜ�vÔ€EÜ	ÐÔ	 1Ø�f‰f‹hˆ÷ 
 à	×Ñ˜sÔ#Ü	ÐÔ	 1Ø�f‰f‹hˆ÷ 
 à	×Ñ˜sÔ#ä	ˆoÔ	 !Ø�f‰f‹hˆ÷ 
ä
×
Ñ
 Ó
$€CØ�=‰=‹?˜e×2Ñ2Ó4×>Ñ>Ó@Ò@Ð@Ð@Ø
×
Ñ
Ó
 €CÜ	ˆo˜tÔ	$¨Ø	�‰�—
‘
“Ô÷ 
%ð 
×"Ñ" 3Ô'Ø	×"Ñ" 3Ô'Ø×/Ñ/Ó1€GØ×/Ñ/Ó1€Gà�gÒÐÐäØUôô ØUôô 
ˆk˜4Ô	  AØ—f‘f“hˆ÷ 
!ä	ˆk˜4Ô	  AØ—f‘f“hˆ÷ 
!ô ˆ{Ó˜sŸy™y×=Ñ=ÀÑBÒBÐBÐBÜˆw‹<˜3Ÿ9™9×9Ñ9¸QÑ>Ò>Ð>Ð>à˜+Ò%Ð%Ð%Ø�kÒ!Ð!Ñ!øôm ò <Ü�‰Ð:×;ð<ú÷  
 Ñ	ú÷ 
 Ñ	ú÷ 
Ñ	ú÷
 
%Ñ	$ú÷" 
!Ð	 úç	 Ð	 úsZ   Á34M! ÅNÆNÆ8N È3 N-ËN:Ë+OÍ!NÎNÎNÎNÎ N*Î-N7Î:OÏO):rÃ   Ú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ÚparametrizeÚnamer'   r0   r5   ÚTestCaser7   rR   rX   ÚparamrŽ   r”   rœ   r–   rž   r—   r™   rŸ   Ú	Exceptionr¡   r³   Úsetr©   rÁ   Úslowr×   r   s   0r&   Ú<module>rè      sè  ðÛ 	Û 
Û Û Û Ý ðÛ ÷	÷ 	ó 	õ ÷õ ÷ +Ý $ð ˆs�x‰xÑØ˜Ð#€Fð ‡�×ÑØØ
Ù!'Ó(¡˜ˆ�‹ Ñ(ð ó ñ
óð
ò
ò	,ô#7ˆx× Ñ ô #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ñJ-óKDðJ-ð%ð ð3ð ð!ð ðRð ð D€ò5ò5ô	�iô 	òñ  ñ áÐ/Ó0×6Ñ6°tÔ<óó Ð ð ‡�×ÑØ‡�×ÑØØ
Ù!'Ó(¡˜ˆ�‹ Ñ(ð ó ñ
C"óó ñC"øði ò Þðüò@ 	)ùòd
 	)s   œK	 ÂKÊ#KË		KËK