o
    Þý°j  ã                   @   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   ú˜/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/Cryptodome/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%=ÒQÈU)5d«³_š*i§R¶¼y¶^ëiæn3&y_ó!oÍicpJFX•QM0,þJ&[{"sÅ}ÁNŽ,ŒC20\'•j7Ö.Å8aMRÉMt
CIsD	‹k·Äo¿C•vj'ûðŠ]Ë/S<iJvcT�r.wFúFuZ±eâq9<ì*M‰["ºýt,`@T:KŽZ
Î'«S˜nÆk¡D5…x€l!Xµyy„9À9øv—M"*Ÿ^× x†+j~oÕB8ßs?vj	…r‘K?/ýjç fe@\¥6Öd7€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­""¸)ql©fP	±c›j‚@Np:+ -ßz=wÔwLÁùï,
G!é&L=}ÈCm;!O¶:/	} Ž}d	ªSJV˜QškùBswvY#(Ì™HÎe)Î{BH<sîU)Aù>eo¬O‰?am{�—EkG]&Ð\nr«‘Tð}îw/~	˜è6í(áo?%RNt8ÁM$o‘d“BÔô5`‹98/ÿ>A©]¤¤?¤'l±R™W9Iog/8’)]WÙ †qüü5®vÎ0¤u€qFî}î61ºWÇq} 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=   ÚCryptodome.SelfTest.st_commonr   ÚCryptodome.Util.numberr   r   ÚCryptodome.Util._raw_apir   r   r   ÚCryptodome.Math._IntegerCustomr   r   r	   r   r-   ÚTestCaser   r;   r
   r?   Úmainr   r   r   r   Ú<module>   s   !ý