o
    5h~                     @   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	   u/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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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   ir!   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   ir!   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 )Nr!   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 )NY   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   )Nr	   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 sJ 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+   iirK   i_ iʠi`yij'  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   ir"   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      ir!   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   irg   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   ir   r&   r!   i   r9   rO   r[   ry   s@   (ynpqB,f)Z*r}q:'z8%	[CUE2: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  Crypto.Math._IntegerGMPrh  r   ImportErrorOSErrorsysplatformstdoutwriter/   Crypto.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~  Crypto.SelfTest.st_commonr   Crypto.Util.py3compatCrypto.Math._IntegerNativer   TestCaser   rG  rJ  r|  rD  r  mainr	   r	   r	   r
   <module>   s&   !     <9 