Your IP : 216.73.216.213
���^s � @ s� d Z d Z d d d d d d d g Z d d
l m Z d d l Z e j d d k rs e j d
d
k rs d d l TGd 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)zHA cryptographically strong version of Python's standard "random" module.z$Id$�StrongRandom�getrandbits� randrange�randint�choice�shuffle�sample� )�RandomN� � )�*c @ sj e Z d Z d d d d � Z d d � Z d d � Z d d � Z d
d � Z d d
� Z d d � Z d S)r Nc C s | d k r$ | d k r$ d | _ nW | d k rH | d k rH | | _ n3 | d k ro | d k ro | j | _ n t d � � d S)Nz(Cannot specify both 'rng' and 'randfunc')� _randfunc�read�
ValueError)�self�rngZrandfunc� r �G/opt/alt/python35/lib64/python3.5/site-packages/Crypto/Random/random.py�__init__$ s zStrongRandom.__init__c C sO | j d k r! t j � j | _ d | >d } | t | j t | d � � � @S)z0Return a python long integer with k random bits.Nr � )r
r �newr �
bytes_to_long�ceil_div)r �k�maskr r r r . s zStrongRandom.getrandbitsc G sf t | � d k r$ | \ } } } nj t | � d k rK | \ } } d } nC t | � d k ru | \ } d } d } n t d t | � f � � t | t � s� t | t � s� t | t � r� t d � � | d k r� t d � � t | | | � } | d k rd } | d k r,t d | | | f � � | } x% | | k rY| j t | � � } q5W| | | S) zkrandrange([start,] stop[, step]):
Return a randomly-selected element from range(start, stop, step).� r
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(%r, %r, %r))�len� TypeError�
isinstance�intr r r �size)r �args�start�stop�step�num_choices�rr r r r 5 s2 zStrongRandom.randrangec C sh t | t � s t | t � r, t d � � | j | | d � } | | k oY | k n sd t � | S)z0Return a random integer N such that a <= N <= b.z"randint requires integer argumentsr )r r r r �AssertionError)r �a�b�Nr r r r W s
"zStrongRandom.randintc C s5 t | � d k r t d � � | | j t | � � S)zrReturn a random element from a (non-empty) sequence.
If the seqence is empty, raises IndexError.
r zempty sequence)r �
IndexErrorr )r �seqr r r r _ s zStrongRandom.choicec C sO t | � } x<