o
    Þý°j%  ã                   @   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-þ*7w˜gÇ;¿02wQXý@ÁCkEàfÔ
Ø<_’fñuôfðqÎŽsQ$cñ;Q|n ?|¡TÓÅA)y÷nëEÔ'd.(6WÓ-+O`'2 Å_Õë6Ä$Õ_ot`G<
8íP 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/   úš/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/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nÊ1‚dY/`9’‰3yr   i	  r   )l   ÁûvK
+.QîF:—yUc,$‹tÂcÞq l   !3eYlmk€E	r?-Œ_VeÝ+l   Át#g¤XvnÇGÒ;¤.%yfu&1Ê#93Yˆ2:k r   )Ú
sieve_baseéd   )r(   r	   r   r   ÚCryptodome.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   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.Util.py3compatÚCryptodome.Math.Numbersr   ÚCryptodome.Math.Primalityr   r   r   r   r	   r
   r   ÚTestCaser   rQ   rK   rV   Úmainr/   r/   r/   r0   Ú<module>   s   !$	;þ