Ë
    (üàgü  ã                   óØ   — 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¬«       yy)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y)ÚExceptionModulusN)Ú__name__Ú
__module__Ú__qualname__© ó    ú_/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/Crypto/SelfTest/Math/test_modmult.pyr   r   1   s   „ Ør   r   c           	      ó4  — | |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ð �‚{ÜÓ Ð ÙÜÐAÀEÑIÓJÐJä˜#ÓÐ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                   ó$   — e Zd Zd„ Zd„ Zd„ Zd„ Zy)ÚTestModMultiplyc                 ó>   — | j                  dt        ddd«      «       y )Nó   é   é   é   )ÚassertEqualr    )Úselfs    r   Ú
test_smallzTestModMultiply.test_smallW   s   € Ø×Ñ˜¤*¨Q°°2Ó"6Õ7r   c                 ó´   — t         j                  «       dz   dz  }t         dz  }t         dz
  }d|dz
  z  dz   }| j                  |t        ||t         «      «       y )Né   é   é   éZ   ó    é   ó   -©Úmodulus1Ú
bit_lengthr(   r    )r)   r   Út1Út2Úexpects        r   Ú
test_largezTestModMultiply.test_largeZ   sX   € Ü×*Ñ*Ó,¨qÑ0°QÑ6ˆä˜‰]ˆÜ˜‰]ˆØ˜K¨!™OÑ,¨wÑ6ˆØ×Ñ˜¤¨B°´HÓ!=Õ>r   c                 óÆ   — t         j                  «       dz   dz  }d|z  }| j                  |t        ddt         «      «       | j                  |t        ddt         «      «       y )Nr,   r-   r0   é   r   r3   )r)   r   r8   s      r   Útest_zero_termzTestModMultiply.test_zero_termb   sV   € Ü×*Ñ*Ó,¨qÑ0°QÑ6ˆØ˜;Ñ&ˆØ×Ñ˜¤¨E°1´hÓ!?Ô@Ø×Ñ˜¤¨A¨u´hÓ!?Õ@r   c                 ój   — ddz  }d}t        t        ||t        «      «      }| j                  ||«       y )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    r4   r(   )r)   r6   Ú
expect_intÚress       r   Útest_larger_termz TestModMultiply.test_larger_termh   s6   € Ø�‰Wˆð Xˆ
ÜœJ r¨2¬xÓ8Ó9ˆØ×Ñ˜˜jÕ)r   N)r   r   r   r*   r9   r<   r@   r   r   r   r"   r"   U   s   „ ò8ò?òAó*r   r"   c                 ó.   — g }|t        t        «      z  }|S ©N)r   r"   )ÚconfigÚtestss     r   Ú	get_testsrE   o   s   € Ø€EØ	Œ_œ_Ó-Ñ-€EØ€Lr   Ú__main__c                  ó<   — t        j                  t        «       «      S rB   )ÚunittestÚ	TestSuiterE   r   r   r   ÚsuiterJ   v   s   € Ü×!Ñ!¤)£+Ó.Ð.r   rJ   )ÚdefaultTest)Ú__doc__rH   ÚCrypto.SelfTest.st_commonr   ÚCrypto.Util.numberr   r   ÚCrypto.Util._raw_apir   r   r   ÚCrypto.Math._IntegerCustomr	   r   r   r    r4   ÚTestCaser"   rE   r   rJ   Úmainr   r   r   ú<module>rS      sz   ðñD 6ã å 5ç ;÷,ñ ,õ 7ô	�zô 	òð: N€ô*�h×'Ñ'ô *ð4 ó ð ˆzÒò/à€H‡M�M˜gÖ&ð r   