U +Mb@stddlmZddlmZmZddlmZmZmZm Z m Z m Z ddl m Z dZedeZde d ZGd d d eZd S) ) IntegerNative) long_to_bytes bytes_to_long)load_pycryptodome_raw_libcreate_string_bufferget_raw_bufferbackendc_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); zCrypto.Math._modexpZcustom)Zlibraryapic@s"eZdZeddZdddZdS) IntegerCustomcCs tt|S)N)rr)Z byte_stringrA/tmp/pip-target-t616c12r/lib/python/Crypto/Math/_IntegerCustom.py from_bytes;szIntegerCustom.from_bytesNc Cst|}|dkrtd|dkr2t|j||_|St|}|dkrJtd|dkrZtd|d@dkrzt|j|||_|S|j|kr|j|;_ttt|j||}t|j|}t||}t||}t|} t | |||t |t t d} | rtd| tt| } | |_|S)NrzExponent must not be negativezModulus must be positivezModulus cannot be zeror@zmonty_pow failed with error: %d)int ValueErrorpow_valueZeroDivisionErrorlenrmaxr_raw_montgomeryZ monty_powr r r rr) selfexponentmodulusZ exp_valueZ mod_valuemax_lenZbase_bZexp_bZ modulus_bouterrorresultrrr inplace_pow?sD         zIntegerCustom.inplace_pow)N)__name__ __module__ __qualname__ staticmethodrr"rrrrr9s rN)Z_IntegerNativerZCrypto.Util.numberrrZCrypto.Util._raw_apirrrr r r ZCrypto.Random.randomr Zc_defsrimplementationrrrrrs