a
    !f                     @   st   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 deZdS )   )IntegerNative    )long_to_bytesbytes_to_long)load_pycryptodome_raw_libcreate_string_bufferget_raw_bufferbackendc_size_tc_ulonglong)getrandbitsz
int monty_pow(const uint8_t *base,
               const uint8_t *exp,
               const uint8_t *modulus,
               uint8_t       *out,
               size_t len,
               uint64_t seed);
zCryptodome.Math._modexpZcustom)libraryapic                   @   s$   e Zd ZedddZdddZdS )	IntegerCustombigc                 C   s8   |dkr
n"|dkr$t | } |   ntdtt| S )Nr   littlezIncorrect byteorder)	bytearrayreverse
ValueErrorr   r   )Zbyte_string	byteorder r   _/var/www/html/python-backend/venv/lib/python3.9/site-packages/Cryptodome/Math/_IntegerCustom.py
from_bytes;   s    
zIntegerCustom.from_bytesNc              
   C   s  t |}|dk rtd|d u r2t| j|| _| S t |}|dk rJtd|dkrZtd|d@ dkrzt| j||| _| S | j|kr|  j|;  _ttt| j||}t| j|}t||}t||}t|}	t	
|	|||t|ttd}
|
rtd|
 tt|	}|| _| S )Nr   zExponent must not be negativezModulus must be positivezModulus cannot be zeror   @   zmonty_pow failed with error: %d)intr   pow_valueZeroDivisionErrorlenr   maxr   _raw_montgomeryZ	monty_powr
   r   r   r   r   )selfexponentmodulusZ	exp_valueZ	mod_valuemax_lenZbase_bZexp_bZ	modulus_bouterrorresultr   r   r   inplace_powF   sD    



	zIntegerCustom.inplace_pow)r   )N)__name__
__module____qualname__staticmethodr   r(   r   r   r   r   r   9   s   
r   N)Z_IntegerNativer   ZCryptodome.Util.numberr   r   ZCryptodome.Util._raw_apir   r   r   r	   r
   r   ZCryptodome.Random.randomr   Zc_defsr    implementationr   r   r   r   r   <module>   s    


