
    Tf,                        d dl mZmZ d dlZ	 d dlmZ n# e$ r g dZY nw xY wd eD             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'	 d eD             Z(	 de	j)        v reegZg Z*	  e+ed           D ]Z,d  e+e(d           D             D ]iZ- ej.        e, eej/        e-                    Z0e*1                    d2                    e,e-          e0j3        e04                    e'e          f           jej5        6                    dd e*D                       d             Z7ej8        d             Z9i Z:e	j;        dk    r"d dlm<Z< d e:d!<   e<j=        e<j>        e<j?        ge:d"<   de	j)        v rd#e:d$<    e@e:          ZAde	j)        v rdeAd$<   nd%eAd$<    ed8i eA e e9e*                    d&                         ZBej8        d'             ZC ed8i eA e eC                      d(                         ZDd) ZEej8        d*             ZFd+ ZGd, ZHej8        d-             ZId. ZJ ed8i eA e ejK        e*           eJ                      d/                         ZL ed8i eA e ejK        e*           ejM        d01                     ee*d           e# ed            ed                                ee*d           e# ed           ed                    d2z              ee*d           e# ed          gd3z             d4                                                             ZNd5 e*D             ZO	 eOd6 e*D             z  ZO ed8i eA e e9eO                    d7                         ZPdS )9    )with_statementdivisionN)algorithms_available)md5sha1sha224sha256sha384sha512c                     g | ]}|d v|	S ))mdc2md2md4	whirlpool	ripemd160 ).0is     K/var/www/html/env/lib/python3.11/site-packages/ecdsa/test_malformed_sigs.py
<listcomp>r      s.       	@@@ @@@    )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 signc                 D    g | ]}|t          j        |          j        fS r   )hashlibnewdigest_size)r   names     r   r   r   2   s7       .2T7;t()  r   z--fastc                     | j         S N)baselenxs    r   <lambda>r9   C   s    !) r   )keyc                 L    g | ]!\  }}d |cxk     rt           j        k    n n|"S )r   )curver6   )r   r3   sizes      r   r   r   D   sJ       D$t$$$$u}$$$$$ 	$$$r   c                     | d         S )Nr   r   r7   s    r   r9   r9   F   s
    ad r   )hashfuncz{0} {1})	sigencodezverifying_key,signaturec                 D    g | ]\  }}}t          j        |||           S ))id)pytestparam)r   r3   vksigs       r   r   r   Y   s/    GGGb#V\"cd###GGGr   c                 N    |                      |t          t                    sJ d S N	sigdecode)verifyexample_datar#   )verifying_key	signatures     r   test_signaturesrO   W   s<    
 <=         r   c           
          | t          j        |                    \  }}}t          d                    |                     t	          |          } | t          j        t          j        dt          |          dz
            d                    }|                                 t          |          D ]}||= t          d                    |                     d}|r | t          j
        t          j        dt          |          dz
            t          j        dd	                              }|                                D ]\  }}	||xx         |	z  cc<   t          d
                    |                      | t          j        dt          |                              }
 | t          j        d                    }|d|
         |z   ||
d         z   }t          d                    |
|                     t          |          }t          |p|p|           t          ||k               ||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_sigsr3   rM   old_sigrF   	to_remover   xorsval
insert_posinsert_datas               r   st_fuzzed_sigro   a   sR    $(4(F(F#G#G D-		$	$T	*	*+++
G

C 
qCHHqLAAA$OOO I NNi    FF		#	#I	.	./// D
 	'tOa3s88a<@@@a3777 
 
 jjll 	 	FAsFFFcMFFFF[%%&&& bkASBBBCCJ$ry#...//K
kzk
[
(3z{{+;
;C/66z;OO   **C
9++,,,
3'>#r   )      )HealthChecki  deadlinesuppress_health_check   max_examples
   c                     | \  }}t          j        t                    5  |                    |t          t
                     d d d            d S # 1 swxY w Y   d S rH   rC   raisesr    rK   rL   r#   )argsrM   rF   s      r   test_fuzzed_der_signaturesr|      s     M3	(	)	) I IS,-HHHI I I I I I I I I I I I I I I I I I   #AAAc                     | t          j        t                              \  }}}t          d                    |                     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
        }
    rQ   r      rR   rp   r   )rZ   r[   rh   r   r\   intr<   orderr_   r,   r(   )rg   r3   rM   _r   rsrF   s           r   st_random_der_ecdsa_sig_valuer      s    "T"/-"@"@AAD-		$	$T	*	*+++#)**E 	
a5A:666
+
eai
@
@
@	A	 	A 	
a5A:666
+
eai
@
@
@	A	 	A
 .++^A->->
?
?C#r   c                     | \  }}t          j        t                    5  |                    |t          t
                     ddd           dS # 1 swxY w Y   dS )zd
    Check if random values encoded in ECDSA-Sig-Value structure are rejected
    as signature.
    rI   Nry   paramsrM   rF   s      r   test_random_der_ecdsa_sig_valuer      s      M3	(	)	) I IS,-HHHI I I I I I I I I I I I I I I I I Ir}   c                  f    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.
    rS   r   )rZ   buildsr(   r_   r{   kwargss     r   st_der_integerr      s:     &  {9^R[$%A&%A%ABBBr   c                     | t          j        |i |          }|rR | 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   rq   rR   rp   )rZ   re   r_   r]   rf   r)   )rg   r{   r   dataunuseds        r   st_der_bit_stringr      s     4	4*6**++D bkA;;;<<RaiL T{{D&)))r   c                  T    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
    )rZ   r   r*   re   r   s     r   st_der_octet_stringr      s&    
 9(")T*DV*D*DEEEr   c                  *    t          j        d          S )z;
    Hypothesis strategy that returns DER NULL object.
    s    )rZ   justr   r   r   st_der_nullr     s     7;r   c           	      X    | 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|R  S )zI
    Hypothesis strategy that returns DER OBJECT IDENTIFIER objects.
    r   rp   rR   '   i   2   rX   )rZ   r_   r^   r+   )rg   firstsecondrests       r   
st_der_oidr     s    
 DqA66677EqyybkA<<<==bkAC@@@AA4
qAsF;;;bII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   rp   i   )rT      rX   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)   r7   s    r   r9   z*st_der.<locals>.<lambda>.<locals>.<lambda>.  s    .q!44 r   c                     t          |  S r5   )r,   r7   s    r   r9   z*st_der.<locals>.<lambda>.<locals>.<lambda>0  s    oq) r      rX   r   ?   rR   )rZ   r   r*   one_ofr^   r-   r_   )childrens    r   r9   zst_der.<locals>.<lambda>-  s    #6	(8K8KLL
)44bi6I6I
J
JK
)))28Hs+K+K+K
 


 )K!t444Ih
 
	
 r   (   )
max_leaves)rZ   	recursiver   r   r   r   r   r   r   r   r   st_derr     s     <

1d7
+
+
+	,
W
-
-
-	. w
/
/
/	0 --		
 ,,			
 		
 #   r   c                     | \  }}}t          j        t                    5  |                    |t          t
                     ddd           dS # 1 swxY w Y   dS )z8Check if random DER structures are rejected as signaturerI   Nry   r   derr3   rM   r   s        r   test_random_der_as_signaturer   ;  s     $D-	(	)	) I IS,-HHHI I I I I I I I I I I I I I I I I I   #AAAr   rX          c                     | \  }}}t          j        t                    5  |                    |t          t
                     ddd           dS # 1 swxY w Y   dS )z/Check if random bytes are rejected as signaturerI   Nry   r   s        r   test_random_bytes_as_signaturer   E  s     $D-	(	)	) I IS,-HHHI I I I I I I I I I I I I I I I I Ir   c           
          g | ]V\  }}}t          |j        j        t                    %||t          t	          ||j        j                  d |j        j        ifWS )r   )
isinstancer<   r.   r"   r#   r   r   r3   rM   rF   s       r   r   r   W  s|        	!mSm)/;;3 3 9::	
%+	
 	
  r   c                 ^    g | ]*\  }}}t          |j        j        t                    %|||f+S r   )r   r<   r.   r   s       r   r   r   i  sQ        	!mS-%+Y77  r   c                     | \  }}t          j        t                    5  |                    |t          t
                     d d d            d S # 1 swxY w Y   d S rH   )rC   rz   r    rK   rL   r$   r   s      r   test_fuzzed_string_signaturesr   t  s      M3	(	)	) L LS,:JKKKL L L L L L L L L L L L L L L L L Lr}   r   )Q
__future__r   r   r0   r   ImportError	functoolsr   rC   syshypothesis.strategies
strategiesrZ   
hypothesisr   r   r   r   r   keysr   r    utilr!   r"   r#   r$   r%   r&   r'   r   r(   r)   r*   r+   r,   r-   ellipticcurver.   rL   hash_and_sizeargvrh   sortedr<   hash_alggenerater1   skappendr\   rM   signmarkparametrizerO   	compositero   r   version_inforr   data_too_largefilter_too_muchtoo_slowdictslow_paramsr|   r   r   r   r   r   r   r   r   r[   r   re   r   keys_and_string_sigsr   r   r   r   <module>r      sZ   / / / / / / / / 
,,,,,,,      !   
        



 " " " " " " = = = = = = = = = = = = = =       # # # # # # 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0                % $ $ $ $ $ $ I 6J  &
 sx#F  I VF 3 3444 
 
E  &NNCCC   
 

 !Z GGGK::
 
 
 	  11 >>	
 	
 	
 	

& GGGGG  	  0 0 0f 
v&&&&&& F:"#'F"#
 sxF>d6llsx"#K"$K 
K}}]##$$I I %$ I   B 
K$$&&''I I (' IC C C * * * F F F      , , ,  : 
Kr}%%vvxx00I I 10 I 
Kr}%%yry''B'B'BCC!oonnQ&7&79J9JKK  	!ONN1%%~~a'8'899GC  	q	??^^A->->,?!,CDEEI I FE	   DC I  %2       %2     
K}})**++L L ,+ L L Ls    	!!