o
    Þý°j”~  ã                   @   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rJdd„ Zejdd� dS 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ƒ‚)NzTo be implemented)ÚNotImplementedError©Úself© r	   ú˜/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/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Úv6Úv7Ú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"   Ú20Ú0z-20Á.  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   Ú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 )Nr6   r   s    r9   s   ÿÿr   Úbigr;   r:   é   ó   	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   r0   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é   é   rL   é   r'   ©r   r   r   r   r   r   r	   r	   r
   Útest_less_than±   ó   zTestIntegerBase.test_less_thanc                 C   s�   |   ddddd¡\}}}}}|  ||k¡ |  |dk¡ |  ||k¡ |  |dk¡ |  ||k¡ |  ||k¡ |  ||k¡ |  ||k¡ d S )NrO   rP   éüÿÿÿrQ   r'   rR   r	   r	   r
   Útest_less_than_or_equal½   rT   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 rN   r'   rR   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 )NrO   rP   rU   r'   r0   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   r=   r   rQ   )r   r   Úboolr(   r0   r	   r	   r
   Ú	test_boolà   s   


zTestIntegerBase.test_boolc                 C   sb   |   dd  ddddd ¡\}}}}}|  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ |  | ¡ ¡ d S )Nr8   éd   éýÿÿÿr   )r   r(   Úis_negativer   rR   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é   rK   éùÿÿÿéa   r   rQ   i  ©r   r(   rH   r   r   r)   r	   r	   r
   Útest_additionð   ó   zTestIntegerBase.test_additionc                 C   s~   |   ddd¡\}}}|  t|| | jƒ¡ |  || d¡ |  |d d¡ |  || d¡ |  |d d¡ |  |d d¡ d S )	Nr_   rK   r`   éS   ra   rP   rQ   iüÿÿrb   r)   r	   r	   r
   Útest_subtractionú   rd   z TestIntegerBase.test_subtractionc                 C   sr   |   dddd¡\}}}}|  t|| | jƒ¡ |  || d¡ |  |d d¡ |  |d d¡ |  |d d¡ d S )Né   é   éþÿÿÿrQ   r+   rL   i   rb   r0   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 )	Nr8   r>   r!   r3   r\   éO   c                      s   ˆ d S ©Nr   r	   r	   ©r   r	   r
   Ú<lambda>  ó    z0TestIntegerBase.test_floor_div.<locals>.<lambda>)r   r(   rH   r   r   r   ÚZeroDivisionError©r   r   r   r	   rm   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   rh   rU   r8   r9   rQ   c                      ó   ˆ d S rl   r	   r	   rm   r	   r
   rn     ro   z0TestIntegerBase.test_remainder.<locals>.<lambda>c                      rs   )Néúÿÿÿr	   r	   rm   r	   r
   rn     ro   )r   r(   rH   r   r   r   rp   r   rq   r	   rm   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 )Nrg   r8   ri   é@   r!   rL   r\   )r   r(   rH   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   rh   é   r_   r   r9   r!   r3   iÒ\ iE  rU   r\   r>   )	r   r(   rH   rw   r   r   r   rp   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 )Nrg   r!   é   é   r9   )r   Ú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!   r[   ri   r   )r   r   ÚabsrR   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 )Nri   r   é1   r=   r[   r_   é2   )r   r   r   Úsqrtr   r0   r	   r	   r
   Ú	test_sqrtN  s
   zTestIntegerBase.test_sqrtc                 C   s  |   t|  d¡jd¡ |   t|  d¡jd¡ |  d¡ d¡dks"J ‚|  d¡ d¡dv s.J ‚dD ]"}td|ƒD ]}|d | }|  |¡ |¡}|||| fv sQJ ‚q7q0|   t|  d¡jd¡ |   t|  d	¡jd
¡ |  d¡ d¡dv suJ ‚|  d¡ d¡dv s�J ‚d S )Nrh   r   r2   r9   )r9   rg   )é   rO   ry   é   r   é   é   é%   é)   é+   é/   é5   r!   r†   rg   r=   rt   )rg   r_   r{   )r   r   r   r„   Úrange)r   ÚpÚiÚ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 )	Nr=   r+   é   é(   r2   é'   r!   r"   ©r   r   r$   r	   r	   r
   Útest_in_place_addq  ó   z!TestIntegerBase.test_in_place_addc                 C   sd   |   dd¡\}}||8 }|  |d¡ |d8 }|  |d¡ |d8 }|  |d¡ |d8 }|  |d	¡ d S )
Nr=   r+   iöÿÿÿiœÿÿÿrK   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 )	Nr8   rh   r|   r!   r•   ri   iÄÿÿÿr"   r˜   r$   r	   r	   r
   Útest_in_place_mul‰  rš   z!TestIntegerBase.test_in_place_mulc                    sl   ˆ   dd¡\}}||; }ˆ  |d¡ |dd ; }ˆ  |d¡ |d; }ˆ  |d¡ ‡ fdd„}ˆ  t|¡ d S )	Nr+   r_   é   r!   r"   r   c                     s   ˆ   d¡} | d; } d S )Né	   r   ©r   )r   r   r	   r
   Útž  ó   
z0TestIntegerBase.test_in_place_modulus.<locals>.t)r   r   r   rp   )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éô   r‚   éñÿÿÿé0   éð   r!   r"   rb   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 )Nrv   é‚   r¤   éÂ   ióÿÿÿr!   r"   rb   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 )Nr{   r9   éðÿÿÿr   r>   c                      s   ˆ d? S ©Nr2   r	   r	   rm   r	   r
   rn   »  ro   z2TestIntegerBase.test_right_shift.<locals>.<lambda>r!   r"   rL   r2   ©r   r   r(   rH   r   r   r   rq   r	   rm   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 )Nr{   r9   r«   r   r>   rg   rL   c                     s   ˆ   d¡} | dL } d S ©Né�   r2   rŸ   ©r   r   r	   r
   ÚlË  r¡   z4TestIntegerBase.test_in_place_right_shift.<locals>.lc                     ó   ˆ   d¡} | dd L } | S ©Nr°   r!   r"   rŸ   r±   r   r	   r
   Úm1Ï  ó   
z5TestIntegerBase.test_in_place_right_shift.<locals>.m1c                     r³   )Nr2   r!   r"   rŸ   r±   r   r	   r
   Úm2Ô  r¶   z5TestIntegerBase.test_in_place_right_shift.<locals>.m2r2   ©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 )
Nr{   r9   r«   r   é    éàÿÿÿc                      s   ˆ d> S r¬   r	   r	   rm   r	   r
   rn   á  ro   z2TestIntegerBase._test_left_shift.<locals>.<lambda>c                      s   ˆ dd > S )Nr!   r"   r	   r	   rm   r	   r
   rn   â  ó    r­   rq   r	   rm   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 )Nr{   r9   r«   r   rº   rv   r»   c                     s   ˆ   d¡} | dK } d S r¯   rŸ   r±   r   r	   r
   r²   î  r¡   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  r\   r9   r   r>   rž   r2   r!   r"   iÐ  )r   r   Ú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   rg   ry   rU   iïÿÿÿ)r   r(   Úis_evenr   Úis_oddrR   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   r9   rE   r?   rž   )r   r   Úsize_in_bitsr   r   r0   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   r9   éÿ   iÿ  i   r   r!   r8   )r   r   Ú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 ]}|   |  |d d ¡ ¡ ¡ |  |  |d ¡ ¡ ¡ qUd S )Nr   r   r9   r!   r8   rg   iñ  iò  r[   r"   )r   r   Ú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ôÿÿÿrg   r_   r!   r3   )r   Ú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 )Nrg   r8   r!   r=   r{   é   r9   ri   r+   é   r"   éé  )r   Ú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 )Nr8   r�   rž   ri   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!   rh   r\   r   i  ii  r8   i�ÿ‰iKS~i¸&  ié  r=   )	r   r(   rH   Úinverser   r   r   r   rp   rÉ   r	   r	   r
   Útest_inverse^  s    zTestIntegerBase.test_inversec                 C   s*   |   dd¡\}}| |¡ |  |d¡ d S )Nr!   rh   r8   )r   Ú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�   r=   ry   ri   r!   r9   )r   r(   rH   Úgcdr   r   r0   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�   r=   ry   ri   r   r•   éf   )r   r(   rH   Úlcmr   r   rR   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 ]5}|  ||d |d ƒ|d ¡ |  ||   |d ¡|d ƒ|d ¡ |  ||d |   |d ¡ƒ|d ¡ qkd S )N))rÓ   r9   r9   )r‡   é-   r9   )r>   é   r2   )rh   râ   r9   )ib  iÛ  r2   )rÓ   i³&  r2   )rh   l   -& r2   r9   r•   r!   r�   ri   r2   r   rg   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g d¢fdg d¢fdg d¢fdg d¢fd	g d
¢fdg d¢fdg d¢fdg d¢fdg d¢fdg d¢fdg d¢fdg d¢fdg d¢fdg d¢fg}| j j}|D ]\}}|D ]\}}|  |||ƒ|¡ qTqNd S )Nr8   )©r9   r9   ©r!   r2   ©r8   r   ©rg   r9   ©rh   r2   ©r�   r   ©r_   r9   ©r>   r2   ©rž   r   ©r=   r9   ©r†   r2   ©rÎ   r   ©rO   r9   ©rP   r2   ©r|   r   ©r{   r9   ©ry   r2   ©rÒ   r   ©r‡   r9   ©r+   r2   ©râ   r   ©rÑ   r9   ©r   r2   ©r&   r   ©é   r9   ©é   r2   ©é   r   ©é   r9   ©rˆ   r2   ©r•   r   rh   )rê   rë   ©r8   r2   rí   ©rh   r   ©r�   r9   ©r_   r2   rñ   ©rž   r9   ©r=   r   ©r†   r9   ©rÎ   r2   ©rO   r2   ©rP   r9   rø   rù   rú   ©rÒ   r2   rü   ©r+   r   ©râ   r9   ©rÑ   r2   r   ©r&   r9   ©r  r   ©r  r9   ©r  r2   ©r	  r2   ©rˆ   r9   r  r_   )rê   ©r!   r9   r  rí   rî   ©r�   r2   ©r_   r   ©r>   r9   r  ©r=   r2   r  r  r  ©rP   r   ©r|   r9   rù   rú   ©rÒ   r9   ©r‡   r2   rý   rþ   rÿ   ©r   r9   ©r&   r2   r  r  r  ©r	  r   r  ©r•   r9   rž   )rê   r   rì   rí   ©rh   r9   rï   rð   r#  rò   ró   r  rõ   rö   r  rø   rù   ©ry   r9   rû   rü   ©r+   r9   rþ   rÿ   r)  r  r  r  r  r  r  r  r†   )rê   rë   ©r8   r9   rí   r-  r!  r  rñ   r  r$  )r†   r   ©rÎ   r9   r  r  r&  rù   rú   r  r(  r/  ©râ   r2   )rÑ   r   r)  r*  r  r  ©r  r9   r  r
  ©r•   r2   rO   )rê   rë   r0  rí   rî   r!  r  rñ   r  ró   rô   r1  )rO   r   r  ©r|   r2   rù   r.  r  r(  rý   r2  rÿ   r)  r*  r  )r  r   r3  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
  r  ry   )rê   r   r  rí   rî   r!  r  r#  r  r$  rô   r  rö   r÷   r&  rù   )ry   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÷   r5  rù   r.  r  )r‡   r   r/  r2  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   r  r  r  r  r+  r
  r  r   )rê   r   r0  rí   rî   r  r  r#  r  r$  rô   r1  rö   r÷   r5  rù   rú   r'  r(  rý   r2  r  )r   r   r  r  r  r3  r  r  r4  r  )rê   r   r0  rí   r  r  rð   r#  r  r  r  r1  rö   r  rø   rù   r.  r'  rü   r  r  rÿ   r)  r  r  r  r3  r  r  r  r  rˆ   )rê   rë   r  rí   r-  r  rð   rñ   r  r$  rô   r  rö   r÷   r5  rù   rú   r  r(  r/  r2  rÿ   r)  r  r  r  r  r  )rˆ   r   r,  )r   rã   r   )r   rè   rå   rç   Úkjræ   Újr	   r	   r
   Útest_jacobi_symbol_wikipediaª  s*   













òÿÿz,TestIntegerBase.test_jacobi_symbol_wikipediac                 C   s    |   d¡\}|  t|ƒd¡ d S )Nr{   Ú0x10)r   r   Úhexr~   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 )Nrg   rh   r‡   ó   r¤   iòÿÿÿr   r&   r!   i   r9   rO   r[   ry   s@   ú²‡Ã(yøñnÞpqÊóÓB,ïòûfÌ)�Z*•˜r–¨ÕÃ}âq:¢'zô8Þ%ï	¼Ä[C‹UE2�ï�ª:r   r2   )r   Ú_mult_modulo_bytesr   r   rp   r   )r   Ú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*   r1   r5   rC   rI   rM   rS   rV   rW   rX   rZ   r^   rc   rf   rj   rr   ru   rx   rz   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é   r8  r;  rC  r	   r	   r	   r
   r   .   sl    !
	

			

		#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   ç  ó   
zTestIntegerInt.setUpN©rD  rE  rF  r   r	   r	   r	   r
   rG  å  s    rG  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 ]}tj|d�}|  |d|d	  k ¡ |  |d| k¡ q d S )
Nr"   r>   )Ú
exact_bitsé€   rE   rQ   é  r!   r9   )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¡ q&d S )
NFr"   r>   )Úmax_bitsrL  rE   rQ   rM  r!   )r�   r   rN  r   r(   )r   ÚflagrO  rP  rQ  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 rl   )Úcounterr   r	   r	   r
   Ú__init__	  rH  zItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__init__c                 S   s   |  j |7  _ tdƒ| S rl   )rV  Úbchr)r   Úsizer	   r	   r
   Ú__call__  s   zItestIntegerRandom.test_random_bits_custom_rng.<locals>.CustomRNG.__call__N)rD  rE  rF  rW  rZ  r	   r	   r	   r
   Ú	CustomRNG  s    r[  rº   )rK  Úrandfuncrg   )Úobjectr   rN  r   rV  )r   r[  Ú
custom_rngrP  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odkn  ¡ qtdƒD ]}|ddd�}|  d|  ko6dk n  ¡ q#| jt|dddd� | jt|ddd	� d S )
NéÈ   r9   r|   )Úmin_inclusiveÚmax_inclusive)ra  Úmax_exclusiver!   r8   )ra  rb  rc  )rb  rc  )r   Úrandom_ranger�   r(   r   r   )r   ÚfuncrÌ   rP  r	   r	   r
   Útest_random_range  s     ÿz#testIntegerRandom.test_random_rangeN)rD  rE  rF  rR  rU  r_  rf  r	   r	   r	   r
   rJ  ë  s
    rJ  c              
      s  g }|t tƒ7 }zddlm‰ G ‡fdd„dtƒ}|t |ƒ7 }W n* ttfyJ } ztjdkr6tj	 
d¡ n
tj	 
dt|ƒ ¡ W Y d }~nd }~ww zddlm‰  G ‡ fd	d
„d
tƒ}|t |ƒ7 }W n ttfy� } ztj	 
dt|ƒ ¡ W Y d }~nd }~ww |t tƒ7 }|S )Nr   ©Ú
IntegerGMPc                       ó   e Zd Z‡ fdd„ZdS )z!get_tests.<locals>.TestIntegerGMPc                    ó
   ˆ | _ d S r   rŸ   r   rg  r	   r
   r   ,  rH  z'get_tests.<locals>.TestIntegerGMP.setUpNrI  r	   rg  r	   r
   ÚTestIntegerGMP+  ó    rk  Úwin32zSkipping GMP tests on Windows
zSkipping GMP tests (%s)
©ÚIntegerCustomc                       ri  )z*get_tests.<locals>.TestIntegerCustomModexpc                    rj  r   rŸ   r   rn  r	   r
   r   :  rH  z0get_tests.<locals>.TestIntegerCustomModexp.setUpNrI  r	   rn  r	   r
   ÚTestIntegerCustomModexp9  rl  rp  z"Skipping custom modexp tests (%s)
)r   rG  ÚCryptodome.Math._IntegerGMPrh  r   ÚImportErrorÚOSErrorÚsysÚplatformÚstdoutÚwriter/   ÚCryptodome.Math._IntegerCustomro  rJ  )ÚconfigÚtestsrk  Úerp  r	   )ro  rh  r
   Ú	get_tests$  s,   
€ü €ÿr|  Ú__main__c                   C   s   t  tƒ ¡S r   )ÚunittestÚ	TestSuiter|  r	   r	   r	   r
   rn   E  r¼   rn   Úsuite)ÚdefaultTest)Ú__doc__rt  r~  ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.Util.py3compatÚCryptodome.Math._IntegerNativer   ÚTestCaser   rG  rJ  r|  rD  r€  Úmainr	   r	   r	   r
   Ú<module>   s&   !     <9 þ