
    9i                        S r SSKrSSKJr  SSKJrJr  SSK7  SSKJ	r	J
r
JrJrJr  SSKJr  SSKJr  SS	KJr  SS
KJr  S r " S S\5      rS rSrSr " S S\R8                  5      r0 4S jr\S:X  a  S r \RB                  " SS9  gg)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                 @    [        [        R                  " U S95      nU$ )N)data)r   r   new)tagrngs     `/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/Crypto/SelfTest/Math/test_modexp.py
create_rngr   9   s    
x||-
.CJ    c                       \ rS rSrSrg)ExceptionModulus=    N)__name__
__module____qualname____firstlineno____static_attributes__r   r   r   r   r   =   s    r   r   c           
      p   [        [        [        XU5      5      5      nXU4 Vs/ s H  n[        XC5      PM     snu  pVn[        U5      n[        R
                  " UUUU[        U5      [        S5      5      n	U	S:X  a
  [        5       eU	(       a  [        SU	-  5      e[        [        U5      5      n
U
$ s  snf )N       zmonty_pow failed with error: %d)lenr   maxr   r   	monty_powr
   r   r   
ValueErrorr   r	   )baseexpmodulusmax_lenxbase_bexp_b	modulus_bouterrorresults              r   r&   r&   @   s    -Dw 789G #'W!5 8!5 @Aq!:!5 8F9 w
'C%%!BE {  :UBCC>#./FM' 8s   B3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                   \    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)
TestModExp\   c                 >    U R                  S[        SSS5      5        g )N            )assertEqualr&   )selfs    r   
test_smallTestModExp.test_small^   s    IbB/0r   c                 ~    Sn[        U[        [        5      n[        U[        [        5      nU R	                  X25        g )N   )pow	exponent1modulus1r&   r;   r<   r(   expectedr2   s       r   test_large_1TestModExp.test_large_1a   s1    DtY14H5*r   c                 N    Sn[        US[        5      nU R                  US5        g )Nr@   r   r7   )r&   rC   r;   )r<   r(   r2   s      r   test_zero_expTestModExp.test_zero_expg   s%    D4H-#r   c                 R    [        S[        [        5      nU R                  US5        g )Nr   )r&   rB   rC   r;   )r<   r2   s     r   test_zero_baseTestModExp.test_zero_basel   s     1i2#r   c                     SnU R                  [        [        U[        S5        U R                  [        [        SSS5        g )Nl    r   )assertRaisesr   r&   rB   r<   r(   s     r   test_zero_modulusTestModExp.test_zero_modulusp   s5    B*ItYJ*Iq!Q?r   c                     [         S-
  n[        U[         S-  [         5      n[        U[         S-  [         5      nU R                  X25        g )Ni@   )rC   rA   r&   r;   rD   s       r   test_larger_exponentTestModExp.test_larger_exponentu   s>    )#tXr\8442x8*r   c                 f    [         S-	  nU R                  [        [        U[        [         S-
  5        g )N   r7   )rC   rO   r   r&   rB   rP   s     r   test_even_modulusTestModExp.test_even_modulus{   s'    1}*ItYQR
Sr   c                    [         R                  " 5       R                  [        S5      5      n[	        SS5       H  n[
        R                  " UR                  U5      5      S-  n[
        R                  " UR                  U5      5      U-  n[
        R                  " UR                  U5      5      n[        XEU5      n[        XEU5      nU R                  Xv5        M     g )NTestr7   d   )r   r   updatebranger   
from_bytesreadrA   r&   r;   )r<   prnglengthmodulus2r(   	exponent2rE   r2   s           r   test_several_lengthsTestModExp.test_several_lengths   s    ||~$$QvY/AsmF))$))F*;<q@H%%dii&788CD**499V+<=I4H5Ht9FV. $r   c                    [        [        S5      5      n[        S5       H  n[        S5       H  nUR                  S5      S-  nUR                  S5      U-  nUR                  US-  U-   5      n[	        XVU5      n[        XVU5      nU R                  X5        USUS-  U-   -  S-
  -  n[	        XVU5      n[        XVU5      nU R                  X5        M     M     g )NzTest variable exponent         r7      r   r_   r`   getrandbitsrA   r&   r;   )	r<   rc   ijr*   r(   exponentrE   r2   s	            r   test_variable_exponent!TestModExp.test_variable_exponent   s    !456rA1X**4014''-7++AaCE2tw7"47;  2Q1Q3q5\Q..tw7"47;  2  r   c                 *   [        [        S5      5      nSn[        S5       Hn  nUR                  SU-  5      S-  nUR                  SU-  5      U-  nUR                  SU-  5      n[	        XVU5      n[        XVU5      nU R                  X5        Mp     g )NzTest 63?     rm   r7   rn   	r<   rc   rd   _r*   r(   rr   rE   r2   s	            r   test_stress_63TestModExp.test_stress_63       !I,'tA''&1A5G''&1G;D''&1H473Htw7FV. r   c                 *   [        [        S5      5      nSn[        S5       Hn  nUR                  SU-  5      S-  nUR                  SU-  5      U-  nUR                  SU-  5      n[	        XVU5      n[        XVU5      nU R                  X5        Mp     g )NzTest 64rT   rw   rm   r7   rn   rx   s	            r   test_stress_64TestModExp.test_stress_64   r|   r   c                 *   [        [        S5      5      nSn[        S5       Hn  nUR                  SU-  5      S-  nUR                  SU-  5      U-  nUR                  SU-  5      n[	        XVU5      n[        XVU5      nU R                  X5        Mp     g )NzTest 65A   rw   rm   r7   rn   rx   s	            r   test_stress_65TestModExp.test_stress_65   r|   r   r   N)r   r   r   r   r=   rF   rI   rL   rQ   rU   rY   rg   rs   rz   r~   r   r    r   r   r   r4   r4   \   s@    1+$
$@
+T	/3$
/
/
/r   r4   c                 .    / nU[        [        5      -  nU$ N)r   r4   )configtestss     r   	get_testsr      s    E	_Z((ELr   __main__c                  >    [         R                  " [        5       5      $ r   )unittest	TestSuiter   r   r   r   <lambda>r      s    H&&y{3r   suite)defaultTest)"__doc__r   Crypto.SelfTest.st_commonr   Crypto.Util.numberr   r   Crypto.Util.py3compatCrypto.Util._raw_apir   r   r	   r
   r   Crypto.Hashr   Crypto.Math.Numbersr   Crypto.Math._IntegerCustomr   Crypto.Random.randomr   r   r'   r   r&   rB   rC   TestCaser4   r   r   r   mainr   r   r   <module>r      s   D 5  5 ; #/ / ! ' 6 -	z 	0 O	 Nb/"" b/J   z3EMMg& r   