
    id                    P   d dl mZmZmZ 	 d dlZn# e$ r d dlZY nw xY wd dlZd dlZd dl	Z	d dl
Z
d dlZd dlmZmZ d dlZd dlmZ d dlmZmZ d dlmZ d dlmZ ddlmZmZ dd	lmZmZmZ dd
l m!Z! ddl!m"Z"m#Z#m$Z$m%Z%m&Z& ddl!m'Z'm(Z(m)Z) ddl!m*Z*m+Z+m,Z, ddl-m.Z.m/Z/ ddl-m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZIm-Z- ddlJmKZKmLZLmMZMmNZN ddlOmPZP ddl mQZQ ddl mRZR ddl mJZJ  G d deS          ZTi ZUdejV        v rdeUd<   d ZW G d dejX                  ZYe
jZ        [                    dd  e\d          D                       d              Z]g Z^e-D ]FZ_d!D ]AZ`e^a                     e
jb        e_e`d"c                    e_jd        e`          #                     BGe
jZ        [                    d$e^          d%             ZedejV        v re4e:gZ^ne-Z^e
jZ        [                    d&e^          d'             Zfe
jZ        jg         G d( d)ejX                              Zh G d* d+ejX                  Zi G d, d-ejX                  Zj G d. d/ejX                  Zk G d0 d1ejX                  Zl G d2 d3ejX                  Zm G d4 d5em          Zn G d6 d7em          Zoe
jZ        [                    d8 e
jb        d9d:d;d<d=ejp        d>d?e6d@#
  
         e
jb        dAdBdCdDd=ejq        dEdFe7dG#
  
         e
jb        dHdIdJdKd=ejr        dLdMe8dN#
  
        g          dO             ZsdS )P    )with_statementdivisionprint_functionN)hexlify	unhexlify)partial)givensettings)binary_type   )
SigningKeyVerifyingKey)BadSignatureErrorMalformedPointErrorBadDigestError)util)sigencode_dersigencode_stringssigencode_strings_canonizesigencode_string_canonizesigencode_der_canonize)sigdecode_dersigdecode_stringssigdecode_string)number_to_stringencoded_oid_ecPublicKeyMalformedSignature)CurveUnknownCurveError)	SECP112r1	SECP112r2	SECP128r1	SECP160r1NIST192pNIST224pNIST256pNIST384pNIST521p	SECP256k1BRAINPOOLP160r1BRAINPOOLP192r1BRAINPOOLP224r1BRAINPOOLP256r1BRAINPOOLP320r1BRAINPOOLP384r1BRAINPOOLP512r1BRAINPOOLP160t1BRAINPOOLP192t1BRAINPOOLP224t1BRAINPOOLP256t1BRAINPOOLP320t1BRAINPOOLP384t1BRAINPOOLP512t1Ed25519Ed448curves)curve_brainpoolp224r1curve_brainpoolp256r1curve_brainpoolp384r1curve_brainpoolp512r1)Point)der)rfc6979)ecdsac                       e Zd ZdS )SubprocessErrorN)__name__
__module____qualname__     b/var/www/html/crypto-mining-system/backend/venv/lib/python3.11/site-packages/ecdsa/test_pyecdsa.pyrD   rD   J   s        DrI   rD   z--fast   max_examplesc           
      4   d}t          j        |g|                                 z   t           j        t           j                  }|                                \  }}|j        dk    r t          d|d| d|j        d|          |                                S )Nopenssl)stdoutstderrr   zcmd ' z' failed: rc=z, stdout/err was )	
subprocessPopensplitPIPESTDOUTcommunicate
returncoderD   decode)cmdOPENSSLprO   ignoreds        rJ   run_opensslr^   U   s    G		CIIKK 	 	 	A
 mmooOFG|qowwQ\\\663
 
 	
 ==??rI   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d- Z/d. Z0d/ Z1d0 Z2d1 Z3d2 Z4d3 Z5d4 Z6d5 Z7d6 Z8d7 Z9d8 Z:d9 Z;d: Z<d; Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCdB ZDdCS )DECDSAc                    t          j                    }|                                }d}|                    |          }|                     |                    ||                     |                     t          |j        ||dz              t          j	        |
                                          }|                     |                    ||                     d S )N   blahblahs   bad)r   generateget_verifying_keysign
assertTrueverifyassertRaisesr   r   from_string	to_string)selfprivpubdatasigpub2s         rJ   
test_basiczECDSA.test_basicf   s    "$$$$&&iioo

3--...+SZdVmLLL'88C../////rI   c                 H   d}t          dd          }t          j        |t          t          j                  }|                                }t          j        t          j	        
                                |t          j        t	          j        |                                                    }|                    ||          }|                     |                    ||                     |                    ||          }|                     |                    ||                     |                    |t          j                  }|                     |                    ||                     |                     ||           |                     ||           d S )Nrb    9d0219792467d7d37b4d43298a7d0c05   )k)intr   from_secret_exponentr)   hashlibsha256rd   rA   
generate_k	generatororderdigestre   rf   rg   sign_deterministicassertEqual)	rk   rn   secexprl   rm   ru   sig1sig2sig3s	            rJ   test_deterministiczECDSA.test_deterministics   s_   7<<.Iw~
 
 $$&&%%''NN4  ''))	
 
 yyy##

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

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

4..///t$$$t$$$$$rI   c                     |                      t          t                     |                      t          t                     d S N)rh   	TypeErrorr   r   rk   s    rJ   test_bad_usagezECDSA.test_bad_usage   s4    )Z000)\22222rI   c                 P   t           }t          j                    }|                                }|                     t          |                                          |j                   |                    d          }|                     t          |          |j	                   d S )N   data)
r$   r   rc   rd   r   lenrj   verifying_key_lengthre   signature_length)rk   defaultrl   rm   ro   s        rJ   test_lengths_defaultzECDSA.test_lengths_default   s    "$$$$&&S]]__--w/KLLLii  S7#;<<<<<rI   c                    d}t           }t          j        ||j                  }t          j        ||j                  }|                     ||           t          j        ||          }t          j        ||          }|                     t          |                                          t          |                                                     |                     |	                                |	                                           |
                                }|
                                }d}	|                    |	          }
|                    |	          }|                     |                    |
|	                     |                     |                    |
|	                     |                     |                    ||	                     |                     |                    ||	                     |                     t          |                                          t          |                                                     d S )Ns   secretr   )r$   r    randrange_from_seed__trytryagainr|   r   r   rw   r   rj   to_pemrd   re   rf   rg   )rk   seedcurvesecexp1secexp2priv1priv2pub1rp   rn   r   r   s               rJ   test_serializezECDSA.test_serialize   s   7ekJJ7ekJJ'***/??/??EOO%%&&0A0A(B(B	
 	
 	
 	888&&((&&((zz$zz$D$//000D$//000D$//000D$//000!1!122GDNN<L<L4M4MNNNNNrI   c                    dfd}t          j        |          }t          j        |          }|                     t          |                                                                          t          |                                                                                     |                    d|          }|                    d|          }|                     t          |          t          |                     d S )N=   all the entropy in the entire world, compressed into one linec                     d |          S r   rH   numbytesss    rJ   not_much_entropyz.ECDSA.test_nonrandom.<locals>.not_much_entropy       YhY<rI   entropyr   )r   rc   r   r   rd   rj   re   )rk   r   r   r   r   r   r   s         @rJ   test_nonrandomzECDSA.test_nonrandom   s    L	  	  	  	  	  #,<===#,<===E++--7799::E++--7799::	
 	
 	
 zz'+;z<<zz'+;z<<66666rI   c                     |                      |j        j        |j        j                   |                      |j        j        j        |j        j        j                   d S r   )r   privkeysecret_multiplier
public_keyr{   )rk   r   r   s      rJ   assertTruePrivkeysEqualzECDSA.assertTruePrivkeysEqual   sc    M+U]-L	
 	
 	
 	M$.M$.	
 	
 	
 	
 	
rI   c                 b   dfd}t          j                    }|                     |j        t          j                   t          j        t
                    }|                     |j        t
          j                   t          j        |          }|                     |j        t          j                   t          j        |          }|                     |j        t          j                   |                     ||           t          j        d          }|                     |j        t          j                   t          j        d          }|                     ||           t          j        dt
                    }|                     |j        t
          j                   d S )	Nr   c                     d |          S r   rH   r   s    rJ   r   z5ECDSA.test_privkey_creation.<locals>.not_much_entropy   r   rI   r   r      )r      )r   r   )r   rc   r   baselenr$   r%   r   rw   )rk   r   r   r   r   s       @rJ   test_privkey_creationzECDSA.test_privkey_creation   s{   L	  	  	  	  	  #%%(8999#(333(8999#,<===(8999#,<===(8999$$UE222/q999(8999/q999$$UE222/qIII(899999rI   c                 >   t          j                    }|                                }|                     t	          |          t
                     |                     t          |          t          j                   t          j	        |          }| 
                    ||           |                                }|                     t	          |          t
                     |                     |                    d                     |                     |                                                    d                     t          j        |          }| 
                    ||           |                                }|                     t	          |          t
                     t          j        |          }| 
                    ||           t          j        t&                    }|                                }|                     t	          |          t
                     |                     |                    d                     |                     |                                                    d                     t          j        |          }| 
                    ||           |                                }|                     t	          |          t
                     t          j        |          }| 
                    ||           d S )N   -----BEGIN EC PRIVATE KEY-----   -----END EC PRIVATE KEY-----r   )r   rc   rj   r   typer   r   r$   r   ri   r   r   rf   
startswithstripendswithfrom_pemto_derfrom_derr&   rk   r   s1r   s       rJ   test_privkey_stringszECDSA.test_privkey_strings   se   #%%__b;///R("2333&r**$$UE222\\^^b;///&GHHIII

++,KLLMMM#B''$$UE222\\^^b;///#B''$$UE222#(333\\^^b;///&GHHIII

++,KLLMMM#B''$$UE222\\^^b;///#B''$$UE22222rI   c                    t          j        t                    }|                                }|                     t          |          t                     |                     |                    d                     |                     |	                                
                    d                     t          j        |          }|                     ||           |                                }|                     t          |          t                     t          j        |          }|                     ||           d S )Nr   r   r   )r   rc   r0   r   r   r   r   rf   r   r   r   r   r   r   r   r   s       rJ   test_privkey_strings_brainpoolz$ECDSA.test_privkey_strings_brainpool  s   #/:::\\^^b;///&GHHIII

++,KLLMMM#B''$$UE222\\^^b;///#B''$$UE22222rI   c                     |                      |j        j        |j        j                   |                      |j        j        |j        j                   |                      |j        |j                   d S r   )r   pubkeypointr{   r   )rk   r   rp   s      rJ   assertTruePubkeysEqualzECDSA.assertTruePubkeysEqual  sb    *DK,=>>>.0EFFFTZ00000rI   c                    t          j                    }|                                }|                                }|                     t          |          t                     |                     t          |          t          j	                   t          j        |          }|                     ||           t          j        t                    }|                                }|                                }|                     t          |          t                     |                     t          |          t          j	                   t          j        |t                    }|                     ||           |                                }|                     t          |          t                     t          j        |          }|                     ||           |                     t"          j        t          j        |dz              t          j        |          } G d d          } G d d          }t'          d |             |            dd           }	|	|_        |                                }
|                     t*          t          j        |
           |                                }|                     t          |          t                     |                     |                    d	          |           |                     |                                                    d
          |           t          j        |          }|                     ||           d S )Nr      junkc                       e Zd Zd ZdS )0ECDSA.test_pubkey_strings.<locals>.FakeGeneratorc                     dS )N[rH   r   s    rJ   r|   z6ECDSA.test_pubkey_strings.<locals>.FakeGenerator.order;  s     yrI   N)rE   rF   rG   r|   rH   rI   rJ   FakeGeneratorr   :  s#        ! ! ! ! !rI   r   c                       e Zd Zd ZdS ).ECDSA.test_pubkey_strings.<locals>.FakeCurveFpc                      t          d          S )NM65255345290392407050209505469627313404541085228058844382513856749047873406763)rv   r   s    rJ   r\   z0ECDSA.test_pubkey_strings.<locals>.FakeCurveFp.p?  s    ?  rI   N)rE   rF   rG   r\   rH   rI   rJ   FakeCurveFpr   >  s#            rI   r   unknown)r   rK   r   r         s   -----BEGIN PUBLIC KEY-----s   -----END PUBLIC KEY-----)r   rc   rd   rj   r   r   r   r   r$   r   r   ri   r   r&   r   r   rh   r@   UnexpectedDERr   r   r   r   rf   r   r   r   r   )rk   r   r   r   rp   pub1_derbadpubr   r   badcurvebadderpems               rJ   test_pubkey_stringszECDSA.test_pubkey_strings  s   #%%&&((^^b;///R("?@@@'++##D$///#(333&&((^^b;///R("?@@@'(;;;##D$///;;==h555$X..##D$///|4h6H	
 	
 	
 &x00	! 	! 	! 	! 	! 	! 	! 	!	 	 	 	 	 	 	 	 {{}}mmoo7I4
 
  +\-BFKKKkkmmcK000'DEEsKKK		,,-HII3OOO$S))##D$/////rI   c                 b   t          j        t                    }|                                }|                                }|                     t          |          t                     |                     t          |          t          j	                   t          j        |t                    }|                     ||           |                                }|                     t          |          t                     t          j        |          }|                     ||           d S Nr   )r   rc   r0   rd   rj   r   r   r   r   r   r   ri   r   r   r   )rk   r   r   r   rp   r   s         rJ   test_pubkey_strings_brainpoolz#ECDSA.test_pubkey_strings_brainpoolS  s    #/:::&&((^^b;///R/"FGGG'/BBB##D$///;;==h555$X..##D$/////rI   c                     t          j                    }|j        }|                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S Nraw)r   rc   verifying_keyrh   
ValueErrorr   rk   skvks      rJ   *test_vk_to_der_with_invalid_point_encodingz0ECDSA.test_vk_to_der_with_invalid_point_encodinga  s     ""z** 	 	IIe	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                     t          j                    }|                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S r   )r   rc   rh   r   r   rk   r   s     rJ   *test_sk_to_der_with_invalid_point_encodingz0ECDSA.test_sk_to_der_with_invalid_point_encodingh  s     ""z** 	 	IIe	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                 L   t           }t          j        d dz   }t          j        ||          }t          j        dd           }t          j        ||          }|                     t          j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   rK   H  ='  r   r   r      garbage    	r   r@   
encode_oidencode_sequenceencode_bitstringrh   r   r   r   rk   type_oid_dercurve_oid_derenc_type_der	point_der	to_decodes         rJ   (test_vk_from_der_garbage_after_curve_oidz.ECDSA.test_vk_from_der_garbage_after_curve_oidn  s    .N78:E 	 *<GG(d;;	'i@@	s011 	- 	-!),,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-   7BB Bc                 T   t          j        d }t          j        d }t          j        ||          }t          j        dd           }t          j        ||          }|                     t           j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   rK   r   r   r   )r@   r   r   r   rh   r   r   r   r   s         rJ   !test_vk_from_der_invalid_key_typez'ECDSA.test_vk_from_der_invalid_key_typez  s    ~y1(CD*<GG(d;;	'i@@	s011 	- 	-!),,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   ;BB!$B!c                 L   t           }t          j        d }t          j        ||          }t          j        dd           dz   }t          j        ||          }|                     t          j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r   s         rJ   +test_vk_from_der_garbage_after_point_stringz1ECDSA.test_vk_from_der_garbage_after_point_string  s    .(CD*<GG(d;;jH	'i@@	s011 	- 	-!),,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-r   c                 F   t           }t          j        d }t          j        ||          }t          j        dd           }t          j        ||          }|                     t          j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   s   r   r   s         rJ   "test_vk_from_der_invalid_bitstringz(ECDSA.test_vk_from_der_invalid_bitstring  s    .(CD*<GG(d;;	'i@@	s011 	- 	-!),,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-   4BBBc                 <   t           }t          j        d }t          j        ||          }t          j        dd          }t          j        ||          }|                     t                    5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   @   r   )	r   r@   r   r   r   rh   r   r   r   r   s         rJ   0test_vk_from_der_with_invalid_length_of_encodingz6ECDSA.test_vk_from_der_with_invalid_length_of_encoding  s    .(CD*<GG(q99	'i@@	233 	- 	-!),,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   /BBBc                 F   t           }t          j        d }t          j        ||          }t          j        dd          }t          j        ||          }|                     t          j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   s0   r   r   r   s         rJ   "test_vk_from_der_with_raw_encodingz(ECDSA.test_vk_from_der_with_raw_encoding  s    .(CD*<GG(q99	'i@@	s011 	- 	-!),,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-r  c                    t          j                    }|                                }d}|                    |          }|                     t          |          t                     |                     t          |          t          j	                   | 
                    |                    ||                     |                    |t                    }|                     t          |          t                     |                     t          |          d           |                     t          |d                   t                     |                     t          |d                   t                     |                     t          |d                   t          j                   |                     t          |d                   t          j                   | 
                    |                    ||t                               |                    |t                     }|                     t          |          t                     | 
                    |                    ||t"                               d S )Nr   )	sigencoderK   r   r   )	sigdecode)r   rc   rd   re   r   r   r   r   r$   r   rf   rg   r   tupler   r   r   r   )rk   r   r   rn   ro   sig_ders         rJ   test_signature_stringszECDSA.test_signature_strings  s   #%%&&((jjcK000S8#<===C..///jj):j;;cE***S1%%%c!f{333c!f{333SVh&6777SVh&6777C9JKKLLL**T]*;;g444GT]KKLLLLLrI   c                     d}d}t           j        }t          t          |||          |          \  }}|                     ||           |                     ||           d S N   i  r    r|   r   r   r   rk   rr   r|   new_rnew_ss         rJ   (test_sigencode_string_canonize_no_changez.ECDSA.test_sigencode_string_canonize_no_change  sk    '%aE22E
 
u 	E"""E"""""rI   c                     d}t           j        }|dz
  }t          t          |||          |          \  }}|                     ||           |                     ||z
  |           d S Nr  
   r  rk   r  r|   r   r  r  s         rJ   test_sigencode_string_canonizez$ECDSA.test_sigencode_string_canonize  ss    BJ'%aE22E
 
u 	E"""E*****rI   c                     d}d}t           j        }t          t          |||          |          \  }}|                     ||           |                     ||           d S r  r    r|   r   r   r   r  s         rJ   )test_sigencode_strings_canonize_no_changez/ECDSA.test_sigencode_strings_canonize_no_change  sk    (&q!U33U
 
u 	E"""E"""""rI   c                     d}t           j        }|dz
  }t          t          |||          |          \  }}|                     ||           |                     ||z
  |           d S r  r  r  s         rJ   test_sigencode_strings_canonizez%ECDSA.test_sigencode_strings_canonize  ss    BJ(&q!U33U
 
u 	E"""E*****rI   c                     d}d}t           j        }t          t          |||          |          \  }}|                     ||           |                     ||           d S )N      r    r|   r   r   r   r  s         rJ   %test_sigencode_der_canonize_no_changez+ECDSA.test_sigencode_der_canonize_no_change  sk    $"1a//
 
u 	E"""E"""""rI   c                     d}t           j        }|dz
  }t          t          |||          |          \  }}|                     ||           |                     ||z
  |           d S )Nr$     r&  r  s         rJ   test_sigencode_der_canonizez!ECDSA.test_sigencode_der_canonize  ss    BJ$"1a//
 
u 	E"""E*****rI   c                 D   d}t           j        }|dz  dz   }t          |||          }t          |||          }|                     ||           t          t          |||          |          \  }}|                     ||           |                     ||z
  |           d S )Nr$  rK   r   )r    r|   r   r   assertNotEqualr   r   )rk   r  r|   r   regular_encodecanonical_encoder  r  s           rJ   4test_sigencode_der_canonize_with_close_to_half_orderz:ECDSA.test_sigencode_der_canonize_with_close_to_half_order  s    QJN&q!U331!Q>>N,<===$"1a//
 
u 	E"""E*****rI   c                     |                      t                    5  t          g dd           d d d            d S # 1 swxY w Y   d S )N)   one   twos   three   rh   r   r   r   s    rJ   *test_sig_decode_strings_with_invalid_countz0ECDSA.test_sig_decode_strings_with_invalid_count  s    122 	@ 	@888$???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@   ;??c                     |                      t                    5  t          ddgd           d d d            d S # 1 swxY w Y   d S )Nr1  r2  r3  r4  r   s    rJ   (test_sig_decode_strings_with_wrong_r_lenz.ECDSA.test_sig_decode_strings_with_wrong_r_len   s    122 	6 	6vv.555	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6r6  c                     |                      t                    5  t          ddgd           d d d            d S # 1 swxY w Y   d S )N   s   r3  r4  r   s    rJ   (test_sig_decode_strings_with_wrong_s_lenz.ECDSA.test_sig_decode_strings_with_wrong_s_len$  s    122 	< 	<w4d;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<r6  c                     t          j                    }|j        }|                     t                    5  |                    d d           d d d            d S # 1 swxY w Y   d S )Ns                                                                                                                                   )r   rc   r   rh   r   verify_digestr   s      rJ   test_verify_with_too_long_inputz%ECDSA.test_verify_with_too_long_input(  s     ""~.. 	2 	2T=111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   AA Ac                     |                      t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S Nr   )rh   r   r   rw   r   s    rJ   4test_sk_from_secret_exponent_with_wrong_sec_exponentz:ECDSA.test_sk_from_secret_exponent_with_wrong_sec_exponent/  s    233 	/ 	/+A...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/   =AAc                     |                      t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )N   )rh   r   r   ri   r   s    rJ   )test_sk_from_string_with_wrong_len_stringz/ECDSA.test_sk_from_string_with_wrong_len_string3  s    233 	, 	,"7+++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,rB  c                     t          j        d          }t          j        |          dz   }|                     t           j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   r   r@   encode_integerr   rh   r   r   r   rk   ver_derr   s      rJ   )test_sk_from_der_with_junk_after_sequencez/ECDSA.test_sk_from_der_with_junk_after_sequence7  s    $Q'''00:=	s011 	+ 	+	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   A--A14A1c                     t          j        d          }t          j        |          }|                     t           j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S r@  rG  rI  s      rJ   #test_sk_from_der_with_wrong_versionz)ECDSA.test_sk_from_der_with_wrong_version>  s    $Q'''00	s011 	+ 	+	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   A**A.1A.c                 b   t          j        d          }t          j        d          }t          j        d }t          j        d|          }t          j        ||||          }|                     t           j                  5  t          j	        |           d d d            d S # 1 swxY w Y   d S )Nr   r   r   
r@   rH  encode_octet_stringr   encode_constructedr   rh   r   r   r   rk   rJ  privkey_derr   	const_derr   s         rJ   "test_sk_from_der_invalid_const_tagz(ECDSA.test_sk_from_der_invalid_const_tagE  s    $Q''-k::	2*1m<<	'[)]
 
	 s011 	+ 	+	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   B$$B(+B(c                 h   t          j        d          }t          j        d          }t          j        d dz   }t          j        d|          }t          j        ||||          }|                     t           j                  5  t          j	        |           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r   rO  rR  s         rJ   *test_sk_from_der_garbage_after_privkey_oidz0ECDSA.test_sk_from_der_garbage_after_privkey_oidQ  s    $Q''-k::	2Z?*1m<<	'[)]
 
	 s011 	+ 	+	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   B''B+.B+c                 2   t          j        d          }t          j        d          }t          j        d }t          j        d|          }t          j        ||||          }t          j        |          }|                     |j	        j
        d           d S )Nr   r   r   r   r3  )r@   rH  rP  r   rQ  r   r   r   r   r   r   )rk   rJ  rS  r   rT  r   r   s          rJ   #test_sk_from_der_with_short_privkeyz)ECDSA.test_sk_from_der_with_short_privkey]  s    $Q''-k::(CD*1m<<	'[)]
 
	  ++5s;;;;;rI   c                    t          j        d          }t          j        t          j        dddddd          t          j        ddddddd                    }t          j        t          j        t          j        d          t          j        d                              }t          j        |||          }|                     t           j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S )NrK   r   r   r   r   r   	r@   rH  r   r   rP  rh   r   r   r   rk   rJ  algorithm_derrS  r   s        rJ   &test_sk_from_p8_der_with_wrong_versionz,ECDSA.test_sk_from_p8_der_with_wrong_versioni  s5   $Q''+N1aeQ22N1aeQ155
 
 -"1%%s'>{'K'K 
 

 'LL	s011 	+ 	+	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   C;;C?C?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        |||          }|                     t           j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   rK   r   r   r   r   r[  r\  s        rJ   (test_sk_from_p8_der_with_wrong_algorithmz.ECDSA.test_sk_from_p8_der_with_wrong_algorithmy  s.   $Q''+N1a##S^Aq#uaA%N%N
 
 -"1%%s'>{'K'K 
 

 'LL	s011 	+ 	+	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   C88C<?C<c                 6   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        |||          }|                     t           j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S )Nr   rK   r   r   r   r   r   r[  r\  s        rJ   6test_sk_from_p8_der_with_trailing_junk_after_algorithmz<ECDSA.test_sk_from_p8_der_with_trailing_junk_after_algorithm  sC   $Q''+N1aeQ22N1aeQ155#G,,
 

 -"1%%s'>{'K'K 
 

 'LL	s011 	+ 	+	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   ,DDD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        d          z             }t          j        |||t          j        d                    }|                     t           j                  5  t          j        |           d d d            d S # 1 swxY w Y   d S )	Nr   rK   r   r   r   r   i  r   r[  r\  s        rJ   0test_sk_from_p8_der_with_trailing_junk_after_keyz6ECDSA.test_sk_from_p8_der_with_trailing_junk_after_key  sa   $Q''+N1aeQ22N1aeQ155
 
 -"1%%s'>{'K'K   %%&
 
 '#G,,	
 
	 s011 	+ 	+	***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+s   D##D'*D'c                     t          j        d          }|                     t                    5  |                    d           d d d            d S # 1 swxY w Y   d S )Nr  r  )r   rw   rh   r   sign_digestr   s     rJ   test_sign_with_too_long_hashz"ECDSA.test_sign_with_too_long_hash  s    ,R00~.. 	) 	)NN<(((	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	)s   AAAc                    t          j        t          t          j                  }d}|                    |          }t          j        |                                	                                t          t          j                  }| 
                    |                    ||                     t          j        t                    }|                    |t          j                  }t          j        |                                	                                t          t          j                  }| 
                    |                    ||                     t          j        |                                	                                t                    }| 
                    |                    ||t          j                             d S )Nr   hashfuncs   security level is 128 bitsr   rj  )r   rc   r&   rx   ry   re   r   ri   rd   rj   rf   rg   )	rk   r   rn   ro   r   sk2r   vk2vk3s	            rJ   test_hashfunczECDSA.test_hashfunc  sq    x'.III,ggdmm%  "",,..^
 
 

 			#t,,---!111xxw~x66&!!##--//^
 
 

 	

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

3w~
FFGGGGGrI   c                    t           }t          j        |          }|                                }d}|                    |          }t          j        |||          }|D ]k}|                     |                    ||                     | 	                    |j
        |j
                   | 	                    |j        |j                   l|                     |j        j        d |D                        d S )Nr   rb   c                 &    g | ]}|j         j        S rH   r   r   .0recovered_vks     rJ   
<listcomp>z2ECDSA.test_public_key_recovery.<locals>.<listcomp>      III<\ &IIIrI   )r*   r   rc   rd   re   r   from_public_key_recoveryrf   rg   r   r   default_hashfuncassertInr   r   rk   r   r   r   rn   	signaturerecovered_vksru  s           rJ   test_public_key_recoveryzECDSA.test_public_key_recovery  s    u---!!## GGDMM	 %=tU
 

 * 	 	LOOL//	4@@AAA RX|'9:::#\%B   
 	IOII=III	
 	
 	
 	
 	
rI   c                 *   t           }t          j        |t          j                  }|                                }d}|                    |          }t          j        |||t          j        d          }|D ]p}| 	                    |
                    ||                     |                     |j        |j                   |                     t          j        |j                   q|                     |j        j        d |D                        d S )Nri  rb   T)rj  allow_truncatec                 &    g | ]}|j         j        S rH   rr  rs  s     rJ   rv  zCECDSA.test_public_key_recovery_with_custom_hash.<locals>.<listcomp>  rw  rI   )r*   r   rc   rx   ry   rd   re   r   rx  rf   rg   r   r   ry  rz  r   r   r{  s           rJ   )test_public_key_recovery_with_custom_hashz/ECDSA.test_public_key_recovery_with_custom_hash  s    uw~FFF!!## GGDMM	 %=^
 
 
 * 	L 	LLOOL//	4@@AAA RX|'9:::W^\-JKKKK 	IOII=III	
 	
 	
 	
 	
rI   c                    t          j        d          }|j        }d}|                     |                                |           |                     |                    d          |           |                     |                    d          d|z              |                     |                    d          d|d d         z              |                     |                    d	          d
|z              d S )Nr   0   dSKx !ȠcĄ)z#OHQ*r   uncompressed   
compressed      hybrid   )r   rw   r   r   rj   )rk   r   r   exps       rJ   test_encodingzECDSA.test_encoding  s    ,Y772 	
 	---e,,c222n55w}EEEl33Ws3B3x5GHHHh//3?????rI   c                 R   t          j        d          }|j        }d}t          j        |          }|                     |j        j        |j        j                   t          j        d|z             }|                     |j        j        |j        j                   t          j        d|d d         z             }|                     |j        j        |j        j                   t          j        d|z             }|                     |j        j        |j        j                   d S )Nr   r  r  r  r  r  )r   rw   r   r   ri   r   r   r   )rk   r   r   encfrom_rawfrom_uncompressedfrom_compresseds          rJ   test_decodingzECDSA.test_decoding!  s   ,Y772 	  +C00.	@@@(4Ws]CC*17III&27S"X3EFF/5ryGGG(4Ws]CC*17IIIIIrI   c                     d}t          j        |d          }t          j        d          }|                     ||j                   d S )N1   dSKx !ȠcĄ)z#OHQ*r  valid_encodingsr   )r   ri   r   rw   r   r   )rk   r  r   r   s       rJ   )test_uncompressed_decoding_as_only_alowedz/ECDSA.test_uncompressed_decoding_as_only_alowed7  sS    2 	 %c;LMMM,Y77R-.....rI   c                     d}|                      t                    5 }t          j        |d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nr  r  r  r  rh   r   r   ri   rz  str	exceptionrk   r  r  s      rJ   %test_raw_decoding_with_blocked_formatz+ECDSA.test_raw_decoding_with_blocked_formatC  s    2 	
 233 	Gs$S+FFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	hCM 2 233333   A  AAc                     |                      t                    5 }t          j        dd           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )NrI   )r   foobarr  zOnly uncompressed, compressed)rh   r   r   ri   rz  r  r  )rk   es     rJ   !test_decoding_with_unknown_formatz'ECDSA.test_decoding_with_unknown_formatN  s    z** 	Ma$S:KLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	5s1;7G7GHHHHHs   >AAc                     d}|                      t                    5 }t          j        |d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Nr  r  r  Invalid X9.62 encodingr  r  s      rJ   .test_uncompressed_decoding_with_blocked_formatz4ECDSA.test_uncompressed_decoding_with_blocked_formatT  s    2 	 233 	Gs$S+FFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	.CM0B0BCCCCCr  c                     d}|                      t                    5 }t          j        |d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Ns1   dSKx !ȠcĄ)z#OHQ*r  r  r  r  r  s      rJ   (test_hybrid_decoding_with_blocked_formatz.ECDSA.test_hybrid_decoding_with_blocked_format`  s    2 	 233 	Ms$S:KLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	.CM0B0BCCCCCr  c                    t          j        d          }|j        }|                    d          }|                     |d d         d           d|dd          z   }t          j        |dd          }|                     ||           d S )	Nr   r  r   r     r  F)r  validate_point)r   rw   r   rj   r   r   ri   rk   r   r   r  bs        rJ   Atest_hybrid_decoding_with_inconsistent_encoding_and_no_validationzGECDSA.test_hybrid_decoding_with_inconsistent_encoding_and_no_validationl  s     ,Y77ll8$$RaR'***ABB$U
 
 
 	QrI   c                     dd d         }|                      t                    5 }t          j        |d           d d d            n# 1 swxY w Y   |                     dt          |j                             d S )Ns1   dSKx !ȠcĄ)z#OHQ*   )r  r   r  z(hybrid, raw)r  r  s      rJ   ,test_compressed_decoding_with_blocked_formatz2ECDSA.test_compressed_decoding_with_blocked_format|  s    2 2# 233 	Ms$S:KLLLL	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	M 	os3='9'9:::::s   AAAc                     d}|                      t                    5  t          j        d|z              d d d            d S # 1 swxY w Y   d S )Nr  r  rh   r   r   ri   rk   r  s     rJ   )test_decoding_with_malformed_uncompressedz/ECDSA.test_decoding_with_malformed_uncompressed      2 	 233 	4 	4$Ws]333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4   AA	Ac                     d}|                      t                    5  t          j        d|d d         z              d d d            d S # 1 swxY w Y   d S )Nr  rD  r  r  r  s     rJ   'test_decoding_with_malformed_compressedz-ECDSA.test_decoding_with_malformed_compressed  s    2 	 233 	9 	9$Ws3B3x%7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9    A

AAc                     d}|                      t                    5  t          j        d|z              d d d            d S # 1 swxY w Y   d S )Nr  r  r  r  s     rJ   &test_decoding_with_inconsistent_hybridz,ECDSA.test_decoding_with_inconsistent_hybrid  r  r  c                 N   t          j        d          }|j        }|                    d          }|                     |d d         d           d|dd          z   }|                     t                    5  t          j        |d          }d d d            d S # 1 swxY w Y   d S )Ni[r  r   r  r  r  r  )	r   rw   r   rj   r   rh   r   r   ri   r  s        rJ   0test_decoding_with_inconsistent_hybrid_odd_pointz6ECDSA.test_decoding_with_inconsistent_hybrid_odd_point  s    ,Y77ll8$$RaR'***ABB233 	K 	K(kJJJA	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	K 	Ks   6BB!Bc                     d}|                      t                    5  t          j        |d d         dz              d d d            d S # 1 swxY w Y   d S )Nr  /       r  r  s     rJ   %test_decoding_with_point_not_on_curvez+ECDSA.test_decoding_with_point_not_on_curve  s    2 	 233 	9 	9$S"X%7888	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9 	9r  c                     |                      t                    5  t          j        d           d d d            d S # 1 swxY w Y   d S )Nr  r  r   s    rJ   $test_decoding_with_point_at_infinityz*ECDSA.test_decoding_with_point_at_infinity  s    233 	. 	.$W---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.rB  c                 0   t          t          j                                        t          j                                        dz             }|                     t
                    5  t          j        d|z              d d d            d S # 1 swxY w Y   d S )Nr   r  )r   r$   r   r\   rh   r   r   ri   r  s     rJ   test_not_lying_on_curvezECDSA.test_not_lying_on_curve  s    x~//118>3C3C3E3E3IJJ233 	4 	4$Ws]333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   &BBBc                     t          dt          j        t          j        d          }d|_        d|_        |                     t                    5  t          j	        d|           d d d            d S # 1 swxY w Y   d S )Ntestr   rK   rt                          
r   rB   	curve_192generator_192r   r   rh   r   r   ri   rk   r   s     rJ   9test_from_string_with_invalid_curve_too_short_ver_key_lenz?ECDSA.test_from_string_with_invalid_curve_too_short_ver_key_len       feou/BFKK%'"233 	: 	:$\5999	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:   A22A69A6c                     t          dt          j        t          j        d          }d|_        d|_        |                     t                    5  t          j	        d|           d d d            d S # 1 swxY w Y   d S )Nr  r  rt   r  r  r  s     rJ   8test_from_string_with_invalid_curve_too_long_ver_key_lenz>ECDSA.test_from_string_with_invalid_curve_too_long_ver_key_len  r  r  N)ErE   rF   rG   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r	  r  r  r  r   r"  r'  r*  r/  r5  r8  r;  r>  rA  rE  rK  rM  rU  rW  rY  r^  r`  rb  rd  rg  ro  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rH   rI   rJ   r`   r`   e   s       0 0 0% % %83 3 3
= = =O O O.7 7 7*
 
 
: : :43 3 3B3 3 31 1 1
20 20 20h0 0 0    
- 
- 
-- - -- - -- - -- - -- - -M M M.
# 
# 
#
+ 
+ 
+
# 
# 
#
+ 
+ 
+
# 
# 
#
+ 
+ 
++ + +"@ @ @6 6 6< < <2 2 2/ / /, , ,+ + ++ + +
+ 
+ 
+
+ 
+ 
+
< 
< 
<+ + + + + ++ + +"+ + +,) ) )H H H2
 
 
B!
 !
 !
F@ @ @J J J,
/ 
/ 
/	4 	4 	4I I I
D 
D 
D
D 
D 
D      
; 
; 
;4 4 49 9 94 4 4	K 	K 	K9 9 9. . .
4 4 4	: 	: 	:	: 	: 	: 	: 	:rI   r`   zval,evenc                      g | ]}d D ]}||fS ))TFrH   )rt  ijs      rJ   rv  rv    s)    CCCA]CC!QCCCCrI      c                     t          | t          j                  }|rd|z   }nd|z   }	 t          j        |          }t          |t                    sJ d S # t          $ r Y d S w xY w)Nr     )r   r$   r|   r   ri   
isinstancer   )valevenr  r   s       rJ   *test_VerifyingKey_decode_with_small_valuesr    s     3
/
/C mm%c**"l+++++++   s   +A 
A$#A$)r   r  r  r  z{0}-{1})idzcurve,encodingc                     t          j        |           }|j        }|                    |          }t	          j        ||           }|j        j        |j        j        k    sJ d S r   )r   rc   r   rj   r   ri   r   r   )r   encodingr   r   encodedfrom_encs         rJ   test_VerifyingKey_encode_decoder    sc    		5	)	)	)B		Bll8$$G'u===H9?ho3333333rI   r   c                    t          j        |           }|                                }t          j        |                                |           }|                                |                                k    sJ t          |                                          | j        k    sJ |                    d          }t          |          | j	        k    sJ d S )Nr   r   )
r   rc   rd   r   ri   rj   r   r   re   r   )r   rl   r   rp   ro   s        rJ   test_lengthsr    s    U+++D!!##D#DNN$4$4e<<D>>t~~//////t~~  E$>>>>>
))G

Cs88u-------rI   c                      e Zd Z ed  ed                              d          D                       Zd Zej	        j
        ej	                            devd          d                         Zej	        j
        ej	                            d	evd
          d                         Zej	        j
        ej	                            devd          d                         Zej	        j
        ej	                            devd          d                         Zej	        j
        ej	                            devd          d                         Zej	        j
        ej	                            devd          d                         Zej	        j
        ej	                            devd          d                         Zej	        j
        ej	                            devd          d                         Zej	        j
        ej	                            devd          d                         Zej	        j
        ej	                            devd          d                         Zej	        j
        ej	                            devd          d                          Zej	        j
        ej	                            d!evd"          d#                         Zej	        j
        ej	                            d$evd%          d&                         Zej	        j
        ej	                            d'evd(          d)                         Zej	        j
        ej	                            d*evd+          d,                         Zej	        j
        ej	                            d-evd.          d/                         Zej	        j
        ej	                            d0evd1          d2                         Zej	        j
        ej	                            d3evd4          d5                         Zej	        j
        ej	                            d6evd7          d8                         Zej	        j
        ej	                            d9evd:          d;                         Zej	        j
        ej	                            d<evd=          d>                         Z ej	        j
        ej	                            d?evd@          dA                         Z!ej	        j
        ej	                            dBevdC          dD                         Z"ej	        j
        ej	                            dEevdF          dG                         Z#ej	        j
        ej	                            dHevdI          dJ                         Z$ej	        j
        ej	                            dKevdL          dM                         Z%ej	        j
        ej	                            dNevdO          dP                         Z&d~dRZ'ej	        j
        ej	                            devd          dS                         Z(ej	        j
        ej	                            d	evd
          dT                         Z)ej	        j
        ej	                            devd          dU                         Z*ej	        j
        ej	                            devd          dV                         Z+ej	        j
        ej	                            devd          dW                         Z,ej	        j
        ej	                            devd          dX                         Z-ej	        j
        ej	                            devd          dY                         Z.ej	        j
        ej	                            devd          dZ                         Z/ej	        j
        ej	                            devd          d[                         Z0ej	        j
        ej	                            devd          d\                         Z1ej	        j
        ej	                            devd          d]                         Z2ej	        j
        ej	                            d!evd"          d^                         Z3ej	        j
        ej	                            d$evd%          d_                         Z4ej	        j
        ej	                            d'evd(          d`                         Z5ej	        j
        ej	                            d*evd+          da                         Z6ej	        j
        ej	                            d-evd.          db                         Z7ej	        j
        ej	                            d0evd1          dc                         Z8ej	        j
        ej	                            d3evd4          dd                         Z9ej	        j
        ej	                            d6evd7          de                         Z:ej	        j
        ej	                            d9evd:          df                         Z;ej	        j
        ej	                            d<evd=          dg                         Z<ej	        j
        ej	                            d?evd@          dh                         Z=ej	        j
        ej	                            dBevdC          di                         Z>ej	        j
        ej	                            dEevdF          dj                         Z?ej	        j
        ej	                            dHevdI          dk                         Z@ej	        j
        ej	                            dKevdL          dl                         ZAej	        j
        ej	                            dNevdO          dm                         ZBd~dnZC e            ZD	 do edp          v r edq drD                       ZDn# eE$ r Y nw xY wds ZFej	        j
        ej	                            dteDvdu          dv                         ZGej	        j
        ej	                            dweDvdx          dy                         ZHdz ZIej	        j
        ej	                            dteDvdu          d{                         ZJej	        j
        ej	                            dweDvdx          d|                         ZKd}S )OpenSSLc              #   p   K   | ]1}|                     d           d                                         V  2dS :r   NrT   r   rt  cs     rJ   	<genexpr>zOpenSSL.<genexpr>(  P       # # 	
Q# # # # # #rI   ecparam -list_curves
c                     t          d          }|                                d                             d          }|g dk    rd                    |          S d                    |          S )Nversionr   .)10r  z-{0}z-ecdsa-with-{0})r^   rT   format)rk   	hash_namevvss       rJ   get_openssl_messagedigest_argz%OpenSSL.get_openssl_messagedigest_arg-  se    	"" WWYYq\$$  ==+++$++I666rI   	secp112r1z)system openssl does not support secp112r1reasonc                 6    |                      t                    S r   )do_test_from_opensslr    r   s    rJ   test_from_openssl_secp112r1z#OpenSSL.test_from_openssl_secp112r1;       ((333rI   	secp112r2z)system openssl does not support secp112r2c                 6    |                      t                    S r   )r  r!   r   s    rJ   test_from_openssl_secp112r2z#OpenSSL.test_from_openssl_secp112r2C  r  rI   	secp128r1z)system openssl does not support secp128r1c                 6    |                      t                    S r   )r  r"   r   s    rJ   test_from_openssl_secp128r1z#OpenSSL.test_from_openssl_secp128r1K  r  rI   	secp160r1z)system openssl does not support secp160r1c                 6    |                      t                    S r   )r  r#   r   s    rJ   test_from_openssl_secp160r1z#OpenSSL.test_from_openssl_secp160r1S  r  rI   
prime192v1*system openssl does not support prime192v1c                 6    |                      t                    S r   r  r$   r   s    rJ   test_from_openssl_nist192pz"OpenSSL.test_from_openssl_nist192p[       ((222rI   c                 8    |                      t          d          S NSHA256r  r   s    rJ   !test_from_openssl_nist192p_sha256z)OpenSSL.test_from_openssl_nist192p_sha256c       ((8<<<rI   	secp224r1z)system openssl does not support secp224r1c                 6    |                      t                    S r   )r  r%   r   s    rJ   test_from_openssl_nist224pz"OpenSSL.test_from_openssl_nist224pk  r  rI   
prime256v1z*system openssl does not support prime256v1c                 6    |                      t                    S r   r  r&   r   s    rJ   test_from_openssl_nist256pz"OpenSSL.test_from_openssl_nist256ps  r  rI   c                 8    |                      t          d          S NSHA384r  r   s    rJ   !test_from_openssl_nist256p_sha384z)OpenSSL.test_from_openssl_nist256p_sha384{  r  rI   c                 8    |                      t          d          S NSHA512r  r   s    rJ   !test_from_openssl_nist256p_sha512z)OpenSSL.test_from_openssl_nist256p_sha512  r  rI   	secp384r1z)system openssl does not support secp384r1c                 6    |                      t                    S r   )r  r'   r   s    rJ   test_from_openssl_nist384pz"OpenSSL.test_from_openssl_nist384p  r  rI   	secp521r1z)system openssl does not support secp521r1c                 6    |                      t                    S r   )r  r(   r   s    rJ   test_from_openssl_nist521pz"OpenSSL.test_from_openssl_nist521p  r  rI   	secp256k1z)system openssl does not support secp256k1c                 6    |                      t                    S r   )r  r)   r   s    rJ   test_from_openssl_secp256k1z#OpenSSL.test_from_openssl_secp256k1  r  rI   brainpoolP160r1z/system openssl does not support brainpoolP160r1c                 6    |                      t                    S r   )r  r*   r   s    rJ   !test_from_openssl_brainpoolp160r1z)OpenSSL.test_from_openssl_brainpoolp160r1       ((999rI   brainpoolP192r1z/system openssl does not support brainpoolP192r1c                 6    |                      t                    S r   )r  r+   r   s    rJ   !test_from_openssl_brainpoolp192r1z)OpenSSL.test_from_openssl_brainpoolp192r1  r5  rI   brainpoolP224r1z/system openssl does not support brainpoolP224r1c                 6    |                      t                    S r   )r  r,   r   s    rJ   !test_from_openssl_brainpoolp224r1z)OpenSSL.test_from_openssl_brainpoolp224r1  r5  rI   brainpoolP256r1z/system openssl does not support brainpoolP256r1c                 6    |                      t                    S r   )r  r-   r   s    rJ   !test_from_openssl_brainpoolp256r1z)OpenSSL.test_from_openssl_brainpoolp256r1  r5  rI   brainpoolP320r1z/system openssl does not support brainpoolP320r1c                 6    |                      t                    S r   )r  r.   r   s    rJ   !test_from_openssl_brainpoolp320r1z)OpenSSL.test_from_openssl_brainpoolp320r1  r5  rI   brainpoolP384r1z/system openssl does not support brainpoolP384r1c                 6    |                      t                    S r   )r  r/   r   s    rJ   !test_from_openssl_brainpoolp384r1z)OpenSSL.test_from_openssl_brainpoolp384r1  r5  rI   brainpoolP512r1z/system openssl does not support brainpoolP512r1c                 6    |                      t                    S r   )r  r0   r   s    rJ   !test_from_openssl_brainpoolp512r1z)OpenSSL.test_from_openssl_brainpoolp512r1  r5  rI   brainpoolP160t1z/system openssl does not support brainpoolP160t1c                 6    |                      t                    S r   )r  r1   r   s    rJ   !test_from_openssl_brainpoolp160t1z)OpenSSL.test_from_openssl_brainpoolp160t1  r5  rI   brainpoolP192t1z/system openssl does not support brainpoolP192t1c                 6    |                      t                    S r   )r  r2   r   s    rJ   !test_from_openssl_brainpoolp192t1z)OpenSSL.test_from_openssl_brainpoolp192t1  r5  rI   brainpoolP224t1z/system openssl does not support brainpoolP224t1c                 6    |                      t                    S r   )r  r3   r   s    rJ   !test_from_openssl_brainpoolp224t1z)OpenSSL.test_from_openssl_brainpoolp224t1  r5  rI   brainpoolP256t1z/system openssl does not support brainpoolP256t1c                 6    |                      t                    S r   )r  r4   r   s    rJ   !test_from_openssl_brainpoolp256t1z)OpenSSL.test_from_openssl_brainpoolp256t1  r5  rI   brainpoolP320t1z/system openssl does not support brainpoolP320t1c                 6    |                      t                    S r   )r  r5   r   s    rJ   !test_from_openssl_brainpoolp320t1z)OpenSSL.test_from_openssl_brainpoolp320t1  r5  rI   brainpoolP384t1z/system openssl does not support brainpoolP384t1c                 6    |                      t                    S r   )r  r6   r   s    rJ   !test_from_openssl_brainpoolp384t1z)OpenSSL.test_from_openssl_brainpoolp384t1  r5  rI   brainpoolP512t1z/system openssl does not support brainpoolP512t1c                 6    |                      t                    S r   )r  r7   r   s    rJ   !test_from_openssl_brainpoolp512t1z)OpenSSL.test_from_openssl_brainpoolp512t1  r5  rI   SHA1c           
         |j         }|sJ |                     |          }t          j                            d          rt          j        d           t          j        d           t          d|z             t          d           d}t          dd          5 }|
                    |           d d d            n# 1 swxY w Y   t          d|z             t          d|z             t          d	d
          5 }|                                }d d d            n# 1 swxY w Y   t          j        |          }t          dd
          5 }|                                }	d d d            n# 1 swxY w Y   |                     |                    |	|t!          t"          j        |          t&                               t          d          5 }|                                }
d d d            n# 1 swxY w Y   t)          j        |
          }|                    |t!          t"          j        |                    }|                     |                    ||t!          t"          j        |                               t          d           t          dd
          5 }|                                }d d d            n# 1 swxY w Y   t)          j        |          }|                     ||           d S )Ntz+ecparam -name %s -genkey -out t/privkey.pemz.ec -in t/privkey.pem -pubout -out t/pubkey.pemr   
t/data.txtwbz6dgst %s -sign t/privkey.pem -out t/data.sig t/data.txtz=dgst %s -verify t/pubkey.pem -signature t/data.sig t/data.txtt/pubkey.pemrb
t/data.sig)rj  r  t/privkey.pemrk  zJpkcs8 -topk8 -nocrypt -in t/privkey.pem -outform pem -out t/privkey-p8.pemt/privkey-p8.pem)openssl_namer  ospathisdirshutilrmtreemkdirr^   openwritereadr   r   rf   rg   r   rx   newr   r   re   r   )rk   r   r  	curvenamemdargrn   r  
pubkey_pemr   r  fpr   ro   privkey_p8_pem
sk_from_p8s                  rJ   r  zOpenSSL.do_test_from_openssl  s   &	y 229==7== 	M#
AIMNNNDEEE,%% 	GGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	DuL	
 	
 	
 	K	
 	
 	
 .$'' 	"1J	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"":..,%% 	ffhhG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	II i88'	   	
 	
 	
 /"" 	aB	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 $$ggdWW[)%D%DgEEIIc4''+y*I*IIJJ	
 	
 	
 	C	
 	
 	
 $d++ 	&qVVXXN	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&(88
Z(((((sZ   B==CC<DD!$D!E--E14E1G11G58G5!KK	Kc                 :    |                      t                     d S r   )do_test_to_opensslr    r   s    rJ   test_to_openssl_secp112r1z!OpenSSL.test_to_openssl_secp112r1G       		*****rI   c                 :    |                      t                     d S r   )ry  r!   r   s    rJ   test_to_openssl_secp112r2z!OpenSSL.test_to_openssl_secp112r2O  r{  rI   c                 :    |                      t                     d S r   )ry  r"   r   s    rJ   test_to_openssl_secp128r1z!OpenSSL.test_to_openssl_secp128r1W  r{  rI   c                 :    |                      t                     d S r   )ry  r#   r   s    rJ   test_to_openssl_secp160r1z!OpenSSL.test_to_openssl_secp160r1_  r{  rI   c                 :    |                      t                     d S r   ry  r$   r   s    rJ   test_to_openssl_nist192pz OpenSSL.test_to_openssl_nist192pg       	)))))rI   c                 <    |                      t          d           d S r  r  r   s    rJ   test_to_openssl_nist192p_sha256z'OpenSSL.test_to_openssl_nist192p_sha256o        	(33333rI   c                 :    |                      t                     d S r   )ry  r%   r   s    rJ   test_to_openssl_nist224pz OpenSSL.test_to_openssl_nist224pw  r  rI   c                 :    |                      t                     d S r   ry  r&   r   s    rJ   test_to_openssl_nist256pz OpenSSL.test_to_openssl_nist256p  r  rI   c                 <    |                      t          d           d S r"  r  r   s    rJ   test_to_openssl_nist256p_sha384z'OpenSSL.test_to_openssl_nist256p_sha384  r  rI   c                 <    |                      t          d           d S r&  r  r   s    rJ   test_to_openssl_nist256p_sha512z'OpenSSL.test_to_openssl_nist256p_sha512  r  rI   c                 :    |                      t                     d S r   )ry  r'   r   s    rJ   test_to_openssl_nist384pz OpenSSL.test_to_openssl_nist384p  r  rI   c                 :    |                      t                     d S r   )ry  r(   r   s    rJ   test_to_openssl_nist521pz OpenSSL.test_to_openssl_nist521p  r  rI   c                 :    |                      t                     d S r   )ry  r)   r   s    rJ   test_to_openssl_secp256k1z!OpenSSL.test_to_openssl_secp256k1  r{  rI   c                 :    |                      t                     d S r   )ry  r*   r   s    rJ   test_to_openssl_brainpoolp160r1z'OpenSSL.test_to_openssl_brainpoolp160r1       	00000rI   c                 :    |                      t                     d S r   )ry  r+   r   s    rJ   test_to_openssl_brainpoolp192r1z'OpenSSL.test_to_openssl_brainpoolp192r1  r  rI   c                 :    |                      t                     d S r   )ry  r,   r   s    rJ   test_to_openssl_brainpoolp224r1z'OpenSSL.test_to_openssl_brainpoolp224r1  r  rI   c                 :    |                      t                     d S r   )ry  r-   r   s    rJ   test_to_openssl_brainpoolp256r1z'OpenSSL.test_to_openssl_brainpoolp256r1  r  rI   c                 :    |                      t                     d S r   )ry  r.   r   s    rJ   test_to_openssl_brainpoolp320r1z'OpenSSL.test_to_openssl_brainpoolp320r1  r  rI   c                 :    |                      t                     d S r   )ry  r/   r   s    rJ   test_to_openssl_brainpoolp384r1z'OpenSSL.test_to_openssl_brainpoolp384r1  r  rI   c                 :    |                      t                     d S r   )ry  r0   r   s    rJ   test_to_openssl_brainpoolp512r1z'OpenSSL.test_to_openssl_brainpoolp512r1  r  rI   c                 :    |                      t                     d S r   )ry  r1   r   s    rJ   test_to_openssl_brainpoolp160t1z'OpenSSL.test_to_openssl_brainpoolp160t1  r  rI   c                 :    |                      t                     d S r   )ry  r2   r   s    rJ   test_to_openssl_brainpoolp192t1z'OpenSSL.test_to_openssl_brainpoolp192t1  r  rI   c                 :    |                      t                     d S r   )ry  r3   r   s    rJ   test_to_openssl_brainpoolp224t1z'OpenSSL.test_to_openssl_brainpoolp224t1  r  rI   c                 :    |                      t                     d S r   )ry  r4   r   s    rJ   test_to_openssl_brainpoolp256t1z'OpenSSL.test_to_openssl_brainpoolp256t1  r  rI   c                 :    |                      t                     d S r   )ry  r5   r   s    rJ   test_to_openssl_brainpoolp320t1z'OpenSSL.test_to_openssl_brainpoolp320t1  r  rI   c                 :    |                      t                     d S r   )ry  r6   r   s    rJ   test_to_openssl_brainpoolp384t1z'OpenSSL.test_to_openssl_brainpoolp384t1  r  rI   c                 :    |                      t                     d S r   )ry  r7   r   s    rJ   test_to_openssl_brainpoolp512t1z'OpenSSL.test_to_openssl_brainpoolp512t1  r  rI   c                 V   |j         }|sJ |                     |          }t          j                            d          rt          j        d           t          j        d           t          j	        |          }|
                                }d}t          dd          5 }|                    |                                           d d d            n# 1 swxY w Y   t          dd          5 }|                    |                                           d d d            n# 1 swxY w Y   |                    |t!          t"          j        |          t&                    }	t          dd          5 }|                    |	           d d d            n# 1 swxY w Y   t          d	d          5 }|                    |           d d d            n# 1 swxY w Y   t          d
d          5 }|                    |dz              d d d            n# 1 swxY w Y   |                     t*          t,          d|z             t-          d|z             t          dd          5 }|                    |                                           d d d            n# 1 swxY w Y   t-          d|z             t-          d|z             t          dd          5 }|                    |                    d                     d d d            n# 1 swxY w Y   t-          d|z             t-          d|z             t          dd          5 }|                    |                    d                     d d d            n# 1 swxY w Y   t-          d|z             t-          d|z             t          dd          5 }|                    |                    dd                     d d d            n# 1 swxY w Y   t-          d|z             t-          d|z             d S )Nr_  r   r   t/pubkey.derra  rb  )rj  r  rd  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.txtre  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.txtrf  pkcs8)r  z:dgst %s -sign t/privkey-p8.pem -out t/data.sig3 t/data.txtz>dgst %s -verify t/pubkey.pem -signature t/data.sig3 t/data.txtzt/privkey-p8-explicit.pem)r  r  zCdgst %s -sign t/privkey-p8-explicit.pem -out t/data.sig3 t/data.txt)rg  r  rh  ri  rj  rk  rl  rm  r   rc   rd   rn  ro  r   r   re   r   rx   rq  r   rh   rD   r^   )
rk   r   r  rr  rs  r   r   rn   r  r  s
             rJ   ry  zOpenSSL.do_test_to_openssl  st   &	y 229==7== 	M#
 u---!!##.$'' 	!1GGBIIKK   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!.$'' 	!1GGBIIKK   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!''W[)44#  
 
 ,%% 	GGG	 	 	 	 	 	 	 	 	 	 	 	 	 	 	,%% 	GGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	/4(( 	'AGGD:%&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	[	
 	
 	
 	X	
 	
 	

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

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

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

 -t44 	GG		J	OO  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	Q	
 	
 	
 	L	
 	
 	
 	
 	
s   #(CCC2(D&&D*-D*6FFF3GGG0HHH&(JJ!J*LLL*NNN+O::O>O>z-rawinzpkeyutl -helpc              #   `   K   | ])}|t          d           v |                                V  *dS )zlist -public-key-methodsN)r^   lowerr  s     rJ   r  zOpenSSL.<genexpr>w  sJ       * *$>???? 		????* *rI   )ED25519ED448c                    t           j                            d          rt          j        d           t          j        d           t          j        |          }|                                }d}t          dd          5 }|
                    |                                           d d d            n# 1 swxY w Y   t          dd          5 }|
                    |                                           d d d            n# 1 swxY w Y   |                    |          }t          dd          5 }|
                    |           d d d            n# 1 swxY w Y   t          dd          5 }|
                    |           d d d            n# 1 swxY w Y   t          d	d          5 }|
                    |d
z              d d d            n# 1 swxY w Y   |                     t                    5  t!          d           d d d            n# 1 swxY w Y   t!          d           t          j        d           d S )Nr_  r   r   r  ra  rb  rd  r`  r  r  zWpkeyutl -verify -pubin -inkey t/pubkey.pem -rawin -in t/baddata.txt -sigfile t/data.sigzTpkeyutl -verify -pubin -inkey t/pubkey.pem -rawin -in t/data.txt -sigfile t/data.sig)rh  ri  rj  rk  rl  rm  r   rc   rd   rn  ro  r   r   re   rh   rD   r^   )rk   r   r   r   rn   r  ro   s          rJ   do_eddsa_test_to_opensslz OpenSSL.do_eddsa_test_to_openssl  su   7== 	M#
 u---!!##.$'' 	!1GGBIIKK   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!.$'' 	!1GGBIIKK   	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! ggdmm,%% 	GGCLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	,%% 	GGDMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	/4(( 	'AGGD:%&&&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' // 	 	8  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
 	1	
 	
 	

 	csl   (B77B;>B;(DD
D
6EEE3FFF0GGG:HHHed25519z4system openssl does not support signing with Ed25519c                 6    |                      t                    S r   )r  r8   r   s    rJ   test_to_openssl_ed25519zOpenSSL.test_to_openssl_ed25519  s     ,,W555rI   ed448z2system openssl does not support signing with Ed448c                 6    |                      t                    S r   )r  r9   r   s    rJ   test_to_openssl_ed448zOpenSSL.test_to_openssl_ed448  s     ,,U333rI   c                 >   |j         }t          j                            d          rt	          j        d           t          j        d           d}t          d                    |                     t          d           t          dd          5 }|
                    |           d d d            n# 1 swxY w Y   t          d           t          dd	          5 }|                                }d d d            n# 1 swxY w Y   t          d
d	          5 }t          j        |                                          }d d d            n# 1 swxY w Y   |                     |j        |           |                    ||           t	          j        d           d S )Nr_  r   z6genpkey -algorithm {0} -outform PEM -out t/privkey.pemz=pkey -outform PEM -pubout -in t/privkey.pem -out t/pubkey.pemr`  ra  zHpkeyutl -sign -inkey t/privkey.pem -rawin -in t/data.txt -out t/data.sigrd  rc  rb  )namerh  ri  rj  rk  rl  rm  r^   r  rn  ro  rp  r   r   assertIsr   rg   )rk   r   rr  rn   r  ro   r   s          rJ   do_eddsa_test_from_opensslz"OpenSSL.do_eddsa_test_from_openssl  s7   J	7== 	M#
DKK 	
 	
 	

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

 ,%% 	&&((C	 	 	 	 	 	 	 	 	 	 	 	 	 	 	.$'' 	11&qvvxx00B	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	bh&&&
		#tcs6   B44B8;B8C??DD'EEEc                 6    |                      t                    S r   )r  r8   r   s    rJ   test_from_openssl_ed25519z!OpenSSL.test_from_openssl_ed25519  s     ..w777rI   c                 6    |                      t                    S r   )r  r9   r   s    rJ   test_from_openssl_ed448zOpenSSL.test_from_openssl_ed448  s     ..u555rI   N)r]  )LrE   rF   rG   setr^   rT   OPENSSL_SUPPORTED_CURVESr  pytestmarkslowskipifr  r  r  r  r  r  r  r   r$  r(  r+  r.  r1  r4  r8  r;  r>  rA  rD  rG  rJ  rM  rP  rS  rV  rY  r\  r  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  ry  OPENSSL_SUPPORTED_TYPESrD   r  r  r  r  r  r  rH   rI   rJ   r  r    s       $  #s # #344::4@@# # #    
7 7 7 [[33:   4 4	  
4 [[33:   4 4	  
4 [[33:   4 4	  
4 [[33:   4 4	  
4 [[44;   3 3	  
3 [[44;   = =	  
= [[33:   3 3	  
3 [[44;   3 3	  
3 [[44;   = =	  
= [[44;   = =	  
= [[33:   3 3	  
3 [[33:   3 3	  
3 [[33:   4 4	  
4 [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
: [[!99@   : :	  
:2) 2) 2) 2)h [[33:   + +	  
+ [[33:   + +	  
+ [[33:   + +	  
+ [[33:   + +	  
+ [[44;   * *	  
* [[44;   4 4	  
4 [[33:   * *	  
* [[44;   * *	  
* [[44;   4 4	  
4 [[44;   4 4	  
4 [[33:   * *	  
* [[33:   * *	  
* [[33:   + +	  
+ [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1 [[!99@   1 1	  
1S
 S
 S
 S
j "cee{{?3333&)c * *-* * * ' '#
    ! ! !J [[00E   6 6	  
6 [[..C   4 4	  
4" " "H [[00E   8 8	  
8 [[..C   6 6	  
6 6 6s   "q5 5q=<q=r  c                      e Zd Z ed  ed                              d          D                       Zej        	                    devd          d             Z
ej        	                    devd          d             Zd	S )
TooSmallCurvec              #   p   K   | ]1}|                     d           d                                         V  2dS r  r  r  s     rJ   r  zTooSmallCurve.<genexpr>  r  rI   r  r  r  r  r   c                    t          j        t                    }d}|                     t                    5  |                    |t          t          j        d          t          d           d d d            d S # 1 swxY w Y   d S )Nr   r   r  Frj  r  r  )
r   rc   r$   rh   r   re   r   rx   rq  r   )rk   r   rn   s      rJ   4test_sign_too_small_curve_dont_allow_truncate_raiseszBTooSmallCurve.test_sign_too_small_curve_dont_allow_truncate_raises  s    
  x000~.. 	 	GG h77'$	    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   7A;;A?A?c           	         t          j        t                    }|                                }d}|                    |t          t          j        d          t          d          }| 	                    t                    5  |                    ||t          t          j        d          t          d           d d d            d S # 1 swxY w Y   d S )Nr   r   r  Tr  F)rj  r  r  )r   rc   r$   rd   re   r   rx   rq  r   rh   r   rg   r   )rk   r   r   rn   r  s        rJ   6test_verify_too_small_curve_dont_allow_truncate_raiseszDTooSmallCurve.test_verify_too_small_curve_dont_allow_truncate_raises  s   
  x000!!##''W[(33#	  
 
 ~.. 	 	II h77'$    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   8CC
C
N)rE   rF   rG   r  r^   rT   r  r  r  r  r  r  rH   rI   rJ   r  r    s        "s # #344::4@@# # #    
 [44;   	 		 	 [44;    	   rI   r  c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )DERc                    |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d	          d
           d }|                       |d          d           |                       |d          d           |                       |d          d           |                       |d          d           |                       |d	          d           |                       |d          d           d S )Nr   s    r   s      s      s    r  s    c                 T    t          j        t          j        |           dz             S )Nr   )r@   remove_integerrH  )ns    rJ   r   zDER.test_integer.<locals>.s  s#    %c&8&;&;g&EFFFrI   )r   r   )r   r   )r  r   )r  r   )r  r   	   
~[~e;~pd)r  r   )r   r@   rH  )rk   r   s     rJ   test_integerzDER.test_integer  s   +A..@@@+A..@@@+C00/BBB+C002EFFF+C002EFFF	G 	G 	G 	1|,,,1|,,,300030003000A677?	
 	
 	
 	
 	
rI   c                    |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           d	D ]d}t          j        |          d
z   }t          j        |          \  }}|                      ||           |                      ||d          d
           ed S )Nr   r  r     r  s      s   )r   r   rK   r  r  r  r   r      more)r   r@   encode_numberread_numberrk   r  xn1llens        rJ   test_numberzDER.test_number,  s    *1--w777*3//999*3//===*;77EEE > 	0 	0A!!$$w.Aq))HBR###QtuuXw////		0 	0rI   c                 T   |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d	          d
           |                      t          j        d          d           |                      t          j        d          d           |                      t          j        d          d           dD ]d}t          j        |          dz   }t          j        |          \  }}|                      ||           |                      ||d          d           ed S )Nr   r  r  r  r  s   r3  s   r  s      s   s   more)   rK   r  s   )	r   r   rK   r  r  r3  r  r  r  r  )r   r@   encode_lengthread_lengthr  s        rJ   test_lengthzDER.test_length9  s   *1--w777*3//999*3//===*3//===*3//AAA*;77III)>??JJJ*3//===@ 	0 	0A!!$$w.Aq))HBR###QtuuXw////		0 	0rI   c                     t          j        dd          dz   }|                     |d           t          j        |          \  }}|                     |d           |                     |d           d S )Ns   ABCs   DEFs   GHIs   0ABCDEFGHIs   ABCDEF)r@   r   r   remove_sequence)rk   r  x1rests       rJ   test_sequencezDER.test_sequenceH  sv    //&80111&q))DY'''v&&&&&rI   c                    t          j        dt          j                  }|                     t          |          d           t          j        dt          d                    }|                     t          |          d           d S )Nr   s   a00706052b81040021r   s   0102030a0b0cs   a1060102030a0b0c)r@   rQ  r%   encoded_oidr   r   r   )rk   r  s     rJ   test_constructedzDER.test_constructedO  sq    "1h&:;;%@AAA"1i&@&@AA%>?????rI   N)rE   rF   rG   r  r  r  r  r  rH   rI   rJ   r  r    sd        
 
 
*0 0 00 0 0' ' '@ @ @ @ @rI   r  c                       e Zd Zej        j        d             Zd Z ed
i e	 e
 ej        dddz                      d                         Zd Zd	S )Utilc                 :   t           j        }t          d          D ]?}d|z  }dD ]5} |||          }|                     d|cxk    o|k     nc d||f           6@|                     d |dt
          j                  z                                  d           d S )Ni  seed-%d)   r3  r  i  i      r   z%xr   s8   6fa59d73bf0446ae8743cf748fc5ac11d5585a90356417e97155c3bc)r   r   rangerf   r   r%   r|   encode)rk   ttar  r   r|   r  s         rJ   test_trytryagainzUtil.test_trytryagainW  s    3t 	? 	?Aq=D 
? 
? Ce$$QAu>>>>
? 	SS00199;;G	
 	
 	
 	
 	
rI   c                     t           j        }d}d} |||          }t          j        dk     r|                     |d           d S |                     |d           d S )Nr  s   text)r   r         )r   r   sysversion_infor   )rk   r  r|   r   r  s        rJ   test_trytryagain_singlezUtil.test_trytryagain_singlem  sk    3Cef$$Q$$$$$Q#####rI   r   r  r%  )	min_value	max_valuec                     t          j        d|z            }dD ]?}t          j        ||          }|                     d|cxk    o|k     nc d||f           @d S )Nr  )r  r3  r  r  r  r   r   )r   PRNG	randrangerf   )rk   r  r   r|   r  s        rJ   test_randrangezUtil.test_randrangex  sy    
 )IM**
 		; 		;E ug666AOOANNNNUNNNNQ5M::::		; 		;rI   c                    d}t          d t          d|          D                       }d|vsJ ||vsJ t          d          D ],}d|z  }t          j        ||          }||xx         dz  cc<   -|                     ||dz
                      t          d|          D ]"}t          d|d||         d	z  z  fz             #d S )
Nr  c                     g | ]}|d fS )r   rH   )rt  r  s     rJ   rv  z2Util.OFF_test_prove_uniformity.<locals>.<listcomp>  s    777!1v777rI   r   r   i@B r  z%3d: %s*d   )dictr	  r   r   rf   print)rk   r|   countsr  r   r  s         rJ   OFF_test_prove_uniformityzUtil.OFF_test_prove_uniformity  s    77uQ77788F""""w 	 	Aq=D5dEBBA1IIINIIIIuqy)***q% 	= 	=A)q#c)9":;;<<<<	= 	=rI   NrH   )rE   rF   rG   r  r  r  r  r  r
   HYP_SETTINGSr	   stintegersr  r   rH   rI   rJ   r  r  V  s        [
 
 
*	$ 	$ 	$ X
U;2;b#g66677; ; 87 ;= = = = =rI   r  c                   t    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S )RFC6979c                     t          j        |                                |||          }|                     ||           d S r   )rA   rz   r|   r   )rk   r{   r   hsh	hash_funcexpectedactuals          rJ   _dozRFC6979._do  s>    #IOO$5$5vy#NN6*****rI   c           
          |                      t          j        t          dd          t	          j        d                                          t          j        t          dd                     dS )zRFC doesn't contain test vectors for SECP256k1 used in bitcoin.
        This vector has been computed by Golang reference implementation instead.rs   rt      sample@8fa1f95d514760e498f28957b824ee6ec39ed64826ff4fecc2b5739ec45b91cdr{   r   r'  r(  r)  Nr+  r)   r{   rv   rx   ry   r}   r   s    rJ   test_SECP256k1zRFC6979.test_SECP256k1  sn     	)92>>y))0022nR  	 		
 		
 		
 		
 		
rI   c           
          |                      t          j        t          dd          t	          j        d                                          t          j        t          dd                     d S )N@cca9fbcc1b41e5a95d369eaa6ddcff73b61a4efaa279cfc6567e8daa39cbaf50rt   r-  @2df40ca70e639d89528a6b670d9d48d9165fdc0febc0974056bdce192b8e16a3r/  r0  r   s    rJ   test_SECP256k1_2zRFC6979.test_SECP256k1_2  ss    )R  y))0022nR  	 	
 	
 	
 	
 	
rI   c                     |                      t          j        dt          j        d                                          t          j        d           d S )Nr      Satoshi Nakamotol   ]iHsiNPIz$Nkxke} r/  r+  r)   r{   rx   ry   r}   r   s    rJ   test_SECP256k1_3zRFC6979.test_SECP256k1_3  sR    )233::<<nW 	 	
 	
 	
 	
 	
rI   c                     |                      t          j        dt          j        d                                          t          j        d           d S )Nr   sJ   All those moments will be lost in time, like tears in rain. Time to die...l   V1ujcCXxi
nH0G<VHk8r/  r8  r   s    rJ   test_SECP256k1_4zRFC6979.test_SECP256k1_4  sS    )] fhhnW 	 	
 	
 	
 	
 	
rI   c                     |                      t          j        dt          j        d                                          t          j        d           d S )Nl   @Al 3z~i9nW~ r7  l   oTP*(9LM$dhW5Dv8M3r/  r8  r   s    rJ   test_SECP256k1_5zRFC6979.test_SECP256k1_5  sR    )U233::<<nW 	 	
 	
 	
 	
 	
rI   c                     |                      t          j        dt          j        d                                          t          j        d           d S )Nl   A hb+Jn p.(d0^y8Wx s   Alan Turingl   }:Anq`0=	39pC[AZRr/  r8  r   s    rJ   test_SECP256k1_6zRFC6979.test_SECP256k1_6  sQ    )U~..5577nW 	 	
 	
 	
 	
 	
rI   c                     |                      t          d ddt          dd                    t          dd          t          d          t          j        t          dd                     d S )Nr   )4000000000000000000020108A2E0CC0D99F8A5EFrt   )09A4D6792295A7F730FC3F2B49CBC0F62E862272Fs@   AF2BDBE1AA9B6EC1E2ADE1D694F41FC71A831D0268E9891562113D8A62ADD1BF)23AF4074C90A02B3FE61D286D5C87F425E6BDD81Br/  )r+  r?   rv   r   rx   ry   r   s    rJ   test_1zRFC6979.test_1  s    ?DD	  BBGGS  nDbII 	 	
 	
 	
 	
 	
rI   c           
          |                      t          j        t          dd          t	          j        d                                          t          j        t          dd                     d S )N06FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4rt   r-  037D7CA00D2C7B0E5E412AC03BD44BA837FDD5B28CD3B0021r/  r+  r$   r{   rv   rx   sha1r}   r   s    rJ   test_2zRFC6979.test_2  sk    (I2NNY''..00lBB  	 	
 	
 	
 	
 	
rI   c           
          |                      t          j        t          dd          t	          j        d                                          t          j        t          dd                     d S )NrF  rt   r-  032B1B6D7D42A05CB449065727A84804FB1A3E34D8F261496r/  r+  r$   r{   rv   rx   ry   r}   r   s    rJ   test_3zRFC6979.test_3  k    (I2NNy))0022nBB  	 	
 	
 	
 	
 	
rI   c           
          |                      t          j        t          dd          t	          j        d                                          t          j        t          dd                     d S )NrF  rt   r-  0A2AC7AB055E4F20692D49209544C203A7D1F2C0BFBC75DB1r/  r+  r$   r{   rv   rx   sha512r}   r   s    rJ   test_4zRFC6979.test_4  rO  rI   c           
          |                      t          j        t          dd          t	          j        d                                          t          j        t          dd                     d S )NrF  rt      test0D9CF9C3D3297D3260773A1DA7418DB5537AB8DD93DE7FA25r/  rH  r   s    rJ   test_5zRFC6979.test_5  sk    (I2NNW%%,,..lBB  	 	
 	
 	
 	
 	
rI   c           
          |                      t          j        t          dd          t	          j        d                                          t          j        t          dd                     d S )NrF  rt   rV  05C4CE89CF56D9E7C77C8585339B006B97B5F0680B4306C6Cr/  rM  r   s    rJ   test_6zRFC6979.test_6  k    (I2NNw''..00nBB  	 	
 	
 	
 	
 	
rI   c           
          |                      t          j        t          dd          t	          j        d                                          t          j        t          dd                     d S )NrF  rt   rV  00758753A5254759C7CFBAD2E2D9B0792EEE44136C9480527r/  rR  r   s    rJ   test_7zRFC6979.test_7)  r\  rI   c           
          |                      t          j        t          dd          t	          j        d                                          t          j        t          dd                     d S )Nڃ0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538rt   r-  ڃ089C071B419E1C2820962321787258469511958E80582E95D8378E0C2CCDB3CB42BEDE42F50E3FA3C71F5A76724281D31D9C89F0F91FC1BE4918DB1C03A5838D0F9r/  )r+  r(   r{   rv   rx   rI  r}   r   s    rJ   test_8zRFC6979.test_84  sy    ( V  Y''..00l V  	 	
 	
 	
 	
 	
rI   c           
          |                      t          j        t          dd          t	          j        d                                          t          j        t          dd                     d S )Nra  rt   r-  ڃ0EDF38AFCAAECAB4383358B34D67C9F2216C8382AAEA44A3DAD5FDC9C32575761793FEF24EB0FC276DFC4F6E3EC476752F043CF01415387470BCBD8678ED2C7E1A0r/  )r+  r(   r{   rv   rx   ry   r}   r   s    rJ   test_9zRFC6979.test_9C  sy    ( V  y))0022n V  	 	
 	
 	
 	
 	
rI   c           
          |                      t          j        t          dd          t	          j        d                                          t          j        t          dd                     d S )Nra  rt   rV  ڃ16200813020EC986863BEDFC1B121F605C1215645018AEA1A7B215A564DE9EB1B38A67AA1128B80CE391C4FB71187654AAA3431027BFC7F395766CA988C964DC56Dr/  )r+  r(   r{   rv   rx   rS  r}   r   s    rJ   test_10zRFC6979.test_10R  sy    ( V  w''..00n V  	 	
 	
 	
 	
 	
rI   N)rE   rF   rG   r+  r1  r5  r9  r;  r=  r?  rD  rJ  rN  rT  rX  r[  r_  rc  rf  ri  rH   rI   rJ   r%  r%    s       + + +
 
 

 
 

 
 
	
 	
 	

 
 

 
 

 
 
"	
 	
 	
	
 	
 	
	
 	
 	
	
 	
 	
	
 	
 	
	
 	
 	

 
 

 
 

 
 
 
 
rI   r%  c                       e Zd Zd ZdS )ECDHc                 z   ||z  }||z  }||z  }|                      t          |||          |           |                      t          |||          |           |                     ||z  ||z  |z  cxk    o||z  |z  cxk    o||z  k    nc            |                      t          ||	|
          |           d S r   )r   r?   rf   )rk   r   r{   dAx_qAy_qAdBx_qBy_qBx_Zy_ZqAqBZs                 rJ   r+  zECDH._doc  s   )^)^GudD112666udD112666"WR)#   R)#    R   	
 	
 	
 	uc3//33333rI   N)rE   rF   rG   r+  rH   rI   rJ   rk  rk  b  s#        4 4 4 4 4rI   rk  c                   n    e Zd Zd Zd Zej        j        d             Zej        j        d             Z	dS )RFC6932c                 B   |                      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          

  
         d S )N87C4B7A2C8A4BAD1FBB7D79CC0955DB7C6A4660CA64CC4778159B495Ert   8B104A67A6F6E85E14EC1825E1539E8ECDBBF584922367DD88C6BDCF2846D782E7FDB5F60CD8404301AC5949C58EDB26BC68BA07695B750A94863976D4AAE6CD0F6DD18DEFEF55D96569D0507C03E74D6486FFA28FB82A97089A9296147B71B21A4B574E1278245B536F14D8C2B9D07A874E89B900D7C77A709A797276B8CA1BA61BB95B546FC29F862E44D59D25B8312DFD98783F9FB77B9704945A73BEB6DCCBE3B65D0F967DCAB574EB86F800811D64114B1C48C621AB3357CF93F496E4238696A2A012B3C98
r   r{   rm  rn  ro  rp  rq  rr  rs  rt  )r+  r;   r,   r{   rv   r   s    rJ   test_brainpoolP224r1zRFC6932.test_brainpoolP224r1u  s    '%/JB  JB  JB  JB  JB  JB  JB  JB 1 	 	
 	
 	
 	
 	
rI   c                 B   |                      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          

  
         d S )N@041EB8B1E2BC681BCE8E39963B2E9FC415B05283313DD1A8BCC055F11AE49699rt   @78028496B5ECAAB3C8B6C12E45DB1E02C9E4D26B4113BC4F015F60C5CCC0D206@A2AE1762A3831C1D20F03F8D1E3C0C39AFE6F09B4D44BBE80CD100987B05F92B@06F5240EACDB9837BC96D48274C8AA834B6C87BA9CC3EEDD81F99A16B8D804D3@8E07E219BA588916C5B06AA30A2F464C2F2ACFC1610A3BE2FB240B635341F0DB@148EA1D7D1E7E54B9555B6C9AC90629C18B63BEE5D7AA6949EBBF47B24FDE40D@05E940915549E9F6A4A75693716E37466ABA79B4BF2919877A16DD2CC2E23708@6BC23B6702BC5A019438CEEA107DAAD8B94232FFBBC350F3B137628FE6FD134Cr  r+  r<   r-   r{   rv   r   s    rJ   test_brainpoolP256r1zRFC6932.test_brainpoolP256r1      '%/ 
  
  
  
  
  
  
  M 	 +	
 +	
 +	
 +	
 +	
rI   c                 B   |                      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          

  
         d S )N`014EC0755B78594BA47FB0A56F6173045B4331E74BA1A6F47322E70D79D828D97E095884CA72B73FDABD5910DF0FA76Art   `45CB26E4384DAF6FB776885307B9A38B7AD1B5C692E0C32F0125332778F3B8D3F50CA358099B30DEB5EE69A95C058B4E`8173A1C54AFFA7E781D0E1E1D12C0DC2B74F4DF58E4A4E3AF7026C5D32DC530A2CD89C859BB4B4B768497F49AB8CC859`6B461CB79BD0EA519A87D6828815D8CE7CD9B3CAA0B5A8262CBCD550A015C90095B976F3529957506E1224A861711D54`01BF92A92EE4BE8DED1A911125C209B03F99E3161CFCC986DC7711383FC30AF9CE28CA3386D59E2C8D72CE1E7B4666E8`3289C4A3A4FEE035E39BDB885D509D224A142FF9FBCC5CFE5CCBB30268EE47487ED8044858D31D848F7A95C635A347AC`04CC4FF3DCCCB07AF24E0ACC529955B36D7C807772B92FCBE48F3AFE9A2F370A1F98D3FA73FD0C0747C632E12F1423EC`7F465F90BD69AFB8F828A214EB9716D66ABC59F17AF7C75EE7F1DE22AB5D05085F5A01A9382D05BF72D96698FE3FF64Er  r+  r=   r/   r{   rv   r   s    rJ   test_brainpoolP384r1zRFC6932.test_brainpoolP384r1      '%/8 
 : 
 : 
 8 
 : 
 : 
 9 
 9 M 	 +	
 +	
 +	
 +	
 +	
rI   c                 B   |                      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          

  
         d S )Nڀ636B6BE0482A6C1C41AA7AE7B245E983392DB94CECEA2660A379CFE159559E357581825391175FC195D28BAC0CF03A7841A383B95C262B983782874CCE6FE333rt   ڀ0562E68B9AF7CBFD5565C6B16883B777FF11C199161ECC427A39D17EC2166499389571D6A994977C56AD8252658BA8A1B72AE42F4FB7532151AFC3EF0971CCDAڀA7CA2D8191E21776A89860AFBC1F582FAA308D551C1DC6133AF9F9C3CAD59998D70079548140B90B1F311AFB378AA81F51B275B2BE6B7DEE978EFC7343EA642Eڀ0AF4E7F6D52EDD52907BB8DBAB3992A0BB696EC10DF11892FF205B66D381ECE72314E6A6EA079CEA06961DBA5AE6422EF2E9EE803A1F236FB96A1799B86E5C8Bڀ5A7954E32663DFF11AE24712D87419F26B708AC2B92877D6BFEE2BFC43714D89BBDB6D24D807BBD3AEB7F0C325F862E8BADE4F74636B97EAACE739E11720D323ڀ96D14621A9283A1BED84DE8DD64836B2C0758B11441179DC0C54C0D49A47C03807D171DD544B72CAAEF7B7CE01C7753E2CAD1A861ECA55A71954EE1BA35E04BEڀ1EE8321A4BBF93B9CF8921AB209850EC9B7066D1984EF08C2BB723236208AC8F1A483E79461A00E0D5F6921CE9D360502F85C812BEDEE23AC5B210E5811B191Eڀ2632095B7B936174B41FD2FAF369B1D18DCADEED7E410A7E251F0831097C50D02CFED02607B6A2D5ADB4C0006008562208631875B58B54ECDA5A4F9FE9EAABA6r  r+  r>   r0   r{   rv   r   s    rJ   test_brainpoolP512r1zRFC6932.test_brainpoolP512r1      '%/ 	  ! 	  ! 	   	  ! 	  ! 	   	   	 [ 	 3	
 3	
 3	
 3	
 3	
rI   N)
rE   rF   rG   r  r  r  r  r  r  r  rH   rI   rJ   ry  ry  r  sv        
 
 
<,
 ,
 ,
\ [,
 ,
 ,
\ [4
 4
 4
 4
 4
rI   ry  c                   h    e Zd Zd Zej        j        d             Zej        j        d             ZdS )RFC7027c                 B   |                      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          

  
         d S )N@81DB1EE100150FF2EA338D708271BE38300CB54241D79950F77B063039804F1Drt   @44106E913F92BC02A1705D9953A8414DB95E1AAA49E81D9E85F929A8E3100BE5@8AB4846F11CACCB73CE49CBDD120F5A900A69FD32C272223F789EF10EB089BDC@55E40BC41E37E3E2AD25C3C6654511FFA8474A91A0032087593852D3E7D76BD3@8D2D688C6CF93E1160AD04CC4429117DC2C41825E1E9FCA0ADDD34E6F1B39F7B@990C57520812BE512641E47034832106BC7D3E8DD0E4C7F1136D7006547CEC6A@89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2B@49C27868F4ECA2179BFD7D59B1E3BF34C1DBDE61AE12931648F43E59632504DEr  r  r   s    rJ   r  zRFC7027.test_brainpoolP256r1+	  r  rI   c                 B   |                      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          

  
         d S )N`1E20F5E048A5886F1F157C74E91BDE2B98C8B52D58E5003D57053FC4B0BD65D6F15EB5D1EE1610DF870795143627D042rt   `68B665DD91C195800650CDD363C625F4E742E8134667B767B1B476793588F885AB698C852D4A6E77A252D6380FCAF068`55BC91A39C9EC01DEE36017B7D673A931236D2F1F5C83942D049E3FA20607493E0D038FF2FD30C2AB67D15C85F7FAA59`032640BC6003C59260F7250C3DB58CE647F98E1260ACCE4ACDA3DD869F74E01F8BA5E0324309DB6A9831497ABAC96670`4D44326F269A597A5B58BBA565DA5556ED7FD9A8A9EB76C25F46DB69D19DC8CE6AD18E404B15738B2086DF37E71D1EB4`62D692136DE56CBE93BF5FA3188EF58BC8A3A0EC6C1E151A21038A42E9185329B5B275903D192F8D4E1F32FE9CC78C48`0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42`0DF213417EBE4D8E40A5F76F66C56470C489A3478D146DECF6DF0D94BAE9E598157290F8756066975F1DB34B2324B7BDr  r  r   s    rJ   r  zRFC7027.test_brainpoolP384r1Y	  r  rI   c                 B   |                      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          

  
         d S )Nڀ16302FF0DBBB5A8D733DAB7141C1B45ACBC8715939677F6A56850A38BD87BD59B09E80279609FF333EB9D4C061231FB26F92EEB04982A5F1D1764CAD57665422rt   ڀ0A420517E406AAC0ACDCE90FCD71487718D3B953EFD7FBEC5F7F27E28C6149999397E91E029E06457DB2D3E640668B392C2A7E737A7F0BF04436D11640FD09FDڀ72E6882E8DB28AAD36237CD25D580DB23783961C8DC52DFA2EC138AD472A0FCEF3887CF62B623B2A87DE5C588301EA3E5FC269B373B60724F5E82A6AD147FDE7ڀ230E18E1BCC88A362FA54E4EA3902009292F7F8033624FD471B5D8ACE49D12CFABBC19963DAB8E2F1EBA00BFFB29E4D72D13F2224562F405CB80503666B25429ڀ9D45F66DE5D67E2E6DB6E93A59CE0BB48106097FF78A081DE781CDB31FCE8CCBAAEA8DD4320C4119F1E9CD437A2EAB3731FA9668AB268D871DEDA55A5473199Fڀ2FDC313095BCDD5FB3A91636F07A959C8E86B5636A1E930E8396049CB481961D365CC11453A06C719835475B12CB52FC3C383BCE35E27EF194512B71876285FAڀA7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1Fڀ7DB71C3DEF63212841C463E881BDCF055523BD368240E6C3143BD8DEF8B3B3223B95E0F53082FF5E412F4222537A43DF1C6D25729DDB51620A832BE6A26680A2r  r  r   s    rJ   r  zRFC7027.test_brainpoolP512r1	  r  rI   N)	rE   rF   rG   r  r  r  r  r  r  rH   rI   rJ   r  r  (	  sg        ,
 ,
 ,
\ [,
 ,
 ,
\ [4
 4
 4
 4
 4
rI   r  z$w, gwx, gwy, k, msg, md, r, s, curve@DC51D3866A15BACDE33D96F992FCA99DA7E6EF0934E7097559C27F1614C88A7F@2442A5CC0ECD015FA3CA31DC8E2BBC70BF42D60CBCA20085E0822CB04235E970@6FC98BD7E50211A4A27102FA3549DF79EBCB4BF246B80945CDDFE7D509BBFD7D@9E56F509196784D963D1C0A401510EE7ADA3DCC5DEE04B154BF61AF1D5A6DECEs   abc@CB28E0999B9C7715FD0A80D8E47A77079716CBBF917DD72E97566EA1C066957C@86FA3BB4E26CAD5BF90B7F81899256CE7594BB1EA0C89212748BFF3B3D5B0315z	ECDSA-256`0BEB646634BA87735D77AE4809A0EBEA865535DE4C1E1DCB692E84708E81A5AF62E528C38B2A81B35309668D73524D9F`96281BF8DD5E0525CA049C048D345D3082968D10FEDF5C5ACA0C64E6465A97EA5CE10C9DFEC21797415710721F437922`447688BA94708EB6E2E4D59F6AB6D7EDFF9301D249FE49C33096655F5D502FAD3D383B91C5E7EDAA2B714CC99D5743CA`B4B74E44D71A13D568003D7489908D564C7761E229C58CBFA18950096EB7463B854D7FA992F934D927376285E63414FA`FB017B914E29149432D8BAC29A514640B46F53DDAB2C69948084E2930F1C8F7E08E07C9C63F2D21A07DCB56A6AF56EB3`B263A1305E057F984D38726A1B46874109F417BCA112674C528262A40A629AF1CBB9F516CE0FA7D2FF630863A00E8B9Fz	ECDSA-384ڄ0065FDA3409451DCAB0A0EAD45495112A3D813C17BFD34BDF8C1209D7DF5849120597779060A7FF9D704ADF78B570FFAD6F062E95C7E0C5D5481C5B153B48B375FA1ڄ0151518F1AF0F563517EDD5485190DF95A4BF57B5CBA4CF2A9A3F6474725A35F7AFE0A6DDEB8BEDBCD6A197E592D40188901CECD650699C9B5E456AEA5ADD19052A8ڄ006F3B142EA1BFFF7E2837AD44C9E4FF6D2D34C73184BBAD90026DD5E6E85317D9DF45CAD7803C6C20035B2F3FF63AFF4E1BA64D1C077577DA3F4286C58F0AEAE643ڄ00C1C2B305419F5A41344D7E4359933D734096F556197A9B244342B8B62F46F9373778F9DE6B6497B1EF825FF24F42F9B4A4BD7382CFC3378A540B1B7F0C1B956C2Fڄ0154FD3836AF92D0DCA57DD5341D3053988534FDE8318FC6AAAAB68E2E6F4339B19F2F281A7E0B22C269D93CF8794A9278880ED7DBB8D9362CAEACEE544320552251ڄ017705A7030290D1CEB605A9A1BB03FF9CDD521E87A696EC926C8C10C8362DF4975367101F67D1CF9BCCBF2F3D239534FA509E70AAC851AE01AAC68D62F866472660z	ECDSA-521c	           	         t          j        t          |           |          }	t          j        t          ||z             |          }
|	j        |
k    sJ |	                    ||t          t          |d                    }|t          |          t          |          fk    sJ |
                    |||t                    sJ d S )Nrt   )rj  r  ru   )
r   ri   r   r   r   re   r   rv   rg   r   )wgwxgwyru   msgmdr  r   r   r   r   ro   s               rJ   test_RFC4754_vectorsr  	  s    x 
		!e	4	4B		!)C#I"6"6	>	>Br!!!!
''#.?3q"::'
N
NC9Q<<1.....99S#r#45555555rI   )t
__future__r   r   r   	unittest2unittestImportErrorrh  rk  rR   r  r  binasciir   r   rx   	functoolsr   
hypothesisr	   r
   hypothesis.strategies
strategiesr"  sixr   keysr   r   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r:   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   rB   r;   r<   r=   r>   ellipticcurver?   r@   rA   	ExceptionrD   r!  argvr^   TestCaser`   r  parametrizer	  r  paramsr   r  appendparamr  r  r  r  r  r  r  r  r  r%  rk  ry  r  ry   sha384rS  r  rH   rI   rJ   <module>r     s   ? ? ? ? ? ? ? ? ? ?        OOOOO 				       



 ' ' ' ' ' ' ' '        & & & & & & & & " " " " " "       * * * * * * * * H H H H H H H H H H                    E D D D D D D D D D O O O O O O O O O O , , , , , , , ,                                                         :            !                            	 	 	 	 	i 	 	 	  sx#$L    u: u: u: u: u:H u: u: u:p CCsCCC   " 
 
 
E> 
 
FL	(8(8S(I(IJJJ	
 	
 	
 	

 )6224 4 324 sx(FFF &)). . *). O6 O6 O6 O6 O6h O6 O6 O6d* * * * *H% * * *Z=@ =@ =@ =@ =@(
 =@ =@ =@@?= ?= ?= ?= ?=8 ?= ?= ?=DG
 G
 G
 G
 G
h G
 G
 G
T4 4 4 4 48 4 4 4 s
 s
 s
 s
 s
d s
 s
 s
lU
 U
 U
 U
 U
d U
 U
 U
r *NNNNNNN	
 	
 	
 	////N//!	
 	
 	
$ 	 N -	
 	
 	
?7: :v6 6w: :v6 6 6s    	