
    ¿ig                         d Z ddlZddlmZ ddlmZmZ ddlmZm	Z	m
Z
 ddlmZ  G d de          Zd	 Zd
Z G d dej                  Zi fdZedk    rd Z ej        d           dS dS )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                       e Zd ZdS )ExceptionModulusN)__name__
__module____qualname__     a/var/www/html/afkarena/venv/lib/python3.11/site-packages/Cryptodome/SelfTest/Math/test_modmult.pyr   r   1   s        Dr   r   c           	         | |k    r| |z  } ||k    r||z  }t          |          }t          |          }t          | |          }t          ||          }t          |          }t          j        ||||t          |                    }|dk    rt                      |rt          d|z            t          |          S )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 {{    KAEIJ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                   &    e Zd Zd Zd Zd Zd ZdS )TestModMultiplyc                 P    |                      dt          ddd                     d S )N            )assertEqualr    )selfs    r   
test_smallzTestModMultiply.test_smallW   s*    *Q2"6"677777r   c                     t                                           dz   dz  }t           dz  }t           dz
  }d|dz
  z  dz   }|                     |t          ||t                                d S )N         Z             -modulus1
bit_lengthr(   r    )r)   r   t1t2expects        r   
test_largezTestModMultiply.test_largeZ   sj    **,,q0Q6]]K!O,w6BH!=!=>>>>>r   c                     t                                           dz   dz  }d|z  }|                     |t          ddt                                |                     |t          ddt                                d S )Nr,   r-   r0      r   r3   )r)   r   r8   s      r   test_zero_termzTestModMultiply.test_zero_termb   sq    **,,q0Q6;&E1h!?!?@@@Auh!?!?@@@@@r   c                     ddz  }d}t          t          ||t                              }|                     ||           d S )Nr.   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    r4   r(   )r)   r6   
expect_intress       r   test_larger_termz TestModMultiply.test_larger_termh   sH    W X
Jr2x8899j)))))r   N)r   r   r   r*   r9   r<   r@   r   r   r   r"   r"   U   sS        8 8 8? ? ?A A A* * * * *r   r"   c                 8    g }|t          t                    z  }|S N)r   r"   )configtestss     r   	get_testsrE   o   s    E	__---ELr   __main__c                  B    t          j        t                                S rB   )unittest	TestSuiterE   r   r   r   suiterJ   v   s    !)++...r   rJ   )defaultTest)__doc__rH   Cryptodome.SelfTest.st_commonr   Cryptodome.Util.numberr   r   Cryptodome.Util._raw_apir   r   r   Cryptodome.Math._IntegerCustomr	   r   r   r    r4   TestCaser"   rE   r   rJ   mainr   r   r   <module>rS      sM  D 6 5  9 9 9 9 9 9 ? ? ? ? ? ? ? ?, , , , , , , , , , ; : : : : :	 	 	 	 	z 	 	 	  : N* * * * *h' * * *4      z/ / /HMg&&&&&& r   