
    ¿ig                        d Z ddlZddlmZ ddlmZmZ ddlT ddlm	Z	m
Z
mZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ d Z G d de          Zd ZdZdZ G d dej                  Zi fdZedk    rd Z  ej!        d           dS dS )z.Self-test for the custom module exponentiation    N)list_test_cases)long_to_bytesbytes_to_long)*)load_pycryptodome_raw_libcreate_string_bufferget_raw_bufferc_size_tc_ulonglong)SHAKE128)Integer)_raw_montgomery)StrongRandomc                 J    t          t          j        |                     }|S )N)data)r   r   new)tagrngs     `/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Math/test_modexp.py
create_rngr   9   s!    
x|---
.
.CJ    c                       e Zd ZdS )ExceptionModulusN)__name__
__module____qualname__ r   r   r   r   =   s        Dr   r   c           
        	 t          t          t          | ||                              		fd| ||fD             \  }}}t          	          }t	          j        ||||t          	          t          d                    }|dk    rt                      |rt          d|z            t          t          |                    }|S )Nc                 0    g | ]}t          |          S r   )r   ).0xmax_lens     r   
<listcomp>zmonty_pow.<locals>.<listcomp>C   s/      8  8  8qq'!:!:  8  8  8r          zmonty_pow failed with error: %d)lenr   maxr   r   	monty_powr
   r   r   
ValueErrorr   r	   )
baseexpmodulusbase_bexp_b	modulus_bouterrorresultr"   s
            @r   r(   r(   @   s    -D#w 7 78899G 8  8  8  8"&W!5 8  8  8FE9 w
'
'C%!!B E {{    D:UBCCC>#..//FMr   l   MAUjb*a\}8z09c_(LmJC0:8yeZIf7j3DN`&E[@z^:
g8*7cHo)Ra>)<emacCP:I';d<aFuM%tz4CLJ)sCRuUM2
=	PT9ZV!0s_\yTvGv1&;B~:6\.tN}vYC"ca(d	[2\4Y>=tOjEGKaR44<OI*#`( XWp, l   uM~Lo[*QvU%=QU)5d_*iRy^in3&y_!oicpJFXQM0,J&[{"s}N,C20\'j7.8aMRMt
CIsD	koCvj']/S<iJvcTr.wFFuZeq9<*M["t,`@T:KZ
'SnkD5xl!Xyy99vM"*^ x+j~oB8s?vj	rK?/jfe@\6d7lH3 c                   V    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd ZdS )
TestModExpc                 P    |                      dt          ddd                     d S )N            )assertEqualr(   )selfs    r   
test_smallzTestModExp.test_small^   s*    IbB//00000r   c                     d}t          |t          t                    }t          |t          t                    }|                     ||           d S )N   )pow	exponent1modulus1r(   r:   r;   r*   expectedr2   s       r   test_large_1zTestModExp.test_large_1a   sE    DtY114H55*****r   c                 b    d}t          |dt                    }|                     |d           d S )Nr>   r   r6   )r(   rA   r:   )r;   r*   r2   s      r   test_zero_expzTestModExp.test_zero_expg   s4    D4H--#####r   c                 h    t          dt          t                    }|                     |d           d S )Nr   )r(   r@   rA   r:   )r;   r2   s     r   test_zero_basezTestModExp.test_zero_basel   s/    1i22#####r   c                     d}|                      t          t          |t          d           |                      t          t          ddd           d S )Nl    r   )assertRaisesr   r(   r@   r;   r*   s     r   test_zero_moduluszTestModExp.test_zero_modulusp   sG    B*ItYJJJ*Iq!Q?????r   c                     t           dz
  }t          |t           dz  t                     }t          |t           dz  t                     }|                     ||           d S )Ni@   )rA   r?   r(   r:   rB   s       r   test_larger_exponentzTestModExp.test_larger_exponentu   sR    )#tXr\84442x88*****r   c                 z    t           dz	  }|                     t          t          |t          t           dz
             d S )N   r6   )rA   rJ   r   r(   r@   rK   s     r   test_even_moduluszTestModExp.test_even_modulus{   s3    1}*ItYQR
SSSSSr   c                    t          j                                        t          d                    }t	          dd          D ]}t          j        |                    |                    dz  }t          j        |                    |                    |z  }t          j        |                    |                    }t          |||          }t          |||          }| 
                    ||           d S )NTestr6   d   )r   r   updatebranger   
from_bytesreadr?   r(   r:   )r;   prnglengthmodulus2r*   	exponent2rC   r2   s           r   test_several_lengthszTestModExp.test_several_lengths   s    |~~$$QvYY//Asmm 	/ 	/F)$))F*;*;<<q@H%dii&7&7888CD*499V+<+<==I4H55HtY99FVX....	/ 	/r   c                    t          t          d                    }t          d          D ]}t          d          D ]}|                    d          dz  }|                    d          |z  }|                    |dz  |z             }t	          |||          }t          |||          }|                     ||           |d|dz  |z   z  dz
  z  }t	          |||          }t          |||          }|                     ||           όd S )NzTest variable exponent         r6      r   rW   rX   getrandbitsr?   r(   r:   )	r;   r[   ijr,   r*   exponentrC   r2   s	            r   test_variable_exponentz!TestModExp.test_variable_exponent   s*   !45566r 	3 	3A1XX 3 3**40014''--7++AaCE22tXw77"47;;  222Q1Q3q5\Q..tXw77"47;;  22223	3 	3r   c                 r   t          t          d                    }d}t          d          D ]}|                    d|z            dz  }|                    d|z            |z  }|                    d|z            }t	          |||          }t          |||          }|                     ||           d S )NzTest 63?     rd   r6   re   	r;   r[   r\   _r,   r*   ri   rC   r2   s	            r   test_stress_63zTestModExp.test_stress_63       !I,,''t 	/ 	/A''&11A5G''&11G;D''&11H4733HtXw77FVX....	/ 	/r   c                 r   t          t          d                    }d}t          d          D ]}|                    d|z            dz  }|                    d|z            |z  }|                    d|z            }t	          |||          }t          |||          }|                     ||           d S )NzTest 64rN   rm   rd   r6   re   rn   s	            r   test_stress_64zTestModExp.test_stress_64   rq   r   c                 r   t          t          d                    }d}t          d          D ]}|                    d|z            dz  }|                    d|z            |z  }|                    d|z            }t	          |||          }t          |||          }|                     ||           d S )NzTest 65A   rm   rd   r6   re   rn   s	            r   test_stress_65zTestModExp.test_stress_65   rq   r   N)r   r   r   r<   rD   rF   rH   rL   rO   rR   r_   rj   rp   rs   rv   r   r   r   r4   r4   \   s        1 1 1+ + +$ $ $
$ $ $@ @ @
+ + +T T T	/ 	/ 	/3 3 3$
/ 
/ 
/
/ 
/ 
/
/ 
/ 
/ 
/ 
/r   r4   c                 8    g }|t          t                    z  }|S N)r   r4   )configtestss     r   	get_testsr{      s    E	_Z(((ELr   __main__c                  B    t          j        t                                S rx   )unittest	TestSuiter{   r   r   r   <lambda>r      s    H&y{{33 r   suite)defaultTest)"__doc__r~   Cryptodome.SelfTest.st_commonr   Cryptodome.Util.numberr   r   Cryptodome.Util.py3compatCryptodome.Util._raw_apir   r   r	   r
   r   Cryptodome.Hashr   Cryptodome.Math.Numbersr   Cryptodome.Math._IntegerCustomr   Cryptodome.Random.randomr   r   r)   r   r(   r@   rA   TestCaser4   r{   r   r   mainr   r   r   <module>r      s  D 5 4  9 9 9 9 9 9 ? ? ? ? ? ? ? ? ' ' ' '/ / / / / / / / / / / / / / % $ $ $ $ $ + + + + + + : : : : : : 1 1 1 1 1 1  	 	 	 	 	z 	 	 	  0 O	 Nb/ b/ b/ b/ b/" b/ b/ b/J      z33EHMg&&&&&& r   