Ë
    (üàg§  ã                   ó  — d Z ddlZddlmZ ddlmZmZ ddl­ ddlm	Z	m
Z
mZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ d„ Z G d„ de«      Zd„ ZdZdZ G d„ dej8                  «      Zi fd„Zedk(  rd„ Z  ejB                  d¬«       yy)z.Self-test for the custom module exponentiationé    N)Úlist_test_cases)Úlong_to_bytesÚbytes_to_long)Ú*)Úload_pycryptodome_raw_libÚcreate_string_bufferÚget_raw_bufferÚc_size_tÚc_ulonglong)ÚSHAKE128)ÚInteger)Ú_raw_montgomery)ÚStrongRandomc                 óD   — t        t        j                  | ¬«      «      }|S )N)Údata)r   r   Únew)ÚtagÚrngs     ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/Crypto/SelfTest/Math/test_modexp.pyÚ
create_rngr   9   s   € Ü
”x—|‘|¨Ô-Ó
.€CØ€Jó    c                   ó   — e Zd Zy)ÚExceptionModulusN)Ú__name__Ú
__module__Ú__qualname__© r   r   r   r   =   s   „ Ør   r   c           
      ód  — t        t        t        | ||«      «      «      }| ||fD �cg c]  }t        ||«      ‘Œ c}\  }}}t        |«      }t	        j
                  ||||t        |«      t        d«      «      }	|	dk(  r
t        «       ‚|	rt        d|	z  «      ‚t        t        |«      «      }
|
S c c}w )Né    é   zmonty_pow failed with error: %d)Úlenr   Úmaxr   r   Ú	monty_powr
   r   r   Ú
ValueErrorr   r	   )ÚbaseÚexpÚmodulusÚmax_lenÚxÚbase_bÚexp_bÚ	modulus_bÚoutÚerrorÚresults              r   r#   r#   @   s»   € Ü”-¤ D¨#¨wÓ 7Ó8Ó9€Gð #'¨¨WÐ!5ö 8¸q¤¨q°'Õ!:ò  8Ñ€FˆE�9ô ˜wÓ
'€CÜ×%Ñ%ØØØØÜ˜Ó!Ü˜B“ó€Eð �‚{ÜÓ Ð ÙÜÐ:¸UÑBÓCÐCäœ>¨#Ó.Ó/€FØ€Mùò' 8s   §B-l‰   MAUûjb*a�\ˆ}ã8Àz‹09’c_(…LmJËC0:8yÒeZI¾fî7‹j3D’N`&E[@z¯^:â
ágŸ8*7cÆHo)Ra…·>)<õemaÞc€C¾P:I';d<Ôa÷ïFuëMó%Œtz¬4CLŸJÆ)sCRuUM¾2
=	PT9‚÷ZV!ç0s²_\ä©yëTµvŸGv1&;ôBÉ~:6“µ\¬.÷t…N­Ï}ÿØvÎâYC"ca�(d	[Œ2ö\4ëY>=tOjEGþŒK¿a�¬R44œ<ëO‹I*¾#Ð¤`( ¢XWp, 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                   óT   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ Zy)Ú
TestModExpc                 ó>   — | j                  dt        ddd«      «       y )Né   é   é   é   )ÚassertEqualr#   )Úselfs    r   Ú
test_smallzTestModExp.test_small^   s   € Ø×Ñ˜œI b¨¨BÓ/Õ0r   c                 ó€   — d}t        |t        t        «      }t        |t        t        «      }| j	                  ||«       y )Nì   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ)ÚpowÚ	exponent1Úmodulus1r#   r7   ©r8   r%   Úexpectedr/   s       r   Útest_large_1zTestModExp.test_large_1a   s3   € ØDˆÜ�tœY¬Ó1ˆÜ˜4¤¬HÓ5ˆØ×Ñ˜ Õ*r   c                 óN   — d}t        |dt        «      }| j                  |d«       y )Nr;   r   r3   )r#   r>   r7   )r8   r%   r/   s      r   Útest_zero_expzTestModExp.test_zero_expg   s%   € ØDˆÜ˜4 ¤HÓ-ˆØ×Ñ˜ Õ#r   c                 óR   — t        dt        t        «      }| j                  |d«       y )Nr   )r#   r=   r>   r7   )r8   r/   s     r   Útest_zero_basezTestModExp.test_zero_basel   s    € Ü˜1œi¬Ó2ˆØ×Ñ˜ Õ#r   c                 ó„   — d}| j                  t        t        |t        d«       | j                  t        t        ddd«       y )Nl   ÿÿÿÿÿÿÿÿÿÿÿÿÿ r   )ÚassertRaisesr   r#   r=   ©r8   r%   s     r   Útest_zero_moduluszTestModExp.test_zero_modulusp   s5   € ØBˆØ×ÑÔ*¬I°t¼YÈÔJØ×ÑÔ*¬I°q¸!¸QÕ?r   c                 óš   — t         dz
  }t        |t         dz  t         «      }t        |t         dz  t         «      }| j                  ||«       y )Niÿÿÿé@   )r>   r<   r#   r7   r?   s       r   Útest_larger_exponentzTestModExp.test_larger_exponentu   s@   € Ü˜)Ñ#ˆÜ�tœX r™\¬8Ó4ˆÜ˜4¤¨2¡¬xÓ8ˆØ×Ñ˜ Õ*r   c                 óf   — t         dz	  }| j                  t        t        |t        t         dz
  «       y )Né   r3   )r>   rG   r   r#   r=   rH   s     r   Útest_even_moduluszTestModExp.test_even_modulus{   s'   € Ü˜1‰}ˆØ×ÑÔ*¬I°t¼YÌÐQRÉ
ÕSr   c                 óº  — t        j                  «       j                  t        d«      «      }t	        dd«      D ]   }t        j                  |j                  |«      «      dz  }t        j                  |j                  |«      «      |z  }t        j                  |j                  |«      «      }t        |||«      }t        |||«      }| j                  ||«       Œ¢ y )NÚTestr3   éd   )r   r   ÚupdateÚbÚranger   Ú
from_bytesÚreadr<   r#   r7   )r8   ÚprngÚlengthÚmodulus2r%   Ú	exponent2r@   r/   s           r   Útest_several_lengthszTestModExp.test_several_lengths   s²   € Ü�|‰|‹~×$Ñ$¤Q v£YÓ/ˆÜ˜A˜s“mò 	/ˆFÜ×)Ñ)¨$¯)©)°FÓ*;Ó<¸qÑ@ˆHÜ×%Ñ% d§i¡i°Ó&7Ó8¸8ÑCˆDÜ×*Ñ*¨4¯9©9°VÓ+<Ó=ˆIä˜4 ¨HÓ5ˆHÜ˜t Y°Ó9ˆFØ×Ñ˜V XÕ.ñ	/r   c                 ó¼  — t        t        d«      «      }t        d«      D ]º  }t        d«      D ]ª  }|j                  d«      dz  }|j                  d«      |z  }|j                  |dz  |z   «      }t	        |||«      }t        |||«      }| j                  ||«       |d|dz  |z   z  dz
  z  }t	        |||«      }t        |||«      }| j                  ||«       Œ¬ Œ¼ y )NzTest variable exponenté   é   éð   r3   é   ©r   rT   rU   Úgetrandbitsr<   r#   r7   )	r8   rX   ÚiÚjr'   r%   Úexponentr@   r/   s	            r   Útest_variable_exponentz!TestModExp.test_variable_exponentŠ   sí   € Üœ!Ð4Ó5Ó6ˆÜ�r“ò 	3ˆAÜ˜1“Xò 3�Ø×*Ñ*¨4Ó0°1Ñ4�Ø×'Ñ'¨Ó-°Ñ7�Ø×+Ñ+¨A¨a©C°©EÓ2�ä˜t X¨wÓ7�Ü" 4¨°7Ó;�Ø× Ñ  ¨Ô2à˜Q 1 Q¡3 q¡5™\¨QÑ.Ñ.�ä˜t X¨wÓ7�Ü" 4¨°7Ó;�Ø× Ñ  ¨Õ2ñ3ñ	3r   c                 ó,  — t        t        d«      «      }d}t        d«      D ]p  }|j                  d|z  «      dz  }|j                  d|z  «      |z  }|j                  d|z  «      }t	        |||«      }t        |||«      }| j                  ||«       Œr y )NzTest 63é?   éÐ  ra   r3   rb   ©	r8   rX   rY   Ú_r'   r%   rf   r@   r/   s	            r   Útest_stress_63zTestModExp.test_stress_63œ   óš   € Üœ!˜I›,Ó'ˆØˆÜ�t“ò 	/ˆAØ×'Ñ'¨¨&©Ó1°AÑ5ˆGØ×'Ñ'¨¨&©Ó1°GÑ;ˆDØ×'Ñ'¨¨&©Ó1ˆHä˜4 ¨7Ó3ˆHÜ˜t X¨wÓ7ˆFØ×Ñ˜V XÕ.ñ	/r   c                 ó,  — t        t        d«      «      }d}t        d«      D ]p  }|j                  d|z  «      dz  }|j                  d|z  «      |z  }|j                  d|z  «      }t	        |||«      }t        |||«      }| j                  ||«       Œr y )NzTest 64rK   rj   ra   r3   rb   rk   s	            r   Útest_stress_64zTestModExp.test_stress_64¨   rn   r   c                 ó,  — t        t        d«      «      }d}t        d«      D ]p  }|j                  d|z  «      dz  }|j                  d|z  «      |z  }|j                  d|z  «      }t	        |||«      }t        |||«      }| j                  ||«       Œr y )NzTest 65éA   rj   ra   r3   rb   rk   s	            r   Útest_stress_65zTestModExp.test_stress_65´   rn   r   N)r   r   r   r9   rA   rC   rE   rI   rL   rO   r\   rg   rm   rp   rs   r   r   r   r1   r1   \   s@   „ ò1ò+ò$ò
$ò@ò
+òTò	/ò3ò$
/ò
/ó
/r   r1   c                 ó.   — g }|t        t        «      z  }|S ©N)r   r1   )ÚconfigÚtestss     r   Ú	get_testsrx   Á   s   € Ø€EØ	Œ_œZÓ(Ñ(€EØ€Lr   Ú__main__c                  ó<   — t        j                  t        «       «      S ru   )ÚunittestÚ	TestSuiterx   r   r   r   ú<lambda>r}   È   s   € ”H×&Ñ&¤y£{Ó3€ r   Úsuite)ÚdefaultTest)"Ú__doc__r{   ÚCrypto.SelfTest.st_commonr   ÚCrypto.Util.numberr   r   ÚCrypto.Util.py3compatÚCrypto.Util._raw_apir   r   r	   r
   r   ÚCrypto.Hashr   ÚCrypto.Math.Numbersr   ÚCrypto.Math._IntegerCustomr   ÚCrypto.Random.randomr   r   r$   r   r#   r=   r>   ÚTestCaser1   rx   r   r~   Úmainr   r   r   ú<module>r‹      s–   ðñD 5ã å 5ç ;ä #÷/õ /õ !Ý 'Ý 6å -òô	�zô 	òð0 O€	ð N€ôb/�×"Ñ"ô b/ðJ ó ð ˆzÒÙ3€EØ€H‡M�M˜gÖ&ð r   