§
    8·tc~  ã                   óÂ   — g d ¢Z ddlmZ ddlmZ  G d„ de¦  «        Z e¦   «         Zej        Zej	        Z	ej
        Z
ej        Zej        Zej        ZddlmZmZmZmZ dS ))ÚStrongRandomÚgetrandbitsÚ	randrangeÚrandintÚchoiceÚshuffleÚsampleé    )ÚRandom)Úis_native_intc                   ó:   — e Zd Zd	d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )
r   Nc                 óx   — |€|€	d | _         d S |�|€	|| _         d S |€|�|j        | _         d S t          d¦  «        ‚)Nz(Cannot specify both 'rng' and 'randfunc')Ú	_randfuncÚreadÚ
ValueError)ÚselfÚrngÚrandfuncs      ú:/usr/lib/python3/dist-packages/Cryptodome/Random/random.pyÚ__init__zStrongRandom.__init__    sR   € ØÐ  Ø!ˆDŒNˆNˆNØÐ! c kØ%ˆDŒNˆNˆNØÐ # /Ø œXˆDŒNˆNˆNåÐGÑHÔHÐHó    c           	      óÀ   — | j         €t          j        ¦   «         j        | _         d|z  dz
  }|t	          |                       t          |d¦  «        ¦  «        ¦  «        z  S )z%Return an integer with k random bits.Né   é   )r   r
   Únewr   Úbytes_to_longÚceil_div)r   ÚkÚmasks      r   r   zStrongRandom.getrandbits*   sP   € ð Œ>Ð!Ý#œZ™\œ\Ô.ˆDŒNØ�Q‘˜!‰|ˆØ•m D§N¢Nµ8¸A¸q±>´>Ñ$BÔ$BÑCÔCÑCÐCr   c           	      ój  — t          |¦  «        dk    r|\  }}}nWt          |¦  «        dk    r|\  }}d}n<t          |¦  «        dk    r	|\  }d}d}n t          dt          |¦  «        fz  ¦  «        ‚t          |¦  «        rt          |¦  «        rt          |¦  «        st          d¦  «        ‚|dk    rt          d¦  «        ‚t	          ||z
  |¦  «        }|dk     rd}|dk     rt          d|›d	|›d	|›d
�¦  «        ‚|}||k    r(|                      t          |¦  «        ¦  «        }||k    °(|||z  z   S )zkrandrange([start,] stop[, step]):
        Return a randomly-selected element from range(start, stop, step).é   é   r   r	   z.randrange expected at most 3 arguments, got %dz$randrange requires integer argumentsz(randrange step argument must not be zerozempty range for randrange(z, ú))ÚlenÚ	TypeErrorr   r   r   r   Úsize)r   ÚargsÚstartÚstopÚstepÚnum_choicesÚrs          r   r   zStrongRandom.randrange2   sv  € õ ˆt‰9Œ9˜Š>ˆ>Ø"&ÑˆU�D˜$˜$Ý�‰YŒY˜!Š^ˆ^Ø ‰MˆU�DØˆDˆDÝ�‰YŒY˜!Š^ˆ^Ø‰GˆTØˆEØˆDˆDåÐLÕPSÐTXÑPYÔPYÈ|Ñ[Ñ\Ô\Ð\Ý˜eÑ$Ô$ð 	D­M¸$Ñ,?Ô,?ð 	DÝ˜dÑ#Ô#ð	DåÐBÑCÔCÐCØ�1Š9ˆ9ÝÐGÑHÔHÐHå˜t e™|¨TÑ2Ô2ˆØ˜Š?ˆ?ØˆKØ˜Š?ˆ?Ý�*ÈÈÈÈtÈtÈtÐUYÐUYÐUYÐZÑ[Ô[Ð[ð ˆØ�;ÒÐØ× Ò ¥ kÑ!2Ô!2Ñ3Ô3ˆAð �;ÒÐð ˜˜q™Ñ!Ð!r   c                 ó´   — t          |¦  «        rt          |¦  «        st          d¦  «        ‚|                      ||dz   ¦  «        }||cxk    r|k    sn J ‚|S )z0Return a random integer N such that a <= N <= b.z"randint requires integer argumentsr   )r   r$   r   )r   ÚaÚbÚNs       r   r   zStrongRandom.randintS   si   € å˜QÑÔð 	B¥}°QÑ'7Ô'7ð 	BÝÐ@ÑAÔAÐAØ�NŠN˜1˜a ™cÑ"Ô"ˆØ�Aˆ{ˆ{Š{ˆ{˜Š{ˆ{ˆ{ˆ{ˆ{ˆ{Øˆr   c                 ó–   — t          |¦  «        dk    rt          d¦  «        ‚||                      t          |¦  «        ¦  «                 S )zrReturn a random element from a (non-empty) sequence.

        If the seqence is empty, raises IndexError.
        r	   zempty sequence)r#   Ú
IndexErrorr   )r   Úseqs     r   r   zStrongRandom.choice[   s?   € õ
 ˆs‰8Œ8�qŠ=ˆ=ÝÐ-Ñ.Ô.Ð.Ø�4—>’>¥# c¡(¤(Ñ+Ô+Ô,Ð,r   c                 ó®   — t          t          |¦  «        dz
  dd¦  «        D ]2}|                      d|dz   ¦  «        }||         ||         c||<   ||<   Œ3dS )zShuffle the sequence in place.r   r	   éÿÿÿÿN)Úranger#   r   )r   ÚxÚiÚjs       r   r   zStrongRandom.shuffled   sg   € õ •s˜1‘v”v˜a‘x  BÑ'Ô'ð 	$ð 	$ˆAØ—’˜q ! A¡#Ñ&Ô&ˆAØ˜1œ˜q œtˆJˆAˆa‰D�!�A‘$�$ð	$ð 	$r   c                 ó   — t          |¦  «        }||k    rt          d¦  «        ‚g }i }t          |¦  «        D ]E}d}|�||v r|                      |¦  «        }|®||v °|                     ||         ¦  «         d||<   ŒF|S )zNReturn a k-length list of unique elements chosen from the population sequence.zsample larger than populationNr   )r#   r   r5   r   Úappend)r   Ú
populationr   r*   ÚretvalÚselectedr7   r+   s           r   r   zStrongRandom.samplen   sž   € õ ˜*‘o”oˆØˆ{Š?ˆ?ÝÐ<Ñ=Ô=Ð=àˆØˆÝ�q‘”ð 	ð 	ˆAØˆAØ�)˜q H˜}˜}Ø—N’N ;Ñ/Ô/�ð �)˜q H˜}˜}à�MŠM˜* Qœ-Ñ(Ô(Ð(ØˆH�Q‰KˆKØˆr   )NN)
Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   © r   r   r   r      sŠ   € € € € € ðIð Ið Ið IðDð Dð Dð"ð "ð "ðBð ð ð-ð -ð -ð$ð $ð $ðð ð ð ð r   r   )r   r   Úlong_to_bytesr%   N)Ú__all__Ú
Cryptodomer
   ÚCryptodome.Util.py3compatr   Úobjectr   Ú_rr   r   r   r   r   r   ÚCryptodome.Util.numberr   r   rB   r%   rA   r   r   ú<module>rI      sÎ   ðð2 aÐ
`Ð
`€à Ð Ð Ð Ð Ð à 3Ð 3Ð 3Ð 3Ð 3Ð 3ð^ð ^ð ^ð ^ð ^�6ñ ^ô ^ð ^ð@ €\�^„^€ØŒn€ØŒL€	Ø
Œ*€Ø	Œ€Ø
Œ*€Ø	Œ€ð PÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ OÐ Or   