
    ,hc                         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     \/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/Crypto/Math/_IntegerCustom.py
from_byteszIntegerCustom.from_bytesA   sG    ("#K0K!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=<== ?dkk95DKK L	q=788>#$<== Madkk9i@DKK ;;)#KK9$KmC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>#$<== Ma677 IYEIYE!),	)n{3{3";/..[) Ce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 -
  ,,A6J%g6c#M c#r   