U
    #i,                  
   @   s  d dl mZmZ d dlZzd dlmZ W n$ ek
rL   dddddd	gZY nX d
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d eD Z(de	j)kr>eegZg Z*e+edd dD ]bZ,dd e+e(dd dD D ]@Z-ej.e,eej/e-dZ0e*1d2e,e-e0j3e0j4e'ed f qpqRej56d!d"d e*D d#d$ Z7ej8d%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)kr0d,e:d-< e@e:ZAde	j)krNdeAd-< nd.eAd-< ef eAee9e*d/d0 ZBej8d1d2 ZCef eAeeC d3d4 ZDd5d6 ZEej8d7d8 ZFd9d: ZGd;d< ZHej8d=d> ZId?d@ ZJef eAeeKe*eJ dAdB ZLef eAeeKe*ejMdCdDee*d  e#ed ed ee*d  e#ededdE ee*d  e#edgdF  dGdH ZNdId e*D ZOeOdJd e*D 7 ZOef eAee9eOdKdL ZPdS )M    )with_statementdivisionN)algorithms_availablemd5sha1sha224sha256sha384sha512c                 C   s   g | ]}|d kr|qS ))Zmdc2Zmd2Zmd4Z	whirlpoolZ	ripemd160 ).0ir   r   a/var/www/html/me.goteku.com/backend/venv/lib/python3.8/site-packages/ecdsa/test_malformed_sigs.py
<listcomp>   s   r   )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                 C   s   g | ]}|t |jfqS r   )hashlibnewdigest_size)r   namer   r   r   r   2   s    z--fastc                 C   s   | j S N)baselenxr   r   r   <lambda>C       r/   )keyc                 C   s.   g | ]&\}}d |  k r"t jkrn q|qS )r   )curver,   )r   r*   sizer   r   r   r   D   s
    
 c                 C   s   | d S )Nr   r   r-   r   r   r   r/   F   r0   )hashfuncz{0} {1})Z	sigencodezverifying_key,signaturec                 C   s"   g | ]\}}}t j|||d qS ))id)pytestparam)r   r*   Zvksigr   r   r   r   Y   s     c                 C   s   | j |ttdstd S NZ	sigdecode)verifyexample_datar   AssertionError)verifying_key	signaturer   r   r   test_signaturesW   s
      r@   c                 C   s^  | t |\}}}td| t|}| t jt jdt|d ddd}|  t	|D ]
}||= q^td| d}|r| t 
t jdt|d dt jdd	d}| D ]\}}	||  |	N  < qtd
| | t jdt|d}
| t jdd}|d|
 | ||
d  }td|
| t|}t|pF|pF| 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reversedZdictionariesitemsbinarybytesr   )drawkeys_and_sigsr*   r>   Zold_sigr8   Z	to_remover   ZxorsvalZ
insert_posZinsert_datar   r   r   st_fuzzed_siga   s>    
rY   )      )HealthChecki  deadlineZsuppress_health_check   Zmax_examples
   c              	   C   s2   | \}}t t |j|ttd W 5 Q R X d S r9   r6   raisesr   r;   r<   r   )argsr>   r8   r   r   r   test_fuzzed_der_signatures   s    rc   c                 C   s   | t t\}}}td| t|jj}| t jd|d> dt j|d? |d dB }| t jd|d> dt j|d? |d dB }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
        }
    rA   r      rB   rZ   r   )rJ   rK   rW   r   rL   intr2   orderrO   r$   r    )rV   r*   r>   _rf   rsr8   r   r   r   st_random_der_ecdsa_sig_value   s    rj   c              	   C   s2   | \}}t t |j|ttd W 5 Q R X dS )zd
    Check if random values encoded in ECDSA-Sig-Value structure are rejected
    as signature.
    r:   Nr`   paramsr>   r8   r   r   r   test_random_der_ecdsa_sig_value   s    rm   c                  O   s$   d|krd|d< t tt j| |S )z
    Hypothesis strategy that returns a random positive integer as DER
    INTEGER.
    Parameters are passed to hypothesis.strategy.integer.
    rC   r   )rJ   buildsr    rO   rb   kwargsr   r   r   st_der_integer   s    rq   c                 O   s\   | t j||}|rN| t jddd}t|}|d  d|  M  < t|}nd}t||S )z|
    Hypothesis strategy that returns a random DER BIT STRING.
    Parameters are passed to hypothesis.strategy.binary.
    r   r[   rB   rZ   )rJ   rT   rO   rM   rU   r!   )rV   rb   rp   dataZunusedr   r   r   st_der_bit_string   s    
rt   c                  O   s   t tt j| |S )z
    Hypothesis strategy that returns a random DER OCTET STRING object.
    Parameters are passed to hypothesis.strategy.binary
    )rJ   rn   r"   rT   ro   r   r   r   st_der_octet_string   s    ru   c                   C   s
   t dS )z;
    Hypothesis strategy that returns DER NULL object.
    s    )rJ   justr   r   r   r   st_der_null  s    rw   c                 C   st   | t jddd}|dk r.| t jddd}n| t jddd d}| t jt jddd ddd}t||f| S )zI
    Hypothesis strategy that returns DER OBJECT IDENTIFIER objects.
    r   rZ   rB   '   i   2   rH   )rJ   rO   rN   r#   )rV   firstsecondrestr   r   r   
st_der_oid  s    r}   c                   C   sH   t jt dtdd dB tddB tddB t B t B dd 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.
    r0   rZ   i   )rD      rH   c                 S   s`   t tt | t dd t | B t dd t j| ddB t tt jdddt | B S )	Nc                 S   s
   t | dS )Nr   )r!   r-   r   r   r   r/   .  r0   z*st_der.<locals>.<lambda>.<locals>.<lambda>c                 S   s   t |  S r+   )r$   r-   r   r   r   r/   0  r0      rH   r   ?   rB   )rJ   rn   r"   Zone_ofrN   r%   rO   )childrenr   r   r   r/   -  s    zst_der.<locals>.<lambda>(   )Z
max_leaves)rJ   	recursiverv   rq   rt   ru   rw   r}   r   r   r   r   st_der  s    
r   c              	   C   s4   | \}}}t t |j|ttd W 5 Q R X dS )z8Check if random DER structures are rejected as signaturer:   Nr`   rl   derr*   r>   rg   r   r   r   test_random_der_as_signature;  s    
r   r~   rH          c              	   C   s4   | \}}}t t |j|ttd W 5 Q R X dS )z/Check if random bytes are rejected as signaturer:   Nr`   r   r   r   r   test_random_bytes_as_signatureE  s    
r   c                 C   sB   g | ]:\}}}t |jjts||tt||jjd |jjifqS )rf   )
isinstancer2   r&   r   r   rf   r   r*   r>   r8   r   r   r   r   W  s   	c                 C   s*   g | ]"\}}}t |jjtr|||fqS r   )r   r2   r&   r   r   r   r   r   i  s   c              	   C   s2   | \}}t t |j|ttd W 5 Q R X d S r9   )r6   ra   r   r;   r<   r   rk   r   r   r   test_fuzzed_string_signaturest  s    r   )Q
__future__r   r   r'   r   ImportError	functoolsr   r6   sysZhypothesis.strategiesZ
strategiesrJ   Z
hypothesisr   r   r   r   r   keysr   r   utilr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   Zellipticcurver&   r<   Zhash_and_sizeargvrW   sortedr2   Zhash_alggenerater(   skappendrL   r>   signmarkZparametrizer@   Z	compositerY   rl   version_infor\   Zdata_too_largeZfilter_too_muchZtoo_slowdictZslow_paramsrc   rj   rm   rq   rt   ru   rw   r}   r   rK   r   rT   r   Zkeys_and_string_sigsr   r   r   r   r   <module>   s   
 
 




3


!

 	
