
    dfEC                       d dl mZmZ 	 d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZ d dlmZmZmZmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZmZmZ dd	lmZm Z  dd
lm!Z!m"Z"m#Z# ddl$m%Z% ddl%m&Z&m'Z' ddl%m(Z(m)Z) ddl%m*Z*m+Z+m,Z, ddl-m.Z.m/Z/ ddl-m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBm-Z- ddlCmDZDmEZEmFZFmGZG ddlHmIZI ddl$mJZJ ddl$mKZK ddl$mCZC  G d deL      ZMd ZN G d dej                        ZPe
j                  j                  d eSd      D  cg c]  } dD ]  }| |f  c}}       d        ZTg ZUe-D ]G  ZVdD ]@  ZWeUj                   e
j                  eVeWd j                  eVj                  eW      !             B I e
j                  j                  d"eU      d#        Z\ G d$ d%ej                        Z] G d& d'ej                        Z^ G d( d)ej                        Z_ G d* d+ej                        Z` G d, d-ej                        Za G d. d/ej                        Zb G d0 d1eb      Zc G d2 d3eb      Zde
j                  j                  d4 e
j                  d5d6d7d8d9ed:d;e6d<!
       e
j                  d=d>d?d@d9edAdBe7dC!
       e
j                  dDdEdFdGd9edHdIe8dJ!
      g      dK        Zey# e$ r d dlZY w xY wc c}} w )L    )with_statementdivisionN)hexlify	unhexlify)sha1sha256sha384sha512)partial)given)bprint_binary_type   )
SigningKeyVerifyingKey)BadSignatureErrorMalformedPointErrorBadDigestError)util)sigencode_dersigencode_strings)sigdecode_dersigdecode_strings)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Ed25519Ed448curves)curve_brainpoolp224r1curve_brainpoolp256r1curve_brainpoolp384r1curve_brainpoolp512r1)Point)der)rfc6979)ecdsac                       e Zd Zy)SubprocessErrorN)__name__
__module____qualname__     K/home/api-vastappli/venv/lib/python3.12/site-packages/ecdsa/test_pyecdsa.pyr=   r=   >   s    rB   r=   c           
      8   d}t        j                  |g| j                         z   t         j                  t         j                        }|j                         \  }}|j                  dk7  r!t        d|d| d|j                  d|      |j                         S )Nopenssl)stdoutstderrr   zcmd ' z' failed: rc=z, stdout/err was )	
subprocessPopensplitPIPESTDOUTcommunicate
returncoder=   decode)cmdOPENSSLprF   ignoreds        rC   run_opensslrU   B   s    G		CIIK  	A
 mmoOFG||qQ\\63
 	
 ==?rB   c                   b   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;y:);ECDSAc           	         t        j                         }|j                         }t        d      }|j	                  |      }| j                  |j                  ||             | j                  t        |j                  ||t        d      z          t        j                  |j                               }| j                  |j                  ||             y )Nblahblahbad)r   generateget_verifying_keyr   sign
assertTrueverifyassertRaisesr   r   from_string	to_string)selfprivpubdatasigpub2s         rC   
test_basiczECDSA.test_basicS   s    ""$$$&}iio

3-.+SZZdQuXoN''8C./rB   c                    t        d      }t        dd      }t        j                  |t        t
              }|j                         }t        j                  t        j                  j                         |t
        t        |      j                               }|j                  ||      }| j                  |j                  ||             |j                  ||      }| j                  |j                  ||             |j                  |t
              }| j                  |j                  ||             | j!                  ||       | j!                  ||       y )NrY    9d0219792467d7d37b4d43298a7d0c05   )k)r   intr   from_secret_exponentr)   r   r\   r:   
generate_k	generatororderdigestr]   r^   r_   sign_deterministicassertEqual)	rc   rf   secexprd   re   rm   sig1sig2sig3s	            rC   test_deterministiczECDSA.test_deterministic`   s   }7<..vy&I$$&%%'9L9L9N
 yyy#

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

4./&&tV4

4./t$t$rB   c                 l    | j                  t        t               | j                  t        t               y N)r`   	TypeErrorr   r   rc   s    rC   test_bad_usagezECDSA.test_bad_usagew   s"    )Z0)\2rB   c                    t         }t        j                         }|j                         }| j	                  t        |j                               |j                         |j                  t        d            }| j	                  t        |      |j                         t         t        t        t        t        t        t         t"        t$        t&        t(        t*        fD ]  }t        j                  |      }|j                         }t-        j.                  |j                         |      }| j	                  |j                         |j                                | j	                  t        |j                               |j                         |j                  t        d            }| j	                  t        |      |j                          y )Nrf   curve)r$   r   r[   r\   ru   lenrb   verifying_key_lengthr]   r   signature_lengthr%   r&   r'   r(   r*   r+   r,   r-   r.   r/   r0   r   ra   )rc   defaultrd   re   rg   r   pub1rh   s           rC   test_lengthszECDSA.test_lengths|   sJ   ""$$$&S]]_-w/K/KLii&	"S7#;#;<
 	?E &&U3D))+D++DNN,<eDDT^^-t~~/?@S!12E4N4NO))AfI&CSXu'='=>)	?rB   c                     t        d      }t        }t        j                  ||j                        }t        j                  ||j                        }| j                  ||       t        j                  ||      }t        j                  ||      }| j                  t        |j                               t        |j                                      | j                  |j                         |j                                |j                         }|j                         }t        d      }	|j                  |	      }
|j                  |	      }| j                  |j                  |
|	             | j                  |j                  |
|	             | j                  |j                  ||	             | j                  |j                  ||	             | j                  t        |j                               t        |j                                      y )Nsecretrf   )r   r$   r    randrange_from_seed__trytryagainrr   ru   r   ro   r   rb   to_pemr\   r]   r^   r_   )rc   seedr   secexp1secexp2priv1priv2r   rh   rf   rw   rx   s               rC   test_serializezECDSA.test_serialize   s~   {77ekkJ77ekkJ'*//?//?EOO%&0A(B	
 	8&&(&&(yzz$zz$D$/0D$/0D$/0D$/0!12GDNN<L4MNrB   c                    t        d      fd}t        j                  |      }t        j                  |      }| j                  t	        |j                         j                               t	        |j                         j                                      |j                  t        d      |      }|j                  t        d      |      }| j                  t	        |      t	        |             y )N=all the entropy in the entire world, compressed into one linec                     d |  S r|   rA   numbytesss    rC   not_much_entropyz.ECDSA.test_nonrandom.<locals>.not_much_entropy       Yh<rB   entropyrf   )r   r   r[   ru   r   r\   rb   r]   )rc   r   r   r   rw   rx   r   s         @rC   test_nonrandomzECDSA.test_nonrandom   s    MN	  ##,<=##,<=E++-779:E++-779:	
 zz!F)-=z>zz!F)-=z>6rB   c                    | j                  |j                  j                  |j                  j                         | j                  |j                  j                  j                  |j                  j                  j                         y r|   )ru   privkeysecret_multiplier
public_keyrq   )rc   r   r   s      rC   assertTruePrivkeysEqualzECDSA.assertTruePrivkeysEqual   s_    MM++U]]-L-L	
 	MM$$..MM$$..	
rB   c                    t        d      fd}t        j                         }| j                  |j                  t
        j                         t        j                  t              }| j                  |j                  t        j                         t        j                  |      }| j                  |j                  t
        j                         t        j                  |      }| j                  |j                  t
        j                         | j                  ||       t        j                  d      }| j                  |j                  t
        j                         t        j                  d      }| j                  ||       t        j                  dt              }| j                  |j                  t        j                         y )	Nr   c                     d |  S r|   rA   r   s    rC   r   z5ECDSA.test_privkey_creation.<locals>.not_much_entropy   r   rB   r   r      )rv      )rv   r   )	r   r   r[   ru   baselenr$   r%   r   ro   )rc   r   r   r   r   s       @rC   test_privkey_creationzECDSA.test_privkey_creation   sC   MN	  ##%(8(89##(3(8(89##,<=(8(89##,<=(8(89$$UE2//q9(8(89//q9$$UE2//qI(8(89rB   c                    t        j                         }|j                         }| j                  t	        |      t
               | j                  t        |      t        j                         t        j                  |      }| j                  ||       |j                         }| j                  t	        |      t
               | j                  |j                  t        d                   | j                  |j                         j!                  t        d                   t        j"                  |      }| j                  ||       |j%                         }| j                  t	        |      t
               t        j&                  |      }| j                  ||       t        j                  t(              }|j                         }| j                  t	        |      t
               | j                  |j                  t        d                   | j                  |j                         j!                  t        d                   t        j"                  |      }| j                  ||       |j%                         }| j                  t	        |      t
               t        j&                  |      }| j                  ||       y )N-----BEGIN EC PRIVATE KEY----------END EC PRIVATE KEY-----r   )r   r[   rb   ru   typer   r   r$   r   ra   r   r   r^   
startswithr   stripendswithfrom_pemto_derfrom_derr&   rc   r   s1r   s       rC   test_privkey_stringszECDSA.test_privkey_strings   s   ##%__b;/R("2"23&&r*$$UE2\\^b;/a(H&IJK
++A.L,MNO##B'$$UE2\\^b;/##B'$$UE2##(3\\^b;/a(H&IJK
++A.L,MNO##B'$$UE2\\^b;/##B'$$UE2rB   c                 P   t        j                  t              }|j                         }| j	                  t        |      t               | j                  |j                  t        d                   | j                  |j                         j                  t        d                   t        j                  |      }| j                  ||       |j                         }| j	                  t        |      t               t        j                  |      }| j                  ||       y )Nr   r   r   )r   r[   r0   r   ru   r   r   r^   r   r   r   r   r   r   r   r   r   s       rC   test_privkey_strings_brainpoolz$ECDSA.test_privkey_strings_brainpool	  s    ##/:\\^b;/a(H&IJK
++A.L,MNO##B'$$UE2\\^b;/##B'$$UE2rB   c                 8   | j                  |j                  j                  |j                  j                         | j                  |j                  j                  |j                  j                         | j                  |j                  |j                         y r|   )ru   pubkeypointrq   r   )rc   r   rh   s      rC   assertTruePubkeysEqualzECDSA.assertTruePubkeysEqual  sb    **DKK,=,=>..0E0EFTZZ0rB   c                 6   t        j                         }|j                         }|j                         }| j	                  t        |      t               | j	                  t        |      t        j                         t        j                  |      }| j                  ||       t        j                  t              }|j                         }|j                         }| j	                  t        |      t               | j	                  t        |      t        j                         t        j                  |t              }| j                  ||       |j                         }| j	                  t        |      t               t        j                  |      }| j                  ||       | j!                  t"        j$                  t        j                  |t'        d      z          t        j                  |      } G d d      } G d d      }t)        d |        |       dd       }	|	|_        |j                         }
| j!                  t,        t        j                  |
       |j/                         }| j	                  t        |      t               | j1                  |j3                  t'        d	            |       | j1                  |j5                         j7                  t'        d
            |       t        j8                  |      }| j                  ||       y )Nr   junkc                       e Zd Zd Zy)0ECDSA.test_pubkey_strings.<locals>.FakeGeneratorc                      y)N[rA   r~   s    rC   rr   z6ECDSA.test_pubkey_strings.<locals>.FakeGenerator.order8  s     rB   N)r>   r?   r@   rr   rA   rB   rC   FakeGeneratorr   7  s    !rB   r   c                       e Zd Zd Zy).ECDSA.test_pubkey_strings.<locals>.FakeCurveFpc                     t        d      S )NM65255345290392407050209505469627313404541085228058844382513856749047873406763)rn   r~   s    rC   rS   z0ECDSA.test_pubkey_strings.<locals>.FakeCurveFp.p<  s    ? rB   N)r>   r?   r@   rS   rA   rB   rC   FakeCurveFpr   ;  s    rB   r   unknown)r      r   r         z-----BEGIN PUBLIC KEY-----z-----END PUBLIC KEY-----)r   r[   r\   rb   ru   r   r   r   r$   r   r   ra   r   r&   r   r   r`   r9   UnexpectedDERr   r   r   r   r   r^   r   r   r   r   )rc   r   r   r   rh   pub1_derbadpubr   r   badcurvebadderpems               rC   test_pubkey_stringszECDSA.test_pubkey_strings  sP   ##%&&(^^b;/R("?"?@''+##D$/##(3&&(^^b;/R("?"?@''(;##D$/;;=h5$$X.##D$/|44h66J	
 &&x0	! 	!	 	 {}mo7I4
  +\-B-BFKkkmcK0q)E'FGMIIK  #=!>?	
 $$S)##D$/rB   c                    t        j                  t              }|j                         }|j	                         }| j                  t        |      t               | j                  t        |      t        j                         t        j                  |t              }| j                  ||       |j                         }| j                  t        |      t               t        j                  |      }| j                  ||       y Nr   )r   r[   r0   r\   rb   ru   r   r   r   r   r   ra   r   r   r   )rc   r   r   r   rh   r   s         rC   test_pubkey_strings_brainpoolz#ECDSA.test_pubkey_strings_brainpoolR  s    ##/:&&(^^b;/R/"F"FG''/B##D$/;;=h5$$X.##D$/rB   c                     t        j                         }|j                  }| j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY wNraw)r   r[   verifying_keyr`   
ValueErrorr   rc   skvks      rC   *test_vk_to_der_with_invalid_point_encodingz0ECDSA.test_vk_to_der_with_invalid_point_encoding`  sJ      "z* 	IIe	 	 	s   AAc                     t        j                         }| j                  t              5  |j	                  d       d d d        y # 1 sw Y   y xY wr   )r   r[   r`   r   r   rc   r   s     rC   *test_sk_to_der_with_invalid_point_encodingz0ECDSA.test_sk_to_der_with_invalid_point_encodingg  s?      "z* 	IIe	 	 	s   AAc                 b   t         }t        j                  d t        d      z   }t        j                  ||      }t        j
                  dd       }t        j                  ||      }| j                  t        j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   r   H  ='  r   r   r   garbage    )
r   r9   
encode_oidr   encode_sequenceencode_bitstringr`   r   r   r   rc   type_oid_dercurve_oid_derenc_type_der	point_der	to_decodes         rC   (test_vk_from_der_garbage_after_curve_oidz.ECDSA.test_vk_from_der_garbage_after_curve_oidm  s    .(CDqH
 
 **<G((d;	''i@	s001 	-!!),	- 	- 	-   B%%B.c                 b   t        j                  d }t        j                  d }t        j                  ||      }t        j                  dd       }t        j                  ||      }| j	                  t         j
                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   )r9   r   r   r   r`   r   r   r   r   s         rC   !test_vk_from_der_invalid_key_typez'ECDSA.test_vk_from_der_invalid_key_typey  s    ~~y1(CD**<G((d;	''i@	s001 	-!!),	- 	- 	-r   c                 b   t         }t        j                  d }t        j                  ||      }t        j                  dd       t        d      z   }t        j                  ||      }| j                  t        j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   r   r   )
r   r9   r   r   r   r   r`   r   r   r   r   s         rC   +test_vk_from_der_garbage_after_point_stringz1ECDSA.test_vk_from_der_garbage_after_point_string  s    .(CD**<G((d;a	lJ	''i@	s001 	-!!),	- 	- 	-r   c                 J   t         }t        j                  d }t        j                  ||      }t        j                  dd       }t        j                  ||      }| j                  t        j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   s   	r   r9   r   r   r   r`   r   r   r   r   s         rC   "test_vk_from_der_invalid_bitstringz(ECDSA.test_vk_from_der_invalid_bitstring  s    .(CD**<G((d;	''i@	s001 	-!!),	- 	- 	-   :BB"c                 6   t         }t        j                  d }t        j                  ||      }t        j                  dd      }t        j                  ||      }| j                  t              5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   s@   r   )	r   r9   r   r   r   r`   r   r   r   r   s         rC   0test_vk_from_der_with_invalid_length_of_encodingz6ECDSA.test_vk_from_der_with_invalid_length_of_encoding  s~    .(CD**<G((q9	''i@	23 	-!!),	- 	- 	-s   0BBc                 J   t         }t        j                  d }t        j                  ||      }t        j                  dd      }t        j                  ||      }| j                  t        j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   s0   r   r   r   s         rC   "test_vk_from_der_with_raw_encodingz(ECDSA.test_vk_from_der_with_raw_encoding  s    .(CD**<G((q9	''i@	s001 	-!!),	- 	- 	-r   c                 8   t        j                         }|j                         }t        d      }|j	                  |      }| j                  t        |      t               | j                  t        |      t        j                         | j                  |j                  ||             |j	                  |t              }| j                  t        |      t               | j                  t        |      d       | j                  t        |d         t               | j                  t        |d         t               | j                  t        |d         t        j                         | j                  t        |d         t        j                         | j                  |j                  ||t                      |j	                  |t"              }| j                  t        |      t               | j                  |j                  ||t$                     y )Nrf   )	sigencoder   r   r   )	sigdecode)r   r[   r\   r   r]   ru   r   r   r   r$   r   r^   r_   r   tupler   r   r   r   )rc   r   r   rf   rg   sig_ders         rC   test_signature_stringszECDSA.test_signature_strings  s~   ##%&&(y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C9JKL**T]*;g4GT]KLrB   c                     | j                  t              5  t        t        d      t        d      t        d      gd       d d d        y # 1 sw Y   y xY w)Nonetwothree   r`   r   r   r   r~   s    rC   *test_sig_decode_strings_with_invalid_countz0ECDSA.test_sig_decode_strings_with_invalid_count  sG    12 	Fqx51W:>E	F 	F 	Fs   +A

Ac                     | j                  t              5  t        t        d      t        d      gd       d d d        y # 1 sw Y   y xY w)Nr  r  r
  r  r~   s    rC   (test_sig_decode_strings_with_wrong_r_lenz.ECDSA.test_sig_decode_strings_with_wrong_r_len  s=    12 	:qx52D9	: 	: 	:   !A  A	c                     | j                  t              5  t        t        d      t        d      gd       d d d        y # 1 sw Y   y xY w)N    u   °ÿr
  r  r~   s    rC   (test_sig_decode_strings_with_wrong_s_lenz.ECDSA.test_sig_decode_strings_with_wrong_s_len  sA    12 	@qy!J-8$?	@ 	@ 	@r  c                     t        j                         }|j                  }| j                  t              5  |j                  d t        d      dz         d d d        y # 1 sw Y   y xY w)N    )r   r[   r   r`   r   verify_digestr   r   s      rC   test_verify_with_too_long_inputz%ECDSA.test_verify_with_too_long_input  sV      "~. 	4T1V9s?3	4 	4 	4s   AA'c                     | j                  t              5  t        j                  d       d d d        y # 1 sw Y   y xY wNr   )r`   r   r   ro   r~   s    rC   4test_sk_from_secret_exponent_with_wrong_sec_exponentz:ECDSA.test_sk_from_secret_exponent_with_wrong_sec_exponent  s4    23 	/++A.	/ 	/ 	/s   5>c                     | j                  t              5  t        j                  t	        d             d d d        y # 1 sw Y   y xY w)N)r`   r   r   ra   r   r~   s    rC   )test_sk_from_string_with_wrong_len_stringz/ECDSA.test_sk_from_string_with_wrong_len_string  s8    23 	.""1V9-	. 	. 	.	   >Ac                    t        j                  d      }t        j                  |      t        d      z   }| j	                  t         j
                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   r   )r9   encode_integerr   r   r`   r   r   r   rc   ver_derr   s      rC   )test_sk_from_der_with_junk_after_sequencez/ECDSA.test_sk_from_der_with_junk_after_sequence  sb    $$Q'''01Y<?	s001 	+	*	+ 	+ 	+s   A55A>c                     t        j                  d      }t        j                  |      }| j                  t         j                        5  t        j                  |       d d d        y # 1 sw Y   y xY wr  )r9   r   r   r`   r   r   r   r!  s      rC   #test_sk_from_der_with_wrong_versionz)ECDSA.test_sk_from_der_with_wrong_version  sY    $$Q'''0	s001 	+	*	+ 	+ 	+s   
A))A2c                 |   t        j                  d      }t        j                  t        d            }t        j                  d }t        j
                  d|      }t        j                  ||||      }| j                  t         j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr       ÿr   r9   r   encode_octet_stringr   r   encode_constructedr   r`   r   r   r   rc   r"  privkey_derr   	const_derr   s         rC   "test_sk_from_der_invalid_const_tagz(ECDSA.test_sk_from_der_invalid_const_tag  s    $$Q'--a
m<	2**1m<	''[)]
	 s001 	+	*	+ 	+ 	+s   B22B;c                    t        j                  d      }t        j                  t        d            }t        j                  d t        d      z   }t        j
                  d|      }t        j                  ||||      }| j                  t         j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   r'  r   r   r   r(  r+  s         rC   *test_sk_from_der_garbage_after_privkey_oidz0ECDSA.test_sk_from_der_garbage_after_privkey_oid  s    $$Q'--a
m<	2Qy\A**1m<	''[)]
	 s001 	+	*	+ 	+ 	+s   B>>Cc                 `   t        j                  d      }t        j                  t        d            }t        j                  d }t        j
                  d|      }t        j                  ||||      }t        j                  |      }| j                  |j                  j                  d       y )Nr   r'  r   r   r
  )r9   r   r)  r   r   r*  r   r   r   ru   r   r   )rc   r"  r,  r   r-  r   r   s          rC   #test_sk_from_der_with_short_privkeyz)ECDSA.test_sk_from_der_with_short_privkey  s    $$Q'--a
m<(CD**1m<	''[)]
	   +55s;rB   c                    t        j                  d      }t        j                  t        j                  dddddd      t        j                  ddddddd            }t        j                  t        j                  t        j                  d      t        j                  d                  }t        j                  |||      }| j                  t         j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   r   	r9   r   r   r   r)  r`   r   r   r   rc   r"  algorithm_derr,  r   s        rC   &test_sk_from_p8_der_with_wrong_versionz,ECDSA.test_sk_from_p8_der_with_wrong_version  s    $$Q'++NN1aeQ2NN1aeQ15
 --""1%s'>'>{'K

 ''L	s001 	+	*	+ 	+ 	+s   "DD
c                    t        j                  d      }t        j                  t        j                  ddd      t        j                  ddddddd            }t        j                  t        j                  t        j                  d      t        j                  d                  }t        j                  |||      }| j                  t         j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   r   r4  r5  s        rC   (test_sk_from_p8_der_with_wrong_algorithmz.ECDSA.test_sk_from_p8_der_with_wrong_algorithm  s    $$Q'++NN1a#S^^Aq#uaA%N
 --""1%s'>'>{'K

 ''L	s001 	+	*	+ 	+ 	+s   C>>Dc                 B   t        j                  d      }t        j                  t        j                  dddddd      t        j                  ddddddd      t        j                  d            }t        j                  t        j                  t        j                  d      t        j                  d                  }t        j                  |||      }| j                  t         j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r      junkr   r4  r5  s        rC   6test_sk_from_p8_der_with_trailing_junk_after_algorithmz<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 	+	*	+ 	+ 	+s   6DDc                 n   t        j                  d      }t        j                  t        j                  dddddd      t        j                  ddddddd            }t        j                  t        j                  t        j                  d      t        j                  d            t        j                  d      z         }t        j                  |||t        j                  d            }| j                  t         j                        5  t        j                  |       d d d        y # 1 sw Y   y xY w)	Nr   r   r   r   r   r   i  r;  r4  r5  s        rC   0test_sk_from_p8_der_with_trailing_junk_after_keyz6ECDSA.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 	+	*	+ 	+ 	+s   D++D4c                     t        j                  d      }| j                  t              5  |j	                  t        d      dz         d d d        y # 1 sw Y   y xY w)N      ÿ@   )r   ro   r`   r   sign_digestr   r   s     rC   test_sign_with_too_long_hashz"ECDSA.test_sign_with_too_long_hashU  sI    ,,R0~. 	+NN1V9r>*	+ 	+ 	+s   AAc                    t        j                  t        t              }t	        d      }|j                  |      }t        j                  |j                         j                         t        t              }| j                  |j                  ||             t        j                  t              }|j                  |t              }t        j                  |j                         j                         t        t              }| j                  |j                  ||             t        j                  |j                         j                         t              }| j                  |j                  ||t                     y )Nr   hashfunczsecurity level is 128 bitsr   rG  )r   r[   r&   r   r   r]   r   ra   r\   rb   r^   r_   )	rc   r   rf   rg   r   sk2rx   vk2vk3s	            rC   test_hashfunczECDSA.test_hashfunc[  s     x&A-.ggdm%%  ",,.h
 			#t,-!!1xxvx.&&!!#--/

 	

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

3v
>?rB   c                 D   t         }t        j                  |      }|j                         }t	        d      }|j                  |      }t        j                  |||      }|D ]o  }| j                  |j                  ||             | j                  |j                  |j                         | j                  |j                  |j                         q | j                  |j                  j                  |D cg c]  }|j                  j                   c}       y c c}w )Nr   rY   )r*   r   r[   r\   r   r]   r   from_public_key_recoveryr^   r_   ru   r   default_hashfuncassertInr   r   rc   r   r   r   rf   	signaturerecovered_vksrecovered_vks           rC   test_public_key_recoveryzECDSA.test_public_key_recoveryr  s      u-!!# }GGDM	 %==tU

 * 	LOOL//	4@A RXX|'9'9:##\%B%B	 	IIOO;HI<\  &&I	
Is   8D
c                 P   t         }t        j                  |t              }|j	                         }t        d      }|j                  |      }t        j                  |||t        d      }|D ]i  }| j                  |j                  ||             | j                  |j                  |j                         | j                  t        |j                         k | j                  |j                  j                   |D cg c]  }|j                  j                    c}       y c c}w )NrF  rY   T)rG  allow_truncate)r*   r   r[   r   r\   r   r]   r   rN  r^   r_   ru   r   rO  rP  r   r   rQ  s           rC   )test_public_key_recovery_with_custom_hashz/ECDSA.test_public_key_recovery_with_custom_hash  s      uv>!!# }GGDM	 %==tUVD

 * 	DLOOL//	4@A RXX|'9'9:V\%B%BC	D 	IIOO;HI<\  &&I	
Is   >D#
c                    t        j                  d      }|j                  }t        d      }| j	                  |j                         |       | j	                  |j                  d      |       | j	                  |j                  d      t        d      |z          | j	                  |j                  d      t        d      |d d z          | j	                  |j                  d	      t        d
      |z          y )Nr   L   ààdSÀK¨x !ÕÂÃýÈ cÿû¹Ä)¤z#µìO¶ HQ*r   uncompressed
compressed   hybrid)r   ro   r   r   ru   rb   )rc   r   r   exps       rC   test_encodingzECDSA.test_encoding  s    ,,Y71

 	-e,c2n5qy3Gl3QvYSb5IJh/6SArB   c                 "   t        j                  d      }|j                  }t        d      }t	        j
                  |      }| j                  |j                  j                  |j                  j                         t	        j
                  t        d      |z         }| j                  |j                  j                  |j                  j                         t	        j
                  t        d      |d d z         }| j                  |j                  j                  |j                  j                         t	        j
                  t        d      |z         }| j                  |j                  j                  |j                  j                         y )Nr   rZ  r\  r^  r_  ra  )	r   ro   r   r   r   ra   ru   r   r   )rc   r   r   encfrom_rawfrom_uncompressedfrom_compresseds          rC   test_decodingzECDSA.test_decoding  s   ,,Y71
  ++C0..		@(44QvY_E*1177I&221V9s3Bx3GH//55ryyG(44QvY_E*1177IrB   c                     t        d      }t        j                  |d      }t        j                  d      }| j                  ||j                         y )NM   ààdSÀK¨x !ÕÂÃýÈ cÿû¹Ä)¤z#µìO¶ HQ*r[  valid_encodingsr   )r   r   ra   r   ro   ru   r   )rc   re  r   r   s       rC   )test_uncompressed_decoding_as_only_alowedz/ECDSA.test_uncompressed_decoding_as_only_alowed  sL    1
 %%c;LM,,Y7R--.rB   c                     t        d      }| j                  t              5 }t        j                  |d       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)NrZ  r`  rm  r`  r   r`   r   r   ra   rP  str	exceptionrc   re  rb  s      rC   %test_raw_decoding_with_blocked_formatz+ECDSA.test_raw_decoding_with_blocked_format  sf    1

 23 	Gs$$S+F	G 	hCMM 23	G 	G   A''A0c                     | j                  t              5 }t        j                  dd       d d d        | j	                  dt        j                               y # 1 sw Y   /xY w)NrB   )r   foobarrm  zOnly uncompressed, compressed)r`   r   r   ra   rP  rs  rt  )rc   es     rC   !test_decoding_with_unknown_formatz'ECDSA.test_decoding_with_unknown_format  sV    z* 	Ma$$S:KL	M 	5s1;;7GH	M 	Ms   AA%c                     t        d      }| j                  t              5 }t        j                  |d       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)Nrk  rq  rm  Invalid X9.62 encodingrr  ru  s      rC   .test_uncompressed_decoding_with_blocked_formatz4ECDSA.test_uncompressed_decoding_with_blocked_format  sg    1
 23 	Gs$$S+F	G 	.CMM0BC	G 	Grw  c                     t        d      }| j                  t              5 }t        j                  |d       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)NuM   ààdSÀK¨x !ÕÂÃýÈ cÿû¹Ä)¤z#µìO¶ HQ*rl  rm  r}  rr  ru  s      rC   (test_hybrid_decoding_with_blocked_formatz.ECDSA.test_hybrid_decoding_with_blocked_format   sh    1
 23 	Ms$$S:KL	M 	.CMM0BC	M 	Mrw  c                     t        d      d d }| j                  t              5 }t        j                  |d       d d d        | j                  dt        j                               y # 1 sw Y   /xY w)NuM   ààdSÀK¨x !ÕÂÃýÈ cÿû¹Ä)¤z#µìO¶ HQ*   )r`  r   rm  z(hybrid, raw)rr  ru  s      rC   ,test_compressed_decoding_with_blocked_formatz2ECDSA.test_compressed_decoding_with_blocked_format  ss    1

 2 23 	Ms$$S:KL	M 	os3=='9:	M 	Ms   A**A3c                     t        d      }| j                  t              5  t        j                  t        d      |z          d d d        y # 1 sw Y   y xY w)NrZ  r^  r   r`   r   r   ra   rc   re  s     rC   )test_decoding_with_malformed_uncompressedz/ECDSA.test_decoding_with_malformed_uncompressed  M    1
 23 	6$$QvY_5	6 	6 	6   "AAc                     t        d      }| j                  t              5  t        j                  t        d      |d d z          d d d        y # 1 sw Y   y xY w)NrZ  r  r_  r  r  s     rC   'test_decoding_with_malformed_compressedz-ECDSA.test_decoding_with_malformed_compressed"  sT    1
 23 	;$$QvYSb%9:	; 	; 	;   %AAc                     t        d      }| j                  t              5  t        j                  t        d      |z          d d d        y # 1 sw Y   y xY w)NrZ  r  r  s     rC   &test_decoding_with_inconsistent_hybridz,ECDSA.test_decoding_with_inconsistent_hybrid,  r  r  c                     t        d      }| j                  t              5  t        j                  |d d t        d      z          d d d        y # 1 sw Y   y xY w)NrZ  /   r  r  r  s     rC   %test_decoding_with_point_not_on_curvez+ECDSA.test_decoding_with_point_not_on_curve6  sT    1
 23 	;$$S"X&	%9:	; 	; 	;r  c                     | j                  t              5  t        j                  t	        d             d d d        y # 1 sw Y   y xY w)Nr  )r`   r   r   ra   r   r~   s    rC   $test_decoding_with_point_at_infinityz*ECDSA.test_decoding_with_point_at_infinity@  s8    23 	0$$QvY/	0 	0 	0r  c                 (   t        t        j                  j                         t        j                  j                         dz         }| j	                  t
              5  t        j                  t        d      |z          d d d        y # 1 sw Y   y xY w)Nr   r^  )	r   r$   r   rS   r`   r   r   ra   r   r  s     rC   test_not_lying_on_curvezECDSA.test_not_lying_on_curveE  sg    x~~//18>>3C3C3E3IJ23 	6$$QvY_5	6 	6 	6s   "BBc                    t        dt        j                  t        j                  d      }d|_        d|_        | j                  t              5  t        j                  t        d      dz  |       d d d        y # 1 sw Y   y xY w)Ntestr   r   rl       r  r   r;   	curve_192generator_192r   r   r`   r   r   ra   r   rc   r   s     rC   9test_from_string_with_invalid_curve_too_short_ver_key_lenz?ECDSA.test_from_string_with_invalid_curve_too_short_ver_key_lenK  i     feoou/B/BFK%'"23 	<$$QvY^U;	< 	< 	<   #A::Bc                    t        dt        j                  t        j                  d      }d|_        d|_        | j                  t              5  t        j                  t        d      dz  |       d d d        y # 1 sw Y   y xY w)Nr  r  rl   r  r  r  s     rC   8test_from_string_with_invalid_curve_too_long_ver_key_lenz>ECDSA.test_from_string_with_invalid_curve_too_long_ver_key_lenV  r  r  N)<r>   r?   r@   ri   rz   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  r2  r7  r9  r<  r>  rD  rL  rU  rX  rc  ri  ro  rv  r{  r~  r  r  r  r  r  r  r  r  r  r  rA   rB   rC   rW   rW   R   s,   0%.3
?:O.7*
:43B31
40l0
------M.F:@4/.++
+
+
<+ ++"+,+@.
B
>BJ,
/	4I
D
D
;6;6;0
6	<	<rB   rW   zval,even   )TFc                     t        | t        j                        }|rt        d      |z   }nt        d      |z   }	 t	        j
                  |      }t        |t              sJ y # t        $ r Y y w xY w)Nr^  )r   r$   rr   r   r   ra   
isinstancer   )valevenre  r   s       rC   *test_VerifyingKey_decode_with_small_valuesr  b  sh     3
/Ci#oi#o%%c*"l+++ s   'A# #	A/.A/)r   r[  r]  r`  z{0}-{1})idzcurve,encodingc                     t        j                  |       }|j                  }|j                  |      }t	        j
                  ||       }|j                  j                  |j                  j                  k(  sJ y r   )r   r[   r   rb   r   ra   r   r   )r   encodingr   r   encodedfrom_encs         rC   test_VerifyingKey_encode_decoder  ~  s]    			5	)B			Bll8$G''u=H99??hoo33333rB   c                      e Zd Z ed  ed      j                  d      D              Zd Zej                  j                  devd      d        Zej                  j                  d	evd
      d        Zej                  j                  devd      d        Zej                  j                  devd      d        Zej                  j                  devd      d        Zej                  j                  devd      d        Zej                  j                  devd      d        Zej                  j                  devd      d        Zej                  j                  devd      d        Zej                  j                  devd      d        Zej                  j                  devd      d         Zej                  j                  d!evd"      d#        Zej                  j                  d$evd%      d&        Zej                  j                  d'evd(      d)        Zej                  j                  d*evd+      d,        Zej                  j                  d-evd.      d/        Zej                  j                  d0evd1      d2        Zej                  j                  d3evd4      d5        Zej                  j                  d6evd7      d8        Zej                  j                  d9evd:      d;        Zdad<Zej                  j                  devd      d=        Z ej                  j                  d	evd
      d>        Z!ej                  j                  devd      d?        Z"ej                  j                  devd      d@        Z#ej                  j                  devd      dA        Z$ej                  j                  devd      dB        Z%ej                  j                  devd      dC        Z&ej                  j                  devd      dD        Z'ej                  j                  devd      dE        Z(ej                  j                  devd      dF        Z)ej                  j                  devd      dG        Z*ej                  j                  d!evd"      dH        Z+ej                  j                  d$evd%      dI        Z,ej                  j                  d'evd(      dJ        Z-ej                  j                  d*evd+      dK        Z.ej                  j                  d-evd.      dL        Z/ej                  j                  d0evd1      dM        Z0ej                  j                  d3evd4      dN        Z1ej                  j                  d6evd7      dO        Z2ej                  j                  d9evd:      dP        Z3dadQZ4 e       Z5	 dR edS      v r edT dUD              Z5dV Z7ej                  j                  dWe5vdX      dY        Z8ej                  j                  dZe5vd[      d\        Z9d] Z:ej                  j                  dWe5vdX      d^        Z;ej                  j                  dZe5vd[      d_        Z<y`# e6$ r Y w xY w)bOpenSSLc              #   `   K   | ]&  }|j                  d       d   j                          ( yw:r   NrK   r   .0cs     rC   	<genexpr>zOpenSSL.<genexpr>  -      # 	
Q#   ,.ecparam -list_curves
c                     t        d      }|j                         d   j                  d      }|g dk\  rdj                  |      S dj                  |      S )Nversionr   .)10r  z-{0}z-ecdsa-with-{0})rU   rK   format)rc   	hash_namevvss       rC   get_openssl_messagedigest_argz%OpenSSL.get_openssl_messagedigest_arg  sP    	" WWYq\$ ==++$++I66rB   	secp112r1z)system openssl does not support secp112r1reasonc                 ,    | j                  t              S r|   )do_test_from_opensslr    r~   s    rC   test_from_openssl_secp112r1z#OpenSSL.test_from_openssl_secp112r1      
 ((33rB   	secp112r2z)system openssl does not support secp112r2c                 ,    | j                  t              S r|   )r  r!   r~   s    rC   test_from_openssl_secp112r2z#OpenSSL.test_from_openssl_secp112r2  r  rB   	secp128r1z)system openssl does not support secp128r1c                 ,    | j                  t              S r|   )r  r"   r~   s    rC   test_from_openssl_secp128r1z#OpenSSL.test_from_openssl_secp128r1  r  rB   	secp160r1z)system openssl does not support secp160r1c                 ,    | j                  t              S r|   )r  r#   r~   s    rC   test_from_openssl_secp160r1z#OpenSSL.test_from_openssl_secp160r1  r  rB   
prime192v1*system openssl does not support prime192v1c                 ,    | j                  t              S r|   r  r$   r~   s    rC   test_from_openssl_nist192pz"OpenSSL.test_from_openssl_nist192p      
 ((22rB   c                 .    | j                  t        d      S NSHA256r  r~   s    rC   !test_from_openssl_nist192p_sha256z)OpenSSL.test_from_openssl_nist192p_sha256      
 ((8<<rB   	secp224r1z)system openssl does not support secp224r1c                 ,    | j                  t              S r|   )r  r%   r~   s    rC   test_from_openssl_nist224pz"OpenSSL.test_from_openssl_nist224p  r  rB   
prime256v1z*system openssl does not support prime256v1c                 ,    | j                  t              S r|   r  r&   r~   s    rC   test_from_openssl_nist256pz"OpenSSL.test_from_openssl_nist256p  r  rB   c                 .    | j                  t        d      S NSHA384r  r~   s    rC   !test_from_openssl_nist256p_sha384z)OpenSSL.test_from_openssl_nist256p_sha384  r  rB   c                 .    | j                  t        d      S NSHA512r  r~   s    rC   !test_from_openssl_nist256p_sha512z)OpenSSL.test_from_openssl_nist256p_sha512  r  rB   	secp384r1z)system openssl does not support secp384r1c                 ,    | j                  t              S r|   )r  r'   r~   s    rC   test_from_openssl_nist384pz"OpenSSL.test_from_openssl_nist384p  r  rB   	secp521r1z)system openssl does not support secp521r1c                 ,    | j                  t              S r|   )r  r(   r~   s    rC   test_from_openssl_nist521pz"OpenSSL.test_from_openssl_nist521p  r  rB   	secp256k1z)system openssl does not support secp256k1c                 ,    | j                  t              S r|   )r  r)   r~   s    rC   test_from_openssl_secp256k1z#OpenSSL.test_from_openssl_secp256k1  r  rB   brainpoolP160r1z/system openssl does not support brainpoolP160r1c                 ,    | j                  t              S r|   )r  r*   r~   s    rC   !test_from_openssl_brainpoolp160r1z)OpenSSL.test_from_openssl_brainpoolp160r1	      
 ((99rB   brainpoolP192r1z/system openssl does not support brainpoolP192r1c                 ,    | j                  t              S r|   )r  r+   r~   s    rC   !test_from_openssl_brainpoolp192r1z)OpenSSL.test_from_openssl_brainpoolp192r1  r  rB   brainpoolP224r1z/system openssl does not support brainpoolP224r1c                 ,    | j                  t              S r|   )r  r,   r~   s    rC   !test_from_openssl_brainpoolp224r1z)OpenSSL.test_from_openssl_brainpoolp224r1  r  rB   brainpoolP256r1z/system openssl does not support brainpoolP256r1c                 ,    | j                  t              S r|   )r  r-   r~   s    rC   !test_from_openssl_brainpoolp256r1z)OpenSSL.test_from_openssl_brainpoolp256r1  r  rB   brainpoolP320r1z/system openssl does not support brainpoolP320r1c                 ,    | j                  t              S r|   )r  r.   r~   s    rC   !test_from_openssl_brainpoolp320r1z)OpenSSL.test_from_openssl_brainpoolp320r1%  r  rB   brainpoolP384r1z/system openssl does not support brainpoolP384r1c                 ,    | j                  t              S r|   )r  r/   r~   s    rC   !test_from_openssl_brainpoolp384r1z)OpenSSL.test_from_openssl_brainpoolp384r1,  r  rB   brainpoolP512r1z/system openssl does not support brainpoolP512r1c                 ,    | j                  t              S r|   )r  r0   r~   s    rC   !test_from_openssl_brainpoolp512r1z)OpenSSL.test_from_openssl_brainpoolp512r13  r  rB   c           
      N   |j                   }|sJ | j                  |      }t        j                  j	                  d      rt        j                  d       t        j                  d       t        d|z         t        d       t        d      }t        dd      5 }|j                  |       d d d        t        d|z         t        d|z         t        d	d
      5 }|j                         }d d d        t        j                        }t        dd
      5 }|j                         }	d d d        | j                  |j!                  	|t#        t$        j&                  |      t(                     t        d      5 }|j                         }
d d d        t+        j                  
      }|j-                  |t#        t$        j&                  |            }| j                  |j!                  ||t#        t$        j&                  |                   t        d       t        dd
      5 }|j                         }d d d        t+        j                        }| j/                  ||       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   [xY w# 1 sw Y   xY w# 1 sw Y   exY w)Ntz+ecparam -name %s -genkey -out t/privkey.pemz.ec -in t/privkey.pem -pubout -out t/pubkey.pemrf   
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)rG  r  t/privkey.pemrH  zJpkcs8 -topk8 -nocrypt -in t/privkey.pem -outform pem -out t/privkey-p8.pemt/privkey-p8.pem)openssl_namer  ospathisdirshutilrmtreemkdirrU   r   openwritereadr   r   r^   r_   r   hashlibnewr   r   r]   ru   )rc   r   r  	curvenamemdargrf   rz  
pubkey_pemr   r  fpr   rg   privkey_p8_pem
sk_from_p8s                  rC   r  zOpenSSL.do_test_from_openssl:  s=   &&	 229=77==MM#
AIMNDEy,% 	GGDM	DuL	
 	K	
 .$' 	"1J	""":.,% 	ffhG	II i8'	  	
 /" 	aB	  $ggdWW[[)%DgEIIc4''++y*IIJ	
 	C	
 $d+ 	&qVVXN	&((8
Z(M	 		" 	"	 		 		& 	&s<   I'I4J;J&J'I14I>JJJ$c                 .    | j                  t               y r|   )do_test_to_opensslr    r~   s    rC   test_to_openssl_secp112r1z!OpenSSL.test_to_openssl_secp112r1n      
 		*rB   c                 .    | j                  t               y r|   )r.  r!   r~   s    rC   test_to_openssl_secp112r2z!OpenSSL.test_to_openssl_secp112r2u  r0  rB   c                 .    | j                  t               y r|   )r.  r"   r~   s    rC   test_to_openssl_secp128r1z!OpenSSL.test_to_openssl_secp128r1|  r0  rB   c                 .    | j                  t               y r|   )r.  r#   r~   s    rC   test_to_openssl_secp160r1z!OpenSSL.test_to_openssl_secp160r1  r0  rB   c                 .    | j                  t               y r|   r.  r$   r~   s    rC   test_to_openssl_nist192pz OpenSSL.test_to_openssl_nist192p      
 	)rB   c                 0    | j                  t        d       y r  r8  r~   s    rC   test_to_openssl_nist192p_sha256z'OpenSSL.test_to_openssl_nist192p_sha256      
 	(3rB   c                 .    | j                  t               y r|   )r.  r%   r~   s    rC   test_to_openssl_nist224pz OpenSSL.test_to_openssl_nist224p  r:  rB   c                 .    | j                  t               y r|   r.  r&   r~   s    rC   test_to_openssl_nist256pz OpenSSL.test_to_openssl_nist256p  r:  rB   c                 0    | j                  t        d       y r  rA  r~   s    rC   test_to_openssl_nist256p_sha384z'OpenSSL.test_to_openssl_nist256p_sha384  r=  rB   c                 0    | j                  t        d       y r  rA  r~   s    rC   test_to_openssl_nist256p_sha512z'OpenSSL.test_to_openssl_nist256p_sha512  r=  rB   c                 .    | j                  t               y r|   )r.  r'   r~   s    rC   test_to_openssl_nist384pz OpenSSL.test_to_openssl_nist384p  r:  rB   c                 .    | j                  t               y r|   )r.  r(   r~   s    rC   test_to_openssl_nist521pz OpenSSL.test_to_openssl_nist521p  r:  rB   c                 .    | j                  t               y r|   )r.  r)   r~   s    rC   test_to_openssl_secp256k1z!OpenSSL.test_to_openssl_secp256k1  r0  rB   c                 .    | j                  t               y r|   )r.  r*   r~   s    rC   test_to_openssl_brainpoolp160r1z'OpenSSL.test_to_openssl_brainpoolp160r1      
 	0rB   c                 .    | j                  t               y r|   )r.  r+   r~   s    rC   test_to_openssl_brainpoolp192r1z'OpenSSL.test_to_openssl_brainpoolp192r1  rO  rB   c                 .    | j                  t               y r|   )r.  r,   r~   s    rC   test_to_openssl_brainpoolp224r1z'OpenSSL.test_to_openssl_brainpoolp224r1  rO  rB   c                 .    | j                  t               y r|   )r.  r-   r~   s    rC   test_to_openssl_brainpoolp256r1z'OpenSSL.test_to_openssl_brainpoolp256r1  rO  rB   c                 .    | j                  t               y r|   )r.  r.   r~   s    rC   test_to_openssl_brainpoolp320r1z'OpenSSL.test_to_openssl_brainpoolp320r1  rO  rB   c                 .    | j                  t               y r|   )r.  r/   r~   s    rC   test_to_openssl_brainpoolp384r1z'OpenSSL.test_to_openssl_brainpoolp384r1  rO  rB   c                 .    | j                  t               y r|   )r.  r0   r~   s    rC   test_to_openssl_brainpoolp512r1z'OpenSSL.test_to_openssl_brainpoolp512r1  rO  rB   c                 2   |j                   }|sJ | j                  |      }t        j                  j	                  d      rt        j                  d       t        j                  d       t        j                  |      }|j                         }t        d      }t        dd      5 }|j                  |j                                d d d        t        dd      5 }|j                  |j                                d d d        |j!                  |t#        t$        j&                  |      t(              }	t        dd      5 }|j                  |	       d d d        t        d	d      5 }|j                  |       d d d        t        d
d      5 }|j                  |t        d      z          d d d        | j+                  t,        t.        d|z         t/        d|z         t        dd      5 }|j                  |j                                d d d        t/        d|z         t/        d|z         t        dd      5 }|j                  |j                  d             d d d        t/        d|z         t/        d|z         t        dd      5 }|j                  |j                  d             d d d        t/        d|z         t/        d|z         t        dd      5 }|j                  |j                  dd             d d d        t/        d|z         t/        d|z         y # 1 sw Y   `xY w# 1 sw Y   9xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   _xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w)Nr  r   rf   t/pubkey.derr  r  )rG  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  ra  zCdgst %s -sign t/privkey-p8-explicit.pem -out t/data.sig3 t/data.txt)r  r  r  r  r  r  r   r!  r   r[   r\   r   r"  r#  r   r   r]   r   r%  r&  r   r`   r=   rU   )
rc   r   r  r'  r(  r   r   rf   rz  r  s
             rC   r.  zOpenSSL.do_test_to_openssl  sV   &&	 229=77==MM#
  u-!!#y.$' 	!1GGBIIK 	!.$' 	!1GGBIIK 	!''W[[)4#  
 ,% 	GGG	,% 	GGDM	/4( 	)AGGD1Y<'(	) 	[	
 	X	

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

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

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

 -t4 	GG		J	O	 	Q	
 	L	
I	! 	!	! 	!	 		 		) 	)	! 	!	E 	E	/ 	/	 	sl   ( L& L3 M &MM* M':"M4"N#N&L03L= M
MM$'M14M>N
Nz-rawinzpkeyutl -helpc              #   V   K   | ]!  }|t        d       v r|j                          # yw)zlist -public-key-methodsN)rU   lowerr  s     rC   r  zOpenSSL.<genexpr>R  s,      *$>?? 	*s   '))ED25519ED448c                    |j                   j                         }t        j                  j	                  d      rt        j                  d       t        j                  d       t        j                  |      }|j                         }d}t        dd      5 }|j                  |j                                d d d        t        dd      5 }|j                  |j                                d d d        |j                  |      }t        dd      5 }|j                  |       d d d        t        dd      5 }|j                  |       d d d        t        d	d      5 }|j                  |d
z          d d d        | j!                  t"              5  t%        d       d d d        t%        d       t        j                  d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   gxY w)Nr  r      datar]  r  r  r  r  r^  s   corruptzWpkeyutl -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)nameupperr  r  r  r  r   r!  r   r[   r\   r"  r#  r   r   r]   r`   r=   rU   )rc   r   r'  r   r   rf   rz  rg   s           rC   do_eddsa_test_to_opensslz OpenSSL.do_eddsa_test_to_opensslZ  s   JJ$$&	77==MM#
  u-!!#.$' 	!1GGBIIK 	!.$' 	!1GGBIIK 	! ggdm,% 	GGCL	,% 	GGDM	/4( 	'AGGD:%&	' / 	8	
 	1	

 	c1	! 	!	! 	!
	 		 		' 	'	 	sH    G GG7G)G5HGGG&)G25G>H
ed25519z4system openssl does not support signing with Ed25519c                 ,    | j                  t              S r|   )rk  r1   r~   s    rC   test_to_openssl_ed25519zOpenSSL.test_to_openssl_ed25519  s    
 ,,W55rB   ed448z2system openssl does not support signing with Ed448c                 ,    | j                  t              S r|   )rk  r2   r~   s    rC   test_to_openssl_ed448zOpenSSL.test_to_openssl_ed448  s    
 ,,U33rB   c                    |j                   }t        j                  j                  d      rt	        j
                  d       t        j                  d       d}t        dj                  |             t        d       t        dd      5 }|j                  |       d d d        t        d       t        dd	      5 }|j                         }d d d        t        d
d	      5 }t        j                  |j                               }d d d        | j                  j                  |       |j!                  |       t	        j
                  d       y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   exY w)Nr  rh  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  )ri  r  r  r  r  r   r!  rU   r  r"  r#  r$  r   r   assertIsr   r_   )rc   r   r'  rf   rz  rg   r   s          rC   do_eddsa_test_from_opensslz"OpenSSL.do_eddsa_test_from_openssl  s+   JJ	77==MM#
DKK	

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

 ,% 	&&(C	.$' 	11&&qvvx0B	1 	bhh&
		#tc!	 		 		1 	1s$   	E:E$E'EE$'E0c                 ,    | j                  t              S r|   )rt  r1   r~   s    rC   test_from_openssl_ed25519z!OpenSSL.test_from_openssl_ed25519  s    
 ..w77rB   c                 ,    | j                  t              S r|   )rt  r2   r~   s    rC   test_from_openssl_ed448zOpenSSL.test_from_openssl_ed448  s    
 ..u55rB   N)SHA1)=r>   r?   r@   setrU   rK   OPENSSL_SUPPORTED_CURVESr  pytestmarkskipifr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r/  r2  r4  r6  r9  r<  r?  rB  rD  rF  rH  rJ  rL  rN  rQ  rS  rU  rW  rY  r[  r.  OPENSSL_SUPPORTED_TYPESr=   rk  rn  rq  rt  rv  rx  rA   rB   rC   r  r    s	   "  # #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@  :	: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S
j "e{?33&) *-* '##N [[00E  6	6 [[..C  4	4"H [[00E  8	8 [[..C  6	6O  s   Z8 8[ ?[ r  c                       e Zd Z ed  ed      j                  d      D              Zej                  j                  devd      d        Z
ej                  j                  devd      d        Zy	)
TooSmallCurvec              #   `   K   | ]&  }|j                  d       d   j                          ( ywr  r  r  s     rC   r  zTooSmallCurve.<genexpr>  r  r  r  r  r  r  r  c                    t        j                  t              }t        d      }| j	                  t
              5  |j                  |t        t        j                  d      t        d       d d d        y # 1 sw Y   y xY w)Nr   rf   r  FrG  r  rW  )r   r[   r$   r   r`   r   r]   r   r%  r&  r   )rc   r   rf   s      rC   4test_sign_too_small_curve_dont_allow_truncate_raiseszBTooSmallCurve.test_sign_too_small_curve_dont_allow_truncate_raises  sh    
   x0y~. 	GG h7'$	  	 	 	s   2A66A?c           	         t        j                  t              }|j                         }t	        d      }|j                  |t        t        j                  d      t        d      }| j                  t              5  |j                  ||t        t        j                  d      t        d       d d d        y # 1 sw Y   y xY w)Nr   rf   r  Tr  F)rG  r  rW  )r   r[   r$   r\   r   r]   r   r%  r&  r   r`   r   r_   r   )rc   r   r   rf   r  s        rC   6test_verify_too_small_curve_dont_allow_truncate_raiseszDTooSmallCurve.test_verify_too_small_curve_dont_allow_truncate_raises  s    
   x0!!#y''W[[(3#	  
 ~. 	II h7'$  	 	 	s   <3B88CN)r>   r?   r@   rz  rU   rK   r{  r|  r}  r~  r  r  rA   rB   rC   r  r    s    " #34::4@#  
 [[44;  			 [[44;  	rB   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)DERc                 z   | j                  t        j                  d      t        d             | j                  t        j                  d      t        d             | j                  t        j                  d      t        d             | j                  t        j                  d      t        d             | j                  t        j                  d	      t        d
             d }| j                   |d      dt        d      f       | j                   |d      dt        d      f       | j                   |d      dt        d      f       | j                   |d      dt        d      f       | j                   |d	      d	t        d      f       | j                   |d      dt        d      f       y )Nr   z r   z   zr  u    r  z c                 j    t        j                  t        j                  |       t        d      z         S )Nr   )r9   remove_integerr   r   )ns    rC   r   zDER.test_integer.<locals>.s  s'    %%c&8&8&;ai&GHHrB   r   l	   
~[~e;~pd)ru   r9   r   r   )rc   r   s     rC   test_integerzDER.test_integer  s^   ++A..0AB++A..0AB++C0!N2CD++C0!4F2GH++C0!4F2GH	I 	11V9~.11V9~.3#qy!123#qy!123#qy!12675qyA	
rB   c                 T   | j                  t        j                  d      t        d             | j                  t        j                  d      t        d             | j                  t        j                  d      t        d             | j                  t        j                  d      t        d             d	D ]k  }t        j                  |      t        d
      z   }t        j                  |      \  }}| j                  ||       | j                  ||d  t        d
             m y )Nr   r  r  r  u      u   )r   r   r   r  r  r  r   r   more)ru   r9   encode_numberr   read_numberrc   r  xn1llens        rC   test_numberzDER.test_number  s    **1-qy9**3/6;**3/:?**;7:G > 	2A!!!$qy0Aq)HBR#QtuXqy1		2rB   c                    | j                  t        j                  d      t        d             | j                  t        j                  d      t        d             | j                  t        j                  d      t        d             | j                  t        j                  d      t        d             | j                  t        j                  d	      t        d
             | j                  t        j                  d      t        d             | j                  t        j                  t        d      t        d      z         d       | j                  t        j                  d      t        d             dD ]k  }t        j                  |      t        d      z   }t        j                  |      \  }}| j                  ||       | j                  ||d  t        d             m y )Nr   r  r  r  r  u   r
  u   ÿr  u      u   u   r  )   r   r  )	r   r   r   r  r  r
  r  r  r  )ru   r9   encode_lengthr   read_lengthr  s        rC   test_lengthzDER.test_length  sg   **1-qy9**3/6;**3/:?**3/:?**3/>1BC**;7>9JK:6)BCXN**3/:?@ 	2A!!!$qy0Aq)HBR#QtuXqy1		2rB   c                 >   t        j                  t        d      t        d            t        d      z   }| j                  |t        d             t        j                  |      \  }}| j                  |t        d             | j                  |t        d             y )NABCDEFGHIz0ABCDEFGHIABCDEF)r9   r   r   ru   remove_sequence)rc   r  x1rests       rC   test_sequencezDER.test_sequence!  sw    %!E(3ah>A123&&q)DQx[)qx(rB   c                 \   t        j                  dt        j                        }| j	                  t        |      t        d      t        d      z          t        j                  dt        t        d                  }| j	                  t        |      t        d      t        d      z          y )Nr   a00706052b81040021r   0102030a0b0ca106)r9   r*  r%   encoded_oidru   r   r   r   )rc   r  s     rC   test_constructedzDER.test_constructed(  s{    ""1h&:&:;QvY3C1D%DE""1i.0A&BCQvY>1B%BCrB   N)r>   r?   r@   r  r  r  r  r  rA   rB   rC   r  r    s    
*22)DrB   r  c                   d    e Zd Zd Zd Z e ej                  dddz              d        Zd Z	y	)
Utilc                 6   t         j                  }t        d      D ]:  }d|z  }dD ].  } |||      }| j                  d|cxk  xr |k  nc d||f       0 < | j	                  d |dt
        j                        z  j                         t        d             y )Ni  seed-%d)   r
  r  i  i      r   z%xr   86fa59d73bf0446ae8743cf748fc5ac11d5585a90356417e97155c3bc)	r   r   ranger^   ru   r%   rr   encoder   )rc   ttair   rr   r  s         rC   test_trytryagainzUtil.test_trytryagain0  s    33t 	?Aq=D 
? e$QAu>
?	? 	S0199;HI	
rB   c                     t         j                  }d}d} |||      }t        j                  dk  r| j	                  |d       y | j	                  |d       y )Nr  s   text)r   r         )r   r   sysversion_inforu   )rc   r  rr   r   r  s        rC   test_trytryagain_singlezUtil.test_trytryagain_singleE  sQ    33ef$Q$Q#rB   r   
      )	min_value	max_valuec                     t        j                  d|z        }dD ]<  }t        j                  ||      }| j                  d|cxk  xr |k  nc d||f       > y )Nr  )r  r
  r  r  r  r   r   )r   PRNG	randranger^   )rc   r  r   rr   r  s        rC   test_randrangezUtil.test_randrangeP  sU     ))IM*
 		;E ug6AOOANUNQ5M:		;rB   c                 f   d}t        t        d|      D cg c]  }|df c}      }d|vsJ ||vsJ t        d      D ]*  }d|z  }t        j                  ||      }||xx   dz  cc<   , | j	                  ||dz
            t        d|      D ]  }t        d|d||   dz  z  fz          y c c}w )	Nr  r   r   i@B r  z%3d: %s*d   )dictr  r   r   r^   r   )rc   rr   r  countsr   r  s         rC   OFF_test_prove_uniformityzUtil.OFF_test_prove_uniformity`  s    uQ7!1v78F""w 	Aq=D55dEBA1INI	
 	uqy)*q% 	>A93&)s*:#;<<=	> 8s   B.N)
r>   r?   r@   r  r  r   stintegersr  r  rA   rB   rC   r  r  /  s;    
*	$ ;2;;b#g67; 8;>rB   r  c                   r    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)RFC6979c                 t    t        j                  |j                         |||      }| j                  ||       y r|   )r:   rp   rr   ru   )rc   rq   rv   hsh	hash_funcexpectedactuals          rC   _dozRFC6979._doq  s/    ##IOO$5vy#N6*rB   c           
          | j                  t        j                  t        dd      t	        t        d            j                         t        t        dd             y)zRFC doesn't contain test vectors for SECP256k1 used in bitcoin.
        This vector has been computed by Golang reference implementation instead.rk   rl   sample@8fa1f95d514760e498f28957b824ee6ec39ed64826ff4fecc2b5739ec45b91cdrq   rv   r  r  r  Nr  r)   rq   rn   r   r   rs   r~   s    rC   test_SECP256k1zRFC6979.test_SECP256k1u  sO     	))92>q{#**,R 	 		
rB   c           
          | j                  t        j                  t        dd      t	        t        d            j                         t        t        dd             y )N@cca9fbcc1b41e5a95d369eaa6ddcff73b61a4efaa279cfc6567e8daa39cbaf50rl   r  @2df40ca70e639d89528a6b670d9d48d9165fdc0febc0974056bdce192b8e16a3r  r  r~   s    rC   test_SECP256k1_2zRFC6979.test_SECP256k1_2  sR    ))R q{#**,R 	 	
rB   c           	          | j                  t        j                  dt        t	        d            j                         t        d       y )Nr   Satoshi Nakamotol   ]iHsiNPIz$Nkxke} r  r  r)   rq   r   r   rs   r~   s    rC   test_SECP256k1_3zRFC6979.test_SECP256k1_3  s<    ))q+,-446W 	 	
rB   c           	          | j                  t        j                  dt        t	        d            j                         t        d       y )Nr   zJAll 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    rC   test_SECP256k1_4zRFC6979.test_SECP256k1_4  sA    ))` fhW 	 
	
rB   c           	          | j                  t        j                  dt        t	        d            j                         t        d       y )Nl   @Al 3z~i9nW~ r  l   oTP*(9LM$dhW5Dv8M3r  r  r~   s    rC   test_SECP256k1_5zRFC6979.test_SECP256k1_5  s<    ))Uq+,-446W 	 	
rB   c           	          | j                  t        j                  dt        t	        d            j                         t        d       y )Nl   A hb+Jn p.(d0^y8Wx zAlan Turingl   }:Anq`0=	39pC[AZRr  r  r~   s    rC   test_SECP256k1_6zRFC6979.test_SECP256k1_6  s;    ))Uq'(//1W 	 	
rB   c                     | j                  t        d ddt        dd            t        dd      t        t	        d            t
        t        dd             y )Nr   )4000000000000000000020108A2E0CC0D99F8A5EFrl   )09A4D6792295A7F730FC3F2B49CBC0F62E862272F@AF2BDBE1AA9B6EC1E2ADE1D694F41FC71A831D0268E9891562113D8A62ADD1BF)23AF4074C90A02B3FE61D286D5C87F425E6BDD81Br  )r  r8   rn   r   r   r   r~   s    rC   test_1zRFC6979.test_1  s_    ?D	 BBGV
 DbI 	 	
rB   c           
          | j                  t        j                  t        dd      t	        t        d            j                         t        t        dd             y )N06FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4rl   r  037D7CA00D2C7B0E5E412AC03BD44BA837FDD5B28CD3B0021r  r  r$   rq   rn   r   r   rs   r~   s    rC   test_2zRFC6979.test_2  sL    ((I2NQx[!((*BB 	 	
rB   c           
          | j                  t        j                  t        dd      t	        t        d            j                         t        t        dd             y )Nr  rl   r  032B1B6D7D42A05CB449065727A84804FB1A3E34D8F261496r  r  r$   rq   rn   r   r   rs   r~   s    rC   test_3zRFC6979.test_3  L    ((I2Nq{#**,BB 	 	
rB   c           
          | j                  t        j                  t        dd      t	        t        d            j                         t        t        dd             y )Nr  rl   r  0A2AC7AB055E4F20692D49209544C203A7D1F2C0BFBC75DB1r  r  r$   rq   rn   r
   r   rs   r~   s    rC   test_4zRFC6979.test_4  r  rB   c           
          | j                  t        j                  t        dd      t	        t        d            j                         t        t        dd             y )Nr  rl   r  0D9CF9C3D3297D3260773A1DA7418DB5537AB8DD93DE7FA25r  r  r~   s    rC   test_5zRFC6979.test_5  sK    ((I2NQvY&&(BB 	 	
rB   c           
          | j                  t        j                  t        dd      t	        t        d            j                         t        t        dd             y )Nr  rl   r  05C4CE89CF56D9E7C77C8585339B006B97B5F0680B4306C6Cr  r  r~   s    rC   test_6zRFC6979.test_6  L    ((I2Nqy!((*BB 	 	
rB   c           
          | j                  t        j                  t        dd      t	        t        d            j                         t        t        dd             y )Nr  rl   r  00758753A5254759C7CFBAD2E2D9B0792EEE44136C9480527r  r  r~   s    rC   test_7zRFC6979.test_7  r
  rB   c           
          | j                  t        j                  t        dd      t	        t        d            j                         t        t        dd             y )Nڃ0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538rl   r  ڃ089C071B419E1C2820962321787258469511958E80582E95D8378E0C2CCDB3CB42BEDE42F50E3FA3C71F5A76724281D31D9C89F0F91FC1BE4918DB1C03A5838D0F9r  )r  r(   rq   rn   r   r   rs   r~   s    rC   test_8zRFC6979.test_8  sX    (( V Qx[!((* V 	 	
rB   c           
          | j                  t        j                  t        dd      t	        t        d            j                         t        t        dd             y )Nr  rl   r  ڃ0EDF38AFCAAECAB4383358B34D67C9F2216C8382AAEA44A3DAD5FDC9C32575761793FEF24EB0FC276DFC4F6E3EC476752F043CF01415387470BCBD8678ED2C7E1A0r  )r  r(   rq   rn   r   r   rs   r~   s    rC   test_9zRFC6979.test_9  sX    (( V q{#**, V 	 	
rB   c           
          | j                  t        j                  t        dd      t	        t        d            j                         t        t        dd             y )Nr  rl   r  ڃ16200813020EC986863BEDFC1B121F605C1215645018AEA1A7B215A564DE9EB1B38A67AA1128B80CE391C4FB71187654AAA3431027BFC7F395766CA988C964DC56Dr  )r  r(   rq   rn   r
   r   rs   r~   s    rC   test_10zRFC6979.test_10-  sX    (( V qy!((* V 	 	
rB   N)r>   r?   r@   r  r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r  r  rA   rB   rC   r  r  o  sW    +






&	
	
	
	
	
	



rB   r  c                       e Zd Zd Zy)ECDHc                 B   ||z  }||z  }||z  }| j                  t        |||      |       | j                  t        |||      |       | j                  ||z  ||z  |z  cxk(  xr ||z  |z  cxk(  xr ||z  k(  nc        | j                  t        ||	|
      |       y r|   )ru   r8   r^   )rc   r   rq   dAx_qAy_qAdBx_qBy_qBx_Zy_ZqAqBZs                 rC   r  zECDH._do>  s    )^)^GudD126udD126"WR)#R)# R	
 	uc3/3rB   N)r>   r?   r@   r  rA   rB   rC   r  r  =  s    4rB   r  c                   $    e Zd Zd Zd Zd Zd Zy)RFC6932c                     | j                  t        t        j                  t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        d	d      

       y )N87C4B7A2C8A4BAD1FBB7D79CC0955DB7C6A4660CA64CC4778159B495Erl   8B104A67A6F6E85E14EC1825E1539E8ECDBBF584922367DD88C6BDCF2846D782E7FDB5F60CD8404301AC5949C58EDB26BC68BA07695B750A94863976D4AAE6CD0F6DD18DEFEF55D96569D0507C03E74D6486FFA28FB82A97089A9296147B71B21A4B574E1278245B536F14D8C2B9D07A874E89B900D7C77A709A797276B8CA1BA61BB95B546FC29F862E44D59D25B8312DFD98783F9FB77B9704945A73BEB6DCCBE3B65D0F967DCAB574EB86F800811D64114B1C48C621AB3357CF93F496E4238696A2A012B3C98
r   rq   r  r  r  r  r  r   r!  r"  )r  r4   r,   rq   rn   r~   s    rC   test_brainpoolP224r1zRFC6932.test_brainpoolP224r1P  s    '%//JB JB JB JB JB JB JB JB1 	 	
rB   c                     | j                  t        t        j                  t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        d	d      

       y )N@041EB8B1E2BC681BCE8E39963B2E9FC415B05283313DD1A8BCC055F11AE49699rl   @78028496B5ECAAB3C8B6C12E45DB1E02C9E4D26B4113BC4F015F60C5CCC0D206@A2AE1762A3831C1D20F03F8D1E3C0C39AFE6F09B4D44BBE80CD100987B05F92B@06F5240EACDB9837BC96D48274C8AA834B6C87BA9CC3EEDD81F99A16B8D804D3@8E07E219BA588916C5B06AA30A2F464C2F2ACFC1610A3BE2FB240B635341F0DB@148EA1D7D1E7E54B9555B6C9AC90629C18B63BEE5D7AA6949EBBF47B24FDE40D@05E940915549E9F6A4A75693716E37466ABA79B4BF2919877A16DD2CC2E23708@6BC23B6702BC5A019438CEEA107DAAD8B94232FFBBC350F3B137628FE6FD134Cr1  r  r5   r-   rq   rn   r~   s    rC   test_brainpoolP256r1zRFC6932.test_brainpoolP256r1n      '%//
 
 
 
 
 
 
 M 	 +	
rB   c                     | j                  t        t        j                  t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        d	d      

       y )N`014EC0755B78594BA47FB0A56F6173045B4331E74BA1A6F47322E70D79D828D97E095884CA72B73FDABD5910DF0FA76Arl   `45CB26E4384DAF6FB776885307B9A38B7AD1B5C692E0C32F0125332778F3B8D3F50CA358099B30DEB5EE69A95C058B4E`8173A1C54AFFA7E781D0E1E1D12C0DC2B74F4DF58E4A4E3AF7026C5D32DC530A2CD89C859BB4B4B768497F49AB8CC859`6B461CB79BD0EA519A87D6828815D8CE7CD9B3CAA0B5A8262CBCD550A015C90095B976F3529957506E1224A861711D54`01BF92A92EE4BE8DED1A911125C209B03F99E3161CFCC986DC7711383FC30AF9CE28CA3386D59E2C8D72CE1E7B4666E8`3289C4A3A4FEE035E39BDB885D509D224A142FF9FBCC5CFE5CCBB30268EE47487ED8044858D31D848F7A95C635A347AC`04CC4FF3DCCCB07AF24E0ACC529955B36D7C807772B92FCBE48F3AFE9A2F370A1F98D3FA73FD0C0747C632E12F1423EC`7F465F90BD69AFB8F828A214EB9716D66ABC59F17AF7C75EE7F1DE22AB5D05085F5A01A9382D05BF72D96698FE3FF64Er1  r  r6   r/   rq   rn   r~   s    rC   test_brainpoolP384r1zRFC6932.test_brainpoolP384r1      '%//8
 :
 :
 8
 :
 :
 9
 9M 	 +	
rB   c                     | j                  t        t        j                  t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        d	d      

       y )Nڀ636B6BE0482A6C1C41AA7AE7B245E983392DB94CECEA2660A379CFE159559E357581825391175FC195D28BAC0CF03A7841A383B95C262B983782874CCE6FE333rl   ڀ0562E68B9AF7CBFD5565C6B16883B777FF11C199161ECC427A39D17EC2166499389571D6A994977C56AD8252658BA8A1B72AE42F4FB7532151AFC3EF0971CCDAڀA7CA2D8191E21776A89860AFBC1F582FAA308D551C1DC6133AF9F9C3CAD59998D70079548140B90B1F311AFB378AA81F51B275B2BE6B7DEE978EFC7343EA642Eڀ0AF4E7F6D52EDD52907BB8DBAB3992A0BB696EC10DF11892FF205B66D381ECE72314E6A6EA079CEA06961DBA5AE6422EF2E9EE803A1F236FB96A1799B86E5C8Bڀ5A7954E32663DFF11AE24712D87419F26B708AC2B92877D6BFEE2BFC43714D89BBDB6D24D807BBD3AEB7F0C325F862E8BADE4F74636B97EAACE739E11720D323ڀ96D14621A9283A1BED84DE8DD64836B2C0758B11441179DC0C54C0D49A47C03807D171DD544B72CAAEF7B7CE01C7753E2CAD1A861ECA55A71954EE1BA35E04BEڀ1EE8321A4BBF93B9CF8921AB209850EC9B7066D1984EF08C2BB723236208AC8F1A483E79461A00E0D5F6921CE9D360502F85C812BEDEE23AC5B210E5811B191Eڀ2632095B7B936174B41FD2FAF369B1D18DCADEED7E410A7E251F0831097C50D02CFED02607B6A2D5ADB4C0006008562208631875B58B54ECDA5A4F9FE9EAABA6r1  r  r7   r0   rq   rn   r~   s    rC   test_brainpoolP512r1zRFC6932.test_brainpoolP512r1      '%// 	 ! 	 ! 	  	 ! 	 ! 	  	  	[ 	 3	
rB   N)r>   r?   r@   r2  r=  rI  rU  rA   rB   rC   r'  r'  M  s    
<,
\,
\4
rB   r'  c                       e Zd Zd Zd Zd Zy)RFC7027c                     | j                  t        t        j                  t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        d	d      

       y )N@81DB1EE100150FF2EA338D708271BE38300CB54241D79950F77B063039804F1Drl   @44106E913F92BC02A1705D9953A8414DB95E1AAA49E81D9E85F929A8E3100BE5@8AB4846F11CACCB73CE49CBDD120F5A900A69FD32C272223F789EF10EB089BDC@55E40BC41E37E3E2AD25C3C6654511FFA8474A91A0032087593852D3E7D76BD3@8D2D688C6CF93E1160AD04CC4429117DC2C41825E1E9FCA0ADDD34E6F1B39F7B@990C57520812BE512641E47034832106BC7D3E8DD0E4C7F1136D7006547CEC6A@89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2B@49C27868F4ECA2179BFD7D59B1E3BF34C1DBDE61AE12931648F43E59632504DEr1  r<  r~   s    rC   r=  zRFC7027.test_brainpoolP256r1  r>  rB   c                     | j                  t        t        j                  t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        d	d      

       y )N`1E20F5E048A5886F1F157C74E91BDE2B98C8B52D58E5003D57053FC4B0BD65D6F15EB5D1EE1610DF870795143627D042rl   `68B665DD91C195800650CDD363C625F4E742E8134667B767B1B476793588F885AB698C852D4A6E77A252D6380FCAF068`55BC91A39C9EC01DEE36017B7D673A931236D2F1F5C83942D049E3FA20607493E0D038FF2FD30C2AB67D15C85F7FAA59`032640BC6003C59260F7250C3DB58CE647F98E1260ACCE4ACDA3DD869F74E01F8BA5E0324309DB6A9831497ABAC96670`4D44326F269A597A5B58BBA565DA5556ED7FD9A8A9EB76C25F46DB69D19DC8CE6AD18E404B15738B2086DF37E71D1EB4`62D692136DE56CBE93BF5FA3188EF58BC8A3A0EC6C1E151A21038A42E9185329B5B275903D192F8D4E1F32FE9CC78C48`0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42`0DF213417EBE4D8E40A5F76F66C56470C489A3478D146DECF6DF0D94BAE9E598157290F8756066975F1DB34B2324B7BDr1  rH  r~   s    rC   rI  zRFC7027.test_brainpoolP384r12  rJ  rB   c                     | j                  t        t        j                  t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        dd      t	        d	d      

       y )Nڀ16302FF0DBBB5A8D733DAB7141C1B45ACBC8715939677F6A56850A38BD87BD59B09E80279609FF333EB9D4C061231FB26F92EEB04982A5F1D1764CAD57665422rl   ڀ0A420517E406AAC0ACDCE90FCD71487718D3B953EFD7FBEC5F7F27E28C6149999397E91E029E06457DB2D3E640668B392C2A7E737A7F0BF04436D11640FD09FDڀ72E6882E8DB28AAD36237CD25D580DB23783961C8DC52DFA2EC138AD472A0FCEF3887CF62B623B2A87DE5C588301EA3E5FC269B373B60724F5E82A6AD147FDE7ڀ230E18E1BCC88A362FA54E4EA3902009292F7F8033624FD471B5D8ACE49D12CFABBC19963DAB8E2F1EBA00BFFB29E4D72D13F2224562F405CB80503666B25429ڀ9D45F66DE5D67E2E6DB6E93A59CE0BB48106097FF78A081DE781CDB31FCE8CCBAAEA8DD4320C4119F1E9CD437A2EAB3731FA9668AB268D871DEDA55A5473199Fڀ2FDC313095BCDD5FB3A91636F07A959C8E86B5636A1E930E8396049CB481961D365CC11453A06C719835475B12CB52FC3C383BCE35E27EF194512B71876285FAڀA7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1Fڀ7DB71C3DEF63212841C463E881BDCF055523BD368240E6C3143BD8DEF8B3B3223B95E0F53082FF5E412F4222537A43DF1C6D25729DDB51620A832BE6A26680A2r1  rT  r~   s    rC   rU  zRFC7027.test_brainpoolP512r1`  rV  rB   N)r>   r?   r@   r=  rI  rU  rA   rB   rC   rX  rX    s    ,
\,
\4
rB   rX  z$w, gwx, gwy, k, msg, md, r, s, curve@DC51D3866A15BACDE33D96F992FCA99DA7E6EF0934E7097559C27F1614C88A7F@2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970@6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7D@9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1D5A6DECEs   abc@CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957C@86FA3BB4E26CAD5BF90B7F81899256CE7594BB1EA0C89212748BFF3B3D5B0315z	ECDSA-256`0BEB646634BA87735D77AE4809A0EBEA865535DE4C1E1DCB692E84708E81A5AF62E528C38B2A81B35309668D73524D9F`96281BF8DD5E0525CA049C048D345D3082968D10FEDF5C5ACA0C64E6465A97EA5CE10C9DFEC21797415710721F437922`447688BA94708EB6E2E4D59F6AB6D7EDFF9301D249FE49C33096655F5D502FAD3D383B91C5E7EDAA2B714CC99D5743CA`B4B74E44D71A13D568003D7489908D564C7761E229C58CBFA18950096EB7463B854D7FA992F934D927376285E63414FA`FB017B914E29149432D8BAC29A514640B46F53DDAB2C69948084E2930F1C8F7E08E07C9C63F2D21A07DCB56A6AF56EB3`B263A1305E057F984D38726A1B46874109F417BCA112674C528262A40A629AF1CBB9F516CE0FA7D2FF630863A00E8B9Fz	ECDSA-384ڄ0065FDA3409451DCAB0A0EAD45495112A3D813C17BFD34BDF8C1209D7DF5849120597779060A7FF9D704ADF78B570FFAD6F062E95C7E0C5D5481C5B153B48B375FA1ڄ0151518F1AF0F563517EDD5485190DF95A4BF57B5CBA4CF2A9A3F6474725A35F7AFE0A6DDEB8BEDBCD6A197E592D40188901CECD650699C9B5E456AEA5ADD19052A8ڄ006F3B142EA1BFFF7E2837AD44C9E4FF6D2D34C73184BBAD90026DD5E6E85317D9DF45CAD7803C6C20035B2F3FF63AFF4E1BA64D1C077577DA3F4286C58F0AEAE643ڄ00C1C2B305419F5A41344D7E4359933D734096F556197A9B244342B8B62F46F9373778F9DE6B6497B1EF825FF24F42F9B4A4BD7382CFC3378A540B1B7F0C1B956C2Fڄ0154FD3836AF92D0DCA57DD5341D3053988534FDE8318FC6AAAAB68E2E6F4339B19F2F281A7E0B22C269D93CF8794A9278880ED7DBB8D9362CAEACEE544320552251ڄ017705A7030290D1CEB605A9A1BB03FF9CDD521E87A696EC926C8C10C8362DF4975367101F67D1CF9BCCBF2F3D239534FA509E70AAC851AE01AAC68D62F866472660z	ECDSA-521c	           	      X   t        j                  t        |       |      }	t        j                  t        ||z         |      }
|	j                  |
k(  sJ |	j                  ||t        t        |d            }|t        |      t        |      fk(  sJ |
j                  |||t              sJ y )Nrl   )rG  r  rm   )
r   ra   r   r   r   r]   r   rn   r_   r   )wgwxgwyrm   msgmdrr   r   r   r   rg   s               rC   test_RFC4754_vectorsr    s    x 
			!e	4B		!	!)C#I"6	>Br!!
''#.?3q":'
NC9Q<1...99S#r#4555rB   )f
__future__r   r   	unittest2unittestImportErrorr  r  r  rI   r|  binasciir   r   r%  r   r   r	   r
   	functoolsr   
hypothesisr   hypothesis.strategies
strategiesr  sixr   r   r   keysr   r   r   r   r    r   r   r   r   r   r   r   r   r3   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r;   r4   r5   r6   r7   ellipticcurver8   r9   r:   	Exceptionr=   rU   TestCaserW   r}  parametrizer  r  paramsr   re  appendparamr  ri  r  r  r  r  r  r  r  r'  rX  r  )r  js   00rC   <module>r     s   /  
 
    ' 0 0    " & & * H H  2 2 O O ,     ,  !   	i 	 M<H M<` sCA]C!QCC" 
 
E> 
FLL	(8(8S(IJ	


 )624 34u6h u6p*H%% *Z=D(

 =D@=>8 =>@K
h K
\48 4 q
d q
hS
d S
n *NNNNNN	
 	//////!	
$ 	  -	
?7:v6w:v6]F  | Ds   J< $K<	K	K	