+
    '(j                     "   R t ^ RIt^ RIHt ^ RIHtHt ^ RI5 ^ RIH	t	H
t
HtHtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt R
 t ! R R]4      tR tRtRt ! R R]P8                  4      t/ 3R lt]R8X  d   R t ]PB                  ! RR7       R# R# )z.Self-test for the custom module exponentiationN)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                 F    \        \        P                  ! V R 7      4      pV# ))data)r   r   new)tagrngs   & U/home/ubuntu/cf-venv/lib/python3.14/site-packages/Crypto/SelfTest/Math/test_modexp.py
create_rngr   9   s    
x||-
.CJ    c                       ] tR t^=tRtR# )ExceptionModulus N)__name__
__module____qualname____firstlineno____static_attributes__r   r   r   r   r   =   s    r   r   c           
      z   \        \        \        WV4      4      4      pWV3 Uu. uF  p\        WC4      NK  	  upw  rVp\        V4      p\        P
                  ! VVVV\        V4      \        ^ 4      4      p	V	^8X  d   \        4       hV	'       d   \        RV	,          4      h\        \        V4      4      p
V
# u upi )    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   B8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                   h   a  ] tR t^\t o R tR tR tR tR tR t	R t
R tR	 tR
 tR tR tRtV tR# )
TestModExpc                @    V P                  ^\        ^^^4      4       R# )   N)assertEqualr#   )selfs   &r   
test_smallTestModExp.test_small^   s    IbB/0r   c                    R p\        V\        \        4      p\        V\        \        4      pV P	                  W24       R# l   N)pow	exponent1modulus1r#   r4   r5   r%   expectedr/   s   &   r   test_large_1TestModExp.test_large_1a   s1    DtY14H5*r   c                P    R p\        V^ \        4      pV P                  V^4       R# r9   )r#   r<   r4   )r5   r%   r/   s   &  r   test_zero_expTestModExp.test_zero_expg   s%    D4H-#r   c                T    \        ^ \        \        4      pV P                  V^ 4       R# )    N)r#   r;   r<   r4   )r5   r/   s   & r   test_zero_baseTestModExp.test_zero_basel   s     1i2#r   c                    R pV P                  \        \        V\        ^ 4       V P                  \        \        ^ ^ ^ 4       R# )l    N)assertRaisesr   r#   r;   r5   r%   s   & r   test_zero_modulusTestModExp.test_zero_modulusp   s5    B*ItYJ*Iq!Q?r   c                    \         R ,
          p\        V\         ^@,          \         4      p\        V\         ^@,          \         4      pV P                  W24       R# )iN)r<   r:   r#   r4   r=   s   &   r   test_larger_exponentTestModExp.test_larger_exponentu   s>    )#tXr\8442x8*r   c                x    \         ^,	          pV P                  \        \        V\        \         ^,
          4       R# )   N)r<   rI   r   r#   r;   rJ   s   & r   test_even_modulusTestModExp.test_even_modulus{   s'    1}*ItYQR
Sr   c                   \         P                  ! 4       P                  \        R 4      4      p\	        ^^d4       F  p\
        P                  ! VP                  V4      4      ^,          p\
        P                  ! VP                  V4      4      V,          p\
        P                  ! VP                  V4      4      p\        WEV4      p\        WEV4      pV P                  Wv4       K  	  R# )TestN)r   r   updatebranger   
from_bytesreadr:   r#   r4   )r5   prnglengthmodulus2r%   	exponent2r>   r/   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                   \        \        R 4      4      p\        ^4       F  p\        ^4       F  pVP                  ^4      ^,          pVP                  ^4      V,          pVP                  V^,          V,           4      p\	        WVV4      p\        WVV4      pV P                  W4       V^V^,          V,           ,          ^,
          ,          p\	        WVV4      p\        WVV4      pV P                  W4       K  	  K  	  R# )zTest variable exponentNr   rW   rX   getrandbitsr:   r#   r4   )	r5   r[   ijr'   r%   exponentr>   r/   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                T   \        \        R 4      4      p^?p\        R4       F  pVP                  ^V,          4      ^,          pVP                  ^V,          4      V,          pVP                  ^V,          4      p\	        WVV4      p\        WVV4      pV P                  W4       K  	  R# )zTest 63  Nrb   	r5   r[   r\   _r'   r%   rf   r>   r/   s	   &        r   test_stress_63TestModExp.test_stress_63       !I,'tA''&1A5G''&1G;D''&1H473Htw7FV. r   c                T   \        \        R 4      4      p^@p\        R4       F  pVP                  ^V,          4      ^,          pVP                  ^V,          4      V,          pVP                  ^V,          4      p\	        WVV4      p\        WVV4      pV P                  W4       K  	  R# )zTest 64rj   Nrb   rk   s	   &        r   test_stress_64TestModExp.test_stress_64   ro   r   c                T   \        \        R 4      4      p^Ap\        R4       F  pVP                  ^V,          4      ^,          pVP                  ^V,          4      V,          pVP                  ^V,          4      p\	        WVV4      p\        WVV4      pV P                  W4       K  	  R# )zTest 65rj   Nrb   rk   s	   &        r   test_stress_65TestModExp.test_stress_65   ro   r   r   N)r   r   r   r   r6   r?   rB   rF   rK   rN   rR   r_   rg   rm   rq   rt   r   __classdictcell__)__classdict__s   @r   r1   r1   \   sH     1+$
$@
+T	/3$
/
/
/ 
/r   r1   c                 6    . pV\        \        4      ,          pV# N)r   r1   )configtestss   & r   	get_testsr|      s    E	_Z((ELr   __main__c                  >    \         P                  ! \        4       4      # ry   )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#   r;   r<   TestCaser1   r|   r   r   mainr   r   r   <module>r      s   D 5  5 ; #/ / ! ' 6 -	z 	0 O	 Nb/"" b/J   z3EMMg& r   