o
    ^¨Êh>2  ã                   @   s~   d Z dZddlZejd dkrejd dkrddlT ddlZG dd„ dejƒZi fd	d
„Ze	dkr=dd„ Z
ejdd� dS dS )z+Self-tests for (some of) Crypto.Util.numberz$Id$é    Né   é   )Ú*c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )Ú	MiscTestsc                 C   s   ddl ma dd lad S )Nr   )Únumber)ÚCrypto.Utilr   Úmath©Úself© r   úR/var/www/html/env/lib/python3.10/site-packages/Crypto/SelfTest/Util/test_number.pyÚsetUp'   s   zMiscTests.setUpc              
   C   sÊ  |   ttjdd¡ |   ttjdd¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt d	d¡¡ |  dt d
d¡¡ |  dt dd¡¡ tdddƒD ]–}|  dt d|¡¡ d}|d|d  k�rbt|d d| ƒ\}}|t|  ƒ }|  |d ||f|d |t |d |¡f¡ t|d| ƒ\}}|t|  ƒ }|  |||f||t ||¡f¡ t|d d| ƒ\}}|t|  ƒ }|  |d ||f|d |t |d |¡f¡ |d9 }|d|d  ksãqÌdS )zUtil.number.ceil_shiftéÿÿÿÿr   r   r   é   é   é   é   é   é   é	   é‚   N)ÚassertRaisesÚAssertionErrorr   Ú
ceil_shiftÚassertEqualÚrangeÚdivmodÚint)r
   ÚbÚnÚqÚrÚexpectedr   r   r   Útest_ceil_shift,   sV   ÿÿÿð€üzMiscTests.test_ceil_shiftc                 C   s6  |   ttjdd¡ |   ttjdd¡ |   ttjdd¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt d	d¡¡ |  dt d
d¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt d	d¡¡ |  dt d
d¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd	¡¡ |  dt dd	¡¡ |  dt dd	¡¡ |  dt dd	¡¡ |  dt d	d	¡¡ |  dt d
d	¡¡ |  dt dd	¡¡ |  dt dd	¡¡ |  dt dd	¡¡ |  dt dd	¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt d	d¡¡ |  dt d
d¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ |  dt dd¡¡ dS )zUtil.number.ceil_divÚ1r   r   r   éþÿÿÿr   éýÿÿÿr   r   r   r   r   r   r   i÷ÿÿÿéüÿÿÿiøÿÿÿiùÿÿÿiúÿÿÿéûÿÿÿN)r   Ú	TypeErrorr   Úceil_divÚZeroDivisionErrorr   r	   r   r   r   Útest_ceil_div_   sl   zMiscTests.test_ceil_divc                 C   sd  |   ttjd¡ |   ttjd¡ |   ttjd¡ |  dt d¡¡ |  dt d¡¡ |   ttjd¡ |  dt d¡¡ |   ttjd¡ |   ttjd	¡ |   ttjd
¡ d}d}|dk r„|d| krt|  |t |¡d||f ¡ |d7 }n|   ttj|¡ |d7 }|dk s[tdddƒD ]%}|   ttjd| d ¡ |  |t d| ¡¡ |   ttjd| d ¡ qŠdS )zUtil.number.exact_log2Ú0r   r   r   r   r   r   r   r   r   r   é   zexpected=2**%d, n=%déA   N)r   r)   r   Ú
exact_log2Ú
ValueErrorr   r   )r
   Úer   r   r   r   Útest_exact_log2¤   s0   
úýzMiscTests.test_exact_log2c                 C   s@  |   dt dd¡¡ |  ttjdd¡ |   dt dd¡¡ |  ttjdd¡ |   dt dd¡¡ |   dt dd¡¡ |   dt dd¡¡ |  ttjdd¡ |   dt dd¡¡ |   dt dd¡¡ |   dt dd¡¡ |   dt dd¡¡ |  ttjdd¡ |  ttjdd¡ |   dtjddd	d
�¡ | jttjddd	d
� dS )zUtil.number.exact_divr   r   r   r   r   r%   r'   r   T)Úallow_divzeroN)r   r   Ú	exact_divr   r1   r+   r	   r   r   r   Útest_exact_div¿   s    zMiscTests.test_exact_divc                 C   s„   |   ttjdd¡ tddƒD ]1}tddƒD ])}|dkr%|   ttj||¡ q|  ||tt 	t
|ƒ| ¡ƒf||t ||¡f¡ qqdS )zUtil.number.floor_divr$   r   iöÿÿÿé
   r   N)r   r)   r   Ú	floor_divr   r+   r   r   r   ÚfloorÚfloat)r
   Úar   r   r   r   Útest_floor_divÜ   s   ÿüÿzMiscTests.test_floor_divc                 C   sF  |   ttjd¡ |   ttjd¡ d}t |¡}|  |d d¡ |  |d|d > d kd¡ |  |d|> k d¡ d}t ||¡}|  t |d |¡d¡ |  |d d¡ |  |d|d > d kd¡ |  |d|> k d¡ d}t ||¡}|  t |d d? |¡d¡ |  |d d¡ |  |d|d > d kd¡ |  |d|> k d¡ d	S )
zUtil.number.getStrongPrimeé   i  i   r   r   r   i  i  N)r   r1   r   ÚgetStrongPrimeÚassertNotEqualr   ÚGCD)r
   ÚbitsÚxr2   r   r   r   Útest_getStrongPrimeç   s&   
zMiscTests.test_getStrongPrimec                 C   sÆ   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t dd	 d ¡d¡ |   t dd	 d  ¡d¡ d
D ]}|   t t|ƒ¡d¡ qSdS )zUtil.number.isPrimer&   Fr%   r   r   Tr   r   iÿ  )i• iá§ idÁl   u^¾ß l   ³+%!al   MnÔz¾]l   —g‹4Ð+ l   ›I>6l   S{AˆKWl   ÃbÊ\\QN l   ãz—Ilv3 l   _V„B;.( N)r   r   ÚisPrimer   )r
   Ú	compositer   r   r   Útest_isPrimeý   s   ûzMiscTests.test_isPrimec                 C   s^   |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ |   t d¡d¡ d S )	Nr   r   é¢   r   i@º¢ é   lE   ¥)ýï8^n,š ¾´n:ˆzb´|˜DELU"êN79YÁ– ªS¾h"¶*f8›<>k®tkŠÂ26"z ¼BT6û	íV�´ ÏRNc”cË\�Ä¢Õ]ð]rX"Sw~oÝ Ë8I(jæOˆ3�½2Ç¸Ò
 i   )r   r   Úsizer	   r   r   r   Ú	test_size  s
   zMiscTests.test_sizec                 C   s6   d}d}t j ||¡}|  ||j¡ |  ||j¡ dS )zbTest that mpzToLongObj and longObjToMPZ (internal functions) roundtrip negative numbers correctly.løÿÿÿ     ?<\"XéX\¡	r   N)r   Ú	_fastmathÚrsa_constructr   r   r2   )r
   r   r2   Úkr   r   r   Ú8test_negative_number_roundtrip_mpzToLongObj_longObjToMPZ  s
   zBMiscTests.test_negative_number_roundtrip_mpzToLongObj_longObjToMPZN)Ú__name__Ú
__module__Ú__qualname__r   r#   r,   r3   r6   r<   rC   rF   rJ   rN   r   r   r   r   r   &   s    3Er   c                 C   s   ddl m} |tƒS )Nr   )Úlist_test_cases)ÚCrypto.SelfTest.st_commonrR   r   )ÚconfigrR   r   r   r   Ú	get_tests  s   rU   Ú__main__c                   C   s   t  tƒ ¡S )N)ÚunittestÚ	TestSuiterU   r   r   r   r   Ú<lambda>$  s    rY   Úsuite)ÚdefaultTest)Ú__doc__Ú__revision__ÚsysÚversion_infoÚCrypto.Util.py21compatrW   ÚTestCaser   rU   rO   rZ   Úmainr   r   r   r   Ú<module>   s    zþ