§
    8·tc°  ã                   ó�   — 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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._modexpÚcustom)ÚlibraryÚapic                   ó,   — e Zd Zed„ ¦   «         Zdd„ZdS )ÚIntegerCustomc                 ó:   — t          t          | ¦  «        ¦  «        S ©N)r   r   )Úbyte_strings    ú@/usr/lib/python3/dist-packages/Cryptodome/Math/_IntegerCustom.pyÚ
from_byteszIntegerCustom.from_bytes;   s   € å�]¨;Ñ7Ô7Ñ8Ô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           
                    |	|||t          |¦  «        t          t          d¦  «        ¦  «        ¦  «        }
|
rt          d|
z  ¦  «        ‚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)ÚintÚ
ValueErrorÚ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_pow?   s§  € Ý˜‘M”Mˆ	Ø�qŠ=ˆ=ÝÐ<Ñ=Ô=Ð=ð ˆ?Ý˜dœk¨9Ñ5Ô5ˆDŒKØˆKõ ˜‘L”Lˆ	Ø�qŠ=ˆ=ÝÐ7Ñ8Ô8Ð8Ø˜Š>ˆ>Ý#Ð$<Ñ=Ô=Ð=ð ˜‰M˜aÒÐÝ˜dœk¨9°iÑ@Ô@ˆDŒKØˆKð Œ;˜)Ò#Ð#ØˆKŒK˜9Ñ$ˆKŒKå•m¥C¨¬°YÀ	Ñ$JÔ$JÑKÔKÑLÔLˆå˜tœ{¨GÑ4Ô4ˆÝ˜i¨Ñ1Ô1ˆÝ! )¨WÑ5Ô5ˆ	å" 7Ñ+Ô+ˆå×)Ò)ØØØØÝ˜WÑ%Ô%Ý¥¨B¡¤Ñ0Ô0ñô ˆð ð 	HÝÐ>ÀÑFÑGÔGÐGå�~¨cÑ2Ô2Ñ3Ô3ˆØˆŒØˆr   r   )Ú__name__Ú
__module__Ú__qualname__Ústaticmethodr   r0   © r   r   r   r   9   sA   € € € € € àð9ð 9ñ „\ð9ð0ð 0ð 0ð 0ð 0ð 0r   r   N)Ú_IntegerNativer   ÚCryptodome.Util.numberr   r   ÚCryptodome.Util._raw_apir   r   r	   r
   r   r   ÚCryptodome.Random.randomr   Úc_defsr"   Úimplementationr   r5   r   r   ú<module>r<      sò   ðð> *Ð )Ð )Ð )Ð )Ð )à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ð9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 1Ð 0Ð 0Ð 0Ð 0Ð 0ð
€ð ,Ð+Ð,EÀvÑNÔN€Ø%¨gÐ6Ð6€ð6ð 6ð 6ð 6ð 6�Mñ 6ô 6ð 6ð 6ð 6r   