§
    8·tcD+  ã                   ó>   — d dl mZ ddlmZmZ  G d„ de¦  «        ZdS )é   )ÚIntegerBaseé    )Úlong_to_bytesÚbytes_to_longc                   ód  — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d5d	„Z
ed
„ ¦   «         Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZeZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd6d„Zd6d„Zd„ Zd6d„Zd„ Zd„ Z d„ Z!d „ Z"d!„ Z#d"„ Z$d#„ Z%d$„ Z&d%„ Z'd&„ Z(d'„ Z)d(„ Z*d)„ Z+d*„ Z,d+„ Z-d,„ Z.d-„ Z/d.„ Z0d/„ Z1d0„ Z2d1„ Z3d2„ Z4d3„ Z5e6d4„ ¦   «         Z7dS )7ÚIntegerNativez3A class to model a natural integer (including zero)c                 ó˜   — t          |t          ¦  «        rt          d¦  «        ‚	 |j        | _        d S # t          $ r || _        Y d S w xY w)Nz-A floating point type is not a natural number)Ú
isinstanceÚfloatÚ
ValueErrorÚ_valueÚAttributeError)ÚselfÚvalues     ú@/usr/lib/python3/dist-packages/Cryptodome/Math/_IntegerNative.pyÚ__init__zIntegerNative.__init__'   s^   € Ý�e�UÑ#Ô#ð 	NÝÐLÑMÔMÐMð	 Øœ,ˆDŒKˆKˆKøÝð 	 ð 	 ð 	 ØˆDŒKˆKˆKˆKð	 øøøs   ¦4 ´A	ÁA	c                 ó   — | j         S ©N©r   ©r   s    r   Ú__int__zIntegerNative.__int__0   s
   € ØŒ{Ðó    c                 ó:   — t          t          | ¦  «        ¦  «        S r   )ÚstrÚintr   s    r   Ú__str__zIntegerNative.__str__3   s   € Ý•3�t‘9”9‰~Œ~Ðr   c                 ó&   — dt          | ¦  «        z  S )NzInteger(%s))r   r   s    r   Ú__repr__zIntegerNative.__repr__6   s   € Ø�s 4™yœyÑ(Ð(r   c                 ó*   — t          | j        ¦  «        S r   )Úhexr   r   s    r   Ú__hex__zIntegerNative.__hex__:   ó   € Ý�4”;ÑÔÐr   c                 ó*   — t          | j        ¦  «        S r   ©r   r   r   s    r   Ú	__index__zIntegerNative.__index__>   r"   r   r   c                 ó¼   — | j         dk     rt          d¦  «        ‚t          | j         |¦  «        }t          |¦  «        |cxk    rdk    rn nt          d¦  «        ‚|S )Nr   ú.Conversion only valid for non-negative numberszValue too large to encode)r   r   r   Úlen)r   Ú
block_sizeÚresults      r   Úto_byteszIntegerNative.to_bytesA   si   € ØŒ;˜Š?ˆ?ÝÐMÑNÔNÐNÝ˜tœ{¨JÑ7Ô7ˆÝˆv‰;Œ;˜Ð'Ð'Ò'Ð' aÒ'Ð'Ð'Ð'Ð'ÝÐ8Ñ9Ô9Ð9Øˆr   c                 ó2   —  | t          |¦  «        ¦  «        S r   )r   )ÚclsÚbyte_strings     r   Ú
from_byteszIntegerNative.from_bytesI   s   € àˆs•= Ñ-Ô-Ñ.Ô.Ð.r   c                 ó:   — |€dS | j         t          |¦  «        k    S )NF©r   r   ©r   Úterms     r   Ú__eq__zIntegerNative.__eq__N   s   € Øˆ<Ø�5ØŒ{�c $™iœiÒ'Ð'r   c                 ó.   — |                       |¦  «         S r   )r4   r2   s     r   Ú__ne__zIntegerNative.__ne__S   ó   € Ø—;’;˜tÑ$Ô$Ð$Ð$r   c                 ó2   — | j         t          |¦  «        k     S r   r1   r2   s     r   Ú__lt__zIntegerNative.__lt__V   s   € ØŒ{�S ™YœYÒ&Ð&r   c                 óV   — |                       |¦  «        p|                      |¦  «        S r   )r9   r4   r2   s     r   Ú__le__zIntegerNative.__le__Y   s%   € Ø�{Š{˜4Ñ Ô Ð5 D§K¢K°Ñ$5Ô$5Ð5r   c                 ó.   — |                       |¦  «         S r   )r;   r2   s     r   Ú__gt__zIntegerNative.__gt__\   r7   r   c                 ó.   — |                       |¦  «         S r   )r9   r2   s     r   Ú__ge__zIntegerNative.__ge___   r7   r   c                 ó   — | j         dk    S ©Nr   r   r   s    r   Ú__nonzero__zIntegerNative.__nonzero__b   s   € ØŒ{˜aÒÐr   c                 ó   — | j         dk     S rA   r   r   s    r   Úis_negativezIntegerNative.is_negativef   s   € ØŒ{˜QŠÐr   c                 ó    — 	 |                       | j        t          |¦  «        z   ¦  «        S # t          t          t
          f$ r
 t          cY S w xY wr   ©Ú	__class__r   r   r   r   Ú	TypeErrorÚNotImplementedr2   s     r   Ú__add__zIntegerNative.__add__j   óT   € ð	"Ø—>’> $¤+µ°D±	´	Ñ"9Ñ:Ô:Ð:øÝ�N­IÐ6ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøøó   ‚), ¬AÁAc                 ó    — 	 |                       | j        t          |¦  «        z
  ¦  «        S # t          t          t
          f$ r
 t          cY S w xY wr   rF   r2   s     r   Ú__sub__zIntegerNative.__sub__p   rK   rL   c                 ó    — 	 |                       | j        t          |¦  «        z  ¦  «        S # t          t          t
          f$ r
 t          cY S w xY wr   rF   )r   Úfactors     r   Ú__mul__zIntegerNative.__mul__v   sT   € ð	"Ø—>’> $¤+µ°F±´Ñ";Ñ<Ô<Ð<øÝ�N­IÐ6ð 	"ð 	"ð 	"Ý!Ð!Ð!Ð!ð	"øøørL   c                 óV   — |                       | j        t          |¦  «        z  ¦  «        S r   ©rG   r   r   )r   Údivisors     r   Ú__floordiv__zIntegerNative.__floordiv__|   s!   € Ø�~Š~˜dœk­S°©\¬\Ñ9Ñ:Ô:Ð:r   c                 ó„   — t          |¦  «        }|dk     rt          d¦  «        ‚|                      | j        |z  ¦  «        S )Nr   úModulus must be positive)r   r   rG   r   )r   rT   Údivisor_values      r   Ú__mod__zIntegerNative.__mod__   s@   € Ý˜G™œˆØ˜1ÒÐÝÐ7Ñ8Ô8Ð8Ø�~Š~˜dœk¨MÑ9Ñ:Ô:Ð:r   Nc                 ó   — t          |¦  «        }|dk     rt          d¦  «        ‚|�:t          |¦  «        }|dk     rt          d¦  «        ‚|dk    rt          d¦  «        ‚nd }t          | j        ||¦  «        | _        | S )Nr   zExponent must not be negativerW   úModulus cannot be zero)r   r   ÚZeroDivisionErrorÚpowr   )r   ÚexponentÚmodulusÚ	exp_valueÚ	mod_values        r   Úinplace_powzIntegerNative.inplace_pow…   sŒ   € Ý˜‘M”Mˆ	Ø�qŠ=ˆ=ÝÐ<Ñ=Ô=Ð=àÐÝ˜G™œˆIØ˜1Š}ˆ}Ý Ð!;Ñ<Ô<Ð<Ø˜AŠ~ˆ~Ý'Ð(@ÑAÔAÐAð ð ˆIÝ˜$œ+ y°)Ñ<Ô<ˆŒØˆr   c                 óX   — |                       | ¦  «        }|                     ||¦  «        S r   )rG   rb   )r   r^   r_   r*   s       r   Ú__pow__zIntegerNative.__pow__•   s)   € Ø—’ Ñ%Ô%ˆØ×!Ò! (¨GÑ4Ô4Ð4r   c                 ó*   — t          | j        ¦  «        S r   )Úabsr   r   s    r   Ú__abs__zIntegerNative.__abs__™   r"   r   c                 ó  — | j         }|€;|dk     rt          d¦  «        ‚|}|dz   dz  }||k     r|}|||z  z   dz  }||k     °|}n.|dk    rt          d¦  «        ‚|                      | |z  |¦  «        }|                      |¦  «        S )Nr   zSquare root of negative valuer   é   rW   )r   r   Ú_tonelli_shanksrG   )r   r_   r   ÚxÚyr*   s         r   ÚsqrtzIntegerNative.sqrtœ   s±   € à”ˆØˆ?Ø�qŠyˆyÝ Ð!@ÑAÔAÐAð ˆAØ�Q‘˜1‘ˆAØ�a’%�%Ø�Ø˜ !™‘^¨Ñ)�ð �a’%�%ð ˆFˆFà˜!Š|ˆ|Ý Ð!;Ñ<Ô<Ð<Ø×)Ò)¨$°©.¸'ÑBÔBˆFà�~Š~˜fÑ%Ô%Ð%r   c                 ó@   — | xj         t          |¦  «        z  c_         | S r   r1   r2   s     r   Ú__iadd__zIntegerNative.__iadd__±   ó   € ØˆŒ•s˜4‘y”yÑ ˆŒØˆr   c                 ó@   — | xj         t          |¦  «        z  c_         | S r   r1   r2   s     r   Ú__isub__zIntegerNative.__isub__µ   rp   r   c                 ó@   — | xj         t          |¦  «        z  c_         | S r   r1   r2   s     r   Ú__imul__zIntegerNative.__imul__¹   rp   r   c                 ó˜   — t          |¦  «        }|dk    rt          d¦  «        ‚|dk     rt          d¦  «        ‚| xj        |z  c_        | S )Nr   zDivision by zerorW   )r   r\   r   r   )r   r3   r_   s      r   Ú__imod__zIntegerNative.__imod__½   sR   € Ý�d‘)”)ˆØ�aŠ<ˆ<Ý#Ð$6Ñ7Ô7Ð7Ø�QŠ;ˆ;ÝÐ7Ñ8Ô8Ð8ØˆŒ�wÑˆŒØˆr   c                 óV   — |                       | j        t          |¦  «        z  ¦  «        S r   rS   r2   s     r   Ú__and__zIntegerNative.__and__Ç   ó!   € Ø�~Š~˜dœk­C°©I¬IÑ5Ñ6Ô6Ð6r   c                 óV   — |                       | j        t          |¦  «        z  ¦  «        S r   rS   r2   s     r   Ú__or__zIntegerNative.__or__Ê   ry   r   c                 ó–   — 	 |                       | j        t          |¦  «        z	  ¦  «        S # t          $ r | j        dk    rY dS Y dS w xY w©Nr   éÿÿÿÿ)rG   r   r   ÚOverflowError©r   Úposs     r   Ú
__rshift__zIntegerNative.__rshift__Í   s\   € ð	Ø—>’> $¤+µ°S±´Ñ"9Ñ:Ô:Ð:øÝð 	ð 	ð 	ØŒ{˜aÒÐØ�q�qà�r�rð		øøøs   ‚), ¬AÁAc                 ó‚   — 	 | xj         t          |¦  «        z  c_         n# t          $ r | j         dk    rY dS Y dS w xY w| S r}   )r   r   r   r€   s     r   Ú__irshift__zIntegerNative.__irshift__Ö   s\   € ð	ØˆKŒK�C ™HœHÑ$ˆKŒKˆKøÝð 	ð 	ð 	ØŒ{˜aÒÐØ�q�qà�r�rð		øøøð
 ˆs   ‚   <»<c                 ó’   — 	 |                       | j        t          |¦  «        z  ¦  «        S # t          $ r t	          d¦  «        ‚w xY w©NzIncorrect shift count)rG   r   r   r   r   r€   s     r   Ú
__lshift__zIntegerNative.__lshift__à   sP   € ð	6Ø—>’> $¤+µ°S±´Ñ"9Ñ:Ô:Ð:øÝð 	6ð 	6ð 	6ÝÐ4Ñ5Ô5Ð5ð	6øøøs	   ‚), ¬Ac                 ó~   — 	 | xj         t          |¦  «        z  c_         n# t          $ r t          d¦  «        ‚w xY w| S r†   )r   r   r   r   r€   s     r   Ú__ilshift__zIntegerNative.__ilshift__æ   sN   € ð	6ØˆKŒK�C ™HœHÑ$ˆKŒKˆKøÝð 	6ð 	6ð 	6ÝÐ4Ñ5Ô5Ð5ð	6øøøàˆs   ‚   :c                 ó"  — | j         dk     rt          d¦  «        ‚	 	 | j         |j         z	  dz  }|j         dk     rt          d¦  «        ‚n2# t          $ r% | j         |z	  dz  }|dk     rt          d¦  «        ‚Y nw xY wn# t          $ r d}Y nw xY w|S )Nr   z)no bit representation for negative valuesr   znegative bit count)r   r   r   r   )r   Únr*   s      r   Úget_bitzIntegerNative.get_bití   sÏ   € ØŒ;˜Š?ˆ?ÝÐHÑIÔIÐIð
	ð;Øœ+¨¬Ñ1°QÑ6�Ø”8˜a’<�<Ý$Ð%9Ñ:Ô:Ð:ð  øå!ð ;ð ;ð ;Øœ+¨Ñ*¨aÑ/�Ø�q’5�5Ý$Ð%9Ñ:Ô:Ð:ð �5ð;øøøøøõ ð 	ð 	ð 	ØˆFˆFˆFð	øøøàˆs/   �,A
 Á	A= Á
,A9Á6A= Á8A9Á9A= Á=BÂBc                 ó   — | j         dz  dk    S )Nr   r   r   s    r   Úis_oddzIntegerNative.is_oddþ   ó   € Ø”˜a‘ AÒ%Ð%r   c                 ó   — | j         dz  dk    S )Nr   r   r   r   s    r   Úis_evenzIntegerNative.is_even  r�   r   c                 ó‚   — | j         dk     rt          d¦  «        ‚| j         dk    rdS d}| j         }|r|dz  }|dz  }|°|S )Nr   r'   r   )r   r   )r   Úbit_sizeÚtmps      r   Úsize_in_bitszIntegerNative.size_in_bits  se   € àŒ;˜Š?ˆ?ÝÐMÑNÔNÐNàŒ;˜!ÒÐØ�1àˆØŒkˆØð 	Ø�A‰IˆCØ˜‰MˆHð ð 	ð ˆr   c                 ó<   — |                       ¦   «         dz
  dz  dz   S )Nr   é   )r•   r   s    r   Úsize_in_byteszIntegerNative.size_in_bytes  s#   € Ø×!Ò!Ñ#Ô# aÑ'¨AÑ-°Ñ1Ð1r   c                 óÂ   — | j         dk     rdS | j         dv rdS | j         dz  }|dz  }|| j         k    r || j         z   d|z  z  }|dz  }|| j         k    ° | j         |dz  k    S )Nr   F)r   r   Tri   r   )r   rk   Úsquare_xs      r   Úis_perfect_squarezIntegerNative.is_perfect_square  s†   € ØŒ;˜Š?ˆ?Ø�5ØŒ;˜&Ð Ð Ø�4àŒK˜1ÑˆØ˜‘6ˆà˜œÒ$Ð$Ø˜DœKÑ'¨Q°©UÑ3ˆAØ˜A‘vˆHð ˜œÒ$Ð$ð Œ{˜a 1™fÒ$Ð$r   c                 óZ   — | j         t          |¦  «        z  dk    rt          d¦  «        ‚d S )Nr   zValue is composite)r   r   r   )r   Úsmall_primes     r   Úfail_if_divisible_byz"IntegerNative.fail_if_divisible_by&  s3   € ØŒK�#˜kÑ*Ô*Ñ*¨qÒ0Ð0ÝÐ1Ñ2Ô2Ð2ð 1Ð0r   c                 ó`   — | xj         t          |¦  «        t          |¦  «        z  z  c_         | S r   r1   )r   ÚaÚbs      r   Úmultiply_accumulatez!IntegerNative.multiply_accumulate*  s'   € ØˆŒ•s˜1‘v”v¥ A¡¤‘Ñ&ˆŒØˆr   c                 ó.   — t          |¦  «        | _        d S r   r$   )r   Úsources     r   ÚsetzIntegerNative.set.  s   € Ý˜&‘k”kˆŒˆˆr   c                 óX  — t          |¦  «        }|dk    rt          d¦  «        ‚|dk     rt          d¦  «        ‚| j        |}}d\  }}|dk    r||z  }||||z  z
  }}||||z  z
  }}|dk    °|dk    rt          dt	          |¦  «        z   ¦  «        ‚|dk     r||z  }|dk     °|| _        | S )Nr   r[   zModulus cannot be negative)r   r   r   z No inverse value can be computed)r   r\   r   r   r   )r   r_   Úr_pÚr_nÚs_pÚs_nÚqs          r   Úinplace_inversezIntegerNative.inplace_inverse1  sÞ   € Ý�g‘,”,ˆØ�aŠ<ˆ<Ý#Ð$<Ñ=Ô=Ð=Ø�QŠ;ˆ;ÝÐ9Ñ:Ô:Ð:Ø”; ˆSˆØ‰ˆˆSØ�AŠgˆgØ�s‘
ˆAØ˜C ! c¡'™M�ˆCØ˜C ! c¡'™M�ˆCð �AŠgˆgð �!Š8ˆ8ÝÐ?Å#ÀcÁ(Ä(ÑJÑKÔKÐKØ�AŠgˆgØ�7‰NˆCð �AŠgˆgàˆŒØˆr   c                 óZ   — |                       | ¦  «        }|                     |¦  «         |S r   )rG   r¬   )r   r_   r*   s      r   ÚinversezIntegerNative.inverseD  s,   € Ø—’ Ñ%Ô%ˆØ×Ò˜wÑ'Ô'Ð'Øˆr   c                 óÂ   — t          | j        ¦  «        t          t          |¦  «        ¦  «        }}|dk    r||z  }||||z  z
  }}|dk    °|                      |¦  «        S rA   )rf   r   r   rG   )r   r3   r§   r¨   r«   s        r   ÚgcdzIntegerNative.gcdI  sc   € Ý�t”{Ñ#Ô#¥S­¨T©¬¡^¤^ˆSˆØ�AŠgˆgØ�s‘
ˆAØ˜C ! c¡'™M�ˆCð �AŠgˆgð �~Š~˜cÑ"Ô"Ð"r   c                 óö   — t          |¦  «        }| j        dk    s|dk    r|                      d¦  «        S |                      t          | j        |z  |                      |¦  «        j        z  ¦  «        ¦  «        S rA   )r   r   rG   rf   r°   r2   s     r   ÚlcmzIntegerNative.lcmP  sg   € Ý�4‰yŒyˆØŒ;˜!ÒÐ˜t qšy˜yØ—>’> !Ñ$Ô$Ð$Ø�~Š~�c 4¤;°Ñ#5¸$¿(º(À4¹.¼.Ô:OÑ"OÑPÔPÑQÔQÐQr   c                 ó®  — t          | ¦  «        } t          |¦  «        }|dk    rt          d¦  «        ‚|dz  dk    rt          d¦  «        ‚| |z  } | dk    s|dk    rdS | dk    rdS d}| }|dz  dk    r|dz  }|dz  }|dz  dk    °|dz  dk    rd}n|dz  dv rd}nd}|dz  d	k    r|dz  d	k    r| }||z  }|t                               ||¦  «        z  S )
Nr   zn must be a positive integerr   z$n must be even for the Jacobi symbolr—   )r   é   r~   é   é   )r   r   r   Újacobi_symbol)r    r‹   ÚeÚa1ÚsÚn1s         r   r·   zIntegerNative.jacobi_symbolV  s&  € å�‰FŒFˆÝ�‰FŒFˆà�Š6ˆ6ÝÐ;Ñ<Ô<Ð<à�‰E�aŠ<ˆ<ÝÐCÑDÔDÐDð �‰Eˆà�Š6ˆ6�Q˜!’V�VØ�1à�Š6ˆ6Ø�1àˆØˆØ�A‰v˜!ŠmˆmØ�1‰HˆBØ�‰FˆAð �A‰v˜!Šmˆmð �‰E�aŠ<ˆ<ØˆAˆAØ�‰U�fˆ_ˆ_ØˆAˆAàˆAàˆq‰5�AŠ:ˆ:˜"˜q™& Aš+˜+Ø�ˆAà�‰Vˆà•=×.Ò.¨r°2Ñ6Ô6Ñ6Ð6r   )r   r   )8Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r!   r%   r+   Úclassmethodr/   r4   r6   r9   r;   r=   r?   rB   Ú__bool__rD   rJ   rN   rQ   rU   rY   rb   rd   rg   rm   ro   rr   rt   rv   rx   r{   r‚   r„   r‡   r‰   rŒ   rŽ   r‘   r•   r˜   r›   rž   r¢   r¥   r¬   r®   r°   r²   Ústaticmethodr·   © r   r   r   r   $   s-  € € € € € Ø=Ð=ð ð  ð  ðð ð ðð ð ð)ð )ð )ð ð  ð  ð ð  ð  ðð ð ð ð ð/ð /ñ „[ð/ð(ð (ð (ð
%ð %ð %ð'ð 'ð 'ð6ð 6ð 6ð%ð %ð %ð%ð %ð %ð ð  ð  à€Hðð ð ð"ð "ð "ð"ð "ð "ð"ð "ð "ð;ð ;ð ;ð;ð ;ð ;ðð ð ð ð 5ð 5ð 5ð 5ð ð  ð  ð&ð &ð &ð &ð*ð ð ðð ð ðð ð ðð ð ð7ð 7ð 7ð7ð 7ð 7ðð ð ðð ð ð6ð 6ð 6ðð ð ðð ð ð"&ð &ð &ð&ð &ð &ðð ð ð 2ð 2ð 2ð%ð %ð %ð3ð 3ð 3ðð ð ð"ð "ð "ðð ð ð&ð ð ð
#ð #ð #ðRð Rð Rð ð%7ð %7ñ „\ð%7ð %7ð %7r   r   N)Ú_IntegerBaser   ÚCryptodome.Util.numberr   r   r   rÃ   r   r   ú<module>rÆ      so   ðð> &Ð %Ð %Ð %Ð %Ð %à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?ðX7ð X7ð X7ð X7ð X7�Kñ X7ô X7ð X7ð X7ð X7r   