
    i,                     b	   S SK JrJr  S SKr S SKJr  \ V s/ s H  n U S;  d  M  U PM     sn rS SKJr  S SKrS SK	r	S SK
Jr  S SKJrJrJrJrJr  SS	KJr  SS
KJr  SSKJrJr  SSKJrJr  SSKJrJrJr  SSKJrJ r J!r!J"r"J#r#J$r$  SSK%J&r&  Sr' \ Vs/ s H  o\RQ                  U5      RR                  4PM!     snr* S\	RV                  ;   a  \\/r/ r, \-" \S S9 H  r.\-" \*S S9 VVs/ s H$  u  pS Us=:  a  \.R^                  ::  d  M  O  M"  UPM&     snn Ha  r0\Rb                  " \.\" \RP                  \05      S9r2\,Rg                  SRi                  \.\05      \2Rj                  \2Rm                  \'\S945        Mc     M     \Rn                  Rq                  S\, VVVs/ s H  u  pn\Rs                  X4US9PM     snnn5      S 5       r:\Rv                  S 5       r<0 r=\	R|                  S:  a1  S SKJ?r?  S\=S'   \?R                  \?R                  \?R                  /\=S '   S\	RV                  ;   a  S!\=S"'   \C" \=5      rDS\	RV                  ;   a  S\DS"'   OS#\DS"'   \" S50 \DD6\" \<" \,5      5      S$ 5       5       rE\Rv                  S% 5       rF\" S50 \DD6\" \F" 5       5      S& 5       5       rGS' rH\Rv                  S( 5       rIS) rJS* rK\Rv                  S+ 5       rLS, rM\" S50 \DD6\" \R                  " \,5      \M" 5       5      S- 5       5       rO\" S50 \DD6\" \R                  " \,5      \R                  " S.S/95      \" \,S    \#" \" S 5      \" S 5      5      5      \" \,S    \#" \" S5      \" S5      5      S0-   5      \" \,S    \#" \" S5      /S1-  6 5      S2 5       5       5       5       5       rQ\, VVVs/ s Hc  u  pn\R" UR\                  R\                  \&5      (       a  M*  UU\" \" XER\                  R                  5      S3UR\                  R                  064PMe     snnnrT \T\, VVVs/ s H/  u  pn\R" UR\                  R\                  \&5      (       d  M*  UUU4PM1     snnn-  rT\" S50 \DD6\" \<" \T5      5      S4 5       5       rUg! \ a    / SQr GNtf = fs  sn f s  snf s  snnf s  snnnf s  snnnf s  snnnf )6    )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	SECP112r2	SECP128r1)encode_integerencode_bitstringencode_octet_string
encode_oidencode_sequenceencode_constructed)	CurveEdTws   some data to signz--fastc                     U R                   $ N)baselenxs    d/home/maestro/MAESTRO/maestro-backend/venv/lib/python3.13/site-packages/ecdsa/test_malformed_sigs.py<lambda>r.   C   s    !))    )keyc                     U S   $ )Nr    r+   s    r-   r.   r.   F   s    adr/   )hashfuncz{0} {1})	sigencodezverifying_key,signature)idc                 D    U R                  U[        [        S9(       d   eg N	sigdecode)verifyexample_datar   )verifying_key	signatures     r-   test_signaturesr>   W   s(    
 <=     r/   c           
         U " [         R                  " U5      5      u  p#n[        SR                  U5      5        [	        U5      nU " [         R
                  " [         R                  " S[        U5      S-
  S9SS95      nUR                  5         [        U5       H  nXW	 M     [        SR                  U5      5        SnU(       a  U " [         R                  " [         R                  " S[        U5      S-
  S9[         R                  " SS	S95      5      nUR                  5        H  u  pyXW==   U	-  ss'   M     [        S
R                  U5      5        U " [         R                  " S[        U5      S95      n
U " [         R                  " SS95      nUSU
 U-   XZS -   n[        SR                  X5      5        [        U5      n[        U=(       d    U=(       d    U5        [        XT:g  5        X54$ )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}N   z	xors: {0}   max_sizez%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_sigra   a   s    $((F#G D		$	$T	*+
G
C 
qCHqLA$OI NNi F !		#	#I	./ D
OOa3s8a<@a37
 jjlFAFcMF #[%& bkkASBCJryy#./K
kz
[
(3{+;
;C/66zO *C
9++,
3>r/   )      )HealthChecki  deadlinesuppress_health_check   max_examples
   c                     U u  p[         R                  " [        5         UR                  U[        [
        S9  S S S 5        g ! , (       d  f       g = fr7   pytestraisesr   r:   r;   r   )argsr<   rZ   s      r-   test_fuzzed_der_signaturesro      s:     M	(	)S,-H 
*	)	)   A
Ac                    U " [         R                  " [        5      5      u  pn[        SR	                  U5      5        [        UR                  R                  5      nU " [         R                  " SUS-  S9[         R                  " US-	  US-   S9-  5      nU " [         R                  " SUS-  S9[         R                  " US-	  US-   S9-  5      n[        [        U5      [        U5      5      nX'4$ )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      rA   rb   r   )rI   rJ   rW   r   rK   intcurveorderrN   r%   r!   )rV   rX   r<   _ru   rsrZ   s           r-   st_random_der_ecdsa_sig_valuery      s     ""//-"@AD		$	$T	*+##))*E 	
a5A:6
++
eai
@	A	A 	
a5A:6
++
eai
@	A	A
 .+^A->
?Cr/   c                     U u  p[         R                  " [        5         UR                  U[        [
        S9  SSS5        g! , (       d  f       g= f)zX
Check if random values encoded in ECDSA-Sig-Value structure are rejected
as signature.
r8   Nrk   paramsr<   rZ   s      r-   test_random_der_ecdsa_sig_valuer}      s:      M	(	)S,-H 
*	)	)rp   c                  v    SU;  a  SUS'   [         R                  " [        [         R                  " U 0 UD65      $ )z
Hypothesis strategy that returns a random positive integer as DER
INTEGER.
Parameters are passed to hypothesis.strategy.integer.
rB   r   )rI   buildsr!   rN   rn   kwargss     r-   st_der_integerr      s5     & {99^R[[$%A&%ABBr/   c                     U " [         R                  " U0 UD65      nU(       aC  U " [         R                  " SSS95      n[        U5      nUS==   SU-  * -  ss'   [	        U5      nOSn[        X45      $ )zp
Hypothesis strategy that returns a random DER BIT STRING.
Parameters are passed to hypothesis.strategy.binary.
r   rc   rA   rb   )rI   rT   rN   rL   rU   r"   )rV   rn   r   dataunuseds        r-   st_der_bit_stringr      sj     		4*6*+DbkkA;<RaiL T{D))r/   c                  `    [         R                  " [        [         R                  " U 0 UD65      $ )zx
Hypothesis strategy that returns a random DER OCTET STRING object.
Parameters are passed to hypothesis.strategy.binary
)rI   r   r#   rT   r   s     r-   st_der_octet_stringr      s$    
 99("))T*DV*DEEr/   c                  .    [         R                  " S5      $ )z3
Hypothesis strategy that returns DER NULL object.
s    )rI   justr2   r/   r-   st_der_nullr     s     77;r/   c           	      2   U " [         R                  " SSS95      nUS:  a  U " [         R                  " SSS95      nOU " [         R                  " SSS-  S95      nU " [         R                  " [         R                  " SSS-  S9SS95      n[        X/UQ76 $ )zA
Hypothesis strategy that returns DER OBJECT IDENTIFIER objects.
r   rb   rA   '   i   2   rG   )rI   rN   rM   r$   )rV   firstsecondrests       r-   
st_der_oidr     s    
 qA67EqybkkA<=bkkAC@A
qAsF;bID e+d++r/   c                      [         R                  " [         R                  " S5      [        SS-  S9-  [	        SS9-  [        SS9-  [        5       -  [        5       -  S SS	9$ )
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/   rb   i   )rC      rG   c           	         [         R                  " [        [         R                  " U 5      5      [         R                  " S [         R                  " U 5      5      -  [         R                  " S [         R                  " U SS95      -  [         R                  " [
        [         R                  " SSS9[         R                  " U 5      5      -  $ )Nc                     [        U S5      $ )Nr   )r"   r+   s    r-   r.   *st_der.<locals>.<lambda>.<locals>.<lambda>.  s    .q!4r/   c                     [        U 6 $ r)   )r%   r+   s    r-   r.   r   0  s	    oq)r/      rG   r   ?   rA   )rI   r   r#   one_ofrM   r&   rN   )childrens    r-   r.   st_der.<locals>.<lambda>-  s    #6		(8KL
))4bii6I
JK
)))288Hs+K


 ))KK!t4IIh
	
r/   (   )
max_leaves)rI   	recursiver   r   r   r   r   r   r2   r/   r-   st_derr     so     <<

1d7
+	,
W
-	. w
/	0 -		
 ,			
 # r/   c                     U u  p#n[         R                  " [        5         UR                  U[        [
        S9  SSS5        g! , (       d  f       g= f)z8Check if random DER structures are rejected as signaturer8   Nrk   r|   derrX   r<   rv   s        r-   test_random_der_as_signaturer   ;  s<     $D	(	)S,-H 
*	)	)   A
Ar   rG          c                     U u  p#n[         R                  " [        5         UR                  U[        [
        S9  SSS5        g! , (       d  f       g= f)z/Check if random bytes are rejected as signaturer8   Nrk   r   s        r-   test_random_bytes_as_signaturer   E  s<     $D	(	)S,-H 
*	)	)r   ru   c                     U u  p[         R                  " [        5         UR                  U[        [
        S9  S S S 5        g ! , (       d  f       g = fr7   )rl   rm   r   r:   r;   r   r{   s      r-   test_fuzzed_string_signaturesr   t  s;      M	(	)S,:JK 
*	)	)rp   r2   )V
__future__r   r   hashlibr   ImportError	functoolsr   rl   syshypothesis.strategies
strategiesrI   
hypothesisr   r   r   r   r   keysr   r   utilr   r   r   r   r   r   r    r   r!   r"   r#   r$   r%   r&   ellipticcurver'   r;   newdigest_sizehash_and_sizeargvrW   sortedrt   r*   hash_alggenerateskappendrK   r<   signmarkparametrizeparamr>   	compositera   r|   version_inford   data_too_largefilter_too_muchtoo_slowdictslow_paramsro   ry   r}   r   r   r   r   r   r   rJ   r   rT   r   
isinstanceru   keys_and_string_sigsr   )r\   rX   sizevkrZ   r<   s   000000r-   <module>r      sq   / 
, "!@@ ! 
   
 " = =  # 1 1 0 0  % $ I 7K6Jd7;;t(()6J&
 sxx#F  I F 34E !NCCJDt$u}}$ 	$ 	C
   GGKK:
 	  1  >	
 5( 9FG#V\\"d\#G	 0 0f 
v& F:""##'F"#
 sxxF>6lsxx"#K"$K 
K}]#$I % I  B 
K$&'I ( IC * * F  , ,: 
Kr}%vx0I 1 I 
Kr}%ryy''BC!onQ&79JK 	!N1%~a'89GC 	q	?^A->,?!,CDEI F	 D I" %2 %2 Sm))//;3 3 3 9 9:	
%%++	
 %2   %2 %2 S-%%++Y7
 %2   
K})*+L , L_  >$* H|$sQ   Q; 
RR&R+RRRR')R#=R#)R*
	R*
;
R	R	