+
    '(j                         R t ^ RIt^ RIHt ^ RIHtHt ^ RIHtH	t	H
t
 ^ RIHt  ! R R]4      tR tR	t ! R
 R]P"                  4      t/ 3R lt]R8X  d   R t]P,                  ! RR7       R# R# )z/Self-test for the custom modular multiplicationN)list_test_cases)long_to_bytesbytes_to_long)create_string_bufferget_raw_bufferc_size_t)_raw_montgomeryc                       ] tR t^1tRtR# )ExceptionModulus N)__name__
__module____qualname____firstlineno____static_attributes__r       V/home/ubuntu/cf-venv/lib/python3.14/site-packages/Crypto/SelfTest/Math/test_modmult.pyr
   r
   1   s    r   r
   c           	      Z   W8  d	   W,          p W8  d	   W,          p\        V4      p\        V4      p\        W4      p\        W4      p\        V4      p\        P                  ! VVVV\        V4      4      pV^8X  d   \        4       hV'       d   \        RV,          4      h\        V4      # )   z&monty_multiply() failed with error: %d)	r   lenr   r   monty_multiplyr   r
   
ValueErrorr   )	term1term2modulus	modulus_bnumbers_lenterm1_bterm2_bouterrors	   &&&      r   
monty_multr!   5   s    g&Ii.KE/GE/G
{
+C**%E {  AEIJJ#r   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                   8   a  ] tR t^Ut o R tR tR tR tRtV t	R# )TestModMultiplyc                @    V P                  R \        ^^^4      4       R# )   N)assertEqualr!   )selfs   &r   
test_smallTestModMultiply.test_smallW   s    *Q2"67r   c                    \         P                  4       ^,           ^,          p\         ^,          p\         ^Z,
          pRV^,
          ,          R,           pV P                  V\        W#\         4      4       R# )          -Nmodulus1
bit_lengthr&   r!   )r'   r   t1t2expects   &    r   
test_largeTestModMultiply.test_largeZ   sV    **,q0Q6]]K!O,w6BH!=>r   c                    \         P                  4       ^,           ^,          pRV,          pV P                  V\        R^ \         4      4       V P                  V\        ^ R\         4      4       R# )r+   r,      Nr.   )r'   r   r3   s   &  r   test_zero_termTestModMultiply.test_zero_termb   sV    **,q0Q6;&E1h!?@Auh!?@r   c                p    ^R,          pRp\        \        W\        4      4      pV P                  W24       R# )   i  l   ]
uz!f(4(8U`&`D6"")qlfP	cj@Np:+ -z=wwL,
G!&L=}Cm;!O:/	} }d	SJVQkBswvY#(He){BH<sU)A>eoO?am{EkG]&\nrT}w/~	6(o?%RNt8M$odB5`98/>A]?'lRW9Iog/8)]W q5v0uqF}61Wq}o N)r   r!   r/   r&   )r'   r1   
expect_intress   &   r   test_larger_term TestModMultiply.test_larger_termh   s2    W X
Jrx89)r   r   N)
r   r   r   r   r(   r4   r8   r>   r   __classdictcell__)__classdict__s   @r   r#   r#   U   s     8?A* *r   r#   c                 6    . pV\        \        4      ,          pV# N)r   r#   )configtestss   & r   	get_testsrF   o   s    E	__--ELr   __main__c                  >    \         P                  ! \        4       4      # rC   )unittest	TestSuiterF   r   r   r   suiterK   v   s    !!)+..r   rK   )defaultTest)__doc__rI   Crypto.SelfTest.st_commonr   Crypto.Util.numberr   r   Crypto.Util._raw_apir   r   r   Crypto.Math._IntegerCustomr   r   r
   r!   r/   TestCaser#   rF   r   rK   mainr   r   r   <module>rT      sx   D 6  5 ;, , 7	z 	: N*h'' *4   z/MMg& r   