o
    6hd                    @   s  d dl mZmZmZ zd dlZW n ey   d dlZY n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 deSZTi ZUdejVv rdeUd< dd ZWG dd dejXZYe
jZ[ddd  e\d!D d"d# Z]g Z^e-D ]Z_d$D ]Z`e^ae
jbe_e`d%ce_jde`d& q3q/e
jZ[d'e^d(d) ZedejVv r_e4e:gZ^ne-Z^e
jZ[d*e^d+d, Zfe
jZjgG d-d. d.ejXZhG d/d0 d0ejXZiG d1d2 d2ejXZjG d3d4 d4ejXZkG d5d6 d6ejXZlG d7d8 d8ejXZmG d9d: d:emZnG d;d< d<emZoe
jZ[d=e
jbd>d?d@dAdBejpdCdDe6dEd&
e
jbdFdGdHdIdBejqdJdKe7dLd&
e
jbdMdNdOdPdBejrdQdRe8dSd&
gdTdU ZsdS )V    )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                   @   s   e Zd ZdS )SubprocessErrorN)__name__
__module____qualname__ rF   rF   f/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/ecdsa/test_pyecdsa.pyrB   J   s    rB   z--fast   max_examplesc                 C   sV   d}t j|g|   t jt jd}| \}}|jdkr'td|| |j|f | S )Nopenssl)stdoutstderrr   z,cmd '%s %s' failed: rc=%s, stdout/err was %s)	
subprocessPopensplitPIPESTDOUTcommunicate
returncoderB   decode)cmdOPENSSLprK   ignoredrF   rF   rG   run_opensslU   s   
rY   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdx Z>dydz Z?d{d| Z@d}d~ ZAdd ZBdd ZCdd ZDdS )ECDSAc                 C   sj   t  }| }d}||}| ||| | t|j||d  t	|
 }| ||| d S )N   blahblahs   bad)r   generateget_verifying_keysign
assertTrueverifyassertRaisesr   r   from_string	to_string)selfprivpubdatasigpub2rF   rF   rG   
test_basicf   s   
zECDSA.test_basicc           	      C   s   d}t dd}t|ttj}| }ttj	
 |tjt| }|j||d}| ||| |j||d}| ||| ||tj}| ||| | || | || d S )Nr[    9d0219792467d7d37b4d43298a7d0c05   )k)intr   from_secret_exponentr(   hashlibsha256r]   r@   
generate_k	generatororderdigestr^   r_   r`   sign_deterministicassertEqual)	rd   rg   secexpre   rf   rm   sig1sig2sig3rF   rF   rG   test_deterministics   s(   
zECDSA.test_deterministicc                 C   s   |  tt |  tt d S N)ra   	TypeErrorr   r   rd   rF   rF   rG   test_bad_usage   s   zECDSA.test_bad_usagec                 C   sJ   t }t }| }| t| |j |d}| t||j	 d S )N   data)
r#   r   r\   r]   rw   lenrc   verifying_key_lengthr^   signature_length)rd   defaultre   rf   rh   rF   rF   rG   test_lengths_default   s   
zECDSA.test_lengths_defaultc                 C   s  d}t }t||j}t||j}| || t||}t||}| t| t|  | |	 |	  |
 }|
 }d}	||	}
||	}| ||
|	 | ||
|	 | |||	 | |||	 | t| t|  d S )Ns   secretr   )r#   r    randrange_from_seed__trytryagainrt   rw   r   ro   r   rc   to_pemr]   r^   r_   r`   )rd   seedcurvesecexp1secexp2priv1priv2pub1ri   rg   ry   rz   rF   rF   rG   test_serialize   s*   

 zECDSA.test_serializec                    s   d  fdd}t j|d}t j|d}| t|  t|   |jd|d}|jd|d}| t|t| d S )N=   all the entropy in the entire world, compressed into one linec                        d |  S r}   rF   numbytessrF   rG   not_much_entropy      z.ECDSA.test_nonrandom.<locals>.not_much_entropyentropyr   )r   r\   rw   r   r]   rc   r^   )rd   r   r   r   ry   rz   rF   r   rG   test_nonrandom   s   zECDSA.test_nonrandomc                 C   s0   |  |jj|jj |  |jjj|jjj d S r}   )rw   privkeysecret_multiplier
public_keyrs   )rd   r   r   rF   rF   rG   assertTruePrivkeysEqual   s   zECDSA.assertTruePrivkeysEqualc                    s   d  fdd}t  }| |jtj t jtd}| |jtj t j|d}| |jtj t j|d}| |jtj | || t jdd}| |jtj t jdd}| || t jdtd	}| |jtj d S )
Nr   c                    r   r}   rF   r   r   rF   rG   r      r   z5ECDSA.test_privkey_creation.<locals>.not_much_entropyr   r      )rx      )rx   r   )r   r\   rw   baselenr#   r$   r   ro   )rd   r   r   r   rF   r   rG   test_privkey_creation   s"   zECDSA.test_privkey_creationc                 C   sX  t  }| }| t|t | t|tj t 	|}| 
|| | }| t|t | |d | | d t |}| 
|| | }| t|t t |}| 
|| t jtd}| }| t|t | |d | | d t |}| 
|| | }| t|t t |}| 
|| d S )N   -----BEGIN EC PRIVATE KEY-----   -----END EC PRIVATE KEY-----r   )r   r\   rc   rw   typer
   r   r#   r   rb   r   r   r_   
startswithstripendswithfrom_pemto_derfrom_derr%   rd   r   s1r   rF   rF   rG   test_privkey_strings   s6   




zECDSA.test_privkey_stringsc                 C   s   t jtd}| }| t|t | |d | |	 
d t |}| || | }| t|t t |}| || d S )Nr   r   r   )r   r\   r/   r   rw   r   r
   r_   r   r   r   r   r   r   r   r   rF   rF   rG   test_privkey_strings_brainpool  s   

z$ECDSA.test_privkey_strings_brainpoolc                 C   s<   |  |jj|jj |  |jj|jj |  |j|j d S r}   )rw   pubkeypointrs   r   )rd   r   ri   rF   rF   rG   assertTruePubkeysEqual  s   zECDSA.assertTruePubkeysEqualc                 C   s  t  }| }| }| t|t | t|tj	 t
|}| || t jtd}| }| }| t|t | t|tj	 t
j|td}| || | }| t|t t
|}| || | tjt
j|d  t
|}G dd d}G dd d}td| | dd }	|	|_| }
| tt
j|
 | }| t|t | |d	| | | d
| t
|}| || d S )Nr      junkc                   @      e Zd Zdd ZdS )z0ECDSA.test_pubkey_strings.<locals>.FakeGeneratorc                 S   s   dS )N[rF   r   rF   rF   rG   rt   ;  s   z6ECDSA.test_pubkey_strings.<locals>.FakeGenerator.orderN)rC   rD   rE   rt   rF   rF   rF   rG   FakeGenerator:      r   c                   @   r   )z.ECDSA.test_pubkey_strings.<locals>.FakeCurveFpc                 S   s   t dS )NM65255345290392407050209505469627313404541085228058844382513856749047873406763)rn   r   rF   rF   rG   rW   ?  s   z0ECDSA.test_pubkey_strings.<locals>.FakeCurveFp.pN)rC   rD   rE   rW   rF   rF   rF   rG   FakeCurveFp>  r   r   unknown)r   rH   r   r         s   -----BEGIN PUBLIC KEY-----s   -----END PUBLIC KEY-----)r   r\   r]   rc   rw   r   r
   r   r#   r   r   rb   r   r%   r   r   ra   r?   UnexpectedDERr   r   r   r   r_   r   r   r   r   )rd   r   r   r   ri   pub1_derbadpubr   r   badcurvebadderpemrF   rF   rG   test_pubkey_strings  sH   



zECDSA.test_pubkey_stringsc                 C   s   t jtd}| }| }| t|t | t|tj	 t
j|td}| || | }| t|t t
|}| || d S Nr   )r   r\   r/   r]   rc   rw   r   r
   r   r   r   rb   r   r   r   )rd   r   r   r   ri   r   rF   rF   rG   test_pubkey_strings_brainpoolS  s   
z#ECDSA.test_pubkey_strings_brainpoolc                 C   sH   t  }|j}| t |d W d    d S 1 sw   Y  d S Nraw)r   r\   verifying_keyra   
ValueErrorr   rd   skvkrF   rF   rG   *test_vk_to_der_with_invalid_point_encodinga  s
   "z0ECDSA.test_vk_to_der_with_invalid_point_encodingc                 C   sB   t  }| t |d W d    d S 1 sw   Y  d S r   )r   r\   ra   r   r   rd   r   rF   rF   rG   *test_sk_to_der_with_invalid_point_encodingh  s   "z0ECDSA.test_sk_to_der_with_invalid_point_encodingc                 C   sr   t }tjd d }t||}tdd }t||}| tj t| W d    d S 1 s2w   Y  d S )Nr   rH   H  ='  r   r   r      garbage    	r   r?   
encode_oidencode_sequenceencode_bitstringra   r   r   r   rd   type_oid_dercurve_oid_derenc_type_der	point_der	to_decoderF   rF   rG   (test_vk_from_der_garbage_after_curve_oidn  s   "z.ECDSA.test_vk_from_der_garbage_after_curve_oidc                 C   st   t jd }t jd }t ||}t dd }t ||}| t j t| W d    d S 1 s3w   Y  d S )Nr   rH   r   r   r   )r?   r   r   r   ra   r   r   r   r   rF   rF   rG   !test_vk_from_der_invalid_key_typez  s   

"z'ECDSA.test_vk_from_der_invalid_key_typec                 C   sr   t }tjd }t||}tdd d }t||}| tj t| W d    d S 1 s2w   Y  d S )Nr   r   r   r   r   rF   rF   rG   +test_vk_from_der_garbage_after_point_string  s   
"z1ECDSA.test_vk_from_der_garbage_after_point_stringc                 C   sn   t }tjd }t||}tdd }t||}| tj t| W d    d S 1 s0w   Y  d S )Nr   s   r   r   rF   rF   rG   "test_vk_from_der_invalid_bitstring     
"z(ECDSA.test_vk_from_der_invalid_bitstringc                 C   sl   t }tjd }t||}tdd}t||}| t t| W d    d S 1 s/w   Y  d S )Nr   @   r   )	r   r?   r   r   r   ra   r   r   r   r   rF   rF   rG   0test_vk_from_der_with_invalid_length_of_encoding  s   
"z6ECDSA.test_vk_from_der_with_invalid_length_of_encodingc                 C   sn   t }tjd }t||}tdd}t||}| tj t| W d    d S 1 s0w   Y  d S )Nr   s0   r   r   r   rF   rF   rG   "test_vk_from_der_with_raw_encoding  r   z(ECDSA.test_vk_from_der_with_raw_encodingc                 C   s"  t  }| }d}||}| t|t | t|tj	 | 
||| |j|td}| t|t | t|d | t|d t | t|d t | t|d tj | t|d tj | 
|j||td |j|td}| t|t | 
|j||td d S )Nr   )	sigencoderH   r   r   )	sigdecode)r   r\   r]   r^   rw   r   r
   r   r#   r   r_   r`   r   tupler   r   r   r   )rd   r   r   rg   rh   sig_derrF   rF   rG   test_signature_strings  s$   
zECDSA.test_signature_stringsc                 C   @   d}d}t j}tt||||\}}| || | || d S N   i  r   rt   r   r   rw   rd   rr   rt   new_rnew_srF   rF   rG   (test_sigencode_string_canonize_no_change     z.ECDSA.test_sigencode_string_canonize_no_changec                 C   H   d}t j}|d }tt||||\}}| || | || | d S Nr   
   r   rd   r   rt   r   r   r   rF   rF   rG   test_sigencode_string_canonize     z$ECDSA.test_sigencode_string_canonizec                 C   r   r   r   rt   r   r   rw   r   rF   rF   rG   )test_sigencode_strings_canonize_no_change  r   z/ECDSA.test_sigencode_strings_canonize_no_changec                 C   r   r   r   r   rF   rF   rG   test_sigencode_strings_canonize  r   z%ECDSA.test_sigencode_strings_canonizec                 C   r   )N      r   rt   r   r   rw   r   rF   rF   rG   %test_sigencode_der_canonize_no_change  r   z+ECDSA.test_sigencode_der_canonize_no_changec                 C   r   )Nr     r  r   rF   rF   rG   test_sigencode_der_canonize  r   z!ECDSA.test_sigencode_der_canonizec                 C   sp   d}t j}|d d }t|||}t|||}| || tt||||\}}| || | || | d S )Nr  rH   r   )r   rt   r   r   assertNotEqualr   rw   )rd   r   rt   r   regular_encodecanonical_encoder   r   rF   rF   rG   4test_sigencode_der_canonize_with_close_to_half_order  s   z:ECDSA.test_sigencode_der_canonize_with_close_to_half_orderc                 C   s>   |  t tg dd W d    d S 1 sw   Y  d S )N)   one   twos   three   ra   r   r   r   rF   rF   rG   *test_sig_decode_strings_with_invalid_count     "z0ECDSA.test_sig_decode_strings_with_invalid_countc                 C   >   |  t tddgd W d    d S 1 sw   Y  d S )Nr  r  r  r  r   rF   rF   rG   (test_sig_decode_strings_with_wrong_r_len   r  z.ECDSA.test_sig_decode_strings_with_wrong_r_lenc                 C   r  )N   s   r  r  r   rF   rF   rG   (test_sig_decode_strings_with_wrong_s_len$  r  z.ECDSA.test_sig_decode_strings_with_wrong_s_lenc                 C   sJ   t  }|j}| t |d d W d    d S 1 sw   Y  d S )Ns                                                                                                                                   )r   r\   r   ra   r   verify_digestr   rF   rF   rG   test_verify_with_too_long_input(  s
   "z%ECDSA.test_verify_with_too_long_inputc                 C   :   |  t td W d    d S 1 sw   Y  d S Nr   )ra   r   r   ro   r   rF   rF   rG   4test_sk_from_secret_exponent_with_wrong_sec_exponent/     "z:ECDSA.test_sk_from_secret_exponent_with_wrong_sec_exponentc                 C   r  )N   )ra   r   r   rb   r   rF   rF   rG   )test_sk_from_string_with_wrong_len_string3  r  z/ECDSA.test_sk_from_string_with_wrong_len_stringc                 C   sT   t d}t |d }| t j t| W d    d S 1 s#w   Y  d S )Nr   r   r?   encode_integerr   ra   r   r   r   rd   ver_derr   rF   rF   rG   )test_sk_from_der_with_junk_after_sequence7  s
   
"z/ECDSA.test_sk_from_der_with_junk_after_sequencec                 C   sP   t d}t |}| t j t| W d    d S 1 s!w   Y  d S r  r  r   rF   rF   rG   #test_sk_from_der_with_wrong_version>  s
   

"z)ECDSA.test_sk_from_der_with_wrong_versionc                 C   sv   t d}t d}t jd }t d|}t ||||}| t j t	| W d    d S 1 s4w   Y  d S )Nr   r   r   
r?   r  encode_octet_stringr   encode_constructedr   ra   r   r   r   rd   r!  privkey_derr   	const_derr   rF   rF   rG   "test_sk_from_der_invalid_const_tagE  s   


"z(ECDSA.test_sk_from_der_invalid_const_tagc                 C   sz   t d}t d}t jd d }t d|}t ||||}| t j t	| W d    d S 1 s6w   Y  d S )Nr   r   r   r   r   r$  r'  rF   rF   rG   *test_sk_from_der_garbage_after_privkey_oidQ  s   

"z0ECDSA.test_sk_from_der_garbage_after_privkey_oidc                 C   sX   t d}t d}t jd }t d|}t ||||}t|}| |j	j
d d S )Nr   r   r   r   r  )r?   r  r%  r   r&  r   r   r   rw   r   r   )rd   r!  r(  r   r)  r   r   rF   rF   rG   #test_sk_from_der_with_short_privkey]  s   



z)ECDSA.test_sk_from_der_with_short_privkeyc                 C   s   t d}t t ddddddt ddddddd}t t t dt d}t |||}| t j t| W d    d S 1 sIw   Y  d S )NrH   r   r   r   r   r   	r?   r  r   r   r%  ra   r   r   r   rd   r!  algorithm_derr(  r   rF   rF   rG   &test_sk_from_p8_der_with_wrong_versioni  s   
"z,ECDSA.test_sk_from_p8_der_with_wrong_versionc                 C   s   t d}t t dddt ddddddd}t t t dt d}t |||}| t j t| W d    d S 1 sFw   Y  d S )Nr   rH   r   r   r   r   r-  r.  rF   rF   rG   (test_sk_from_p8_der_with_wrong_algorithmy  s   
 "z.ECDSA.test_sk_from_p8_der_with_wrong_algorithmc                 C   s   t d}t t ddddddt dddddddt d}t t t dt d}t |||}| t j t| W d    d S 1 sMw   Y  d S )Nr   rH   r   r   r   r   r   r-  r.  rF   rF   rG   6test_sk_from_p8_der_with_trailing_junk_after_algorithm  s   
"z<ECDSA.test_sk_from_p8_der_with_trailing_junk_after_algorithmc                 C   s   t d}t t ddddddt ddddddd}t t t dt dt d }t |||t d}| t j t| W d    d S 1 sRw   Y  d S )	Nr   rH   r   r   r   r   i  r   r-  r.  rF   rF   rG   0test_sk_from_p8_der_with_trailing_junk_after_key  s*   
"z6ECDSA.test_sk_from_p8_der_with_trailing_junk_after_keyc                 C   sD   t d}| t |d W d    d S 1 sw   Y  d S )Nr   r   )r   ro   ra   r   sign_digestr   rF   rF   rG   test_sign_with_too_long_hash  s   
"z"ECDSA.test_sign_with_too_long_hashc           	      C   s   t jttjd}d}||}tj| 	 ttjd}| 
||| t jtd}|j|tjd}tj| 	 ttjd}| 
||| tj| 	 td}| 
|j||tjd d S )Nr   hashfuncs   security level is 128 bitsr   r7  )r   r\   r%   rp   rq   r^   r   rb   r]   rc   r_   r`   )	rd   r   rg   rh   r   sk2rz   vk2vk3rF   rF   rG   test_hashfunc  s*   


zECDSA.test_hashfuncc                 C   s   t }tj|d}| }d}||}t|||}|D ]}| ||| | 	|j
|j
 | 	|j|j q| |jjdd |D  d S )Nr   r[   c                 S      g | ]}|j jqS rF   r   r   .0recovered_vkrF   rF   rG   
<listcomp>      z2ECDSA.test_public_key_recovery.<locals>.<listcomp>)r)   r   r\   r]   r^   r   from_public_key_recoveryr_   r`   rw   r   default_hashfuncassertInr   r   rd   r   r   r   rg   	signaturerecovered_vksrA  rF   rF   rG   test_public_key_recovery  s$   
zECDSA.test_public_key_recoveryc                 C   s   t }tj|tjd}| }d}||}tj|||tjdd}|D ]}| 	|
|| | |j|j | tj|j q"| |jjdd |D  d S )Nr6  r[   T)r7  allow_truncatec                 S   r=  rF   r>  r?  rF   rF   rG   rB    rC  zCECDSA.test_public_key_recovery_with_custom_hash.<locals>.<listcomp>)r)   r   r\   rp   rq   r]   r^   r   rD  r_   r`   rw   r   rE  rF  r   r   rG  rF   rF   rG   )test_public_key_recovery_with_custom_hash  s(   
	z/ECDSA.test_public_key_recovery_with_custom_hashc                 C   s   t d}|j}d}| | | | |d| | |dd|  | |dd|d d   | |d	d
|  d S )Nr   0   dSKx !ȠcĄ)z#OHQ*r   uncompressed   
compressed      hybrid   )r   ro   r   rw   rc   )rd   r   r   exprF   rF   rG   test_encoding  s   
zECDSA.test_encodingc                 C   s   t d}|j}d}t|}| |jj|jj td| }| |jj|jj td|d d  }| |jj|jj td| }| |jj|jj d S )Nr   rM  rO  rQ  rR  rT  )r   ro   r   r   rb   rw   r   r   )rd   r   r   encfrom_rawfrom_uncompressedfrom_compressedrF   rF   rG   test_decoding!  s   

zECDSA.test_decodingc                 C   s.   d}t j|dd}td}| ||j d S )N1   dSKx !ȠcĄ)z#OHQ*rN  valid_encodingsr   )r   rb   r   ro   rw   r   )rd   rW  r   r   rF   rF   rG   )test_uncompressed_decoding_as_only_alowed7  s
   
z/ECDSA.test_uncompressed_decoding_as_only_alowedc                 C   R   d}|  t}tj|dd W d    n1 sw   Y  | dt|j d S )NrM  rS  r^  rS  ra   r   r   rb   rF  str	exceptionrd   rW  rU  rF   rF   rG   %test_raw_decoding_with_blocked_formatC  s   z+ECDSA.test_raw_decoding_with_blocked_formatc                 C   sN   |  t}tjddd W d    n1 sw   Y  | dt|j d S )N    )r   foobarr^  zOnly uncompressed, compressed)ra   r   r   rb   rF  rd  re  )rd   erF   rF   rG   !test_decoding_with_unknown_formatN  s   z'ECDSA.test_decoding_with_unknown_formatc                 C   ra  )Nr\  rb  r^  Invalid X9.62 encodingrc  rf  rF   rF   rG   .test_uncompressed_decoding_with_blocked_formatT     z4ECDSA.test_uncompressed_decoding_with_blocked_formatc                 C   ra  )Ns1   dSKx !ȠcĄ)z#OHQ*r]  r^  rl  rc  rf  rF   rF   rG   (test_hybrid_decoding_with_blocked_format`  rn  z.ECDSA.test_hybrid_decoding_with_blocked_formatc                 C   s^   t d}|j}|d}| |d d d d|dd   }tj|ddd}| || d S )	Nr   rS  r   rT     rb  F)r_  validate_point)r   ro   r   rc   rw   r   rb   rd   r   r   rW  brF   rF   rG   Atest_hybrid_decoding_with_inconsistent_encoding_and_no_validationl  s   

zGECDSA.test_hybrid_decoding_with_inconsistent_encoding_and_no_validationc                 C   sZ   dd d }|  t}tj|dd W d    n1 sw   Y  | dt|j d S )Ns1   dSKx !ȠcĄ)z#OHQ*   )rS  r   r^  z(hybrid, raw)rc  rf  rF   rF   rG   ,test_compressed_decoding_with_blocked_format|  s   z2ECDSA.test_compressed_decoding_with_blocked_formatc                 C   B   d}|  t td|  W d    d S 1 sw   Y  d S )NrM  rQ  ra   r   r   rb   rd   rW  rF   rF   rG   )test_decoding_with_malformed_uncompressed  
   "z/ECDSA.test_decoding_with_malformed_uncompressedc                 C   sJ   d}|  t td|d d   W d    d S 1 sw   Y  d S )NrM  r  rR  rx  ry  rF   rF   rG   'test_decoding_with_malformed_compressed  
   "z-ECDSA.test_decoding_with_malformed_compressedc                 C   rw  )NrM  rp  rx  ry  rF   rF   rG   &test_decoding_with_inconsistent_hybrid  r{  z,ECDSA.test_decoding_with_inconsistent_hybridc                 C   s|   t d}|j}|d}| |d d d d|dd   }| t tj|dd}W d    d S 1 s7w   Y  d S )Ni[rS  r   rp  rT  rb  r^  )	r   ro   r   rc   rw   ra   r   r   rb   rr  rF   rF   rG   0test_decoding_with_inconsistent_hybrid_odd_point  s   

"z6ECDSA.test_decoding_with_inconsistent_hybrid_odd_pointc                 C   sJ   d}|  t t|d d d  W d    d S 1 sw   Y  d S )NrM  /       rx  ry  rF   rF   rG   %test_decoding_with_point_not_on_curve  r}  z+ECDSA.test_decoding_with_point_not_on_curvec                 C   r  )Nr  rx  r   rF   rF   rG   $test_decoding_with_point_at_infinity  s   "z*ECDSA.test_decoding_with_point_at_infinityc                 C   sX   t tj tj d }| t td|  W d    d S 1 s%w   Y  d S )Nr   rQ  )r   r#   r   rW   ra   r   r   rb   ry  rF   rF   rG   test_not_lying_on_curve  s   "zECDSA.test_not_lying_on_curvec                 C   sZ   t dtjtjd}d|_d|_| t t	d| W d    d S 1 s&w   Y  d S )Ntestr   rH   rl                          
r   rA   	curve_192generator_192r   r   ra   r   r   rb   rd   r   rF   rF   rG   9test_from_string_with_invalid_curve_too_short_ver_key_len     "z?ECDSA.test_from_string_with_invalid_curve_too_short_ver_key_lenc                 C   sZ   t dtjtjd}d|_d|_| t t	d| W d    d S 1 s&w   Y  d S )Nr  r  rl   r  r  r  rF   rF   rG   8test_from_string_with_invalid_curve_too_long_ver_key_len  r  z>ECDSA.test_from_string_with_invalid_curve_too_long_ver_key_lenN)ErC   rD   rE   rj   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"  r#  r*  r+  r,  r0  r1  r2  r3  r5  r<  rJ  rL  rV  r[  r`  rg  rk  rm  ro  rt  rv  rz  r|  r~  r  r  r  r  r  r  rF   rF   rF   rG   rZ   e   s    	!4




!#



rZ   zval,evenc                 C   s   g | ]}d D ]}||fqqS ))TFrF   )r@  ijrF   rF   rG   rB    s    rB     c                 C   sV   t | tj}|rd| }nd| }zt|}t|tsJ W d S  ty*   Y d S w )NrQ     )r   r#   rt   r   rb   
isinstancer   )valevenrW  r   rF   rF   rG   *test_VerifyingKey_decode_with_small_values  s   

r  )r   rN  rP  rS  z{0}-{1})idzcurve,encodingc                 C   sB   t j| d}|j}||}tj|| d}|jj|jjksJ d S r   )r   r\   r   rc   r   rb   r   r   )r   encodingr   r   encodedfrom_encrF   rF   rG   test_VerifyingKey_encode_decode  s
   
r  r   c                 C   sn   t j| d}| }t| | }| | ksJ t| | jks'J |d}t|| j	ks5J d S )Nr   r   )
r   r\   r]   r   rb   rc   r   r   r^   r   )r   re   r   ri   rh   rF   rF   rG   test_lengths  s   
r  c                   @   s  e Zd Zedd eddD Zdd Zej	j
ej	jdevdd	d
d Zej	j
ej	jdevdd	dd Zej	j
ej	jdevdd	dd Zej	j
ej	jdevdd	dd Zej	j
ej	jdevdd	dd Zej	j
ej	jdevdd	dd Zej	j
ej	jdevdd	d d! Zej	j
ej	jd"evd#d	d$d% Zej	j
ej	jd"evd#d	d&d' Zej	j
ej	jd"evd#d	d(d) Zej	j
ej	jd*evd+d	d,d- Zej	j
ej	jd.evd/d	d0d1 Zej	j
ej	jd2evd3d	d4d5 Zej	j
ej	jd6evd7d	d8d9 Zej	j
ej	jd:evd;d	d<d= Zej	j
ej	jd>evd?d	d@dA Zej	j
ej	jdBevdCd	dDdE Zej	j
ej	jdFevdGd	dHdI Zej	j
ej	jdJevdKd	dLdM Zej	j
ej	jdNevdOd	dPdQ Zej	j
ej	jdRevdSd	dTdU Z ej	j
ej	jdVevdWd	dXdY Z!ej	j
ej	jdZevd[d	d\d] Z"ej	j
ej	jd^evd_d	d`da Z#ej	j
ej	jdbevdcd	ddde Z$ej	j
ej	jdfevdgd	dhdi Z%ej	j
ej	jdjevdkd	dldm Z&ddodpZ'ej	j
ej	jdevdd	dqdr Z(ej	j
ej	jdevdd	dsdt Z)ej	j
ej	jdevdd	dudv Z*ej	j
ej	jdevdd	dwdx Z+ej	j
ej	jdevdd	dydz Z,ej	j
ej	jdevdd	d{d| Z-ej	j
ej	jdevdd	d}d~ Z.ej	j
ej	jd"evd#d	dd Z/ej	j
ej	jd"evd#d	dd Z0ej	j
ej	jd"evd#d	dd Z1ej	j
ej	jd*evd+d	dd Z2ej	j
ej	jd.evd/d	dd Z3ej	j
ej	jd2evd3d	dd Z4ej	j
ej	jd6evd7d	dd Z5ej	j
ej	jd:evd;d	dd Z6ej	j
ej	jd>evd?d	dd Z7ej	j
ej	jdBevdCd	dd Z8ej	j
ej	jdFevdGd	dd Z9ej	j
ej	jdJevdKd	dd Z:ej	j
ej	jdNevdOd	dd Z;ej	j
ej	jdRevdSd	dd Z<ej	j
ej	jdVevdWd	dd Z=ej	j
ej	jdZevd[d	dd Z>ej	j
ej	jd^evd_d	dd Z?ej	j
ej	jdbevdcd	dd Z@ej	j
ej	jdfevdgd	dd ZAej	j
ej	jdjevdkd	dd ZBdddZCe ZDzdedv r edd dD ZDW n
 eEy   Y nw dd ZFej	j
ej	jdeDvdd	dd ZGej	j
ej	jdeDvdd	dd ZHdd ZIej	j
ej	jdeDvdd	dd ZJej	j
ej	jdeDvdd	dd ZKdS )OpenSSLc                 c   "    | ]}| d d  V  qdS :r   NrO   r   r@  crF   rF   rG   	<genexpr>(  
    
zOpenSSL.<genexpr>ecparam -list_curves
c                 C   s:   t d}| d d}|g dkrd|S d|S )Nversionr   .)10r  z-{0}z-ecdsa-with-{0})rY   rO   format)rd   	hash_namevvsrF   rF   rG   get_openssl_messagedigest_arg-  s
   

z%OpenSSL.get_openssl_messagedigest_arg	secp112r1z)system openssl does not support secp112r1reasonc                 C   
   |  tS r}   )do_test_from_opensslr   r   rF   rF   rG   test_from_openssl_secp112r1;     
z#OpenSSL.test_from_openssl_secp112r1	secp112r2z)system openssl does not support secp112r2c                 C   r  r}   )r  r    r   rF   rF   rG   test_from_openssl_secp112r2C  r  z#OpenSSL.test_from_openssl_secp112r2	secp128r1z)system openssl does not support secp128r1c                 C   r  r}   )r  r!   r   rF   rF   rG   test_from_openssl_secp128r1K  r  z#OpenSSL.test_from_openssl_secp128r1	secp160r1z)system openssl does not support secp160r1c                 C   r  r}   )r  r"   r   rF   rF   rG   test_from_openssl_secp160r1S  r  z#OpenSSL.test_from_openssl_secp160r1
prime192v1*system openssl does not support prime192v1c                 C   r  r}   r  r#   r   rF   rF   rG   test_from_openssl_nist192p[  r  z"OpenSSL.test_from_openssl_nist192pc                 C      |  tdS NSHA256r  r   rF   rF   rG   !test_from_openssl_nist192p_sha256c     z)OpenSSL.test_from_openssl_nist192p_sha256	secp224r1z)system openssl does not support secp224r1c                 C   r  r}   )r  r$   r   rF   rF   rG   test_from_openssl_nist224pk  r  z"OpenSSL.test_from_openssl_nist224p
prime256v1z*system openssl does not support prime256v1c                 C   r  r}   r  r%   r   rF   rF   rG   test_from_openssl_nist256ps  r  z"OpenSSL.test_from_openssl_nist256pc                 C   r  NSHA384r  r   rF   rF   rG   !test_from_openssl_nist256p_sha384{  r  z)OpenSSL.test_from_openssl_nist256p_sha384c                 C   r  NSHA512r  r   rF   rF   rG   !test_from_openssl_nist256p_sha512  r  z)OpenSSL.test_from_openssl_nist256p_sha512	secp384r1z)system openssl does not support secp384r1c                 C   r  r}   )r  r&   r   rF   rF   rG   test_from_openssl_nist384p  r  z"OpenSSL.test_from_openssl_nist384p	secp521r1z)system openssl does not support secp521r1c                 C   r  r}   )r  r'   r   rF   rF   rG   test_from_openssl_nist521p  r  z"OpenSSL.test_from_openssl_nist521p	secp256k1z)system openssl does not support secp256k1c                 C   r  r}   )r  r(   r   rF   rF   rG   test_from_openssl_secp256k1  r  z#OpenSSL.test_from_openssl_secp256k1brainpoolP160r1z/system openssl does not support brainpoolP160r1c                 C   r  r}   )r  r)   r   rF   rF   rG   !test_from_openssl_brainpoolp160r1  r  z)OpenSSL.test_from_openssl_brainpoolp160r1brainpoolP192r1z/system openssl does not support brainpoolP192r1c                 C   r  r}   )r  r*   r   rF   rF   rG   !test_from_openssl_brainpoolp192r1  r  z)OpenSSL.test_from_openssl_brainpoolp192r1brainpoolP224r1z/system openssl does not support brainpoolP224r1c                 C   r  r}   )r  r+   r   rF   rF   rG   !test_from_openssl_brainpoolp224r1  r  z)OpenSSL.test_from_openssl_brainpoolp224r1brainpoolP256r1z/system openssl does not support brainpoolP256r1c                 C   r  r}   )r  r,   r   rF   rF   rG   !test_from_openssl_brainpoolp256r1  r  z)OpenSSL.test_from_openssl_brainpoolp256r1brainpoolP320r1z/system openssl does not support brainpoolP320r1c                 C   r  r}   )r  r-   r   rF   rF   rG   !test_from_openssl_brainpoolp320r1  r  z)OpenSSL.test_from_openssl_brainpoolp320r1brainpoolP384r1z/system openssl does not support brainpoolP384r1c                 C   r  r}   )r  r.   r   rF   rF   rG   !test_from_openssl_brainpoolp384r1  r  z)OpenSSL.test_from_openssl_brainpoolp384r1brainpoolP512r1z/system openssl does not support brainpoolP512r1c                 C   r  r}   )r  r/   r   rF   rF   rG   !test_from_openssl_brainpoolp512r1  r  z)OpenSSL.test_from_openssl_brainpoolp512r1brainpoolP160t1z/system openssl does not support brainpoolP160t1c                 C   r  r}   )r  r0   r   rF   rF   rG   !test_from_openssl_brainpoolp160t1  r  z)OpenSSL.test_from_openssl_brainpoolp160t1brainpoolP192t1z/system openssl does not support brainpoolP192t1c                 C   r  r}   )r  r1   r   rF   rF   rG   !test_from_openssl_brainpoolp192t1  r  z)OpenSSL.test_from_openssl_brainpoolp192t1brainpoolP224t1z/system openssl does not support brainpoolP224t1c                 C   r  r}   )r  r2   r   rF   rF   rG   !test_from_openssl_brainpoolp224t1  r  z)OpenSSL.test_from_openssl_brainpoolp224t1brainpoolP256t1z/system openssl does not support brainpoolP256t1c                 C   r  r}   )r  r3   r   rF   rF   rG   !test_from_openssl_brainpoolp256t1  r  z)OpenSSL.test_from_openssl_brainpoolp256t1brainpoolP320t1z/system openssl does not support brainpoolP320t1c                 C   r  r}   )r  r4   r   rF   rF   rG   !test_from_openssl_brainpoolp320t1  r  z)OpenSSL.test_from_openssl_brainpoolp320t1brainpoolP384t1z/system openssl does not support brainpoolP384t1c                 C   r  r}   )r  r5   r   rF   rF   rG   !test_from_openssl_brainpoolp384t1  r  z)OpenSSL.test_from_openssl_brainpoolp384t1brainpoolP512t1z/system openssl does not support brainpoolP512t1c                 C   r  r}   )r  r6   r   rF   rF   rG   !test_from_openssl_brainpoolp512t1  r  z)OpenSSL.test_from_openssl_brainpoolp512t1SHA1c                 C   s  |j }|sJ | |}tjdrtd td td|  td d}t	dd}|
| W d    n1 s=w   Y  td|  td|  t	d	d
}| }W d    n1 sbw   Y  t|}t	dd
}| }	W d    n1 sw   Y  | |j|	|ttj|td t	d}| }
W d    n1 sw   Y  t|
}|j|ttj|d}| |j||ttj|d td t	dd
}| }W d    n1 sw   Y  t|}| || 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)r7  r   t/privkey.pemr8  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mkdirrY   openwritereadr   r   r_   r`   r   rp   newr   r   r^   rw   )rd   r   r  	curvenamemdargrg   rj  
pubkey_pemr   r   fpr   rh   privkey_p8_pem
sk_from_p8rF   rF   rG   r    sf   







	



zOpenSSL.do_test_from_opensslc                 C      |  t d S r}   )do_test_to_opensslr   r   rF   rF   rG   test_to_openssl_secp112r1G     z!OpenSSL.test_to_openssl_secp112r1c                 C   r  r}   )r  r    r   rF   rF   rG   test_to_openssl_secp112r2O  r  z!OpenSSL.test_to_openssl_secp112r2c                 C   r  r}   )r  r!   r   rF   rF   rG   test_to_openssl_secp128r1W  r  z!OpenSSL.test_to_openssl_secp128r1c                 C   r  r}   )r  r"   r   rF   rF   rG   test_to_openssl_secp160r1_  r  z!OpenSSL.test_to_openssl_secp160r1c                 C   r  r}   r  r#   r   rF   rF   rG   test_to_openssl_nist192pg  r  z OpenSSL.test_to_openssl_nist192pc                 C      |  td d S r  r  r   rF   rF   rG   test_to_openssl_nist192p_sha256o     z'OpenSSL.test_to_openssl_nist192p_sha256c                 C   r  r}   )r  r$   r   rF   rF   rG   test_to_openssl_nist224pw  r  z OpenSSL.test_to_openssl_nist224pc                 C   r  r}   r  r%   r   rF   rF   rG   test_to_openssl_nist256p  r  z OpenSSL.test_to_openssl_nist256pc                 C   r  r  r  r   rF   rF   rG   test_to_openssl_nist256p_sha384  r  z'OpenSSL.test_to_openssl_nist256p_sha384c                 C   r  r  r  r   rF   rF   rG   test_to_openssl_nist256p_sha512  r  z'OpenSSL.test_to_openssl_nist256p_sha512c                 C   r  r}   )r  r&   r   rF   rF   rG   test_to_openssl_nist384p  r  z OpenSSL.test_to_openssl_nist384pc                 C   r  r}   )r  r'   r   rF   rF   rG   test_to_openssl_nist521p  r  z OpenSSL.test_to_openssl_nist521pc                 C   r  r}   )r  r(   r   rF   rF   rG   test_to_openssl_secp256k1  r  z!OpenSSL.test_to_openssl_secp256k1c                 C   r  r}   )r  r)   r   rF   rF   rG   test_to_openssl_brainpoolp160r1  r  z'OpenSSL.test_to_openssl_brainpoolp160r1c                 C   r  r}   )r  r*   r   rF   rF   rG   test_to_openssl_brainpoolp192r1  r  z'OpenSSL.test_to_openssl_brainpoolp192r1c                 C   r  r}   )r  r+   r   rF   rF   rG   test_to_openssl_brainpoolp224r1  r  z'OpenSSL.test_to_openssl_brainpoolp224r1c                 C   r  r}   )r  r,   r   rF   rF   rG   test_to_openssl_brainpoolp256r1  r  z'OpenSSL.test_to_openssl_brainpoolp256r1c                 C   r  r}   )r  r-   r   rF   rF   rG   test_to_openssl_brainpoolp320r1  r  z'OpenSSL.test_to_openssl_brainpoolp320r1c                 C   r  r}   )r  r.   r   rF   rF   rG   test_to_openssl_brainpoolp384r1  r  z'OpenSSL.test_to_openssl_brainpoolp384r1c                 C   r  r}   )r  r/   r   rF   rF   rG   test_to_openssl_brainpoolp512r1  r  z'OpenSSL.test_to_openssl_brainpoolp512r1c                 C   r  r}   )r  r0   r   rF   rF   rG   test_to_openssl_brainpoolp160t1  r  z'OpenSSL.test_to_openssl_brainpoolp160t1c                 C   r  r}   )r  r1   r   rF   rF   rG   test_to_openssl_brainpoolp192t1  r  z'OpenSSL.test_to_openssl_brainpoolp192t1c                 C   r  r}   )r  r2   r   rF   rF   rG   test_to_openssl_brainpoolp224t1  r  z'OpenSSL.test_to_openssl_brainpoolp224t1c                 C   r  r}   )r  r3   r   rF   rF   rG   test_to_openssl_brainpoolp256t1  r  z'OpenSSL.test_to_openssl_brainpoolp256t1c                 C   r  r}   )r  r4   r   rF   rF   rG   test_to_openssl_brainpoolp320t1  r  z'OpenSSL.test_to_openssl_brainpoolp320t1c                 C   r  r}   )r  r5   r   rF   rF   rG   test_to_openssl_brainpoolp384t1  r  z'OpenSSL.test_to_openssl_brainpoolp384t1c                 C   r  r}   )r  r6   r   rF   rF   rG   test_to_openssl_brainpoolp512t1  r  z'OpenSSL.test_to_openssl_brainpoolp512t1c           
      C   s  |j }|sJ | |}tjdrtd td tj	|d}|
 }d}tdd}||  W d    n1 s?w   Y  tdd}||  W d    n1 s[w   Y  |j|ttj|td}	tdd}||	 W d    n1 sw   Y  td	d}|| W d    n1 sw   Y  td
d}||d  W d    n1 sw   Y  | ttd|  td|  tdd}||  W d    n1 sw   Y  td|  td|  tdd}||jdd W d    n	1 sw   Y  td|  td|  tdd}||jdd W d    n	1 s8w   Y  td|  td|  tdd}||jddd W d    n	1 sdw   Y  td|  td|  d S )Nr  r   r   t/pubkey.derr  r  )r7  r   r  r  t/baddata.txt   corruptzMdgst %s -verify t/pubkey.der -keyform DER -signature t/data.sig t/baddata.txtzJdgst %s -verify t/pubkey.der -keyform DER -signature t/data.sig t/data.txtr  z7dgst %s -sign t/privkey.pem -out t/data.sig2 t/data.txtz>dgst %s -verify t/pubkey.pem -signature t/data.sig2 t/data.txtzt/privkey-explicit.pemexplicit)curve_parameters_encodingz@dgst %s -sign t/privkey-explicit.pem -out t/data.sig2 t/data.txtr  pkcs8)r  z:dgst %s -sign t/privkey-p8.pem -out t/data.sig3 t/data.txtz>dgst %s -verify t/pubkey.pem -signature t/data.sig3 t/data.txtzt/privkey-p8-explicit.pem)r  r5  zCdgst %s -sign t/privkey-p8-explicit.pem -out t/data.sig3 t/data.txt)r  r  r  r   r  r  r  r  r   r\   r]   r  r  r   r   r^   r   rp   r  r   ra   rB   rY   )
rd   r   r  r	  r
  r   r   rg   rj  r   rF   rF   rG   r    s   



zOpenSSL.do_test_to_opensslz-rawinzpkeyutl -helpc                 c   s$    | ]}|t d v r| V  qdS )zlist -public-key-methodsN)rY   lowerr  rF   rF   rG   r  w  s    )ED25519ED448c                 C   s  t jdrtd t d tj|d}| }d}t	dd}|
|  W d    n1 s3w   Y  t	dd}|
|  W d    n1 sOw   Y  ||}t	dd}|
| W d    n1 snw   Y  t	dd}|
| W d    n1 sw   Y  t	d	d}|
|d
  W d    n1 sw   Y  | t td W d    n1 sw   Y  td td d S )Nr  r   r   r1  r  r  r  r  r2  r3  zWpkeyutl -verify -pubin -inkey t/pubkey.pem -rawin -in t/baddata.txt -sigfile t/data.sigzTpkeyutl -verify -pubin -inkey t/pubkey.pem -rawin -in t/data.txt -sigfile t/data.sig)r  r   r  r  r  r  r   r\   r]   r  r  r   r   r^   ra   rB   rY   )rd   r   r   r   rg   rj  rh   rF   rF   rG   do_eddsa_test_to_openssl  s>   


z OpenSSL.do_eddsa_test_to_openssled25519z4system openssl does not support signing with Ed25519c                 C   r  r}   )r:  r7   r   rF   rF   rG   test_to_openssl_ed25519  r  zOpenSSL.test_to_openssl_ed25519ed448z2system openssl does not support signing with Ed448c                 C   r  r}   )r:  r8   r   rF   rF   rG   test_to_openssl_ed448  r  zOpenSSL.test_to_openssl_ed448c                 C   s  |j }tjdrtd td d}td| td t	dd}|
| W d    n1 s5w   Y  td t	dd	}| }W d    n1 sRw   Y  t	d
d	}t| }W d    n1 snw   Y  | |j| ||| t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  r  zHpkeyutl -sign -inkey t/privkey.pem -rawin -in t/data.txt -out t/data.sigr  r  r  )namer  r   r  r  r  r  rY   r  r  r  r  r   r   assertIsr   r`   )rd   r   r	  rg   rj  rh   r   rF   rF   rG   do_eddsa_test_from_openssl  s8   


z"OpenSSL.do_eddsa_test_from_opensslc                 C   r  r}   )rA  r7   r   rF   rF   rG   test_from_openssl_ed25519  r  z!OpenSSL.test_from_openssl_ed25519c                 C   r  r}   )rA  r8   r   rF   rF   rG   test_from_openssl_ed448  r  zOpenSSL.test_from_openssl_ed448N)r  )LrC   rD   rE   setrY   rO   OPENSSL_SUPPORTED_CURVESr  pytestmarkslowskipifr  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  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r  OPENSSL_SUPPORTED_TYPESrB   r:  r<  r>  rA  rB  rC  rF   rF   rF   rG   r    s   
4
U%$r  c                   @   s`   e Zd Zedd eddD Zejj	devdddd	 Z
ejj	devddd
d ZdS )TooSmallCurvec                 c   r  r  r  r  rF   rF   rG   r    r  zTooSmallCurve.<genexpr>r  r  r  r  r  c                 C   sZ   t jtd}d}| t |j|ttjdt	dd W d    d S 1 s&w   Y  d S )Nr   r   r  Fr7  r   rK  )
r   r\   r#   ra   r   r^   r   rp   r  r   )rd   r   rg   rF   rF   rG   4test_sign_too_small_curve_dont_allow_truncate_raises  s   
"zBTooSmallCurve.test_sign_too_small_curve_dont_allow_truncate_raisesc                 C   s~   t jtd}| }d}|j|ttjdtdd}| 	t
 |j||ttjdtdd W d    d S 1 s8w   Y  d S )Nr   r   r  TrL  F)r7  r   rK  )r   r\   r#   r]   r^   r   rp   r  r   ra   r   r`   r   )rd   r   r   rg   r   rF   rF   rG   6test_verify_too_small_curve_dont_allow_truncate_raises  s$   

"zDTooSmallCurve.test_verify_too_small_curve_dont_allow_truncate_raisesN)rC   rD   rE   rD  rY   rO   rE  rF  rG  rI  rM  rN  rF   rF   rF   rG   rK    s    
rK  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )DERc                 C   s   |  tdd |  tdd |  tdd |  tdd |  td	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                 S   s   t t | d S )Nr   )r?   remove_integerr  )nrF   rF   rG   r     s   zDER.test_integer.<locals>.s)r   r   )r   r   )rP  r   )rQ  r   )r  r   	   
~[~e;~pd)rT  r   )rw   r?   r  )rd   r   rF   rF   rG   test_integer  s   zDER.test_integerc                 C   s   |  tdd |  tdd |  tdd |  tdd d	D ] }t|d
 }t|\}}|  || |  ||d  d
 q&d S )Nr   r  rP     rQ  s      s   )r   r   rH   rP  rQ  rW  r   r      more)rw   r?   encode_numberread_numberrd   rS  xn1llenrF   rF   rG   test_number,  s   zDER.test_numberc                 C   s   |  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D ] }t|d }t|\}}|  || |  ||d  d qJd S )Nr   r  rP  rV  rQ  s   r  s   r  s      s   s   more)   rH   ra  s   )	r   r   rH   rP  rQ  r  r  r`  ra  rX  )rw   r?   encode_lengthread_lengthr[  rF   rF   rG   test_length9  s   zDER.test_lengthc                 C   sF   t ddd }| |d t |\}}| |d | |d d S )Ns   ABCs   DEFs   GHIs   0ABCDEFGHIs   ABCDEF)r?   r   rw   remove_sequence)rd   r\  x1restrF   rF   rG   test_sequenceH  s
   zDER.test_sequencec                 C   sB   t dtj}| t|d t dtd}| t|d d S )Nr   s   a00706052b81040021r   s   0102030a0b0cs   a1060102030a0b0c)r?   r&  r$   encoded_oidrw   r   r   )rd   r\  rF   rF   rG   test_constructedO  s   zDER.test_constructedN)rC   rD   rE   rU  r_  rd  rh  rj  rF   rF   rF   rG   rO    s    rO  c                   @   sX   e Zd Zejjdd Zdd Zedi e	e
ejddd dd	d
 Zdd ZdS )Utilc                 C   sv   t j}tdD ]#}d| }dD ]}|||}| d|  ko!|k n  d||f qq| d|dtj  d d S )Ni  seed-%d)   r  r  i  i      r   z%xr   s8   6fa59d73bf0446ae8743cf748fc5ac11d5585a90356417e97155c3bc)r   r   ranger_   rw   r$   rt   encode)rd   ttar  r   rt   rS  rF   rF   rG   test_trytryagainW  s   
	(zUtil.test_trytryagainc                 C   sB   t j}d}d}|||}tjdk r| |d d S | |d d S )Nrm  s   text)r   r         )r   r   sysversion_inforw   )rd   rr  rt   r   rS  rF   rF   rG   test_trytryagain_singlem  s   

zUtil.test_trytryagain_singler   r   r  )	min_value	max_valuec                 C   sP   t d| }dD ]}t j||d}| d|  ko|k n  d||f q	d S )Nrl  )rm  r  r  rn  ro  r   r   )r   PRNG	randranger_   )rd   r  r   rt   rS  rF   rF   rG   test_randrangex  s
   (zUtil.test_randrangec                 C   s   d}t dd td|D }d|vsJ ||vsJ tdD ]}d| }t||}||  d7  < q| ||d   td|D ]}td|d	|| d
  f  qAd S )Nrm  c                 S   s   g | ]}|d fqS )r   rF   )r@  r  rF   rF   rG   rB    rC  z2Util.OFF_test_prove_uniformity.<locals>.<listcomp>r   r   i@B rl  z%3d: %s*d   )dictrp  r   r   r_   print)rd   rt   countsr  r   rS  rF   rF   rG   OFF_test_prove_uniformity  s   zUtil.OFF_test_prove_uniformityNrF   )rC   rD   rE   rF  rG  rH  rs  rx  r	   HYP_SETTINGSr   stintegersr}  r  rF   rF   rF   rG   rk  V  s    
rk  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#S )$RFC6979c                 C   s$   t | |||}| || d S r}   )r@   rr   rt   rw   )rd   rs   rx   hsh	hash_funcexpectedactualrF   rF   rG   _do  s   zRFC6979._doc                 C   s2   | j tjtddtd tjtd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.rk   rl      sample@8fa1f95d514760e498f28957b824ee6ec39ed64826ff4fecc2b5739ec45b91cdrs   rx   r  r  r  Nr  r(   rs   rn   rp   rq   ru   r   rF   rF   rG   test_SECP256k1  s   
zRFC6979.test_SECP256k1c                 C   2   | j tjtddtd tjtddd d S )N@cca9fbcc1b41e5a95d369eaa6ddcff73b61a4efaa279cfc6567e8daa39cbaf50rl   r  @2df40ca70e639d89528a6b670d9d48d9165fdc0febc0974056bdce192b8e16a3r  r  r   rF   rF   rG   test_SECP256k1_2     
zRFC6979.test_SECP256k1_2c                 C   &   | j tjdtd tjdd d S )Nr      Satoshi Nakamotol   ]iHsiNPIz$Nkxke} r  r  r(   rs   rp   rq   ru   r   rF   rF   rG   test_SECP256k1_3     
zRFC6979.test_SECP256k1_3c                 C   r  )Nr   sJ   All those moments will be lost in time, like tears in rain. Time to die...l   V1ujcCXxi
nH0G<VHk8r  r  r   rF   rF   rG   test_SECP256k1_4  s   
zRFC6979.test_SECP256k1_4c                 C   r  )Nl   @Al 3z~i9nW~ r  l   oTP*(9LM$dhW5Dv8M3r  r  r   rF   rF   rG   test_SECP256k1_5  r  zRFC6979.test_SECP256k1_5c                 C   r  )Nl   A hb+Jn p.(d0^y8Wx s   Alan Turingl   }:Anq`0=	39pC[AZRr  r  r   rF   rF   rG   test_SECP256k1_6  r  zRFC6979.test_SECP256k1_6c                 C   s:   | j td ddtddtddtdtjtddd d S )Nr   )4000000000000000000020108A2E0CC0D99F8A5EFrl   )09A4D6792295A7F730FC3F2B49CBC0F62E862272Fs@   AF2BDBE1AA9B6EC1E2ADE1D694F41FC71A831D0268E9891562113D8A62ADD1BF)23AF4074C90A02B3FE61D286D5C87F425E6BDD81Br  )r  r>   rn   r   rp   rq   r   rF   rF   rG   test_1  s   
zRFC6979.test_1c                 C   r  )N06FAB034934E4C0FC9AE67F5B5659A9D7D1FEFD187EE09FD4rl   r  037D7CA00D2C7B0E5E412AC03BD44BA837FDD5B28CD3B0021r  r  r#   rs   rn   rp   sha1ru   r   rF   rF   rG   test_2     
zRFC6979.test_2c                 C   r  )Nr  rl   r  032B1B6D7D42A05CB449065727A84804FB1A3E34D8F261496r  r  r#   rs   rn   rp   rq   ru   r   rF   rF   rG   test_3  r  zRFC6979.test_3c                 C   r  )Nr  rl   r  0A2AC7AB055E4F20692D49209544C203A7D1F2C0BFBC75DB1r  r  r#   rs   rn   rp   sha512ru   r   rF   rF   rG   test_4  r  zRFC6979.test_4c                 C   r  )Nr  rl      test0D9CF9C3D3297D3260773A1DA7418DB5537AB8DD93DE7FA25r  r  r   rF   rF   rG   test_5  r  zRFC6979.test_5c                 C   r  )Nr  rl   r  05C4CE89CF56D9E7C77C8585339B006B97B5F0680B4306C6Cr  r  r   rF   rF   rG   test_6  r  zRFC6979.test_6c                 C   r  )Nr  rl   r  00758753A5254759C7CFBAD2E2D9B0792EEE44136C9480527r  r  r   rF   rF   rG   test_7)  r  zRFC6979.test_7c                 C   r  )Nڃ0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75CAA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83538rl   r  ڃ089C071B419E1C2820962321787258469511958E80582E95D8378E0C2CCDB3CB42BEDE42F50E3FA3C71F5A76724281D31D9C89F0F91FC1BE4918DB1C03A5838D0F9r  )r  r'   rs   rn   rp   r  ru   r   rF   rF   rG   test_84  r  zRFC6979.test_8c                 C   r  )Nr  rl   r  ڃ0EDF38AFCAAECAB4383358B34D67C9F2216C8382AAEA44A3DAD5FDC9C32575761793FEF24EB0FC276DFC4F6E3EC476752F043CF01415387470BCBD8678ED2C7E1A0r  )r  r'   rs   rn   rp   rq   ru   r   rF   rF   rG   test_9C  r  zRFC6979.test_9c                 C   r  )Nr  rl   r  ڃ16200813020EC986863BEDFC1B121F605C1215645018AEA1A7B215A564DE9EB1B38A67AA1128B80CE391C4FB71187654AAA3431027BFC7F395766CA988C964DC56Dr  )r  r'   rs   rn   rp   r  ru   r   rF   rF   rG   test_10R  r  zRFC6979.test_10N)rC   rD   rE   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rF   rF   rF   rG   r    s$    			r  c                   @   r   )ECDHc                 C   s   || }|| }|| }|  t|||| |  t|||| | || || |   ko<|| |   ko<|| kn   |  t||	|
| d S r}   )rw   r>   r_   )rd   r   rs   dAx_qAy_qAdBx_qBy_qBx_Zy_ZqAqBZrF   rF   rG   r  c  s   

zECDH._doN)rC   rD   rE   r  rF   rF   rF   rG   r  b  r   r  c                   @   s<   e Zd Zdd Zdd Zejjdd Zejjdd Z	d	S )
RFC6932c                 C   T   | j ttjtddtddtddtddtddtddtddtd	dd

 d S )N87C4B7A2C8A4BAD1FBB7D79CC0955DB7C6A4660CA64CC4778159B495Erl   8B104A67A6F6E85E14EC1825E1539E8ECDBBF584922367DD88C6BDCF2846D782E7FDB5F60CD8404301AC5949C58EDB26BC68BA07695B750A94863976D4AAE6CD0F6DD18DEFEF55D96569D0507C03E74D6486FFA28FB82A97089A9296147B71B21A4B574E1278245B536F14D8C2B9D07A874E89B900D7C77A709A797276B8CA1BA61BB95B546FC29F862E44D59D25B8312DFD98783F9FB77B9704945A73BEB6DCCBE3B65D0F967DCAB574EB86F800811D64114B1C48C621AB3357CF93F496E4238696A2A012B3C98
r   rs   r  r  r  r  r  r  r  r  )r  r:   r+   rs   rn   r   rF   rF   rG   test_brainpoolP224r1u  s8   
zRFC6932.test_brainpoolP224r1c                 C   r  )N@041EB8B1E2BC681BCE8E39963B2E9FC415B05283313DD1A8BCC055F11AE49699rl   @78028496B5ECAAB3C8B6C12E45DB1E02C9E4D26B4113BC4F015F60C5CCC0D206@A2AE1762A3831C1D20F03F8D1E3C0C39AFE6F09B4D44BBE80CD100987B05F92B@06F5240EACDB9837BC96D48274C8AA834B6C87BA9CC3EEDD81F99A16B8D804D3@8E07E219BA588916C5B06AA30A2F464C2F2ACFC1610A3BE2FB240B635341F0DB@148EA1D7D1E7E54B9555B6C9AC90629C18B63BEE5D7AA6949EBBF47B24FDE40D@05E940915549E9F6A4A75693716E37466ABA79B4BF2919877A16DD2CC2E23708@6BC23B6702BC5A019438CEEA107DAAD8B94232FFBBC350F3B137628FE6FD134Cr  r  r;   r,   rs   rn   r   rF   rF   rG   test_brainpoolP256r1  H   
zRFC6932.test_brainpoolP256r1c                 C   r  )N`014EC0755B78594BA47FB0A56F6173045B4331E74BA1A6F47322E70D79D828D97E095884CA72B73FDABD5910DF0FA76Arl   `45CB26E4384DAF6FB776885307B9A38B7AD1B5C692E0C32F0125332778F3B8D3F50CA358099B30DEB5EE69A95C058B4E`8173A1C54AFFA7E781D0E1E1D12C0DC2B74F4DF58E4A4E3AF7026C5D32DC530A2CD89C859BB4B4B768497F49AB8CC859`6B461CB79BD0EA519A87D6828815D8CE7CD9B3CAA0B5A8262CBCD550A015C90095B976F3529957506E1224A861711D54`01BF92A92EE4BE8DED1A911125C209B03F99E3161CFCC986DC7711383FC30AF9CE28CA3386D59E2C8D72CE1E7B4666E8`3289C4A3A4FEE035E39BDB885D509D224A142FF9FBCC5CFE5CCBB30268EE47487ED8044858D31D848F7A95C635A347AC`04CC4FF3DCCCB07AF24E0ACC529955B36D7C807772B92FCBE48F3AFE9A2F370A1F98D3FA73FD0C0747C632E12F1423EC`7F465F90BD69AFB8F828A214EB9716D66ABC59F17AF7C75EE7F1DE22AB5D05085F5A01A9382D05BF72D96698FE3FF64Er  r  r<   r.   rs   rn   r   rF   rF   rG   test_brainpoolP384r1  H   
zRFC6932.test_brainpoolP384r1c                 C   r  )Nڀ636B6BE0482A6C1C41AA7AE7B245E983392DB94CECEA2660A379CFE159559E357581825391175FC195D28BAC0CF03A7841A383B95C262B983782874CCE6FE333rl   ڀ0562E68B9AF7CBFD5565C6B16883B777FF11C199161ECC427A39D17EC2166499389571D6A994977C56AD8252658BA8A1B72AE42F4FB7532151AFC3EF0971CCDAڀA7CA2D8191E21776A89860AFBC1F582FAA308D551C1DC6133AF9F9C3CAD59998D70079548140B90B1F311AFB378AA81F51B275B2BE6B7DEE978EFC7343EA642Eڀ0AF4E7F6D52EDD52907BB8DBAB3992A0BB696EC10DF11892FF205B66D381ECE72314E6A6EA079CEA06961DBA5AE6422EF2E9EE803A1F236FB96A1799B86E5C8Bڀ5A7954E32663DFF11AE24712D87419F26B708AC2B92877D6BFEE2BFC43714D89BBDB6D24D807BBD3AEB7F0C325F862E8BADE4F74636B97EAACE739E11720D323ڀ96D14621A9283A1BED84DE8DD64836B2C0758B11441179DC0C54C0D49A47C03807D171DD544B72CAAEF7B7CE01C7753E2CAD1A861ECA55A71954EE1BA35E04BEڀ1EE8321A4BBF93B9CF8921AB209850EC9B7066D1984EF08C2BB723236208AC8F1A483E79461A00E0D5F6921CE9D360502F85C812BEDEE23AC5B210E5811B191Eڀ2632095B7B936174B41FD2FAF369B1D18DCADEED7E410A7E251F0831097C50D02CFED02607B6A2D5ADB4C0006008562208631875B58B54ECDA5A4F9FE9EAABA6r  r  r=   r/   rs   rn   r   rF   rF   rG   test_brainpoolP512r1  H   
zRFC6932.test_brainpoolP512r1N)
rC   rD   rE   r  r  rF  rG  rH  r  r  rF   rF   rF   rG   r  r  s    .
.r  c                   @   s4   e Zd Zdd Zejjdd Zejjdd ZdS )RFC7027c                 C   r  )N@81DB1EE100150FF2EA338D708271BE38300CB54241D79950F77B063039804F1Drl   @44106E913F92BC02A1705D9953A8414DB95E1AAA49E81D9E85F929A8E3100BE5@8AB4846F11CACCB73CE49CBDD120F5A900A69FD32C272223F789EF10EB089BDC@55E40BC41E37E3E2AD25C3C6654511FFA8474A91A0032087593852D3E7D76BD3@8D2D688C6CF93E1160AD04CC4429117DC2C41825E1E9FCA0ADDD34E6F1B39F7B@990C57520812BE512641E47034832106BC7D3E8DD0E4C7F1136D7006547CEC6A@89AFC39D41D3B327814B80940B042590F96556EC91E6AE7939BCE31F3A18BF2B@49C27868F4ECA2179BFD7D59B1E3BF34C1DBDE61AE12931648F43E59632504DEr  r  r   rF   rF   rG   r  +	  r  zRFC7027.test_brainpoolP256r1c                 C   r  )N`1E20F5E048A5886F1F157C74E91BDE2B98C8B52D58E5003D57053FC4B0BD65D6F15EB5D1EE1610DF870795143627D042rl   `68B665DD91C195800650CDD363C625F4E742E8134667B767B1B476793588F885AB698C852D4A6E77A252D6380FCAF068`55BC91A39C9EC01DEE36017B7D673A931236D2F1F5C83942D049E3FA20607493E0D038FF2FD30C2AB67D15C85F7FAA59`032640BC6003C59260F7250C3DB58CE647F98E1260ACCE4ACDA3DD869F74E01F8BA5E0324309DB6A9831497ABAC96670`4D44326F269A597A5B58BBA565DA5556ED7FD9A8A9EB76C25F46DB69D19DC8CE6AD18E404B15738B2086DF37E71D1EB4`62D692136DE56CBE93BF5FA3188EF58BC8A3A0EC6C1E151A21038A42E9185329B5B275903D192F8D4E1F32FE9CC78C48`0BD9D3A7EA0B3D519D09D8E48D0785FB744A6B355E6304BC51C229FBBCE239BBADF6403715C35D4FB2A5444F575D4F42`0DF213417EBE4D8E40A5F76F66C56470C489A3478D146DECF6DF0D94BAE9E598157290F8756066975F1DB34B2324B7BDr  r  r   rF   rF   rG   r  Y	  r  zRFC7027.test_brainpoolP384r1c                 C   r  )Nڀ16302FF0DBBB5A8D733DAB7141C1B45ACBC8715939677F6A56850A38BD87BD59B09E80279609FF333EB9D4C061231FB26F92EEB04982A5F1D1764CAD57665422rl   ڀ0A420517E406AAC0ACDCE90FCD71487718D3B953EFD7FBEC5F7F27E28C6149999397E91E029E06457DB2D3E640668B392C2A7E737A7F0BF04436D11640FD09FDڀ72E6882E8DB28AAD36237CD25D580DB23783961C8DC52DFA2EC138AD472A0FCEF3887CF62B623B2A87DE5C588301EA3E5FC269B373B60724F5E82A6AD147FDE7ڀ230E18E1BCC88A362FA54E4EA3902009292F7F8033624FD471B5D8ACE49D12CFABBC19963DAB8E2F1EBA00BFFB29E4D72D13F2224562F405CB80503666B25429ڀ9D45F66DE5D67E2E6DB6E93A59CE0BB48106097FF78A081DE781CDB31FCE8CCBAAEA8DD4320C4119F1E9CD437A2EAB3731FA9668AB268D871DEDA55A5473199Fڀ2FDC313095BCDD5FB3A91636F07A959C8E86B5636A1E930E8396049CB481961D365CC11453A06C719835475B12CB52FC3C383BCE35E27EF194512B71876285FAڀA7927098655F1F9976FA50A9D566865DC530331846381C87256BAF3226244B76D36403C024D7BBF0AA0803EAFF405D3D24F11A9B5C0BEF679FE1454B21C4CD1Fڀ7DB71C3DEF63212841C463E881BDCF055523BD368240E6C3143BD8DEF8B3B3223B95E0F53082FF5E412F4222537A43DF1C6D25729DDB51620A832BE6A26680A2r  r  r   rF   rF   rG   r  	  r  zRFC7027.test_brainpoolP512r1N)	rC   rD   rE   r  rF  rG  rH  r  r  rF   rF   rF   rG   r  (	  s    .
.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	                 C   sz   t t| |}	tt|| |}
|	j|
ksJ |	j||tt|dd}|t|t|fks1J |
|||t	s;J d S )Nrl   )r7  r   rm   )
r   rb   r   r   r   r^   r   rn   r`   r   )wgwxgwyrm   msgmdr   r   r   r   r   rh   rF   rF   rG   test_RFC4754_vectors	  s   <r'  )t
__future__r   r   r   	unittest2unittestImportErrorr  r  rM   rF  rv  binasciir   r   rp   	functoolsr   
hypothesisr   r	   hypothesis.strategies
strategiesr  sixr
   keysr   r   r   r   r    r   r   r   r   r   r   r   r   r   r   r   r   r9   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   rA   r:   r;   r<   r=   ellipticcurver>   r?   r@   	ExceptionrB   r  argvrY   TestCaserZ   rG  parametrizerp  r  paramsr   rW  appendparamr  r?  r  r  rH  r  rK  rO  rk  r  r  r  r  rq   sha384r  r'  rF   rF   rF   rG   <module>   s    t      ~




     W-@B K 7 ;