
    9i                         S r SSKrSSKJr  SSKJrJr  SSKJrJ	r	J
r
  SSKJr   " S S\5      rS	 rS
r " S S\R"                  5      r0 4S jr\S:X  a  S r\R,                  " SS9  gg)z/Self-test for the custom modular multiplication    N)list_test_cases)long_to_bytesbytes_to_long)create_string_bufferget_raw_bufferc_size_t)_raw_montgomeryc                       \ rS rSrSrg)ExceptionModulus1    N)__name__
__module____qualname____firstlineno____static_attributes__r       a/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/Crypto/SelfTest/Math/test_modmult.pyr   r   1   s    r   r   c           	      :   X:  a  X-  n X:  a  X-  n[        U5      n[        U5      n[        X5      n[        X5      n[        U5      n[        R                  " UUUU[        U5      5      nUS:X  a
  [        5       eU(       a  [        SU-  5      e[        U5      $ )N   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                   ,    \ rS rSrS rS rS rS rSrg)TestModMultiplyU   c                 >    U R                  S[        SSS5      5        g )N            )assertEqualr#   )selfs    r   
test_smallTestModMultiply.test_smallW   s    *Q2"67r   c                     [         R                  5       S-   S-  n[         S-  n[         S-
  nSUS-
  -  S-   nU R                  U[        X#[         5      5        g )N         Z             -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                     [         R                  5       S-   S-  nSU-  nU R                  U[        SS[         5      5        U R                  U[        SS[         5      5        g )Nr1   r2   r5      r   r8   )r-   r   r=   s      r   test_zero_termTestModMultiply.test_zero_termb   sV    **,q0Q6;&E1h!?@Auh!?@r   c                 f    SS-  nSn[        [        X[        5      5      nU R                  X25        g )Nr3   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 )r   r#   r9   r,   )r-   r;   
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.   r>   rB   rG   r   r   r   r   r%   r%   U   s    8?A*r   r%   c                 .    / nU[        [        5      -  nU$ N)r   r%   )configtestss     r   	get_testsrM   o   s    E	__--ELr   __main__c                  >    [         R                  " [        5       5      $ rJ   )unittest	TestSuiterM   r   r   r   suiterR   v   s    !!)+..r   rR   )defaultTest)__doc__rP   Crypto.SelfTest.st_commonr   Crypto.Util.numberr   r   Crypto.Util._raw_apir   r   r   Crypto.Math._IntegerCustomr	   r   r   r#   r9   TestCaser%   rM   r   rR   mainr   r   r   <module>r[      sx   D 6  5 ;, , 7	z 	: N*h'' *4   z/MMg& r   