U
    ÈZj€~  ã                   @   s”   d Z ddlZddlZddlmZ ddlT ddlmZ G dd„ dejƒZ	G dd	„ d	e	ƒ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 )zSelf-test for Math.Numbersé    N)Úlist_test_cases)Ú*)ÚIntegerNativec                   @   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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+d,„ Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-dWdX„ Z.dYdZ„ Z/d[d\„ Z0d]d^„ Z1d_d`„ Z2dadb„ Z3dcdd„ Z4dedf„ Z5dgdh„ Z6didj„ Z7dkS )lÚTestIntegerBasec                 C   s   t dƒ‚d S )NzTo be implemented)ÚNotImplementedError©Úself© r	   úd/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/Crypto/SelfTest/Math/test_Numbers.pyÚsetUp0   s    zTestIntegerBase.setUpc                 G   s   t | j|ƒS ©N)ÚmapÚInteger)r   Úargr	   r	   r
   ÚIntegers3   s    zTestIntegerBase.Integersc           
      C   sø   | j }|dƒ}||ƒ}|dƒ}|  t|d¡ |dƒ}|dƒ}|dƒ}|dƒ}|dƒ}	|  ||¡ |  |d¡ |  ||¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |	d¡ |  ||k¡ ||ƒ}|  ||¡ |  |d	ƒd k¡ d S )
Né   é÷ÿÿÿg      ð?l    d(	 lýÿÿÿ d(	 éÿÿ  l   ÿÿ l   ÿÿÿÿ r   )r   ÚassertRaisesÚ
ValueErrorÚassertEqualÚassertFalse)
r   r   Úv1Úv2Úv3Úv4Úv5Úv6Zv7Zv8r	   r	   r
   Útest_init_and_equality6   s.    z&TestIntegerBase.test_init_and_equalityc                 C   s<   |   ddd ¡\}}|  t|ƒd¡ |  t|ƒdd ¡ d S )Niéÿÿÿé   éè  )r   r   Úint©r   r   r   r	   r	   r
   Útest_conversion_to_intW   s    z&TestIntegerBase.test_conversion_to_intc                 C   sX   |   dddd ¡\}}}|  |dk¡ |  |dk¡ |  |dk¡ |  |dd k¡ d S )Nr   i§ÿÿÿr   r    é   ©r   Ú
assertTruer   ©r   r   r   r   r	   r	   r
   Útest_equality_with_ints\   s
    z'TestIntegerBase.test_equality_with_intsc                 C   sh   |   ddddd ¡\}}}}|  t|ƒdk¡ |  t|ƒdk¡ |  t|ƒdk¡ |  t|ƒd	k¡ d S )
Né   r   iìÿÿÿr   r    Z20Ú0z-20A.  10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376)r   r&   Ústr©r   r   r   r   r   r	   r	   r
   Útest_conversion_to_strc   s
    z&TestIntegerBase.test_conversion_to_strc                 C   s8   |   ddd ¡\}}|  t|ƒd¡ |  t|ƒd¡ d S )Néÿÿÿÿr   éP   zInteger(-1)z"Integer(1208925819614629174706176))r   r   Úreprr"   r	   r	   r
   Ú	test_reprj   s    zTestIntegerBase.test_reprc                 C   s*  | j }|dƒ}|  d| ¡ ¡ |dƒ}|  d| ¡ ¡ |dƒ}|  d| ¡ ¡ |  d| d¡¡ |  t|jd	¡ |  d
|jdd�¡ |  d|jddd�¡ |dƒ}|  d| ¡ ¡ |  d|jdd�¡ |  d| d¡¡ |  d|jddd�¡ |  t|jd¡ |dƒ}|  t|j¡ | jt|jdd� d S )Nr   ó    r   ó   iþÿ  s   ÿþs    ÿþé   é   s   þÿÚlittle©Ú	byteorders   þÿ l   "Ü;3oUðs	   ÿ ª»ÌÝî"s	   "îÝÌ»ª ÿs
    ÿ ª»ÌÝî"é
   s
   "îÝÌ»ª ÿ é   é¦ÿÿÿÚbittle)r   r   Úto_bytesr   r   )r   r   Zv0r   r   r   r   r	   r	   r
   Útest_conversion_to_byteso   s4    
ÿÿÿz(TestIntegerBase.test_conversion_to_bytesc                 C   sº   | j }| d¡}|  t||ƒ¡ |  d|¡ | d¡}|  d|¡ | d¡}|  d|¡ | dd¡}|  d|¡ |jddd�}|  d|¡ |jdd	d�}|  d
|¡ |  t|jdd¡ d S )Nr2   r   s    r5   s   ÿÿr   Úbigr7   r6   é   ó   	r<   )r   Ú
from_bytesr&   Ú
isinstancer   r   r   )r   r   r   r   r   r   r   r   r	   r	   r
   Útest_conversion_from_bytesŽ   s    


z*TestIntegerBase.test_conversion_from_bytesc                 C   s„   |   dddd¡\}}}}|  ||k¡ |  |dk¡ |  ||k¡ |  |dk¡ |  ||k¡ |  ||k¡ |  |  d¡d k¡ d S )NéY   éZ   éøÿÿÿr   )r   r&   r   r   r,   r	   r	   r
   Útest_inequality¦   s    zTestIntegerBase.test_inequalityc                 C   s�   |   ddddd¡\}}}}}|  ||k ¡ |  |dk ¡ |  ||k ¡ |  |dk ¡ |  ||k ¡ |  ||k ¡ |  ||k ¡ |  ||k ¡ d S ©Né   é   rG   é   r%   ©r   r   r   r   r   r   r	   r	   r
   Útest_less_than±   s    zTestIntegerBase.test_less_thanc                 C   s�   |   ddddd¡\}}}}}|  ||k¡ |  |dk¡ |  ||k¡ |  |dk¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ d S )NrJ   rK   éüÿÿÿrL   r%   rM   r	   r	   r
   Útest_less_than_or_equal½   s    z'TestIntegerBase.test_less_than_or_equalc                 C   sž   |   ddddd¡\}}}}}|  ||k¡ |  |dk¡ |  ||k¡ |  ||k¡ |  |dk¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ d S rI   r%   rM   r	   r	   r
   Útest_more_thanÉ   s    zTestIntegerBase.test_more_thanc                 C   sp   |   dddd¡\}}}}|  ||k¡ |  |dk¡ |  ||k¡ |  ||k¡ |  |dk¡ |  ||k¡ d S )NrJ   rK   rO   r%   r,   r	   r	   r
   Útest_more_than_or_equalÖ   s    z'TestIntegerBase.test_more_than_or_equalc                 C   s`   |   dddd¡\}}}}|  |¡ |  t|ƒ¡ |  |¡ |  t|ƒ¡ |  |¡ |  |¡ d S )Nr   r9   r   rL   )r   r   Úboolr&   r,   r	   r	   r
   Ú	test_boolà   s    


zTestIntegerBase.test_boolc                 C   sb   |   dd  ddddd ¡\}}}}}|  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ d S )Nr4   éd   éýÿÿÿr   )r   r&   Zis_negativer   rM   r	   r	   r
   Útest_is_negativeé   s
    &z TestIntegerBase.test_is_negativec                 C   s~   |   ddd¡\}}}|  t|| | jƒ¡ |  || d¡ |  |d d¡ |  || d¡ |  |d d¡ |  |d d¡ d S )Né   rF   éùÿÿÿéa   r   rL   i  ©r   r&   rC   r   r   r'   r	   r	   r
   Útest_additionð   s    zTestIntegerBase.test_additionc                 C   s~   |   ddd¡\}}}|  t|| | jƒ¡ |  || d¡ |  |d d¡ |  || d¡ |  |d d¡ |  |d d¡ d S )	NrX   rF   rY   éS   rZ   rK   rL   iüÿÿr[   r'   r	   r	   r
   Útest_subtractionú   s    z TestIntegerBase.test_subtractionc                 C   sr   |   dddd¡\}}}}|  t|| | jƒ¡ |  || d¡ |  |d d¡ |  |d d¡ |  |d d¡ d S )Né   é   éþÿÿÿrL   r)   rG   i   r[   r,   r	   r	   r
   Útest_multiplication  s    z#TestIntegerBase.test_multiplicationc                    sŠ   |   dddd ¡\‰ }}|  tˆ | | jƒ¡ |  |ˆ  d¡ |  |d d¡ |  |d d¡ |  |dd  d¡ |  t‡ fdd„¡ d S )	Nr4   r:   r   r/   rV   éO   c                      s   ˆ d S ©Nr   r	   r	   ©r   r	   r
   Ú<lambda>  ó    z0TestIntegerBase.test_floor_div.<locals>.<lambda>)r   r&   rC   r   r   r   ÚZeroDivisionError©r   r   r   r	   re   r
   Útest_floor_div  s    zTestIntegerBase.test_floor_divc                    s–   |   ddd¡\‰ }}|  tˆ | | jƒ¡ |  ˆ | d¡ |  ˆ d d¡ |  |d d¡ |  ˆ d d¡ |  t‡ fdd„¡ |  t‡ fd	d„¡ d S )
Nr   r`   rO   r4   r5   rL   c                      s   ˆ d S rd   r	   r	   re   r	   r
   rf     rg   z0TestIntegerBase.test_remainder.<locals>.<lambda>c                      s   ˆ d S )Néúÿÿÿr	   r	   re   r	   r
   rf     rg   )r   r&   rC   r   r   r   rh   r   ri   r	   re   r
   Útest_remainder  s    zTestIntegerBase.test_remainderc                 C   s¢   |   ddd¡\}}}|  t|| | jƒ¡ |  || d¡ |  t||ƒd¡ |  |d d¡ |  t|dƒd¡ |  |d d¡ |  |d d¡ |  tt|d¡ d S )Nr_   r4   ra   é@   r   rG   rV   )r   r&   rC   r   r   Úpowr   r   r'   r	   r	   r
   Útest_simple_exponentiation!  s    z*TestIntegerBase.test_simple_exponentiationc                 C   sü   |   ddd¡\}}}|  tt|||ƒ| jƒ¡ |  t|||ƒd¡ |  t|d|ƒd¡ |  t||dƒd¡ |  t|ddƒd¡ |  t|ddƒd¡ |  t|ddd ƒd¡ |  t|dd d	ƒd
¡ |  tt|dd¡ |  tt|dd¡ |  tt|dd¡ d S )Nr   r`   é   rX   r   r5   r   r/   iÒ\ iE  rO   rV   r:   )	r   r&   rC   rn   r   r   r   rh   r   r'   r	   r	   r
   Útest_modular_exponentiation-  s    z+TestIntegerBase.test_modular_exponentiationc                 C   sF   |   d¡}| d¡ |  |d¡ |   d¡}| dd¡ |  |d¡ d S )Nr_   r   é   é   r5   )r   Zinplace_powr   ©r   r   r	   r	   r
   Útest_inplace_exponentiation=  s    


z+TestIntegerBase.test_inplace_exponentiationc                 C   s‚   |   dd  ddddd ¡\}}}}}|  t|ƒdd ¡ |  t|ƒd¡ |  t|ƒd¡ |  t|ƒd¡ |  t|ƒdd ¡ d S )Nr   rU   ra   r   )r   r   ÚabsrM   r	   r	   r
   Útest_absF  s    &zTestIntegerBase.test_absc                 C   sb   |   ddddd ¡\}}}}|  t|j¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ dd ¡ d S )Nra   r   é1   r9   rU   rX   é2   )r   r   r   Úsqrtr   r,   r	   r	   r
   Ú	test_sqrtN  s
    zTestIntegerBase.test_sqrtc                 C   s  |   t|  d¡jd¡ |   t|  d¡jd¡ |  d¡ d¡dksDt‚|  d¡ d¡dks\t‚dD ]D}td|ƒD ]4}|d | }|  |¡ |¡}|||| fksnt‚qnq`|   t|  d¡jd¡ |   t|  d	¡jd
¡ |  d¡ d¡dksêt‚|  d¡ d¡dk�st‚d S )Nr`   r   r.   r5   )r5   r_   )é   rJ   rp   é   r   é   é   é%   é)   é+   é/   é5   r   r|   r_   r9   rk   )r_   rX   rr   )r   r   r   rz   ÚAssertionErrorÚrange)r   ÚpÚiZsquareÚresr	   r	   r
   Útest_sqrt_moduleV  s    z TestIntegerBase.test_sqrt_modulec                 C   sp   |   dd¡\}}||7 }|  |d¡ |d7 }|  |d¡ |d7 }|  |d¡ |dd 7 }|  |ddd  ¡ d S )	Nr9   r)   é   é(   r.   é'   r   r    ©r   r   r"   r	   r	   r
   Útest_in_place_addq  s    z!TestIntegerBase.test_in_place_addc                 C   sd   |   dd¡\}}||8 }|  |d¡ |d8 }|  |d¡ |d8 }|  |d¡ |d8 }|  |d	¡ d S )
Nr9   r)   iöÿÿÿiœÿÿÿrF   i�_ iÊ þÿi`yþÿij'  rŽ   r"   r	   r	   r
   Útest_in_place_sub}  s    z!TestIntegerBase.test_in_place_subc                 C   sp   |   dd¡\}}||9 }|  |d¡ |d9 }|  |d¡ |d9 }|  |d¡ |dd 9 }|  |ddd  ¡ d S )	Nr4   r`   rs   r   r‹   ra   iÄÿÿÿr    rŽ   r"   r	   r	   r
   Útest_in_place_mul‰  s    z!TestIntegerBase.test_in_place_mulc                    sl   ˆ   dd¡\}}||; }ˆ  |d¡ |dd ; }ˆ  |d¡ |d; }ˆ  |d¡ ‡ fdd„}ˆ  t|¡ d S )	Nr)   rX   é   r   r    r   c                     s   ˆ   d¡} | d; } d S )Né	   r   ©r   )r   r   r	   r
   Útž  s    
z0TestIntegerBase.test_in_place_modulus.<locals>.t)r   r   r   rh   )r   r   r   r•   r	   r   r
   Útest_in_place_modulus•  s    z%TestIntegerBase.test_in_place_modulusc                 C   s–   |   ddd¡\}}}|  t||@ | jƒ¡ |  ||@ d¡ |  |d@ d¡ |  ||@ d¡ |  |d@ d¡ |  |d@ d¡ |  |dd d @ d¡ d S )Néô   rx   éñÿÿÿé0   éð   r   r    r[   r'   r	   r	   r
   Útest_and£  s    zTestIntegerBase.test_andc                 C   sz   |   ddd¡\}}}|  t||B | jƒ¡ |  ||B d¡ |  |dB d¡ |  ||B d¡ |  |dd B dd d ¡ d S )Nrm   é‚   r˜   éÂ   ióÿÿÿr   r    r[   r'   r	   r	   r
   Útest_or­  s    zTestIntegerBase.test_orc                    sª   |   ddd¡\‰ }}|  ˆ d? ˆ ¡ |  tˆ |? | jƒ¡ |  ˆ |? d¡ |  ˆ d? d¡ |  t‡ fdd„¡ |  ˆ dd	 ? d¡ |  |d? d
¡ |  |dd	 ? d¡ d S )Nrr   r5   éðÿÿÿr   r:   c                      s   ˆ d? S ©Nr.   r	   r	   re   r	   r
   rf   »  rg   z2TestIntegerBase.test_right_shift.<locals>.<lambda>r   r    rG   r.   ©r   r   r&   rC   r   r   r   ri   r	   re   r
   Útest_right_shiftµ  s    z TestIntegerBase.test_right_shiftc                    s´   ˆ   ddd¡\}}}|dL }ˆ  |d¡ |dL }ˆ  |d¡ ||L }ˆ  |d¡ |dL }ˆ  |d¡ ‡ fdd	„}ˆ  t|¡ ‡ fd
d„}ˆ  d|ƒ ¡ ‡ fdd„}ˆ  d|ƒ ¡ d S )Nrr   r5   rŸ   r   r:   r_   rG   c                     s   ˆ   d¡} | dL } d S ©Né�   r.   r”   ©r   r   r	   r
   ÚlË  s    
z4TestIntegerBase.test_in_place_right_shift.<locals>.lc                     s   ˆ   d¡} | dd L } | S ©Nr¤   r   r    r”   r¥   r   r	   r
   Úm1Ï  s    
z5TestIntegerBase.test_in_place_right_shift.<locals>.m1c                     s   ˆ   d¡} | dd L } | S )Nr.   r   r    r”   r¥   r   r	   r
   Úm2Ô  s    
z5TestIntegerBase.test_in_place_right_shift.<locals>.m2r.   ©r   r   r   r   )r   r   r   r   r¦   r¨   r©   r	   r   r
   Útest_in_place_right_shiftÁ  s    z)TestIntegerBase.test_in_place_right_shiftc                    s–   |   ddd¡\‰ }}|  ˆ d> ˆ ¡ |  tˆ |> | jƒ¡ |  ˆ |> d¡ |  ˆ d> d¡ |  |d> d¡ |  t‡ fdd„¡ |  t‡ fd	d„¡ d S )
Nrr   r5   rŸ   r   é    éàÿÿÿc                      s   ˆ d> S r    r	   r	   re   r	   r
   rf   á  rg   z2TestIntegerBase._test_left_shift.<locals>.<lambda>c                      s   ˆ dd > S )Nr   r    r	   r	   re   r	   r
   rf   â  rg   r¡   ri   r	   re   r
   Ú_test_left_shiftÚ  s    z TestIntegerBase._test_left_shiftc                    s˜   ˆ   ddd¡\}}}|dK }ˆ  |d¡ |dK }ˆ  |d¡ ||K }ˆ  |d¡ |dK }ˆ  |d¡ ‡ fdd	„}ˆ  t|¡ ‡ fd
d„}ˆ  t|¡ d S )Nrr   r5   rŸ   r   r¬   rm   r­   c                     s   ˆ   d¡} | dK } d S r£   r”   r¥   r   r	   r
   r¦   î  s    
z3TestIntegerBase.test_in_place_left_shift.<locals>.lc                     s   ˆ   d¡} | dd K } d S r§   r”   r¥   r   r	   r
   Úmò  s    
z3TestIntegerBase.test_in_place_left_shift.<locals>.mrª   )r   r   r   r   r¦   r¯   r	   r   r
   Útest_in_place_left_shiftä  s    z(TestIntegerBase.test_in_place_left_shiftc                 C   sØ   |   ddd¡\}}}|  | d¡d¡ |  | d¡d¡ |  | |¡d¡ |  | d¡d¡ |  | d¡d¡ |  t|jd¡ |  | dd	 ¡d¡ |  t|jd¡ |  t|jd¡ |  t|jd¡ |  t|jd
¡ d S )Ni  rV   r5   r   r:   r“   r.   r   r    iÐ  )r   r   Zget_bitr   r   r'   r	   r	   r
   Útest_get_bitø  s    zTestIntegerBase.test_get_bitc                 C   s¬   |   ddddd¡\}}}}}|  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ d S )Nr   r_   rp   rO   iïÿÿÿ)r   r&   Zis_evenr   Zis_oddrM   r	   r	   r
   Útest_odd_even  s    zTestIntegerBase.test_odd_evenc                 C   sZ   |   dddd¡\}}}}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  t|j¡ d S )Nr   r5   r@   r;   r“   )r   r   Úsize_in_bitsr   r   r,   r	   r	   r
   Útest_size_in_bits  s
    z!TestIntegerBase.test_size_in_bitsc                 C   s‚   |   dddddd¡\}}}}}}|  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  | ¡ d¡ |  t|j¡ d S )	Nr   r5   éÿ   iÿ  i   r   r   r4   )r   r   Zsize_in_bytesr   r   r³   ©r   r   r   r   r   r   r   r	   r	   r
   Útest_size_in_bytes  s     z"TestIntegerBase.test_size_in_bytesc                 C   sè   |   |  d¡ ¡ ¡ |  |  d¡ ¡ ¡ |  |  d¡ ¡ ¡ |   |  d¡ ¡ ¡ |   |  d¡ ¡ ¡ |  |  d¡ ¡ ¡ |  |  d¡ ¡ ¡ |   |  d¡ ¡ ¡ td	d
ƒD ]8}|   |  |d d ¡ ¡ ¡ |  |  |d ¡ ¡ ¡ qªd S )Nr   r   r5   r   r4   r_   iñ  iò  rU   r    )r   r   Zis_perfect_squarer&   r†   )r   Úxr	   r	   r
   Útest_perfect_square'  s    z#TestIntegerBase.test_perfect_squarec                 C   sZ   |   ddd¡\}}}| d¡ | d¡ | dd ¡ |  t|jd¡ |  t|j|¡ d S )Né   iôÿÿÿr_   rX   r   r/   )r   Zfail_if_divisible_byr   r   r'   r	   r	   r
   Útest_fail_if_divisible_by6  s    

z)TestIntegerBase.test_fail_if_divisible_byc                 C   sØ   |   ddd¡\}}}| ||¡ |  |d¡ | |d¡ |  |d¡ | d|¡ |  |d¡ | dd¡ |  |d	¡ | dd¡ |  |d
¡ | ddd ¡ |  |d
dd  ¡ | dd d¡ |  |d
dd  ¡ d S )Nr_   r4   r   r9   rr   é   r5   ra   r)   é   r    éé  )r   Zmultiply_accumulater   r'   r	   r	   r
   Útest_multiply_accumulateB  s    z(TestIntegerBase.test_multiply_accumulatec                 C   st   |   dd¡\}}| |¡ |  |d¡ | d¡ |  |d¡ | d¡ |  |d¡ | dd ¡ |  |dd ¡ d S )Nr4   r’   r“   ra   r   r    )r   Úsetr   r"   r	   r	   r
   Útest_setS  s    


zTestIntegerBase.test_setc                 C   sÖ   |   dddddd¡\}}}}}}|  t| |¡| jƒ¡ |  | |¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d	¡ |  | d
¡d¡ |  t|jd¡ |  t|jd¡ |  t|jd¡ |  t|jd¡ d S )Nr   r`   rV   r   i  ii  r4   i�ÿ‰iKS~i¸&  ié  r9   )	r   r&   rC   Zinverser   r   r   r   rh   r¶   r	   r	   r
   Útest_inverse^  s     zTestIntegerBase.test_inversec                 C   s*   |   dd¡\}}| |¡ |  |d¡ d S )Nr   r`   r4   )r   Zinplace_inverser   r"   r	   r	   r
   Útest_inplace_inversem  s    
z$TestIntegerBase.test_inplace_inversec                 C   sŽ   |   dddd¡\}}}}|  t| |¡| jƒ¡ |  | |¡d¡ |  | d¡d¡ |  | |¡d¡ |  | d¡d¡ |  | d¡d¡ d S )Nr’   r9   rp   ra   r   r5   )r   r&   rC   Úgcdr   r   r,   r	   r	   r
   Útest_gcds  s    zTestIntegerBase.test_gcdc                 C   s¶   |   ddddd¡\}}}}}|  t| |¡| jƒ¡ |  | |¡d¡ |  | d¡d¡ |  | |¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ |  | d¡d¡ d S )Nr’   r9   rp   ra   r   r‹   éf   )r   r&   rC   Zlcmr   r   rM   r	   r	   r
   Útest_lcm|  s    zTestIntegerBase.test_lcmc              	   C   sF  d}| j j}tddƒD ]}|  ||dƒd¡ qtdddƒD ]}|  |d|ƒd¡ q:|  t|dd¡ |  t|dd¡ |  t|dd¡ |  t|dd¡ |  t|dd¡ |  t|dd	¡ |  t|dd¡ |  t|dd
¡ |D ]j}|  ||d |d ƒ|d ¡ |  ||   |d ¡|d ƒ|d ¡ |  ||d |   |d ¡ƒ|d ¡ qÖd S )N))r¾   r5   r5   )r}   é-   r5   )r:   é   r.   )r`   rÉ   r5   )ib  iÛ  r.   )r¾   i³&  r.   )r`   l   -& r.   r5   r‹   r   r’   ra   r.   r   r_   r:   )r   Újacobi_symbolr†   r   r   r   )r   ÚdataÚjsÚkÚnÚtvr	   r	   r
   Útest_jacobi_symbol‡  s$    
$z"TestIntegerBase.test_jacobi_symbolc              ,   C   sÞ  ddddddddd	d
dddddddddddddddddddddgfd ddd!dd"d#d$d	d%d&d'd(d)d*dddd+dd,d-d.dd/d0d1d2d3d4dgfd5dd6d!ddd7d8d9d%d:d'd(d)d;d<ddd=d>dddd?d@ddd2dAd4dBgfdCdd6dddDddd9d
dd'ddd*dddEdddFddd?ddd1ddd4dgfdGdddHddDd7d$d	d%d:dIdJd)d*d<ddd+d>dFdKdLd?d@dd1dMd3ddNgfdOdddHddd7d$d	d%dddJdPd*dQddEd+d>ddKdd?d@ddRdMd3d4dBgfdSdd6ddd"dd$d9d
d&ddd)ddddEddd,dd.d?dd0ddd3ddgfdTdd6d!ddd7d$d9d%d:dd(ddd<ddUd=ddd-d.dd@dd1d2d3ddBgfdVddd!ddDd#dd	d%d:d'd(d)ddQddEd+dWdFdKd.d?d/dd1d2dddBgfdXdddddDdd8d	d
d:ddd)d;dddEdd>dFdddddd1ddAddgfdYdd6dHddd#d$d9d%d:ddJdddQddd=d>ddKd.dZd/dd1dMd3d4dNgfd[dd6dHdd"d#dd9d%d&d'dJdd*dddEd=dd,d-dd?d/d0d1dMdd4dgfd\dddddddd	d
dddddddddddddddddddddgfd]ddd!ddDd#dd	d%d:dd(dddQddd+d>dFdKdd?d/ddd2dd^dBgfg}| j j}|D ],\}}|D ]\}}|  |||ƒ|¡ �q¸�q¬d S )_Nr4   )r5   r5   )r   r.   )r4   r   )r_   r5   )r`   r.   )r’   r   )rX   r5   )r:   r.   )r“   r   )r9   r5   )r|   r.   )rº   r   )rJ   r5   )rK   r.   )rs   r   )rr   r5   )rp   r.   )r½   r   )r}   r5   )r)   r.   )rÉ   r   )r¼   r5   )r   r.   )r$   r   )é   r5   )é   r.   )é   r   )é   r5   )r~   r.   )r‹   r   r`   )r4   r.   )r`   r   )r’   r5   )rX   r.   )r“   r5   )r9   r   )r|   r5   )rº   r.   )rJ   r.   )rK   r5   )r½   r.   )r)   r   )rÉ   r5   )r¼   r.   )r$   r5   )rÑ   r   )rÒ   r5   )rÓ   r.   )rÔ   r.   )r~   r5   rX   )r   r5   )r’   r.   )rX   r   )r:   r5   )r9   r.   )rK   r   )rs   r5   )r½   r5   )r}   r.   )r   r5   )r$   r.   )rÔ   r   )r‹   r5   r“   )r`   r5   )rp   r5   )r)   r5   r|   )r4   r5   )r|   r   )rº   r5   )rÉ   r.   )r¼   r   )rÓ   r5   )r‹   r.   rJ   )rJ   r   )rs   r.   )rÒ   r   rs   rp   )rp   r   r}   )r}   r   rÉ   r   )r   r   rÑ   rÓ   r~   )r~   r   )r   rÊ   r   )r   rÏ   rÌ   rÎ   ZkjrÍ   Újr	   r	   r
   Útest_jacobi_symbol_wikipediaª  s&    BBBBBBBBBBBBBBòz,TestIntegerBase.test_jacobi_symbol_wikipediac                 C   s    |   d¡\}|  t|ƒd¡ d S )Nrr   Z0x10)r   r   Úhexrt   r	   r	   r
   Útest_hexÄ  s    zTestIntegerBase.test_hexc                 C   sî   | j j}|dddƒ}|  |d¡ |dddƒ}|  |d¡ |dddƒ}|  |d¡ |dddƒ}|  |d¡ |dddƒ}|  |d¡ d	d
 d }dd }dd }d}|  |||||ƒ¡ |  t|ddd¡ |  t|ddd¡ |  t|ddd¡ d S )Nr_   r`   r}   ó   r˜   iòÿÿÿr   r$   r   i   r5   rJ   rU   rp   s@   ú²‡Ã(yøñnÞpqÊóÓB,ïòûfÌ)�Z*•˜r–¨ÕÃ}âq:¢'zô8Þ%ï	¼Ä[C‹UE2�ï�ª:r   r.   )r   Z_mult_modulo_bytesr   r   rh   r   )r   Zmodmultr‰   ÚmodulusÚt1Út2Úexpectr	   r	   r
   Útest_mult_modulo_bytesÈ  s&    z&TestIntegerBase.test_mult_modulo_bytesN)8Ú__name__Ú
__module__Ú__qualname__r   r   r   r#   r(   r-   r1   r>   rD   rH   rN   rP   rQ   rR   rT   rW   r\   r^   rb   rj   rl   ro   rq   ru   rw   r{   rŠ   r�   r�   r‘   r–   r›   rž   r¢   r«   r®   r°   r±   r²   r´   r·   r¹   r»   r¿   rÁ   rÂ   rÃ   rÅ   rÇ   rÐ   rÖ   rØ   rÞ   r	   r	   r	   r
   r   .   sj   !
	

			

		#r   c                   @   s   e Zd Zdd„ ZdS )ÚTestIntegerIntc                 C   s
   t | _d S r   )r   r   r   r	   r	   r
   r   ç  s    zTestIntegerInt.setUpN©rß   rà   rá   r   r	   r	   r	   r
   râ   å  s   râ   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚtestIntegerRandomc                 C   s~   t dƒD ],}tjdd�}|  |dk ¡ |  |dk¡ qt ddƒD ]8}tj|d�}|  |d|d	  k ¡ |  |d| k¡ q@d S )
Nr    r:   )Ú
exact_bitsé€   r@   rL   é  r   r5   )r†   r   Úrandomr   )r   Ú_ÚaÚ
bits_valuer	   r	   r
   Útest_random_exact_bitsí  s    z(testIntegerRandom.test_random_exact_bitsc                 C   st   d}t dƒD ]*}tjdd�}|p&|dk }|  |dk¡ q|  |¡ t ddƒD ]"}tj|d�}|  |d	| k¡ qLd S )
NFr    r:   )Zmax_bitsræ   r@   rL   rç   r   )r†   r   rè   r   r&   )r   Úflagré   rê   rë   r	   r	   r
   Útest_random_max_bitsù  s    
z&testIntegerRandom.test_random_max_bitsc                 C   s6   G dd„ dt ƒ}|ƒ }tjd|d�}|  |jd¡ d S )Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )z@testIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNGc                 S   s
   d| _ d S rd   )Úcounterr   r	   r	   r
   Ú__init__	  s    zItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__init__c                 S   s   |  j |7  _ tdƒ| S rd   )rï   Zbchr)r   Úsizer	   r	   r
   Ú__call__  s    zItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__call__N)rß   rà   rá   rð   rò   r	   r	   r	   r
   Ú	CustomRNG  s   ró   r¬   )rå   Zrandfuncr_   )Úobjectr   rè   r   rï   )r   ró   Z
custom_rngrê   r	   r	   r
   Útest_random_bits_custom_rng  s    z-testIntegerRandom.test_random_bits_custom_rngc                 C   s    t j}tdƒD ].}|ddd�}|  d|  ko4dkn  ¡ qtdƒD ].}|ddd�}|  d|  koldk n  ¡ qF| jt|dddd� | jt|ddd	� d S )
NéÈ   r5   rs   )Úmin_inclusiveÚmax_inclusive)r÷   Úmax_exclusiver   r4   )r÷   rø   rù   )rø   rù   )r   Zrandom_ranger†   r&   r   r   )r   Úfuncr¸   rê   r	   r	   r
   Útest_random_range  s      ÿz#testIntegerRandom.test_random_rangeN)rß   rà   rá   rì   rî   rõ   rû   r	   r	   r	   r
   rä   ë  s   rä   c              
      s  g }|t tƒ7 }z0ddlm‰ G ‡fdd„dtƒ}|t |ƒ7 }W nR ttfk
r’ } z0tjdkrntj	 
d¡ ntj	 
dt|ƒ ¡ W 5 d }~X Y nX z0ddlm‰  G ‡ fd	d
„d
tƒ}|t |ƒ7 }W n: ttfk
rþ } ztj	 
dt|ƒ ¡ W 5 d }~X Y nX |t tƒ7 }|S )Nr   ©Ú
IntegerGMPc                       s   e Zd Z‡ fdd„ZdS )z!get_tests.<locals>.TestIntegerGMPc                    s
   ˆ | _ d S r   r”   r   rü   r	   r
   r   ,  s    z'get_tests.<locals>.TestIntegerGMP.setUpNrã   r	   rü   r	   r
   ÚTestIntegerGMP+  s   rþ   Úwin32zSkipping GMP tests on Windows
zSkipping GMP tests (%s)
©ÚIntegerCustomc                       s   e Zd Z‡ fdd„ZdS )z*get_tests.<locals>.TestIntegerCustomModexpc                    s
   ˆ | _ d S r   r”   r   r   r	   r
   r   :  s    z0get_tests.<locals>.TestIntegerCustomModexp.setUpNrã   r	   r   r	   r
   ÚTestIntegerCustomModexp9  s   r  z"Skipping custom modexp tests (%s)
)r   râ   ZCrypto.Math._IntegerGMPrý   r   ÚImportErrorÚOSErrorÚsysÚplatformÚstdoutÚwriter+   ZCrypto.Math._IntegerCustomr  rä   )ÚconfigZtestsrþ   Úer  r	   )r  rý   r
   Ú	get_tests$  s$    
&&r  Ú__main__c                   C   s   t  tƒ ¡S r   )ÚunittestZ	TestSuiter  r	   r	   r	   r
   rf   E  rg   rf   Úsuite)ZdefaultTest)Ú__doc__r  r  ZCrypto.SelfTest.st_commonr   ZCrypto.Util.py3compatZCrypto.Math._IntegerNativer   ZTestCaser   râ   rä   r  rß   r  Úmainr	   r	   r	   r
   Ú<module>"   s"        <9 