Ë
    íU.j  ã                   ó‚   — d dl mZ ddlmZmZ ddlmZmZmZm	Z	m
Z
mZ ddlmZ dZ ede«      Zde	d	œZ G d
„ de«      Zy)é   )ÚIntegerNativeé    )Úlong_to_bytesÚbytes_to_long)Úload_pycryptodome_raw_libÚcreate_string_bufferÚget_raw_bufferÚbackendÚc_size_tÚc_ulonglong)Úgetrandbitsaž  
int monty_pow(uint8_t       *out,
              const uint8_t *base,
              const uint8_t *exp,
              const uint8_t *modulus,
              size_t        len,
              uint64_t      seed);

int monty_multiply(uint8_t       *out,
                   const uint8_t *term1,
                   const uint8_t *term2,
                   const uint8_t *modulus,
                   size_t        len);
zCrypto.Math._modexpÚcustom)ÚlibraryÚapic                   ó6   — e Zd Zedd„«       Zdd„Zed„ «       Zy)ÚIntegerCustomc                 óŽ   — |dk(  rn,|dk(  rt        | «      } | j                  «        nt        d«      ‚t        t	        | «      «      S )NÚbigÚlittlezIncorrect byteorder)Ú	bytearrayÚreverseÚ
ValueErrorr   r   )Úbyte_stringÚ	byteorders     ú\C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\Crypto/Math/_IntegerCustom.pyÚ
from_byteszIntegerCustom.from_bytesA   sG   € à˜ÒØØ˜(Ò"Ü# KÓ0ˆKØ×ÑÕ!äÐ2Ó3Ð3Üœ]¨;Ó7Ó8Ð8ó    Nc                 óè  — t        |«      }|dk  rt        d«      ‚|€t        | j                  |«      | _        | S t        |«      }|dk  rt        d«      ‚|dk(  rt	        d«      ‚|dz  dk(  rt        | j                  ||«      | _        | S | j                  |k\  r| xj                  |z  c_        t        t        t        | j                  ||«      «      «      }t        | j                  |«      }t        ||«      }t        ||«      }t        |«      }	t        j                  |	|||t        |«      t        t        d«      «      «      }
|
rt        d|
z  «      ‚t        t        |	«      «      }|| _        | S )Nr   zExponent must not be negativeúModulus must be positiveúModulus cannot be zeror   é@   zmonty_pow failed with error: %d)Úintr   ÚpowÚ_valueÚZeroDivisionErrorÚlenr   Úmaxr   Ú_raw_montgomeryÚ	monty_powr   r   r   r   r	   )ÚselfÚexponentÚmodulusÚ	exp_valueÚ	mod_valueÚmax_lenÚbase_bÚexp_bÚ	modulus_bÚoutÚerrorÚresults               r   Úinplace_powzIntegerCustom.inplace_powL   s_  € Ü˜“Mˆ	Ø�qŠ=ÜÐ<Ó=Ð=ð ˆ?Ü˜dŸk™k¨9Ó5ˆDŒKØˆKô ˜“Lˆ	Ø�qŠ=ÜÐ7Ó8Ð8Ø˜Š>Ü#Ð$<Ó=Ð=ð ˜‰M˜aÒÜ˜dŸk™k¨9°iÓ@ˆDŒKØˆKð �;‰;˜)Ò#Ø�KŠK˜9Ñ$�Kä”m¤C¨¯©°YÀ	Ó$JÓKÓLˆä˜tŸ{™{¨GÓ4ˆÜ˜i¨Ó1ˆÜ! )¨WÓ5ˆ	ä" 7Ó+ˆä×)Ñ)ØØØØÜ˜WÓ%Ü¤¨B£Ó0óˆñ ÜÐ>ÀÑFÓGÐGäœ~¨cÓ2Ó3ˆØˆŒØˆr   c           	      ó¦  — t        |«      }|dk  rt        d«      ‚|dk(  rt        d«      ‚|dz  dk(  rt        d«      ‚| |k\  s| dk  r| |z  } ||k\  s|dk  r||z  }t        |«      }t	        |«      }t        | |«      }t        ||«      }t        |«      }t        j                  ||||t        |«      «      }	|	rt        d|	z  «      ‚t        |«      S )Nr   r   r    r   zOdd modulus is requiredz$monty_multiply failed with error: %d)
r"   r   r%   r   r&   r   r(   Úmonty_multiplyr   r	   )
Úterm1Úterm2r,   r.   r2   Únumbers_lenÚterm1_bÚterm2_br3   r4   s
             r   Ú_mult_modulo_bytesz IntegerCustom._mult_modulo_bytes~   sù   € ô ˜“Lˆ	Ø�qŠ=ÜÐ7Ó8Ð8Ø˜Š>Ü#Ð$<Ó=Ð=ð ˜‰M˜aÒÜÐ6Ó7Ð7ð �IÒ ¨¢Ø�YÑˆEØ�IÒ ¨¢Ø�YÑˆEä! )Ó,ˆ	Ü˜)“nˆÜ  {Ó3ˆÜ  {Ó3ˆÜ" ;Ó/ˆä×.Ñ.ØØØØÜ˜[Ó)óˆñ ÜÐCÀeÑKÓLÐLä˜cÓ"Ð"r   )r   )N)Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r6   r>   © r   r   r   r   ?   s.   „ àò9ó ð9ó0ðd ñ##ó ñ##r   r   N)Ú_IntegerNativer   ÚCrypto.Util.numberr   r   ÚCrypto.Util._raw_apir   r   r	   r
   r   r   ÚCrypto.Random.randomr   Úc_defsr(   Úimplementationr   rC   r   r   Ú<module>rJ      sJ   ðõ> *ç ;÷9÷ 9õ -ð
€ñ  ,Ð,AÀ6ÓJ€Ø%¨gÑ6€ôc#�Mõ c#r   