
    dfi*                        d dl mZmZ d dlZ	 d dlmZ eD  cg c]  } | dvr| 
 c} Zd dlmZ d dlZd dl	Z	d dl
mZ d dlmZmZmZ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 ddlmZ ddlmZmZmZm Z m!Z!m"Z" ddl#m$Z$ dZ%	 eD cg c]   }| ejL                  |      jN                  f" c}Z(	 g Z)	  e*ed       D ]  Z+ e*e(d       D cg c]  \  }}d |cxk  re+jX                  k  rn n|! c}}D ]f  Z- ej\                  e+ eejL                  e-            Z/e)ja                  djc                  e+e-      e/jd                  e/jg                  e%e      f       h  ejh                  jk                  de)D cg c]  \  }}} ejl                  |||       c}}}      d        Z7ejp                  d        Z9i Z:e	jv                  dk\  r1d dlm<Z< de:d<   e<jz                  e<j|                  e<j~                  ge:d<    e@e:      ZAd eAd!<    ed3i e: e e9e)            d"               ZBejp                  d#        ZC ed3i eA e eC             d$               ZDd% ZEejp                  d&        ZFd' ZGd( ZHejp                  d)        ZId* ZJ ed3i e: e ej                  e)       eJ             d+               ZL ed3i e: e ej                  e)       ej                  d,-             ee)d     e! ed        ed                    ee)d     e! ed       ed            d.z          ee)d     e! ed      gd/z         d0                                    ZNe)D cg c]]  \  }}} eO|jV                  jV                  e$      s:|| e e||jV                  j                        d1|jV                  j                  if_ c}}}ZQ	 eQe)D cg c](  \  }}} eO|jV                  jV                  e$      r|||f* c}}}z  ZQ ed3i e: e e9eQ            d2               ZRy# e$ r g dZY w xY wc c} w c c}w c c}}w c c}}}w c c}}}w c c}}}w )4    )with_statementdivisionN)algorithms_available)md5sha1sha224sha256sha384sha512)mdc2md2md4	whirlpool	ripemd160)partial)noteassumegivensettingsexample   )
SigningKey)BadSignatureError)sigencode_dersigencode_string)sigdecode_dersigdecode_string)curves)encode_integerencode_bitstringencode_octet_string
encode_oidencode_sequenceencode_constructed)	CurveEdTws   some data to signc                     | j                   S N)baselenxs    R/home/api-vastappli/venv/lib/python3.12/site-packages/ecdsa/test_malformed_sigs.py<lambda>r,   ?   s
    !))     )keyc                     | d   S )Nr    r)   s    r+   r,   r,   B   s
    ad r-   )hashfuncz{0} {1})	sigencodezverifying_key,signature)idc                 @    | j                  |t        t              sJ y N	sigdecode)verifyexample_datar   )verifying_key	signatures     r+   test_signaturesr<   S   s(    
 <=     r-   c           
          | t        j                  |            \  }}}t        dj                  |             t	        |      } | t        j
                  t        j                  dt        |      dz
        d            }|j                          t        |      D ]  }||=  t        dj                  |             |r | t        j                  t        j                  dt        |      dz
        t        j                  dd                  }|j                         D ]  \  }}	||xx   |	z  cc<    t        d	j                  |              | t        j                  dt        |                  }
 | t        j                  d
            }|d|
 |z   ||
d z   }t        dj                  |
|             t        |      }t        |xs xs |       t        ||k7         ||fS )z
    Hypothesis strategy that generates pairs of VerifyingKey and malformed
    signatures created by fuzzing of a valid signature.
    Configuration: {0}r   r   	min_value	max_valueT)uniquezRemove bytes: {0}   z	xors: {0}   max_sizeNz%Inserted at position {0} bytes: {1!r})stsampled_fromr   format	bytearraylistsintegerslensortreverseddictionariesitemsbinarybytesr   )drawkeys_and_sigsnamer:   old_sigsig	to_removeixorsval
insert_posinsert_datas               r+   st_fuzzed_sigr_   ]   s    $((F#G D-		$	$T	*+
G
C 
qCHqLA$OI NNi  F		#	#I	./ OOa3s8a<@a37
 jjl 	FAsFcMF	[%& bkkASBCJryy#./K
kz
[
(3z{+;
;C/66z;O *C
9++,
3'>#r-   )      )HealthChecki  deadlinesuppress_health_check
   max_examplesc                     | \  }}t        j                  t              5  |j                  |t        t
               d d d        y # 1 sw Y   y xY wr5   pytestraisesr   r8   r9   r   )argsr:   rX   s      r+   test_fuzzed_der_signaturesrl      sI     M3	(	) IS,-HI I I   AAc                     | t        j                  t                    \  }}}t        dj	                  |             t        |j                  j                        } | t        j                  d|dz        t        j                  |dz	  |dz         z        } | t        j                  d|dz        t        j                  |dz	  |dz         z        }t        t        |      t        |            }||fS )z
    Hypothesis strategy for selecting random values and encoding them
    to ECDSA-Sig-Value object::

        ECDSA-Sig-Value ::= SEQUENCE {
            r INTEGER,
            s INTEGER
        }
    r>   r      r?   r`   r   )rG   rH   rU   r   rI   intcurveorderrL   r#   r   )rT   rV   r:   _rr   rsrX   s           r+   st_random_der_ecdsa_sig_valuerv      s     ""//-"@AD-		$	$T	*+##))*E 	
a5A:6
++
eai
@	A	A 	
a5A:6
++
eai
@	A	A
 .+^A->
?C#r-   c                     | \  }}t        j                  t              5  |j                  |t        t
               ddd       y# 1 sw Y   yxY w)zd
    Check if random values encoded in ECDSA-Sig-Value structure are rejected
    as signature.
    r6   Nrh   paramsr:   rX   s      r+   test_random_der_ecdsa_sig_valuerz      sI      M3	(	) IS,-HI I Irm   c                  n    d|vrd|d<   t        j                  t        t        j                  | i |      S )z
    Hypothesis strategy that returns a random positive integer as DER
    INTEGER.
    Parameters are passed to hypothesis.strategy.integer.
    r@   r   )rG   buildsr   rL   rk   kwargss     r+   st_der_integerr      s5     & {99^R[[$%A&%ABBr-   c                      | t        j                  |i |      }|rE | t        j                  dd            }t        |      }|dxx   d|z   z  cc<   t	        |      }nd}t        ||      S )z|
    Hypothesis strategy that returns a random DER BIT STRING.
    Parameters are passed to hypothesis.strategy.binary.
    r   ra   r?   r`   )rG   rR   rL   rJ   rS   r    )rT   rk   r~   dataunuseds        r+   st_der_bit_stringr      sl     		4*6*+DbkkA;<RaiL T{D&))r-   c                  \    t        j                  t        t        j                  | i |      S )z
    Hypothesis strategy that returns a random DER OCTET STRING object.
    Parameters are passed to hypothesis.strategy.binary
    )rG   r|   r!   rR   r}   s     r+   st_der_octet_stringr      s$    
 99("))T*DV*DEEr-   c                  ,    t        j                  d      S )z;
    Hypothesis strategy that returns DER NULL object.
    s    )rG   justr0   r-   r+   st_der_nullr      s     77;r-   c           	      F    | t        j                  dd            }|dk  r | t        j                  dd            }n  | t        j                  dddz              } | t        j                  t        j                  dddz        d            }t        ||g| S )zI
    Hypothesis strategy that returns DER OBJECT IDENTIFIER objects.
    r   r`   r?   '   i   2   rE   )rG   rL   rK   r"   )rT   firstsecondrests       r+   
st_der_oidr     s    
 qA67EqybkkA<=bkkAC@A
qAsF;bID eV+d++r-   c                      t        j                  t        j                  d      t        ddz        z  t	        d      z  t        d      z  t               z  t               z  d d	      S )
z
    Hypothesis strategy that returns random DER structures.

    A valid DER structure is any primitive object, an octet encoding
    of a valid DER structure, sequence of valid DER objects or a constructed
    encoding of any of the above.
    r-   r`   i   )rA      rE   c                    t        j                  d t        j                  |             t        j                  d t        j                  |             z  t        j                  d t        j                  | d            z  t        j                  d t        j                  dd	      t        j                  |             z  S )
Nc                     t        |       S r'   )r!   r)   s    r+   r,   z*st_der.<locals>.<lambda>.<locals>.<lambda>$  s    )!, r-   c                     t        | d      S )Nr   )r    r)   s    r+   r,   z*st_der.<locals>.<lambda>.<locals>.<lambda>&  s    .q!4 r-   c                     t        |  S r'   )r#   r)   s    r+   r,   z*st_der.<locals>.<lambda>.<locals>.<lambda>(  s    oq) r-      rE   c                     t        | |      S r'   )r$   )tagr*   s     r+   r,   z*st_der.<locals>.<lambda>.<locals>.<lambda>+  s    -c15 r-   r   ?   r?   )rG   r|   one_ofrK   rL   )childrens    r+   r,   zst_der.<locals>.<lambda>#  s    ,bii.A
 ))4bii6I
JK )))288Hs+K
	
 ))5KK!t4IIh

 r-   (   )
max_leaves)rG   	recursiver   r   r   r   r   r   r0   r-   r+   st_derr     so     <<

1d7
+	,
W
-	. w
/	0 -		
 ,		
 ' r-   c                     | \  }}}t        j                  t              5  |j                  |t        t
               ddd       y# 1 sw Y   yxY w)z8Check if random DER structures are rejected as signaturer6   Nrh   ry   derrV   r:   rs   s        r+   test_random_der_as_signaturer   3  sK     $D-	(	) IS,-HI I I   AAr   rE          c                     | \  }}}t        j                  t              5  |j                  |t        t
               ddd       y# 1 sw Y   yxY w)z/Check if random bytes are rejected as signaturer6   Nrh   r   s        r+   test_random_bytes_as_signaturer   =  sK     $D-	(	) IS,-HI I Ir   rr   c                     | \  }}t        j                  t              5  |j                  |t        t
               d d d        y # 1 sw Y   y xY wr5   )ri   rj   r   r8   r9   r   rx   s      r+   test_fuzzed_string_signaturesr   l  sJ      M3	(	) LS,:JKL L Lrm   r0   )S
__future__r   r   hashlibr   ImportError	functoolsr   ri   syshypothesis.strategies
strategiesrG   
hypothesisr   r   r   r   r   keysr   r   utilr   r   r   r   r   r   r   r    r!   r"   r#   r$   ellipticcurver%   r9   newdigest_sizehash_and_sizerU   sortedrq   r(   hash_alggenerateskappendrI   r:   signmarkparametrizeparamr<   	compositer_   ry   version_inforb   data_too_largefilter_too_muchtoo_slowdictslow_paramsrl   rv   rz   r   r   r   r   r   r   rH   r   rR   r   
isinstancerr   keys_and_string_sigsr   )rZ   rV   sizevkrX   r:   s   000000r+   <module>r      s(   / 
, "	@@  
   
 " = =  # 1 1   % $ I 7K.2T;7;;t(()&
  I F 34 
E !NCD$t$u}}$ 	 

 !Z  GGKK:
 	  1  >	


( 9FGGb#\V\\"cd#G	 / /d 
v& F:""##'F"# 6l N  
F}]#$I % I  B 
K$&'I ( IC * * F  , ,> 
Fr}%vx0I 1 I 
Fr}%yryy''BC!onQ&79JK 	!N1%~a'89GC 	q	?^A->,?!,CDEI F	 D I" %2  	!mSm))//; 	3 3 3 9 9:	
%%++	
   %2  	!mS-%%++Y7 	   
F})*+L , LO  >* Ht$s5   P% P5	%P:$P?  Q"A"Q-Q
%	P21P2