
    tZh,                     .	   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mZ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jP                  |      jR                  f" c}Z*	 de	jV                  v reegZg Z,	  e-ed       D ]  Z. e-e*d       D cg c]  \  }}d |cxk  re.j^                  k  rn n|! c}}D ]f  Z0 ejb                  e. eejP                  e0            Z2e,jg                  dji                  e.e0      e2jj                  e2jm                  e'e      f       h  ejn                  jq                  de,D cg c]  \  }}} ejr                  |||       c}}}      d        Z:ejv                  d        Z<i Z=e	j|                  dk\  r1d dlm?Z? de=d<   e?j                  e?j                  e?j                  ge=d <   de	jV                  v rd!e=d"<    eCe=      ZDde	jV                  v rdeDd"<   nd#eDd"<    ed5i eD e e<e,            d$               ZEejv                  d%        ZF ed5i eD e eF             d&               ZGd' ZHejv                  d(        ZId) ZJd* ZKejv                  d+        ZLd, ZM ed5i eD e ej                  e,       eM             d-               ZO ed5i eD e ej                  e,       ej                  d./             ee,d     e# ed        ed                    ee,d     e# ed       ed            d0z          ee,d     e# ed      gd1z         d2                                    ZQe,D cg c]]  \  }}} eR|j\                  j\                  e&      s:|| e e||j\                  j                        d3|j\                  j                  if_ c}}}ZT	 eTe,D cg c](  \  }}} eR|j\                  j\                  e&      r|||f* c}}}z  ZT ed5i eD e e<eT            d4               ZUy# e$ r g dZY Zw xY wc c} w c c}w c c}}w c c}}}w c c}}}w c c}}}w )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                     | j                   S N)baselenxs    u/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/ecdsa/test_malformed_sigs.py<lambda>r.   C   s
    !))     )keyc                     | d   S )Nr    r+   s    r-   r.   r.   F   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>   W   s(    
 <=     r/   c           
          | t        j                  |            \  }}}t        dj                  |             t	        |      } | t        j
                  t        j                  dt        |      dz
        d            }|j                          t        |      D ]  }||=  t        dj                  |             d}|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}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
 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_examples
   c                     | \  }}t        j                  t              5  |j                  |t        t
               d d d        y # 1 sw Y   y xY wr7   pytestraisesr   r:   r;   r   )argsr<   rZ   s      r-   test_fuzzed_der_signaturesro      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      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                     | \  }}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.
    r8   Nrk   paramsr<   rZ   s      r-   test_random_der_ecdsa_sig_valuer}      sI      M3	(	) IS,-HI I Irp   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.
    rB   r   )rI   buildsr!   rN   rn   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   rc   rA   rb   )rI   rT   rN   rL   rU   r"   )rV   rn   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
    )rI   r   r#   rT   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    )rI   justr2   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   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 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/   rb   i   )rC      rG   c                    t        j                  t        t        j                  |             t        j                  d t        j                  |             z  t        j                  d t        j                  | d            z  t        j                  t
        t        j                  dd      t        j                  |             z  S )Nc                     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>0  s    oq) r/      rG   r   ?   rA   )rI   r   r#   one_ofrM   r&   rN   )childrens    r-   r.   z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                     | \  }}}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 signaturer8   Nrk   r|   derrX   r<   rv   s        r-   test_random_der_as_signaturer   ;  sK     $D-	(	) IS,-HI I I   AAr   rG          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 signaturer8   Nrk   r   s        r-   test_random_bytes_as_signaturer   E  sK     $D-	(	) IS,-HI I Ir   ru   c                     | \  }}t        j                  t              5  |j                  |t        t
               d d d        y # 1 sw Y   y xY wr7   )rl   rm   r   r:   r;   r   r{   s      r-   test_fuzzed_string_signaturesr   t  sJ      M3	(	) LS,:JKL L L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      so   / 
, "	@@  
   
 " = =  # 1 1 0 0  % $ I 7K.2T;7;;t(()&
 sxx#F  I F 34 
E !NCD$t$u}}$ 	 

 !Z  GGKK:
 	  1  >	


( 9FGGb#\V\\"cd#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}%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 	   
K})*+L , L_  >$* H|$s5   Q" Q2%Q7'$Q< RA"R	-R
"	Q/.Q/