
    ,h                        d Z ddlZddlmZ ddlmZmZ ddl 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j8                        Zi fdZedk(  rd Z  ejB                  d       yy)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                 D    t        t        j                  |             }|S )N)data)r   r   new)tagrngs     b/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/SelfTest/Math/test_modexp.py
create_rngr   9   s    
x||-
.CJ    c                       e Zd Zy)ExceptionModulusN)__name__
__module____qualname__ r   r   r   r   =   s    r   r   c           
      d   t        t        t        | ||                  }| ||fD cg c]  }t        ||       c}\  }}}t        |      }t	        j
                  ||||t        |      t        d            }	|	dk(  r
t               |	rt        d|	z        t        t        |            }
|
S c c}w )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    -D#w 789G #'W!5 8qq'!:  8FE9 w
'C%%!BE {  :UBCC>#./FM' 8s   B-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                   T    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y)
TestModExpc                 >    | j                  dt        ddd             y )N            )assertEqualr#   )selfs    r   
test_smallzTestModExp.test_small^   s    IbB/0r   c                     d}t        |t        t              }t        |t        t              }| j	                  ||       y )N   )pow	exponent1modulus1r#   r7   r8   r%   expectedr/   s       r   test_large_1zTestModExp.test_large_1a   s3    DtY14H5*r   c                 N    d}t        |dt              }| j                  |d       y )Nr;   r   r3   )r#   r>   r7   )r8   r%   r/   s      r   test_zero_expzTestModExp.test_zero_expg   s%    D4H-#r   c                 R    t        dt        t              }| j                  |d       y )Nr   )r#   r=   r>   r7   )r8   r/   s     r   test_zero_basezTestModExp.test_zero_basel   s     1i2#r   c                     d}| j                  t        t        |t        d       | j                  t        t        ddd       y )Nl    r   )assertRaisesr   r#   r=   r8   r%   s     r   test_zero_moduluszTestModExp.test_zero_modulusp   s5    B*ItYJ*Iq!Q?r   c                     t         dz
  }t        |t         dz  t               }t        |t         dz  t               }| j                  ||       y )Ni@   )r>   r<   r#   r7   r?   s       r   test_larger_exponentzTestModExp.test_larger_exponentu   s@    )#tXr\8442x8*r   c                 f    t         dz	  }| j                  t        t        |t        t         dz
         y )N   r3   )r>   rG   r   r#   r=   rH   s     r   test_even_moduluszTestModExp.test_even_modulus{   s'    1}*ItYQR
Sr   c                    t        j                         j                  t        d            }t	        dd      D ]  }t        j                  |j                  |            dz  }t        j                  |j                  |            |z  }t        j                  |j                  |            }t        |||      }t        |||      }| j                  ||        y )NTestr3   d   )r   r   updatebranger   
from_bytesreadr<   r#   r7   )r8   prnglengthmodulus2r%   	exponent2r@   r/   s           r   test_several_lengthszTestModExp.test_several_lengths   s    ||~$$QvY/Asm 	/F))$))F*;<q@H%%dii&788CD**499V+<=I4H5HtY9FVX.	/r   c                    t        t        d            }t        d      D ]  }t        d      D ]  }|j                  d      dz  }|j                  d      |z  }|j                  |dz  |z         }t	        |||      }t        |||      }| j                  ||       |d|dz  |z   z  dz
  z  }t	        |||      }t        |||      }| j                  ||         y )NzTest variable exponent         r3      r   rT   rU   getrandbitsr<   r#   r7   )	r8   rX   ijr'   r%   exponentr@   r/   s	            r   test_variable_exponentz!TestModExp.test_variable_exponent   s    !456r 	3A1X 3**4014''-7++AaCE2tXw7"47;  2Q1Q3q5\Q..tXw7"47;  23	3r   c                 ,   t        t        d            }d}t        d      D ]p  }|j                  d|z        dz  }|j                  d|z        |z  }|j                  d|z        }t	        |||      }t        |||      }| j                  ||       r y )NzTest 63?     ra   r3   rb   	r8   rX   rY   _r'   r%   rf   r@   r/   s	            r   test_stress_63zTestModExp.test_stress_63       !I,'t 	/A''&1A5G''&1G;D''&1H473HtXw7FVX.	/r   c                 ,   t        t        d            }d}t        d      D ]p  }|j                  d|z        dz  }|j                  d|z        |z  }|j                  d|z        }t	        |||      }t        |||      }| j                  ||       r y )NzTest 64rK   rj   ra   r3   rb   rk   s	            r   test_stress_64zTestModExp.test_stress_64   rn   r   c                 ,   t        t        d            }d}t        d      D ]p  }|j                  d|z        dz  }|j                  d|z        |z  }|j                  d|z        }t	        |||      }t        |||      }| j                  ||       r y )NzTest 65A   rj   ra   r3   rb   rk   s	            r   test_stress_65zTestModExp.test_stress_65   rn   r   N)r   r   r   r9   rA   rC   rE   rI   rL   rO   r\   rg   rm   rp   rs   r   r   r   r1   r1   \   s@    1+$
$@
+T	/3$
/
/
/r   r1   c                 .    g }|t        t              z  }|S N)r   r1   )configtestss     r   	get_testsrx      s    E	_Z((ELr   __main__c                  <    t        j                  t                     S ru   )unittest	TestSuiterx   r   r   r   <lambda>r}      s    H&&y{3 r   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#   r=   r>   TestCaser1   rx   r   r~   mainr   r   r   <module>r      s   D 5  5 ; #/ / ! ' 6 -	z 	0 O	 Nb/"" b/J   z3EHMMg& r   