o
    5h                     @   s   d Z ddlZddlmZ ddlT ddlmZ ddlmZm	Z	m
Z
mZmZmZmZ G dd dejZi fd	d
ZedkrGdd Zejdd dS dS )zSelf-test for Math.Numbers    N)list_test_cases)*)Integer)PROBABLY_PRIME	COMPOSITEmiller_rabin_test
lucas_testtest_probable_primegenerate_probable_primegenerate_probable_safe_primec                   @   s   e Zd Zddddddddd	d
dd d dfZddddddddddddddddd d  dfZdd Zd d! Zd"d# Zd$d% Zd&d' Z	d(d) Z
d*S )+TestPrimality                                 lE   q)8(WRv#%a9AMo-*7wg;02wQX@CkEf
<_fufqsQ$c;Q|n ?|TA)ynE'd.(6W-+O`'2_6$_ot`G<
8P r            	   
                           i C   l   I1t#c                 C   sP   | j D ]}| t|dt q| jD ]}| t|dt q| ttdd d S )Nr   )primesassertEqualr   r   
compositesr   assertRaises
ValueError)selfprime	composite r/   w/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/Crypto/SelfTest/Math/test_Primality.pytest_miller_rabin9   s
   

zTestPrimality.test_miller_rabinc                 C   sR   | j D ]}t|}| |t q| jD ]}t|}| |t q| ttd d S )Nr&   )r'   r   r(   r   r)   r   r*   r+   )r,   r-   resr.   r/   r/   r0   
test_lucas@   s   

zTestPrimality.test_lucasc                 C   s   ddddd d f}|D ]
}|  t|t qd}|D ]
}|  t|t qdd	lm} |d d
 D ]}t|}|  |t q2d S )Nl	    l   W3>Lk{T@l   q4}2zn1dY/`93yr   i	  r   )l   vK
+.QF:yUc,$tcq l   !3eYlmkE	r?-_Ve+l   t#gXvnG;.%yfu&1#93Y2:k r   )
sieve_based   )r(   r	   r   r   Crypto.Util.numberr4   )r,   r'   p
not_primesnpr4   r2   r/   r/   r0   test_is_primeI   s   
zTestPrimality.test_is_primec                 C      t dd}| | d d S )Ni   
exact_bits)r
   r(   size_in_bitsr,   r7   r/   r/   r0   test_generate_prime_bit_size^      
z*TestPrimality.test_generate_prime_bit_sizec                 C   s6   dd }t dD ]}td|d}| |d d qd S )Nc                 S   s   | d dkS )Nr   r   r/   )numberr/   r/   r0   ending_with_onec   s   zATestPrimality.test_generate_prime_filter.<locals>.ending_with_oner"      )r=   prime_filterr   r   )ranger
   r(   )r,   rC   xqr/   r/   r0   test_generate_prime_filterb   s   z(TestPrimality.test_generate_prime_filterc                 C   r;   )Nr$   r<   )r   r(   r>   r?   r/   r/   r0   test_generate_safe_primek   rA   z&TestPrimality.test_generate_safe_primeN)__name__
__module____qualname__r'   r)   r1   r3   r:   r@   rI   rJ   r/   r/   r/   r0   r   4   s    $0		r   c                 C   s   g }|t t7 }|S N)r   r   )configtestsr/   r/   r0   	get_testso   s   rQ   __main__c                   C   s   t t S rN   )unittest	TestSuiterQ   r/   r/   r/   r0   <lambda>u   s    rU   suite)defaultTest)__doc__rS   Crypto.SelfTest.st_commonr   Crypto.Util.py3compatCrypto.Math.Numbersr   Crypto.Math.Primalityr   r   r   r   r	   r
   r   TestCaser   rQ   rK   rV   mainr/   r/   r/   r0   <module>   s   !$	;