o
    e  ã                   @   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Crypto.Math._modexpZcustom)Z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   úJD:\Projects\ConvertPro\env\Lib\site-packages\Crypto/Math/_IntegerCustom.pyÚ
from_bytes;   s   
zIntegerCustom.from_bytesNc              
   C   s  t |ƒ}|dk rtdƒ‚|d u rt| j|ƒ| _| S t |ƒ}|dk r%tdƒ‚|dkr-tdƒ‚|d@ dkr=t| j||ƒ| _| S | j|krI|  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Crypto.Util.numberr   r   ZCrypto.Util._raw_apir   r   r   r	   r
   r   ZCrypto.Random.randomr   Zc_defsr   Úimplementationr   r   r   r   r   Ú<module>   s    


