o
    6di*                  
   @   s  d dl mZmZ d dlZzd dlmZ W n ey!   g dZY nw 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 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&	 g Z'	 e(edd dD ]/Z)dd e(e&dd dD D ]Z*ej+e)eej,e*dZ-e'.d/e)e*e-j0e-j1e%edf qqej23ddd e'D dd Z4ej5dd  Z6i Z7e	j8d!krd d"lm9Z9 d#e7d$< e9j:e9j;e9j<ge7d%< e=e7Z>d&e>d'< edFi e7ee6e'd(d) Z?ej5d*d+ Z@edFi e>ee@ d,d- ZAd.d/ ZBej5d0d1 ZCd2d3 ZDd4d5 ZEej5d6d7 ZFd8d9 ZGedFi e7eeHe'eG d:d; ZIedFi e7eeHe'ejJd<d=ee'd  e!ed ed ee'd  e!ed	ed	d> ee'd  e!ed	gd?  d@dA ZKdBd e'D ZL	 eLdCd e'D 7 ZLedFi e7ee6eLdDdE ZMdS )G    )with_statementdivisionN)algorithms_available)md5sha1sha224sha256sha384sha512c                 C   s   g | ]}|d vr|qS ))Zmdc2Zmd2Zmd4Z	whirlpoolZ	ripemd160 ).0ir   r   pC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\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)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    c                 C   s   | j S N)baselenxr   r   r   <lambda>?   s    r-   )keyc                 C   s.   g | ]\}}d |  k rt jkrn n|qS )r   )curver*   )r   r(   sizer   r   r   r   @   s
    c                 C   s   | d S )Nr   r   r+   r   r   r   r-   B       )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   U   s   " c                 C   s   | j |ttds
J d S NZ	sigdecode)verifyexample_datar   )verifying_key	signaturer   r   r   test_signaturesS   s   r=   c                 C   sV  | t |\}}}td| t|}| t jt jdt|d ddd}|  t	|D ]}||= q/td| |rl| t 
t jdt|d dt jddd}| D ]\}}	||  |	N  < qXtd	| | t jdt|d}
| t jd
d}|d|
 | ||
d  }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}   z	xors: {0}   max_sizeNz%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_sigr6   	to_remover   ZxorsvalZ
insert_posZinsert_datar   r   r   st_fuzzed_sig]   s<   
rW   )      )HealthChecki  deadlineZsuppress_health_check
   Zmax_examplesc                 C   H   | \}}t t |j|ttd W d    d S 1 sw   Y  d S r7   r4   raisesr   r9   r:   r   )argsr;   r6   r   r   r   test_fuzzed_der_signatures      "ra   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
        }
    r>   r      r?   rX   r   )rG   rH   rT   r   rI   intr/   orderrL   r"   r   )rS   r(   r;   _re   rsr6   r   r   r   st_random_der_ecdsa_sig_value   s   ri   c                 C   sH   | \}}t t |j|ttd W d   dS 1 sw   Y  dS )zd
    Check if random values encoded in ECDSA-Sig-Value structure are rejected
    as signature.
    r8   Nr^   paramsr;   r6   r   r   r   test_random_der_ecdsa_sig_value   s   "rl   c                  O   s(   d|vrd|d< t 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   r`   kwargsr   r   r   st_der_integer   s   rp   c                 O   s`   | t j|i |}|r)| 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   rY   r?   rX   )rG   rQ   rL   rJ   rR   r   )rS   r`   ro   dataZunusedr   r   r   st_der_bit_string   s   

rs   c                  O   s   t tt j| i |S )z
    Hypothesis strategy that returns a random DER OCTET STRING object.
    Parameters are passed to hypothesis.strategy.binary
    )rG   rm   r    rQ   rn   r   r   r   st_der_octet_string   s   rt   c                   C   s
   t dS )z;
    Hypothesis strategy that returns DER NULL object.
    s    )rG   justr   r   r   r   st_der_null   s   
rv   c                 C   sv   | 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||g|R  S )zI
    Hypothesis strategy that returns DER OBJECT IDENTIFIER objects.
    r   rX   r?   '   i   2   rE   )rG   rL   rK   r!   )rS   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.
        rX   i   )rA      rE   c                 S   sh   t dd t | t dd t | B t dd t j| ddB t dd t jdd	d
t | B S )Nc                 S   s   t | S r)   )r    r+   r   r   r   r-   $  r1   z*st_der.<locals>.<lambda>.<locals>.<lambda>c                 S   s
   t | dS )Nr   )r   r+   r   r   r   r-   &     
 c                 S   s   t |  S r)   )r"   r+   r   r   r   r-   (  r1      rE   c                 S   s
   t | |S r)   )r#   )tagr,   r   r   r   r-   +  r   r   ?   r?   )rG   rm   one_ofrK   rL   )childrenr   r   r   r-   #  s    zst_der.<locals>.<lambda>(   )Z
max_leaves)rG   	recursiveru   rp   rs   rt   rv   r|   r   r   r   r   st_der  s   r   c                 C   J   | \}}}t t |j|ttd W d   dS 1 sw   Y  dS )z8Check if random DER structures are rejected as signaturer8   Nr^   rk   derr(   r;   rf   r   r   r   test_random_der_as_signature3  s   
"r   r~   rE          c                 C   r   )z/Check if random bytes are rejected as signaturer8   Nr^   r   r   r   r   test_random_bytes_as_signature=  s   
"r   c                 C   sB   g | ]\}}}t |jjts||tt||jjd |jjifqS )re   )
isinstancer/   r$   r   r   re   r   r(   r;   r6   r   r   r   r   O  s    	c                 C   s*   g | ]\}}}t |jjtr|||fqS r   )r   r/   r$   r   r   r   r   r   a  s    c                 C   r]   r7   )r4   r_   r   r9   r:   r   rj   r   r   r   test_fuzzed_string_signaturesl  rb   r   r   )N
__future__r   r   r%   r   ImportError	functoolsr   r4   sysZhypothesis.strategies
strategiesrG   Z
hypothesisr   r   r   r   r   keysr   r   utilr   r   r   r   r   r   r   r   r    r!   r"   r#   Zellipticcurver$   r:   Zhash_and_sizerT   sortedr/   Zhash_alggenerater&   skappendrI   r;   signmarkZparametrizer=   Z	compositerW   rk   version_inforZ   Zdata_too_largeZfilter_too_muchZtoo_slowdictZslow_paramsra   ri   rl   rp   rs   rt   rv   r|   r   rH   r   rQ   r   Zkeys_and_string_sigsr   r   r   r   r   <module>   s     



2


!

	
