
    [Ahd                       S SK JrJrJr   S SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKJrJr  S SKrS SKJr  S SKJrJr  S SKJr  S SKJr  SSKJrJr  SS	KJrJrJr  SS
K J!r!  SSK!J"r"J#r#J$r$J%r%J&r&  SSK!J'r'J(r(J)r)  SSK!J*r*J+r+J,r,  SSK-J.r.J/r/  SSK-J0r0J1r1J2r2J3r3J4r4J5r5J6r6J7r7J8r8J9r9J:r:J;r;J<r<J=r=J>r>J?r?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJ-r-  SSKJJKrKJLrLJMrMJNrN  SSKOJPrP  SSK JQrQ  SSK JRrR  SSK JJrJ   " S S\S5      rT0 rUS\R                  ;   a  S\US'   S rW " S S\R                  5      rY\
R                  R                  S\\" S5       V Vs/ s H  n S  H  oU4PM     M     snn 5      S  5       r]/ r^\- HG  r_S! H>  r`\^R                  \
R                  " \_\`S"R                  \_R                  \`5      S#95        M@     MI     \
R                  R                  S$\^5      S% 5       reS\R                  ;   a  \4\:/r^O\-r^\
R                  R                  S&\^5      S' 5       rf\
R                  R                   " S( S)\R                  5      5       rh " S* S+\R                  5      ri " S, S-\R                  5      rj " S. S/\R                  5      rk " S0 S1\R                  5      rl " S2 S3\R                  5      rm " S4 S5\m5      rn " S6 S7\m5      ro\
R                  R                  S8\
R                  " S9S:S;S<S=\R                  S>S?\6S@S#9
\
R                  " SASBSCSDS=\R                  SESF\7SGS#9
\
R                  " SHSISJSKS=\R                  SLSM\8SNS#9
/5      SO 5       rsg! \ a    S SKr GNGf = fs  snn f )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                       \ rS rSrSrg)SubprocessErrorJ    N)__name__
__module____qualname____firstlineno____static_attributes__rF       YC:\Users\julio\Documents\inmobiliaria_backend\env\Lib\site-packages\ecdsa/test_pyecdsa.pyrD   rD   J   s    rL   rD   z--fast   max_examplesc           
      <   Sn[         R                  " U/U R                  5       -   [         R                  [         R                  S9nUR                  5       u  p4UR                  S:w  a%  [        SU< SU < SUR                  < SU< 35      eUR                  5       $ )Nopenssl)stdoutstderrr   zcmd ' z' failed: rc=z, stdout/err was )	
subprocessPopensplitPIPESTDOUTcommunicate
returncoderD   decode)cmdOPENSSLprR   ignoreds        rM   run_opensslra   U   s    G		CIIK  	A
 mmoOF||qQ\\63
 	
 ==?rL   c                      \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!S  r"S! r#S" r$S# r%S$ r&S% r'S& r(S' r)S( r*S) r+S* r,S+ r-S, r.S- r/S. r0S/ r1S0 r2S1 r3S2 r4S3 r5S4 r6S5 r7S6 r8S7 r9S8 r:S9 r;S: r<S; r=S< r>S= r?S> r@S? rAS@ rBSA rCSB rDSC rESDrFgE)FECDSAe   c                    [         R                  " 5       nUR                  5       nSnUR                  U5      nU R	                  UR                  XC5      5        U R                  [        UR
                  XCS-   5        [        R                  " UR                  5       5      nU R	                  UR                  XC5      5        g )N   blahblahs   bad)r   generateget_verifying_keysign
assertTrueverifyassertRaisesr   r   from_string	to_string)selfprivpubdatasigpub2s         rM   
test_basicECDSA.test_basicf   s    ""$$$&iio

3-.+SZZVmL''8C./rL   c                    Sn[        SS5      n[        R                  " U[        [        R
                  5      nUR                  5       n[        R                  " [        R                  R                  5       U[        R
                  [        R
                  " U5      R                  5       5      nUR                  XS9nU R                  UR                  Xa5      5        UR                  XS9nU R                  UR                  Xq5      5        UR                  U[        R
                  5      nU R                  UR                  X5      5        U R!                  Xg5        U R!                  Xh5        g )Nrf    9d0219792467d7d37b4d43298a7d0c05   )k)intr   from_secret_exponentr)   hashlibsha256rh   rA   
generate_k	generatororderdigestri   rj   rk   sign_deterministicassertEqual)	ro   rr   secexprp   rq   rz   sig1sig2sig3s	            rM   test_deterministicECDSA.test_deterministics   s   7<..Iw~~
 $$&%%'NNNN4 '')	
 yyy#

4./yyy#

4./&&tW^^<

4./$$rL   c                 l    U R                  [        [        5        U R                  [        [        5        g N)rl   	TypeErrorr   r   ro   s    rM   test_bad_usageECDSA.test_bad_usage   s"    )Z0)\2rL   c                 ,   [         n[        R                  " 5       nUR                  5       nU R	                  [        UR                  5       5      UR                  5        UR                  S5      nU R	                  [        U5      UR                  5        g )N   data)
r$   r   rg   rh   r   lenrn   verifying_key_lengthri   signature_length)ro   defaultrp   rq   rs   s        rM   test_lengths_defaultECDSA.test_lengths_default   sl    ""$$$&S]]_-w/K/KLii S7#;#;<rL   c                    Sn[         n[        R                  " XR                  5      n[        R                  " XR                  5      nU R	                  X45        [
        R                  " X25      n[
        R                  " XB5      nU R	                  [        UR                  5       5      [        UR                  5       5      5        U R	                  UR                  5       UR                  5       5        UR                  5       nUR                  5       nSn	UR                  U	5      n
UR                  U	5      nU R                  UR                  X5      5        U R                  UR                  X5      5        U R                  UR                  X5      5        U R                  UR                  X5      5        U R	                  [        UR                  5       5      [        UR                  5       5      5        g )Ns   secretr   )r$   r    randrange_from_seed__trytryagainr   r   r   r|   r   rn   to_pemrh   ri   rj   rk   )ro   seedcurvesecexp1secexp2priv1priv2pub1rt   rr   r   r   s               rM   test_serializeECDSA.test_serialize   sd   77kkJ77kkJ*//?//?EOO%&0A(B	
 	8&&(&&(zz$zz$D/0D/0D/0D/0!12GDNN<L4MNrL   c                   ^ SmU4S jn[         R                  " US9n[         R                  " US9nU R                  [        UR	                  5       R                  5       5      [        UR	                  5       R                  5       5      5        UR                  SUS9nUR                  SUS9nU R                  [        U5      [        U5      5        g )N=   all the entropy in the entire world, compressed into one linec                    > TS U  $ r   rF   numbytesss    rM   not_much_entropy.ECDSA.test_nonrandom.<locals>.not_much_entropy       Yh<rL   entropyr   )r   rg   r   r   rh   rn   ri   )ro   r   r   r   r   r   r   s         @rM   test_nonrandomECDSA.test_nonrandom   s    L	  ##,<=##,<=E++-779:E++-779:	
 zz'+;z<zz'+;z<6rL   c                    U R                  UR                  R                  UR                  R                  5        U R                  UR                  R                  R                  UR                  R                  R                  5        g r   )r   privkeysecret_multiplier
public_keyr   )ro   r   r   s      rM   assertTruePrivkeysEqualECDSA.assertTruePrivkeysEqual   s_    MM++U]]-L-L	
 	MM$$..MM$$..	
rL   c                 ~  ^ SmU4S jn[         R                  " 5       nU R                  UR                  [        R                  5        [         R                  " [
        S9nU R                  UR                  [
        R                  5        [         R                  " US9nU R                  UR                  [        R                  5        [         R                  " US9nU R                  UR                  [        R                  5        U R                  X#5        [         R                  " SS9nU R                  UR                  [        R                  5        [         R                  " SS9nU R                  X#5        [         R                  " S[
        S9nU R                  UR                  [
        R                  5        g )	Nr   c                    > TS U  $ r   rF   r   s    rM   r   5ECDSA.test_privkey_creation.<locals>.not_much_entropy   r   rL   r   r      )r      )r   r   )r   rg   r   baselenr$   r%   r   r|   )ro   r   r   r   r   s       @rM   test_privkey_creationECDSA.test_privkey_creation   s9   L	  ##%(8(89##(3(8(89##,<=(8(89##,<=(8(89$$U2//q9(8(89//q9$$U2//qI(8(89rL   c                 D   [         R                  " 5       nUR                  5       nU R                  [	        U5      [
        5        U R                  [        U5      [        R                  5        [         R                  " U5      nU R                  X5        UR                  5       nU R                  [	        U5      [
        5        U R                  UR                  S5      5        U R                  UR                  5       R                  S5      5        [         R                   " U5      nU R                  X5        UR#                  5       nU R                  [	        U5      [
        5        [         R$                  " U5      nU R                  X5        [         R                  " [&        S9nUR                  5       nU R                  [	        U5      [
        5        U R                  UR                  S5      5        U R                  UR                  5       R                  S5      5        [         R                   " U5      nU R                  X5        UR#                  5       nU R                  [	        U5      [
        5        [         R$                  " U5      nU R                  X5        g )N   -----BEGIN EC PRIVATE KEY-----   -----END EC PRIVATE KEY-----r   )r   rg   rn   r   typer   r   r$   r   rm   r   r   rj   
startswithstripendswithfrom_pemto_derfrom_derr&   ro   r   s1r   s       rM   test_privkey_stringsECDSA.test_privkey_strings   s   ##%__b;/R("2"23&&r*$$U2\\^b;/&GHI
++,KLM##B'$$U2\\^b;/##B'$$U2##(3\\^b;/&GHI
++,KLM##B'$$U2\\^b;/##B'$$U2rL   c                 (   [         R                  " [        S9nUR                  5       nU R	                  [        U5      [        5        U R                  UR                  S5      5        U R                  UR                  5       R                  S5      5        [         R                  " U5      nU R                  X5        UR                  5       nU R	                  [        U5      [        5        [         R                  " U5      nU R                  X5        g )Nr   r   r   )r   rg   r0   r   r   r   r   rj   r   r   r   r   r   r   r   r   s       rM   test_privkey_strings_brainpool$ECDSA.test_privkey_strings_brainpool  s    ##/:\\^b;/&GHI
++,KLM##B'$$U2\\^b;/##B'$$U2rL   c                 8   U R                  UR                  R                  UR                  R                  5        U R                  UR                  R                  UR                  R                  5        U R                  UR                  UR                  5        g r   )r   pubkeypointr   r   )ro   r   rt   s      rM   assertTruePubkeysEqualECDSA.assertTruePubkeysEqual  sb    **DKK,=,=>..0E0EFTZZ0rL   c                    [         R                  " 5       nUR                  5       nUR                  5       nU R	                  [        U5      [        5        U R	                  [        U5      [        R                  5        [        R                  " U5      nU R                  X$5        [         R                  " [        S9nUR                  5       nUR                  5       nU R	                  [        U5      [        5        U R	                  [        U5      [        R                  5        [        R                  " U[        S9nU R                  X$5        UR                  5       nU R	                  [        U5      [        5        [        R                  " U5      nU R                  X$5        U R!                  ["        R$                  [        R                  US-   5        [        R                  " U5      n " S S5      n " S S5      n['        SU" 5       U" 5       SS 5      n	Xl        UR                  5       n
U R!                  [*        [        R                  U
5        UR-                  5       nU R	                  [        U5      [        5        U R/                  UR1                  S	5      U5        U R/                  UR3                  5       R5                  S
5      U5        [        R6                  " U5      nU R                  X$5        g )Nr      junkc                       \ rS rSrS rSrg)0ECDSA.test_pubkey_strings.<locals>.FakeGeneratori:  c                     g)N[rF   r   s    rM   r   6ECDSA.test_pubkey_strings.<locals>.FakeGenerator.order;  s     rL   rF   N)rG   rH   rI   rJ   r   rK   rF   rL   rM   FakeGeneratorr   :  s    !rL   r   c                       \ rS rSrS rSrg).ECDSA.test_pubkey_strings.<locals>.FakeCurveFpi>  c                     [        S5      $ )NM65255345290392407050209505469627313404541085228058844382513856749047873406763)r{   r   s    rM   r_   0ECDSA.test_pubkey_strings.<locals>.FakeCurveFp.p?  s    ? rL   rF   N)rG   rH   rI   rJ   r_   rK   rF   rL   rM   FakeCurveFpr   >  s    rL   r   unknown)r   rN   r   r         s   -----BEGIN PUBLIC KEY-----s   -----END PUBLIC KEY-----)r   rg   rh   rn   r   r   r   r   r$   r   r   rm   r   r&   r   r   rl   r@   UnexpectedDERr   r   r   r   rj   r   r   r   r   )ro   r   r   r   rt   pub1_derbadpubr   r   badcurvebadderpems               rM   test_pubkey_stringsECDSA.test_pubkey_strings  s3   ##%&&(^^b;/R("?"?@''+##D/##(3&&(^^b;/R("?"?@''(;##D/;;=h5$$X.##D/|44h6H	
 &&x0	! 	!	 	 {}mo7I4
  +\-B-BFKkkmcK0'DEsK		,,-HI3O$$S)##D/rL   c                    [         R                  " [        S9nUR                  5       nUR	                  5       nU R                  [        U5      [        5        U R                  [        U5      [        R                  5        [        R                  " U[        S9nU R                  X$5        UR                  5       nU R                  [        U5      [        5        [        R                  " U5      nU R                  X$5        g Nr   )r   rg   r0   rh   rn   r   r   r   r   r   r   rm   r   r   r   )ro   r   r   r   rt   r   s         rM   test_pubkey_strings_brainpool#ECDSA.test_pubkey_strings_brainpoolS  s    ##/:&&(^^b;/R/"F"FG''/B##D/;;=h5$$X.##D/rL   c                     [         R                  " 5       nUR                  nU R                  [        5         UR                  S5        S S S 5        g ! , (       d  f       g = fNraw)r   rg   verifying_keyrl   
ValueErrorr   ro   skvks      rM   *test_vk_to_der_with_invalid_point_encoding0ECDSA.test_vk_to_der_with_invalid_point_encodinga  sA      "z*IIe +**s   A
A c                     [         R                  " 5       nU R                  [        5         UR	                  S5        S S S 5        g ! , (       d  f       g = fr   )r   rg   rl   r   r   ro   r   s     rM   *test_sk_to_der_with_invalid_point_encoding0ECDSA.test_sk_to_der_with_invalid_point_encodingh  s6      "z*IIe +**s   A
Ac                 `   [         n[        R                  " S6 S-   n[        R                  " X5      n[        R                  " SS 5      n[        R                  " X45      nU R                  [        R                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr   rN   H  ='  r   r   r      garbage    	r   r@   
encode_oidencode_sequenceencode_bitstringrl   r   r   r   ro   type_oid_dercurve_oid_derenc_type_der	point_der	to_decodes         rM   (test_vk_from_der_garbage_after_curve_oid.ECDSA.test_vk_from_der_garbage_after_curve_oidn  s    .NN78:E 	 **<G((d;	''@	s001!!), 211   ?B
B-c                 t   [         R                  " S6 n[         R                  " S6 n[         R                  " X5      n[         R                  " SS 5      n[         R                  " X45      nU R	                  [         R
                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr   rN   r   r  r  )r@   r	  r
  r  rl   r   r   r   r  s         rM   !test_vk_from_der_invalid_key_type'ECDSA.test_vk_from_der_invalid_key_typez  s    ~~y1(CD**<G((d;	''@	s001!!), 211s   	B))
B7c                 `   [         n[        R                  " S6 n[        R                  " X5      n[        R                  " SS 5      S-   n[        R                  " X45      nU R                  [        R                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr  r  r  r  r  s         rM   +test_vk_from_der_garbage_after_point_string1ECDSA.test_vk_from_der_garbage_after_point_string  s{    .(CD**<G((d;jH	''@	s001!!), 211r  c                 Z   [         n[        R                  " S6 n[        R                  " X5      n[        R                  " SS 5      n[        R                  " X45      nU R                  [        R                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr  s   r  r  s         rM   "test_vk_from_der_invalid_bitstring(ECDSA.test_vk_from_der_invalid_bitstring  sv    .(CD**<G((d;	''@	s001!!), 211   <B
B*c                 F   [         n[        R                  " S6 n[        R                  " X5      n[        R                  " SS5      n[        R                  " X45      nU R                  [        5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr  @   r   )	r   r@   r	  r
  r  rl   r   r   r   r  s         rM   0test_vk_from_der_with_invalid_length_of_encoding6ECDSA.test_vk_from_der_with_invalid_length_of_encoding  sq    .(CD**<G((q9	''@	23!!), 433s   2B
B c                 Z   [         n[        R                  " S6 n[        R                  " X5      n[        R                  " SS5      n[        R                  " X45      nU R                  [        R                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr  s0   r   r  r  s         rM   "test_vk_from_der_with_raw_encoding(ECDSA.test_vk_from_der_with_raw_encoding  sv    .(CD**<G((q9	''@	s001!!), 211r  c                 
   [         R                  " 5       nUR                  5       nSnUR                  U5      nU R	                  [        U5      [        5        U R	                  [        U5      [        R                  5        U R                  UR                  XC5      5        UR                  U[        S9nU R	                  [        U5      [        5        U R	                  [        U5      S5        U R	                  [        US   5      [        5        U R	                  [        US   5      [        5        U R	                  [        US   5      [        R                  5        U R	                  [        US   5      [        R                  5        U R                  UR                  XC[        S95        UR                  U[         S9nU R	                  [        U5      [        5        U R                  UR                  XS["        S95        g )Nr   )	sigencoderN   r   r   )	sigdecode)r   rg   rh   ri   r   r   r   r   r$   r   rj   rk   r   tupler   r   r   r   )ro   r   r   rr   rs   sig_ders         rM   test_signature_stringsECDSA.test_signature_strings  st   ##%&&(jjcK0S8#<#<=C./jj):j;cE*S1%c!f{3c!f{3SVh&6&67SVh&6&67C9JKL**T]*;g4G]KLrL   c                     SnSn[         R                  n[        [        XU5      U5      u  pEU R	                  X5        U R	                  X%5        g N   i  r    r   r   r   r   ro   rr   r   new_rnew_ss         rM   (test_sigencode_string_canonize_no_change.ECDSA.test_sigencode_string_canonize_no_change  sK    '%aE2E
 	""rL   c                     Sn[         R                  nUS-
  n[        [        XU5      U5      u  pEU R	                  X5        U R	                  X#-
  U5        g Nr0  
   r1  ro   r3  r   r   r4  r5  s         rM   test_sigencode_string_canonize$ECDSA.test_sigencode_string_canonize  sS    BJ'%aE2E
 	"E*rL   c                     SnSn[         R                  n[        [        XU5      U5      u  pEU R	                  X5        U R	                  X%5        g r/  r    r   r   r   r   r2  s         rM   )test_sigencode_strings_canonize_no_change/ECDSA.test_sigencode_strings_canonize_no_change  sK    (&qU3U
 	""rL   c                     Sn[         R                  nUS-
  n[        [        XU5      U5      u  pEU R	                  X5        U R	                  X#-
  U5        g r9  r?  r;  s         rM   test_sigencode_strings_canonize%ECDSA.test_sigencode_strings_canonize  sS    BJ(&qU3U
 	"E*rL   c                     SnSn[         R                  n[        [        XU5      U5      u  pEU R	                  X5        U R	                  X%5        g )N      r    r   r   r   r   r2  s         rM   %test_sigencode_der_canonize_no_change+ECDSA.test_sigencode_der_canonize_no_change  sK    $"1/
 	""rL   c                     Sn[         R                  nUS-
  n[        [        XU5      U5      u  pEU R	                  X5        U R	                  X#-
  U5        g )NrF     rH  r;  s         rM   test_sigencode_der_canonize!ECDSA.test_sigencode_der_canonize  sS    BJ$"1/
 	"E*rL   c                    Sn[         R                  nUS-  S-   n[        XU5      n[        XU5      nU R	                  XE5        [        [        XU5      U5      u  pgU R                  X5        U R                  X#-
  U5        g )NrF  rN   r   )r    r   r   r   assertNotEqualr   r   )ro   r3  r   r   regular_encodecanonical_encoder4  r5  s           rM   4test_sigencode_der_canonize_with_close_to_half_order:ECDSA.test_sigencode_der_canonize_with_close_to_half_order  s~    QJN&qU31!>N=$"1/
 	"E*rL   c                 ~    U R                  [        5         [        / SQS5        S S S 5        g ! , (       d  f       g = f)N)   one   twos   three   rl   r   r   r   s    rM   *test_sig_decode_strings_with_invalid_count0ECDSA.test_sig_decode_strings_with_invalid_count  s(    128$? 322   .
<c                 ~    U R                  [        5         [        SS/S5        S S S 5        g ! , (       d  f       g = f)NrV  rW  rX  rY  r   s    rM   (test_sig_decode_strings_with_wrong_r_len.ECDSA.test_sig_decode_strings_with_wrong_r_len   s,    12vv.5 322r\  c                 ~    U R                  [        5         [        SS/S5        S S S 5        g ! , (       d  f       g = f)N   s   rX  rY  r   s    rM   (test_sig_decode_strings_with_wrong_s_len.ECDSA.test_sig_decode_strings_with_wrong_s_len$  s,    12w4d; 322r\  c                     [         R                  " 5       nUR                  nU R                  [        5         UR                  S S5        S S S 5        g ! , (       d  f       g = f)Ns                                                                                                                                   )r   rg   r   rl   r   verify_digestr   s      rM   test_verify_with_too_long_input%ECDSA.test_verify_with_too_long_input(  sE      "~.T=1 /..s   A
A!c                     U R                  [        5         [        R                  " S5        S S S 5        g ! , (       d  f       g = fNr   )rl   r   r   r|   r   s    rM   4test_sk_from_secret_exponent_with_wrong_sec_exponent:ECDSA.test_sk_from_secret_exponent_with_wrong_sec_exponent/  s+    23++A. 433	   6
Ac                     U R                  [        5         [        R                  " S5        S S S 5        g ! , (       d  f       g = f)N   )rl   r   r   rm   r   s    rM   )test_sk_from_string_with_wrong_len_string/ECDSA.test_sk_from_string_with_wrong_len_string3  s+    23""7+ 433rl  c                     [         R                  " S5      n[         R                  " U5      S-   nU R                  [         R                  5         [
        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr   r  r@   encode_integerr
  rl   r   r   r   ro   ver_derr  s      rM   )test_sk_from_der_with_junk_after_sequence/ECDSA.test_sk_from_der_with_junk_after_sequence7  sU    $$Q'''0:=	s001	* 211s   A//
A=c                     [         R                  " S5      n[         R                  " U5      nU R                  [         R                  5         [
        R                  " U5        S S S 5        g ! , (       d  f       g = fri  rr  rt  s      rM   #test_sk_from_der_with_wrong_version)ECDSA.test_sk_from_der_with_wrong_version>  sP    $$Q'''0	s001	* 211s   A,,
A:c                 |   [         R                  " S5      n[         R                  " S5      n[         R                  " S6 n[         R                  " SU5      n[         R
                  " XXC5      nU R                  [         R                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr   r  r  
r@   rs  encode_octet_stringr	  encode_constructedr
  rl   r   r   r   ro   ru  privkey_derr  	const_derr  s         rM   "test_sk_from_der_invalid_const_tag(ECDSA.test_sk_from_der_invalid_const_tagE  s    $$Q'--k:	2**1m<	'')
	 s001	* 211s   B--
B;c                    [         R                  " S5      n[         R                  " S5      n[         R                  " S6 S-   n[         R                  " SU5      n[         R
                  " XXC5      nU R                  [         R                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr   r  r  r  r   r|  r  s         rM   *test_sk_from_der_garbage_after_privkey_oid0ECDSA.test_sk_from_der_garbage_after_privkey_oidQ  s    $$Q'--k:	2Z?**1m<	'')
	 s001	* 211s   B00
B>c                 V   [         R                  " S5      n[         R                  " S5      n[         R                  " S6 n[         R                  " SU5      n[         R
                  " XXC5      n[        R                  " U5      nU R                  UR                  R                  S5        g )Nr   r  r  r   rX  )r@   rs  r}  r	  r~  r
  r   r   r   r   r   )ro   ru  r  r  r  r  r   s          rM   #test_sk_from_der_with_short_privkey)ECDSA.test_sk_from_der_with_short_privkey]  s    $$Q'--k:(CD**1m<	'')
	   +55s;rL   c                 6   [         R                  " S5      n[         R                  " [         R                  " SSSSSS5      [         R                  " SSSSSSS5      5      n[         R                  " [         R                  " [         R                  " S5      [         R                  " S5      5      5      n[         R                  " XU5      nU R                  [         R                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)NrN   r   r  r  r   r  	r@   rs  r
  r	  r}  rl   r   r   r   ro   ru  algorithm_derr  r  s        rM   &test_sk_from_p8_der_with_wrong_version,ECDSA.test_sk_from_p8_der_with_wrong_versioni  s    $$Q'++NN1aeQ2NN1aeQ15
 --""1%s'>'>{'K

 ''L	s001	* 211s   *D


Dc                 0   [         R                  " S5      n[         R                  " [         R                  " SSS5      [         R                  " SSSSSSS5      5      n[         R                  " [         R                  " [         R                  " S5      [         R                  " S5      5      5      n[         R                  " XU5      nU R                  [         R                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr   rN   r   r  r  r  r  r  s        rM   (test_sk_from_p8_der_with_wrong_algorithm.ECDSA.test_sk_from_p8_der_with_wrong_algorithmy  s    $$Q'++NN1a#S^^Aq#uaA%N
 --""1%s'>'>{'K

 ''L	s001	* 211s   'D
Dc                 `   [         R                  " S5      n[         R                  " [         R                  " SSSSSS5      [         R                  " SSSSSSS5      [         R                  " S5      5      n[         R                  " [         R                  " [         R                  " S5      [         R                  " S5      5      5      n[         R                  " XU5      nU R                  [         R                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)Nr   rN   r  r  r   r   r  r  r  s        rM   6test_sk_from_p8_der_with_trailing_junk_after_algorithm<ECDSA.test_sk_from_p8_der_with_trailing_junk_after_algorithm  s    $$Q'++NN1aeQ2NN1aeQ15##G,

 --""1%s'>'>{'K

 ''L	s001	* 211s   ?D
D-c                    [         R                  " S5      n[         R                  " [         R                  " SSSSSS5      [         R                  " SSSSSSS5      5      n[         R                  " [         R                  " [         R                  " S5      [         R                  " S5      5      [         R                  " S5      -   5      n[         R                  " UUU[         R                  " S5      5      nU R                  [         R                  5         [        R                  " U5        S S S 5        g ! , (       d  f       g = f)	Nr   rN   r  r  r   r  i  r   r  r  s        rM   0test_sk_from_p8_der_with_trailing_junk_after_key6ECDSA.test_sk_from_p8_der_with_trailing_junk_after_key  s    $$Q'++NN1aeQ2NN1aeQ15
 --""1%s'>'>{'K   %&
 ''##G,	
	 s001	* 211s   D77
Ec                     [         R                  " S5      nU R                  [        5         UR	                  S5        S S S 5        g ! , (       d  f       g = f)Nr0  r!  )r   r|   rl   r   sign_digestr   s     rM   test_sign_with_too_long_hash"ECDSA.test_sign_with_too_long_hash  s8    ,,R0~.NN<( /..s   A
Ac                 8   [         R                  " [        [        R                  S9nSnUR                  U5      n[        R                  " UR                  5       R                  5       [        [        R                  S9nU R                  UR                  X25      5        [         R                  " [        S9nUR                  U[        R                  S9n[        R                  " UR                  5       R                  5       [        [        R                  S9nU R                  UR                  Xb5      5        [        R                  " UR                  5       R                  5       [        S9nU R                  UR                  X2[        R                  S95        g )Nr   hashfuncs   security level is 128 bitsr   r  )r   rg   r&   r}   r~   ri   r   rm   rh   rn   rj   rk   )	ro   r   rr   rs   r   sk2r   vk2vk3s	            rM   test_hashfuncECDSA.test_hashfunc  s"     x'..I,ggdm%%  ",,.^^

 			#,-!!1xxw~~x6&&!!#--/^^

 	

4./&&  ",,.h
 	

3w~~
FGrL   c                 4   [         n[        R                  " US9nUR                  5       nSnUR	                  U5      n[
        R                  " XTU5      nU Ho  nU R                  UR                  XT5      5        U R                  UR                  UR                  5        U R                  UR                  UR                  5        Mq     U R                  UR                  R                  U Vs/ s H  owR                  R                  PM     sn5        g s  snf )Nr   rf   )r*   r   rg   rh   ri   r   from_public_key_recoveryrj   rk   r   r   default_hashfuncassertInr   r   ro   r   r   r   rr   	signaturerecovered_vksrecovered_vks           rM   test_public_key_recoveryECDSA.test_public_key_recovery  s      u-!!# GGDM	 %==U

 *LOOL//	@A RXX|'9'9:##\%B%B * 	IIOO;HI=<  &&=I	
Is   .D
c                 x   [         n[        R                  " U[        R                  S9nUR                  5       nSnUR                  U5      n[        R                  " UUU[        R                  SS9nU Hs  nU R                  UR                  XT5      5        U R                  UR                  UR                  5        U R                  [        R                  UR                  5        Mu     U R                  UR                  R                   U Vs/ s H  owR                  R                   PM     sn5        g s  snf )Nr  rf   T)r  allow_truncate)r*   r   rg   r}   r~   rh   ri   r   r  rj   rk   r   r   r  r  r   r   r  s           rM   )test_public_key_recovery_with_custom_hash/ECDSA.test_public_key_recovery_with_custom_hash  s      uw~~F!!# GGDM	 %==^^
 *LOOL//	@A RXX|'9'9:W^^\-J-JK * 	IIOO;HI=<  &&=I	
Is   D7
c                    [         R                  " S5      nUR                  nSnU R                  UR	                  5       U5        U R                  UR	                  S5      U5        U R                  UR	                  S5      SU-   5        U R                  UR	                  S5      SUS S -   5        U R                  UR	                  S	5      S
U-   5        g )Nr   0   dSKx !ȠcĄ)z#OHQ*r   uncompressed   
compressed      hybrid   )r   r|   r   r   rn   )ro   r   r   exps       rM   test_encodingECDSA.test_encoding  s    ,,Y72 	
 	-e,c2n5w}El3Ws3Bx5GHh/3?rL   c                    [         R                  " S5      nUR                  nSn[        R                  " U5      nU R                  UR                  R                  UR                  R                  5        [        R                  " SU-   5      nU R                  UR                  R                  UR                  R                  5        [        R                  " SUS S -   5      nU R                  UR                  R                  UR                  R                  5        [        R                  " SU-   5      nU R                  UR                  R                  UR                  R                  5        g )Nr   r  r  r  r  r  )r   r|   r   r   rm   r   r   r   )ro   r   r   encfrom_rawfrom_uncompressedfrom_compresseds          rM   test_decodingECDSA.test_decoding!  s   ,,Y72 	  ++C0..		@(44Ws]C*1177I&227S"X3EF//55ryyG(44Ws]C*1177IrL   c                     Sn[         R                  " USS9n[        R                  " S5      nU R	                  X#R
                  5        g )N1   dSKx !ȠcĄ)z#OHQ*r  valid_encodingsr   )r   rm   r   r|   r   r   )ro   r  r   r   s       rM   )test_uncompressed_decoding_as_only_alowed/ECDSA.test_uncompressed_decoding_as_only_alowed7  sE    2 	 %%c;LM,,Y7--.rL   c                     SnU R                  [        5       n[        R                  " USS9  S S S 5        U R	                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr  r  r  r  rl   r   r   rm   r  str	exceptionro   r  r  s      rM   %test_raw_decoding_with_blocked_format+ECDSA.test_raw_decoding_with_blocked_formatC  sV    2 	
 23s$$S+F 4 	hCMM 23 43   A
A*c                     U R                  [        5       n[        R                  " SSS9  S S S 5        U R	                  S[        WR                  5      5        g ! , (       d  f       N4= f)NrL   )r   foobarr  zOnly uncompressed, compressed)rl   r   r   rm   r  r  r  )ro   es     rM   !test_decoding_with_unknown_format'ECDSA.test_decoding_with_unknown_formatN  sK    z*a$$S:KL + 	5s1;;7GH +*s   A
A(c                     SnU R                  [        5       n[        R                  " USS9  S S S 5        U R	                  S[        WR                  5      5        g ! , (       d  f       N4= f)Nr  r  r  Invalid X9.62 encodingr  r  s      rM   .test_uncompressed_decoding_with_blocked_format4ECDSA.test_uncompressed_decoding_with_blocked_formatT  sW    2 	 23s$$S+F 4 	.CMM0BC 43r  c                     SnU R                  [        5       n[        R                  " USS9  S S S 5        U R	                  S[        WR                  5      5        g ! , (       d  f       N4= f)Ns1   dSKx !ȠcĄ)z#OHQ*r  r  r  r  r  s      rM   (test_hybrid_decoding_with_blocked_format.ECDSA.test_hybrid_decoding_with_blocked_format`  sX    2 	 23s$$S:KL 4 	.CMM0BC 43r  c                     [         R                  " S5      nUR                  nUR                  S5      nU R	                  US S S5        SUSS  -   n[
        R                  " USSS9nU R	                  X$5        g )	Nr   r  r   r     r  F)r  validate_point)r   r|   r   rn   r   r   rm   ro   r   r   r  bs        rM   Atest_hybrid_decoding_with_inconsistent_encoding_and_no_validationGECDSA.test_hybrid_decoding_with_inconsistent_encoding_and_no_validationl  sz     ,,Y7ll8$Ra'*AB$$U
 	rL   c                     SS S nU R                  [        5       n[        R                  " USS9  S S S 5        U R	                  S[        WR                  5      5        g ! , (       d  f       N4= f)Ns1   dSKx !ȠcĄ)z#OHQ*   )r  r   r  z(hybrid, raw)r  r  s      rM   ,test_compressed_decoding_with_blocked_format2ECDSA.test_compressed_decoding_with_blocked_format|  s`    2 2 23s$$S:KL 4 	os3=='9: 43s   A
A-c                     SnU R                  [        5         [        R                  " SU-   5        S S S 5        g ! , (       d  f       g = f)Nr  r  rl   r   r   rm   ro   r  s     rM   )test_decoding_with_malformed_uncompressed/ECDSA.test_decoding_with_malformed_uncompressed  ;    2 	 23$$Ws]3 433	   ;
A	c                     SnU R                  [        5         [        R                  " SUS S -   5        S S S 5        g ! , (       d  f       g = f)Nr  rn  r  r  r  s     rM   'test_decoding_with_malformed_compressed-ECDSA.test_decoding_with_malformed_compressed  sB    2 	 23$$Ws3Bx%78 433	   >
Ac                     SnU R                  [        5         [        R                  " SU-   5        S S S 5        g ! , (       d  f       g = f)Nr  r  r  r  s     rM   &test_decoding_with_inconsistent_hybrid,ECDSA.test_decoding_with_inconsistent_hybrid  r  r  c                 ,   [         R                  " S5      nUR                  nUR                  S5      nU R	                  US S S5        SUSS  -   nU R                  [        5         [        R                  " USS9nS S S 5        g ! , (       d  f       g = f)Ni[r  r   r  r  r  r  )	r   r|   r   rn   r   rl   r   r   rm   r  s        rM   0test_decoding_with_inconsistent_hybrid_odd_point6ECDSA.test_decoding_with_inconsistent_hybrid_odd_point  s~    ,,Y7ll8$Ra'*AB23((kJA 433s   &B
Bc                     SnU R                  [        5         [        R                  " US S S-   5        S S S 5        g ! , (       d  f       g = f)Nr  /       r  r  s     rM   %test_decoding_with_point_not_on_curve+ECDSA.test_decoding_with_point_not_on_curve  sB    2 	 23$$S"X%78 433r  c                     U R                  [        5         [        R                  " S5        S S S 5        g ! , (       d  f       g = f)Nr  r  r   s    rM   $test_decoding_with_point_at_infinity*ECDSA.test_decoding_with_point_at_infinity  s+    23$$W- 433rl  c                 "   [        [        R                  R                  5       [        R                  R                  5       S-   5      nU R	                  [
        5         [        R                  " SU-   5        S S S 5        g ! , (       d  f       g = f)Nr   r  )r   r$   r   r_   rl   r   r   rm   r  s     rM   test_not_lying_on_curveECDSA.test_not_lying_on_curve  sZ    x~~//18>>3C3C3E3IJ23$$Ws]3 433s   B  
Bc                     [        S[        R                  [        R                  S5      nSUl        SUl        U R                  [        5         [        R                  " SU5        S S S 5        g ! , (       d  f       g = f)Ntestr   rN   ry                          
r   rB   	curve_192generator_192r   r   rl   r   r   rm   ro   r   s     rM   9test_from_string_with_invalid_curve_too_short_ver_key_len?ECDSA.test_from_string_with_invalid_curve_too_short_ver_key_len  X     feoou/B/BFK%'"23$$\59 433   A//
A=c                     [        S[        R                  [        R                  S5      nSUl        SUl        U R                  [        5         [        R                  " SU5        S S S 5        g ! , (       d  f       g = f)Nr  r  ry   r  r  r  s     rM   8test_from_string_with_invalid_curve_too_long_ver_key_len>ECDSA.test_from_string_with_invalid_curve_too_long_ver_key_len  r  r  rF   N)GrG   rH   rI   rJ   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r"  r%  r,  r6  r<  r@  rC  rI  rM  rS  rZ  r^  rb  rf  rj  ro  rv  ry  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  rK   rF   rL   rM   rc   rc   e   sZ   0%83
=O.7*
:43B31
20h0
------M.
#
+
#
+
#
++"@6<2/,++
+
+
<+ ++"+,)H2
B!
F@J,
/	4I
D
D  
;494	K9.
4	:	:rL   rc   zval,even   )TFc                     [        U [        R                  5      nU(       a  SU-   nOSU-   n [        R                  " U5      n[        U[        5      (       d   eg ! [         a     g f = f)Nr     )r   r$   r   r   rm   
isinstancer   )valevenr  r   s       rM   *test_VerifyingKey_decode_with_small_valuesr     sc     3
/Cmm%%c*"l++++ s   -A 
A)(A))r   r  r  r  z{0}-{1})idzcurve,encodingc                     [         R                  " U S9nUR                  nUR                  U5      n[        R
                  " X@S9nUR                  R                  UR                  R                  :X  d   eg r   )r   rg   r   rn   r   rm   r   r   )r   encodingr   r   encodedfrom_encs         rM   test_VerifyingKey_encode_decoder&    s[    			5	)B			Bll8$G''=H99??hoo33333rL   r   c                    [         R                  " U S9nUR                  5       n[        R                  " UR                  5       U 5      nUR                  5       UR                  5       :X  d   e[        UR                  5       5      U R                  :X  d   eUR                  S5      n[        U5      U R                  :X  d   eg )Nr   r   )
r   rg   rh   r   rm   rn   r   r   ri   r   )r   rp   r   rt   rs   s        rM   test_lengthsr(    s    U+D!!#D##DNN$4e<D>>t~~////t~~ E$>$>>>>
))G
Cs8u-----rL   c                      \ rS rSr\" S \" S5      R                  S5       5       5      rS r\	R                  R                  \	R                  R                  S\;  SS9S	 5       5       r\	R                  R                  \	R                  R                  S
\;  SS9S 5       5       r\	R                  R                  \	R                  R                  S\;  SS9S 5       5       r\	R                  R                  \	R                  R                  S\;  SS9S 5       5       r\	R                  R                  \	R                  R                  S\;  SS9S 5       5       r\	R                  R                  \	R                  R                  S\;  SS9S 5       5       r\	R                  R                  \	R                  R                  S\;  SS9S 5       5       r\	R                  R                  \	R                  R                  S\;  SS9S 5       5       r\	R                  R                  \	R                  R                  S\;  SS9S 5       5       r\	R                  R                  \	R                  R                  S\;  SS9S 5       5       r\	R                  R                  \	R                  R                  S\;  S S9S! 5       5       r\	R                  R                  \	R                  R                  S"\;  S#S9S$ 5       5       r\	R                  R                  \	R                  R                  S%\;  S&S9S' 5       5       r\	R                  R                  \	R                  R                  S(\;  S)S9S* 5       5       r\	R                  R                  \	R                  R                  S+\;  S,S9S- 5       5       r\	R                  R                  \	R                  R                  S.\;  S/S9S0 5       5       r\	R                  R                  \	R                  R                  S1\;  S2S9S3 5       5       r\	R                  R                  \	R                  R                  S4\;  S5S9S6 5       5       r\	R                  R                  \	R                  R                  S7\;  S8S9S9 5       5       r\	R                  R                  \	R                  R                  S:\;  S;S9S< 5       5       r \	R                  R                  \	R                  R                  S=\;  S>S9S? 5       5       r!\	R                  R                  \	R                  R                  S@\;  SAS9SB 5       5       r"\	R                  R                  \	R                  R                  SC\;  SDS9SE 5       5       r#\	R                  R                  \	R                  R                  SF\;  SGS9SH 5       5       r$\	R                  R                  \	R                  R                  SI\;  SJS9SK 5       5       r%\	R                  R                  \	R                  R                  SL\;  SMS9SN 5       5       r&\	R                  R                  \	R                  R                  SO\;  SPS9SQ 5       5       r'SSR jr(\	R                  R                  \	R                  R                  S\;  SS9SS 5       5       r)\	R                  R                  \	R                  R                  S
\;  SS9ST 5       5       r*\	R                  R                  \	R                  R                  S\;  SS9SU 5       5       r+\	R                  R                  \	R                  R                  S\;  SS9SV 5       5       r,\	R                  R                  \	R                  R                  S\;  SS9SW 5       5       r-\	R                  R                  \	R                  R                  S\;  SS9SX 5       5       r.\	R                  R                  \	R                  R                  S\;  SS9SY 5       5       r/\	R                  R                  \	R                  R                  S\;  SS9SZ 5       5       r0\	R                  R                  \	R                  R                  S\;  SS9S[ 5       5       r1\	R                  R                  \	R                  R                  S\;  SS9S\ 5       5       r2\	R                  R                  \	R                  R                  S\;  S S9S] 5       5       r3\	R                  R                  \	R                  R                  S"\;  S#S9S^ 5       5       r4\	R                  R                  \	R                  R                  S%\;  S&S9S_ 5       5       r5\	R                  R                  \	R                  R                  S(\;  S)S9S` 5       5       r6\	R                  R                  \	R                  R                  S+\;  S,S9Sa 5       5       r7\	R                  R                  \	R                  R                  S.\;  S/S9Sb 5       5       r8\	R                  R                  \	R                  R                  S1\;  S2S9Sc 5       5       r9\	R                  R                  \	R                  R                  S4\;  S5S9Sd 5       5       r:\	R                  R                  \	R                  R                  S7\;  S8S9Se 5       5       r;\	R                  R                  \	R                  R                  S:\;  S;S9Sf 5       5       r<\	R                  R                  \	R                  R                  S=\;  S>S9Sg 5       5       r=\	R                  R                  \	R                  R                  S@\;  SAS9Sh 5       5       r>\	R                  R                  \	R                  R                  SC\;  SDS9Si 5       5       r?\	R                  R                  \	R                  R                  SF\;  SGS9Sj 5       5       r@\	R                  R                  \	R                  R                  SI\;  SJS9Sk 5       5       rA\	R                  R                  \	R                  R                  SL\;  SMS9Sl 5       5       rB\	R                  R                  \	R                  R                  SO\;  SPS9Sm 5       5       rCSSn jrD\" 5       rE So\" Sp5      ;   a  \" Sq Sr 5       5      rESs rG\	R                  R                  \	R                  R                  St\E;  SuS9Sv 5       5       rH\	R                  R                  \	R                  R                  Sw\E;  SxS9Sy 5       5       rISz rJ\	R                  R                  \	R                  R                  St\E;  SuS9S{ 5       5       rK\	R                  R                  \	R                  R                  Sw\E;  SxS9S| 5       5       rLS}rMg~! \F a     GNf = f)OpenSSLi  c              #   f   #    U  H'  nUR                  S 5      S   R                  5       v   M)     g7f:r   NrW   r   .0cs     rM   	<genexpr>OpenSSL.<genexpr>(  /      #@A 	
Q@   /1ecparam -list_curves
c                     [        S5      nUR                  5       S   R                  S5      nU/ SQ:  a  SR                  U5      $ SR                  U5      $ )Nversionr   .)10r<  z-{0}z-ecdsa-with-{0})ra   rW   format)ro   	hash_namevvss       rM   get_openssl_messagedigest_arg%OpenSSL.get_openssl_messagedigest_arg-  sP    	" WWYq\$ ==++$++I66rL   	secp112r1z)system openssl does not support secp112r1reasonc                 ,    U R                  [        5      $ r   )do_test_from_opensslr    r   s    rM   test_from_openssl_secp112r1#OpenSSL.test_from_openssl_secp112r1;       ((33rL   	secp112r2z)system openssl does not support secp112r2c                 ,    U R                  [        5      $ r   )rG  r!   r   s    rM   test_from_openssl_secp112r2#OpenSSL.test_from_openssl_secp112r2C  rJ  rL   	secp128r1z)system openssl does not support secp128r1c                 ,    U R                  [        5      $ r   )rG  r"   r   s    rM   test_from_openssl_secp128r1#OpenSSL.test_from_openssl_secp128r1K  rJ  rL   	secp160r1z)system openssl does not support secp160r1c                 ,    U R                  [        5      $ r   )rG  r#   r   s    rM   test_from_openssl_secp160r1#OpenSSL.test_from_openssl_secp160r1S  rJ  rL   
prime192v1*system openssl does not support prime192v1c                 ,    U R                  [        5      $ r   rG  r$   r   s    rM   test_from_openssl_nist192p"OpenSSL.test_from_openssl_nist192p[       ((22rL   c                 .    U R                  [        S5      $ NSHA256rZ  r   s    rM   !test_from_openssl_nist192p_sha256)OpenSSL.test_from_openssl_nist192p_sha256c       ((8<<rL   	secp224r1z)system openssl does not support secp224r1c                 ,    U R                  [        5      $ r   )rG  r%   r   s    rM   test_from_openssl_nist224p"OpenSSL.test_from_openssl_nist224pk  r]  rL   
prime256v1z*system openssl does not support prime256v1c                 ,    U R                  [        5      $ r   rG  r&   r   s    rM   test_from_openssl_nist256p"OpenSSL.test_from_openssl_nist256ps  r]  rL   c                 .    U R                  [        S5      $ NSHA384rj  r   s    rM   !test_from_openssl_nist256p_sha384)OpenSSL.test_from_openssl_nist256p_sha384{  rc  rL   c                 .    U R                  [        S5      $ NSHA512rj  r   s    rM   !test_from_openssl_nist256p_sha512)OpenSSL.test_from_openssl_nist256p_sha512  rc  rL   	secp384r1z)system openssl does not support secp384r1c                 ,    U R                  [        5      $ r   )rG  r'   r   s    rM   test_from_openssl_nist384p"OpenSSL.test_from_openssl_nist384p  r]  rL   	secp521r1z)system openssl does not support secp521r1c                 ,    U R                  [        5      $ r   )rG  r(   r   s    rM   test_from_openssl_nist521p"OpenSSL.test_from_openssl_nist521p  r]  rL   	secp256k1z)system openssl does not support secp256k1c                 ,    U R                  [        5      $ r   )rG  r)   r   s    rM   test_from_openssl_secp256k1#OpenSSL.test_from_openssl_secp256k1  rJ  rL   brainpoolP160r1z/system openssl does not support brainpoolP160r1c                 ,    U R                  [        5      $ r   )rG  r*   r   s    rM   !test_from_openssl_brainpoolp160r1)OpenSSL.test_from_openssl_brainpoolp160r1       ((99rL   brainpoolP192r1z/system openssl does not support brainpoolP192r1c                 ,    U R                  [        5      $ r   )rG  r+   r   s    rM   !test_from_openssl_brainpoolp192r1)OpenSSL.test_from_openssl_brainpoolp192r1  r  rL   brainpoolP224r1z/system openssl does not support brainpoolP224r1c                 ,    U R                  [        5      $ r   )rG  r,   r   s    rM   !test_from_openssl_brainpoolp224r1)OpenSSL.test_from_openssl_brainpoolp224r1  r  rL   brainpoolP256r1z/system openssl does not support brainpoolP256r1c                 ,    U R                  [        5      $ r   )rG  r-   r   s    rM   !test_from_openssl_brainpoolp256r1)OpenSSL.test_from_openssl_brainpoolp256r1  r  rL   brainpoolP320r1z/system openssl does not support brainpoolP320r1c                 ,    U R                  [        5      $ r   )rG  r.   r   s    rM   !test_from_openssl_brainpoolp320r1)OpenSSL.test_from_openssl_brainpoolp320r1  r  rL   brainpoolP384r1z/system openssl does not support brainpoolP384r1c                 ,    U R                  [        5      $ r   )rG  r/   r   s    rM   !test_from_openssl_brainpoolp384r1)OpenSSL.test_from_openssl_brainpoolp384r1  r  rL   brainpoolP512r1z/system openssl does not support brainpoolP512r1c                 ,    U R                  [        5      $ r   )rG  r0   r   s    rM   !test_from_openssl_brainpoolp512r1)OpenSSL.test_from_openssl_brainpoolp512r1  r  rL   brainpoolP160t1z/system openssl does not support brainpoolP160t1c                 ,    U R                  [        5      $ r   )rG  r1   r   s    rM   !test_from_openssl_brainpoolp160t1)OpenSSL.test_from_openssl_brainpoolp160t1  r  rL   brainpoolP192t1z/system openssl does not support brainpoolP192t1c                 ,    U R                  [        5      $ r   )rG  r2   r   s    rM   !test_from_openssl_brainpoolp192t1)OpenSSL.test_from_openssl_brainpoolp192t1  r  rL   brainpoolP224t1z/system openssl does not support brainpoolP224t1c                 ,    U R                  [        5      $ r   )rG  r3   r   s    rM   !test_from_openssl_brainpoolp224t1)OpenSSL.test_from_openssl_brainpoolp224t1  r  rL   brainpoolP256t1z/system openssl does not support brainpoolP256t1c                 ,    U R                  [        5      $ r   )rG  r4   r   s    rM   !test_from_openssl_brainpoolp256t1)OpenSSL.test_from_openssl_brainpoolp256t1  r  rL   brainpoolP320t1z/system openssl does not support brainpoolP320t1c                 ,    U R                  [        5      $ r   )rG  r5   r   s    rM   !test_from_openssl_brainpoolp320t1)OpenSSL.test_from_openssl_brainpoolp320t1  r  rL   brainpoolP384t1z/system openssl does not support brainpoolP384t1c                 ,    U R                  [        5      $ r   )rG  r6   r   s    rM   !test_from_openssl_brainpoolp384t1)OpenSSL.test_from_openssl_brainpoolp384t1  r  rL   brainpoolP512t1z/system openssl does not support brainpoolP512t1c                 ,    U R                  [        5      $ r   )rG  r7   r   s    rM   !test_from_openssl_brainpoolp512t1)OpenSSL.test_from_openssl_brainpoolp512t1  r  rL   c           
      v   UR                   nU(       d   eU R                  U5      n[        R                  R	                  S5      (       a  [
        R                  " S5        [        R                  " S5        [        SU-  5        [        S5        Sn[        SS5       nUR                  U5        S S S 5        [        SU-  5        [        SU-  5        [        S	S
5       nUR                  5       nS S S 5        [        R                  " W5      n[        SS
5       nUR                  5       n	S S S 5        U R                  UR                  W	U[!        ["        R$                  U5      [&        S95        [        S5       nUR                  5       n
S S S 5        [(        R                  " W
5      nUR+                  U[!        ["        R$                  U5      S9nU R                  UR                  X[!        ["        R$                  U5      S95        [        S5        [        SS
5       nUR                  5       nS S S 5        [(        R                  " W5      nU R-                  X5        g ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNa= f! , (       d  f       GN= f! , (       d  f       N~= f)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)r  r)  t/privkey.pemr  zJpkcs8 -topk8 -nocrypt -in t/privkey.pem -outform pem -out t/privkey-p8.pemt/privkey-p8.pem)openssl_namerA  ospathisdirshutilrmtreemkdirra   openwritereadr   r   rj   rk   r   r}   newr   r   ri   r   )ro   r   r>  	curvenamemdargrr   r  
pubkey_pemr   r+  fpr   rs   privkey_p8_pem
sk_from_p8s                  rM   rG  OpenSSL.do_test_from_openssl  s   &&	y 229=77==MM#
AIMNDE,%GGDM &DuL	
 	K	
 .$'1J ("":.,%ffhG &II i8'	  	
 /"aB #  $ggdWW[[)%DgEIIc''++y*IIJ	
 	C	
 $d+qVVXN ,((8
(M &% (' &% #" ,+s<   I" I4J<J!J*"
I14
J
J
J'*
J8c                 .    U R                  [        5        g r   )do_test_to_opensslr    r   s    rM   test_to_openssl_secp112r1!OpenSSL.test_to_openssl_secp112r1G       		*rL   c                 .    U R                  [        5        g r   )r  r!   r   s    rM   test_to_openssl_secp112r2!OpenSSL.test_to_openssl_secp112r2O  r  rL   c                 .    U R                  [        5        g r   )r  r"   r   s    rM   test_to_openssl_secp128r1!OpenSSL.test_to_openssl_secp128r1W  r  rL   c                 .    U R                  [        5        g r   )r  r#   r   s    rM   test_to_openssl_secp160r1!OpenSSL.test_to_openssl_secp160r1_  r  rL   c                 .    U R                  [        5        g r   r  r$   r   s    rM   test_to_openssl_nist192p OpenSSL.test_to_openssl_nist192pg       	)rL   c                 0    U R                  [        S5        g r_  r  r   s    rM   test_to_openssl_nist192p_sha256'OpenSSL.test_to_openssl_nist192p_sha256o       	(3rL   c                 .    U R                  [        5        g r   )r  r%   r   s    rM   test_to_openssl_nist224p OpenSSL.test_to_openssl_nist224pw  r  rL   c                 .    U R                  [        5        g r   r  r&   r   s    rM   test_to_openssl_nist256p OpenSSL.test_to_openssl_nist256p  r  rL   c                 0    U R                  [        S5        g rn  r  r   s    rM   test_to_openssl_nist256p_sha384'OpenSSL.test_to_openssl_nist256p_sha384  r  rL   c                 0    U R                  [        S5        g rs  r  r   s    rM   test_to_openssl_nist256p_sha512'OpenSSL.test_to_openssl_nist256p_sha512  r  rL   c                 .    U R                  [        5        g r   )r  r'   r   s    rM   test_to_openssl_nist384p OpenSSL.test_to_openssl_nist384p  r  rL   c                 .    U R                  [        5        g r   )r  r(   r   s    rM   test_to_openssl_nist521p OpenSSL.test_to_openssl_nist521p  r  rL   c                 .    U R                  [        5        g r   )r  r)   r   s    rM   test_to_openssl_secp256k1!OpenSSL.test_to_openssl_secp256k1  r  rL   c                 .    U R                  [        5        g r   )r  r*   r   s    rM   test_to_openssl_brainpoolp160r1'OpenSSL.test_to_openssl_brainpoolp160r1       	0rL   c                 .    U R                  [        5        g r   )r  r+   r   s    rM   test_to_openssl_brainpoolp192r1'OpenSSL.test_to_openssl_brainpoolp192r1  r  rL   c                 .    U R                  [        5        g r   )r  r,   r   s    rM   test_to_openssl_brainpoolp224r1'OpenSSL.test_to_openssl_brainpoolp224r1  r  rL   c                 .    U R                  [        5        g r   )r  r-   r   s    rM   test_to_openssl_brainpoolp256r1'OpenSSL.test_to_openssl_brainpoolp256r1  r  rL   c                 .    U R                  [        5        g r   )r  r.   r   s    rM   test_to_openssl_brainpoolp320r1'OpenSSL.test_to_openssl_brainpoolp320r1  r  rL   c                 .    U R                  [        5        g r   )r  r/   r   s    rM   test_to_openssl_brainpoolp384r1'OpenSSL.test_to_openssl_brainpoolp384r1  r  rL   c                 .    U R                  [        5        g r   )r  r0   r   s    rM   test_to_openssl_brainpoolp512r1'OpenSSL.test_to_openssl_brainpoolp512r1  r  rL   c                 .    U R                  [        5        g r   )r  r1   r   s    rM   test_to_openssl_brainpoolp160t1'OpenSSL.test_to_openssl_brainpoolp160t1  r  rL   c                 .    U R                  [        5        g r   )r  r2   r   s    rM   test_to_openssl_brainpoolp192t1'OpenSSL.test_to_openssl_brainpoolp192t1  r  rL   c                 .    U R                  [        5        g r   )r  r3   r   s    rM   test_to_openssl_brainpoolp224t1'OpenSSL.test_to_openssl_brainpoolp224t1  r  rL   c                 .    U R                  [        5        g r   )r  r4   r   s    rM   test_to_openssl_brainpoolp256t1'OpenSSL.test_to_openssl_brainpoolp256t1  r  rL   c                 .    U R                  [        5        g r   )r  r5   r   s    rM   test_to_openssl_brainpoolp320t1'OpenSSL.test_to_openssl_brainpoolp320t1  r  rL   c                 .    U R                  [        5        g r   )r  r6   r   s    rM   test_to_openssl_brainpoolp384t1'OpenSSL.test_to_openssl_brainpoolp384t1  r  rL   c                 .    U R                  [        5        g r   )r  r7   r   s    rM   test_to_openssl_brainpoolp512t1'OpenSSL.test_to_openssl_brainpoolp512t1  r  rL   c                 d   UR                   nU(       d   eU R                  U5      n[        R                  R	                  S5      (       a  [
        R                  " S5        [        R                  " S5        [        R                  " US9nUR                  5       nSn[        SS5       nUR                  UR                  5       5        S S S 5        [        SS5       nUR                  UR                  5       5        S S S 5        UR                  U[!        ["        R$                  U5      [&        S9n	[        SS5       nUR                  U	5        S S S 5        [        S	S5       nUR                  U5        S S S 5        [        S
S5       nUR                  US-   5        S S S 5        U R)                  [*        [,        SU-  5        [-        SU-  5        [        SS5       nUR                  UR                  5       5        S S S 5        [-        SU-  5        [-        SU-  5        [        SS5       nUR                  UR                  SS95        S S S 5        [-        SU-  5        [-        SU-  5        [        SS5       nUR                  UR                  SS95        S S S 5        [-        SU-  5        [-        SU-  5        [        SS5       nUR                  UR                  SSS95        S S S 5        [-        SU-  5        [-        SU-  5        g ! , (       d  f       GNP= f! , (       d  f       GN.= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       GNt= f! , (       d  f       GN7= f! , (       d  f       N= f! , (       d  f       N= f)Nr  r   r   t/pubkey.derr  r  )r  r(  r  r  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=  r4  zCdgst %s -sign t/privkey-p8-explicit.pem -out t/data.sig3 t/data.txt)r  rA  r  r  r  r  r  r  r   rg   rh   r  r  r   r   ri   r   r}   r  r   rl   rD   ra   )
ro   r   r>  r  r  r   r   rr   r  r+  s
             rM   r  OpenSSL.do_test_to_openssl  s
   &&	y 229=77==MM#
  u-!!#.$'1GGBIIK  (.$'1GGBIIK  (''W[[)4#  
 ,%GGG &,%GGDM &/4(AGGD:%& ) 	[	
 	X	

 /4(AGGBIIK  )EM	
 	L	

 *D1QGGBII
ICD 2N	
 	L	

 $d+qGGBIIWI-. ,H	
 	L	

 -t4GG		J	O 5 	Q	
 	L	
I (''' &%%%(( )( 21 ,+ 54sl   ) L L$>L6$M
M M,/M>>N N!
L!$
L36
M
M
M),
M;>
N
N!
N/z-rawinzpkeyutl -helpc              #   d   #    U  H&  nU[        S 5      ;   d  M  UR                  5       v   M(     g7f)zlist -public-key-methodsN)ra   lowerr/  s     rM   r2  r3  w  s/      *-A$>?? 		-s   00)ED25519ED448c                 .   [         R                  R                  S5      (       a  [        R                  " S5        [         R
                  " S5        [        R                  " US9nUR                  5       nSn[        SS5       nUR                  UR                  5       5        S S S 5        [        SS5       nUR                  UR                  5       5        S S S 5        UR                  U5      n[        SS5       nUR                  U5        S S S 5        [        SS5       nUR                  U5        S S S 5        [        S	S5       nUR                  US
-   5        S S S 5        U R                  [        5         [!        S5        S S S 5        [!        S5        [        R                  " S5        g ! , (       d  f       GN= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f)Nr  r   r   r0  r  r  r  r  r1  r2  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  r  r  r  r  r   rg   rh   r  r  r   r   ri   rl   rD   ra   )ro   r   r   r   rr   r  rs   s          rM   do_eddsa_test_to_openssl OpenSSL.do_eddsa_test_to_openssl  sm   77==MM#
  u-!!#.$'1GGBIIK  (.$'1GGBIIK  ( ggdm,%GGCL &,%GGDM &/4(AGGD:%& ) /8 0
 	1	

 	c1 ('''
 &%%%(( 0/sH    F07 G<G"G$G5:H0
F?
G
G!$
G25
H
Hed25519z4system openssl does not support signing with Ed25519c                 ,    U R                  [        5      $ r   )r<  r8   r   s    rM   test_to_openssl_ed25519OpenSSL.test_to_openssl_ed25519  s     ,,W55rL   ed448z2system openssl does not support signing with Ed448c                 ,    U R                  [        5      $ r   )r<  r9   r   s    rM   test_to_openssl_ed448OpenSSL.test_to_openssl_ed448  s     ,,U33rL   c                    UR                   n[        R                  R                  S5      (       a  [        R
                  " S5        [        R                  " S5        Sn[        SR                  U5      5        [        S5        [        SS5       nUR                  U5        S S S 5        [        S5        [        SS	5       nUR                  5       nS S S 5        [        S
S	5       n[        R                  " UR                  5       5      nS S S 5        U R                  WR                  U5        UR!                  WU5        [        R
                  " S5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nu= f)Nr  r   z6genpkey -algorithm {0} -outform PEM -out t/privkey.pemz=pkey -outform PEM -pubout -in t/privkey.pem -out t/pubkey.pemr  r  zHpkeyutl -sign -inkey t/privkey.pem -rawin -in t/data.txt -out t/data.sigr  r  r  )namer  r  r  r  r  r  ra   r=  r  r  r  r   r   assertIsr   rk   )ro   r   r  rr   r  rs   r   s          rM   do_eddsa_test_from_openssl"OpenSSL.do_eddsa_test_from_openssl  s   JJ	77==MM#
DKK	

 	K	
 ,%GGDM &4	

 ,%&&(C &.$'1&&qvvx0B ( 	bhh&
		#tc! &% &%''s$   EE)&%E:
E&)
E7:
Fc                 ,    U R                  [        5      $ r   )rI  r8   r   s    rM   test_from_openssl_ed25519!OpenSSL.test_from_openssl_ed25519  s     ..w77rL   c                 ,    U R                  [        5      $ r   )rI  r9   r   s    rM   test_from_openssl_ed448OpenSSL.test_from_openssl_ed448  s     ..u55rL   rF   N)SHA1)NrG   rH   rI   rJ   setra   rW   OPENSSL_SUPPORTED_CURVESrA  pytestmarkslowskipifrH  rM  rQ  rU  r[  ra  rf  rk  rp  ru  ry  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rG  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  OPENSSL_SUPPORTED_TYPESrD   r<  r@  rD  rI  rL  rO  rK   rF   rL   rM   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	 
6S  s   (w< <xxr*  c                       \ rS rSr\" S \" S5      R                  S5       5       5      r\R                  R                  S\;  SS9S 5       r\R                  R                  S\;  SS9S	 5       rS
rg)TooSmallCurvei  c              #   f   #    U  H'  nUR                  S 5      S   R                  5       v   M)     g7fr,  r.  r/  s     rM   r2  TooSmallCurve.<genexpr>  r4  r5  r6  r7  rW  rX  rD  c                     [         R                  " [        S9nSnU R                  [        5         UR                  U[        [        R                  S5      [        SS9  S S S 5        g ! , (       d  f       g = f)Nr   r   r`  Fr  r(  r  )
r   rg   r$   rl   r   ri   r   r}   r  r   )ro   r   rr   s      rM   4test_sign_too_small_curve_dont_allow_truncate_raisesBTooSmallCurve.test_sign_too_small_curve_dont_allow_truncate_raises  s[    
   x0~.GG h7'$	   /..s   /A((
A6c           	      p   [         R                  " [        S9nUR                  5       nSnUR	                  U[        [        R                  S5      [        SS9nU R                  [        5         UR                  UU[        [        R                  S5      [        SS9  S S S 5        g ! , (       d  f       g = f)Nr   r   r`  Tr^  F)r  r)  r  )r   rg   r$   rh   ri   r   r}   r  r   rl   r   rk   r   )ro   r   r   rr   r+  s        rM   6test_verify_too_small_curve_dont_allow_truncate_raisesDTooSmallCurve.test_verify_too_small_curve_dont_allow_truncate_raises  s    
   x0!!#''W[[(3#	  
 ~.II h7'$   /..s   .0B''
B5rF   N)rG   rH   rI   rJ   rR  ra   rW   rS  rT  rU  rW  r_  rb  rK   rF   rL   rM   rZ  rZ    s    " #34::4@#  
 [[44;  			 [[44;  	rL   rZ  c                   2    \ rS rSrS rS rS rS rS rSr	g)	DERi  c                    U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S	5      S
5        S nU R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S5      S5        U R                  U" S	5      S5        U R                  U" S5      S5        g )Nr   s    r   s      s      s    r  s    c                 \    [         R                  " [         R                  " U 5      S-   5      $ )Nr   )r@   remove_integerrs  )ns    rM   r   DER.test_integer.<locals>.s  s#    %%c&8&8&;g&EFFrL   )r   r   )r   r   )rg  r   )rh  r   )r  r   	   
~[~e;~pd)rm  r   )r   r@   rs  )ro   r   s     rM   test_integerDER.test_integer  s   ++A.@++A.@++C0/B++C02EF++C02EF	G 	1|,1|,30303067?	
rL   c                    U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        S	 HY  n[        R                  " U5      S
-   n[        R                  " U5      u  p4U R                  X15        U R                  X$S  S
5        M[     g )Nr   r  rg     rh  s      s   )r   r   rN   rg  rh  rr  r  r     more)r   r@   encode_numberread_numberro   rk  xn1llens        rM   test_numberDER.test_number,  s    **1-w7**3/9**3/=**;7E >A!!!$w.Aq)HBR#QuXw/	 >rL   c                 "   U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S	5      S
5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        U R                  [        R                  " S5      S5        S HY  n[        R                  " U5      S-   n[        R                  " U5      u  p4U R                  X15        U R                  X$S  S5        M[     g )Nr   r  rg  rq  rh  s   rX  s   r  s      s   s   more)   rN   r~  s   )	r   r   rN   rg  rh  rX  r  r}  r~  rs  )r   r@   encode_lengthread_lengthrv  s        rM   test_lengthDER.test_length9  s+   **1-w7**3/9**3/=**3/=**3/A**;7I)>?J**3/=@A!!!$w.Aq)HBR#QuXw/	 ArL   c                     [         R                  " SS5      S-   nU R                  US5        [         R                  " U5      u  p#U R                  US5        U R                  US5        g )Ns   ABCs   DEFs   GHIs   0ABCDEFGHIs   ABCDEF)r@   r
  r   remove_sequence)ro   rw  x1rests       rM   test_sequenceDER.test_sequenceH  s\    /&801&&q)Y'v&rL   c                     [         R                  " S[        R                  5      nU R	                  [        U5      S5        [         R                  " S[        S5      5      nU R	                  [        U5      S5        g )Nr   s   a00706052b81040021r   s   0102030a0b0cs   a1060102030a0b0c)r@   r~  r%   encoded_oidr   r   r   )ro   rw  s     rM   test_constructedDER.test_constructedO  s[    ""1h&:&:;%@A""1i&@A%>?rL   rF   N)
rG   rH   rI   rJ   rn  rz  r  r  r  rK   rF   rL   rM   re  re    s    
*00'@rL   re  c                       \ rS rSr\R
                  R                  S 5       rS r\	" S
0 \
D6\" \R                  " SSS-  S95      S 5       5       rS	 rS
rg)UtiliV  c                 2   [         R                  n[        S5       H@  nSU-  nS H2  nU" X45      nU R                  SUs=:*  =(       a    U:  Os  SXT45        M4     MB     U R	                  SU" S[
        R                  5      -  R                  5       S5        g )Ni  seed-%d)   rX  r  i  i      r   z%xr   s8   6fa59d73bf0446ae8743cf748fc5ac11d5585a90356417e97155c3bc)r   r   rangerj   r   r%   r   encode)ro   ttair   r   rk  s         rM   test_trytryagainUtil.test_trytryagainW  s    33tAq=D $QA>  	S0199;G	
rL   c                     [         R                  nSnSnU" X25      n[        R                  S:  a  U R	                  US5        g U R	                  US5        g )Nr  s   text)r   r         )r   r   sysversion_infor   )ro   r  r   r   rk  s        rM   test_trytryagain_singleUtil.test_trytryagain_singlem  sO    33f$Q$Q#rL   r   r:  rG  )	min_value	max_valuec                     [         R                  " SU-  5      nS H>  n[         R                  " X2S9nU R                  SUs=:*  =(       a    U:  Os  SXC45        M@     g )Nr  )r  rX  r  r  r  r   r   )r   PRNG	randrangerj   )ro   r  r   r   rk  s        rM   test_randrangeUtil.test_randrangex  sN    
 ))IM*
E u6AOOANNUNQM:
rL   c                 r   Sn[        [        SU5       Vs/ s H  o"S4PM     sn5      nSU;  d   eX;  d   e[        S5       H*  nSU-  n[        R                  " XA5      nX5==   S-  ss'   M,     U R	                  X1S-
     5        [        SU5       H  n[        SUSX2   S-  -  4-  5        M     g s  snf )	Nr  r   r   i@B r  z%3d: %s*d   )dictr  r   r   rj   print)ro   r   r  countsr   rk  s         rM   OFF_test_prove_uniformityUtil.OFF_test_prove_uniformity  s    uQ7!1v78"""wAq=D55dBAINI  
 	qy)*q%A)q#c)9":;;< ! 8s   B4rF   N)rG   rH   rI   rJ   rT  rU  rV  r  r  r
   HYP_SETTINGSr	   stintegersr  r  rK   rF   rL   rM   r  r  V  s`    [[
 
*	$ 
2;;b#g67; 8 ;=rL   r  c                   z    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rSrg)RFC6979i  c                 r    [         R                  " UR                  5       X$U5      nU R                  XV5        g r   )rA   r   r   r   )ro   r   r   hsh	hash_funcexpectedactuals          rM   _doRFC6979._do  s+    ##IOO$5v#N*rL   c           
          U R                  [        R                  [        SS5      [        R
                  " S5      R                  5       [        R
                  [        SS5      S9  g)zRFC doesn't contain test vectors for SECP256k1 used in bitcoin.
This vector has been computed by Golang reference implementation instead.rx   ry      sample@8fa1f95d514760e498f28957b824ee6ec39ed64826ff4fecc2b5739ec45b91cdr   r   r  r  r  Nr  r)   r   r{   r}   r~   r   r   s    rM   test_SECP256k1RFC6979.test_SECP256k1  sS     	))92>y)002nnR 	 		
rL   c           
          U R                  [        R                  [        SS5      [        R
                  " S5      R                  5       [        R
                  [        SS5      S9  g )N@cca9fbcc1b41e5a95d369eaa6ddcff73b61a4efaa279cfc6567e8daa39cbaf50ry   r  @2df40ca70e639d89528a6b670d9d48d9165fdc0febc0974056bdce192b8e16a3r  r  r   s    rM   test_SECP256k1_2RFC6979.test_SECP256k1_2  sV    ))R y)002nnR 	 	
rL   c                     U R                  [        R                  S[        R                  " S5      R                  5       [        R                  SS9  g )Nr      Satoshi Nakamotol   ]iHsiNPIz$Nkxke} r  r  r)   r   r}   r~   r   r   s    rM   test_SECP256k1_3RFC6979.test_SECP256k1_3  s?    ))23::<nnW 	 	
rL   c                     U R                  [        R                  S[        R                  " S5      R                  5       [        R                  SS9  g )Nr   sJ   All those moments will be lost in time, like tears in rain. Time to die...l   V1ujcCXxi
nH0G<VHk8r  r  r   s    rM   test_SECP256k1_4RFC6979.test_SECP256k1_4  s?    ))]fhnnW 	 	
rL   c                     U R                  [        R                  S[        R                  " S5      R                  5       [        R                  SS9  g )Nl   @Al 3z~i9nW~ r  l   oTP*(9LM$dhW5Dv8M3r  r  r   s    rM   test_SECP256k1_5RFC6979.test_SECP256k1_5  s?    ))U23::<nnW 	 	
rL   c                     U R                  [        R                  S[        R                  " S5      R                  5       [        R                  SS9  g )Nl   A hb+Jn p.(d0^y8Wx s   Alan Turingl   }:Anq`0=	39pC[AZRr  r  r   s    rM   test_SECP256k1_6RFC6979.test_SECP256k1_6  s>    ))U~.557nnW 	 	
rL   c                     U R                  [        S SS[        SS5      5      [        SS5      [        S5      [        R
                  [        SS5      S9  g )Nr   )4000000000000000000020108A2E0CC0D99F8A5EFry   )09A4D6792295A7F730FC3F2B49CBC0F62E862272Fs@   AF2BDBE1AA9B6EC1E2ADE1D694F41FC71A831D0268E9891562113D8A62ADD1BF)23AF4074C90A02B3FE61D286D5C87F425E6BDD81Br  )r  r?   r{   r   r}   r~   r   s    rM   test_1RFC6979.test_1  s[    ?D	 BBGS nnDbI 	 	
rL   c           
          U R                  [        R                  [        SS5      [        R
                  " S5      R                  5       [        R
                  [        SS5      S9  g )N06FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4ry   r  037D7CA00D2C7B0E5E412AC03BD44BA837FDD5B28CD3B0021r  r  r$   r   r{   r}   sha1r   r   s    rM   test_2RFC6979.test_2  sP    ((I2NY'..0llBB 	 	
rL   c           
          U R                  [        R                  [        SS5      [        R
                  " S5      R                  5       [        R
                  [        SS5      S9  g )Nr  ry   r  032B1B6D7D42A05CB449065727A84804FB1A3E34D8F261496r  r  r$   r   r{   r}   r~   r   r   s    rM   test_3RFC6979.test_3  P    ((I2Ny)002nnBB 	 	
rL   c           
          U R                  [        R                  [        SS5      [        R
                  " S5      R                  5       [        R
                  [        SS5      S9  g )Nr  ry   r  0A2AC7AB055E4F20692D49209544C203A7D1F2C0BFBC75DB1r  r  r$   r   r{   r}   sha512r   r   s    rM   test_4RFC6979.test_4  r  rL   c           
          U R                  [        R                  [        SS5      [        R
                  " S5      R                  5       [        R
                  [        SS5      S9  g )Nr  ry      test0D9CF9C3D3297D3260773A1DA7418DB5537AB8DD93DE7FA25r  r  r   s    rM   test_5RFC6979.test_5  sP    ((I2NW%,,.llBB 	 	
rL   c           
          U R                  [        R                  [        SS5      [        R
                  " S5      R                  5       [        R
                  [        SS5      S9  g )Nr  ry   r  05C4CE89CF56D9E7C77C8585339B006B97B5F0680B4306C6Cr  r  r   s    rM   test_6RFC6979.test_6  P    ((I2Nw'..0nnBB 	 	
rL   c           
          U R                  [        R                  [        SS5      [        R
                  " S5      R                  5       [        R
                  [        SS5      S9  g )Nr  ry   r  00758753A5254759C7CFBAD2E2D9B0792EEE44136C9480527r  r  r   s    rM   test_7RFC6979.test_7)  r  rL   c           
          U R                  [        R                  [        SS5      [        R
                  " S5      R                  5       [        R
                  [        SS5      S9  g )Nڃ0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538ry   r  ڃ089C071B419E1C2820962321787258469511958E80582E95D8378E0C2CCDB3CB42BEDE42F50E3FA3C71F5A76724281D31D9C89F0F91FC1BE4918DB1C03A5838D0F9r  )r  r(   r   r{   r}   r  r   r   s    rM   test_8RFC6979.test_84  s\    (( V Y'..0ll V 	 	
rL   c           
          U R                  [        R                  [        SS5      [        R
                  " S5      R                  5       [        R
                  [        SS5      S9  g )Nr  ry   r  ڃ0EDF38AFCAAECAB4383358B34D67C9F2216C8382AAEA44A3DAD5FDC9C32575761793FEF24EB0FC276DFC4F6E3EC476752F043CF01415387470BCBD8678ED2C7E1A0r  )r  r(   r   r{   r}   r~   r   r   s    rM   test_9RFC6979.test_9C  s\    (( V y)002nn V 	 	
rL   c           
          U R                  [        R                  [        SS5      [        R
                  " S5      R                  5       [        R
                  [        SS5      S9  g )Nr  ry   r  ڃ16200813020EC986863BEDFC1B121F605C1215645018AEA1A7B215A564DE9EB1B38A67AA1128B80CE391C4FB71187654AAA3431027BFC7F395766CA988C964DC56Dr  )r  r(   r   r{   r}   r  r   r   s    rM   test_10RFC6979.test_10R  s\    (( V w'..0nn V 	 	
rL   rF   N)rG   rH   rI   rJ   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  rK   rF   rL   rM   r  r    sW    +


	



"	
	
	
	
	
	



rL   r  c                       \ rS rSrS rSrg)ECDHib  c                 B   X2-  nXb-  nX<-  nU R                  [        XU5      U5        U R                  [        XU5      U5        U R                  X<-  X6-  U-  s=:H  =(       a    Xc-  U-  s=:H  =(       a    Xk-  :H  Os  5        U R                  [        XU
5      U5        g r   )r   r?   rj   )ro   r   r   dAx_qAy_qAdBx_qBy_qBx_Zy_ZqAqBZs                 rM   r  ECDH._doc  s    ^^GuD126uD126W)# )#  	
 	u3/3rL   rF   N)rG   rH   rI   rJ   r  rK   rF   rL   rM   r  r  b  s    4rL   r  c                       \ rS rSrS rS r\R                  R                  S 5       r	\R                  R                  S 5       r
Srg)RFC6932ir  c                     U R                  [        [        R                  [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        S	S5      S
9
  g )N87C4B7A2C8A4BAD1FBB7D79CC0955DB7C6A4660CA64CC4778159B495Ery   8B104A67A6F6E85E14EC1825E1539E8ECDBBF584922367DD88C6BDCF2846D782E7FDB5F60CD8404301AC5949C58EDB26BC68BA07695B750A94863976D4AAE6CD0F6DD18DEFEF55D96569D0507C03E74D6486FFA28FB82A97089A9296147B71B21A4B574E1278245B536F14D8C2B9D07A874E89B900D7C77A709A797276B8CA1BA61BB95B546FC29F862E44D59D25B8312DFD98783F9FB77B9704945A73BEB6DCCBE3B65D0F967DCAB574EB86F800811D64114B1C48C621AB3357CF93F496E4238696A2A012B3C98
r   r   r  r  r  r  r  r  r  r  )r  r;   r,   r   r{   r   s    rM   test_brainpoolP224r1RFC6932.test_brainpoolP224r1u  s    '%//JB JB JB JB JB JB JB JB1 	 	
rL   c                     U R                  [        [        R                  [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        S	S5      S
9
  g )N@041EB8B1E2BC681BCE8E39963B2E9FC415B05283313DD1A8BCC055F11AE49699ry   @78028496B5ECAAB3C8B6C12E45DB1E02C9E4D26B4113BC4F015F60C5CCC0D206@A2AE1762A3831C1D20F03F8D1E3C0C39AFE6F09B4D44BBE80CD100987B05F92B@06F5240EACDB9837BC96D48274C8AA834B6C87BA9CC3EEDD81F99A16B8D804D3@8E07E219BA588916C5B06AA30A2F464C2F2ACFC1610A3BE2FB240B635341F0DB@148EA1D7D1E7E54B9555B6C9AC90629C18B63BEE5D7AA6949EBBF47B24FDE40D@05E940915549E9F6A4A75693716E37466ABA79B4BF2919877A16DD2CC2E23708@6BC23B6702BC5A019438CEEA107DAAD8B94232FFBBC350F3B137628FE6FD134Cr$  r  r<   r-   r   r{   r   s    rM   test_brainpoolP256r1RFC6932.test_brainpoolP256r1      '%//
 
 
 
 
 
 
 M 	 +	
rL   c                     U R                  [        [        R                  [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        S	S5      S
9
  g )N`014EC0755B78594BA47FB0A56F6173045B4331E74BA1A6F47322E70D79D828D97E095884CA72B73FDABD5910DF0FA76Ary   `45CB26E4384DAF6FB776885307B9A38B7AD1B5C692E0C32F0125332778F3B8D3F50CA358099B30DEB5EE69A95C058B4E`8173A1C54AFFA7E781D0E1E1D12C0DC2B74F4DF58E4A4E3AF7026C5D32DC530A2CD89C859BB4B4B768497F49AB8CC859`6B461CB79BD0EA519A87D6828815D8CE7CD9B3CAA0B5A8262CBCD550A015C90095B976F3529957506E1224A861711D54`01BF92A92EE4BE8DED1A911125C209B03F99E3161CFCC986DC7711383FC30AF9CE28CA3386D59E2C8D72CE1E7B4666E8`3289C4A3A4FEE035E39BDB885D509D224A142FF9FBCC5CFE5CCBB30268EE47487ED8044858D31D848F7A95C635A347AC`04CC4FF3DCCCB07AF24E0ACC529955B36D7C807772B92FCBE48F3AFE9A2F370A1F98D3FA73FD0C0747C632E12F1423EC`7F465F90BD69AFB8F828A214EB9716D66ABC59F17AF7C75EE7F1DE22AB5D05085F5A01A9382D05BF72D96698FE3FF64Er$  r  r=   r/   r   r{   r   s    rM   test_brainpoolP384r1RFC6932.test_brainpoolP384r1      '%//8
 :
 :
 8
 :
 :
 9
 9M 	 +	
rL   c                     U R                  [        [        R                  [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        S	S5      S
9
  g )Nڀ636B6BE0482A6C1C41AA7AE7B245E983392DB94CECEA2660A379CFE159559E357581825391175FC195D28BAC0CF03A7841A383B95C262B983782874CCE6FE333ry   ڀ0562E68B9AF7CBFD5565C6B16883B777FF11C199161ECC427A39D17EC2166499389571D6A994977C56AD8252658BA8A1B72AE42F4FB7532151AFC3EF0971CCDAڀA7CA2D8191E21776A89860AFBC1F582FAA308D551C1DC6133AF9F9C3CAD59998D70079548140B90B1F311AFB378AA81F51B275B2BE6B7DEE978EFC7343EA642Eڀ0AF4E7F6D52EDD52907BB8DBAB3992A0BB696EC10DF11892FF205B66D381ECE72314E6A6EA079CEA06961DBA5AE6422EF2E9EE803A1F236FB96A1799B86E5C8Bڀ5A7954E32663DFF11AE24712D87419F26B708AC2B92877D6BFEE2BFC43714D89BBDB6D24D807BBD3AEB7F0C325F862E8BADE4F74636B97EAACE739E11720D323ڀ96D14621A9283A1BED84DE8DD64836B2C0758B11441179DC0C54C0D49A47C03807D171DD544B72CAAEF7B7CE01C7753E2CAD1A861ECA55A71954EE1BA35E04BEڀ1EE8321A4BBF93B9CF8921AB209850EC9B7066D1984EF08C2BB723236208AC8F1A483E79461A00E0D5F6921CE9D360502F85C812BEDEE23AC5B210E5811B191Eڀ2632095B7B936174B41FD2FAF369B1D18DCADEED7E410A7E251F0831097C50D02CFED02607B6A2D5ADB4C0006008562208631875B58B54ECDA5A4F9FE9EAABA6r$  r  r>   r0   r   r{   r   s    rM   test_brainpoolP512r1RFC6932.test_brainpoolP512r1      '%// 	 ! 	 ! 	  	 ! 	 ! 	  	  	[ 	 3	
rL   rF   N)rG   rH   rI   rJ   r%  r1  rT  rU  rV  r>  rK  rK   rF   rL   rM   r  r  r  sJ    
<,
\ [[,
 ,
\ [[4
 4
rL   r  c                       \ rS rSrS r\R                  R                  S 5       r\R                  R                  S 5       r	Sr
g)RFC7027i(	  c                     U R                  [        [        R                  [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        S	S5      S
9
  g )N@81DB1EE100150FF2EA338D708271BE38300CB54241D79950F77B063039804F1Dry   @44106E913F92BC02A1705D9953A8414DB95E1AAA49E81D9E85F929A8E3100BE5@8AB4846F11CACCB73CE49CBDD120F5A900A69FD32C272223F789EF10EB089BDC@55E40BC41E37E3E2AD25C3C6654511FFA8474A91A0032087593852D3E7D76BD3@8D2D688C6CF93E1160AD04CC4429117DC2C41825E1E9FCA0ADDD34E6F1B39F7B@990C57520812BE512641E47034832106BC7D3E8DD0E4C7F1136D7006547CEC6A@89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2B@49C27868F4ECA2179BFD7D59B1E3BF34C1DBDE61AE12931648F43E59632504DEr$  r0  r   s    rM   r1  RFC7027.test_brainpoolP256r1+	  r3  rL   c                     U R                  [        [        R                  [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        S	S5      S
9
  g )N`1E20F5E048A5886F1F157C74E91BDE2B98C8B52D58E5003D57053FC4B0BD65D6F15EB5D1EE1610DF870795143627D042ry   `68B665DD91C195800650CDD363C625F4E742E8134667B767B1B476793588F885AB698C852D4A6E77A252D6380FCAF068`55BC91A39C9EC01DEE36017B7D673A931236D2F1F5C83942D049E3FA20607493E0D038FF2FD30C2AB67D15C85F7FAA59`032640BC6003C59260F7250C3DB58CE647F98E1260ACCE4ACDA3DD869F74E01F8BA5E0324309DB6A9831497ABAC96670`4D44326F269A597A5B58BBA565DA5556ED7FD9A8A9EB76C25F46DB69D19DC8CE6AD18E404B15738B2086DF37E71D1EB4`62D692136DE56CBE93BF5FA3188EF58BC8A3A0EC6C1E151A21038A42E9185329B5B275903D192F8D4E1F32FE9CC78C48`0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42`0DF213417EBE4D8E40A5F76F66C56470C489A3478D146DECF6DF0D94BAE9E598157290F8756066975F1DB34B2324B7BDr$  r=  r   s    rM   r>  RFC7027.test_brainpoolP384r1Y	  r@  rL   c                     U R                  [        [        R                  [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        SS5      [	        S	S5      S
9
  g )Nڀ16302FF0DBBB5A8D733DAB7141C1B45ACBC8715939677F6A56850A38BD87BD59B09E80279609FF333EB9D4C061231FB26F92EEB04982A5F1D1764CAD57665422ry   ڀ0A420517E406AAC0ACDCE90FCD71487718D3B953EFD7FBEC5F7F27E28C6149999397E91E029E06457DB2D3E640668B392C2A7E737A7F0BF04436D11640FD09FDڀ72E6882E8DB28AAD36237CD25D580DB23783961C8DC52DFA2EC138AD472A0FCEF3887CF62B623B2A87DE5C588301EA3E5FC269B373B60724F5E82A6AD147FDE7ڀ230E18E1BCC88A362FA54E4EA3902009292F7F8033624FD471B5D8ACE49D12CFABBC19963DAB8E2F1EBA00BFFB29E4D72D13F2224562F405CB80503666B25429ڀ9D45F66DE5D67E2E6DB6E93A59CE0BB48106097FF78A081DE781CDB31FCE8CCBAAEA8DD4320C4119F1E9CD437A2EAB3731FA9668AB268D871DEDA55A5473199Fڀ2FDC313095BCDD5FB3A91636F07A959C8E86B5636A1E930E8396049CB481961D365CC11453A06C719835475B12CB52FC3C383BCE35E27EF194512B71876285FAڀA7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1Fڀ7DB71C3DEF63212841C463E881BDCF055523BD368240E6C3143BD8DEF8B3B3223B95E0F53082FF5E412F4222537A43DF1C6D25729DDB51620A832BE6A26680A2r$  rJ  r   s    rM   rK  RFC7027.test_brainpoolP512r1	  rM  rL   rF   N)rG   rH   rI   rJ   r1  rT  rU  rV  r>  rK  rK   rF   rL   rM   rO  rO  (	  sE    ,
\ [[,
 ,
\ [[4
 4
rL   rO  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	           	      ^   [         R                  " [        U 5      U5      n	[        R                  " [        X-   5      U5      n
U	R                  U
:X  d   eU	R                  XE[        [        US5      S9nU[        U5      [        U5      4:X  d   eU
R                  XU[        5      (       d   eg )Nry   )r  r(  rz   )
r   rm   r   r   r   ri   r   r{   rk   r   )wgwxgwyrz   msgmdr3  r   r   r   r   rs   s               rM   test_RFC4754_vectorsr  	  s    x 
			!e	4B		!	!)CI"6	>Br!!!
''#.?3q":'
NC9Q<1....99Sr#45555rL   )t
__future__r   r   r   	unittest2unittestImportErrorr  r  rU   rT  r  binasciir   r   r}   	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  argvra   TestCaserc   rU  parametrizer  r   paramsr   r  appendparamr=  rG  r&  r(  rV  r*  rZ  re  r  r  r  r  rO  r~   sha384r  r  )r  js   00rM   <module>r     s{   ? ?  
    
 '   & "  * H H   E D O O ,       :  !   	i 	  sxx#$L  u:H u:p sCA]Q]C" 
E>LL	(8(8S(IJ	
 ?  )624 34 sxx(FF &). *. O6h O6 O6d*H%% *Z=@(

 =@@?=8 ?=DG
h G
T48 4 s
d s
lU
d U
r *NNNNNNNN	
 	////NN//!	
$ 	 NN -	
?7:v6w:v6oO  r Ds   M
 M

MM