Ë
    V.jˆd ã                   ó¾  — d dl mZmZmZ 	 d dlZ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mZ d dlZd dlmZ d dlmZmZ d dlmZ d dlmZ ddlmZmZ dd	l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(m)Z) ddl!m*Z*m+Z+m,Z, ddl-m.Z.m/Z/ ddl-m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZIm-Z- ddlJmKZKmLZLmMZMmNZN ddlOmPZP ddl mQZQ ddl mRZR ddl mJZJ  G d„ deS«      ZTi ZUdej¬                  v rdeUd<   d„ ZW G d„ dej°                  «      ZYe
j´                  j·                  d e\d«      D � �cg c]  } dD ]  }| |f‘Œ Œ c}} «      d „ «       Z]g Z^e-D ]G  Z_d!D ]@  Z`e^jÃ                   e
jÄ                  e_e`d"jÇ                  e_jÈ                  e`«      ¬#«      «       ŒB ŒI e
j´                  j·                  d$e^«      d%„ «       Zedej¬                  v re4e:gZ^ne-Z^e
j´                  j·                  d&e^«      d'„ «       Zfe
j´                  jÎ                   G d(„ d)ej°                  «      «       Zh G d*„ d+ej°                  «      Zi G d,„ d-ej°                  «      Zj G d.„ d/ej°                  «      Zk G d0„ d1ej°                  «      Zl G d2„ d3ej°                  «      Zm G d4„ d5em«      Zn G d6„ d7em«      Zoe
j´                  j·                  d8 e
jÄ                  d9d:d;d<d=ejà                  d>d?e6d@¬#«
       e
jÄ                  dAdBdCdDd=ejâ                  dEdFe7dG¬#«
       e
jÄ                  dHdIdJdKd=ejä                  dLdMe8dN¬#«
      g«      dO„ «       Zsy# e$ r d dlZY �ŒEw xY wc c}} w )Pé    )Úwith_statementÚdivisionÚprint_functionN)ÚhexlifyÚ	unhexlify)Úpartial)ÚgivenÚsettings)Úbinary_typeé   )Ú
SigningKeyÚVerifyingKey)ÚBadSignatureErrorÚMalformedPointErrorÚBadDigestError)Úutil)Úsigencode_derÚsigencode_stringsÚsigencode_strings_canonizeÚsigencode_string_canonizeÚsigencode_der_canonize)Úsigdecode_derÚsigdecode_stringsÚsigdecode_string)Únumber_to_stringÚencoded_oid_ecPublicKeyÚMalformedSignature)ÚCurveÚUnknownCurveError)Ú	SECP112r1Ú	SECP112r2Ú	SECP128r1Ú	SECP160r1ÚNIST192pÚNIST224pÚNIST256pÚNIST384pÚNIST521pÚ	SECP256k1ÚBRAINPOOLP160r1ÚBRAINPOOLP192r1ÚBRAINPOOLP224r1ÚBRAINPOOLP256r1ÚBRAINPOOLP320r1ÚBRAINPOOLP384r1ÚBRAINPOOLP512r1ÚBRAINPOOLP160t1ÚBRAINPOOLP192t1ÚBRAINPOOLP224t1ÚBRAINPOOLP256t1ÚBRAINPOOLP320t1ÚBRAINPOOLP384t1ÚBRAINPOOLP512t1ÚEd25519ÚEd448Úcurves)Úcurve_brainpoolp224r1Úcurve_brainpoolp256r1Úcurve_brainpoolp384r1Úcurve_brainpoolp512r1)ÚPoint)Úder)Úrfc6979)Úecdsac                   ó   — e Zd Zy)ÚSubprocessErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úTC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\ecdsa/test_pyecdsa.pyrD   rD   J   s   „ ØrI   rD   z--fasté   Úmax_examplesc           
      ó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Ú
returncoderD   Údecode)ÚcmdÚOPENSSLÚprO   Úignoreds        rJ   Úrun_opensslr^   U   s�   € Ø€GÜ×ÑØ	ˆ	�C—I‘I“KÑÜ�‰Ü× Ñ ô	€Að
 —m‘m“o�O€FˆGØ‡|�|�qÒÝâš˜QŸ\›\©6ð3ó
ð 	
ð �=‰=‹?ÐrI   c                   ó˜  — e 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„ 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„ 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&„ Z(d'„ Z)d(„ Z*d)„ Z+d*„ Z,d+„ Z-d,„ Z.d-„ Z/d.„ Z0d/„ Z1d0„ Z2d1„ Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7d6„ Z8d7„ Z9d8„ Z:d9„ Z;d:„ Z<d;„ Z=d<„ Z>d=„ Z?d>„ Z@d?„ ZAd@„ ZBdA„ ZCdB„ ZDyC)DÚECDSAc                 ó†  — t        j                  «       }|j                  «       }d}|j                  |«      }| j	                  |j                  ||«      «       | j                  t        |j
                  ||dz   «       t        j                  |j                  «       «      }| j	                  |j                  ||«      «       y )Nó   blahblahs   bad)r   ÚgenerateÚget_verifying_keyÚsignÚ
assertTrueÚverifyÚassertRaisesr   r   Úfrom_stringÚ	to_string)ÚselfÚprivÚpubÚdataÚsigÚpub2s         rJ   Ú
test_basiczECDSA.test_basicf   s‘   € Ü×"Ñ"Ó$ˆØ×$Ñ$Ó&ˆàˆØ�i‰i˜‹oˆà�‰˜Ÿ
™
 3¨Ó-Ô.Ø×ÑÔ+¨S¯Z©Z¸¸dÀV¹mÔLä×'Ñ'¨¯©«Ó8ˆØ�‰˜Ÿ™ C¨Ó.Õ/rI   c                 óò  — d}t        dd«      }t        j                  |t        t        j
                  «      }|j                  «       }t        j                  t        j                  j                  «       |t        j
                  t	        j
                  |«      j                  «       «      }|j                  ||¬«      }| j                  |j                  ||«      «       |j                  ||¬«      }| j                  |j                  ||«      «       |j                  |t        j
                  «      }| j                  |j                  ||«      «       | j!                  ||«       | j!                  ||«       y )Nrb   Ú 9d0219792467d7d37b4d43298a7d0c05é   )Úk)Úintr   Úfrom_secret_exponentr)   ÚhashlibÚsha256rd   rA   Ú
generate_kÚ	generatorÚorderÚdigestre   rf   rg   Úsign_deterministicÚassertEqual)	rk   rn   Úsecexprl   rm   ru   Úsig1Úsig2Úsig3s	            rJ   Útest_deterministiczECDSA.test_deterministics   s!  € ØˆÜÐ7¸Ó<ˆä×.Ñ.Ø”IœwŸ~™~ó
ˆð ×$Ñ$Ó&ˆä×ÑÜ×Ñ×%Ñ%Ó'ØÜ�N‰NÜ�N‰N˜4Ó ×'Ñ'Ó)ó	
ˆð �y‰y˜ ˆyÓ#ˆØ�‰˜Ÿ
™
 4¨Ó.Ô/à�y‰y˜ ˆyÓ#ˆØ�‰˜Ÿ
™
 4¨Ó.Ô/à×&Ñ& t¬W¯^©^Ó<ˆØ�‰˜Ÿ
™
 4¨Ó.Ô/à×Ñ˜˜tÔ$Ø×Ñ˜˜tÕ$rI   c                 ól   — | j                  t        t        «       | j                  t        t        «       y ©N)rh   Ú	TypeErrorr   r   ©rk   s    rJ   Útest_bad_usagezECDSA.test_bad_usage�   s"   € à×Ñœ)¤ZÔ0Ø×Ñœ)¤\Õ2rI   c                 ó*  — t         }t        j                  «       }|j                  «       }| j	                  t        |j                  «       «      |j                  «       |j                  d«      }| j	                  t        |«      |j                  «       y )Nó   data)
r$   r   rc   rd   r   Úlenrj   Úverifying_key_lengthre   Úsignature_length)rk   Údefaultrl   rm   ro   s        rJ   Útest_lengths_defaultzECDSA.test_lengths_default”   sl   € ÜˆÜ×"Ñ"Ó$ˆØ×$Ñ$Ó&ˆØ×Ñœ˜SŸ]™]›_Ó-¨w×/KÑ/KÔLØ�i‰i˜Ó ˆØ×Ñœ˜S› 7×#;Ñ#;Õ<rI   c                 óü  — d}t         }t        j                  ||j                  «      }t        j                  ||j                  «      }| j	                  ||«       t        j                  ||«      }t        j                  ||«      }| j	                  t        |j                  «       «      t        |j                  «       «      «       | j	                  |j                  «       |j                  «       «       |j                  «       }|j                  «       }d}	|j                  |	«      }
|j                  |	«      }| j                  |j                  |
|	«      «       | j                  |j                  |
|	«      «       | j                  |j                  ||	«      «       | j                  |j                  ||	«      «       | j	                  t        |j                  «       «      t        |j                  «       «      «       y )Ns   secretr‹   )r$   r   Ú randrange_from_seed__trytryagainr|   r   r   rw   r   rj   Úto_pemrd   re   rf   rg   )rk   ÚseedÚcurveÚsecexp1Úsecexp2Úpriv1Úpriv2Úpub1rp   rn   r�   r‚   s               rJ   Útest_serializezECDSA.test_serializeœ   sv  € ØˆÜˆÜ×7Ñ7¸¸e¿k¹kÓJˆÜ×7Ñ7¸¸e¿k¹kÓJˆØ×Ñ˜ 'Ô*Ü×/Ñ/°¸Ó?ˆÜ×/Ñ/°¸Ó?ˆØ×ÑÜ�E—O‘OÓ%Ó&¬°·±Ó0AÓ(Bô	
ð 	×Ñ˜Ÿ™›¨¯©«Ô8Ø×&Ñ&Ó(ˆØ×&Ñ&Ó(ˆØˆØ�z‰z˜$ÓˆØ�z‰z˜$ÓˆØ�‰˜Ÿ™ D¨$Ó/Ô0Ø�‰˜Ÿ™ D¨$Ó/Ô0Ø�‰˜Ÿ™ D¨$Ó/Ô0Ø�‰˜Ÿ™ D¨$Ó/Ô0Ø×Ñœ §¡Ó!1Ó2´G¸D¿N¹NÓ<LÓ4MÕNrI   c                 ó¸  ‡— dŠˆfd„}t        j                  |¬«      }t        j                  |¬«      }| j                  t        |j	                  «       j                  «       «      t        |j	                  «       j                  «       «      «       |j                  d|¬«      }|j                  d|¬«      }| j                  t        |«      t        |«      «       y )Nó=   all the entropy in the entire world, compressed into one linec                 ó   •— ‰d |  S r†   rH   ©ÚnumbytesÚss    €rJ   Únot_much_entropyz.ECDSA.test_nonrandom.<locals>.not_much_entropy¶   ó   ø€ Ø�Y�h�<ÐrI   ©Úentropyr‹   )r   rc   r   r   rd   rj   re   )rk   r¢   r˜   r™   r�   r‚   r¡   s         @rJ   Útest_nonrandomzECDSA.test_nonrandom³   s³   ø€ ØLˆô	 ô ×#Ñ#Ð,<Ô=ˆÜ×#Ñ#Ð,<Ô=ˆØ×ÑÜ�E×+Ñ+Ó-×7Ñ7Ó9Ó:Ü�E×+Ñ+Ó-×7Ñ7Ó9Ó:ô	
ð �z‰z˜'Ð+;ˆzÓ<ˆØ�z‰z˜'Ð+;ˆzÓ<ˆØ×Ñœ ›¬°«Õ6rI   c                 ó  — | j                  |j                  j                  |j                  j                  «       | j                  |j                  j                  j                  |j                  j                  j                  «       y r†   )r   ÚprivkeyÚsecret_multiplierÚ
public_keyr{   )rk   r˜   r™   s      rJ   ÚassertTruePrivkeysEqualzECDSA.assertTruePrivkeysEqualÈ   s_   € Ø×ÑØ�M‰M×+Ñ+¨U¯]©]×-LÑ-Lô	
ð 	×ÑØ�M‰M×$Ñ$×.Ñ.Ø�M‰M×$Ñ$×.Ñ.õ	
rI   c                 ó–  ‡— dŠˆfd„}t        j                  «       }| j                  |j                  t        j                  «       t        j                  t
        ¬«      }| j                  |j                  t
        j                  «       t        j                  |¬«      }| j                  |j                  t        j                  «       t        j                  |¬«      }| j                  |j                  t        j                  «       | j                  ||«       t        j                  d¬«      }| j                  |j                  t        j                  «       t        j                  d¬«      }| j                  ||«       t        j                  dt
        ¬«      }| j                  |j                  t
        j                  «       y )	Nr�   c                 ó   •— ‰d |  S r†   rH   rŸ   s    €rJ   r¢   z5ECDSA.test_privkey_creation.<locals>.not_much_entropyÔ   r£   rI   ©r•   r¤   é   )r€   é   )r€   r•   )r   rc   r   Úbaselenr$   r%   r«   rw   )rk   r¢   r˜   r™   r¡   s       @rJ   Útest_privkey_creationzECDSA.test_privkey_creationÑ   s=  ø€ ØLˆô	 ô ×#Ñ#Ó%ˆØ×Ñ˜Ÿ™¬×(8Ñ(8Ô9ä×#Ñ#¬(Ô3ˆØ×Ñ˜Ÿ™¬×(8Ñ(8Ô9ä×#Ñ#Ð,<Ô=ˆØ×Ñ˜Ÿ™¬×(8Ñ(8Ô9Ü×#Ñ#Ð,<Ô=ˆØ×Ñ˜Ÿ™¬×(8Ñ(8Ô9Ø×$Ñ$ U¨EÔ2ä×/Ñ/°qÔ9ˆØ×Ñ˜Ÿ™¬×(8Ñ(8Ô9Ü×/Ñ/°qÔ9ˆØ×$Ñ$ U¨EÔ2ä×/Ñ/°qÄÔIˆØ×Ñ˜Ÿ™¬×(8Ñ(8Õ9rI   c                 óF  — t        j                  «       }|j                  «       }| j                  t	        |«      t
        «       | j                  t        |«      t        j                  «       t        j                  |«      }| j                  ||«       |j                  «       }| j                  t	        |«      t
        «       | j                  |j                  d«      «       | j                  |j                  «       j                  d«      «       t        j                   |«      }| j                  ||«       |j#                  «       }| j                  t	        |«      t
        «       t        j$                  |«      }| j                  ||«       t        j                  t&        ¬«      }|j                  «       }| j                  t	        |«      t
        «       | j                  |j                  d«      «       | j                  |j                  «       j                  d«      «       t        j                   |«      }| j                  ||«       |j#                  «       }| j                  t	        |«      t
        «       t        j$                  |«      }| j                  ||«       y )Nó   -----BEGIN EC PRIVATE KEY-----ó   -----END EC PRIVATE KEY-----r®   )r   rc   rj   r   Útyper   rŒ   r$   r±   ri   r«   r“   rf   Ú
startswithÚstripÚendswithÚfrom_pemÚto_derÚfrom_derr&   ©rk   r˜   Ús1r™   s       rJ   Útest_privkey_stringszECDSA.test_privkey_stringsë   sÞ  € Ü×#Ñ#Ó%ˆØ�_‰_ÓˆØ×Ñœ˜b›¤;Ô/Ø×Ñœ˜R›¤(×"2Ñ"2Ô3Ü×&Ñ& rÓ*ˆØ×$Ñ$ U¨EÔ2à�\‰\‹^ˆØ×Ñœ˜b›¤;Ô/Ø�‰˜Ÿ™Ð&GÓHÔIØ�‰˜Ÿ™›
×+Ñ+Ð,KÓLÔMÜ×#Ñ# BÓ'ˆØ×$Ñ$ U¨EÔ2à�\‰\‹^ˆØ×Ñœ˜b›¤;Ô/Ü×#Ñ# BÓ'ˆØ×$Ñ$ U¨EÔ2ä×#Ñ#¬(Ô3ˆØ�\‰\‹^ˆØ×Ñœ˜b›¤;Ô/Ø�‰˜Ÿ™Ð&GÓHÔIØ�‰˜Ÿ™›
×+Ñ+Ð,KÓLÔMÜ×#Ñ# BÓ'ˆØ×$Ñ$ U¨EÔ2à�\‰\‹^ˆØ×Ñœ˜b›¤;Ô/Ü×#Ñ# BÓ'ˆØ×$Ñ$ U¨EÕ2rI   c                 ó,  — t        j                  t        ¬«      }|j                  «       }| j	                  t        |«      t        «       | j                  |j                  d«      «       | j                  |j                  «       j                  d«      «       t        j                  |«      }| j                  ||«       |j                  «       }| j	                  t        |«      t        «       t        j                  |«      }| j                  ||«       y )Nr®   r´   rµ   )r   rc   r0   r“   r   r¶   r   rf   r·   r¸   r¹   rº   r«   r»   r¼   r½   s       rJ   Útest_privkey_strings_brainpoolz$ECDSA.test_privkey_strings_brainpool  sÄ   € Ü×#Ñ#¬/Ô:ˆØ�\‰\‹^ˆØ×Ñœ˜b›¤;Ô/Ø�‰˜Ÿ™Ð&GÓHÔIØ�‰˜Ÿ™›
×+Ñ+Ð,KÓLÔMÜ×#Ñ# BÓ'ˆØ×$Ñ$ U¨EÔ2à�\‰\‹^ˆØ×Ñœ˜b›¤;Ô/Ü×#Ñ# BÓ'ˆØ×$Ñ$ U¨EÕ2rI   c                 ó8  — | j                  |j                  j                  |j                  j                  «       | j                  |j                  j                  |j                  j                  «       | j                  |j                  |j                  «       y r†   )r   ÚpubkeyÚpointr{   r•   )rk   rš   rp   s      rJ   ÚassertTruePubkeysEqualzECDSA.assertTruePubkeysEqual  sb   € Ø×Ñ˜Ÿ™×*Ñ*¨D¯K©K×,=Ñ,=Ô>Ø×Ñ˜Ÿ™×.Ñ.°·±×0EÑ0EÔFØ×Ñ˜Ÿ™ T§Z¡ZÕ0rI   c                 ó   — t        j                  «       }|j                  «       }|j                  «       }| j	                  t        |«      t        «       | j	                  t        |«      t        j                  «       t        j                  |«      }| j                  ||«       t        j                  t        ¬«      }|j                  «       }|j                  «       }| j	                  t        |«      t        «       | j	                  t        |«      t        j                  «       t        j                  |t        ¬«      }| j                  ||«       |j                  «       }| j	                  t        |«      t        «       t        j                  |«      }| j                  ||«       | j!                  t"        j$                  t        j                  |dz   «       t        j                  |«      } G d„ d«      } G d„ d«      }t'        d |«        |«       dd «      }	|	|_        |j                  «       }
| j!                  t*        t        j                  |
«       |j-                  «       }| j	                  t        |«      t        «       | j/                  |j1                  d	«      |«       | j/                  |j3                  «       j5                  d
«      |«       t        j6                  |«      }| j                  ||«       y )Nr®   ó   junkc                   ó   — e Zd Zd„ Zy)ú0ECDSA.test_pubkey_strings.<locals>.FakeGeneratorc                  ó   — y)NéÍ[rH   rˆ   s    rJ   r|   z6ECDSA.test_pubkey_strings.<locals>.FakeGenerator.order;  s   € Ø rI   N)rE   rF   rG   r|   rH   rI   rJ   ÚFakeGeneratorrÉ   :  s   „ ó!rI   rÌ   c                   ó   — e Zd Zd„ Zy)ú.ECDSA.test_pubkey_strings.<locals>.FakeCurveFpc                 ó   — t        d«      S )NÚM65255345290392407050209505469627313404541085228058844382513856749047873406763)rv   rˆ   s    rJ   r\   z0ECDSA.test_pubkey_strings.<locals>.FakeCurveFp.p?  s   € Üð?óð rI   N)rE   rF   rG   r\   rH   rI   rJ   ÚFakeCurveFprÎ   >  s   „ órI   rÑ   Úunknown)r   rK   r¯   r°   é   é   s   -----BEGIN PUBLIC KEY-----s   -----END PUBLIC KEY-----)r   rc   rd   rj   r   r¶   r   rŒ   r$   r�   r   ri   rÅ   r&   r»   r¼   rh   r@   ÚUnexpectedDERr   r•   r   r“   rf   r·   r¸   r¹   rº   )rk   r˜   rš   r¾   rp   Úpub1_derÚbadpubrÌ   rÑ   ÚbadcurveÚbadderÚpems               rJ   Útest_pubkey_stringszECDSA.test_pubkey_strings  s=  € Ü×#Ñ#Ó%ˆØ×&Ñ&Ó(ˆØ�^‰^ÓˆØ×Ñœ˜b›¤;Ô/Ø×Ñœ˜R›¤(×"?Ñ"?Ô@Ü×'Ñ'¨Ó+ˆØ×#Ñ# D¨$Ô/ä×#Ñ#¬(Ô3ˆØ×&Ñ&Ó(ˆØ�^‰^ÓˆØ×Ñœ˜b›¤;Ô/Ø×Ñœ˜R›¤(×"?Ñ"?Ô@Ü×'Ñ'¨´(Ô;ˆØ×#Ñ# D¨$Ô/à—;‘;“=ˆØ×Ñœ˜h›¬Ô5Ü×$Ñ$ XÓ.ˆØ×#Ñ# D¨$Ô/à×ÑÜ×Ñœ|×4Ñ4°hÀÑ6Hô	
ô ×&Ñ& xÓ0ˆ÷	!ñ 	!÷	ñ 	ô Ø‘{“}¡m£oÐ7IÈ4ó
ˆð  ˆŒØ—‘“ˆØ×ÑÔ+¬\×-BÑ-BÀFÔKà�k‰k‹mˆØ×Ñœ˜c›¤KÔ0Ø�‰˜Ÿ™Ð'DÓEÀsÔKØ�‰˜Ÿ	™	›×,Ñ,Ð-HÓIÈ3ÔOÜ×$Ñ$ SÓ)ˆØ×#Ñ# D¨$Õ/rI   c                 ó  — t        j                  t        ¬«      }|j                  «       }|j	                  «       }| j                  t        |«      t        «       | j                  t        |«      t        j                  «       t        j                  |t        ¬«      }| j                  ||«       |j                  «       }| j                  t        |«      t        «       t        j                  |«      }| j                  ||«       y ©Nr®   )r   rc   r0   rd   rj   r   r¶   r   rŒ   r�   r   ri   rÅ   r»   r¼   )rk   r˜   rš   r¾   rp   rÖ   s         rJ   Útest_pubkey_strings_brainpoolz#ECDSA.test_pubkey_strings_brainpoolS  s»   € Ü×#Ñ#¬/Ô:ˆØ×&Ñ&Ó(ˆØ�^‰^ÓˆØ×Ñœ˜b›¤;Ô/Ø×Ñœ˜R›¤/×"FÑ"FÔGÜ×'Ñ'¨´/ÔBˆØ×#Ñ# D¨$Ô/à—;‘;“=ˆØ×Ñœ˜h›¬Ô5Ü×$Ñ$ XÓ.ˆØ×#Ñ# D¨$Õ/rI   c                 óº   — t        j                  «       }|j                  }| j                  t        «      5  |j                  d«       d d d «       y # 1 sw Y   y xY w©NÚraw)r   rc   Úverifying_keyrh   Ú
ValueErrorr»   ©rk   ÚskÚvks      rJ   Ú*test_vk_to_der_with_invalid_point_encodingz0ECDSA.test_vk_to_der_with_invalid_point_encodinga  sA   € Ü× Ñ Ó"ˆØ×Ñˆà×ÑœzÕ*Ø�I‰I�eÔ÷ +×*Ñ*ús   ¶AÁAc                 ó¢   — t        j                  «       }| j                  t        «      5  |j	                  d«       d d d «       y # 1 sw Y   y xY wrà   )r   rc   rh   rã   r»   ©rk   rå   s     rJ   Ú*test_sk_to_der_with_invalid_point_encodingz0ECDSA.test_sk_to_der_with_invalid_point_encodingh  s6   € Ü× Ñ Ó"ˆà×ÑœzÕ*Ø�I‰I�eÔ÷ +×*Ñ*ús   ªAÁAc                 óP  — t         }t        j                  dŽ dz   }t        j                  ||«      }t        j                  dd «      }t        j                  ||«      }| j                  t        j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)N©r   rK   éH  é='  r¯   r   r   ó   garbageó    ÿ©	r   r@   Ú
encode_oidÚencode_sequenceÚencode_bitstringrh   rÕ   r   r¼   ©rk   Útype_oid_derÚcurve_oid_derÚenc_type_derÚ	point_derÚ	to_decodes         rJ   Ú(test_vk_from_der_garbage_after_curve_oidz.ECDSA.test_vk_from_der_garbage_after_curve_oidn  s„   € Ü.ˆä�N‰NÐ7Ð8¸:ÑEð 	ô ×*Ñ*¨<¸ÓGˆÜ×(Ñ(¨°dÓ;ˆ	Ü×'Ñ'¨°iÓ@ˆ	à×Ñœs×0Ñ0Õ1Ü×!Ñ! )Ô,÷ 2×1Ñ1úó   Á=BÂB%c                 ób  — t        j                  dŽ }t        j                  dŽ }t        j                  ||«      }t        j                  dd «      }t        j                  ||«      }| j	                  t         j
                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)N©r   rK   r¯   rì   rð   )r@   rò   ró   rô   rh   rÕ   r   r¼   rõ   s         rJ   Ú!test_vk_from_der_invalid_key_typez'ECDSA.test_vk_from_der_invalid_key_typez  sƒ   € Ü—~‘~ yÐ1ˆÜŸ™Ð(CÐDˆÜ×*Ñ*¨<¸ÓGˆÜ×(Ñ(¨°dÓ;ˆ	Ü×'Ñ'¨°iÓ@ˆ	à×Ñœs×0Ñ0Õ1Ü×!Ñ! )Ô,÷ 2×1Ñ1ús   ÂB%Â%B.c                 óP  — t         }t        j                  dŽ }t        j                  ||«      }t        j                  dd «      dz   }t        j                  ||«      }| j                  t        j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)Nrì   rð   rï   rñ   rõ   s         rJ   Ú+test_vk_from_der_garbage_after_point_stringz1ECDSA.test_vk_from_der_garbage_after_point_string„  s   € Ü.ˆÜŸ™Ð(CÐDˆÜ×*Ñ*¨<¸ÓGˆÜ×(Ñ(¨°dÓ;¸jÑHˆ	Ü×'Ñ'¨°iÓ@ˆ	à×Ñœs×0Ñ0Õ1Ü×!Ñ! )Ô,÷ 2×1Ñ1úrü   c                 óJ  — t         }t        j                  dŽ }t        j                  ||«      }t        j                  dd «      }t        j                  ||«      }| j                  t        j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)Nrì   s   ÿrñ   rõ   s         rJ   Ú"test_vk_from_der_invalid_bitstringz(ECDSA.test_vk_from_der_invalid_bitstringŽ  sz   € Ü.ˆÜŸ™Ð(CÐDˆÜ×*Ñ*¨<¸ÓGˆÜ×(Ñ(¨°dÓ;ˆ	Ü×'Ñ'¨°iÓ@ˆ	à×Ñœs×0Ñ0Õ1Ü×!Ñ! )Ô,÷ 2×1Ñ1úó   Á:BÂB"c                 ó6  — t         }t        j                  dŽ }t        j                  ||«      }t        j                  dd«      }t        j                  ||«      }| j                  t        «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)Nrì   ó@   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr   )	r   r@   rò   ró   rô   rh   r   r   r¼   rõ   s         rJ   Ú0test_vk_from_der_with_invalid_length_of_encodingz6ECDSA.test_vk_from_der_with_invalid_length_of_encoding˜  su   € Ü.ˆÜŸ™Ð(CÐDˆÜ×*Ñ*¨<¸ÓGˆÜ×(Ñ(¨°qÓ9ˆ	Ü×'Ñ'¨°iÓ@ˆ	à×ÑÔ2Õ3Ü×!Ñ! )Ô,÷ 4×3Ñ3ús   Á0BÂBc                 óJ  — t         }t        j                  dŽ }t        j                  ||«      }t        j                  dd«      }t        j                  ||«      }| j                  t        j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)Nrì   s0   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr   rñ   rõ   s         rJ   Ú"test_vk_from_der_with_raw_encodingz(ECDSA.test_vk_from_der_with_raw_encoding¢  sz   € Ü.ˆÜŸ™Ð(CÐDˆÜ×*Ñ*¨<¸ÓGˆÜ×(Ñ(¨°qÓ9ˆ	Ü×'Ñ'¨°iÓ@ˆ	à×Ñœs×0Ñ0Õ1Ü×!Ñ! )Ô,÷ 2×1Ñ1úr  c                 ó&  — t        j                  «       }|j                  «       }d}|j                  |«      }| j	                  t        |«      t        «       | j	                  t        |«      t        j                  «       | j                  |j                  ||«      «       |j                  |t        ¬«      }| j	                  t        |«      t        «       | j	                  t        |«      d«       | j	                  t        |d   «      t        «       | j	                  t        |d   «      t        «       | j	                  t        |d   «      t        j                  «       | j	                  t        |d   «      t        j                  «       | j                  |j                  ||t        ¬«      «       |j                  |t         ¬«      }| j	                  t        |«      t        «       | j                  |j                  ||t"        ¬«      «       y )Nr‹   )Ú	sigencoderK   r   r   )Ú	sigdecode)r   rc   rd   re   r   r¶   r   rŒ   r$   rŽ   rf   rg   r   Útupler±   r   r   r   )rk   r˜   rš   rn   ro   Úsig_ders         rJ   Útest_signature_stringszECDSA.test_signature_strings¬  sz  € Ü×#Ñ#Ó%ˆØ×&Ñ&Ó(ˆØˆà�j‰j˜ÓˆØ×Ñœ˜c›¤KÔ0Ø×Ñœ˜S›¤8×#<Ñ#<Ô=Ø�‰˜Ÿ™ C¨Ó.Ô/à�j‰j˜Ô):ˆjÓ;ˆØ×Ñœ˜c›¤EÔ*Ø×Ñœ˜S› 1Ô%Ø×Ñœ˜c !™f›¤{Ô3Ø×Ñœ˜c !™f›¤{Ô3Ø×Ñœ˜S ™V›¤h×&6Ñ&6Ô7Ø×Ñœ˜S ™V›¤h×&6Ñ&6Ô7Ø�‰˜Ÿ™ C¨Ô9J˜ÓKÔLà—*‘*˜T¬]�*Ó;ˆØ×Ñœ˜g›¬Ô4Ø�‰˜Ÿ™ G¨T¼]˜ÓKÕLrI   c                 ó¨   — d}d}t         j                  }t        t        |||«      |«      \  }}| j	                  ||«       | j	                  ||«       y ©Né   i�  ©r    r|   r   r   r   ©rk   Úrr¡   r|   Únew_rÚnew_ss         rJ   Ú(test_sigencode_string_canonize_no_changez.ECDSA.test_sigencode_string_canonize_no_changeÃ  sS   € ØˆØˆÜ—‘ˆä'Ü% a¨¨EÓ2°Eó
‰ˆˆuð 	×Ñ˜˜EÔ"Ø×Ñ˜˜EÕ"rI   c                 ó´   — d}t         j                  }|dz
  }t        t        |||«      |«      \  }}| j	                  ||«       | j	                  ||z
  |«       y ©Nr  é
   r  ©rk   r  r|   r¡   r  r  s         rJ   Útest_sigencode_string_canonizez$ECDSA.test_sigencode_string_canonizeÏ  s[   € ØˆÜ—‘ˆØ�B‰Jˆä'Ü% a¨¨EÓ2°Eó
‰ˆˆuð 	×Ñ˜˜EÔ"Ø×Ñ˜ ™ EÕ*rI   c                 ó¨   — d}d}t         j                  }t        t        |||«      |«      \  }}| j	                  ||«       | j	                  ||«       y r  ©r    r|   r   r   r   r  s         rJ   Ú)test_sigencode_strings_canonize_no_changez/ECDSA.test_sigencode_strings_canonize_no_changeÛ  sS   € ØˆØˆÜ—‘ˆä(Ü& q¨!¨UÓ3°Uó
‰ˆˆuð 	×Ñ˜˜EÔ"Ø×Ñ˜˜EÕ"rI   c                 ó´   — d}t         j                  }|dz
  }t        t        |||«      |«      \  }}| j	                  ||«       | j	                  ||z
  |«       y r  r  r  s         rJ   Útest_sigencode_strings_canonizez%ECDSA.test_sigencode_strings_canonizeç  s[   € ØˆÜ—‘ˆØ�B‰Jˆä(Ü& q¨!¨UÓ3°Uó
‰ˆˆuð 	×Ñ˜˜EÔ"Ø×Ñ˜ ™ EÕ*rI   c                 ó¨   — d}d}t         j                  }t        t        |||«      |«      \  }}| j	                  ||«       | j	                  ||«       y )Né   éÈ   ©r    r|   r   r   r   r  s         rJ   Ú%test_sigencode_der_canonize_no_changez+ECDSA.test_sigencode_der_canonize_no_changeó  sS   € ØˆØˆÜ—‘ˆä$Ü" 1 a¨Ó/°ó
‰ˆˆuð 	×Ñ˜˜EÔ"Ø×Ñ˜˜EÕ"rI   c                 ó´   — d}t         j                  }|dz
  }t        t        |||«      |«      \  }}| j	                  ||«       | j	                  ||z
  |«       y )Nr$  é   r&  r  s         rJ   Útest_sigencode_der_canonizez!ECDSA.test_sigencode_der_canonizeÿ  s[   € ØˆÜ—‘ˆØ�B‰Jˆä$Ü" 1 a¨Ó/°ó
‰ˆˆuð 	×Ñ˜˜EÔ"Ø×Ñ˜ ™ EÕ*rI   c                 ó  — d}t         j                  }|dz  dz   }t        |||«      }t        |||«      }| j	                  ||«       t        t        |||«      |«      \  }}| j                  ||«       | j                  ||z
  |«       y )Nr$  rK   r   )r    r|   r   r   ÚassertNotEqualr   r   )rk   r  r|   r¡   Úregular_encodeÚcanonical_encoder  r  s           rJ   Ú4test_sigencode_der_canonize_with_close_to_half_orderz:ECDSA.test_sigencode_der_canonize_with_close_to_half_order  s�   € ØˆÜ—‘ˆØ�Q‰J˜‰Nˆä& q¨!¨UÓ3ˆÜ1°!°Q¸Ó>Ðà×Ñ˜NÐ,<Ô=ä$Ü" 1 a¨Ó/°ó
‰ˆˆuð 	×Ñ˜˜EÔ"Ø×Ñ˜ ™ EÕ*rI   c                 ót   — | j                  t        «      5  t        g d¢d«       d d d «       y # 1 sw Y   y xY w)N)ó   oneó   twos   threeéÿ   ©rh   r   r   rˆ   s    rJ   Ú*test_sig_decode_strings_with_invalid_countz0ECDSA.test_sig_decode_strings_with_invalid_count  s(   € Ø×ÑÔ1Õ2ÜÒ8¸$Ô?÷ 3×2Ñ2úó   –.®7c                 ót   — | j                  t        «      5  t        ddgd«       d d d «       y # 1 sw Y   y xY w)Nr1  r2  r3  r4  rˆ   s    rJ   Ú(test_sig_decode_strings_with_wrong_r_lenz.ECDSA.test_sig_decode_strings_with_wrong_r_len   s,   € Ø×ÑÔ1Õ2Ü˜v vÐ.°Ô5÷ 3×2Ñ2úr6  c                 ót   — | j                  t        «      5  t        ddgd«       d d d «       y # 1 sw Y   y xY w)Nó    s   °ÿr3  r4  rˆ   s    rJ   Ú(test_sig_decode_strings_with_wrong_s_lenz.ECDSA.test_sig_decode_strings_with_wrong_s_len$  s,   € Ø×ÑÔ1Õ2Ü˜w¨Ð4°dÔ;÷ 3×2Ñ2úr6  c                 ó¼   — t        j                  «       }|j                  }| j                  t        «      5  |j                  d d«       d d d «       y # 1 sw Y   y xY w)Ns€                                                                                                                                   )r   rc   râ   rh   r   Úverify_digesträ   s      rJ   Útest_verify_with_too_long_inputz%ECDSA.test_verify_with_too_long_input(  sE   € Ü× Ñ Ó"ˆØ×Ñˆà×Ñœ~Õ.Ø×Ñ˜T =Ô1÷ /×.Ñ.ús   ¶AÁAc                 ó‚   — | j                  t        «      5  t        j                  d«       d d d «       y # 1 sw Y   y xY w©Nr   )rh   r   r   rw   rˆ   s    rJ   Ú4test_sk_from_secret_exponent_with_wrong_sec_exponentz:ECDSA.test_sk_from_secret_exponent_with_wrong_sec_exponent/  s+   € Ø×ÑÔ2Õ3Ü×+Ñ+¨AÔ.÷ 4×3Ñ3úó   –5µ>c                 ó‚   — | j                  t        «      5  t        j                  d«       d d d «       y # 1 sw Y   y xY w)Nó   )rh   r   r   ri   rˆ   s    rJ   Ú)test_sk_from_string_with_wrong_len_stringz/ECDSA.test_sk_from_string_with_wrong_len_string3  s+   € Ø×ÑÔ2Õ3Ü×"Ñ" 7Ô+÷ 4×3Ñ3úrB  c                 óð   — t        j                  d«      }t        j                  |«      dz   }| j                  t         j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)Nr   rï   ©r@   Úencode_integerró   rh   rÕ   r   r¼   ©rk   Úver_derrú   s      rJ   Ú)test_sk_from_der_with_junk_after_sequencez/ECDSA.test_sk_from_der_with_junk_after_sequence7  sU   € Ü×$Ñ$ QÓ'ˆÜ×'Ñ'¨Ó0°:Ñ=ˆ	à×Ñœs×0Ñ0Õ1Ü×Ñ 	Ô*÷ 2×1Ñ1ús   ÁA,Á,A5c                 óê   — t        j                  d«      }t        j                  |«      }| j                  t         j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY wr@  rG  rI  s      rJ   Ú#test_sk_from_der_with_wrong_versionz)ECDSA.test_sk_from_der_with_wrong_version>  sP   € Ü×$Ñ$ QÓ'ˆÜ×'Ñ'¨Ó0ˆ	à×Ñœs×0Ñ0Õ1Ü×Ñ 	Ô*÷ 2×1Ñ1ús   Á
A)Á)A2c                 ój  — t        j                  d«      }t        j                  d«      }t        j                  dŽ }t        j                  d|«      }t        j
                  ||||«      }| j                  t         j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)Nr   rð   rþ   ©
r@   rH  Úencode_octet_stringrò   Úencode_constructedró   rh   rÕ   r   r¼   ©rk   rJ  Úprivkey_derr÷   Ú	const_derrú   s         rJ   Ú"test_sk_from_der_invalid_const_tagz(ECDSA.test_sk_from_der_invalid_const_tagE  s‹   € Ü×$Ñ$ QÓ'ˆÜ×-Ñ-¨kÓ:ˆÜŸ™¨	Ð2ˆÜ×*Ñ*¨1¨mÓ<ˆ	Ü×'Ñ'Ø�[ )¨]ó
ˆ	ð ×Ñœs×0Ñ0Õ1Ü×Ñ 	Ô*÷ 2×1Ñ1ús   Â
B)Â)B2c                 óp  — t        j                  d«      }t        j                  d«      }t        j                  dŽ dz   }t        j                  d|«      }t        j
                  ||||«      }| j                  t         j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)Nr   rð   rþ   rï   r   rO  rR  s         rJ   Ú*test_sk_from_der_garbage_after_privkey_oidz0ECDSA.test_sk_from_der_garbage_after_privkey_oidQ  s�   € Ü×$Ñ$ QÓ'ˆÜ×-Ñ-¨kÓ:ˆÜŸ™¨	Ð2°ZÑ?ˆÜ×*Ñ*¨1¨mÓ<ˆ	Ü×'Ñ'Ø�[ )¨]ó
ˆ	ð ×Ñœs×0Ñ0Õ1Ü×Ñ 	Ô*÷ 2×1Ñ1ús   ÂB,Â,B5c                 óN  — t        j                  d«      }t        j                  d«      }t        j                  dŽ }t        j                  d|«      }t        j
                  ||||«      }t        j                  |«      }| j                  |j                  j                  d«       y )Nr   rð   rì   r   r3  )r@   rH  rP  rò   rQ  ró   r   r¼   r   r¨   r©   )rk   rJ  rS  r÷   rT  rú   rå   s          rJ   Ú#test_sk_from_der_with_short_privkeyz)ECDSA.test_sk_from_der_with_short_privkey]  sˆ   € Ü×$Ñ$ QÓ'ˆÜ×-Ñ-¨kÓ:ˆÜŸ™Ð(CÐDˆÜ×*Ñ*¨1¨mÓ<ˆ	Ü×'Ñ'Ø�[ )¨]ó
ˆ	ô × Ñ  Ó+ˆØ×Ñ˜Ÿ™×5Ñ5°sÕ;rI   c                 ó  — t        j                  d«      }t        j                  t        j                  dddddd«      t        j                  ddddddd«      «      }t        j                  t        j                  t        j                  d«      t        j                  d«      «      «      }t        j                  |||«      }| j                  t         j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)NrK   r   rí   rî   r¯   rð   ©	r@   rH  ró   rò   rP  rh   rÕ   r   r¼   ©rk   rJ  Úalgorithm_derrS  rú   s        rJ   Ú&test_sk_from_p8_der_with_wrong_versionz,ECDSA.test_sk_from_p8_der_with_wrong_versioni  sÏ   € Ü×$Ñ$ QÓ'ˆÜ×+Ñ+Ü�N‰N˜1˜a  e¨Q°Ó2Ü�N‰N˜1˜a  e¨Q°°1Ó5ó
ˆô ×-Ñ-Ü×ÑÜ×"Ñ" 1Ó%¤s×'>Ñ'>¸{Ó'Kóó
ˆô
 ×'Ñ'¨°ÀÓLˆ	à×Ñœs×0Ñ0Õ1Ü×Ñ 	Ô*÷ 2×1Ñ1ús   Ã"DÄD
c                 ó  — t        j                  d«      }t        j                  t        j                  ddd«      t        j                  ddddddd«      «      }t        j                  t        j                  t        j                  d«      t        j                  d«      «      «      }t        j                  |||«      }| j                  t         j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)Nr   rK   r¯   rí   rî   rð   r[  r\  s        rJ   Ú(test_sk_from_p8_der_with_wrong_algorithmz.ECDSA.test_sk_from_p8_der_with_wrong_algorithmy  sÈ   € Ü×$Ñ$ QÓ'ˆÜ×+Ñ+Ü�N‰N˜1˜a Ó#¤S§^¡^°A°q¸#¸uÀaÈÈAÓ%Nó
ˆô ×-Ñ-Ü×ÑÜ×"Ñ" 1Ó%¤s×'>Ñ'>¸{Ó'Kóó
ˆô
 ×'Ñ'¨°ÀÓLˆ	à×Ñœs×0Ñ0Õ1Ü×Ñ 	Ô*÷ 2×1Ñ1ús   ÃC>Ã>Dc                 óB  — t        j                  d«      }t        j                  t        j                  dddddd«      t        j                  ddddddd«      t        j                  d«      «      }t        j                  t        j                  t        j                  d«      t        j                  d«      «      «      }t        j                  |||«      }| j                  t         j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)Nr   rK   rí   rî   r¯   rÇ   rð   r[  r\  s        rJ   Ú6test_sk_from_p8_der_with_trailing_junk_after_algorithmz<ECDSA.test_sk_from_p8_der_with_trailing_junk_after_algorithmˆ  sÝ   € Ü×$Ñ$ QÓ'ˆÜ×+Ñ+Ü�N‰N˜1˜a  e¨Q°Ó2Ü�N‰N˜1˜a  e¨Q°°1Ó5Ü×#Ñ# GÓ,ó
ˆô
 ×-Ñ-Ü×ÑÜ×"Ñ" 1Ó%¤s×'>Ñ'>¸{Ó'Kóó
ˆô
 ×'Ñ'¨°ÀÓLˆ	à×Ñœs×0Ñ0Õ1Ü×Ñ 	Ô*÷ 2×1Ñ1ús   Ã6DÄDc                 ón  — t        j                  d«      }t        j                  t        j                  dddddd«      t        j                  ddddddd«      «      }t        j                  t        j                  t        j                  d«      t        j                  d«      «      t        j                  d«      z   «      }t        j                  |||t        j                  d«      «      }| j                  t         j                  «      5  t        j                  |«       d d d «       y # 1 sw Y   y xY w)	Nr   rK   rí   rî   r¯   rð   iç  rÇ   r[  r\  s        rJ   Ú0test_sk_from_p8_der_with_trailing_junk_after_keyz6ECDSA.test_sk_from_p8_der_with_trailing_junk_after_key™  sù   € Ü×$Ñ$ QÓ'ˆÜ×+Ñ+Ü�N‰N˜1˜a  e¨Q°Ó2Ü�N‰N˜1˜a  e¨Q°°1Ó5ó
ˆô ×-Ñ-Ü×ÑÜ×"Ñ" 1Ó%¤s×'>Ñ'>¸{Ó'Kóô × Ñ  Ó%ñ&ó
ˆô ×'Ñ'ØØØÜ×#Ñ# GÓ,ó	
ˆ	ð ×Ñœs×0Ñ0Õ1Ü×Ñ 	Ô*÷ 2×1Ñ1ús   ÄD+Ä+D4c                 ó¤   — t        j                  d«      }| j                  t        «      5  |j	                  d«       d d d «       y # 1 sw Y   y xY w)Nr  r  )r   rw   rh   r   Úsign_digestré   s     rJ   Útest_sign_with_too_long_hashz"ECDSA.test_sign_with_too_long_hash¯  s8   € Ü×,Ñ,¨RÓ0ˆà×Ñœ~Õ.Ø�N‰N˜<Ô(÷ /×.Ñ.ús   «AÁAc                 ó^  — t        j                  t        t        j                  ¬«      }d}|j                  |«      }t        j                  |j                  «       j                  «       t        t        j                  ¬«      }| j                  |j                  ||«      «       t        j                  t        ¬«      }|j                  |t        j                  ¬«      }t        j                  |j                  «       j                  «       t        t        j                  ¬«      }| j                  |j                  ||«      «       t        j                  |j                  «       j                  «       t        ¬«      }| j                  |j                  ||t        j                  ¬«      «       y )N©r•   Úhashfuncs   security level is 128 bitsr®   ©rj  )r   rc   r&   rx   ry   re   r   ri   rd   rj   rf   rg   )	rk   rå   rn   ro   ræ   Úsk2r‚   Úvk2Úvk3s	            rJ   Útest_hashfunczECDSA.test_hashfuncµ  s(  € Ü× Ñ ¤x¼'¿.¹.ÔIˆØ,ˆØ�g‰g�d‹mˆÜ×%Ñ%Ø× Ñ Ó"×,Ñ,Ó.ÜÜ—^‘^ô
ˆð
 	�‰˜Ÿ	™	 # tÓ,Ô-ä×!Ñ!¬Ô1ˆØ�x‰x˜¤w§~¡~ˆxÓ6ˆÜ×&Ñ&Ø×!Ñ!Ó#×-Ñ-Ó/ÜÜ—^‘^ô
ˆð
 	�‰˜Ÿ
™
 4¨Ó.Ô/ä×&Ñ&Ø× Ñ Ó"×,Ñ,Ó.´hô
ˆð 	�‰˜Ÿ
™
 3¨´w·~±~˜
ÓFÕGrI   c                 ó2  — t         }t        j                  |¬«      }|j                  «       }d}|j	                  |«      }t        j                  |||«      }|D ]o  }| j                  |j                  ||«      «       | j                  |j                  |j                  «       | j                  |j                  |j                  «       Œq | j                  |j                  j                  |D �cg c]  }|j                  j                  ‘Œ c}«       y c c}w )Nr®   rb   )r*   r   rc   rd   re   r   Úfrom_public_key_recoveryrf   rg   r   r•   Údefault_hashfuncÚassertInrÃ   rÄ   ©rk   r•   rå   ræ   rn   Ú	signatureÚrecovered_vksÚrecovered_vks           rJ   Útest_public_key_recoveryzECDSA.test_public_key_recoveryÎ  sì   € äˆä× Ñ  uÔ-ˆØ×!Ñ!Ó#ˆð ˆØ—G‘G˜D“Mˆ	ô %×=Ñ=Ø�t˜Uó
ˆó
 *ˆLà�O‰O˜L×/Ñ/°	¸4Ó@ÔAð ×Ñ˜RŸX™X |×'9Ñ'9Ô:Ø×ÑØ×#Ñ# \×%BÑ%Bõð *ð 	�‰Ø�I‰I�O‰OÙ;HÓI¹=¨<ˆ\× Ñ ×&Ó&¸=ÑIõ	
ùâIs   Ã/D
c                 óz  — t         }t        j                  |t        j                  ¬«      }|j                  «       }d}|j                  |«      }t        j                  |||t        j                  d¬«      }|D ]s  }| j                  |j                  ||«      «       | j                  |j                  |j                  «       | j                  t        j                  |j                  «       Œu | j                  |j                  j                   |D �cg c]  }|j                  j                   ‘Œ c}«       y c c}w )Nri  rb   T)rj  Úallow_truncate)r*   r   rc   rx   ry   rd   re   r   rq  rf   rg   r   r•   rr  rs  rÃ   rÄ   rt  s           rJ   Ú)test_public_key_recovery_with_custom_hashz/ECDSA.test_public_key_recovery_with_custom_hashï  sù   € äˆä× Ñ  u´w·~±~ÔFˆØ×!Ñ!Ó#ˆð ˆØ—G‘G˜D“Mˆ	ô %×=Ñ=ØØØÜ—^‘^Øô
ˆó *ˆLà�O‰O˜L×/Ñ/°	¸4Ó@ÔAð ×Ñ˜RŸX™X |×'9Ñ'9Ô:Ø×ÑœWŸ^™^¨\×-JÑ-JÕKð *ð 	�‰Ø�I‰I�O‰OÙ;HÓI¹=¨<ˆ\× Ñ ×&Ó&¸=ÑIõ	
ùâIs   ÄD8
c                 óª  — t        j                  d«      }|j                  }d}| j                  |j	                  «       |«       | j                  |j	                  d«      |«       | j                  |j	                  d«      d|z   «       | j                  |j	                  d«      d|d d z   «       | j                  |j	                  d	«      d
|z   «       y )NrË   ó0   ààdŽSŠÀžK¨x !ÕÂÃýÈ cÿû¹Ä„)‹‡¤zŠ#µ—ìO¶ HQ‰*rá   Úuncompressedó   Ú
compressedó   é   Úhybridó   )r   rw   râ   r   rj   )rk   rå   ræ   Úexps       rJ   Útest_encodingzECDSA.test_encoding  s¶   € Ü×,Ñ,¨YÓ7ˆØ×Ñˆð2ð 	ð
 	×Ñ˜Ÿ™›¨Ô-Ø×Ñ˜Ÿ™ eÓ,¨cÔ2Ø×Ñ˜Ÿ™ nÓ5°wÀ±}ÔEØ×Ñ˜Ÿ™ lÓ3°W¸sÀ3ÀB¸xÑ5GÔHØ×Ñ˜Ÿ™ hÓ/°¸3±Õ?rI   c                 óÚ  — t        j                  d«      }|j                  }d}t        j                  |«      }| j                  |j                  j                  |j                  j                  «       t        j                  d|z   «      }| j                  |j                  j                  |j                  j                  «       t        j                  d|d d z   «      }| j                  |j                  j                  |j                  j                  «       t        j                  d|z   «      }| j                  |j                  j                  |j                  j                  «       y )NrË   r}  r  r�  r‚  r„  )r   rw   râ   r   ri   r   rÃ   rÄ   )rk   rå   ræ   ÚencÚfrom_rawÚfrom_uncompressedÚfrom_compresseds          rJ   Útest_decodingzECDSA.test_decoding!  s  € Ü×,Ñ,¨YÓ7ˆØ×Ñˆð2ð 	ô  ×+Ñ+¨CÓ0ˆØ×Ñ˜Ÿ™×.Ñ.°·	±	·±Ô@ä(×4Ñ4°W¸s±]ÓCÐØ×ÑÐ*×1Ñ1×7Ñ7¸¿¹¿¹ÔIä&×2Ñ2°7¸SÀÀ"¸XÑ3EÓFˆØ×Ñ˜×/Ñ/×5Ñ5°r·y±y·±ÔGä(×4Ñ4°W¸s±]ÓCÐØ×ÑÐ*×1Ñ1×7Ñ7¸¿¹¿¹ÕIrI   c                 ó˜   — d}t        j                  |d¬«      }t        j                  d«      }| j	                  ||j
                  «       y )Nó1   ààdŽSŠÀžK¨x !ÕÂÃýÈ cÿû¹Ä„)‹‡¤zŠ#µ—ìO¶ HQ‰*©r~  ©Úvalid_encodingsrË   )r   ri   r   rw   r   râ   )rk   rˆ  ræ   rå   s       rJ   Ú)test_uncompressed_decoding_as_only_alowedz/ECDSA.test_uncompressed_decoding_as_only_alowed7  sG   € ð2ð 	ô ×%Ñ% cÐ;LÔMˆÜ×,Ñ,¨YÓ7ˆà×Ñ˜˜R×-Ñ-Õ.rI   c                 óÔ   — d}| j                  t        «      5 }t        j                  |d¬«       d d d «       | j	                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Nr}  ©rƒ  r�  rƒ  ©rh   r   r   ri   rs  ÚstrÚ	exception©rk   rˆ  r…  s      rJ   Ú%test_raw_decoding_with_blocked_formatz+ECDSA.test_raw_decoding_with_blocked_formatC  sV   € ð2ð 	ð
 ×ÑÔ2Ô3°sÜ×$Ñ$ S¸+ÕF÷ 4ð 	�‰�h¤ C§M¡MÓ 2Õ3÷ 4Ð3úó   ˜AÁA'c                 óÐ   — | j                  t        «      5 }t        j                  dd¬«       d d d «       | j	                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)NrI   )rá   Úfoobarr�  zOnly uncompressed, compressed)rh   rã   r   ri   rs  r–  r—  )rk   Úes     rJ   Ú!test_decoding_with_unknown_formatz'ECDSA.test_decoding_with_unknown_formatN  sK   € Ø×ÑœzÔ*¨aÜ×$Ñ$ SÐ:KÕL÷ +ð 	�‰Ð5´s¸1¿;¹;Ó7GÕH÷ +Ð*ús   –AÁA%c                 óÔ   — d}| j                  t        «      5 }t        j                  |d¬«       d d d «       | j	                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)NrŽ  r”  r�  úInvalid X9.62 encodingr•  r˜  s      rJ   Ú.test_uncompressed_decoding_with_blocked_formatz4ECDSA.test_uncompressed_decoding_with_blocked_formatT  sW   € ð2ð 	ð ×ÑÔ2Ô3°sÜ×$Ñ$ S¸+ÕF÷ 4ð 	�‰Ð.´°C·M±MÓ0BÕC÷ 4Ð3úrš  c                 óÔ   — d}| j                  t        «      5 }t        j                  |d¬«       d d d «       | j	                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Ns1   ààdŽSŠÀžK¨x !ÕÂÃýÈ cÿû¹Ä„)‹‡¤zŠ#µ—ìO¶ HQ‰*r�  r�  r   r•  r˜  s      rJ   Ú(test_hybrid_decoding_with_blocked_formatz.ECDSA.test_hybrid_decoding_with_blocked_format`  sX   € ð2ð 	ð ×ÑÔ2Ô3°sÜ×$Ñ$ SÐ:KÕL÷ 4ð 	�‰Ð.´°C·M±MÓ0BÕC÷ 4Ð3úrš  c                 óö   — t        j                  d«      }|j                  }|j                  d«      }| j	                  |d d d«       d|dd  z   }t        j                  |dd¬«      }| j	                  ||«       y )	NrË   rƒ  r   r„  ó   r”  F)r‘  Úvalidate_point)r   rw   râ   rj   r   r   ri   ©rk   rå   ræ   rˆ  Úbs        rJ   ÚAtest_hybrid_decoding_with_inconsistent_encoding_and_no_validationzGECDSA.test_hybrid_decoding_with_inconsistent_encoding_and_no_validationl  s|   € ô ×,Ñ,¨YÓ7ˆØ×Ñˆà�l‰l˜8Ó$ˆØ×Ñ˜˜R˜a˜ 'Ô*Ø˜˜A˜B˜Ñˆä×$Ñ$Ø ¸Uô
ˆð 	×Ñ˜˜QÕrI   c                 óÚ   — dd d }| j                  t        «      5 }t        j                  |d¬«       d d d «       | j	                  dt        j                  «      «       y # 1 sw Y   Œ/xY w)Ns1   ààdŽSŠÀžK¨x !ÕÂÃýÈ cÿû¹Ä„)‹‡¤zŠ#µ—ìO¶ HQ‰*é   )rƒ  rá   r�  z(hybrid, raw)r•  r˜  s      rJ   Ú,test_compressed_decoding_with_blocked_formatz2ECDSA.test_compressed_decoding_with_blocked_format|  s`   € ð2ð ˆ2ðˆð ×ÑÔ2Ô3°sÜ×$Ñ$ SÐ:KÕL÷ 4ð 	�‰�o¤s¨3¯=©=Ó'9Õ:÷ 4Ð3ús   ›A!Á!A*c                 óŒ   — d}| j                  t        «      5  t        j                  d|z   «       d d d «       y # 1 sw Y   y xY w)Nr}  r�  ©rh   r   r   ri   ©rk   rˆ  s     rJ   Ú)test_decoding_with_malformed_uncompressedz/ECDSA.test_decoding_with_malformed_uncompressedˆ  ó;   € ð2ð 	ð ×ÑÔ2Õ3Ü×$Ñ$ W¨s¡]Ô3÷ 4×3Ñ3úó	   ˜:ºAc                 ó’   — d}| j                  t        «      5  t        j                  d|d d z   «       d d d «       y # 1 sw Y   y xY w)Nr}  rD  r‚  r®  r¯  s     rJ   Ú'test_decoding_with_malformed_compressedz-ECDSA.test_decoding_with_malformed_compressed’  sB   € ð2ð 	ð ×ÑÔ2Õ3Ü×$Ñ$ W¨s°3°B¨xÑ%7Ô8÷ 4×3Ñ3úó	   ˜=½Ac                 óŒ   — d}| j                  t        «      5  t        j                  d|z   «       d d d «       y # 1 sw Y   y xY w)Nr}  r¥  r®  r¯  s     rJ   Ú&test_decoding_with_inconsistent_hybridz,ECDSA.test_decoding_with_inconsistent_hybridœ  r±  r²  c                 ó$  — t        j                  d«      }|j                  }|j                  d«      }| j	                  |d d d«       d|dd  z   }| j                  t        «      5  t        j                  |d¬«      }d d d «       y # 1 sw Y   y xY w)NiÍ[rƒ  r   r¥  r„  r”  r�  )	r   rw   râ   rj   r   rh   r   r   ri   r§  s        rJ   Ú0test_decoding_with_inconsistent_hybrid_odd_pointz6ECDSA.test_decoding_with_inconsistent_hybrid_odd_point¦  s~   € Ü×,Ñ,¨YÓ7ˆØ×Ñˆà�l‰l˜8Ó$ˆØ×Ñ˜˜R˜a˜ 'Ô*Ø˜˜A˜B˜Ñˆà×ÑÔ2Õ3Ü×(Ñ(¨¸kÔJˆA÷ 4×3Ñ3ús   Á%BÂBc                 ó’   — d}| j                  t        «      5  t        j                  |d d dz   «       d d d «       y # 1 sw Y   y xY w)Nr}  é/   ó    r®  r¯  s     rJ   Ú%test_decoding_with_point_not_on_curvez+ECDSA.test_decoding_with_point_not_on_curve±  sB   € ð2ð 	ð ×ÑÔ2Õ3Ü×$Ñ$ S¨¨" X°Ñ%7Ô8÷ 4×3Ñ3úrµ  c                 ó‚   — | j                  t        «      5  t        j                  d«       d d d «       y # 1 sw Y   y xY w)Nr¼  r®  rˆ   s    rJ   Ú$test_decoding_with_point_at_infinityz*ECDSA.test_decoding_with_point_at_infinity»  s+   € à×ÑÔ2Õ3Ü×$Ñ$ WÔ-÷ 4×3Ñ3úrB  c                 ó  — t        t        j                  j                  «       t        j                  j                  «       dz   «      }| j	                  t
        «      5  t        j                  d|z   «       d d d «       y # 1 sw Y   y xY w)Nr   r�  )r   r$   r•   r\   rh   r   r   ri   r¯  s     rJ   Útest_not_lying_on_curvezECDSA.test_not_lying_on_curveÀ  sZ   € ÜœxŸ~™~×/Ñ/Ó1´8·>±>×3CÑ3CÓ3EÈÑ3IÓJˆà×ÑÔ2Õ3Ü×$Ñ$ W¨s¡]Ô3÷ 4×3Ñ3ús   ÁA?Á?Bc                 óô   — t        dt        j                  t        j                  d«      }d|_        d|_        | j                  t        «      5  t        j                  d|«       d d d «       y # 1 sw Y   y xY w)NÚtest©r   rK   rt   é    ó                   ©
r   rB   Ú	curve_192Úgenerator_192r�   r±   rh   r   r   ri   ©rk   r•   s     rJ   Ú9test_from_string_with_invalid_curve_too_short_ver_key_lenz?ECDSA.test_from_string_with_invalid_curve_too_short_ver_key_lenÆ  óX   € ô �fœeŸo™o¬u×/BÑ/BÀFÓKˆØ%'ˆÔ"ØˆŒà×ÑÔ2Õ3Ü×$Ñ$ \°5Ô9÷ 4×3Ñ3úó   ÁA.Á.A7c                 óô   — t        dt        j                  t        j                  d«      }d|_        d|_        | j                  t        «      5  t        j                  d|«       d d d «       y # 1 sw Y   y xY w)NrÃ  rÄ  rt   rÆ  rÇ  rÊ  s     rJ   Ú8test_from_string_with_invalid_curve_too_long_ver_key_lenz>ECDSA.test_from_string_with_invalid_curve_too_long_ver_key_lenÑ  rÌ  rÍ  N)ErE   rF   rG   rq   r„   r‰   r�   r›   r¦   r«   r²   r¿   rÁ   rÅ   rÛ   rÞ   rç   rê   rû   rÿ   r  r  r  r	  r  r  r  r   r"  r'  r*  r/  r5  r8  r;  r>  rA  rE  rK  rM  rU  rW  rY  r^  r`  rb  rd  rg  ro  rx  r{  r†  rŒ  r’  r™  rž  r¡  r£  r©  r¬  r°  r´  r·  r¹  r½  r¿  rÁ  rË  rÏ  rH   rI   rJ   r`   r`   e   sZ  „ ò0ò%ò83ò
=òOò.7ò*
ò:ò43òB3ò1ò
20òh0òòò
-ò-ò-ò-ò-ò-òMò.
#ò
+ò
#ò
+ò
#ò
+ò+ò"@ò6ò<ò2ò/ò,ò+ò+ò
+ò
+ò
<ò+ò +ò+ò"+ò,)òHò2
òB!
òF@òJò,
/ò	4òIò
Dò
Dò ò 
;ò4ò9ò4ò	Kò9ò.ò
4ò	:ó	:rI   r`   zval,evené   )TFc                 óÀ   — t        | t        j                  «      }|rd|z   }nd|z   }	 t        j                  |«      }t        |t        «      sJ ‚y # t        $ r Y y w xY w)Nr�  ó   )r   r$   r|   r   ri   Ú
isinstancer   )ÚvalÚevenrˆ  ræ   s       rJ   Ú*test_VerifyingKey_decode_with_small_valuesrÖ  Ý  s`   € ô ˜3¤§¡Ó
/€CáØ˜‰m‰à˜‰mˆðÜ×%Ñ% cÓ*ˆÜ˜"œlÔ+Ð+Ñ+øÜò Ùðús   ©'A Á	AÁA)rá   r~  r€  rƒ  z{0}-{1})Úidzcurve,encodingc                 óö   — t        j                  | ¬«      }|j                  }|j                  |«      }t	        j
                  || ¬«      }|j                  j                  |j                  j                  k(  sJ ‚y rÝ   )r   rc   râ   rj   r   ri   rÃ   rÄ   )r•   Úencodingrå   ræ   ÚencodedÚfrom_encs         rJ   Útest_VerifyingKey_encode_decoderÜ  ù  s]   € ä	×	Ñ	 5Ô	)€BØ	×	Ñ	€Bà�l‰l˜8Ó$€Gä×'Ñ'¨°uÔ=€Hà�9‰9�?‰?˜hŸo™o×3Ñ3Ò3Ð3Ñ3rI   r•   c                 ó„  — t        j                  | ¬«      }|j                  «       }t        j                  |j                  «       | «      }|j                  «       |j                  «       k(  sJ ‚t        |j                  «       «      | j                  k(  sJ ‚|j                  d«      }t        |«      | j                  k(  sJ ‚y )Nr®   r‹   )
r   rc   rd   r   ri   rj   rŒ   r�   re   rŽ   )r•   rl   rš   rp   ro   s        rJ   Útest_lengthsrÞ    s›   € ä×Ñ UÔ+€DØ×!Ñ!Ó#€DÜ×#Ñ# D§N¡NÓ$4°eÓ<€DØ�>‰>Ó˜tŸ~™~Ó/Ò/Ð/Ð/Üˆt�~‰~ÓÓ  E×$>Ñ$>Ò>Ð>Ð>Ø
�)‰)�GÓ
€CÜˆs‹8�u×-Ñ-Ò-Ð-Ñ-rI   c                   óè  — e Zd Z ed„  ed«      j                  d«      D «       «      Zd„ Zej                  j                  ej                  j                  devd¬«      d„ «       «       Zej                  j                  ej                  j                  d	evd
¬«      d„ «       «       Zej                  j                  ej                  j                  devd¬«      d„ «       «       Zej                  j                  ej                  j                  devd¬«      d„ «       «       Zej                  j                  ej                  j                  devd¬«      d„ «       «       Zej                  j                  ej                  j                  devd¬«      d„ «       «       Zej                  j                  ej                  j                  devd¬«      d„ «       «       Zej                  j                  ej                  j                  devd¬«      d„ «       «       Zej                  j                  ej                  j                  devd¬«      d„ «       «       Zej                  j                  ej                  j                  devd¬«      d„ «       «       Zej                  j                  ej                  j                  devd¬«      d „ «       «       Zej                  j                  ej                  j                  d!evd"¬«      d#„ «       «       Zej                  j                  ej                  j                  d$evd%¬«      d&„ «       «       Zej                  j                  ej                  j                  d'evd(¬«      d)„ «       «       Zej                  j                  ej                  j                  d*evd+¬«      d,„ «       «       Zej                  j                  ej                  j                  d-evd.¬«      d/„ «       «       Zej                  j                  ej                  j                  d0evd1¬«      d2„ «       «       Zej                  j                  ej                  j                  d3evd4¬«      d5„ «       «       Zej                  j                  ej                  j                  d6evd7¬«      d8„ «       «       Zej                  j                  ej                  j                  d9evd:¬«      d;„ «       «       Zej                  j                  ej                  j                  d<evd=¬«      d>„ «       «       Z ej                  j                  ej                  j                  d?evd@¬«      dA„ «       «       Z!ej                  j                  ej                  j                  dBevdC¬«      dD„ «       «       Z"ej                  j                  ej                  j                  dEevdF¬«      dG„ «       «       Z#ej                  j                  ej                  j                  dHevdI¬«      dJ„ «       «       Z$ej                  j                  ej                  j                  dKevdL¬«      dM„ «       «       Z%ej                  j                  ej                  j                  dNevdO¬«      dP„ «       «       Z&d}dQ„Z'ej                  j                  ej                  j                  devd¬«      dR„ «       «       Z(ej                  j                  ej                  j                  d	evd
¬«      dS„ «       «       Z)ej                  j                  ej                  j                  devd¬«      dT„ «       «       Z*ej                  j                  ej                  j                  devd¬«      dU„ «       «       Z+ej                  j                  ej                  j                  devd¬«      dV„ «       «       Z,ej                  j                  ej                  j                  devd¬«      dW„ «       «       Z-ej                  j                  ej                  j                  devd¬«      dX„ «       «       Z.ej                  j                  ej                  j                  devd¬«      dY„ «       «       Z/ej                  j                  ej                  j                  devd¬«      dZ„ «       «       Z0ej                  j                  ej                  j                  devd¬«      d[„ «       «       Z1ej                  j                  ej                  j                  devd¬«      d\„ «       «       Z2ej                  j                  ej                  j                  d!evd"¬«      d]„ «       «       Z3ej                  j                  ej                  j                  d$evd%¬«      d^„ «       «       Z4ej                  j                  ej                  j                  d'evd(¬«      d_„ «       «       Z5ej                  j                  ej                  j                  d*evd+¬«      d`„ «       «       Z6ej                  j                  ej                  j                  d-evd.¬«      da„ «       «       Z7ej                  j                  ej                  j                  d0evd1¬«      db„ «       «       Z8ej                  j                  ej                  j                  d3evd4¬«      dc„ «       «       Z9ej                  j                  ej                  j                  d6evd7¬«      dd„ «       «       Z:ej                  j                  ej                  j                  d9evd:¬«      de„ «       «       Z;ej                  j                  ej                  j                  d<evd=¬«      df„ «       «       Z<ej                  j                  ej                  j                  d?evd@¬«      dg„ «       «       Z=ej                  j                  ej                  j                  dBevdC¬«      dh„ «       «       Z>ej                  j                  ej                  j                  dEevdF¬«      di„ «       «       Z?ej                  j                  ej                  j                  dHevdI¬«      dj„ «       «       Z@ej                  j                  ej                  j                  dKevdL¬«      dk„ «       «       ZAej                  j                  ej                  j                  dNevdO¬«      dl„ «       «       ZBd}dm„ZC e«       ZD	 dn edo«      v r edp„ dqD «       «      ZDdr„ ZFej                  j                  ej                  j                  dseDvdt¬«      du„ «       «       ZGej                  j                  ej                  j                  dveDvdw¬«      dx„ «       «       ZHdy„ ZIej                  j                  ej                  j                  dseDvdt¬«      dz„ «       «       ZJej                  j                  ej                  j                  dveDvdw¬«      d{„ «       «       ZKy|# eE$ r Y �Œw xY w)~ÚOpenSSLc              #   ó`   K  — | ]&  }|j                  d «      d   j                  «       –— Œ( y­w©Ú:r   N©rT   r¸   ©Ú.0Úcs     rJ   Ú	<genexpr>zOpenSSL.<genexpr>(  ó-   è ø€ ð #á@ˆAð 	
�‰�‹�Q‰×Ñ×Ù@ùó   ‚,.úecparam -list_curvesÚ
c                 ó®   — t        d«      }|j                  «       d   j                  d«      }|g d¢k\  rdj                  |«      S dj                  |«      S )NÚversionr   Ú.)Ú1Ú0rñ  z-{0}z-ecdsa-with-{0})r^   rT   Úformat)rk   Ú	hash_nameÚvÚvss       rJ   Úget_openssl_messagedigest_argz%OpenSSL.get_openssl_messagedigest_arg-  sP   € Ü˜	Ó"ˆð �W‰W‹Y�q‰\×Ñ Ó$ˆØ’Ò Ø—=‘= Ó+Ð+à$×+Ñ+¨IÓ6Ð6rI   Ú	secp112r1z)system openssl does not support secp112r1©Úreasonc                 ó,   — | j                  t        «      S r†   )Údo_test_from_opensslr    rˆ   s    rJ   Útest_from_openssl_secp112r1z#OpenSSL.test_from_openssl_secp112r1;  ó   € ð ×(Ñ(¬Ó3Ð3rI   Ú	secp112r2z)system openssl does not support secp112r2c                 ó,   — | j                  t        «      S r†   )rû  r!   rˆ   s    rJ   Útest_from_openssl_secp112r2z#OpenSSL.test_from_openssl_secp112r2C  rý  rI   Ú	secp128r1z)system openssl does not support secp128r1c                 ó,   — | j                  t        «      S r†   )rû  r"   rˆ   s    rJ   Útest_from_openssl_secp128r1z#OpenSSL.test_from_openssl_secp128r1K  rý  rI   Ú	secp160r1z)system openssl does not support secp160r1c                 ó,   — | j                  t        «      S r†   )rû  r#   rˆ   s    rJ   Útest_from_openssl_secp160r1z#OpenSSL.test_from_openssl_secp160r1S  rý  rI   Ú
prime192v1ú*system openssl does not support prime192v1c                 ó,   — | j                  t        «      S r†   ©rû  r$   rˆ   s    rJ   Útest_from_openssl_nist192pz"OpenSSL.test_from_openssl_nist192p[  ó   € ð ×(Ñ(¬Ó2Ð2rI   c                 ó.   — | j                  t        d«      S ©NÚSHA256r
  rˆ   s    rJ   Ú!test_from_openssl_nist192p_sha256z)OpenSSL.test_from_openssl_nist192p_sha256c  ó   € ð ×(Ñ(¬°8Ó<Ð<rI   Ú	secp224r1z)system openssl does not support secp224r1c                 ó,   — | j                  t        «      S r†   )rû  r%   rˆ   s    rJ   Útest_from_openssl_nist224pz"OpenSSL.test_from_openssl_nist224pk  r  rI   Ú
prime256v1z*system openssl does not support prime256v1c                 ó,   — | j                  t        «      S r†   ©rû  r&   rˆ   s    rJ   Útest_from_openssl_nist256pz"OpenSSL.test_from_openssl_nist256ps  r  rI   c                 ó.   — | j                  t        d«      S ©NÚSHA384r  rˆ   s    rJ   Ú!test_from_openssl_nist256p_sha384z)OpenSSL.test_from_openssl_nist256p_sha384{  r  rI   c                 ó.   — | j                  t        d«      S ©NÚSHA512r  rˆ   s    rJ   Ú!test_from_openssl_nist256p_sha512z)OpenSSL.test_from_openssl_nist256p_sha512ƒ  r  rI   Ú	secp384r1z)system openssl does not support secp384r1c                 ó,   — | j                  t        «      S r†   )rû  r'   rˆ   s    rJ   Útest_from_openssl_nist384pz"OpenSSL.test_from_openssl_nist384p‹  r  rI   Ú	secp521r1z)system openssl does not support secp521r1c                 ó,   — | j                  t        «      S r†   )rû  r(   rˆ   s    rJ   Útest_from_openssl_nist521pz"OpenSSL.test_from_openssl_nist521p“  r  rI   Ú	secp256k1z)system openssl does not support secp256k1c                 ó,   — | j                  t        «      S r†   )rû  r)   rˆ   s    rJ   Útest_from_openssl_secp256k1z#OpenSSL.test_from_openssl_secp256k1›  rý  rI   ÚbrainpoolP160r1z/system openssl does not support brainpoolP160r1c                 ó,   — | j                  t        «      S r†   )rû  r*   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp160r1z)OpenSSL.test_from_openssl_brainpoolp160r1£  ó   € ð ×(Ñ(¬Ó9Ð9rI   ÚbrainpoolP192r1z/system openssl does not support brainpoolP192r1c                 ó,   — | j                  t        «      S r†   )rû  r+   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp192r1z)OpenSSL.test_from_openssl_brainpoolp192r1«  r-  rI   ÚbrainpoolP224r1z/system openssl does not support brainpoolP224r1c                 ó,   — | j                  t        «      S r†   )rû  r,   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp224r1z)OpenSSL.test_from_openssl_brainpoolp224r1³  r-  rI   ÚbrainpoolP256r1z/system openssl does not support brainpoolP256r1c                 ó,   — | j                  t        «      S r†   )rû  r-   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp256r1z)OpenSSL.test_from_openssl_brainpoolp256r1»  r-  rI   ÚbrainpoolP320r1z/system openssl does not support brainpoolP320r1c                 ó,   — | j                  t        «      S r†   )rû  r.   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp320r1z)OpenSSL.test_from_openssl_brainpoolp320r1Ã  r-  rI   ÚbrainpoolP384r1z/system openssl does not support brainpoolP384r1c                 ó,   — | j                  t        «      S r†   )rû  r/   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp384r1z)OpenSSL.test_from_openssl_brainpoolp384r1Ë  r-  rI   ÚbrainpoolP512r1z/system openssl does not support brainpoolP512r1c                 ó,   — | j                  t        «      S r†   )rû  r0   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp512r1z)OpenSSL.test_from_openssl_brainpoolp512r1Ó  r-  rI   ÚbrainpoolP160t1z/system openssl does not support brainpoolP160t1c                 ó,   — | j                  t        «      S r†   )rû  r1   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp160t1z)OpenSSL.test_from_openssl_brainpoolp160t1Û  r-  rI   ÚbrainpoolP192t1z/system openssl does not support brainpoolP192t1c                 ó,   — | j                  t        «      S r†   )rû  r2   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp192t1z)OpenSSL.test_from_openssl_brainpoolp192t1ã  r-  rI   ÚbrainpoolP224t1z/system openssl does not support brainpoolP224t1c                 ó,   — | j                  t        «      S r†   )rû  r3   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp224t1z)OpenSSL.test_from_openssl_brainpoolp224t1ë  r-  rI   ÚbrainpoolP256t1z/system openssl does not support brainpoolP256t1c                 ó,   — | j                  t        «      S r†   )rû  r4   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp256t1z)OpenSSL.test_from_openssl_brainpoolp256t1ó  r-  rI   ÚbrainpoolP320t1z/system openssl does not support brainpoolP320t1c                 ó,   — | j                  t        «      S r†   )rû  r5   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp320t1z)OpenSSL.test_from_openssl_brainpoolp320t1û  r-  rI   ÚbrainpoolP384t1z/system openssl does not support brainpoolP384t1c                 ó,   — | j                  t        «      S r†   )rû  r6   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp384t1z)OpenSSL.test_from_openssl_brainpoolp384t1  r-  rI   ÚbrainpoolP512t1z/system openssl does not support brainpoolP512t1c                 ó,   — | j                  t        «      S r†   )rû  r7   rˆ   s    rJ   Ú!test_from_openssl_brainpoolp512t1z)OpenSSL.test_from_openssl_brainpoolp512t1  r-  rI   c           
      ó<  — |j                   }|sJ ‚| j                  |«      }t        j                  j	                  d«      rt        j                  d«       t        j                  d«       t        d|z  «       t        d«       d}t        dd«      5 }|j                  |«       d d d «       t        d|z  «       t        d|z  «       t        d	d
«      5 }|j                  «       }d d d «       t        j                  «      }t        dd
«      5 }|j                  «       }	d d d «       | j                  |j                  	|t!        t"        j$                  |«      t&        ¬«      «       t        d«      5 }|j                  «       }
d d d «       t)        j                  
«      }|j+                  |t!        t"        j$                  |«      ¬«      }| j                  |j                  ||t!        t"        j$                  |«      ¬«      «       t        d«       t        dd
«      5 }|j                  «       }d d d «       t)        j                  «      }| j-                  ||«       y # 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   ŒexY w)NÚtz+ecparam -name %s -genkey -out t/privkey.pemz.ec -in t/privkey.pem -pubout -out t/pubkey.pemr‹   ú
t/data.txtÚwbz6dgst %s -sign t/privkey.pem -out t/data.sig t/data.txtz=dgst %s -verify t/pubkey.pem -signature t/data.sig t/data.txtút/pubkey.pemÚrbú
t/data.sig)rj  r  út/privkey.pemrk  zJpkcs8 -topk8 -nocrypt -in t/privkey.pem -outform pem -out t/privkey-p8.pemút/privkey-p8.pem)Úopenssl_namerö  ÚosÚpathÚisdirÚshutilÚrmtreeÚmkdirr^   ÚopenÚwriteÚreadr   rº   rf   rg   r   rx   Únewr   r   re   r   )rk   r•   ró  Ú	curvenameÚmdargrn   r�  Ú
pubkey_pemræ   r  Úfprå   ro   Úprivkey_p8_pemÚ
sk_from_p8s                  rJ   rû  zOpenSSL.do_test_from_openssl  s  € Ø×&Ñ&ˆ	ÙÐˆyð ×2Ñ2°9Ó=ˆÜ�7‰7�=‰=˜ÔÜ�M‰M˜#ÔÜ
�‰�ŒÜÐAÀIÑMÔNÜÐDÔEØˆÜ�, Ô%¨Ø�G‰G�DŒM÷ &äØDÀuÑLô	
ô 	ØKØñô	
ô �. $Ô'¨1ØŸ™›ˆJ÷ (ä×"Ñ" :Ó.ˆÜ�, Ô%¨Ø—f‘f“hˆG÷ &à�‰Ø�I‰IØØÜ ¤§¡¨iÓ8Ü'ð	 ó ô	
ô �/Ô" aØ—‘“ˆB÷ #ä× Ñ  Ó$ˆØ�g‰g�d¤W¬W¯[©[¸)Ó%DˆgÓEˆØ�‰Ø�I‰I�c˜4¬'´'·+±+¸yÓ*IˆIÓJô	
ô 	ðCô	
ô Ð$ dÔ+¨qØŸV™V›XˆN÷ ,ä×(Ñ(¨Ó8ˆ
Ø×Ñ˜˜ZÕ(÷M &Ñ%ú÷ (Ñ'ú÷ &Ñ%ú÷ #Ñ"ú÷ ,Ð+ús<   ÂIÃI+ÄI8Å2JÈJÉI(É+I5É8JÊJÊJc                 ó.   — | j                  t        «       y r†   )Údo_test_to_opensslr    rˆ   s    rJ   Útest_to_openssl_secp112r1z!OpenSSL.test_to_openssl_secp112r1G  ó   € ð 	×Ñ¤	Õ*rI   c                 ó.   — | j                  t        «       y r†   )rp  r!   rˆ   s    rJ   Útest_to_openssl_secp112r2z!OpenSSL.test_to_openssl_secp112r2O  rr  rI   c                 ó.   — | j                  t        «       y r†   )rp  r"   rˆ   s    rJ   Útest_to_openssl_secp128r1z!OpenSSL.test_to_openssl_secp128r1W  rr  rI   c                 ó.   — | j                  t        «       y r†   )rp  r#   rˆ   s    rJ   Útest_to_openssl_secp160r1z!OpenSSL.test_to_openssl_secp160r1_  rr  rI   c                 ó.   — | j                  t        «       y r†   ©rp  r$   rˆ   s    rJ   Útest_to_openssl_nist192pz OpenSSL.test_to_openssl_nist192pg  ó   € ð 	×Ñ¤Õ)rI   c                 ó0   — | j                  t        d«       y r  rz  rˆ   s    rJ   Útest_to_openssl_nist192p_sha256z'OpenSSL.test_to_openssl_nist192p_sha256o  ó   € ð 	×Ñ¤¨(Õ3rI   c                 ó.   — | j                  t        «       y r†   )rp  r%   rˆ   s    rJ   Útest_to_openssl_nist224pz OpenSSL.test_to_openssl_nist224pw  r|  rI   c                 ó.   — | j                  t        «       y r†   ©rp  r&   rˆ   s    rJ   Útest_to_openssl_nist256pz OpenSSL.test_to_openssl_nist256p  r|  rI   c                 ó0   — | j                  t        d«       y r  rƒ  rˆ   s    rJ   Útest_to_openssl_nist256p_sha384z'OpenSSL.test_to_openssl_nist256p_sha384‡  r  rI   c                 ó0   — | j                  t        d«       y r  rƒ  rˆ   s    rJ   Útest_to_openssl_nist256p_sha512z'OpenSSL.test_to_openssl_nist256p_sha512�  r  rI   c                 ó.   — | j                  t        «       y r†   )rp  r'   rˆ   s    rJ   Útest_to_openssl_nist384pz OpenSSL.test_to_openssl_nist384p—  r|  rI   c                 ó.   — | j                  t        «       y r†   )rp  r(   rˆ   s    rJ   Útest_to_openssl_nist521pz OpenSSL.test_to_openssl_nist521pŸ  r|  rI   c                 ó.   — | j                  t        «       y r†   )rp  r)   rˆ   s    rJ   Útest_to_openssl_secp256k1z!OpenSSL.test_to_openssl_secp256k1§  rr  rI   c                 ó.   — | j                  t        «       y r†   )rp  r*   rˆ   s    rJ   Útest_to_openssl_brainpoolp160r1z'OpenSSL.test_to_openssl_brainpoolp160r1¯  ó   € ð 	×Ñ¤Õ0rI   c                 ó.   — | j                  t        «       y r†   )rp  r+   rˆ   s    rJ   Útest_to_openssl_brainpoolp192r1z'OpenSSL.test_to_openssl_brainpoolp192r1·  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r,   rˆ   s    rJ   Útest_to_openssl_brainpoolp224r1z'OpenSSL.test_to_openssl_brainpoolp224r1¿  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r-   rˆ   s    rJ   Útest_to_openssl_brainpoolp256r1z'OpenSSL.test_to_openssl_brainpoolp256r1Ç  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r.   rˆ   s    rJ   Útest_to_openssl_brainpoolp320r1z'OpenSSL.test_to_openssl_brainpoolp320r1Ï  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r/   rˆ   s    rJ   Útest_to_openssl_brainpoolp384r1z'OpenSSL.test_to_openssl_brainpoolp384r1×  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r0   rˆ   s    rJ   Útest_to_openssl_brainpoolp512r1z'OpenSSL.test_to_openssl_brainpoolp512r1ß  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r1   rˆ   s    rJ   Útest_to_openssl_brainpoolp160t1z'OpenSSL.test_to_openssl_brainpoolp160t1ç  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r2   rˆ   s    rJ   Útest_to_openssl_brainpoolp192t1z'OpenSSL.test_to_openssl_brainpoolp192t1ï  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r3   rˆ   s    rJ   Útest_to_openssl_brainpoolp224t1z'OpenSSL.test_to_openssl_brainpoolp224t1÷  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r4   rˆ   s    rJ   Útest_to_openssl_brainpoolp256t1z'OpenSSL.test_to_openssl_brainpoolp256t1ÿ  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r5   rˆ   s    rJ   Útest_to_openssl_brainpoolp320t1z'OpenSSL.test_to_openssl_brainpoolp320t1  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r6   rˆ   s    rJ   Útest_to_openssl_brainpoolp384t1z'OpenSSL.test_to_openssl_brainpoolp384t1  r‘  rI   c                 ó.   — | j                  t        «       y r†   )rp  r7   rˆ   s    rJ   Útest_to_openssl_brainpoolp512t1z'OpenSSL.test_to_openssl_brainpoolp512t1  r‘  rI   c                 ó  — |j                   }|sJ ‚| j                  |«      }t        j                  j	                  d«      rt        j                  d«       t        j                  d«       t        j                  |¬«      }|j                  «       }d}t        dd«      5 }|j                  |j                  «       «       d d d «       t        dd«      5 }|j                  |j                  «       «       d d d «       |j                  |t!        t"        j$                  |«      t&        ¬«      }	t        dd«      5 }|j                  |	«       d d d «       t        d	d«      5 }|j                  |«       d d d «       t        d
d«      5 }|j                  |dz   «       d d d «       | j)                  t*        t,        d|z  «       t-        d|z  «       t        dd«      5 }|j                  |j                  «       «       d d d «       t-        d|z  «       t-        d|z  «       t        dd«      5 }|j                  |j                  d¬«      «       d d d «       t-        d|z  «       t-        d|z  «       t        dd«      5 }|j                  |j                  d¬«      «       d d d «       t-        d|z  «       t-        d|z  «       t        dd«      5 }|j                  |j                  dd¬«      «       d d d «       t-        d|z  «       t-        d|z  «       y # 1 sw Y   �ŒWxY w# 1 sw Y   �Œ0x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# 1 sw Y   Œ�xY w)NrV  r®   r‹   út/pubkey.derrX  rY  )rj  r  r[  rW  út/baddata.txtó   corruptzMdgst %s -verify t/pubkey.der -keyform DER -signature t/data.sig t/baddata.txtzJdgst %s -verify t/pubkey.der -keyform DER -signature t/data.sig t/data.txtr\  z7dgst %s -sign t/privkey.pem -out t/data.sig2 t/data.txtz>dgst %s -verify t/pubkey.pem -signature t/data.sig2 t/data.txtzt/privkey-explicit.pemÚexplicit)Úcurve_parameters_encodingz@dgst %s -sign t/privkey-explicit.pem -out t/data.sig2 t/data.txtr]  Úpkcs8)rò  z:dgst %s -sign t/privkey-p8.pem -out t/data.sig3 t/data.txtz>dgst %s -verify t/pubkey.pem -signature t/data.sig3 t/data.txtzt/privkey-p8-explicit.pem)rò  r±  zCdgst %s -sign t/privkey-p8-explicit.pem -out t/data.sig3 t/data.txt)r^  rö  r_  r`  ra  rb  rc  rd  r   rc   rd   re  rf  r»   r“   re   r   rx   rh  r   rh   rD   r^   )
rk   r•   ró  ri  rj  rå   ræ   rn   r�  r  s
             rJ   rp  zOpenSSL.do_test_to_openssl  s  € Ø×&Ñ&ˆ	ÙÐˆyð ×2Ñ2°9Ó=ˆÜ�7‰7�=‰=˜ÔÜ�M‰M˜#ÔÜ
�‰�ŒÜ× Ñ  uÔ-ˆØ×!Ñ!Ó#ˆØˆÜ�. $Ô'¨1Ø�G‰G�B—I‘I“KÔ ÷ (ä�. $Ô'¨1Ø�G‰G�B—I‘I“KÔ ÷ (à—'‘'ØÜœWŸ[™[¨)Ó4Ü#ð ó 
ˆô �, Ô%¨Ø�G‰G�GÔ÷ &ä�, Ô%¨Ø�G‰G�DŒM÷ &ä�/ 4Ô(¨AØ�G‰G�D˜:Ñ%Ô&÷ )ð 	×ÑÜÜØ[Øñô	
ô 	ØXØñô	
ô
 �/ 4Ô(¨AØ�G‰G�B—I‘I“KÔ ÷ )äØEÈÑMô	
ô 	ØLØñô	
ô
 Ð*¨DÔ1°QØ�G‰G�B—I‘I¸
�IÓCÔD÷ 2äØNØñô	
ô 	ØLØñô	
ô
 Ð$ dÔ+¨qØ�G‰G�B—I‘I W�IÓ-Ô.÷ ,äØHØñô	
ô 	ØLØñô	
ô
 Ð-¨tÔ4¸Ø�G‰GØ—	‘	 ÀJ�	ÓOô÷ 5ô 	ØQØñô	
ô 	ØLØñõ	
÷I (Ñ'úç'Ñ'ú÷ &Ñ%úç%Ñ%úç(Ñ(ú÷ )Ñ(ú÷ 2Ñ1ú÷ ,Ð+ú÷ 5Ð4úsl   Â LÃ L!Ä7L.ÅL;ÆMÇ MÈ("M"É:"M/Ë#M;ÌLÌ!L+Ì.L8Ì;MÍMÍMÍ"M,Í/M8Í;Nz-rawinzpkeyutl -helpc              #   óV   K  — | ]!  }|t        d «      v r|j                  «       –— Œ# y­w)zlist -public-key-methodsN)r^   Úlowerrå  s     rJ   rè  zOpenSSL.<genexpr>w  s,   è ø€ ð *á-�AØœÐ$>Ó?Ñ?ð —‘—	Ù-ùs   ‚'))ÚED25519ÚED448c                 óæ  — t         j                  j                  d«      rt        j                  d«       t        j
                  d«       t        j                  |¬«      }|j                  «       }d}t        dd«      5 }|j                  |j                  «       «       d d d «       t        dd«      5 }|j                  |j                  «       «       d d d «       |j                  |«      }t        dd«      5 }|j                  |«       d d d «       t        dd«      5 }|j                  |«       d d d «       t        d	d«      5 }|j                  |d
z   «       d d d «       | j                  t        «      5  t!        d«       d d d «       t!        d«       t        j                  d«       y # 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   ŒgxY w)NrV  r®   r‹   r­  rX  rY  r[  rW  r®  r¯  zWpkeyutl -verify -pubin -inkey t/pubkey.pem -rawin -in t/baddata.txt -sigfile t/data.sigzTpkeyutl -verify -pubin -inkey t/pubkey.pem -rawin -in t/data.txt -sigfile t/data.sig)r_  r`  ra  rb  rc  rd  r   rc   rd   re  rf  r»   r“   re   rh   rD   r^   )rk   r•   rå   ræ   rn   r�  ro   s          rJ   Údo_eddsa_test_to_opensslz OpenSSL.do_eddsa_test_to_openssl  sj  € Ü�7‰7�=‰=˜ÔÜ�M‰M˜#ÔÜ
�‰�Œä× Ñ  uÔ-ˆØ×!Ñ!Ó#ˆàˆÜ�. $Ô'¨1Ø�G‰G�B—I‘I“KÔ ÷ (ä�. $Ô'¨1Ø�G‰G�B—I‘I“KÔ ÷ (ð �g‰g�d‹mˆä�, Ô%¨Ø�G‰G�CŒL÷ &ä�, Ô%¨Ø�G‰G�DŒM÷ &ä�/ 4Ô(¨AØ�G‰G�D˜:Ñ%Ô&÷ )ð ×ÑœÕ/Üð8ô÷ 0ô
 	ð1ô	
ô
 	�‰�cÕ÷1 (Ñ'úç'Ð'ú÷
 &Ð%úç%Ð%úç(Ð(ú÷ 0Ð/úsH   Á> F*Â2 F7Ã7GÄGÅGÅ5G'Æ*F4Æ7G ÇGÇGÇG$Ç'G0Úed25519z4system openssl does not support signing with Ed25519c                 ó,   — | j                  t        «      S r†   )r¸  r8   rˆ   s    rJ   Útest_to_openssl_ed25519zOpenSSL.test_to_openssl_ed25519¤  s   € ð ×,Ñ,¬WÓ5Ð5rI   Úed448z2system openssl does not support signing with Ed448c                 ó,   — | j                  t        «      S r†   )r¸  r9   rˆ   s    rJ   Útest_to_openssl_ed448zOpenSSL.test_to_openssl_ed448¬  s   € ð ×,Ñ,¬UÓ3Ð3rI   c                 óæ  — |j                   }t        j                  j                  d«      rt	        j
                  d«       t        j                  d«       d}t        dj                  |«      «       t        d«       t        dd«      5 }|j                  |«       d d d «       t        d«       t        dd	«      5 }|j                  «       }d d d «       t        d
d	«      5 }t        j                  |j                  «       «      }d d d «       | j                  j                  |«       |j!                  |«       t	        j
                  d«       y # 1 sw Y   ŒµxY w# 1 sw Y   Œ‘xY w# 1 sw Y   ŒexY w)NrV  r‹   z6genpkey -algorithm {0} -outform PEM -out t/privkey.pemz=pkey -outform PEM -pubout -in t/privkey.pem -out t/pubkey.pemrW  rX  zHpkeyutl -sign -inkey t/privkey.pem -rawin -in t/data.txt -out t/data.sigr[  rZ  rY  )Únamer_  r`  ra  rb  rc  rd  r^   rò  re  rf  rg  r   rº   ÚassertIsr•   rg   )rk   r•   ri  rn   r�  ro   ræ   s          rJ   Údo_eddsa_test_from_opensslz"OpenSSL.do_eddsa_test_from_openssl´  s  € Ø—J‘Jˆ	ä�7‰7�=‰=˜ÔÜ�M‰M˜#ÔÜ
�‰�ŒàˆäØD×KÑKØóô	
ô
 	ØKô	
ô �, Ô%¨Ø�G‰G�DŒM÷ &äð4ô	
ô
 �, Ô%¨Ø—&‘&“(ˆC÷ &ä�. $Ô'¨1Ü×&Ñ& q§v¡v£xÓ0ˆB÷ (ð 	�‰�b—h‘h Ô&à
�	‰	�#�tÔä�‰�cÕ÷! &Ð%ú÷ &Ð%úç'Ð'ús$   Â	EÂ:EÃ$E'ÅEÅE$Å'E0c                 ó,   — | j                  t        «      S r†   )rÂ  r8   rˆ   s    rJ   Útest_from_openssl_ed25519z!OpenSSL.test_from_openssl_ed25519Ø  s   € ð ×.Ñ.¬wÓ7Ð7rI   c                 ó,   — | j                  t        «      S r†   )rÂ  r9   rˆ   s    rJ   Útest_from_openssl_ed448zOpenSSL.test_from_openssl_ed448à  s   € ð ×.Ñ.¬uÓ5Ð5rI   N)ÚSHA1)LrE   rF   rG   Úsetr^   rT   ÚOPENSSL_SUPPORTED_CURVESrö  ÚpytestÚmarkÚslowÚskipifrü  r   r  r  r  r  r  r  r  r   r#  r&  r)  r,  r0  r3  r6  r9  r<  r?  rB  rE  rH  rK  rN  rQ  rT  rû  rq  rt  rv  rx  r{  r~  r�  r„  r†  rˆ  rŠ  rŒ  rŽ  r�  r“  r•  r—  r™  r›  r�  rŸ  r¡  r£  r¥  r§  r©  r«  rp  ÚOPENSSL_SUPPORTED_TYPESrD   r¸  r»  r¾  rÂ  rÄ  rÆ  rH   rI   rJ   rà  rà    sp  „ ñ$  #ñ #áÐ3Ó4×:Ñ:¸4Ô@ó#ó  Ðò
7ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ4ó	ó ð
4ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ4ó	ó ð
4ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ4ó	ó ð
4ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ4ó	ó ð
4ð ‡[�[×ÑØ‡[�[×ÑØÐ4Ð4Ø;ð ó ñ3ó	ó ð
3ð ‡[�[×ÑØ‡[�[×ÑØÐ4Ð4Ø;ð ó ñ=ó	ó ð
=ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ3ó	ó ð
3ð ‡[�[×ÑØ‡[�[×ÑØÐ4Ð4Ø;ð ó ñ3ó	ó ð
3ð ‡[�[×ÑØ‡[�[×ÑØÐ4Ð4Ø;ð ó ñ=ó	ó ð
=ð ‡[�[×ÑØ‡[�[×ÑØÐ4Ð4Ø;ð ó ñ=ó	ó ð
=ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ3ó	ó ð
3ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ3ó	ó ð
3ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ4ó	ó ð
4ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ:ó	ó ð
:ó2)ðh ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ+ó	ó ð
+ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ+ó	ó ð
+ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ+ó	ó ð
+ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ+ó	ó ð
+ð ‡[�[×ÑØ‡[�[×ÑØÐ4Ð4Ø;ð ó ñ*ó	ó ð
*ð ‡[�[×ÑØ‡[�[×ÑØÐ4Ð4Ø;ð ó ñ4ó	ó ð
4ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ*ó	ó ð
*ð ‡[�[×ÑØ‡[�[×ÑØÐ4Ð4Ø;ð ó ñ*ó	ó ð
*ð ‡[�[×ÑØ‡[�[×ÑØÐ4Ð4Ø;ð ó ñ4ó	ó ð
4ð ‡[�[×ÑØ‡[�[×ÑØÐ4Ð4Ø;ð ó ñ4ó	ó ð
4ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ*ó	ó ð
*ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ*ó	ó ð
*ð ‡[�[×ÑØ‡[�[×ÑØÐ3Ð3Ø:ð ó ñ+ó	ó ð
+ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1ð ‡[�[×ÑØ‡[�[×ÑØÐ!9Ð9Ø@ð ó ñ1ó	ó ð
1óS
ñj "›eÐðØ‘{ ?Ó3Ñ3Ù&)ñ *á-ó*ó 'Ð#ò!ðJ ‡[�[×ÑØ‡[�[×ÑØÐ0Ð0ØEð ó ñ6ó	ó ð
6ð ‡[�[×ÑØ‡[�[×ÑØÐ.Ð.ØCð ó ñ4ó	ó ð
4ò"ðH ‡[�[×ÑØ‡[�[×ÑØÐ0Ð0ØEð ó ñ8ó	ó ð
8ð ‡[�[×ÑØ‡[�[×ÑØÐ.Ð.ØCð ó ñ6ó	ó ñ
6øðS ò Úðús   õy( ù(y1ù0y1rà  c                   óè   — e Zd Z ed„  ed«      j                  d«      D «       «      Zej                  j                  devd¬«      d„ «       Z
ej                  j                  devd¬«      d„ «       Zy	)
ÚTooSmallCurvec              #   ó`   K  — | ]&  }|j                  d «      d   j                  «       –— Œ( y­wrâ  rä  rå  s     rJ   rè  zTooSmallCurve.<genexpr>ê  ré  rê  rë  rì  r  r  rø  c                 óò   — t        j                  t        ¬«      }d}| j                  t        «      5  |j                  |t        t        j                  d«      t        d¬«       d d d «       y # 1 sw Y   y xY w)Nr®   r‹   r  F©rj  r  rz  )
r   rc   r$   rh   r   re   r   rx   rh  r   )rk   rå   rn   s      rJ   Ú4test_sign_too_small_curve_dont_allow_truncate_raiseszBTooSmallCurve.test_sign_too_small_curve_dont_allow_truncate_raisesï  s[   € ô
 × Ñ ¤xÔ0ˆØˆØ×Ñœ~Õ.Ø�G‰GØÜ ¤§¡¨hÓ7Ü'Ø$ð	 ô ÷ /×.Ñ.ús   ²2A-Á-A6c           	      óv  — t        j                  t        ¬«      }|j                  «       }d}|j	                  |t        t        j                  d«      t        d¬«      }| j                  t        «      5  |j                  ||t        t        j                  d«      t        d¬«       d d d «       y # 1 sw Y   y xY w)Nr®   r‹   r  TrÓ  F)rj  r  rz  )r   rc   r$   rd   re   r   rx   rh  r   rh   r   rg   r   )rk   rå   ræ   rn   r  s        rJ   Ú6test_verify_too_small_curve_dont_allow_truncate_raiseszDTooSmallCurve.test_verify_too_small_curve_dont_allow_truncate_raisesþ  s˜   € ô
 × Ñ ¤xÔ0ˆØ×!Ñ!Ó#ˆØˆØ—'‘'ØÜœWŸ[™[¨(Ó3Ü#Øð	 ó 
ˆð ×Ñœ~Õ.Ø�I‰IØØÜ ¤§¡¨hÓ7Ü'Ø$ð ô ÷ /×.Ñ.ús   Á33B/Â/B8N)rE   rF   rG   rÈ  r^   rT   rÉ  rÊ  rË  rÍ  rÔ  rÖ  rH   rI   rJ   rÐ  rÐ  é  s“   „ Ù"ñ #áÐ3Ó4×:Ñ:¸4Ô@ó#ó  Ðð
 ‡[�[×ÑØÐ4Ð4Ø;ð ó ñ	ó	ð	ð ‡[�[×ÑØÐ4Ð4Ø;ð ó ñó	ñrI   rÐ  c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚDERc                 óœ  — | j                  t        j                  d«      d«       | j                  t        j                  d«      d«       | j                  t        j                  d«      d«       | j                  t        j                  d«      d«       | j                  t        j                  d	«      d
«       d„ }| j                   |d«      d«       | j                   |d«      d«       | j                   |d«      d«       | j                   |d«      d«       | j                   |d	«      d«       | j                   |d«      d«       y )Nr   s    r   s   é   s   é€   s    €rÐ  s    c                 óX   — t        j                  t        j                  | «      dz   «      S )NrÇ   )r@   Úremove_integerrH  )Úns    rJ   r¡   zDER.test_integer.<locals>.s  s#   € Ü×%Ñ%¤c×&8Ñ&8¸Ó&;¸gÑ&EÓFÐFrI   )r   rÇ   )r   rÇ   )rÚ  rÇ   )rÛ  rÇ   )rÐ  rÇ   ì	   Ò
~[~âeŠ;~p�d )rß  rÇ   )r   r@   rH  )rk   r¡   s     rJ   Útest_integerzDER.test_integer  s  € Ø×Ñœ×+Ñ+¨AÓ.°Ô@Ø×Ñœ×+Ñ+¨AÓ.°Ô@Ø×Ñœ×+Ñ+¨CÓ0°/ÔBØ×Ñœ×+Ñ+¨CÓ0Ð2EÔFØ×Ñœ×+Ñ+¨CÓ0Ð2EÔFò	Gð 	×Ñ™˜1›˜|Ô,Ø×Ñ™˜1›˜|Ô,Ø×Ñ™˜3› Ô0Ø×Ñ™˜3› Ô0Ø×Ñ™˜3› Ô0Ø×ÑÙÐ6Ó7Ø?õ	
rI   c                 óè  — | j                  t        j                  d«      d«       | j                  t        j                  d«      d«       | j                  t        j                  d«      d«       | j                  t        j                  d«      d«       d	D ]Y  }t        j                  |«      d
z   }t        j                  |«      \  }}| j                  ||«       | j                  ||d  d
«       Œ[ y )Nr   r¼  rÚ  ó   rÛ  s   � é‡  s   ƒ)r   r   rK   rÚ  rÛ  rã  rí   rî   ó   more)r   r@   Úencode_numberÚread_number©rk   rÞ  ÚxÚn1Úllens        rJ   Útest_numberzDER.test_number,  sÇ   € Ø×Ñœ×*Ñ*¨1Ó-¨wÔ7Ø×Ñœ×*Ñ*¨3Ó/°Ô9Ø×Ñœ×*Ñ*¨3Ó/°Ô=Ø×Ñœ×*Ñ*¨;Ó7¸ÔEó >ˆAÜ×!Ñ! !Ó$ wÑ.ˆAÜ—‘ qÓ)‰HˆB�Ø×Ñ˜R Ô#Ø×Ñ˜Q˜t˜u˜X wÕ/ñ	 >rI   c                 ó  — | j                  t        j                  d«      d«       | j                  t        j                  d«      d«       | j                  t        j                  d«      d«       | j                  t        j                  d«      d«       | j                  t        j                  d	«      d
«       | j                  t        j                  d«      d«       | j                  t        j                  d«      d«       | j                  t        j                  d«      d«       dD ]Y  }t        j                  |«      dz   }t        j                  |«      \  }}| j                  ||«       | j                  ||d  d«       Œ[ y )Nr   r¼  rÚ  râ  rÛ  s   �€r3  s   �ÿrÐ  s   ‚ é  s   ‚s   �›more)é›   rK   rî  s   �›)	r   r   rK   rÚ  rÛ  r3  rÐ  rí  rî  rä  )r   r@   Úencode_lengthÚread_lengthrç  s        rJ   Útest_lengthzDER.test_length9  s1  € Ø×Ñœ×*Ñ*¨1Ó-¨wÔ7Ø×Ñœ×*Ñ*¨3Ó/°Ô9Ø×Ñœ×*Ñ*¨3Ó/°Ô=Ø×Ñœ×*Ñ*¨3Ó/°Ô=Ø×Ñœ×*Ñ*¨3Ó/°ÔAØ×Ñœ×*Ñ*¨;Ó7¸ÔIØ×ÑœŸ™Ð)>Ó?ÀÔJØ×Ñœ×*Ñ*¨3Ó/°Ô=Û@ˆAÜ×!Ñ! !Ó$ wÑ.ˆAÜ—‘ qÓ)‰HˆB�Ø×Ñ˜R Ô#Ø×Ñ˜Q˜t˜u˜X wÕ/ñ	 ArI   c                 óÒ   — t        j                  dd«      dz   }| j                  |d«       t        j                  |«      \  }}| j                  |d«       | j                  |d«       y )Ns   ABCs   DEFs   GHIs   0ABCDEFGHIs   ABCDEF)r@   ró   r   Úremove_sequence)rk   rè  Úx1Úrests       rJ   Útest_sequencezDER.test_sequenceH  s^   € Ü×Ñ ¨Ó/°&Ñ8ˆØ×Ñ˜Ð0Ô1Ü×&Ñ& qÓ)‰ˆˆDØ×Ñ˜˜YÔ'Ø×Ñ˜˜vÕ&rI   c                 óö   — t        j                  dt        j                  «      }| j	                  t        |«      d«       t        j                  dt        d«      «      }| j	                  t        |«      d«       y )Nr   s   a00706052b81040021r   s   0102030a0b0cs   a1060102030a0b0c)r@   rQ  r%   Úencoded_oidr   r   r   )rk   rè  s     rJ   Útest_constructedzDER.test_constructedO  s[   € Ü×"Ñ" 1¤h×&:Ñ&:Ó;ˆØ×Ñœ ›Ð%@ÔAÜ×"Ñ" 1¤i°Ó&@ÓAˆØ×Ñœ ›Ð%>Õ?rI   N)rE   rF   rG   rà  rë  rñ  rö  rù  rH   rI   rJ   rØ  rØ    s   „ ò
ò*0ò0ò'ó@rI   rØ  c                   ó¬   — e Zd Zej                  j
                  d„ «       Zd„ Z ed
i e	¤Ž e
 ej                  dddz  ¬«      «      d„ «       «       Zd„ Zy	)ÚUtilc                 ó$  — t         j                  }t        d«      D ]:  }d|z  }dD ].  } |||«      }| j                  d|cxk  xr |k  nc d||f«       Œ0 Œ< | j	                  d |dt
        j                  «      z  j                  «       d«       y )Niè  úseed-%d)éþ   r3  rÐ  i  i  éÿÿ  é  r   z%xr”   s8   6fa59d73bf0446ae8743cf748fc5ac11d5585a90356417e97155c3bc)r   r’   Úrangerf   r   r%   r|   Úencode)rk   ÚttaÚir”   r|   rÞ  s         rJ   Útest_trytryagainzUtil.test_trytryagainW  s‰   € ä×3Ñ3ˆÜ�t–ˆAØ˜q‘=ˆDó�ñ ˜˜eÓ$�Ø—‘  Q¦¨¤°°A°u°Õ>ñð ð 	×ÑØ‘S˜¤§¡Ó0Ñ1×9Ñ9Ó;ØGõ	
rI   c                 ó®   — t         j                  }d}d} |||«      }t        j                  dk  r| j	                  |d«       y | j	                  |d«       y )Nrþ  s   text)r¯   r   éä   é   )r   r’   ÚsysÚversion_infor   )rk   r  r|   r”   rÞ  s        rJ   Útest_trytryagain_singlezUtil.test_trytryagain_singlem  sQ   € Ü×3Ñ3ˆØˆØˆÙ��eÓˆä×Ñ˜fÒ$Ø×Ñ˜Q Õ$à×Ñ˜Q Õ#rI   r   r  r%  )Ú	min_valueÚ	max_valuec                 ó¶   — t        j                  d|z  «      }dD ]<  }t        j                  ||¬«      }| j                  d|cxk  xr |k  nc d||f«       Œ> y )Nrý  )rþ  r3  rÐ  rÿ  r   r¤   r   )r   ÚPRNGÚ	randrangerf   )rk   r  r¥   r|   rÞ  s        rJ   Útest_randrangezUtil.test_randrangex  sP   € ô
 —)‘)˜I¨™MÓ*ˆó
ˆEô —‘˜u¨gÔ6ˆAØ�O‰O˜A žN UœN¨Q°°5¨MÕ:ñ
rI   c                 óf  — d}t        t        d|«      D �cg c]  }|df‘Œ c}«      }d|vsJ ‚||vsJ ‚t        d«      D ]*  }d|z  }t        j                  ||«      }||xx   dz  cc<   Œ, | j	                  ||dz
     «       t        d|«      D ]  }t        d|d||   dz  z  fz  «       Œ y c c}w )	Nrþ  r   r   i@B rý  z%3d: %sÚ*éd   )Údictr  r   r’   rf   Úprint)rk   r|   r  Úcountsr”   rÞ  s         rJ   ÚOFF_test_prove_uniformityzUtil.OFF_test_prove_uniformity‰  sÆ   € ØˆÜ¤u¨Q°¤Ó7¡ !˜˜1’v Ñ7Ó8ˆØ˜‰ÐˆØ˜FÑ"Ð"Ð"Ü�w–ˆAØ˜q‘=ˆDÜ×5Ñ5°d¸EÓBˆAØ�1‹I˜‰NŒIð  ð
 	�‰˜˜u q™yÑ)Ô*Ü�q˜%–ˆAÜ�)˜q #¨°©°cÑ)9Ñ":Ð;Ñ;Õ<ñ !ùò 8s   –B.NrH   )rE   rF   rG   rÊ  rË  rÌ  r  r  r
   ÚHYP_SETTINGSr	   ÚstÚintegersr  r  rH   rI   rJ   rû  rû  V  sb   „ Ø‡[�[×Ññ
ó ð
ò*	$ñ Ñ�ÑÙ
ˆ;ˆ2�;‰; ¨b°#©gÔ6Ó7ñ;ó 8ó ð;ó=rI   rû  c                   ór   — e 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„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚRFC6979c                 ót   — t        j                  |j                  «       |||«      }| j                  ||«       y r†   )rA   rz   r|   r   )rk   r{   r€   ÚhshÚ	hash_funcÚexpectedÚactuals          rJ   Ú_dozRFC6979._doš  s/   € Ü×#Ñ# I§O¡OÓ$5°v¸yÈ#ÓNˆØ×Ñ˜ 6Õ*rI   c           
      óÒ   — | j                  t        j                  t        dd«      t	        j
                  d«      j                  «       t        j
                  t        dd«      ¬«       y)z‘RFC doesn't contain test vectors for SECP256k1 used in bitcoin.
        This vector has been computed by Golang reference implementation instead.rs   rt   ó   sampleÚ@8fa1f95d514760e498f28957b824ee6ec39ed64826ff4fecc2b5739ec45b91cd©r{   r€   r  r   r!  N©r#  r)   r{   rv   rx   ry   r}   rˆ   s    rJ   Útest_SECP256k1zRFC6979.test_SECP256k1ž  sS   € ð 	�‰Ü×)Ñ)ÜÐ9¸2Ó>Ü—‘˜yÓ)×0Ñ0Ó2Ü—n‘nÜØRØóð 	õ 		
rI   c           
      óÒ   — | j                  t        j                  t        dd«      t	        j
                  d«      j                  «       t        j
                  t        dd«      ¬«       y )NÚ@cca9fbcc1b41e5a95d369eaa6ddcff73b61a4efaa279cfc6567e8daa39cbaf50rt   r%  Ú@2df40ca70e639d89528a6b670d9d48d9165fdc0febc0974056bdce192b8e16a3r'  r(  rˆ   s    rJ   Útest_SECP256k1_2zRFC6979.test_SECP256k1_2¬  sV   € Ø�‰Ü×)Ñ)ÜØRØóô —‘˜yÓ)×0Ñ0Ó2Ü—n‘nÜØRØóð 	õ 	
rI   c                 óª   — | j                  t        j                  dt        j                  d«      j                  «       t        j                  d¬«       y )Nr   ó   Satoshi Nakamotol   ]âiíHsiäNPIúz$Nkxke’}¶Š r'  ©r#  r)   r{   rx   ry   r}   rˆ   s    rJ   Útest_SECP256k1_3zRFC6979.test_SECP256k1_3»  s?   € Ø�‰Ü×)Ñ)ØÜ—‘Ð2Ó3×:Ñ:Ó<Ü—n‘nØWð 	õ 	
rI   c                 óª   — | j                  t        j                  dt        j                  d«      j                  «       t        j                  d¬«       y )Nr   sJ   All those moments will be lost in time, like tears in rain. Time to die...l   ³V1ujcC†X±x�i¦
nHî0G<›VÝHkª8r'  r0  rˆ   s    rJ   Útest_SECP256k1_4zRFC6979.test_SECP256k1_4Ä  s?   € Ø�‰Ü×)Ñ)ØÜ—‘Ø]óç‰f‹hÜ—n‘nØWð 	õ 	
rI   c                 óª   — | j                  t        j                  dt        j                  d«      j                  «       t        j                  d¬«       y )Nl   @Al 3z’~»i«9nWº~ÿÿÿÿÿÿÿÿ r/  l   �oTùP§*(9ŠLŸM$d©õh©W5DÞv—8°M¡3r'  r0  rˆ   s    rJ   Útest_SECP256k1_5zRFC6979.test_SECP256k1_5Ï  s?   € Ø�‰Ü×)Ñ)ØUÜ—‘Ð2Ó3×:Ñ:Ó<Ü—n‘nØWð 	õ 	
rI   c                 óª   — | j                  t        j                  dt        j                  d«      j                  «       t        j                  d¬«       y )Nl   �A h½bû+Jn p.Ô(åd™0^”yñ8ÆW¸x s   Alan Turingl   ñ}ù:ìAànûqº`0=�	öª3€9èp™C[AZRr'  r0  rˆ   s    rJ   Útest_SECP256k1_6zRFC6979.test_SECP256k1_6Ø  s>   € Ø�‰Ü×)Ñ)ØUÜ—‘˜~Ó.×5Ñ5Ó7Ü—n‘nØWð 	õ 	
rI   c                 ó²   — | j                  t        d ddt        dd«      «      t        dd«      t        d«      t        j
                  t        dd«      ¬«       y )Nr   Ú)4000000000000000000020108A2E0CC0D99F8A5EFrt   Ú)09A4D6792295A7F730FC3F2B49CBC0F62E862272Fs@   AF2BDBE1AA9B6EC1E2ADE1D694F41FC71A831D0268E9891562113D8A62ADD1BFÚ)23AF4074C90A02B3FE61D286D5C87F425E6BDD81Br'  )r#  r?   rv   r   rx   ry   rˆ   s    rJ   Útest_1zRFC6979.test_1á  s[   € à�‰ÜØØØÜÐ?ÀÓDó	ô ÐBÀBÓGÜØSóô —n‘nÜÐDÀbÓIð 	õ 	
rI   c           
      óÒ   — | j                  t        j                  t        dd«      t	        j
                  d«      j                  «       t        j
                  t        dd«      ¬«       y )NÚ06FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4rt   r%  Ú037D7CA00D2C7B0E5E412AC03BD44BA837FDD5B28CD3B0021r'  ©r#  r$   r{   rv   rx   Úsha1r}   rˆ   s    rJ   Útest_2zRFC6979.test_2ò  sP   € Ø�‰Ü×(Ñ(ÜÐIÈ2ÓNÜ—‘˜YÓ'×.Ñ.Ó0Ü—l‘lÜØBÀBóð 	õ 	
rI   c           
      óÒ   — | j                  t        j                  t        dd«      t	        j
                  d«      j                  «       t        j
                  t        dd«      ¬«       y )Nr>  rt   r%  Ú032B1B6D7D42A05CB449065727A84804FB1A3E34D8F261496r'  ©r#  r$   r{   rv   rx   ry   r}   rˆ   s    rJ   Útest_3zRFC6979.test_3ý  óP   € Ø�‰Ü×(Ñ(ÜÐIÈ2ÓNÜ—‘˜yÓ)×0Ñ0Ó2Ü—n‘nÜØBÀBóð 	õ 	
rI   c           
      óÒ   — | j                  t        j                  t        dd«      t	        j
                  d«      j                  «       t        j
                  t        dd«      ¬«       y )Nr>  rt   r%  Ú0A2AC7AB055E4F20692D49209544C203A7D1F2C0BFBC75DB1r'  ©r#  r$   r{   rv   rx   Úsha512r}   rˆ   s    rJ   Útest_4zRFC6979.test_4  rG  rI   c           
      óÒ   — | j                  t        j                  t        dd«      t	        j
                  d«      j                  «       t        j
                  t        dd«      ¬«       y )Nr>  rt   ó   testÚ0D9CF9C3D3297D3260773A1DA7418DB5537AB8DD93DE7FA25r'  r@  rˆ   s    rJ   Útest_5zRFC6979.test_5  sP   € Ø�‰Ü×(Ñ(ÜÐIÈ2ÓNÜ—‘˜WÓ%×,Ñ,Ó.Ü—l‘lÜØBÀBóð 	õ 	
rI   c           
      óÒ   — | j                  t        j                  t        dd«      t	        j
                  d«      j                  «       t        j
                  t        dd«      ¬«       y )Nr>  rt   rN  Ú05C4CE89CF56D9E7C77C8585339B006B97B5F0680B4306C6Cr'  rE  rˆ   s    rJ   Útest_6zRFC6979.test_6  óP   € Ø�‰Ü×(Ñ(ÜÐIÈ2ÓNÜ—‘˜wÓ'×.Ñ.Ó0Ü—n‘nÜØBÀBóð 	õ 	
rI   c           
      óÒ   — | j                  t        j                  t        dd«      t	        j
                  d«      j                  «       t        j
                  t        dd«      ¬«       y )Nr>  rt   rN  Ú00758753A5254759C7CFBAD2E2D9B0792EEE44136C9480527r'  rJ  rˆ   s    rJ   Útest_7zRFC6979.test_7)  rT  rI   c           
      óÒ   — | j                  t        j                  t        dd«      t	        j
                  d«      j                  «       t        j
                  t        dd«      ¬«       y )NÚƒ0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538rt   r%  Úƒ089C071B419E1C2820962321787258469511958E80582E95D8378E0C2CCDB3CB42BEDE42F50E3FA3C71F5A76724281D31D9C89F0F91FC1BE4918DB1C03A5838D0F9r'  )r#  r(   r{   rv   rx   rA  r}   rˆ   s    rJ   Útest_8zRFC6979.test_84  s\   € Ø�‰Ü×(Ñ(Üð VØóô —‘˜YÓ'×.Ñ.Ó0Ü—l‘lÜð VØóð 	õ 	
rI   c           
      óÒ   — | j                  t        j                  t        dd«      t	        j
                  d«      j                  «       t        j
                  t        dd«      ¬«       y )NrY  rt   r%  Úƒ0EDF38AFCAAECAB4383358B34D67C9F2216C8382AAEA44A3DAD5FDC9C32575761793FEF24EB0FC276DFC4F6E3EC476752F043CF01415387470BCBD8678ED2C7E1A0r'  )r#  r(   r{   rv   rx   ry   r}   rˆ   s    rJ   Útest_9zRFC6979.test_9C  s\   € Ø�‰Ü×(Ñ(Üð VØóô —‘˜yÓ)×0Ñ0Ó2Ü—n‘nÜð VØóð 	õ 	
rI   c           
      óÒ   — | j                  t        j                  t        dd«      t	        j
                  d«      j                  «       t        j
                  t        dd«      ¬«       y )NrY  rt   rN  Úƒ16200813020EC986863BEDFC1B121F605C1215645018AEA1A7B215A564DE9EB1B38A67AA1128B80CE391C4FB71187654AAA3431027BFC7F395766CA988C964DC56Dr'  )r#  r(   r{   rv   rx   rK  r}   rˆ   s    rJ   Útest_10zRFC6979.test_10R  s\   € Ø�‰Ü×(Ñ(Üð VØóô —‘˜wÓ'×.Ñ.Ó0Ü—n‘nÜð VØóð 	õ 	
rI   N)rE   rF   rG   r#  r)  r-  r1  r3  r5  r7  r<  rB  rF  rL  rP  rS  rW  r[  r^  ra  rH   rI   rJ   r  r  ˜  sW   „ ò+ò
ò
ò
ò	
ò
ò
ò
ò"	
ò	
ò	
ò	
ò	
ò	
ò
ò
ó
rI   r  c                   ó   — e Zd Zd„ Zy)ÚECDHc                 óB  — ||z  }||z  }||z  }| j                  t        |||«      |«       | j                  t        |||«      |«       | j                  ||z  ||z  |z  cxk(  xr ||z  |z  cxk(  xr ||z  k(  nc «       | j                  t        ||	|
«      |«       y r†   )r   r?   rf   )rk   r•   r{   ÚdAÚx_qAÚy_qAÚdBÚx_qBÚy_qBÚx_ZÚy_ZÚqAÚqBÚZs                 rJ   r#  zECDH._doc  s­   € Ø�)‰^ˆØ�)‰^ˆØ�‰GˆØ×Ñœ˜u d¨DÓ1°2Ô6Ø×Ñœ˜u d¨DÓ1°2Ô6Ø�‰Ø�"‰WØ�R‘˜)Ñ#öà�R‘˜)Ñ#öð �R‘ôô	
ð 	×Ñœ˜u c¨3Ó/°Õ3rI   N)rE   rF   rG   r#  rH   rI   rJ   rc  rc  b  s   „ ó4rI   rc  c                   óˆ   — e Zd Zd„ Zd„ Zej                  j                  d„ «       Zej                  j                  d„ «       Z	y)ÚRFC6932c                 óþ   — | j                  t        t        j                  t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        d	d«      ¬
«
       y )NÚ87C4B7A2C8A4BAD1FBB7D79CC0955DB7C6A4660CA64CC4778159B495Ert   Ú8B104A67A6F6E85E14EC1825E1539E8ECDBBF584922367DD88C6BDCF2Ú846D782E7FDB5F60CD8404301AC5949C58EDB26BC68BA07695B750A94Ú863976D4AAE6CD0F6DD18DEFEF55D96569D0507C03E74D6486FFA28FBÚ82A97089A9296147B71B21A4B574E1278245B536F14D8C2B9D07A874EÚ89B900D7C77A709A797276B8CA1BA61BB95B546FC29F862E44D59D25BÚ8312DFD98783F9FB77B9704945A73BEB6DCCBE3B65D0F967DCAB574EBÚ86F800811D64114B1C48C621AB3357CF93F496E4238696A2A012B3C98©
r•   r{   re  rf  rg  rh  ri  rj  rk  rl  )r#  r;   r,   r{   rv   rˆ   s    rJ   Útest_brainpoolP224r1zRFC6932.test_brainpoolP224r1u  s•   € Ø�‰Ü'Ü%×/Ñ/ÜØJÈBóô ØJÈBóô ØJÈBóô ØJÈBóô ØJÈBóô ØJÈBóô ØJÈBóô ØJÈBóð1 	õ 	
rI   c                 óþ   — | j                  t        t        j                  t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        d	d«      ¬
«
       y )NÚ@041EB8B1E2BC681BCE8E39963B2E9FC415B05283313DD1A8BCC055F11AE49699rt   Ú@78028496B5ECAAB3C8B6C12E45DB1E02C9E4D26B4113BC4F015F60C5CCC0D206Ú@A2AE1762A3831C1D20F03F8D1E3C0C39AFE6F09B4D44BBE80CD100987B05F92BÚ@06F5240EACDB9837BC96D48274C8AA834B6C87BA9CC3EEDD81F99A16B8D804D3Ú@8E07E219BA588916C5B06AA30A2F464C2F2ACFC1610A3BE2FB240B635341F0DBÚ@148EA1D7D1E7E54B9555B6C9AC90629C18B63BEE5D7AA6949EBBF47B24FDE40DÚ@05E940915549E9F6A4A75693716E37466ABA79B4BF2919877A16DD2CC2E23708Ú@6BC23B6702BC5A019438CEEA107DAAD8B94232FFBBC350F3B137628FE6FD134Cr{  ©r#  r<   r-   r{   rv   rˆ   s    rJ   Útest_brainpoolP256r1zRFC6932.test_brainpoolP256r1“  ó®   € Ø�‰Ü'Ü%×/Ñ/Üðàóô
 ðàóô
 ðàóô
 ðàóô
 ðàóô
 ðàóô
 ðàóô
 ðàóðM 	õ +	
rI   c                 óþ   — | j                  t        t        j                  t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        d	d«      ¬
«
       y )NÚ`014EC0755B78594BA47FB0A56F6173045B4331E74BA1A6F47322E70D79D828D97E095884CA72B73FDABD5910DF0FA76Art   Ú`45CB26E4384DAF6FB776885307B9A38B7AD1B5C692E0C32F0125332778F3B8D3F50CA358099B30DEB5EE69A95C058B4EÚ`8173A1C54AFFA7E781D0E1E1D12C0DC2B74F4DF58E4A4E3AF7026C5D32DC530A2CD89C859BB4B4B768497F49AB8CC859Ú`6B461CB79BD0EA519A87D6828815D8CE7CD9B3CAA0B5A8262CBCD550A015C90095B976F3529957506E1224A861711D54Ú`01BF92A92EE4BE8DED1A911125C209B03F99E3161CFCC986DC7711383FC30AF9CE28CA3386D59E2C8D72CE1E7B4666E8Ú`3289C4A3A4FEE035E39BDB885D509D224A142FF9FBCC5CFE5CCBB30268EE47487ED8044858D31D848F7A95C635A347ACÚ`04CC4FF3DCCCB07AF24E0ACC529955B36D7C807772B92FCBE48F3AFE9A2F370A1F98D3FA73FD0C0747C632E12F1423ECÚ`7F465F90BD69AFB8F828A214EB9716D66ABC59F17AF7C75EE7F1DE22AB5D05085F5A01A9382D05BF72D96698FE3FF64Er{  ©r#  r=   r/   r{   rv   rˆ   s    rJ   Útest_brainpoolP384r1zRFC6932.test_brainpoolP384r1Á  ó®   € à�‰Ü'Ü%×/Ñ/Üð8àóô
 ð:àóô
 ð:àóô
 ð8àóô
 ð:àóô
 ð:àóô
 ð9àóô
 ð9àóðM 	õ +	
rI   c                 óþ   — | j                  t        t        j                  t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        d	d«      ¬
«
       y )NÚ€636B6BE0482A6C1C41AA7AE7B245E983392DB94CECEA2660A379CFE159559E357581825391175FC195D28BAC0CF03A7841A383B95C262B983782874CCE6FE333rt   Ú€0562E68B9AF7CBFD5565C6B16883B777FF11C199161ECC427A39D17EC2166499389571D6A994977C56AD8252658BA8A1B72AE42F4FB7532151AFC3EF0971CCDAÚ€A7CA2D8191E21776A89860AFBC1F582FAA308D551C1DC6133AF9F9C3CAD59998D70079548140B90B1F311AFB378AA81F51B275B2BE6B7DEE978EFC7343EA642EÚ€0AF4E7F6D52EDD52907BB8DBAB3992A0BB696EC10DF11892FF205B66D381ECE72314E6A6EA079CEA06961DBA5AE6422EF2E9EE803A1F236FB96A1799B86E5C8BÚ€5A7954E32663DFF11AE24712D87419F26B708AC2B92877D6BFEE2BFC43714D89BBDB6D24D807BBD3AEB7F0C325F862E8BADE4F74636B97EAACE739E11720D323Ú€96D14621A9283A1BED84DE8DD64836B2C0758B11441179DC0C54C0D49A47C03807D171DD544B72CAAEF7B7CE01C7753E2CAD1A861ECA55A71954EE1BA35E04BEÚ€1EE8321A4BBF93B9CF8921AB209850EC9B7066D1984EF08C2BB723236208AC8F1A483E79461A00E0D5F6921CE9D360502F85C812BEDEE23AC5B210E5811B191EÚ€2632095B7B936174B41FD2FAF369B1D18DCADEED7E410A7E251F0831097C50D02CFED02607B6A2D5ADB4C0006008562208631875B58B54ECDA5A4F9FE9EAABA6r{  ©r#  r>   r0   r{   rv   rˆ   s    rJ   Útest_brainpoolP512r1zRFC6932.test_brainpoolP512r1ð  ó¾   € à�‰Ü'Ü%×/Ñ/Üðð ó	ô ð!ð ó	ô ð!ð ó	ô ðð ó	ô ð!ð ó	ô ð!ð ó	ô ðð ó	ô ðð ó	ð[ 	õ 3	
rI   N)
rE   rF   rG   r|  r‡  rÊ  rË  rÌ  r“  rŸ  rH   rI   rJ   rq  rq  r  sJ   „ ò
ò<,
ð\ ‡[�[×Ññ,
ó ð,
ð\ ‡[�[×Ññ4
ó ñ4
rI   rq  c                   ó‚   — e Zd Zd„ Zej
                  j                  d„ «       Zej
                  j                  d„ «       Zy)ÚRFC7027c                 óþ   — | j                  t        t        j                  t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        d	d«      ¬
«
       y )NÚ@81DB1EE100150FF2EA338D708271BE38300CB54241D79950F77B063039804F1Drt   Ú@44106E913F92BC02A1705D9953A8414DB95E1AAA49E81D9E85F929A8E3100BE5Ú@8AB4846F11CACCB73CE49CBDD120F5A900A69FD32C272223F789EF10EB089BDCÚ@55E40BC41E37E3E2AD25C3C6654511FFA8474A91A0032087593852D3E7D76BD3Ú@8D2D688C6CF93E1160AD04CC4429117DC2C41825E1E9FCA0ADDD34E6F1B39F7BÚ@990C57520812BE512641E47034832106BC7D3E8DD0E4C7F1136D7006547CEC6AÚ@89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2BÚ@49C27868F4ECA2179BFD7D59B1E3BF34C1DBDE61AE12931648F43E59632504DEr{  r†  rˆ   s    rJ   r‡  zRFC7027.test_brainpoolP256r1+	  rˆ  rI   c                 óþ   — | j                  t        t        j                  t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        d	d«      ¬
«
       y )NÚ`1E20F5E048A5886F1F157C74E91BDE2B98C8B52D58E5003D57053FC4B0BD65D6F15EB5D1EE1610DF870795143627D042rt   Ú`68B665DD91C195800650CDD363C625F4E742E8134667B767B1B476793588F885AB698C852D4A6E77A252D6380FCAF068Ú`55BC91A39C9EC01DEE36017B7D673A931236D2F1F5C83942D049E3FA20607493E0D038FF2FD30C2AB67D15C85F7FAA59Ú`032640BC6003C59260F7250C3DB58CE647F98E1260ACCE4ACDA3DD869F74E01F8BA5E0324309DB6A9831497ABAC96670Ú`4D44326F269A597A5B58BBA565DA5556ED7FD9A8A9EB76C25F46DB69D19DC8CE6AD18E404B15738B2086DF37E71D1EB4Ú`62D692136DE56CBE93BF5FA3188EF58BC8A3A0EC6C1E151A21038A42E9185329B5B275903D192F8D4E1F32FE9CC78C48Ú`0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42Ú`0DF213417EBE4D8E40A5F76F66C56470C489A3478D146DECF6DF0D94BAE9E598157290F8756066975F1DB34B2324B7BDr{  r’  rˆ   s    rJ   r“  zRFC7027.test_brainpoolP384r1Y	  r”  rI   c                 óþ   — | j                  t        t        j                  t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        dd«      t	        d	d«      ¬
«
       y )NÚ€16302FF0DBBB5A8D733DAB7141C1B45ACBC8715939677F6A56850A38BD87BD59B09E80279609FF333EB9D4C061231FB26F92EEB04982A5F1D1764CAD57665422rt   Ú€0A420517E406AAC0ACDCE90FCD71487718D3B953EFD7FBEC5F7F27E28C6149999397E91E029E06457DB2D3E640668B392C2A7E737A7F0BF04436D11640FD09FDÚ€72E6882E8DB28AAD36237CD25D580DB23783961C8DC52DFA2EC138AD472A0FCEF3887CF62B623B2A87DE5C588301EA3E5FC269B373B60724F5E82A6AD147FDE7Ú€230E18E1BCC88A362FA54E4EA3902009292F7F8033624FD471B5D8ACE49D12CFABBC19963DAB8E2F1EBA00BFFB29E4D72D13F2224562F405CB80503666B25429Ú€9D45F66DE5D67E2E6DB6E93A59CE0BB48106097FF78A081DE781CDB31FCE8CCBAAEA8DD4320C4119F1E9CD437A2EAB3731FA9668AB268D871DEDA55A5473199FÚ€2FDC313095BCDD5FB3A91636F07A959C8E86B5636A1E930E8396049CB481961D365CC11453A06C719835475B12CB52FC3C383BCE35E27EF194512B71876285FAÚ€A7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1FÚ€7DB71C3DEF63212841C463E881BDCF055523BD368240E6C3143BD8DEF8B3B3223B95E0F53082FF5E412F4222537A43DF1C6D25729DDB51620A832BE6A26680A2r{  rž  rˆ   s    rJ   rŸ  zRFC7027.test_brainpoolP512r1ˆ	  r   rI   N)	rE   rF   rG   r‡  rÊ  rË  rÌ  r“  rŸ  rH   rI   rJ   r¢  r¢  (	  sE   „ ò,
ð\ ‡[�[×Ññ,
ó ð,
ð\ ‡[�[×Ññ4
ó ñ4
rI   r¢  z$w, gwx, gwy, k, msg, md, r, s, curveÚ@DC51D3866A15BACDE33D96F992FCA99DA7E6EF0934E7097559C27F1614C88A7FÚ@2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970Ú@6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7DÚ@9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1D5A6DECEs   abcÚ@CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957CÚ@86FA3BB4E26CAD5BF90B7F81899256CE7594BB1EA0C89212748BFF3B3D5B0315z	ECDSA-256Ú`0BEB646634BA87735D77AE4809A0EBEA865535DE4C1E1DCB692E84708E81A5AF62E528C38B2A81B35309668D73524D9FÚ`96281BF8DD5E0525CA049C048D345D3082968D10FEDF5C5ACA0C64E6465A97EA5CE10C9DFEC21797415710721F437922Ú`447688BA94708EB6E2E4D59F6AB6D7EDFF9301D249FE49C33096655F5D502FAD3D383B91C5E7EDAA2B714CC99D5743CAÚ`B4B74E44D71A13D568003D7489908D564C7761E229C58CBFA18950096EB7463B854D7FA992F934D927376285E63414FAÚ`FB017B914E29149432D8BAC29A514640B46F53DDAB2C69948084E2930F1C8F7E08E07C9C63F2D21A07DCB56A6AF56EB3Ú`B263A1305E057F984D38726A1B46874109F417BCA112674C528262A40A629AF1CBB9F516CE0FA7D2FF630863A00E8B9Fz	ECDSA-384Ú„0065FDA3409451DCAB0A0EAD45495112A3D813C17BFD34BDF8C1209D7DF5849120597779060A7FF9D704ADF78B570FFAD6F062E95C7E0C5D5481C5B153B48B375FA1Ú„0151518F1AF0F563517EDD5485190DF95A4BF57B5CBA4CF2A9A3F6474725A35F7AFE0A6DDEB8BEDBCD6A197E592D40188901CECD650699C9B5E456AEA5ADD19052A8Ú„006F3B142EA1BFFF7E2837AD44C9E4FF6D2D34C73184BBAD90026DD5E6E85317D9DF45CAD7803C6C20035B2F3FF63AFF4E1BA64D1C077577DA3F4286C58F0AEAE643Ú„00C1C2B305419F5A41344D7E4359933D734096F556197A9B244342B8B62F46F9373778F9DE6B6497B1EF825FF24F42F9B4A4BD7382CFC3378A540B1B7F0C1B956C2FÚ„0154FD3836AF92D0DCA57DD5341D3053988534FDE8318FC6AAAAB68E2E6F4339B19F2F281A7E0B22C269D93CF8794A9278880ED7DBB8D9362CAEACEE544320552251Ú„017705A7030290D1CEB605A9A1BB03FF9CDD521E87A696EC926C8C10C8362DF4975367101F67D1CF9BCCBF2F3D239534FA509E70AAC851AE01AAC68D62F866472660z	ECDSA-521c	           	      óX  — t        j                  t        | «      |«      }	t        j                  t        ||z   «      |«      }
|	j                  |
k(  sJ ‚|	j                  ||t        t        |d«      ¬«      }|t        |«      t        |«      fk(  sJ ‚|
j                  |||t        «      sJ ‚y )Nrt   )rj  r  ru   )
r   ri   r   r   râ   re   r   rv   rg   r   )ÚwÚgwxÚgwyru   ÚmsgÚmdr  r¡   r•   rå   ræ   ro   s               rJ   Útest_RFC4754_vectorsrÖ  Á	  s›   € ôx 
×	Ñ	¤	¨!£¨eÓ	4€BÜ	×	!Ñ	!¤)¨C°#©IÓ"6¸Ó	>€BØ×Ñ˜rÒ!Ð!Ð!Ø
�'‰'�# Ô.?Ä3ÀqÈ"Ã:ˆ'Ó
N€Cà”9˜Q“<¤¨1£Ð.Ò.Ð.Ð.à�9‰9�S˜#˜rÔ#4Ô5Ð5Ñ5rI   )tÚ
__future__r   r   r   Ú	unittest2ÚunittestÚImportErrorr_  rb  rR   rÊ  r	  Úbinasciir   r   rx   Ú	functoolsr   Ú
hypothesisr	   r
   Úhypothesis.strategiesÚ
strategiesr  Úsixr   Úkeysr   r   r   r   r   Ú r   r   r   r   r   r   r   r   r   r   r   r   r:   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   rB   r;   r<   r=   r>   Úellipticcurver?   r@   rA   Ú	ExceptionrD   r  Úargvr^   ÚTestCaser`   rË  Úparametrizer  rÖ  Úparamsr•   rˆ  ÚappendÚparamrò  rÀ  rÜ  rÞ  rÌ  rà  rÐ  rØ  rû  r  rc  rq  r¢  ry   Úsha384rK  rÖ  )r  Újs   00rJ   Ú<module>rí     s…  ðß ?Ñ ?ðÛ ó 
Û Û Û Û 
ß 'Û Ý ç &Ý "å ß *ß HÑ HÝ ÷õ ÷ EÑ Dß OÑ Oß ,÷÷ ÷ ÷ ÷ ÷ ÷ ñ ÷:ó õ !Ý Ý Ý ô	�iô 	ð €ð ˆs�x‰xÑØ#$€L�Ñ òô u:ˆH×Ñô u:ðp ‡�×ÑØ¡ s¤ÔC¡˜A³]°�!�Q’°]� ÒCóñóðð" 
€Û€EÛ>ˆØ�‰ØˆF�L‰L˜ ¨	×(8Ñ(8¸¿¹ÀSÓ(IÔJõ	
ñ ?ð ð ‡�×ÑÐ)¨6Ó2ñ4ó 3ð4ð ˆs�x‰xÑØ˜Ð(�Fà€Fð ‡�×Ñ˜ &Ó)ñ.ó *ð.ð ‡�×ÑôO6ˆh×Ñó O6ó ðO6ôd*�H×%Ñ%ô *ôZ=@ˆ(×
Ñ
ô =@ô@?=ˆ8×Ñô ?=ôDG
ˆh×Ñô G
ôT4ˆ8×Ñô 4ô s
ˆdô s
ôlU
ˆdô U
ðr ‡�×ÑØ*àˆ�‰ØNØNØNØNØØ�N‰NØNØNØØô	
ð 	ˆ�‰ð/ð/ð/ð/àØ�N‰Nð/ð/àØô!	
ð$ 	ˆ�‰ððððð Ø�N‰Nððð Øô-	
ð?7ó:ñv6ów:ñv6øðoO ò Þðüór Ds   ŒM	 ÅMÍ		MÍM