o
    5h                     @   s   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 deZd	d
 ZdZG dd dejZi fddZedkrQdd Zejd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                   @   s   e Zd ZdS )ExceptionModulusN)__name__
__module____qualname__ r   r   u/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/Crypto/SelfTest/Math/test_modmult.pyr	   1   s    r	   c           	      C   s   | |kr| |; } ||kr||; }t |}t|}t | |}t ||}t|}t||||t|}|dkr8t |r@td| 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errorr   r   r   
monty_mult5   s*   

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                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestModMultiplyc                 C   s   |  dtddd d S )N            )assertEqualr   )selfr   r   r   
test_smallW   s   zTestModMultiply.test_smallc                 C   sH   t  d d }t d }t d }d|d  d }| |t||t  d S )N         Z             -modulus1
bit_lengthr"   r   )r#   r   t1t2expectr   r   r   
test_largeZ   s
   zTestModMultiply.test_largec                 C   sD   t  d d }d| }| |tddt  | |tddt  d S )Nr%   r&   r)      r   r,   )r#   r   r1   r   r   r   test_zero_termb   s   zTestModMultiply.test_zero_termc                 C   s,   dd }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   r-   r"   )r#   r/   
expect_intresr   r   r   test_larger_termh   s   z TestModMultiply.test_larger_termN)r
   r   r   r$   r2   r4   r7   r   r   r   r   r   U   s
    r   c                 C   s   g }|t t7 }|S N)r   r   )configtestsr   r   r   	get_testso   s   r;   __main__c                   C   s   t t S r8   )unittest	TestSuiter;   r   r   r   r   suitev   s   r?   )defaultTest)__doc__r=   Crypto.SelfTest.st_commonr   Crypto.Util.numberr   r   Crypto.Util._raw_apir   r   r   Crypto.Math._IntegerCustomr   r   r	   r   r-   TestCaser   r;   r
   r?   mainr   r   r   r   <module>   s   !